CINXE.COM
Asian Bookies - Best Asian Betting Sites & Bookmakers in 2024
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Asian Bookies - Best Asian Betting Sites & Bookmakers in 2024</title> <link rel="icon" href="/wp-content/uploads/2022/11/favicon.svg" sizes="32x32"/> <link rel="icon" href="/wp-content/uploads/2022/11/favicon.svg" sizes="192x192"/> <link rel="apple-touch-icon" href="/wp-content/uploads/2022/11/favicon.svg"/> <meta name="msapplication-TileImage" content="/wp-content/uploads/2022/11/favicon.svg"/> <style> /* montserrat-regular - latin-ext_latin */ @font-face { font-family: 'Montserrat'; font-style: normal; font-weight: 400; font-display: swap; src: url('https://asian-bookies.net/wp-content/themes/bb/fonts/montserrat-v25-latin-ext_latin-regular.eot'); /* IE9 Compat Modes */ src: local(''), url('https://asian-bookies.net/wp-content/themes/bb/fonts/montserrat-v25-latin-ext_latin-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ url('https://asian-bookies.net/wp-content/themes/bb/fonts/montserrat-v25-latin-ext_latin-regular.woff2') format('woff2'), /* Super Modern Browsers */ url('https://asian-bookies.net/wp-content/themes/bb/fonts/montserrat-v25-latin-ext_latin-regular.woff') format('woff'), /* Modern Browsers */ url('https://asian-bookies.net/wp-content/themes/bb/fonts/montserrat-v25-latin-ext_latin-regular.ttf') format('truetype'), /* Safari, Android, iOS */ url('https://asian-bookies.net/wp-content/themes/bb/fonts/montserrat-v25-latin-ext_latin-regular.svg#Montserrat') format('svg'); /* Legacy iOS */ } /* montserrat-600 - latin-ext_latin */ @font-face { font-family: 'Montserrat'; font-style: normal; font-weight: 600; font-display: swap; src: url('https://asian-bookies.net/wp-content/themes/bb/fonts/montserrat-v25-latin-ext_latin-600.eot'); /* IE9 Compat Modes */ src: local(''), url('https://asian-bookies.net/wp-content/themes/bb/fonts/montserrat-v25-latin-ext_latin-600.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ url('https://asian-bookies.net/wp-content/themes/bb/fonts/montserrat-v25-latin-ext_latin-600.woff2') format('woff2'), /* Super Modern Browsers */ url('https://asian-bookies.net/wp-content/themes/bb/fonts/montserrat-v25-latin-ext_latin-600.woff') format('woff'), /* Modern Browsers */ url('https://asian-bookies.net/wp-content/themes/bb/fonts/montserrat-v25-latin-ext_latin-600.ttf') format('truetype'), /* Safari, Android, iOS */ url('https://asian-bookies.net/wp-content/themes/bb/fonts/montserrat-v25-latin-ext_latin-600.svg#Montserrat') format('svg'); /* Legacy iOS */ } /* montserrat-500 - latin-ext_latin */ @font-face { font-family: 'Montserrat'; font-style: normal; font-weight: 500; font-display: swap; src: url('https://asian-bookies.net/wp-content/themes/bb/fonts/montserrat-v25-latin-ext_latin-500.eot'); /* IE9 Compat Modes */ src: local(''), url('https://asian-bookies.net/wp-content/themes/bb/fonts/montserrat-v25-latin-ext_latin-500.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ url('https://asian-bookies.net/wp-content/themes/bb/fonts/montserrat-v25-latin-ext_latin-500.woff2') format('woff2'), /* Super Modern Browsers */ url('https://asian-bookies.net/wp-content/themes/bb/fonts/montserrat-v25-latin-ext_latin-500.woff') format('woff'), /* Modern Browsers */ url('https://asian-bookies.net/wp-content/themes/bb/fonts/montserrat-v25-latin-ext_latin-500.ttf') format('truetype'), /* Safari, Android, iOS */ url('https://asian-bookies.net/wp-content/themes/bb/fonts/montserrat-v25-latin-ext_latin-500.svg#Montserrat') format('svg'); /* Legacy iOS */ } /* montserrat-700 - latin-ext_latin */ @font-face { font-family: 'Montserrat'; font-style: normal; font-weight: 700; font-display: swap; src: url('https://asian-bookies.net/wp-content/themes/bb/fonts/montserrat-v25-latin-ext_latin-700.eot'); /* IE9 Compat Modes */ src: local(''), url('https://asian-bookies.net/wp-content/themes/bb/fonts/montserrat-v25-latin-ext_latin-700.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ url('https://asian-bookies.net/wp-content/themes/bb/fonts/montserrat-v25-latin-ext_latin-700.woff2') format('woff2'), /* Super Modern Browsers */ url('https://asian-bookies.net/wp-content/themes/bb/fonts/montserrat-v25-latin-ext_latin-700.woff') format('woff'), /* Modern Browsers */ url('https://asian-bookies.net/wp-content/themes/bb/fonts/montserrat-v25-latin-ext_latin-700.ttf') format('truetype'), /* Safari, Android, iOS */ url('https://asian-bookies.net/wp-content/themes/bb/fonts/montserrat-v25-latin-ext_latin-700.svg#Montserrat') format('svg'); /* Legacy iOS */ } </style> <link rel="dns-prefetch" href="https://www.google-analytics.com"> <link rel="preconnect" href="https://www.google-analytics.com"> <link rel="dns-prefetch" href="https://www.googletagmanager.com"> <link rel="dns-prefetch" href="https://www.googletagmanager.com"> <link rel="dns-prefetch" href="https://images.dmca.com"> <link rel="preconnect" href="https://images.dmca.com"> <meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' /> <style>img:is([sizes="auto" i], [sizes^="auto," i]) { contain-intrinsic-size: 3000px 1500px }</style> <link rel="alternate" href="https://asian-bookies.net/" hreflang="en" /> <link rel="alternate" href="https://asian-bookies.net/id/" hreflang="id" /> <link rel="alternate" href="https://asian-bookies.net/ja/" hreflang="ja" /> <link rel="alternate" href="https://asian-bookies.net/vi/" hreflang="vi" /> <link rel="alternate" href="https://asian-bookies.net/th/" hreflang="th" /> <link rel="alternate" href="https://asian-bookies.net/bn/" hreflang="bn" /> <link rel="alternate" href="https://asian-bookies.net/zh/" hreflang="zh" /> <link rel="alternate" href="https://asian-bookies.net/tl/" hreflang="tl" /> <link rel="alternate" href="https://asian-bookies.net/ta/" hreflang="ta" /> <link rel="alternate" href="https://asian-bookies.net/ko/" hreflang="ko" /> <link rel="alternate" href="https://asian-bookies.net/km/" hreflang="km" /> <link rel="alternate" href="https://asian-bookies.net/hi/" hreflang="hi" /> <link rel="alternate" href="https://asian-bookies.net/pa/" hreflang="pa" /> <link rel="alternate" href="https://asian-bookies.net/ur/" hreflang="ur" /> <!-- This site is optimized with the Yoast SEO plugin v24.5 - https://yoast.com/wordpress/plugins/seo/ --> <meta name="description" content="Find the Best Asian Bookies 2024 HERE! ⭐ Online Sports Betting in Asia with Fast Payouts & Big Bonuses! ✅ Reg&Bet with Asian Bookies!" /> <link rel="canonical" href="https://asian-bookies.net/" /> <meta property="og:locale" content="en_GB" /> <meta property="og:locale:alternate" content="id_ID" /> <meta property="og:locale:alternate" content="ja_JP" /> <meta property="og:locale:alternate" content="vi_VN" /> <meta property="og:locale:alternate" content="th_TH" /> <meta property="og:locale:alternate" content="bn_IN" /> <meta property="og:locale:alternate" content="zh_CN" /> <meta property="og:locale:alternate" content="tl_PH" /> <meta property="og:locale:alternate" content="ta_IN" /> <meta property="og:locale:alternate" content="ko_KR" /> <meta property="og:locale:alternate" content="km_KH" /> <meta property="og:locale:alternate" content="hi_IN" /> <meta property="og:locale:alternate" content="pa_IN" /> <meta property="og:locale:alternate" content="ur_PK" /> <meta property="og:type" content="website" /> <meta property="og:title" content="Asian Bookies - Best Asian Betting Sites & Bookmakers in 2024" /> <meta property="og:description" content="Find the Best Asian Bookies 2024 HERE! ⭐ Online Sports Betting in Asia with Fast Payouts & Big Bonuses! ✅ Reg&Bet with Asian Bookies!" /> <meta property="og:url" content="https://asian-bookies.net/" /> <meta property="og:site_name" content="96 Bets Asia" /> <meta property="article:publisher" content="https://www.facebook.com/AsianBookiesNet" /> <meta property="article:modified_time" content="2024-03-01T12:05:24+00:00" /> <meta property="og:image" content="https://asian-bookies.net/wp-content/uploads/2023/01/logo_black_tall.png" /> <meta property="og:image:width" content="350" /> <meta property="og:image:height" content="140" /> <meta property="og:image:type" content="image/png" /> <meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:site" content="@AsianBookiesNet" /> <script type="application/ld+json" class="yoast-schema-graph">{"@context":"https://schema.org","@graph":[{"@type":"WebPage","@id":"https://asian-bookies.net/","url":"https://asian-bookies.net/","name":"Asian Bookies - Best Asian Betting Sites & Bookmakers in 2024","isPartOf":{"@id":"https://asian-bookies.net/#website"},"about":{"@id":"https://asian-bookies.net/#organization"},"primaryImageOfPage":{"@id":"https://asian-bookies.net/#primaryimage"},"image":{"@id":"https://asian-bookies.net/#primaryimage"},"thumbnailUrl":"https://asian-bookies.net/wp-content/uploads/2023/01/logo_black_tall.png","datePublished":"2022-01-27T21:52:00+00:00","dateModified":"2024-03-01T12:05:24+00:00","description":"Find the Best Asian Bookies 2024 HERE! ⭐ Online Sports Betting in Asia with Fast Payouts & Big Bonuses! ✅ Reg&Bet with Asian Bookies!","breadcrumb":{"@id":"https://asian-bookies.net/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https://asian-bookies.net/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https://asian-bookies.net/#primaryimage","url":"https://asian-bookies.net/wp-content/uploads/2023/01/logo_black_tall.png","contentUrl":"https://asian-bookies.net/wp-content/uploads/2023/01/logo_black_tall.png","width":350,"height":140,"caption":"Asian betting sites"},{"@type":"BreadcrumbList","@id":"https://asian-bookies.net/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home"}]},{"@type":"WebSite","@id":"https://asian-bookies.net/#website","url":"https://asian-bookies.net/","name":"asian-bookies.net","description":"96 Bets Asia (Asian-Bookies.net)","publisher":{"@id":"https://asian-bookies.net/#organization"},"alternateName":"asian-bookies.net","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://asian-bookies.net/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Organization","@id":"https://asian-bookies.net/#organization","name":"Asian Bookies","alternateName":"asian-bookies.net","url":"https://asian-bookies.net/","logo":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https://asian-bookies.net/#/schema/logo/image/","url":"https://asian-bookies.net/wp-content/uploads/2023/03/logo_dark_purple_240-160.png","contentUrl":"https://asian-bookies.net/wp-content/uploads/2023/03/logo_dark_purple_240-160.png","width":240,"height":158,"caption":"Asian Bookies"},"image":{"@id":"https://asian-bookies.net/#/schema/logo/image/"},"sameAs":["https://www.facebook.com/AsianBookiesNet","https://x.com/AsianBookiesNet"]}]}</script> <!-- / Yoast SEO plugin. --> <script type="text/javascript"> /* <![CDATA[ */ window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.0.3\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.0.3\/svg\/","svgExt":".svg","source":{"concatemoji":"https:\/\/asian-bookies.net\/wp-includes\/js\/wp-emoji-release.min.js?ver=6.7.2"}}; /*! This file is auto-generated */ !function(i,n){var o,s,e;function c(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function p(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data),r=(e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0),new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data));return t.every(function(e,t){return e===r[t]})}function u(e,t,n){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\uddfa\ud83c\uddf3","\ud83c\uddfa\u200b\ud83c\uddf3")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!n(e,"\ud83d\udc26\u200d\u2b1b","\ud83d\udc26\u200b\u2b1b")}return!1}function f(e,t,n){var r="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):i.createElement("canvas"),a=r.getContext("2d",{willReadFrequently:!0}),o=(a.textBaseline="top",a.font="600 32px Arial",{});return e.forEach(function(e){o[e]=t(a,e,n)}),o}function t(e){var t=i.createElement("script");t.src=e,t.defer=!0,i.head.appendChild(t)}"undefined"!=typeof Promise&&(o="wpEmojiSettingsSupports",s=["flag","emoji"],n.supports={everything:!0,everythingExceptFlag:!0},e=new Promise(function(e){i.addEventListener("DOMContentLoaded",e,{once:!0})}),new Promise(function(t){var n=function(){try{var e=JSON.parse(sessionStorage.getItem(o));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(s),u.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"}),a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=function(e){c(n=e.data),a.terminate(),t(n)})}catch(e){}c(n=f(s,u,p))}t(n)}).then(function(e){for(var t in e)n.supports[t]=e[t],n.supports.everything=n.supports.everything&&n.supports[t],"flag"!==t&&(n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&n.supports[t]);n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&!n.supports.flag,n.DOMReady=!1,n.readyCallback=function(){n.DOMReady=!0}}).then(function(){return e}).then(function(){var e;n.supports.everything||(n.readyCallback(),(e=n.source||{}).concatemoji?t(e.concatemoji):e.wpemoji&&e.twemoji&&(t(e.twemoji),t(e.wpemoji)))}))}((window,document),window._wpemojiSettings); /* ]]> */ </script> <style id='wp-emoji-styles-inline-css' type='text/css'> img.wp-smiley, img.emoji { display: inline !important; border: none !important; box-shadow: none !important; height: 1em !important; width: 1em !important; margin: 0 0.07em !important; vertical-align: -0.1em !important; background: none !important; padding: 0 !important; } </style> <style id='safe-svg-svg-icon-style-inline-css' type='text/css'> .safe-svg-cover{text-align:center}.safe-svg-cover .safe-svg-inside{display:inline-block;max-width:100%}.safe-svg-cover svg{height:100%;max-height:100%;max-width:100%;width:100%} </style> <style id='classic-theme-styles-inline-css' type='text/css'> /*! This file is auto-generated */ .wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none} </style> <link rel='stylesheet' id='poka-review-vendor-css' href='https://asian-bookies.net/wp-content/plugins/poka-review/public/css/poka-review-vendor.min.css?ver=1.0.8' type='text/css' media='all' /> <link rel='stylesheet' id='poka-review-main-css' href='https://asian-bookies.net/wp-content/plugins/poka-review/public/css/poka-review-main.css?ver=1.0.8' type='text/css' media='all' /> <link rel='stylesheet' id='dashicons-css' href='https://asian-bookies.net/wp-includes/css/dashicons.min.css?ver=6.7.2' type='text/css' media='all' /> <link rel='stylesheet' id='swiper-css' href='https://asian-bookies.net/wp-content/themes/bb/dist/styles/swiper.css?ver=6.7.2' type='text/css' media='all' /> <link rel='stylesheet' id='styles-css' href='https://asian-bookies.net/wp-content/themes/bb/dist/styles/styles.min.css?v=67b8766fe3ec5&ver=6.7.2' type='text/css' media='all' /> <link rel="https://api.w.org/" href="https://asian-bookies.net/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://asian-bookies.net/wp-json/wp/v2/pages/9" /><!-- Advance Canonical URL (Basic) --><link rel="canonical" href="https://asian-bookies.net/"><!-- Advance Canonical URL --><script>document.createElement( "picture" );if(!window.HTMLPictureElement && document.addEventListener) {window.addEventListener("DOMContentLoaded", function() {var s = document.createElement("script");s.src = "https://asian-bookies.net/wp-content/plugins/webp-express/js/picturefill.min.js";document.body.appendChild(s);});}</script><style type="text/css">/** Wednesday 28th June 2023 12:36:15 UTC (core) **//** THIS FILE IS AUTOMATICALLY GENERATED - DO NOT MAKE MANUAL EDITS! **//** Custom CSS should be added to Mega Menu > Menu Themes > Custom Styling **/.mega-menu-last-modified-1687955775 { content: 'Wednesday 28th June 2023 12:36:15 UTC'; }#mega-menu-wrap-main_menu, #mega-menu-wrap-main_menu #mega-menu-main_menu, #mega-menu-wrap-main_menu #mega-menu-main_menu ul.mega-sub-menu, #mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-item, #mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-row, #mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-column, #mega-menu-wrap-main_menu #mega-menu-main_menu a.mega-menu-link, #mega-menu-wrap-main_menu #mega-menu-main_menu span.mega-menu-badge {transition: none;border-radius: 0;box-shadow: none;background: none;border: 0;bottom: auto;box-sizing: border-box;clip: auto;color: #666;display: block;float: none;font-family: inherit;font-size: 14px;height: auto;left: auto;line-height: 1.7;list-style-type: none;margin: 0;min-height: auto;max-height: none;min-width: auto;max-width: none;opacity: 1;outline: none;overflow: visible;padding: 0;position: relative;pointer-events: auto;right: auto;text-align: left;text-decoration: none;text-indent: 0;text-transform: none;transform: none;top: auto;vertical-align: baseline;visibility: inherit;width: auto;word-wrap: break-word;white-space: normal;}#mega-menu-wrap-main_menu:before, #mega-menu-wrap-main_menu #mega-menu-main_menu:before, #mega-menu-wrap-main_menu #mega-menu-main_menu ul.mega-sub-menu:before, #mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-item:before, #mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-row:before, #mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-column:before, #mega-menu-wrap-main_menu #mega-menu-main_menu a.mega-menu-link:before, #mega-menu-wrap-main_menu #mega-menu-main_menu span.mega-menu-badge:before, #mega-menu-wrap-main_menu:after, #mega-menu-wrap-main_menu #mega-menu-main_menu:after, #mega-menu-wrap-main_menu #mega-menu-main_menu ul.mega-sub-menu:after, #mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-item:after, #mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-row:after, #mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-column:after, #mega-menu-wrap-main_menu #mega-menu-main_menu a.mega-menu-link:after, #mega-menu-wrap-main_menu #mega-menu-main_menu span.mega-menu-badge:after {display: none;}#mega-menu-wrap-main_menu {border-radius: 0;}@media only screen and (min-width: 769px) {#mega-menu-wrap-main_menu {background: #222;}}#mega-menu-wrap-main_menu.mega-keyboard-navigation .mega-menu-toggle:focus, #mega-menu-wrap-main_menu.mega-keyboard-navigation .mega-toggle-block:focus, #mega-menu-wrap-main_menu.mega-keyboard-navigation .mega-toggle-block a:focus, #mega-menu-wrap-main_menu.mega-keyboard-navigation .mega-toggle-block .mega-search input[type=text]:focus, #mega-menu-wrap-main_menu.mega-keyboard-navigation .mega-toggle-block button.mega-toggle-animated:focus, #mega-menu-wrap-main_menu.mega-keyboard-navigation #mega-menu-main_menu a:focus, #mega-menu-wrap-main_menu.mega-keyboard-navigation #mega-menu-main_menu span:focus, #mega-menu-wrap-main_menu.mega-keyboard-navigation #mega-menu-main_menu input:focus, #mega-menu-wrap-main_menu.mega-keyboard-navigation #mega-menu-main_menu li.mega-menu-item a.mega-menu-link:focus {outline: 3px solid #109cde;outline-offset: -3px;}#mega-menu-wrap-main_menu.mega-keyboard-navigation .mega-toggle-block button.mega-toggle-animated:focus {outline-offset: 2px;}#mega-menu-wrap-main_menu.mega-keyboard-navigation > li.mega-menu-item > a.mega-menu-link:focus {background: #333;color: #fff;font-weight: normal;text-decoration: none;border-color: #fff;}@media only screen and (max-width: 768px) {#mega-menu-wrap-main_menu.mega-keyboard-navigation > li.mega-menu-item > a.mega-menu-link:focus {color: #fff;background: #333;}}#mega-menu-wrap-main_menu #mega-menu-main_menu {visibility: visible;text-align: left;padding: 0px 0px 0px 0px;}#mega-menu-wrap-main_menu #mega-menu-main_menu a.mega-menu-link {cursor: pointer;display: inline;}#mega-menu-wrap-main_menu #mega-menu-main_menu a.mega-menu-link .mega-description-group {vertical-align: middle;display: inline-block;transition: none;}#mega-menu-wrap-main_menu #mega-menu-main_menu a.mega-menu-link .mega-description-group .mega-menu-title, #mega-menu-wrap-main_menu #mega-menu-main_menu a.mega-menu-link .mega-description-group .mega-menu-description {transition: none;line-height: 1.5;display: block;}#mega-menu-wrap-main_menu #mega-menu-main_menu a.mega-menu-link .mega-description-group .mega-menu-description {font-style: italic;font-size: 0.8em;text-transform: none;font-weight: normal;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu li.mega-menu-item.mega-icon-left.mega-has-description.mega-has-icon > a.mega-menu-link {display: flex;align-items: center;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu li.mega-menu-item.mega-icon-left.mega-has-description.mega-has-icon > a.mega-menu-link:before {flex: 0 0 auto;align-self: flex-start;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-tabbed.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-item.mega-icon-left.mega-has-description.mega-has-icon > a.mega-menu-link {display: block;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-item.mega-icon-top > a.mega-menu-link {display: table-cell;vertical-align: middle;line-height: initial;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-item.mega-icon-top > a.mega-menu-link:before {display: block;margin: 0 0 6px 0;text-align: center;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-item.mega-icon-top > a.mega-menu-link > span.mega-title-below {display: inline-block;transition: none;}@media only screen and (max-width: 768px) {#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-item.mega-icon-top > a.mega-menu-link {display: block;line-height: 40px;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-item.mega-icon-top > a.mega-menu-link:before {display: inline-block;margin: 0 6px 0 0;text-align: left;}}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-item.mega-icon-right > a.mega-menu-link:before {float: right;margin: 0 0 0 6px;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-animating > ul.mega-sub-menu {pointer-events: none;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-disable-link > a.mega-menu-link, #mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu li.mega-disable-link > a.mega-menu-link {cursor: inherit;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-item-has-children.mega-disable-link > a.mega-menu-link, #mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > li.mega-menu-item-has-children.mega-disable-link > a.mega-menu-link {cursor: pointer;}#mega-menu-wrap-main_menu #mega-menu-main_menu p {margin-bottom: 10px;}#mega-menu-wrap-main_menu #mega-menu-main_menu input, #mega-menu-wrap-main_menu #mega-menu-main_menu img {max-width: 100%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-item > ul.mega-sub-menu {display: block;visibility: hidden;opacity: 1;pointer-events: auto;}@media only screen and (max-width: 768px) {#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-item > ul.mega-sub-menu {display: none;visibility: visible;opacity: 1;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-item.mega-toggle-on > ul.mega-sub-menu, #mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu.mega-menu-item.mega-toggle-on ul.mega-sub-menu {display: block;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu.mega-menu-item.mega-toggle-on li.mega-hide-sub-menu-on-mobile > ul.mega-sub-menu, #mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-hide-sub-menu-on-mobile > ul.mega-sub-menu {display: none;}}@media only screen and (min-width: 769px) {#mega-menu-wrap-main_menu #mega-menu-main_menu[data-effect="fade"] li.mega-menu-item > ul.mega-sub-menu {opacity: 0;transition: opacity 200ms ease-in, visibility 200ms ease-in;}#mega-menu-wrap-main_menu #mega-menu-main_menu[data-effect="fade"].mega-no-js li.mega-menu-item:hover > ul.mega-sub-menu, #mega-menu-wrap-main_menu #mega-menu-main_menu[data-effect="fade"].mega-no-js li.mega-menu-item:focus > ul.mega-sub-menu, #mega-menu-wrap-main_menu #mega-menu-main_menu[data-effect="fade"] li.mega-menu-item.mega-toggle-on > ul.mega-sub-menu, #mega-menu-wrap-main_menu #mega-menu-main_menu[data-effect="fade"] li.mega-menu-item.mega-menu-megamenu.mega-toggle-on ul.mega-sub-menu {opacity: 1;}#mega-menu-wrap-main_menu #mega-menu-main_menu[data-effect="fade_up"] li.mega-menu-item.mega-menu-megamenu > ul.mega-sub-menu, #mega-menu-wrap-main_menu #mega-menu-main_menu[data-effect="fade_up"] li.mega-menu-item.mega-menu-flyout ul.mega-sub-menu {opacity: 0;transform: translate(0, 10px);transition: opacity 200ms ease-in, transform 200ms ease-in, visibility 200ms ease-in;}#mega-menu-wrap-main_menu #mega-menu-main_menu[data-effect="fade_up"].mega-no-js li.mega-menu-item:hover > ul.mega-sub-menu, #mega-menu-wrap-main_menu #mega-menu-main_menu[data-effect="fade_up"].mega-no-js li.mega-menu-item:focus > ul.mega-sub-menu, #mega-menu-wrap-main_menu #mega-menu-main_menu[data-effect="fade_up"] li.mega-menu-item.mega-toggle-on > ul.mega-sub-menu, #mega-menu-wrap-main_menu #mega-menu-main_menu[data-effect="fade_up"] li.mega-menu-item.mega-menu-megamenu.mega-toggle-on ul.mega-sub-menu {opacity: 1;transform: translate(0, 0);}#mega-menu-wrap-main_menu #mega-menu-main_menu[data-effect="slide_up"] li.mega-menu-item.mega-menu-megamenu > ul.mega-sub-menu, #mega-menu-wrap-main_menu #mega-menu-main_menu[data-effect="slide_up"] li.mega-menu-item.mega-menu-flyout ul.mega-sub-menu {transform: translate(0, 10px);transition: transform 200ms ease-in, visibility 200ms ease-in;}#mega-menu-wrap-main_menu #mega-menu-main_menu[data-effect="slide_up"].mega-no-js li.mega-menu-item:hover > ul.mega-sub-menu, #mega-menu-wrap-main_menu #mega-menu-main_menu[data-effect="slide_up"].mega-no-js li.mega-menu-item:focus > ul.mega-sub-menu, #mega-menu-wrap-main_menu #mega-menu-main_menu[data-effect="slide_up"] li.mega-menu-item.mega-toggle-on > ul.mega-sub-menu, #mega-menu-wrap-main_menu #mega-menu-main_menu[data-effect="slide_up"] li.mega-menu-item.mega-menu-megamenu.mega-toggle-on ul.mega-sub-menu {transform: translate(0, 0);}}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-item.mega-menu-megamenu ul.mega-sub-menu li.mega-collapse-children > ul.mega-sub-menu {display: none;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-item.mega-menu-megamenu ul.mega-sub-menu li.mega-collapse-children.mega-toggle-on > ul.mega-sub-menu {display: block;}#mega-menu-wrap-main_menu #mega-menu-main_menu.mega-no-js li.mega-menu-item:hover > ul.mega-sub-menu, #mega-menu-wrap-main_menu #mega-menu-main_menu.mega-no-js li.mega-menu-item:focus > ul.mega-sub-menu, #mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-item.mega-toggle-on > ul.mega-sub-menu {visibility: visible;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-item.mega-menu-megamenu ul.mega-sub-menu ul.mega-sub-menu {visibility: inherit;opacity: 1;display: block;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-item.mega-menu-megamenu ul.mega-sub-menu li.mega-1-columns > ul.mega-sub-menu > li.mega-menu-item {float: left;width: 100%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-item.mega-menu-megamenu ul.mega-sub-menu li.mega-2-columns > ul.mega-sub-menu > li.mega-menu-item {float: left;width: 50%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-item.mega-menu-megamenu ul.mega-sub-menu li.mega-3-columns > ul.mega-sub-menu > li.mega-menu-item {float: left;width: 33.33333%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-item.mega-menu-megamenu ul.mega-sub-menu li.mega-4-columns > ul.mega-sub-menu > li.mega-menu-item {float: left;width: 25%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-item.mega-menu-megamenu ul.mega-sub-menu li.mega-5-columns > ul.mega-sub-menu > li.mega-menu-item {float: left;width: 20%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-item.mega-menu-megamenu ul.mega-sub-menu li.mega-6-columns > ul.mega-sub-menu > li.mega-menu-item {float: left;width: 16.66667%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-item a[class^='dashicons']:before {font-family: dashicons;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-item a.mega-menu-link:before {display: inline-block;font: inherit;font-family: dashicons;position: static;margin: 0 6px 0 0px;vertical-align: top;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;color: inherit;background: transparent;height: auto;width: auto;top: auto;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-item.mega-hide-text a.mega-menu-link:before {margin: 0;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-item.mega-hide-text li.mega-menu-item a.mega-menu-link:before {margin: 0 6px 0 0;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-align-bottom-left.mega-toggle-on > a.mega-menu-link {border-radius: 0;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-align-bottom-right > ul.mega-sub-menu {right: 0;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-align-bottom-right.mega-toggle-on > a.mega-menu-link {border-radius: 0;}@media only screen and (min-width: 769px) {#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu.mega-menu-item {position: static;}}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-item {margin: 0 0px 0 0;display: inline-block;height: auto;vertical-align: middle;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-item.mega-item-align-right {float: right;}@media only screen and (min-width: 769px) {#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-item.mega-item-align-right {margin: 0 0 0 0px;}}@media only screen and (min-width: 769px) {#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-item.mega-item-align-float-left {float: left;}}@media only screen and (min-width: 769px) {#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-item > a.mega-menu-link:hover, #mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-item > a.mega-menu-link:focus {background: #333;color: #fff;font-weight: normal;text-decoration: none;border-color: #fff;}}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-item.mega-toggle-on > a.mega-menu-link {background: #333;color: #fff;font-weight: normal;text-decoration: none;border-color: #fff;}@media only screen and (max-width: 768px) {#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-item.mega-toggle-on > a.mega-menu-link {color: #fff;background: #333;}}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-item.mega-current-menu-item > a.mega-menu-link, #mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-item.mega-current-menu-ancestor > a.mega-menu-link, #mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-item.mega-current-page-ancestor > a.mega-menu-link {background: #333;color: #fff;font-weight: normal;text-decoration: none;border-color: #fff;}@media only screen and (max-width: 768px) {#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-item.mega-current-menu-item > a.mega-menu-link, #mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-item.mega-current-menu-ancestor > a.mega-menu-link, #mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-item.mega-current-page-ancestor > a.mega-menu-link {color: #fff;background: #333;}}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-item > a.mega-menu-link {line-height: 40px;height: 40px;padding: 0px 10px 0px 10px;vertical-align: baseline;width: auto;display: block;color: #fff;text-transform: none;text-decoration: none;text-align: left;background: rgba(0, 0, 0, 0);border: 0;border-radius: 0;font-family: inherit;font-size: 14px;font-weight: normal;outline: none;}@media only screen and (min-width: 769px) {#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-item.mega-multi-line > a.mega-menu-link {line-height: inherit;display: table-cell;vertical-align: middle;}}@media only screen and (max-width: 768px) {#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-item.mega-multi-line > a.mega-menu-link br {display: none;}}@media only screen and (max-width: 768px) {#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-item {display: list-item;margin: 0;clear: both;border: 0;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-item.mega-item-align-right {float: none;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-item > a.mega-menu-link {border-radius: 0;border: 0;margin: 0;line-height: 40px;height: 40px;padding: 0 10px;background: transparent;text-align: left;color: #fff;font-size: 14px;}}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row {width: 100%;float: left;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row .mega-menu-column {float: left;min-height: 1px;}@media only screen and (min-width: 769px) {#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-1-of-1 {width: 100%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-1-of-2 {width: 50%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-2-of-2 {width: 100%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-1-of-3 {width: 33.33333%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-2-of-3 {width: 66.66667%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-3-of-3 {width: 100%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-1-of-4 {width: 25%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-2-of-4 {width: 50%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-3-of-4 {width: 75%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-4-of-4 {width: 100%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-1-of-5 {width: 20%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-2-of-5 {width: 40%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-3-of-5 {width: 60%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-4-of-5 {width: 80%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-5-of-5 {width: 100%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-1-of-6 {width: 16.66667%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-2-of-6 {width: 33.33333%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-3-of-6 {width: 50%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-4-of-6 {width: 66.66667%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-5-of-6 {width: 83.33333%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-6-of-6 {width: 100%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-1-of-7 {width: 14.28571%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-2-of-7 {width: 28.57143%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-3-of-7 {width: 42.85714%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-4-of-7 {width: 57.14286%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-5-of-7 {width: 71.42857%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-6-of-7 {width: 85.71429%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-7-of-7 {width: 100%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-1-of-8 {width: 12.5%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-2-of-8 {width: 25%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-3-of-8 {width: 37.5%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-4-of-8 {width: 50%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-5-of-8 {width: 62.5%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-6-of-8 {width: 75%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-7-of-8 {width: 87.5%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-8-of-8 {width: 100%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-1-of-9 {width: 11.11111%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-2-of-9 {width: 22.22222%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-3-of-9 {width: 33.33333%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-4-of-9 {width: 44.44444%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-5-of-9 {width: 55.55556%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-6-of-9 {width: 66.66667%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-7-of-9 {width: 77.77778%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-8-of-9 {width: 88.88889%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-9-of-9 {width: 100%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-1-of-10 {width: 10%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-2-of-10 {width: 20%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-3-of-10 {width: 30%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-4-of-10 {width: 40%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-5-of-10 {width: 50%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-6-of-10 {width: 60%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-7-of-10 {width: 70%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-8-of-10 {width: 80%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-9-of-10 {width: 90%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-10-of-10 {width: 100%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-1-of-11 {width: 9.09091%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-2-of-11 {width: 18.18182%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-3-of-11 {width: 27.27273%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-4-of-11 {width: 36.36364%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-5-of-11 {width: 45.45455%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-6-of-11 {width: 54.54545%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-7-of-11 {width: 63.63636%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-8-of-11 {width: 72.72727%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-9-of-11 {width: 81.81818%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-10-of-11 {width: 90.90909%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-11-of-11 {width: 100%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-1-of-12 {width: 8.33333%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-2-of-12 {width: 16.66667%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-3-of-12 {width: 25%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-4-of-12 {width: 33.33333%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-5-of-12 {width: 41.66667%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-6-of-12 {width: 50%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-7-of-12 {width: 58.33333%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-8-of-12 {width: 66.66667%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-9-of-12 {width: 75%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-10-of-12 {width: 83.33333%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-11-of-12 {width: 91.66667%;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-columns-12-of-12 {width: 100%;}}@media only screen and (max-width: 768px) {#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row > ul.mega-sub-menu > li.mega-menu-column {width: 100%;clear: both;}}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-row .mega-menu-column > ul.mega-sub-menu > li.mega-menu-item {padding: 15px 15px 15px 15px;width: 100%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu {z-index: 999;border-radius: 0;background: #f1f1f1;border: 0;padding: 0px 0px 0px 0px;position: absolute;width: 100%;max-width: none;left: 0;}@media only screen and (max-width: 768px) {#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu {float: left;position: static;width: 100%;}}@media only screen and (min-width: 769px) {#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-1-of-1 {width: 100%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-1-of-2 {width: 50%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-2-of-2 {width: 100%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-1-of-3 {width: 33.33333%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-2-of-3 {width: 66.66667%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-3-of-3 {width: 100%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-1-of-4 {width: 25%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-2-of-4 {width: 50%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-3-of-4 {width: 75%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-4-of-4 {width: 100%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-1-of-5 {width: 20%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-2-of-5 {width: 40%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-3-of-5 {width: 60%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-4-of-5 {width: 80%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-5-of-5 {width: 100%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-1-of-6 {width: 16.66667%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-2-of-6 {width: 33.33333%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-3-of-6 {width: 50%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-4-of-6 {width: 66.66667%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-5-of-6 {width: 83.33333%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-6-of-6 {width: 100%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-1-of-7 {width: 14.28571%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-2-of-7 {width: 28.57143%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-3-of-7 {width: 42.85714%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-4-of-7 {width: 57.14286%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-5-of-7 {width: 71.42857%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-6-of-7 {width: 85.71429%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-7-of-7 {width: 100%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-1-of-8 {width: 12.5%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-2-of-8 {width: 25%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-3-of-8 {width: 37.5%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-4-of-8 {width: 50%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-5-of-8 {width: 62.5%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-6-of-8 {width: 75%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-7-of-8 {width: 87.5%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-8-of-8 {width: 100%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-1-of-9 {width: 11.11111%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-2-of-9 {width: 22.22222%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-3-of-9 {width: 33.33333%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-4-of-9 {width: 44.44444%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-5-of-9 {width: 55.55556%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-6-of-9 {width: 66.66667%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-7-of-9 {width: 77.77778%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-8-of-9 {width: 88.88889%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-9-of-9 {width: 100%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-1-of-10 {width: 10%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-2-of-10 {width: 20%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-3-of-10 {width: 30%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-4-of-10 {width: 40%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-5-of-10 {width: 50%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-6-of-10 {width: 60%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-7-of-10 {width: 70%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-8-of-10 {width: 80%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-9-of-10 {width: 90%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-10-of-10 {width: 100%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-1-of-11 {width: 9.09091%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-2-of-11 {width: 18.18182%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-3-of-11 {width: 27.27273%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-4-of-11 {width: 36.36364%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-5-of-11 {width: 45.45455%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-6-of-11 {width: 54.54545%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-7-of-11 {width: 63.63636%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-8-of-11 {width: 72.72727%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-9-of-11 {width: 81.81818%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-10-of-11 {width: 90.90909%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-11-of-11 {width: 100%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-1-of-12 {width: 8.33333%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-2-of-12 {width: 16.66667%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-3-of-12 {width: 25%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-4-of-12 {width: 33.33333%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-5-of-12 {width: 41.66667%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-6-of-12 {width: 50%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-7-of-12 {width: 58.33333%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-8-of-12 {width: 66.66667%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-9-of-12 {width: 75%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-10-of-12 {width: 83.33333%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-11-of-12 {width: 91.66667%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-columns-12-of-12 {width: 100%;}}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu .mega-description-group .mega-menu-description {margin: 5px 0;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-item ul.mega-sub-menu {clear: both;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-item ul.mega-sub-menu li.mega-menu-item ul.mega-sub-menu {margin-left: 10px;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu ul.mega-sub-menu ul.mega-sub-menu {margin-left: 10px;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-item, #mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item {color: #666;font-family: inherit;font-size: 14px;display: block;float: left;clear: none;padding: 15px 15px 15px 15px;vertical-align: top;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-item.mega-menu-clear, #mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item.mega-menu-clear {clear: left;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-item h4.mega-block-title, #mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item h4.mega-block-title {color: #555;font-family: inherit;font-size: 16px;text-transform: uppercase;text-decoration: none;font-weight: bold;text-align: left;margin: 0px 0px 0px 0px;padding: 0px 0px 5px 0px;vertical-align: top;display: block;visibility: inherit;border: 0;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-item h4.mega-block-title:hover, #mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item h4.mega-block-title:hover {border-color: rgba(0, 0, 0, 0);}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link, #mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link {/* Mega Menu > Menu Themes > Mega Menus > Second Level Menu Items */color: #555;font-family: inherit;font-size: 16px;text-transform: uppercase;text-decoration: none;font-weight: bold;text-align: left;margin: 0px 0px 0px 0px;padding: 0px 0px 0px 0px;vertical-align: top;display: block;border: 0;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link:hover, #mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link:hover {border-color: rgba(0, 0, 0, 0);}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link:hover, #mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link:hover, #mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link:focus, #mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link:focus {/* Mega Menu > Menu Themes > Mega Menus > Second Level Menu Items (Hover) */color: #555;font-weight: bold;text-decoration: none;background: rgba(0, 0, 0, 0);}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link:hover > span.mega-title-below, #mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link:hover > span.mega-title-below, #mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link:focus > span.mega-title-below, #mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link:focus > span.mega-title-below {text-decoration: none;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-item li.mega-menu-item > a.mega-menu-link, #mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item li.mega-menu-item > a.mega-menu-link {/* Mega Menu > Menu Themes > Mega Menus > Third Level Menu Items */color: #666;font-family: inherit;font-size: 14px;text-transform: none;text-decoration: none;font-weight: normal;text-align: left;margin: 0px 0px 0px 0px;padding: 0px 0px 0px 0px;vertical-align: top;display: block;border: 0;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-item li.mega-menu-item > a.mega-menu-link:hover, #mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item li.mega-menu-item > a.mega-menu-link:hover {border-color: rgba(0, 0, 0, 0);}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-item li.mega-menu-item.mega-icon-left.mega-has-description.mega-has-icon > a.mega-menu-link, #mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item li.mega-menu-item.mega-icon-left.mega-has-description.mega-has-icon > a.mega-menu-link {display: flex;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-item li.mega-menu-item > a.mega-menu-link:hover, #mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item li.mega-menu-item > a.mega-menu-link:hover, #mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-item li.mega-menu-item > a.mega-menu-link:focus, #mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item li.mega-menu-item > a.mega-menu-link:focus {/* Mega Menu > Menu Themes > Mega Menus > Third Level Menu Items (Hover) */color: #666;font-weight: normal;text-decoration: none;background: rgba(0, 0, 0, 0);}@media only screen and (max-width: 768px) {#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu {border: 0;padding: 10px;border-radius: 0;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-menu-item {width: 100%;clear: both;}}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu.mega-no-headers > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link, #mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu.mega-no-headers > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link {color: #666;font-family: inherit;font-size: 14px;text-transform: none;text-decoration: none;font-weight: normal;margin: 0;border: 0;padding: 0px 0px 0px 0px;vertical-align: top;display: block;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu.mega-no-headers > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link:hover, #mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu.mega-no-headers > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link:focus, #mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu.mega-no-headers > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link:hover, #mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu.mega-no-headers > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item > a.mega-menu-link:focus {color: #666;font-weight: normal;text-decoration: none;background: rgba(0, 0, 0, 0);}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-flyout ul.mega-sub-menu {z-index: 999;position: absolute;width: 250px;max-width: none;padding: 0px 0px 0px 0px;border: 0;background: #f1f1f1;border-radius: 0;}@media only screen and (max-width: 768px) {#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-flyout ul.mega-sub-menu {float: left;position: static;width: 100%;padding: 0;border: 0;border-radius: 0;}}@media only screen and (max-width: 768px) {#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-flyout ul.mega-sub-menu li.mega-menu-item {clear: both;}}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-flyout ul.mega-sub-menu li.mega-menu-item a.mega-menu-link {display: block;background: #f1f1f1;color: #666;font-family: inherit;font-size: 14px;font-weight: normal;padding: 0px 10px 0px 10px;line-height: 35px;text-decoration: none;text-transform: none;vertical-align: baseline;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-flyout ul.mega-sub-menu li.mega-menu-item:first-child > a.mega-menu-link {border-top-left-radius: 0px;border-top-right-radius: 0px;}@media only screen and (max-width: 768px) {#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-flyout ul.mega-sub-menu li.mega-menu-item:first-child > a.mega-menu-link {border-top-left-radius: 0;border-top-right-radius: 0;}}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-flyout ul.mega-sub-menu li.mega-menu-item:last-child > a.mega-menu-link {border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;}@media only screen and (max-width: 768px) {#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-flyout ul.mega-sub-menu li.mega-menu-item:last-child > a.mega-menu-link {border-bottom-right-radius: 0;border-bottom-left-radius: 0;}}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-flyout ul.mega-sub-menu li.mega-menu-item a.mega-menu-link:hover, #mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-flyout ul.mega-sub-menu li.mega-menu-item a.mega-menu-link:focus {background: #ddd;font-weight: normal;text-decoration: none;color: #666;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-flyout ul.mega-sub-menu li.mega-menu-item ul.mega-sub-menu {position: absolute;left: 100%;top: 0;}@media only screen and (max-width: 768px) {#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-flyout ul.mega-sub-menu li.mega-menu-item ul.mega-sub-menu {position: static;left: 0;width: 100%;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-flyout ul.mega-sub-menu li.mega-menu-item ul.mega-sub-menu a.mega-menu-link {padding-left: 20px;}#mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-flyout ul.mega-sub-menu li.mega-menu-item ul.mega-sub-menu ul.mega-sub-menu a.mega-menu-link {padding-left: 30px;}}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-item-has-children > a.mega-menu-link > span.mega-indicator {display: inline-block;width: auto;background: transparent;position: relative;pointer-events: auto;left: auto;min-width: auto;font-size: inherit;padding: 0;margin: 0 0 0 6px;height: auto;line-height: inherit;color: inherit;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-item-has-children > a.mega-menu-link > span.mega-indicator:after {content: '\f140';font-family: dashicons;font-weight: normal;display: inline-block;margin: 0;vertical-align: top;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;transform: rotate(0);color: inherit;position: relative;background: transparent;height: auto;width: auto;right: auto;line-height: inherit;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-item-has-children li.mega-menu-item-has-children > a.mega-menu-link > span.mega-indicator {float: right;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-item-has-children.mega-collapse-children.mega-toggle-on > a.mega-menu-link > span.mega-indicator:after {content: '\f142';}@media only screen and (max-width: 768px) {#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-item-has-children > a.mega-menu-link > span.mega-indicator {float: right;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-item-has-children.mega-toggle-on > a.mega-menu-link > span.mega-indicator:after {content: '\f142';}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-item-has-children.mega-hide-sub-menu-on-mobile > a.mega-menu-link > span.mega-indicator {display: none;}}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-megamenu:not(.mega-menu-tabbed) li.mega-menu-item-has-children:not(.mega-collapse-children) > a.mega-menu-link > span.mega-indicator, #mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-item-has-children.mega-hide-arrow > a.mega-menu-link > span.mega-indicator {display: none;}@media only screen and (min-width: 769px) {#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-flyout li.mega-menu-item a.mega-menu-link > span.mega-indicator:after {content: '\f139';}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-flyout.mega-align-bottom-right li.mega-menu-item a.mega-menu-link {text-align: right;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-flyout.mega-align-bottom-right li.mega-menu-item a.mega-menu-link > span.mega-indicator {float: left;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-flyout.mega-align-bottom-right li.mega-menu-item a.mega-menu-link > span.mega-indicator:after {content: '\f141';margin: 0 6px 0 0;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-flyout.mega-align-bottom-right li.mega-menu-item a.mega-menu-link:before {float: right;margin: 0 0 0 6px;}#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-menu-flyout.mega-align-bottom-right ul.mega-sub-menu li.mega-menu-item ul.mega-sub-menu {left: -100%;top: 0;}}#mega-menu-wrap-main_menu #mega-menu-main_menu li[class^='mega-lang-item'] > a.mega-menu-link > img {display: inline;}#mega-menu-wrap-main_menu #mega-menu-main_menu a.mega-menu-link > img.wpml-ls-flag, #mega-menu-wrap-main_menu #mega-menu-main_menu a.mega-menu-link > img.iclflag {display: inline;margin-right: 8px;}@media only screen and (max-width: 768px) {#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-hide-on-mobile, #mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-hide-on-mobile, #mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item.mega-hide-on-mobile {display: none;}}@media only screen and (min-width: 769px) {#mega-menu-wrap-main_menu #mega-menu-main_menu li.mega-hide-on-desktop, #mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu > li.mega-hide-on-desktop, #mega-menu-wrap-main_menu #mega-menu-main_menu > li.mega-menu-megamenu > ul.mega-sub-menu li.mega-menu-column > ul.mega-sub-menu > li.mega-menu-item.mega-hide-on-desktop {display: none;}}@media only screen and (max-width: 768px) {#mega-menu-wrap-main_menu:after {content: "";display: table;clear: both;}}#mega-menu-wrap-main_menu .mega-menu-toggle {display: none;z-index: 1;cursor: pointer;background: #222;border-radius: 2px 2px 2px 2px;line-height: 40px;height: 40px;text-align: left;user-select: none;-webkit-tap-highlight-color: transparent;outline: none;white-space: nowrap;}#mega-menu-wrap-main_menu .mega-menu-toggle img {max-width: 100%;padding: 0;}@media only screen and (max-width: 768px) {#mega-menu-wrap-main_menu .mega-menu-toggle {display: -webkit-box;display: -ms-flexbox;display: -webkit-flex;display: flex;}}#mega-menu-wrap-main_menu .mega-menu-toggle .mega-toggle-blocks-left, #mega-menu-wrap-main_menu .mega-menu-toggle .mega-toggle-blocks-center, #mega-menu-wrap-main_menu .mega-menu-toggle .mega-toggle-blocks-right {display: -webkit-box;display: -ms-flexbox;display: -webkit-flex;display: flex;-ms-flex-preferred-size: 33.33%;-webkit-flex-basis: 33.33%;flex-basis: 33.33%;}#mega-menu-wrap-main_menu .mega-menu-toggle .mega-toggle-blocks-left {-webkit-box-flex: 1;-ms-flex: 1;-webkit-flex: 1;flex: 1;-webkit-box-pack: start;-ms-flex-pack: start;-webkit-justify-content: flex-start;justify-content: flex-start;}#mega-menu-wrap-main_menu .mega-menu-toggle .mega-toggle-blocks-left .mega-toggle-block {margin-left: 6px;}#mega-menu-wrap-main_menu .mega-menu-toggle .mega-toggle-blocks-left .mega-toggle-block:only-child {margin-right: 6px;}#mega-menu-wrap-main_menu .mega-menu-toggle .mega-toggle-blocks-center {-webkit-box-pack: center;-ms-flex-pack: center;-webkit-justify-content: center;justify-content: center;}#mega-menu-wrap-main_menu .mega-menu-toggle .mega-toggle-blocks-center .mega-toggle-block {margin-left: 3px;margin-right: 3px;}#mega-menu-wrap-main_menu .mega-menu-toggle .mega-toggle-blocks-right {-webkit-box-flex: 1;-ms-flex: 1;-webkit-flex: 1;flex: 1;-webkit-box-pack: end;-ms-flex-pack: end;-webkit-justify-content: flex-end;justify-content: flex-end;}#mega-menu-wrap-main_menu .mega-menu-toggle .mega-toggle-blocks-right .mega-toggle-block {margin-right: 6px;}#mega-menu-wrap-main_menu .mega-menu-toggle .mega-toggle-blocks-right .mega-toggle-block:only-child {margin-left: 6px;}#mega-menu-wrap-main_menu .mega-menu-toggle .mega-toggle-block {display: -webkit-box;display: -ms-flexbox;display: -webkit-flex;display: flex;height: 100%;outline: 0;-webkit-align-self: center;-ms-flex-item-align: center;align-self: center;-ms-flex-negative: 0;-webkit-flex-shrink: 0;flex-shrink: 0;}@media only screen and (max-width: 768px) {#mega-menu-wrap-main_menu .mega-menu-toggle + #mega-menu-main_menu {background: #222;padding: 0px 0px 0px 0px;display: none;}#mega-menu-wrap-main_menu .mega-menu-toggle.mega-menu-open + #mega-menu-main_menu {display: block;}}#mega-menu-wrap-main_menu .mega-menu-toggle {/** Push menu onto new line **/}#mega-menu-wrap-main_menu .mega-menu-toggle .mega-toggle-block-0 {/*! * Hamburgers * @description Tasty CSS-animated hamburgers * @author Jonathan Suh @jonsuh * @site https://jonsuh.com/hamburgers * @link https://github.com/jonsuh/hamburgers */cursor: pointer;}#mega-menu-wrap-main_menu .mega-menu-toggle .mega-toggle-block-0 .mega-toggle-animated {padding: 0;display: -webkit-box;display: -ms-flexbox;display: -webkit-flex;display: flex;cursor: pointer;transition-property: opacity, filter;transition-duration: 0.15s;transition-timing-function: linear;font: inherit;color: inherit;text-transform: none;background-color: transparent;border: 0;margin: 0;overflow: visible;transform: scale(0.8);align-self: center;outline: 0;background: none;}#mega-menu-wrap-main_menu .mega-menu-toggle .mega-toggle-block-0 .mega-toggle-animated-box {width: 40px;height: 24px;display: inline-block;position: relative;outline: 0;}#mega-menu-wrap-main_menu .mega-menu-toggle .mega-toggle-block-0 .mega-toggle-animated-inner {display: block;top: 50%;margin-top: -2px;}#mega-menu-wrap-main_menu .mega-menu-toggle .mega-toggle-block-0 .mega-toggle-animated-inner, #mega-menu-wrap-main_menu .mega-menu-toggle .mega-toggle-block-0 .mega-toggle-animated-inner::before, #mega-menu-wrap-main_menu .mega-menu-toggle .mega-toggle-block-0 .mega-toggle-animated-inner::after {width: 40px;height: 4px;background-color: #ddd;border-radius: 4px;position: absolute;transition-property: transform;transition-duration: 0.15s;transition-timing-function: ease;}#mega-menu-wrap-main_menu .mega-menu-toggle .mega-toggle-block-0 .mega-toggle-animated-inner::before, #mega-menu-wrap-main_menu .mega-menu-toggle .mega-toggle-block-0 .mega-toggle-animated-inner::after {content: "";display: block;}#mega-menu-wrap-main_menu .mega-menu-toggle .mega-toggle-block-0 .mega-toggle-animated-inner::before {top: -10px;}#mega-menu-wrap-main_menu .mega-menu-toggle .mega-toggle-block-0 .mega-toggle-animated-inner::after {bottom: -10px;}#mega-menu-wrap-main_menu .mega-menu-toggle .mega-toggle-block-0 .mega-toggle-animated-slider .mega-toggle-animated-inner {top: 2px;}#mega-menu-wrap-main_menu .mega-menu-toggle .mega-toggle-block-0 .mega-toggle-animated-slider .mega-toggle-animated-inner::before {top: 10px;transition-property: transform, opacity;transition-timing-function: ease;transition-duration: 0.15s;}#mega-menu-wrap-main_menu .mega-menu-toggle .mega-toggle-block-0 .mega-toggle-animated-slider .mega-toggle-animated-inner::after {top: 20px;}#mega-menu-wrap-main_menu .mega-menu-toggle.mega-menu-open .mega-toggle-block-0 .mega-toggle-animated-slider .mega-toggle-animated-inner {transform: translate3d(0, 10px, 0) rotate(45deg);}#mega-menu-wrap-main_menu .mega-menu-toggle.mega-menu-open .mega-toggle-block-0 .mega-toggle-animated-slider .mega-toggle-animated-inner::before {transform: rotate(-45deg) translate3d(-5.71429px, -6px, 0);opacity: 0;}#mega-menu-wrap-main_menu .mega-menu-toggle.mega-menu-open .mega-toggle-block-0 .mega-toggle-animated-slider .mega-toggle-animated-inner::after {transform: translate3d(0, -20px, 0) rotate(-90deg);}#mega-menu-wrap-main_menu {clear: both;}.wp-block {}</style> </head> <body data-rsssl=1> <!-- Google tag (gtag.js) --> <script defer src="https://www.googletagmanager.com/gtag/js?id=G-2RPHT34J3M"></script> <script> window.addEventListener("load", function(event) { window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-2RPHT34J3M'); }); </script> <div class="site-header-wrapper -home -with-bg "> <header class="site-header"> <div class="site-header__row container -big"> <div class="main-logo site-header__logo"> <img width="267" height="54" src="https://asian-bookies.net/wp-content/themes/bb/images/logo.svg" alt="96 Bets Asia"> </div> <button class="site-header__mob-menu-btn" title="Menu"><i></i></button> <div id="mega-menu-wrap-main_menu" class="mega-menu-wrap"><div class="mega-menu-toggle"><div class="mega-toggle-blocks-left"></div><div class="mega-toggle-blocks-center"></div><div class="mega-toggle-blocks-right"><div class='mega-toggle-block mega-menu-toggle-animated-block mega-toggle-block-0' id='mega-toggle-block-0'><button aria-label="Toggle Menu" class="mega-toggle-animated mega-toggle-animated-slider" type="button" aria-expanded="false"> <span class="mega-toggle-animated-box"> <span class="mega-toggle-animated-inner"></span> </span> </button></div></div></div><ul id="mega-menu-main_menu" class="mega-menu max-mega-menu mega-menu-horizontal mega-no-js" data-event="hover" data-effect="fade_up" data-effect-speed="200" data-effect-mobile="disabled" data-effect-speed-mobile="0" data-mobile-force-width="false" data-second-click="go" data-document-click="collapse" data-vertical-behaviour="standard" data-breakpoint="768" data-unbind="true" data-mobile-state="collapse_all" data-mobile-direction="vertical" data-hover-intent-timeout="300" data-hover-intent-interval="100"><li class='mega-menu-item mega-menu-item-type-post_type mega-menu-item-object-page mega-menu-item-home mega-current-menu-item mega-page_item mega-page-item-9 mega-current_page_item mega-menu-item-has-children mega-align-bottom-left mega-menu-flyout mega-menu-item-21801' id='mega-menu-item-21801'><a class="mega-menu-link" href="https://asian-bookies.net/" aria-expanded="false" aria-current="page" tabindex="0">Betting Sites<span class="mega-indicator"></span></a> <ul class="mega-sub-menu"> <li class='mega-menu-item mega-menu-item-type-post_type mega-menu-item-object-page mega-menu-item-21803' id='mega-menu-item-21803'><a class="mega-menu-link" href="https://asian-bookies.net/asian-handicap/">Asian Handicap</a></li></ul> </li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-item-has-children mega-align-bottom-left mega-menu-flyout mega-menu-item-21836' id='mega-menu-item-21836'><a class="mega-menu-link" aria-expanded="false" tabindex="0">Countries<span class="mega-indicator"></span></a> <ul class="mega-sub-menu"> <li class='mega-menu-item mega-menu-item-type-post_type mega-menu-item-object-page mega-menu-item-21811' id='mega-menu-item-21811'><a class="mega-menu-link" href="https://asian-bookies.net/bangladesh/">Bangladesh</a></li><li class='mega-menu-item mega-menu-item-type-post_type mega-menu-item-object-page mega-menu-item-21812' id='mega-menu-item-21812'><a class="mega-menu-link" href="https://asian-bookies.net/hong-kong/">Hong Kong</a></li><li class='mega-menu-item mega-menu-item-type-post_type mega-menu-item-object-page mega-menu-item-21813' id='mega-menu-item-21813'><a class="mega-menu-link" href="https://asian-bookies.net/india/">India</a></li><li class='mega-menu-item mega-menu-item-type-post_type mega-menu-item-object-page mega-menu-item-21815' id='mega-menu-item-21815'><a class="mega-menu-link" href="https://asian-bookies.net/indonesia/">Indonesia</a></li><li class='mega-menu-item mega-menu-item-type-post_type mega-menu-item-object-page mega-menu-item-21816' id='mega-menu-item-21816'><a class="mega-menu-link" href="https://asian-bookies.net/japan/">Japan</a></li><li class='mega-menu-item mega-menu-item-type-post_type mega-menu-item-object-page mega-menu-item-21817' id='mega-menu-item-21817'><a class="mega-menu-link" href="https://asian-bookies.net/korea/">Korea</a></li><li class='mega-menu-item mega-menu-item-type-post_type mega-menu-item-object-page mega-menu-item-21818' id='mega-menu-item-21818'><a class="mega-menu-link" href="https://asian-bookies.net/malaysia/">Malaysia</a></li><li class='mega-menu-item mega-menu-item-type-post_type mega-menu-item-object-page mega-menu-item-21820' id='mega-menu-item-21820'><a class="mega-menu-link" href="https://asian-bookies.net/philippines/">Philippines</a></li><li class='mega-menu-item mega-menu-item-type-post_type mega-menu-item-object-page mega-menu-item-21828' id='mega-menu-item-21828'><a class="mega-menu-link" href="https://asian-bookies.net/singapore/">Singapore</a></li><li class='mega-menu-item mega-menu-item-type-post_type mega-menu-item-object-page mega-menu-item-21830' id='mega-menu-item-21830'><a class="mega-menu-link" href="https://asian-bookies.net/thailand/">Thailand</a></li><li class='mega-menu-item mega-menu-item-type-post_type mega-menu-item-object-page mega-menu-item-21819' id='mega-menu-item-21819'><a class="mega-menu-link" href="https://asian-bookies.net/vietnam/">Vietnam</a></li></ul> </li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-item-has-children mega-align-bottom-left mega-menu-flyout mega-menu-item-21834' id='mega-menu-item-21834'><a class="mega-menu-link" aria-expanded="false" tabindex="0">Sports<span class="mega-indicator"></span></a> <ul class="mega-sub-menu"> <li class='mega-menu-item mega-menu-item-type-post_type mega-menu-item-object-page mega-menu-item-21805' id='mega-menu-item-21805'><a class="mega-menu-link" href="https://asian-bookies.net/baseball/">Baseball</a></li><li class='mega-menu-item mega-menu-item-type-post_type mega-menu-item-object-page mega-menu-item-has-children mega-menu-item-21806' id='mega-menu-item-21806'><a class="mega-menu-link" href="https://asian-bookies.net/basketball/" aria-expanded="false">Basketball<span class="mega-indicator"></span></a> <ul class="mega-sub-menu"> <li class='mega-menu-item mega-menu-item-type-post_type mega-menu-item-object-page mega-menu-item-21821' id='mega-menu-item-21821'><a class="mega-menu-link" href="https://asian-bookies.net/philippines/betting-on-nba/">Betting on NBA</a></li> </ul> </li><li class='mega-menu-item mega-menu-item-type-post_type mega-menu-item-object-page mega-menu-item-21814' id='mega-menu-item-21814'><a class="mega-menu-link" href="https://asian-bookies.net/india/cricket/">Cricket</a></li><li class='mega-menu-item mega-menu-item-type-post_type mega-menu-item-object-page mega-menu-item-21809' id='mega-menu-item-21809'><a class="mega-menu-link" href="https://asian-bookies.net/esports/">eSports</a></li><li class='mega-menu-item mega-menu-item-type-post_type mega-menu-item-object-page mega-menu-item-21810' id='mega-menu-item-21810'><a class="mega-menu-link" href="https://asian-bookies.net/football/">Football</a></li><li class='mega-menu-item mega-menu-item-type-post_type mega-menu-item-object-page mega-menu-item-21829' id='mega-menu-item-21829'><a class="mega-menu-link" href="https://asian-bookies.net/singapore/horse-racing/">Horse Racing</a></li><li class='mega-menu-item mega-menu-item-type-post_type mega-menu-item-object-page mega-menu-item-21831' id='mega-menu-item-21831'><a class="mega-menu-link" href="https://asian-bookies.net/tennis/">Tennis</a></li><li class='mega-menu-item mega-menu-item-type-post_type mega-menu-item-object-page mega-menu-item-21832' id='mega-menu-item-21832'><a class="mega-menu-link" href="https://asian-bookies.net/volleyball/">Volleyball</a></li></ul> </li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-item-has-children mega-align-bottom-left mega-menu-flyout mega-menu-item-21835' id='mega-menu-item-21835'><a class="mega-menu-link" aria-expanded="false" tabindex="0">Payments<span class="mega-indicator"></span></a> <ul class="mega-sub-menu"> <li class='mega-menu-item mega-menu-item-type-post_type mega-menu-item-object-page mega-menu-item-21823' id='mega-menu-item-21823'><a class="mega-menu-link" href="https://asian-bookies.net/payments/bkash/">bKash</a></li><li class='mega-menu-item mega-menu-item-type-post_type mega-menu-item-object-page mega-menu-item-21824' id='mega-menu-item-21824'><a class="mega-menu-link" href="https://asian-bookies.net/payments/gcash/">GCash</a></li><li class='mega-menu-item mega-menu-item-type-post_type mega-menu-item-object-page mega-menu-item-21825' id='mega-menu-item-21825'><a class="mega-menu-link" href="https://asian-bookies.net/payments/paypal/">PayPal</a></li><li class='mega-menu-item mega-menu-item-type-post_type mega-menu-item-object-page mega-menu-item-21826' id='mega-menu-item-21826'><a class="mega-menu-link" href="https://asian-bookies.net/payments/paysafecard/">Paysafecard</a></li><li class='mega-menu-item mega-menu-item-type-post_type mega-menu-item-object-page mega-menu-item-21827' id='mega-menu-item-21827'><a class="mega-menu-link" href="https://asian-bookies.net/payments/tether-usdt/">Tether (USDT)</a></li></ul> </li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-current-menu-item mega-current_page_item mega-menu-item-has-children mega-align-bottom-left mega-menu-flyout mega-menu-item-21848' id='mega-menu-item-21848'><a class="mega-menu-link" href="/" aria-expanded="false" aria-current="page" tabindex="0">Bookies<span class="mega-indicator"></span></a> <ul class="mega-sub-menu"> <li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-item-21849' id='mega-menu-item-21849'><a class="mega-menu-link" href="/review/1xbet/">1xBet</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-item-21850' id='mega-menu-item-21850'><a class="mega-menu-link" href="/review/22bet/">22Bet</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-item-21851' id='mega-menu-item-21851'><a class="mega-menu-link" href="/review/20bet/">20Bet</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-item-21852' id='mega-menu-item-21852'><a class="mega-menu-link" href="/review/4rabet/">4raBet</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-item-21860' id='mega-menu-item-21860'><a class="mega-menu-link" href="/review/bc-game/">BC.game</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-item-21858' id='mega-menu-item-21858'><a class="mega-menu-link" href="/review/betwinner/">Betwinner</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-item-21854' id='mega-menu-item-21854'><a class="mega-menu-link" href="/review/crickex/">Crickex</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-item-21859' id='mega-menu-item-21859'><a class="mega-menu-link" href="/review/dafabet/">Dafabet</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-item-21853' id='mega-menu-item-21853'><a class="mega-menu-link" href="/review/m88/">M88 Mansion</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-item-21856' id='mega-menu-item-21856'><a class="mega-menu-link" href="/review/melbet/">Melbet</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-item-21857' id='mega-menu-item-21857'><a class="mega-menu-link" href="/review/mostbet/">Mostbet</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-item-21855' id='mega-menu-item-21855'><a class="mega-menu-link" href="/review/sportsbet-io/">Sportsbet.IO</a></li></ul> </li><li class='mega-menu-item mega-menu-item-type-post_type mega-menu-item-object-page mega-align-bottom-left mega-menu-flyout mega-menu-item-21807' id='mega-menu-item-21807'><a class="mega-menu-link" href="https://asian-bookies.net/casino/" tabindex="0">Casino</a></li><li class='mega-menu-item mega-menu-item-type-post_type mega-menu-item-object-page mega-menu-item-has-children mega-align-bottom-left mega-menu-flyout mega-menu-item-21833' id='mega-menu-item-21833'><a class="mega-menu-link" href="https://asian-bookies.net/about-us/" aria-expanded="false" tabindex="0">About<span class="mega-indicator"></span></a> <ul class="mega-sub-menu"> <li class='mega-menu-item mega-menu-item-type-post_type mega-menu-item-object-page mega-menu-item-21808' id='mega-menu-item-21808'><a class="mega-menu-link" href="https://asian-bookies.net/contacts/">Contact Us</a></li></ul> </li></ul></div> <div class="header-langs"> <button class="header-langs__current"> <picture><source srcset="https://asian-bookies.net/wp-content/webp-express/webp-images/themes/bb/images/flags/gb.png.webp" type="image/webp"><img src="https://asian-bookies.net/wp-content/themes/bb/images/flags/gb.png" alt="English" class="webpexpress-processed"></picture> <span>en</span> </button> <div class="header-langs__list"> <ul> <li class="lang-item lang-item-14 lang-item-en current-lang lang-item-first"><a lang="en-GB" hreflang="en-GB" href="https://asian-bookies.net/"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAMAAABBPP0LAAAAt1BMVEWSmb66z+18msdig8La3u+tYX9IaLc7W7BagbmcUW+kqMr/q6n+//+hsNv/lIr/jIGMnNLJyOP9/fyQttT/wb3/////aWn+YWF5kNT0oqz0i4ueqtIZNJjhvt/8gn//WVr/6+rN1+o9RKZwgcMPJpX/VFT9UEn+RUX8Ozv2Ly+FGzdYZrfU1e/8LS/lQkG/mbVUX60AE231hHtcdMb0mp3qYFTFwNu3w9prcqSURGNDaaIUMX5FNW5wYt7AAAAAjklEQVR4AR3HNUJEMQCGwf+L8RR36ajR+1+CEuvRdd8kK9MNAiRQNgJmVDAt1yM6kSzYVJUsPNssAk5N7ZFKjVNFAY4co6TAOI+kyQm+LFUEBEKKzuWUNB7rSH/rSnvOulOGk+QlXTBqMIrfYX4tSe2nP3iRa/KNK7uTmWJ5a9+erZ3d+18od4ytiZdvZyuKWy8o3UpTVAAAAABJRU5ErkJggg==" alt="" width="16" height="11" style="width: 16px; height: 11px;" /><span style="margin-left:0.3em;">English</span></a></li> <li class="lang-item lang-item-17 lang-item-id"><a lang="id-ID" hreflang="id-ID" href="https://asian-bookies.net/id/"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAMAAABBPP0LAAAARVBMVEXfAgDPAADskYrvh4Dsd27qa2PoYVi9AADmV03kTULiQzfeMyf2vrryq6ftoJvMGA/8/Pz5+fn39/fz8/Pm5ubg4ODt7u3lScs2AAAAR0lEQVR4AQXBsRGDQBAAMe39e0gcuP86CTEgBSAgIwipzYiMdBmJjITNMJJYd58jhBPf+kEiaCARaFIiWEyA58Gf3bJwI3gBwHkHZeHbupcAAAAASUVORK5CYII=" alt="" width="16" height="11" style="width: 16px; height: 11px;" /><span style="margin-left:0.3em;">Bahasa Indonesia</span></a></li> <li class="lang-item lang-item-28 lang-item-ja"><a lang="ja" hreflang="ja" href="https://asian-bookies.net/ja/"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAMAAABBPP0LAAAAPFBMVEX09PTy8fHy6+vm5+b+/v77+/v29vbf39/5vLz5fHz6qqr6UFD7QUH5NDT3lZXa2tr419f3JibT09P2WloskN4YAAAAVUlEQVR4AQXBQU7FMBBAMb90hCoW3P+csCAKfIodIBIyQJAGmPQTDHgrzca94K/keT/nWOgjmdm4VvIpwy1GXOsZ9ndYYL/Wee3IRI/fr4PQCuPmAv/RTRUh24Q4UgAAAABJRU5ErkJggg==" alt="" width="16" height="11" style="width: 16px; height: 11px;" /><span style="margin-left:0.3em;">日本語</span></a></li> <li class="lang-item lang-item-33 lang-item-vi"><a lang="vi" hreflang="vi" href="https://asian-bookies.net/vi/"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAMAAABBPP0LAAAATlBMVEX+AAD2AADvAQH/eXn+cXL9amr8YmL9Wlr8UlL7TkvoAAD8d0f6Pz/3ODf2Ly/0KSf6R0f6wTv60T31IBz6+jr4+Cv3QybzEhL4bizhAADgATv8AAAAW0lEQVR4AQXBgU3DQBRAMb+7jwKVUPefkQEQTYJqByBENpKUGoZslXoN5LPONH8G9WWZ7pGlOn6XZmaGRce1J/seei4dl+7dPWDqkk7+58e3+igdlySPcYbwBG+lPhCjrtt9EgAAAABJRU5ErkJggg==" alt="" width="16" height="11" style="width: 16px; height: 11px;" /><span style="margin-left:0.3em;">Tiếng Việt</span></a></li> <li class="lang-item lang-item-38 lang-item-th"><a lang="th" hreflang="th" href="https://asian-bookies.net/th/"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAMAAABBPP0LAAAAY1BMVEX+AAD2AADuAAD/goH9dnb7bGz5YmL3Vlb+/v74+Pjx8fE/QK+ur96XmdWMjc+Cg8l3d8YAAH1VVrdLTLM1NaotLaUhIqATE5oAACgAAHNoar8AAFrg4ODzSUnyQUHfAADnAABuUDLQAAAAVElEQVR4AQXBQQ6CQAAAsY6LynL04NH/P9AYjAnYBiBEBkKSXysgoGUUInKM5XZeZDeV3tsF2U0l07L2tZtJZDk+w3XDTu41z4DAo0YinqQSvHDCH4P0DbBHDm4aAAAAAElFTkSuQmCC" alt="" width="16" height="11" style="width: 16px; height: 11px;" /><span style="margin-left:0.3em;">ไทย</span></a></li> <li class="lang-item lang-item-48 lang-item-bn"><a lang="bn-BD" hreflang="bn-BD" href="https://asian-bookies.net/bn/"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAMAAABBPP0LAAAAXVBMVEUAPwAANgAALAAAHgAADgAAAAB5sHlxq3JopWhdn11Wm1ZPlk+Uf1LgW0/6S0r7QEDcTT+BZzQ3hjctfy0jeyNDjkP4NzbLXEj4Li69OB8VchX0ICANag1qThLTMCDLeAoGAAAAWUlEQVR4AQXBAWrCQBRAwXl/l6TV+99UECKpnQkkieRAIuXaLE1VVddGM3L4DCb1lHPmx3HbyjvnWA5MPH6dY/kz2Xq4zrHYX0zcfY5lzRe2XuXNLdImAPgHO0kOmeUlLKgAAAAASUVORK5CYII=" alt="" width="16" height="11" style="width: 16px; height: 11px;" /><span style="margin-left:0.3em;">বাংলা</span></a></li> <li class="lang-item lang-item-53 lang-item-zh"><a lang="zh-CN" hreflang="zh-CN" href="https://asian-bookies.net/zh/"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAMAAABBPP0LAAAAXVBMVEXUAADlQgDLAADBAADtgXn63Xjypnf1wHHpcG/oZmbmXVzlU1PjS0q1AAD981775VvwnVD2zkvhPz/fNzfdMjHcKyvaJyfsi0baISHYGhqqAADWExPTDQ2jAACfAAApGpDBAAAAWklEQVR4ATXIhQHDQBTDUMll2n/RMiU5/vQsAE4EsPbaKVOU+pXNwc/WKQXeDZMKu+psCXw/Z7efarmENd6GIwGpXhUvM4spxoiEbouRNT7Fmtaq+RG4wAqZZvceD8DeIelqAAAAAElFTkSuQmCC" alt="" width="16" height="11" style="width: 16px; height: 11px;" /><span style="margin-left:0.3em;">中文 (中国)</span></a></li> <li class="lang-item lang-item-58 lang-item-tl"><a lang="tl" hreflang="tl" href="https://asian-bookies.net/tl/"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAIAAAD5gJpuAAABHUlEQVR4AXXQAUQDURzH8T8MgBEwDcAMcAsVjINDsAVgAywmIFkEBAWcBBXCBEW50iQiKASBlkEwYrM4R/Xo7t7b+t299ndZmw+8//7fe+7IcQ6JbKKthI2x1Vh1bCkyGs257kuz+dpoPLJ6/UGrVO60UukGokCIgVIhtFpv/IdlXUOxeLW4cFEonOfzp4AJ0TyJLxEHHaX67XYfj/93O5s9Ns1LDjpSrkm1gwZHNJPbgEkciMFweKvUspTV+J4Q8Yl9sG5sQ212k+FI+CVvkNLD0d+3hWGIXC6SycBnOg0Y9nSAPf0OwfOTX1uZ3Oagi4C/UnDmfJvmtO2PVArDKPC8mfD9Ptjd88tlhlLHDNu/gTiyUINLxHoJ3b9+AMkyBDRPDT5NAAAAAElFTkSuQmCC" alt="" width="16" height="11" style="width: 16px; height: 11px;" /><span style="margin-left:0.3em;">Tagalog</span></a></li> <li class="lang-item lang-item-63 lang-item-ta"><a lang="ta-LK" hreflang="ta-LK" href="https://asian-bookies.net/ta/"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAMAAABBPP0LAAAArlBMVEX521f42VL11Uz10kTyzz7xzTntxy9vqGf+o2T432rrwWbGfHG4YXS1WWuwUWa4Y13SkUzenx5lomRcnVz+mFatTGCoQlq7ZkmyV1LPhCisSmrlskrLglLZmT/KfzqvTUqjOVPKeB5SmFL8kErtvzj21jPXmC29aDCfMUnQikDrwCX0zx9KkUb6iDzxxxvvxxShMj+bKD/FbxSeLTWkPTffqD2zWSbQgg3muxvjtBFAVDbkAAAAcklEQVR4AQXBSw6CMBRA0XufxZYSbBg5cmLc/6Jcgp9QJSGcI4AIoohkRBVFTUzKVzSjmgQgZhXVgEZbYRxzlFIIpIGb6TwNLwipVLM9TOk6LkGjovX/3n7PEyQBiHUpeP/Me1ABbvbe2ecYTCI8uIAAB2t3EoYshwBoAAAAAElFTkSuQmCC" alt="" width="16" height="11" style="width: 16px; height: 11px;" /><span style="margin-left:0.3em;">தமிழ்</span></a></li> <li class="lang-item lang-item-68 lang-item-ko"><a lang="ko-KR" hreflang="ko-KR" href="https://asian-bookies.net/ko/"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAMAAABBPP0LAAAAh1BMVEXx9/Xt8vLp7+/l6urg5eT+/v7a29vGxsb19fXz8vO8u7zLy8v5+fnr6+qKiop+fX782dlkY2N3d3fZ4d+ur6799vX6kZD7RUX6Pz75eHXo6OjzsrbpOkO2nsRkbb9RasbHeZPS2tirxfAybtqkrdrU1tR6ouZskt1VVVVpaWnI1e3O09Gfn58iHIdTAAAAh0lEQVR4ASXIA3JEARQF0b4PsW0Vs//1xDbGno8+xRZ1KqBKImkEhKThMGBO6rDIsL+opq0G9OZyRkW/PhJ4Yf1tfaKw+BoZvWLQ9mUrmulIHJhg29M9I3IMGJy1lp5ng7ievZDC4Ibt4/vZ2fvLLYkZt/noD8ednx+0+N5nXSYEqzQOYQGYAgnRIeEuj5p0AAAAAElFTkSuQmCC" alt="" width="16" height="11" style="width: 16px; height: 11px;" /><span style="margin-left:0.3em;">한국어</span></a></li> <li class="lang-item lang-item-78 lang-item-km"><a lang="km" hreflang="km" href="https://asian-bookies.net/km/"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAMAAABBPP0LAAAAhFBMVEUABr8AALoAAbAAAKN/k+NziN5pgNxme9hfdNVWctcAAJhTZ85KY89DXcw/VMUAAInEAADle3reXV3eVFTcT0/YRUXUOjrRNDTQLCzPISGYAADz397ibm7KFBTAAAD15ubopKTlnJyOAAD39vbIDg727OwtR8AgN7gbNLUAAGg0VMsAAH529yanAAAAY0lEQVR4AQXBwU0DQRRAMb/Jz4ZIKGckRP+dUQOH7A52IELIQKTSLCtxUzlnXpU6TeV9X6TzfD73ncm8rj9ebcf1Hn0stGfPXLM9WOTTwWFIt3WofKF+v1tTWckPGicPexD8A25qExAYcypyAAAAAElFTkSuQmCC" alt="" width="16" height="11" style="width: 16px; height: 11px;" /><span style="margin-left:0.3em;">ភាសាខ្មែរ</span></a></li> <li class="lang-item lang-item-88 lang-item-hi"><a lang="hi-IN" hreflang="hi-IN" href="https://asian-bookies.net/hi/"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAMAAABBPP0LAAAAjVBMVEX/vwD5tADyqQDrnAD95Hr74XP53mr932D83Vj72k7610P61TT30Cn+7aX954zXzpalrbmiq7bnsgD8/Pz9/v6bq9bIzeT29/f09PXk5ea9wt2Bj8OKn8+ElssAcwCIxIhnsmdfrF9XqFdQpFBEn0Q5mDoAIgAAbwCAv4AAGQAAZQB1uHUAVwAARAAANACRhc+AAAAAVElEQVR4AQXBAU4CQRRAsb6db7Jg9P4XlRAIs7YBRCiDJMlrWIkkW99HqPZD9u+cuTh0naLJBV/1Dg6gZQfmXpQknzluN0oS1qx9Lv5IyhjyE08W/yjQDpdmVRfaAAAAAElFTkSuQmCC" alt="" width="16" height="11" style="width: 16px; height: 11px;" /><span style="margin-left:0.3em;">हिन्दी</span></a></li> <li class="lang-item lang-item-98 lang-item-pa"><a lang="pa-IN" hreflang="pa-IN" href="https://asian-bookies.net/pa/"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAMAAABBPP0LAAAAjVBMVEX/vwD5tADyqQDrnAD95Hr74XP53mr932D83Vj72k7610P61TT30Cn+7aX954zXzpalrbmiq7bnsgD8/Pz9/v6bq9bIzeT29/f09PXk5ea9wt2Bj8OKn8+ElssAcwCIxIhnsmdfrF9XqFdQpFBEn0Q5mDoAIgAAbwCAv4AAGQAAZQB1uHUAVwAARAAANACRhc+AAAAAVElEQVR4AQXBAU4CQRRAsb6db7Jg9P4XlRAIs7YBRCiDJMlrWIkkW99HqPZD9u+cuTh0naLJBV/1Dg6gZQfmXpQknzluN0oS1qx9Lv5IyhjyE08W/yjQDpdmVRfaAAAAAElFTkSuQmCC" alt="" width="16" height="11" style="width: 16px; height: 11px;" /><span style="margin-left:0.3em;">ਪੰਜਾਬੀ</span></a></li> <li class="lang-item lang-item-103 lang-item-ur"><a lang="ur" hreflang="ur" href="https://asian-bookies.net/ur/"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAMAAABBPP0LAAAAWlBMVEXx+PHq8uoFjQUAeAAAawAAWwAAVQD+/v75+/mEyYR4xXdswGxdu11UtVROtE4APgBFr0U6qjowpTAooii84Lyn1aet2K0enB7h7OHU59SSzZITmBMAKgAAHgAGN1YEAAAAb0lEQVR4ATWMA4IDUBQDZ77X5v3PtmZtt89IIqDbCuJSKqqwCTEBRGWeFOfLAIwwlGNJiwQBgDBOQ6cx4+4gV+/J2p0lzhKA/i1zoIEEN4V2/xk7kw4HDZ0/Ly8G5VW1MjoNAUHkWB/g+xg4A2G5AhcQGXhL4kcDAAAAAElFTkSuQmCC" alt="" width="16" height="11" style="width: 16px; height: 11px;" /><span style="margin-left:0.3em;">اردو</span></a></li> </ul> </div> </div> </div> </header> <div class="hero-block--wrapper"> <img class="hero-img-bg -pc" src="https://asian-bookies.net/wp-content/uploads/2022/12/banner.webp" alt="ASIAN BOOKMAKERS"> <img class="hero-img-bg -mobile" width="100%" height="380" src="https://asian-bookies.net/wp-content/uploads/2022/12/mobile_banner.webp" alt="ASIAN BOOKMAKERS"> <div class="container"> <div class="hero-block -home"> <div class="g-lp-top-data"> <div class="g-lp-top-data--author"> Author: <span class="author"><a href="https://asian-bookies.net/authors/">Minato Jung</a></span>, Last Updated: <span class="date-str">March 01, 2024</span> </div> <div class="g-lp-top-data--disc"> <div class="g-lp-top-data--disc__btn" role="button">Ad Disclaimer</div> <div class="g-lp-top-data--disc__content"> <div class="g-lp-disc-style"> This website contains affiliate links. When you register an account at a casino website, we get a small commission with no fees from your side. We do not charge money for top positions. If you have gambling problems which influence any of your life's aspects, we recommend to consider all the risks of visiting casinos. For more information regarding the above-mentioned points, check Privacy Policy and <a href="/responsible-gambling/" rel="nofollow">Responsible Gaming</a> pages. </div> </div> </div> </div> <div class="hero-block__content"> <h1>Best Asian Betting Sites & Bookmakers for 2024</h1> <div class="desc"><p><span style="font-weight: 400">Asian bookies have become a fascinating phenomenon in the online betting industry, but it can be a little tricky to describe. So, does that mean that every bookmaker in Asia qualifies to be called an Asian bookmaker?</span></p> <p><span style="font-weight: 400">That’s not the case.</span></p> <p><span style="font-weight: 400">While Asia is a famous continent and home to one of the biggest betting markets, sports gambling sites referred to as Asian bookmakers by the gambling community aren’t all about geography. This article explains what are Asian bookmakers and compares the best Asian bookmakers in 2024. We’ll also explain how can you choose a reliable operator for the best betting experience.</span></p> </div> </div> </div> </div> </div> </div> <div class="container"> </div> <div class="container -big content-white mb70"> <div class="container block-content-padding"> <article class="post-entry"> <div class="hero-toggle"> <button class="hero-toggle__header"> <i class="icon-left"></i> <span>Table of content</span> <div class="icon-right-wrapper"> <i class="icon-right"></i> </div> </button> <div class="hero-toggle__content"> <ul class="single-toc--ul"> <li class="single-toc--li"> <a href="#regbet-on-best-asian-betting-sites">Reg&Bet on Best Asian Betting Sites!</a> </li> <li class="single-toc--li"> <a href="#what-are-asian-bookmakers">What are Asian Bookmakers?</a> </li> <li class="single-toc--li"> <a href="#asian-bookies-are-they-legit">Asian Bookies – Are They Legit?</a> </li> <li class="single-toc--li"> <a href="#how-do-we-rate-asian-bookmakers">How do we rate Asian bookmakers?</a> </li> <li class="single-toc--li"> <a href="#how-to-choose-the-best-asian-betting-site">How to Choose the Best Asian Betting Site?</a> </li> <li class="single-toc--li"> <a href="#how-to-bet-online-on-sports-at-asian-betting-sites">How to Bet Online on Sports at Asian Betting Sites?</a> </li> <li class="single-toc--li"> <a href="#banking-options-at-asian-sites">Banking Options at Asian Sites</a> </li> <li class="single-toc--li"> <a href="#asian-handicap-betting-a-key-advantage-of-asian-bookmakers">Asian Handicap Betting – a key advantage of Asian bookmakers</a> </li> <li class="single-toc--li"> <a href="#what-other-types-of-gambling-sites-are-popular-in-asia">What other types of gambling sites are popular in Asia?</a> </li> <li class="single-toc--li"> <a href="#popular-sports-for-betting-in-asia">Popular Sports for Betting in Asia</a> </li> <li class="single-toc--li"> <a href="#the-most-popular-types-of-bets-in-asian-betting">The most popular types of bets in Asian Betting</a> </li> <li class="single-toc--li"> <a href="#asian-bookies-odds">Asian Bookies Odds</a> </li> <li class="single-toc--li"> <a href="#conclusion-why-choose-asian-betting-sites">Conclusion: why choose Asian betting sites?</a> </li> <li class="single-toc--li"> <a href="#faq-about-asian-bookies">FAQ about Asian Bookies</a> </li> </ul> </div> </div> <div class="custom-page-heading"> <i></i> <h2 class="title" class="title" id="regbet-on-best-asian-betting-sites">Reg&Bet on Best Asian Betting Sites!</h2> <div class="sub-title">We are going to visit the universe of the <span id="best-asian-bookmakers-with-bonuses">sports betting in Asia</span>!</div> </div> <h2 class="wp-block-heading has-text-align-left" class="wp-block-heading has-text-align-left" id="what-are-asian-bookmakers"><strong>What are Asian Bookmakers?</strong></h2> <p class="has-text-align-left">Asian bookmakers are unique sports betting platforms that offer sharp betting odds, a variety of handicaps, and attractive welcome bonuses. Unlike European bookies, Asian bookies don’t limit winning accounts and have more relaxed restrictions. Moreover, Asian sports bookmakers feature all your favourite sports, including soccer and badminton, and they also feature common betting markets like the money line, correct score, odd/even, HT/FT, and more.</p> <div class="custom-review-block-section scroll-mt" id="bet_best_sites"> <div class="custom-review-block"> <div class="custom-review-block__number">1</div> <div class="custom-review-block__logo" style="background-color:#020a13"> <a aria-label="Go to SportsBet.io betting site" href="https://asian-bookies.net/go/sportsbet-io/"> <picture><source srcset="https://asian-bookies.net/wp-content/webp-express/webp-images/uploads/2022/11/sportsbet.io_-293x90-1-293x90.png.webp" type="image/webp"><img decoding="async" width="293" height="90" src="https://asian-bookies.net/wp-content/uploads/2022/11/sportsbet.io_-293x90-1-293x90.png" class="attachment-poka-review-thumb size-poka-review-thumb webpexpress-processed" alt=""></picture> </a> </div> <div class="custom-review-block__rating"> <div class="count-text">5<span> / 5</span></div> <div class="stars-section main-stars-block"> <i></i><i></i><i></i><i></i><i></i> </div> <div class="text-bottom">TOTAL SCORE</div> </div> <div class="custom-review-block__bonus"> <div class="custom-review-block__bonus__label">Bonus:</div> <div class="custom-review-block__bonus__desc"> Win <span>$50 USD</span> Free Bet Every Week! </div> </div> <div class="custom-review-block__cta"> <a aria-label="Go to SportsBet.io betting site" class="main-link-btn -ib-important" href="https://asian-bookies.net/go/sportsbet-io/" rel="nofollow" target="_blank"> <span class="big-label">Bet Now</span> <span class="small-label">Go to SportsBet.io</span> </a> </div> <div class="g-rev-card-bottom-area"> <div class="g-rev-card--content"> <div class="g-rev-card--content--top"> <div class="g-rev-card__title">SportsBet.io</div> <div class="g-rev-card__more-link"> <a class="main-link-btn -ib-important" href="https://asian-bookies.net/review/sportsbet-io/"> <span class="big-label">READ REVIEW</span> </a> </div> </div> <div class="g-rev-card--content--center"> <div> <label class="g-rev-card--content-block-title -icon-about"> About SportsBet.io </label> <div class="post-entry"> </div> </div> <div> <label class="g-rev-card--content-block-title -icon-overview"> Overview </label> <div class="review-page--side-rating---data"> <div class="line"> <label class="label">Website</label> <span class="val"> <a aria-label="Go to SportsBet.io betting site" href="https://asian-bookies.net/go/sportsbet-io/" rel="nofollow" target="_blank">sportsbet.io</a> </span> </div> <div class="line"> <label class="label">Established</label> <span class="val"> 2016 </span> </div> <div class="line"> <label class="label">License</label> <span class="val"> Curacao </span> </div> <div class="line"> <label class="label">Bonus</label> <span class="val"> <span>$50 Free Bet</span> Every Week! </span> </div> <div class="line"> <label class="label">Wagering Requirement</label> <span class="val"> N/A </span> </div> <div class="line"> <label class="label">No Deposit Bonus</label> <span class="val"> Yes </span> </div> <div class="line"> <label class="label">Live Chat</label> <span class="val"> Yes </span> </div> </div> </div> <div> <label class="g-rev-card--content-block-title -icon-about"> Advantages SportsBet.io </label> <div class="pros-cons-block -small-fs pros-cons-block--in-table"> <div class="pros-cons-block__block -pros"> <div class="pros-cons-block__content"> <ul> <li>Wide range of payment methods, currencies and cryptocurrencies</li> <li>Great free bet bonus offer with no wagering requirements</li> <li>Sports betting and casino games available</li> <li>Mobile app available for convenient access</li> <li>Live support available for assistance</li> <li>Accepts credit cards</li> </ul> </div> </div> </div> </div> <div class="cta-custom-style-in-table"> <div class="custom-review-block__cta"> <a aria-label="Go to SportsBet.io betting site" class="main-link-btn -ib-important" href="https://asian-bookies.net/go/sportsbet-io/" rel="nofollow" target="_blank"> <span class="big-label">Bet Now</span> <span class="small-label">Go to SportsBet.io</span> </a> </div> </div> </div> </div> <button class="g-rev-card--btn" title="More Info about SportsBet.io"></button> </div> </div> <div class="custom-review-block"> <div class="custom-review-block__number">2</div> <div class="custom-review-block__logo" style="background-color:#0a519e"> <a aria-label="Go to Mostbet betting site" href="https://asian-bookies.net/go/mostbet/"> <picture><source srcset="https://asian-bookies.net/wp-content/webp-express/webp-images/uploads/2022/09/mostbet-casino-250x90.png.webp" type="image/webp"><img decoding="async" width="250" height="90" src="https://asian-bookies.net/wp-content/uploads/2022/09/mostbet-casino-250x90.png" class="attachment-poka-review-thumb size-poka-review-thumb webpexpress-processed" alt="mostbet"></picture> </a> </div> <div class="custom-review-block__rating"> <div class="count-text">5<span> / 5</span></div> <div class="stars-section main-stars-block"> <i></i><i></i><i></i><i></i><i></i> </div> <div class="text-bottom">TOTAL SCORE</div> </div> <div class="custom-review-block__bonus"> <div class="custom-review-block__bonus__label">Bonus:</div> <div class="custom-review-block__bonus__desc"> <span>125%</span> Bonus up to <span>$300 USD</span> <br><span>+250</span> Free Spins </div> </div> <div class="custom-review-block__cta"> <a aria-label="Go to Mostbet betting site" class="main-link-btn -ib-important" href="https://asian-bookies.net/go/mostbet/" rel="nofollow" target="_blank"> <span class="big-label">Bet Now</span> <span class="small-label">Go to Mostbet</span> </a> </div> <div class="g-rev-card-bottom-area"> <div class="g-rev-card--content"> <div class="g-rev-card--content--top"> <div class="g-rev-card__title">Mostbet</div> <div class="g-rev-card__more-link"> <a class="main-link-btn -ib-important" href="https://asian-bookies.net/review/mostbet/"> <span class="big-label">READ REVIEW</span> </a> </div> </div> <div class="g-rev-card--content--center"> <div> <label class="g-rev-card--content-block-title -icon-about"> About Mostbet </label> <div class="post-entry"> </div> </div> <div> <label class="g-rev-card--content-block-title -icon-overview"> Overview </label> <div class="review-page--side-rating---data"> <div class="line"> <label class="label">Website</label> <span class="val"> <a aria-label="Go to Mostbet betting site" href="https://asian-bookies.net/go/mostbet/" rel="nofollow" target="_blank">mostbet.com</a> </span> </div> <div class="line"> <label class="label">Established</label> <span class="val"> 2009 </span> </div> <div class="line"> <label class="label">License</label> <span class="val"> Curaçao </span> </div> <div class="line"> <label class="label">Bonus</label> <span class="val"> <span>125%</span> Bonus up to <span>$300 USD</span> <br><span>+250</span> Free Spins </span> </div> <div class="line"> <label class="label">Wagering Requirement</label> <span class="val"> 20x </span> </div> <div class="line"> <label class="label">No Deposit Bonus</label> <span class="val"> No </span> </div> <div class="line"> <label class="label">Live Chat</label> <span class="val"> Yes </span> </div> </div> </div> <div class="cta-custom-style-in-table"> <div class="custom-review-block__cta"> <a aria-label="Go to Mostbet betting site" class="main-link-btn -ib-important" href="https://asian-bookies.net/go/mostbet/" rel="nofollow" target="_blank"> <span class="big-label">Bet Now</span> <span class="small-label">Go to Mostbet</span> </a> </div> </div> </div> </div> <button class="g-rev-card--btn" title="More Info about Mostbet"></button> </div> </div> <div class="custom-review-block"> <div class="custom-review-block__number">3</div> <div class="custom-review-block__logo" style="background-color:#ffffff"> <a aria-label="Go to 1xBet betting site" href="https://asian-bookies.net/go/1xbet/"> <img decoding="async" width="171" height="80" src="https://asian-bookies.net/wp-content/uploads/2022/11/1xbet.webp" class="attachment-poka-review-thumb size-poka-review-thumb" alt="1xbet - bookmaker logo" /> </a> </div> <div class="custom-review-block__rating"> <div class="count-text">5<span> / 5</span></div> <div class="stars-section main-stars-block"> <i></i><i></i><i></i><i></i><i></i> </div> <div class="text-bottom">TOTAL SCORE</div> </div> <div class="custom-review-block__bonus"> <div class="custom-review-block__bonus__label">Bonus:</div> <div class="custom-review-block__bonus__desc"> <span>100%</span> Bonus up to <span>$110 USD</span> <br>+ <span>150</span> Free Spins </div> </div> <div class="custom-review-block__cta"> <a aria-label="Go to 1xBet betting site" class="main-link-btn -ib-important" href="https://asian-bookies.net/go/1xbet/" rel="nofollow" target="_blank"> <span class="big-label">Bet Now</span> <span class="small-label">Go to 1xBet</span> </a> </div> <div class="g-rev-card-bottom-area"> <div class="g-rev-card--content"> <div class="g-rev-card--content--top"> <div class="g-rev-card__title">1xBet</div> <div class="g-rev-card__more-link"> <a class="main-link-btn -ib-important" href="https://asian-bookies.net/review/1xbet/"> <span class="big-label">READ REVIEW</span> </a> </div> </div> <div class="g-rev-card--content--center"> <div> <label class="g-rev-card--content-block-title -icon-about"> About 1xBet </label> <div class="post-entry"> </div> </div> <div> <label class="g-rev-card--content-block-title -icon-overview"> Overview </label> <div class="review-page--side-rating---data"> <div class="line"> <label class="label">Website</label> <span class="val"> <a aria-label="Go to 1xBet betting site" href="https://asian-bookies.net/go/1xbet/" rel="nofollow" target="_blank">1xbet.com</a> </span> </div> <div class="line"> <label class="label">Established</label> <span class="val"> 2007 </span> </div> <div class="line"> <label class="label">License</label> <span class="val"> Curacao </span> </div> <div class="line"> <label class="label">Bonus</label> <span class="val"> Welcome <span>100%</span> Bonus <br>Up to <span>110$</span> on Sport and <br><span>1500$</span> on Casino! <br><span>+150</span> Free Spins </span> </div> <div class="line"> <label class="label">Wagering Requirement</label> <span class="val"> x5 for 100% Bonus for Sports and x35 for Welcome Pack at Casino </span> </div> <div class="line"> <label class="label">No Deposit Bonus</label> <span class="val"> No </span> </div> <div class="line"> <label class="label">Live Chat</label> <span class="val"> Yes </span> </div> </div> </div> <div> <label class="g-rev-card--content-block-title -icon-about"> Advantages 1xBet </label> <div class="pros-cons-block -small-fs pros-cons-block--in-table"> <div class="pros-cons-block__block -pros"> <div class="pros-cons-block__content"> <ul> <li>One of the best bonus lines for new and existing customers</li> <li>Wide range of sports and betting options </li> <li>Huge number of deposit methods, including many local methods for Asian countries</li> <li>Live streaming and In-Play betting available</li> <li>Accept bettors from all Asian countries</li> </ul> </div> </div> </div> </div> <div class="cta-custom-style-in-table"> <div class="custom-review-block__cta"> <a aria-label="Go to 1xBet betting site" class="main-link-btn -ib-important" href="https://asian-bookies.net/go/1xbet/" rel="nofollow" target="_blank"> <span class="big-label">Bet Now</span> <span class="small-label">Go to 1xBet</span> </a> </div> </div> </div> </div> <button class="g-rev-card--btn" title="More Info about 1xBet"></button> </div> </div> <div class="custom-review-block"> <div class="custom-review-block__number">4</div> <div class="custom-review-block__logo" style="background-color:#000000"> <a aria-label="Go to Melbet betting site" href="https://asian-bookies.net/go/melbet/"> <picture><source srcset="https://asian-bookies.net/wp-content/webp-express/webp-images/uploads/2022/11/melbet-1-293x90-1-293x90.png.webp" type="image/webp"><img loading="lazy" decoding="async" width="293" height="90" src="https://asian-bookies.net/wp-content/uploads/2022/11/melbet-1-293x90-1-293x90.png" class="attachment-poka-review-thumb size-poka-review-thumb webpexpress-processed" alt=""></picture> </a> </div> <div class="custom-review-block__rating"> <div class="count-text">5<span> / 5</span></div> <div class="stars-section main-stars-block"> <i></i><i></i><i></i><i></i><i></i> </div> <div class="text-bottom">TOTAL SCORE</div> </div> <div class="custom-review-block__bonus"> <div class="custom-review-block__bonus__label">Bonus:</div> <div class="custom-review-block__bonus__desc"> <span>100%</span> Bonus up to <span>$250</span> USD <br>Promo code: <span>ml_308595</span> </div> </div> <div class="custom-review-block__cta"> <a aria-label="Go to Melbet betting site" class="main-link-btn -ib-important" href="https://asian-bookies.net/go/melbet/" rel="nofollow" target="_blank"> <span class="big-label">Bet Now</span> <span class="small-label">Go to Melbet</span> </a> </div> <div class="g-rev-card-bottom-area"> <div class="g-rev-card--content"> <div class="g-rev-card--content--top"> <div class="g-rev-card__title">Melbet</div> <div class="g-rev-card__more-link"> <a class="main-link-btn -ib-important" href="https://asian-bookies.net/review/melbet/"> <span class="big-label">READ REVIEW</span> </a> </div> </div> <div class="g-rev-card--content--center"> <div> <label class="g-rev-card--content-block-title -icon-about"> About Melbet </label> <div class="post-entry"> </div> </div> <div> <label class="g-rev-card--content-block-title -icon-overview"> Overview </label> <div class="review-page--side-rating---data"> <div class="line"> <label class="label">Website</label> <span class="val"> <a aria-label="Go to Melbet betting site" href="https://asian-bookies.net/go/melbet/" rel="nofollow" target="_blank">melbet.com</a> </span> </div> <div class="line"> <label class="label">Established</label> <span class="val"> Tutkia Limited </span> </div> <div class="line"> <label class="label">License</label> <span class="val"> Curacao </span> </div> <div class="line"> <label class="label">Bonus</label> <span class="val"> +100% up to $250 USD </span> </div> <div class="line"> <label class="label">Wagering Requirement</label> <span class="val"> N/A </span> </div> <div class="line"> <label class="label">No Deposit Bonus</label> <span class="val"> No </span> </div> <div class="line"> <label class="label">Live Chat</label> <span class="val"> Yes </span> </div> </div> </div> <div class="cta-custom-style-in-table"> <div class="custom-review-block__cta"> <a aria-label="Go to Melbet betting site" class="main-link-btn -ib-important" href="https://asian-bookies.net/go/melbet/" rel="nofollow" target="_blank"> <span class="big-label">Bet Now</span> <span class="small-label">Go to Melbet</span> </a> </div> </div> </div> </div> <button class="g-rev-card--btn" title="More Info about Melbet"></button> </div> </div> <div class="custom-review-block"> <div class="custom-review-block__number">5</div> <div class="custom-review-block__logo" > <a aria-label="Go to BC.Game betting site" href="https://asian-bookies.net/go/bc-game/"> <picture><source srcset="https://asian-bookies.net/wp-content/webp-express/webp-images/uploads/2022/06/b.c-game-crypto-casino-167x80-1.png.webp" type="image/webp"><img loading="lazy" decoding="async" width="167" height="80" src="https://asian-bookies.net/wp-content/uploads/2022/06/b.c-game-crypto-casino-167x80-1.png" class="attachment-poka-review-thumb size-poka-review-thumb webpexpress-processed" alt="BC Game casino brand"></picture> </a> </div> <div class="custom-review-block__rating"> <div class="count-text">4.9<span> / 5</span></div> <div class="stars-section main-stars-block"> <i></i><i></i><i></i><i></i><i></i> </div> <div class="text-bottom">TOTAL SCORE</div> </div> <div class="custom-review-block__bonus"> <div class="custom-review-block__bonus__label">Bonus:</div> <div class="custom-review-block__bonus__desc"> <span>300%</span> Bonus on deposit from 10$ USD! Up to <span>$20,000 USD</span>! </div> </div> <div class="custom-review-block__cta"> <a aria-label="Go to BC.Game betting site" class="main-link-btn -ib-important" href="https://asian-bookies.net/go/bc-game/" rel="nofollow" target="_blank"> <span class="big-label">Bet Now</span> <span class="small-label">Go to BC.Game</span> </a> </div> <div class="g-rev-card-bottom-area"> <div class="g-rev-card--content"> <div class="g-rev-card--content--top"> <div class="g-rev-card__title">BC.Game</div> <div class="g-rev-card__more-link"> <a class="main-link-btn -ib-important" href="https://asian-bookies.net/review/bc-game/"> <span class="big-label">READ REVIEW</span> </a> </div> </div> <div class="g-rev-card--content--center"> <div> <label class="g-rev-card--content-block-title -icon-about"> About BC.Game </label> <div class="post-entry"> </div> </div> <div> <label class="g-rev-card--content-block-title -icon-overview"> Overview </label> <div class="review-page--side-rating---data"> <div class="line"> <label class="label">Website</label> <span class="val"> <a aria-label="Go to BC.Game betting site" href="https://asian-bookies.net/go/bc-game/" rel="nofollow" target="_blank">BC.Game</a> </span> </div> <div class="line"> <label class="label">Established</label> <span class="val"> BlockDance BV </span> </div> <div class="line"> <label class="label">License</label> <span class="val"> Curacao </span> </div> <div class="line"> <label class="label">Bonus</label> <span class="val"> <span>300%</span> Bonus on deposit from 10$ USD! Up to <span>$20,000 USD</span>! </span> </div> <div class="line"> <label class="label">Wagering Requirement</label> <span class="val"> 35x </span> </div> <div class="line"> <label class="label">No Deposit Bonus</label> <span class="val"> No </span> </div> <div class="line"> <label class="label">Live Chat</label> <span class="val"> Yes </span> </div> </div> </div> <div class="cta-custom-style-in-table"> <div class="custom-review-block__cta"> <a aria-label="Go to BC.Game betting site" class="main-link-btn -ib-important" href="https://asian-bookies.net/go/bc-game/" rel="nofollow" target="_blank"> <span class="big-label">Bet Now</span> <span class="small-label">Go to BC.Game</span> </a> </div> </div> </div> </div> <button class="g-rev-card--btn" title="More Info about BC.Game"></button> </div> </div> <div class="custom-review-block"> <div class="custom-review-block__number">6</div> <div class="custom-review-block__logo" style="background-color:#0d1d34"> <a aria-label="Go to 20Bet betting site" href="https://asian-bookies.net/go/20bet/"> <picture><source srcset="https://asian-bookies.net/wp-content/webp-express/webp-images/uploads/2022/12/20bet-293x90.png.webp" type="image/webp"><img loading="lazy" decoding="async" width="293" height="90" src="https://asian-bookies.net/wp-content/uploads/2022/12/20bet-293x90.png" class="attachment-poka-review-thumb size-poka-review-thumb webpexpress-processed" alt="20bet"></picture> </a> </div> <div class="custom-review-block__rating"> <div class="count-text">4.9<span> / 5</span></div> <div class="stars-section main-stars-block"> <i></i><i></i><i></i><i></i><i></i> </div> <div class="text-bottom">TOTAL SCORE</div> </div> <div class="custom-review-block__bonus"> <div class="custom-review-block__bonus__label">Bonus:</div> <div class="custom-review-block__bonus__desc"> <span>+100%</span> Bonus up to <span>$100 USD</span> </div> </div> <div class="custom-review-block__cta"> <a aria-label="Go to 20Bet betting site" class="main-link-btn -ib-important" href="https://asian-bookies.net/go/20bet/" rel="nofollow" target="_blank"> <span class="big-label">Bet Now</span> <span class="small-label">Go to 20Bet</span> </a> </div> <div class="g-rev-card-bottom-area"> <div class="g-rev-card--content"> <div class="g-rev-card--content--top"> <div class="g-rev-card__title">20Bet</div> <div class="g-rev-card__more-link"> <a class="main-link-btn -ib-important" href="https://asian-bookies.net/review/20bet/"> <span class="big-label">READ REVIEW</span> </a> </div> </div> <div class="g-rev-card--content--center"> <div> <label class="g-rev-card--content-block-title -icon-about"> About 20Bet </label> <div class="post-entry"> </div> </div> <div> <label class="g-rev-card--content-block-title -icon-overview"> Overview </label> <div class="review-page--side-rating---data"> <div class="line"> <label class="label">Website</label> <span class="val"> <a aria-label="Go to 20Bet betting site" href="https://asian-bookies.net/go/20bet/" rel="nofollow" target="_blank">20bet.com</a> </span> </div> <div class="line"> <label class="label">Established</label> <span class="val"> TechSolutions Group NV </span> </div> <div class="line"> <label class="label">License</label> <span class="val"> Curacao </span> </div> <div class="line"> <label class="label">Bonus</label> <span class="val"> <span>+100%</span> Bonus up to <span>$100 USD</span> </span> </div> <div class="line"> <label class="label">Wagering Requirement</label> <span class="val"> 20x </span> </div> <div class="line"> <label class="label">No Deposit Bonus</label> <span class="val"> No </span> </div> <div class="line"> <label class="label">Live Chat</label> <span class="val"> Yes </span> </div> </div> </div> <div class="cta-custom-style-in-table"> <div class="custom-review-block__cta"> <a aria-label="Go to 20Bet betting site" class="main-link-btn -ib-important" href="https://asian-bookies.net/go/20bet/" rel="nofollow" target="_blank"> <span class="big-label">Bet Now</span> <span class="small-label">Go to 20Bet</span> </a> </div> </div> </div> </div> <button class="g-rev-card--btn" title="More Info about 20Bet"></button> </div> </div> <div class="custom-review-block"> <div class="custom-review-block__number">7</div> <div class="custom-review-block__logo" style="background-color:#14805e"> <a aria-label="Go to BetWinner betting site" href="https://asian-bookies.net/go/betwinner/"> <picture><source srcset="https://asian-bookies.net/wp-content/webp-express/webp-images/uploads/2022/11/BetWinner-3-225x90.png.webp" type="image/webp"><img loading="lazy" decoding="async" width="225" height="90" src="https://asian-bookies.net/wp-content/uploads/2022/11/BetWinner-3-225x90.png" class="attachment-poka-review-thumb size-poka-review-thumb webpexpress-processed" alt="BetWinner - bookmaker logo"></picture> </a> </div> <div class="custom-review-block__rating"> <div class="count-text">4.7<span> / 5</span></div> <div class="stars-section main-stars-block"> <i></i><i></i><i></i><i></i><i></i> </div> <div class="text-bottom">TOTAL SCORE</div> </div> <div class="custom-review-block__bonus"> <div class="custom-review-block__bonus__label">Bonus:</div> <div class="custom-review-block__bonus__desc"> Get <span>100%</span> and <span>30</span> Free Spins </div> </div> <div class="custom-review-block__cta"> <a aria-label="Go to BetWinner betting site" class="main-link-btn -ib-important" href="https://asian-bookies.net/go/betwinner/" rel="nofollow" target="_blank"> <span class="big-label">Bet Now</span> <span class="small-label">Go to BetWinner</span> </a> </div> <div class="g-rev-card-bottom-area"> <div class="g-rev-card--content"> <div class="g-rev-card--content--top"> <div class="g-rev-card__title">BetWinner</div> <div class="g-rev-card__more-link"> <a class="main-link-btn -ib-important" href="https://asian-bookies.net/review/betwinner/"> <span class="big-label">READ REVIEW</span> </a> </div> </div> <div class="g-rev-card--content--center"> <div> <label class="g-rev-card--content-block-title -icon-about"> About BetWinner </label> <div class="post-entry"> </div> </div> <div> <label class="g-rev-card--content-block-title -icon-overview"> Overview </label> <div class="review-page--side-rating---data"> <div class="line"> <label class="label">Website</label> <span class="val"> <a aria-label="Go to BetWinner betting site" href="https://asian-bookies.net/go/betwinner/" rel="nofollow" target="_blank">betwinner.com</a> </span> </div> <div class="line"> <label class="label">Established</label> <span class="val"> Harbesina LTD </span> </div> <div class="line"> <label class="label">License</label> <span class="val"> Curacao </span> </div> <div class="line"> <label class="label">Bonus</label> <span class="val"> Get <span>100%</span> and <span>30</span> Free Spins </span> </div> <div class="line"> <label class="label">Wagering Requirement</label> <span class="val"> 20x </span> </div> <div class="line"> <label class="label">No Deposit Bonus</label> <span class="val"> No </span> </div> <div class="line"> <label class="label">Live Chat</label> <span class="val"> Yes </span> </div> </div> </div> <div class="cta-custom-style-in-table"> <div class="custom-review-block__cta"> <a aria-label="Go to BetWinner betting site" class="main-link-btn -ib-important" href="https://asian-bookies.net/go/betwinner/" rel="nofollow" target="_blank"> <span class="big-label">Bet Now</span> <span class="small-label">Go to BetWinner</span> </a> </div> </div> </div> </div> <button class="g-rev-card--btn" title="More Info about BetWinner"></button> </div> </div> <div class="custom-review-block"> <div class="custom-review-block__number">8</div> <div class="custom-review-block__logo" style="background-color:#185a61"> <a aria-label="Go to 22Bet betting site" href="https://asian-bookies.net/go/22bet/"> <picture><source srcset="https://asian-bookies.net/wp-content/webp-express/webp-images/uploads/2022/11/22BET.png.webp" type="image/webp"><img loading="lazy" decoding="async" width="200" height="80" src="https://asian-bookies.net/wp-content/uploads/2022/11/22BET.png" class="attachment-poka-review-thumb size-poka-review-thumb webpexpress-processed" alt="22BET - bookmaker logo"></picture> </a> </div> <div class="custom-review-block__rating"> <div class="count-text">5<span> / 5</span></div> <div class="stars-section main-stars-block"> <i></i><i></i><i></i><i></i><i></i> </div> <div class="text-bottom">TOTAL SCORE</div> </div> <div class="custom-review-block__bonus"> <div class="custom-review-block__bonus__label">Bonus:</div> <div class="custom-review-block__bonus__desc"> <span>100%</span> Bonus up to <span>$140 USD</span> </div> </div> <div class="custom-review-block__cta"> <a aria-label="Go to 22Bet betting site" class="main-link-btn -ib-important" href="https://asian-bookies.net/go/22bet/" rel="nofollow" target="_blank"> <span class="big-label">Bet Now</span> <span class="small-label">Go to 22Bet</span> </a> </div> <div class="g-rev-card-bottom-area"> <div class="g-rev-card--content"> <div class="g-rev-card--content--top"> <div class="g-rev-card__title">22Bet</div> <div class="g-rev-card__more-link"> <a class="main-link-btn -ib-important" href="https://asian-bookies.net/review/22bet/"> <span class="big-label">READ REVIEW</span> </a> </div> </div> <div class="g-rev-card--content--center"> <div> <label class="g-rev-card--content-block-title -icon-about"> About 22Bet </label> <div class="post-entry"> </div> </div> <div> <label class="g-rev-card--content-block-title -icon-overview"> Overview </label> <div class="review-page--side-rating---data"> <div class="line"> <label class="label">Website</label> <span class="val"> <a aria-label="Go to 22Bet betting site" href="https://asian-bookies.net/go/22bet/" rel="nofollow" target="_blank">22bet.com</a> </span> </div> <div class="line"> <label class="label">Established</label> <span class="val"> 2018 </span> </div> <div class="line"> <label class="label">License</label> <span class="val"> Curacao </span> </div> <div class="line"> <label class="label">Bonus</label> <span class="val"> 100% Bonus up to $140 USD </span> </div> <div class="line"> <label class="label">Wagering Requirement</label> <span class="val"> 5x for Sport and 50x for Casino </span> </div> <div class="line"> <label class="label">No Deposit Bonus</label> <span class="val"> No </span> </div> <div class="line"> <label class="label">Live Chat</label> <span class="val"> Yes </span> </div> </div> </div> <div class="cta-custom-style-in-table"> <div class="custom-review-block__cta"> <a aria-label="Go to 22Bet betting site" class="main-link-btn -ib-important" href="https://asian-bookies.net/go/22bet/" rel="nofollow" target="_blank"> <span class="big-label">Bet Now</span> <span class="small-label">Go to 22Bet</span> </a> </div> </div> </div> </div> <button class="g-rev-card--btn" title="More Info about 22Bet"></button> </div> </div> <div class="custom-review-block"> <div class="custom-review-block__number">9</div> <div class="custom-review-block__logo" style="background-color:#ae0000"> <a aria-label="Go to Dafabet betting site" href="https://asian-bookies.net/go/dafabet/"> <picture><source srcset="https://asian-bookies.net/wp-content/webp-express/webp-images/uploads/2022/11/Dafabet-3-293x90-1-293x90.png.webp" type="image/webp"><img loading="lazy" decoding="async" width="293" height="90" src="https://asian-bookies.net/wp-content/uploads/2022/11/Dafabet-3-293x90-1-293x90.png" class="attachment-poka-review-thumb size-poka-review-thumb webpexpress-processed" alt=""></picture> </a> </div> <div class="custom-review-block__rating"> <div class="count-text">5<span> / 5</span></div> <div class="stars-section main-stars-block"> <i></i><i></i><i></i><i></i><i></i> </div> <div class="text-bottom">TOTAL SCORE</div> </div> <div class="custom-review-block__bonus"> <div class="custom-review-block__bonus__label">Bonus:</div> <div class="custom-review-block__bonus__desc"> <span>100%</span> Bonus up to <span>$140 USD</span> <br>Bonus Code: <span>RM600!</span> </div> </div> <div class="custom-review-block__cta"> <a aria-label="Go to Dafabet betting site" class="main-link-btn -ib-important" href="https://asian-bookies.net/go/dafabet/" rel="nofollow" target="_blank"> <span class="big-label">Bet Now</span> <span class="small-label">Go to Dafabet</span> </a> </div> <div class="g-rev-card-bottom-area"> <div class="g-rev-card--content"> <div class="g-rev-card--content--top"> <div class="g-rev-card__title">Dafabet</div> <div class="g-rev-card__more-link"> <a class="main-link-btn -ib-important" href="https://asian-bookies.net/review/dafabet/"> <span class="big-label">READ REVIEW</span> </a> </div> </div> <div class="g-rev-card--content--center"> <div> <label class="g-rev-card--content-block-title -icon-about"> About Dafabet </label> <div class="post-entry"> </div> </div> <div> <label class="g-rev-card--content-block-title -icon-overview"> Overview </label> <div class="review-page--side-rating---data"> <div class="line"> <label class="label">Website</label> <span class="val"> <a aria-label="Go to Dafabet betting site" href="https://asian-bookies.net/go/dafabet/" rel="nofollow" target="_blank">dafabet.com</a> </span> </div> <div class="line"> <label class="label">Established</label> <span class="val"> 2004 </span> </div> <div class="line"> <label class="label">License</label> <span class="val"> Curacao, Philippines (PAGCOR), United Kingdom </span> </div> <div class="line"> <label class="label">Bonus</label> <span class="val"> 100% up to $140 USD - Bonus Code: RM600! </span> </div> <div class="line"> <label class="label">Wagering Requirement</label> <span class="val"> 20x </span> </div> <div class="line"> <label class="label">No Deposit Bonus</label> <span class="val"> No </span> </div> <div class="line"> <label class="label">Live Chat</label> <span class="val"> Yes </span> </div> </div> </div> <div class="cta-custom-style-in-table"> <div class="custom-review-block__cta"> <a aria-label="Go to Dafabet betting site" class="main-link-btn -ib-important" href="https://asian-bookies.net/go/dafabet/" rel="nofollow" target="_blank"> <span class="big-label">Bet Now</span> <span class="small-label">Go to Dafabet</span> </a> </div> </div> </div> </div> <button class="g-rev-card--btn" title="More Info about Dafabet"></button> </div> </div> <div class="custom-review-block"> <div class="custom-review-block__number">10</div> <div class="custom-review-block__logo" style="background-color:#ffffff"> <a aria-label="Go to 4raBet betting site" href="https://asian-bookies.net/go/4rabet/"> <picture><source srcset="https://asian-bookies.net/wp-content/webp-express/webp-images/uploads/2022/11/4raBet-1-293x90.png.webp" type="image/webp"><img loading="lazy" decoding="async" width="293" height="90" src="https://asian-bookies.net/wp-content/uploads/2022/11/4raBet-1-293x90.png" class="attachment-poka-review-thumb size-poka-review-thumb webpexpress-processed" alt="4raBet - bookmaker logo"></picture> </a> </div> <div class="custom-review-block__rating"> <div class="count-text">4.8<span> / 5</span></div> <div class="stars-section main-stars-block"> <i></i><i></i><i></i><i></i><i></i> </div> <div class="text-bottom">TOTAL SCORE</div> </div> <div class="custom-review-block__bonus"> <div class="custom-review-block__bonus__label">Bonus:</div> <div class="custom-review-block__bonus__desc"> Sports Welcome Pack: <span>+600%</span> up to <span>₹60,000 INR! </div> </div> <div class="custom-review-block__cta"> <a aria-label="Go to 4raBet betting site" class="main-link-btn -ib-important" href="https://asian-bookies.net/go/4rabet/" rel="nofollow" target="_blank"> <span class="big-label">Bet Now</span> <span class="small-label">Go to 4raBet</span> </a> </div> <div class="g-rev-card-bottom-area"> <div class="g-rev-card--content"> <div class="g-rev-card--content--top"> <div class="g-rev-card__title">4raBet</div> <div class="g-rev-card__more-link"> <a class="main-link-btn -ib-important" href="https://asian-bookies.net/review/4rabet/"> <span class="big-label">READ REVIEW</span> </a> </div> </div> <div class="g-rev-card--content--center"> <div> <label class="g-rev-card--content-block-title -icon-about"> About 4raBet </label> <div class="post-entry"> </div> </div> <div> <label class="g-rev-card--content-block-title -icon-overview"> Overview </label> <div class="review-page--side-rating---data"> <div class="line"> <label class="label">Website</label> <span class="val"> <a aria-label="Go to 4raBet betting site" href="https://asian-bookies.net/go/4rabet/" rel="nofollow" target="_blank">4rabet247.com</a> </span> </div> <div class="line"> <label class="label">Established</label> <span class="val"> Umbrella Development B.V. </span> </div> <div class="line"> <label class="label">License</label> <span class="val"> Curacao </span> </div> <div class="line"> <label class="label">Bonus</label> <span class="val"> Sports 600% up to 700 USD </span> </div> <div class="line"> <label class="label">Wagering Requirement</label> <span class="val"> 20x </span> </div> <div class="line"> <label class="label">No Deposit Bonus</label> <span class="val"> No </span> </div> <div class="line"> <label class="label">Live Chat</label> <span class="val"> yes </span> </div> </div> </div> <div class="cta-custom-style-in-table"> <div class="custom-review-block__cta"> <a aria-label="Go to 4raBet betting site" class="main-link-btn -ib-important" href="https://asian-bookies.net/go/4rabet/" rel="nofollow" target="_blank"> <span class="big-label">Bet Now</span> <span class="small-label">Go to 4raBet</span> </a> </div> </div> </div> </div> <button class="g-rev-card--btn" title="More Info about 4raBet"></button> </div> </div> <div class="custom-review-block"> <div class="custom-review-block__number">11</div> <div class="custom-review-block__logo" style="background-color:#526686"> <a aria-label="Go to M88 Mansion betting site" href="https://asian-bookies.net/go/m88/"> <picture><source srcset="https://asian-bookies.net/wp-content/webp-express/webp-images/uploads/2022/11/m88-mansion-casino-logo.png.webp" type="image/webp"><img loading="lazy" decoding="async" width="290" height="90" src="https://asian-bookies.net/wp-content/uploads/2022/11/m88-mansion-casino-logo.png" class="attachment-poka-review-thumb size-poka-review-thumb webpexpress-processed" alt=""></picture> </a> </div> <div class="custom-review-block__rating"> <div class="count-text">5<span> / 5</span></div> <div class="stars-section main-stars-block"> <i></i><i></i><i></i><i></i><i></i> </div> <div class="text-bottom">TOTAL SCORE</div> </div> <div class="custom-review-block__bonus"> <div class="custom-review-block__bonus__label">Bonus:</div> <div class="custom-review-block__bonus__desc"> <span>200%</span> Bonus up to <span>$650 USD</span> <br>+ Get <span>88</span> Free Spins! </div> </div> <div class="custom-review-block__cta"> <a aria-label="Go to M88 Mansion betting site" class="main-link-btn -ib-important" href="https://asian-bookies.net/go/m88/" rel="nofollow" target="_blank"> <span class="big-label">Bet Now</span> <span class="small-label">Go to M88 Mansion</span> </a> </div> <div class="g-rev-card-bottom-area"> <div class="g-rev-card--content"> <div class="g-rev-card--content--top"> <div class="g-rev-card__title">M88 Mansion</div> <div class="g-rev-card__more-link"> <a class="main-link-btn -ib-important" href="https://asian-bookies.net/review/m88/"> <span class="big-label">READ REVIEW</span> </a> </div> </div> <div class="g-rev-card--content--center"> <div> <label class="g-rev-card--content-block-title -icon-about"> About M88 Mansion </label> <div class="post-entry"> </div> </div> <div> <label class="g-rev-card--content-block-title -icon-overview"> Overview </label> <div class="review-page--side-rating---data"> <div class="line"> <label class="label">Website</label> <span class="val"> <a aria-label="Go to M88 Mansion betting site" href="https://asian-bookies.net/go/m88/" rel="nofollow" target="_blank">m88.com</a> </span> </div> <div class="line"> <label class="label">Established</label> <span class="val"> 2007 </span> </div> <div class="line"> <label class="label">License</label> <span class="val"> Vanuatu Gambling License </span> </div> <div class="line"> <label class="label">Bonus</label> <span class="val"> <span>200%</span> Bonus up to $650 USD + Get <span>88</span> Free Spins! </span> </div> <div class="line"> <label class="label">Wagering Requirement</label> <span class="val"> 18x </span> </div> <div class="line"> <label class="label">No Deposit Bonus</label> <span class="val"> No </span> </div> <div class="line"> <label class="label">Live Chat</label> <span class="val"> Yes </span> </div> </div> </div> <div> <label class="g-rev-card--content-block-title -icon-about"> Advantages M88 Mansion </label> <div class="pros-cons-block -small-fs pros-cons-block--in-table"> <div class="pros-cons-block__block -pros"> <div class="pros-cons-block__content"> <ul> <li>Best betting sites for Asian Handicap</li> <li>Very Trusted Brand!</li> <li>High Maximum Limits for Deposit and Withdrawal</li> <li>Great Bonus Line and VIP-program! </li> </ul> </div> </div> </div> </div> <div class="cta-custom-style-in-table"> <div class="custom-review-block__cta"> <a aria-label="Go to M88 Mansion betting site" class="main-link-btn -ib-important" href="https://asian-bookies.net/go/m88/" rel="nofollow" target="_blank"> <span class="big-label">Bet Now</span> <span class="small-label">Go to M88 Mansion</span> </a> </div> </div> </div> </div> <button class="g-rev-card--btn" title="More Info about M88 Mansion"></button> </div> </div> </div> <h2 class="wp-block-heading" class="wp-block-heading" id="asian-bookies-are-they-legit"><strong>Asian Bookies – Are They Legit?</strong></h2> <p>Yes, many countries in Asia have made online bookmakers completely legal in their jurisdiction. However, whether you can legally bet on an Asian betting site depends on the country you’re located in since every jurisdiction has its gambling laws. These regulations greatly vary across the continent, although it’s becoming more common for Asians to bet online.</p> <p>Countries like Indonesia, Singapore, and China have issued a blanket ban on online betting, although Hong Kong has more relaxed regulations towards sports gambling. Other countries like Macau and the Philippines also offer more freedom for sports betting, making it easy for you to wager on your favorite sports and leagues.</p> <p>As such, whether you can bet legally with Asian bookies will depend on these two situations:</p> <h3 class="wp-block-heading" class="wp-block-heading" id="situation-1-you-are-a-citizen-of-an-asian-country"><strong>Situation 1: You are a citizen of an Asian country</strong></h3> <p>When you’re a resident of an Asian country, it’s important to check the legality of online betting on sports. That’s because every country has its regulations on gambling, although you can still use a VPN to bet through <a href="https://asian-bookies.net/en/best-offshore-betting-sites/">offshore Asian sports bookies</a> if your country has strict laws.</p> <h3 class="wp-block-heading" class="wp-block-heading" id="situation-2-you-are-not-a-citizen-of-an-asian-country"><strong>Situation 2: You are not a citizen of an Asian country</strong></h3> <p>If you’re not an Asian resident, then you don’t need to worry about the strict gambling restrictions imposed in many jurisdictions. Many legal Asian bookies allow punters from all over the world to join their platforms and place wagers on different markets. However, it’s essential to only choose legal online betting sites with the relevant licenses.</p> <h3 class="wp-block-heading" class="wp-block-heading" id="in-which-asian-countries-are-betting-and-gambling-legal"><strong>In which Asian countries are betting and gambling legal?</strong></h3> <p>As earlier mentioned, Asia is a huge continent with 48 countries, with a vast majority of them being Muslim or Buddhist. A vast majority of the Muslim countries in the region highly rebuke sports gambling and any form of casino gaming, as it goes against the Sharia law. As such, countries like China, Bangladesh, Cambodia, Singapore, Japan, Indonesia, and Thailand have strict anti-gambling regulations. However, countries like <a href="https://asian-bookies.net/en/macau/">Macau</a>, Hong Kong, and Taiwan have more relaxed laws towards gambling.</p> <div class="wp-block-image"> <figure class="aligncenter"><picture><source srcset="https://asian-bookies.net/wp-content/webp-express/webp-images/uploads/2022/11/best-asian-bookmaker-1024x254-1.jpeg.webp 1024w, https://asian-bookies.net/wp-content/webp-express/webp-images/uploads/2022/11/best-asian-bookmaker-1024x254-1-970x241.jpeg.webp 970w, https://asian-bookies.net/wp-content/webp-express/webp-images/uploads/2022/11/best-asian-bookmaker-1024x254-1-768x191.jpeg.webp 768w, https://asian-bookies.net/wp-content/webp-express/webp-images/uploads/2022/11/best-asian-bookmaker-1024x254-1-1000x248.jpeg.webp 1000w" sizes="auto, (max-width: 1024px) 100vw, 1024px" type="image/webp"><img loading="lazy" decoding="async" width="1024" height="254" src="https://asian-bookies.net/wp-content/uploads/2022/11/best-asian-bookmaker-1024x254-1.jpeg" alt="How to Choose Best Asian Bookmakers?" class="wp-image-5248 webpexpress-processed" srcset="https://asian-bookies.net/wp-content/uploads/2022/11/best-asian-bookmaker-1024x254-1.jpeg 1024w, https://asian-bookies.net/wp-content/uploads/2022/11/best-asian-bookmaker-1024x254-1-970x241.jpeg 970w, https://asian-bookies.net/wp-content/uploads/2022/11/best-asian-bookmaker-1024x254-1-768x191.jpeg 768w, https://asian-bookies.net/wp-content/uploads/2022/11/best-asian-bookmaker-1024x254-1-1000x248.jpeg 1000w" sizes="auto, (max-width: 1024px) 100vw, 1024px"></picture></figure></div> <p></p> <h4 class="wp-block-heading" class="wp-block-heading" id="betting-sites-in-southeast-asia">Betting Sites in Southeast Asia</h4> <div class="g-block-columns-countries"> <a href="https://asian-bookies.net/cambodia/" class="g-block-columns-countries--item"> <picture><source srcset="https://asian-bookies.net/wp-content/webp-express/webp-images/uploads/2023/02/cambodia.png.webp" type="image/webp"><img decoding="async" src="https://asian-bookies.net/wp-content/uploads/2023/02/cambodia.png" alt="best Cambodia betting sites" class="webpexpress-processed"></picture> <span>Cambodia</span> </a> <a href="https://asian-bookies.net/online-betting-indonesia/" class="g-block-columns-countries--item"> <picture><source srcset="https://asian-bookies.net/wp-content/webp-express/webp-images/uploads/2023/02/indonesia-1.png.webp" type="image/webp"><img decoding="async" src="https://asian-bookies.net/wp-content/uploads/2023/02/indonesia-1.png" alt="online betting Indonesia" class="webpexpress-processed"></picture> <span>Indonesia</span> </a> <a href="https://asian-bookies.net/laos/" class="g-block-columns-countries--item"> <picture><source srcset="https://asian-bookies.net/wp-content/webp-express/webp-images/uploads/2023/02/laos-1.png.webp" type="image/webp"><img decoding="async" src="https://asian-bookies.net/wp-content/uploads/2023/02/laos-1.png" alt="Laos betting sites" class="webpexpress-processed"></picture> <span>Laos</span> </a> <a href="https://asian-bookies.net/malaysia/" class="g-block-columns-countries--item"> <picture><source srcset="https://asian-bookies.net/wp-content/webp-express/webp-images/uploads/2023/02/malaysia.png.webp" type="image/webp"><img decoding="async" src="https://asian-bookies.net/wp-content/uploads/2023/02/malaysia.png" alt="best online betting sites Malaysia" class="webpexpress-processed"></picture> <span>Malaysia</span> </a> <a href="https://asian-bookies.net/myanmar/" class="g-block-columns-countries--item"> <picture><source srcset="https://asian-bookies.net/wp-content/webp-express/webp-images/uploads/2023/02/myanmar.png.webp" type="image/webp"><img decoding="async" src="https://asian-bookies.net/wp-content/uploads/2023/02/myanmar.png" alt="Myanmar betting sites" class="webpexpress-processed"></picture> <span>Myanmar</span> </a> <a href="https://asian-bookies.net/philippines/" class="g-block-columns-countries--item"> <picture><source srcset="https://asian-bookies.net/wp-content/webp-express/webp-images/uploads/2023/02/philippines.png.webp" type="image/webp"><img decoding="async" src="https://asian-bookies.net/wp-content/uploads/2023/02/philippines.png" alt="best sports betting sites Philippines" class="webpexpress-processed"></picture> <span>Philippines</span> </a> <a href="https://asian-bookies.net/singapore/" class="g-block-columns-countries--item"> <picture><source srcset="https://asian-bookies.net/wp-content/webp-express/webp-images/uploads/2023/02/singapore.png.webp" type="image/webp"><img decoding="async" src="https://asian-bookies.net/wp-content/uploads/2023/02/singapore.png" alt="Singapore betting sites" class="webpexpress-processed"></picture> <span>Singapore</span> </a> <a href="https://asian-bookies.net/online-sports-betting-thailand/" class="g-block-columns-countries--item"> <picture><source srcset="https://asian-bookies.net/wp-content/webp-express/webp-images/uploads/2023/02/thailand.png.webp" type="image/webp"><img decoding="async" src="https://asian-bookies.net/wp-content/uploads/2023/02/thailand.png" alt="Sports Betting Thailand" class="webpexpress-processed"></picture> <span>Thailand</span> </a> <a href="https://asian-bookies.net/vietnam/" class="g-block-columns-countries--item"> <picture><source srcset="https://asian-bookies.net/wp-content/webp-express/webp-images/uploads/2023/02/vietnam.png.webp" type="image/webp"><img decoding="async" src="https://asian-bookies.net/wp-content/uploads/2023/02/vietnam.png" alt="Vietnam betting sites" class="webpexpress-processed"></picture> <span>Vietnam</span> </a> </div> <p></p> <h4 class="wp-block-heading" class="wp-block-heading" id="betting-sites-in-south-asia">Betting Sites in South Asia</h4> <div class="g-block-columns-countries"> <a href="https://asian-bookies.net/bangladesh/" class="g-block-columns-countries--item"> <picture><source srcset="https://asian-bookies.net/wp-content/webp-express/webp-images/uploads/2023/02/bangladesh.png.webp" type="image/webp"><img decoding="async" src="https://asian-bookies.net/wp-content/uploads/2023/02/bangladesh.png" alt="top 10 betting site in Bangladesh" class="webpexpress-processed"></picture> <span>Bangladesh</span> </a> <a href="https://asian-bookies.net/india/" class="g-block-columns-countries--item"> <picture><source srcset="https://asian-bookies.net/wp-content/webp-express/webp-images/uploads/2023/02/india.png.webp" type="image/webp"><img decoding="async" src="https://asian-bookies.net/wp-content/uploads/2023/02/india.png" alt="Indian local betting sites" class="webpexpress-processed"></picture> <span>India</span> </a> <a href="https://asian-bookies.net/nepal/" class="g-block-columns-countries--item"> <picture><source srcset="https://asian-bookies.net/wp-content/webp-express/webp-images/uploads/2023/02/nepal.png.webp" type="image/webp"><img decoding="async" src="https://asian-bookies.net/wp-content/uploads/2023/02/nepal.png" alt="Nepal Betting Sites" class="webpexpress-processed"></picture> <span>Nepal</span> </a> <a href="https://asian-bookies.net/pakistan/" class="g-block-columns-countries--item"> <picture><source srcset="https://asian-bookies.net/wp-content/webp-express/webp-images/uploads/2023/02/pakistan.png.webp" type="image/webp"><img decoding="async" src="https://asian-bookies.net/wp-content/uploads/2023/02/pakistan.png" alt="best online betting sites in Pakistan" class="webpexpress-processed"></picture> <span>Pakistan</span> </a> <a href="https://asian-bookies.net/sri-lanka/" class="g-block-columns-countries--item"> <picture><source srcset="https://asian-bookies.net/wp-content/webp-express/webp-images/uploads/2023/02/sri-lanka.png.webp" type="image/webp"><img decoding="async" src="https://asian-bookies.net/wp-content/uploads/2023/02/sri-lanka.png" alt="best sports betting sites Sri Lanka" class="webpexpress-processed"></picture> <span>Sri Lanka</span> </a> </div> <p></p> <h4 class="wp-block-heading" class="wp-block-heading" id="betting-sites-in-east-asia">Betting Sites in East Asia</h4> <div class="g-block-columns-countries"> <a href="https://asian-bookies.net/china/" class="g-block-columns-countries--item"> <picture><source srcset="https://asian-bookies.net/wp-content/webp-express/webp-images/uploads/2023/02/china.png.webp" type="image/webp"><img decoding="async" src="https://asian-bookies.net/wp-content/uploads/2023/02/china.png" alt="China betting sites" class="webpexpress-processed"></picture> <span>China</span> </a> <a href="https://asian-bookies.net/hong-kong/" class="g-block-columns-countries--item"> <picture><source srcset="https://asian-bookies.net/wp-content/webp-express/webp-images/uploads/2023/02/hong-kong.png.webp" type="image/webp"><img decoding="async" src="https://asian-bookies.net/wp-content/uploads/2023/02/hong-kong.png" alt="best betting sites Hong Kong" class="webpexpress-processed"></picture> <span>Hong Kong</span> </a> <a href="https://asian-bookies.net/japan/" class="g-block-columns-countries--item"> <picture><source srcset="https://asian-bookies.net/wp-content/webp-express/webp-images/uploads/2023/02/japan.png.webp" type="image/webp"><img decoding="async" src="https://asian-bookies.net/wp-content/uploads/2023/02/japan.png" alt="best betting sites Japan" class="webpexpress-processed"></picture> <span>Japan</span> </a> <a href="https://asian-bookies.net/macau/" class="g-block-columns-countries--item"> <picture><source srcset="https://asian-bookies.net/wp-content/webp-express/webp-images/uploads/2023/02/macao.png.webp" type="image/webp"><img decoding="async" src="https://asian-bookies.net/wp-content/uploads/2023/02/macao.png" alt="Macau sports betting" class="webpexpress-processed"></picture> <span>Macau</span> </a> <a href="https://asian-bookies.net/korea/" class="g-block-columns-countries--item"> <picture><source srcset="https://asian-bookies.net/wp-content/webp-express/webp-images/uploads/2023/02/south-korea.png.webp" type="image/webp"><img decoding="async" src="https://asian-bookies.net/wp-content/uploads/2023/02/south-korea.png" alt="best South Korea betting sites" class="webpexpress-processed"></picture> <span>South Korea</span> </a> <a href="https://asian-bookies.net/taiwan/" class="g-block-columns-countries--item"> <picture><source srcset="https://asian-bookies.net/wp-content/webp-express/webp-images/uploads/2023/02/taiwan.png.webp" type="image/webp"><img decoding="async" src="https://asian-bookies.net/wp-content/uploads/2023/02/taiwan.png" alt="Taiwan betting sites" class="webpexpress-processed"></picture> <span>Taiwan</span> </a> </div> <hr class="wp-block-separator has-alpha-channel-opacity" /> <h2><b>How do we rate Asian bookmakers?</b></h2> <p><span style="font-weight: 400">When it comes to sports betting, different punters have different preferences, goals, and needs. However, it’s wise to know which Asian bookmaker can deliver what you need before risking your money. Here’s how our gambling experts rate the best Asian bookies recommended on this page:</span></p> <h3><b>Asian Handicaps and other Asian Bets</b></h3> <p><span style="font-weight: 400">Asian handicaps have made Asia online betting popular among professional punters around the world. The simplest and most common type of Asian handicap is the 0.0 handicap, which works similarly to the draw-no-bet market. From there, you’ll want an Asian bookie that also features halves (-0.5/+0.5, -1.5/+1.5</span> <span style="font-weight: 400">e.tc</span><span style="font-weight: 400">)and quarters (-0.25/+0.25, -1.25/+1.25</span> <span style="font-weight: 400">e.tc</span><span style="font-weight: 400">).</span></p> <p><span style="font-weight: 400">If you want these types of Asian bets, our list of top Asian bookies will help you find the right option. We highly rank Asian bookies that offer dozens of handicaps, including handicaps on corners, first 10-minute results, and much more.</span></p> <h3><b>In-Play Betting and Live Streaming</b></h3> <p><span style="font-weight: 400">Live/in-play betting is a must-have feature for Asia betting sites that want to rank well in the current market. In-play betting is among the most popular betting markets in the current gambling industry. As such, any Asian bookmaker that doesn’t offer live odds can’t be classified as a worthy choice. Additionally, we value platforms that have a live-streaming option as it adds to the overall experience.</span></p> <h3><b>eSports Betting markets</b></h3> <p><span style="font-weight: 400">While</span> <a href="https://asian-bookies.net/en/esports-betting-sites/"><span style="font-weight: 400">esports betting</span></a><span style="font-weight: 400"> is generally a new phenomenon in the Asian betting market, it’s clear that esports are shaping the future of the sports betting market. eSports first became popular in Korea and betting on virtual events has become quite common in recent years. As such, we recommend Asian bookies that offer punters the opportunity to try their luck on their favorite esports titles.</span></p> <h3><b>Loyalty Programs and VIP Status</b></h3> <p><span style="font-weight: 400">When talking about loyalty programs and VIP status, we are referring to more than basic attempts to reward high rollers. Many Asian sports bookies are now offering loyalty programs to all their regular users regardless of their bankroll size. Most of these programs work by awarding the player with points for making wagers on the site and they can redeem the points later for other rewards designed by the bookmaker.</span></p> <p><span style="font-weight: 400">When reviewing Asian bookies, the VIP scheme also forms the basis of our ranking. As such, we assess the ease of joining the loyalty programs, the available levels, how to acquire points, and the ability of a regular player to move up the levels.</span></p> <h3><b>Safety and Security of Site or App</b></h3> <p><span style="font-weight: 400">While Asia bookies can still rank on our site even after performing poorly in one area, safety and security aren’t one of these areas. The security and privacy of our players is a key priority and if we deem any Asia bookie to have safety issues, we can’t recommend them. We judge the safety of online gambling sites by analyzing privacy policy and digital security systems.</span></p> <h3 id="bonuses" class="scroll-mt"><!-- /wp:paragraph --></h3> </article> </div> </div> <div class="home-slider-wrapper"> <div class="home-slider-wrapper__slide-area"> <div class="swiper home-slider"> <div class="swiper-wrapper"> <div class="swiper-slide home-slide__slide"> <div class="container"> <div class="home-slide__content"> <img width="54" height="54" src="https://asian-bookies.net/wp-content/uploads/2022/10/secure-shield-1.svg" class="attachment-full size-full" alt="" decoding="async" loading="lazy" /> <div class="title"> High Odds and Low Margin </div> <div class="desc"><p><span style="font-weight: 400;">We believe that wagering with the best Asian bookmaker should give you great value as most reputable operators in the region are known to take low margins and offer solid odds. However, the odds might differ from one online gaming site to the other.</span></p> <p><span style="font-weight: 400;">To find a suitable bookmaker for punters, we start by checking out which platforms offer high payout odds. Fortunately, the odds pages are easily accessible for free on every platform, even when you’re not a member. We then compare the odds in different sports and competitions from a broad range of Asian bookies.</span></p> </div> </div> </div> <div class="home-slide__img"> </div> </div> <div class="swiper-slide home-slide__slide"> <div class="container"> <div class="home-slide__content"> <img width="54" height="54" src="https://asian-bookies.net/wp-content/uploads/2022/10/secure-shield-1.svg" class="attachment-full size-full" alt="" decoding="async" loading="lazy" /> <div class="title"> Range of Sports Betting Markets </div> <div class="desc"><p><span style="font-weight: 400;">Sports betting in Asia features some of the hottest sports events and competitions from across the world. Some focus on major European Leagues like the Champions League, EPL, and NBA, while others focus on local leagues. Regardless of your favorite sport, we ensure that you can find a gambling site that offers everything from football markets to tennis odds and other popular events.</span></p> </div> </div> </div> <div class="home-slide__img"> </div> </div> <div class="swiper-slide home-slide__slide"> <div class="container"> <div class="home-slide__content"> <div class="title"> Banking Options: Global and Local Asian </div> <div class="desc"><p><span style="font-weight: 400;">The best sportsbook sites help players seamlessly transfer funds through a diverse array of payment methods. In fact, if you find a new site in the Asian market with only one payment method, you’ll need to be very weary. Additionally, astronomical fees for the transactions are also very alarming.</span></p> <p><span style="font-weight: 400;">When evaluating the banking options, we consider the range of local Asian and payment methods available, the applicable fees, and the amount of time it takes to process payments. Of course, we also check whether there are any limits set for the deposits and withdrawals.</span></p> </div> </div> </div> <div class="home-slide__img"> </div> </div> <div class="swiper-slide home-slide__slide"> <div class="container"> <div class="home-slide__content"> <div class="title"> Bookie Reputation </div> <div class="desc"><p><span style="font-weight: 400;">When reviewing the trustworthiness of Asian bookies, we consider the reputation of the operator in the market. To do that, we analyze the site’s history, who owns the sites, who are the managers, whether there are any major complaints, and whether the operator has issues with payouts. We also check for any predatory terms and conditions or marketing practices.</span></p> </div> </div> </div> <div class="home-slide__img"> </div> </div> <div class="swiper-slide home-slide__slide"> <div class="container"> <div class="home-slide__content"> <div class="title"> Valuable Betting Bonus Offers </div> <div class="desc"><p><span style="font-weight: 400;">You’ll find that most of the Asian bookies ranked well with us have a wide variety of bonus offers. Even when there’s a limited selection of gambling offers, we recommend reliable Asian bokies with good value bonuses.</span></p> <p><span style="font-weight: 400;">All the big names on our Asian bookmakers list like 1XBet,</span> <a href="https://asian-bookies.net/en/review/dafabet/"><span style="font-weight: 400;">Dafabet</span></a><span style="font-weight: 400;">, and M88 have valuable and player-friendly bonus offers that are easy to claim. You’ll also find plenty of exclusive bonus offers on our Asian bookies list, especially on particular events like the World Cup, cricket World Cup, and Cheltenham festival.</span></p> <p><span style="font-weight: 400;">Among the most common types of bonus offers the biggest Asian bookmakers we recommend offer, include:</span></p> <ul> <li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Money back specials</span></li> <li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Matched bonuses</span></li> <li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Enhanced odds/price boosts</span></li> <li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Risk-free bets</span></li> </ul> </div> </div> </div> <div class="home-slide__img"> </div> </div> <div class="swiper-slide home-slide__slide"> <div class="container"> <div class="home-slide__content"> <div class="title"> Accessibility in Specific Asian Countries </div> <div class="desc"><p><span style="font-weight: 400;">With many Asian countries having strict regulations on gambling, we highly rank bookmakers with wide accessibility in specific Asian countries. As such, we check the Asian countries in which an operator serves and all the restricted countries.</span></p> </div> </div> </div> <div class="home-slide__img"> </div> </div> </div> <div class="swiper-button-next"></div> <div class="swiper-button-prev"></div> </div> <div thumbsSlider="" class="swiper home-slider-thumbs"> <div class="swiper-wrapper"> <div class="swiper-slide home-slider-thumbs__slide" role="button"> <img width="54" height="54" src="https://asian-bookies.net/wp-content/uploads/2022/10/secure-shield-1.svg" class="attachment-full size-full" alt="" loading="eager" decoding="async" /> </div> <div class="swiper-slide home-slider-thumbs__slide" role="button"> <img width="54" height="54" src="https://asian-bookies.net/wp-content/uploads/2022/10/secure-shield-1.svg" class="attachment-full size-full" alt="" loading="eager" decoding="async" /> </div> <div class="swiper-slide home-slider-thumbs__slide" role="button"> </div> <div class="swiper-slide home-slider-thumbs__slide" role="button"> </div> <div class="swiper-slide home-slider-thumbs__slide" role="button"> </div> <div class="swiper-slide home-slider-thumbs__slide" role="button"> </div> </div> </div> </div> </div> <div class="container -big content-white mb145" id="benefits"> <div class="container block-content-padding"> <h2 class="mb20">What are the advantages of Asian Betting Sites?</h2> <div class="post-entry"> <p>Here’s a look at why the best Asian bookmakers are becoming quite popular among punters:</p> </div> <div class="home-benef-list"> <div class="home-benef-list__side"> <div role="button" class="home-benef-list__side-elem -active"> <span>Higher odds compared to other betting sites</span> <i></i> </div> <div role="button" class="home-benef-list__side-elem"> <span>A wider selection of sports and betting options</span> <i></i> </div> <div role="button" class="home-benef-list__side-elem"> <span>Many handicap options</span> <i></i> </div> <div role="button" class="home-benef-list__side-elem"> <span>Live betting</span> <i></i> </div> <div role="button" class="home-benef-list__side-elem"> <span>More attractive and diverse bonuses, promotions, and loyalty programs</span> <i></i> </div> <div role="button" class="home-benef-list__side-elem"> <span>High betting limits and the possibility of removing all limits - on bets, deposits and withdrawals</span> <i></i> </div> <div role="button" class="home-benef-list__side-elem"> <span>Disadvantages of Asian bookmakers</span> <i></i> </div> </div> <div class="home-benef-list__content"> <div class="home-benef-list__content-elem -active"> <div class="flex-num">01</div> <img src="https://asian-bookies.net/wp-content/uploads/2022/10/secure-shield-2.svg" class="display-img" loading="lazy" alt="Higher odds compared to other betting sites"> <img src="https://asian-bookies.net/wp-content/uploads/2022/10/secure-shield-1.svg" class="active-img" alt="Higher odds compared to other betting sites"> <h3 class="title">Higher odds compared to other betting sites</h3> <div class="desc">Top Asian bookmakers operate on lower margins than their European counterparts to remain competitive in the ever-evolving sports betting market. These Asian betting sites compete with each other in several betting markets, with each operator trying to offer their players the most value by giving them competitive betting odds.</div> </div> <div class="home-benef-list__content-elem"> <div class="flex-num">03</div> <img src="https://asian-bookies.net/wp-content/uploads/2022/10/secure-shield-2.svg" class="display-img" loading="lazy" alt="A wider selection of sports and betting options"> <img src="https://asian-bookies.net/wp-content/uploads/2022/10/secure-shield-1.svg" class="active-img" alt="A wider selection of sports and betting options"> <h3 class="title">A wider selection of sports and betting options</h3> <div class="desc">From soccer to basketball, Asian bookmakers feature international competitions and Asian betting markets for you to wager. Unlike European bookmakers, which rarely feature local Asian competitions, Asian sports betting sites cover a broad range of sports, leagues, and betting options. You can choose everything from the EPL to the IPL and J1 League. </div> </div> <div class="home-benef-list__content-elem"> <div class="flex-num">04</div> <img src="https://asian-bookies.net/wp-content/uploads/2022/10/secure-shield-2.svg" class="display-img" loading="lazy" alt="Many handicap options"> <img src="https://asian-bookies.net/wp-content/uploads/2022/10/secure-shield-1.svg" class="active-img" alt="Many handicap options"> <h3 class="title">Many handicap options</h3> <div class="desc">Asian bookies are best known for their broad selections of handicap betting offers, especially in basketball and football betting markets. This unique betting system significantly influences bets, especially on Asian football betting sites, which largely impacts the number of online sports punters in a particular league. Unlike their European and North American counterparts, Asian bookmakers deliver a broad range of handicap bets that reflect directly on the punters' betting slip. For instance, you'll find Asian handicap odds ranging from first-half results to handicaps about the last 10-minute results. These betting markets offer better value than the standard 1X2 outright betting markets common in US and UK betting markets.</div> </div> <div class="home-benef-list__content-elem"> <div class="flex-num">05</div> <img src="https://asian-bookies.net/wp-content/uploads/2022/10/secure-shield-2.svg" class="display-img" loading="lazy" alt="Live betting"> <img src="https://asian-bookies.net/wp-content/uploads/2022/10/secure-shield-1.svg" class="active-img" alt="Live betting"> <h3 class="title">Live betting</h3> <div class="desc">Asian Bookmakers are specialists at in-play betting markets, with odds covering a broad range of leagues from the UEFA Champions League to the La Liga. These bookmakers offer dozens of live betting options on different sports, which helps punters capitalize on different outcomes of the games. Some of the top Asian betting sites with live betting options include 1XBet, Betway, Sportsbet.io, 22Bet, and Mostbet. </div> </div> <div class="home-benef-list__content-elem"> <div class="flex-num">06</div> <img src="https://asian-bookies.net/wp-content/uploads/2022/10/bonus-1-1.svg" class="display-img" loading="lazy" alt="More attractive and diverse bonuses, promotions, and loyalty programs"> <img src="https://asian-bookies.net/wp-content/uploads/2022/10/bonus-1-2.svg" class="active-img" alt="More attractive and diverse bonuses, promotions, and loyalty programs"> <h3 class="title">More attractive and diverse bonuses, promotions, and loyalty programs</h3> <div class="desc">Bonuses, promotions, and loyalty programs play a huge role when choosing an online gambling site. Fortunately, top Asian betting sites offer their players lucrative bonus offers like the welcome bonus, enhanced odds, and free bets. These bonuses can significantly boost a punter's bankroll. Moreover, most Asian betting sites offer player-friendly wagering requirements to enable punters to have a hassle-free experience when redeeming them. </div> </div> <div class="home-benef-list__content-elem"> <div class="flex-num">07</div> <img src="https://asian-bookies.net/wp-content/uploads/2022/10/secure-shield-2.svg" class="display-img" loading="lazy" alt="High betting limits and the possibility of removing all limits - on bets, deposits and withdrawals"> <img src="https://asian-bookies.net/wp-content/uploads/2022/10/secure-shield-1.svg" class="active-img" alt="High betting limits and the possibility of removing all limits - on bets, deposits and withdrawals"> <h3 class="title">High betting limits and the possibility of removing all limits - on bets, deposits and withdrawals</h3> <div class="desc">If you have previously explored European bookies, then you must be aware that operators put several limits on betting accounts. These limits can be set on the maximum amount of deposits, withdrawals, and the number of bets. Fortunately, most Asian bookies don't have the mentality of limiting their customers, unlike their European counterparts. Since Asia bookies target high-volume gamblers, they have high limits on deposits and withdrawals. Some Asian betting companies also have VIP programs that allow high-rollers to gamble on the platforms without any limits. Some countries in Asia have strict regulations against gambling, limiting punters in these jurisdictions to offshore Asia bookmakers. </div> </div> <div class="home-benef-list__content-elem"> <div class="flex-num">08</div> <img src="https://asian-bookies.net/wp-content/uploads/2022/10/secure-shield-2.svg" class="display-img" loading="lazy" alt="Disadvantages of Asian bookmakers"> <img src="https://asian-bookies.net/wp-content/uploads/2022/10/secure-shield-1.svg" class="active-img" alt="Disadvantages of Asian bookmakers"> <h3 class="title">Disadvantages of Asian bookmakers</h3> <div class="desc">-Asian handicaps might be a little challenging for beginners to understand. -Some countries in Asia have strict regulations against gambling, limiting punters in these jurisdictions to offshore Asia bookmakers. Since Asia bookies target high-volume gamblers, they have high limits on deposits and withdrawals. Some Asian betting companies also have VIP programs that allow high-rollers to gamble on the platforms without any limits. </div> </div> </div> </div> </div> </div> <div class="container -big content-white mb145"> <div class="container block-content-padding"> <article class="post-entry mb70"> <h3><b>How do Asian betting sites compare to other bookmakers?</b></h3> <p><span style="font-weight: 400">The main difference between Asian sports bookmaker sites and other sportsbooks mostly lies in the scope of their operations. Of course, there are many bookmakers in other nations that promise various benefits to the average punter, but Asian bookies are still a popular option in the gambling market. Here’s how they compare with European bookmakers and International sports betting sites.</span></p> <h4><b>Comparison with European bookmakers</b></h4> <p><span style="font-weight: 400">Asian bookies are a strong alternative for billions of professional sports bettors online thanks to their favorable odds and a wide array of handicaps. European bookmakers, on the other hand, are known for offering some great freebies to attract the average punter. However, the truth is there are pros and cons for both options depending on your budget and goals.</span></p> <p><span style="font-weight: 400">European bookmakers are a popular option since most bookies are well-known brands that have been in the market for years. Moreover, European odds are based on a simple 1X2 concept that is easy to understand, even for beginners. But compared to Asian bookies, European bookmakers offer slightly lower odds.</span></p> <h4><b>Compared to international betting sites</b></h4> <p><span style="font-weight: 400">But how do Asian bookies compare to International betting sites based in the USA, Malta, and other offshore betting markets?</span></p> <p><span style="font-weight: 400">Compared to International betting sites, Asian bookmakers are popular for their high odds, a wide variety of betting options, and availability of local Asian competitions. However, with gambling restrictions in countries like Singapore and China, many Asians are turning to international gambling sites.</span></p> <h2><b>How to Choose the Best Asian Betting Site?</b></h2> <p><span style="font-weight: 400">With online sportsbooks gaining popularity across the world, several bookmakers have risen in the Asian betting market. These bookmakers not only accept sports punters from Asia, but other countries in Europe, North America, and Africa.</span></p> <p><span style="font-weight: 400">So, how can you choose which bookmaker is legal, safe, and reliable? Here’s how you can choose the best Asian sportsbook to place bets on your favorite sports.</span></p> <h3><b>Compare the betting options and match them to your needs</b></h3> <p><span style="font-weight: 400">When placing wagers on leading sports, you have to strive to get the best odds possible. It’s for this reason that new sports punters need to research which Asian bookmakers have the best odds in the betting markets that they’re interested in. As such, we recommend using odds portals to compare the betting options and odds available for every sports event or game.</span></p> <p><span style="font-weight: 400">If you compare the available betting options and odds, it’s easy to choose the best Asian bookies for the specific type of bet you intend to make. You might have to create several Asian betting accounts, but the effort will be worth it. Additionally, creating a gambling account also gives you the perfect opportunity to test out the welcome bonus package.</span></p> <h3><b>Check bookmaker reputation and payout rate</b></h3> <p><span style="font-weight: 400">When reviewing top bookies in Asia, it’s essential to consider the operator’s reputation in the industry. Reputable Asian bookies are known for their trustworthiness and reliability, which instill confidence among punters when placing bets. It’s important to check the bookies’ track record in promptly paying out winnings.</span></p> <p><span style="font-weight: 400">Conversely, Asian betting sites with a questionable reputation may have a history of having issues paying out their players’ winnings. That erodes the trust among the players and contributes to a negative user experience. As such, it’s essential to research a bookmaker’s industry reputation before registering your betting account.</span></p> <h3><b>Read up on users’ reviews</b></h3> <p><span style="font-weight: 400">Before you start gaming on a new betting site, it’s worth reading multiple user reviews about the platform or the managers. That gives you different opinions and perspectives about the casino platform, which gives you a better understanding of what to expect when you join the site.</span></p> <p><span style="font-weight: 400">User reviews can narrow down the strengths and weaknesses of every gambling site, but you need to know what to check when reading reviews. The information available in these reviews ranges from web design to available markets, support options, and more.</span></p> <h3><b>Test and explore the selected site and its terms and conditions</b></h3> <p><span style="font-weight: 400">Like other service providers, Asian betting sites operate under a specific set of terms and conditions. These terms and conditions include wagering requirements, time limits for bonuses, excluded payment methods, applicable fees, and betting/ withdrawal limits.</span></p> <p><span style="font-weight: 400">Reading the terms and conditions gives you a clear picture of what to expect and the basis of a casino’s conflict resolution. Going through the terms and conditions also helps you to secure your data from malicious sites and easily know the restricted countries for different operators.</span></p> <h2><b>How to Bet Online on Sports at Asian Betting Sites?</b></h2> <p><span style="font-weight: 400">Now that you understand how you can choose the best bookie, it’s time to choose the right choice for your betting needs and start the registration process. Here’s how you can do that in three simple steps:</span></p> <ul> <li style="font-weight: 400"><b>Sign-up – </b><span style="font-weight: 400">Locate the sign-up button on the Asian bookmaker’s website and start the registration process. You must be 18+ years old to register your account and start placing wagers on your favorite sports.</span></li> <li style="font-weight: 400"><b>Verify –</b><span style="font-weight: 400"> The verification process ascertains your age, identity, and nationality but comparing the details provided during the registration process with your official documents.</span></li> <li style="font-weight: 400"><b>Place your bets –</b><span style="font-weight: 400"> Now that you have created and verified your betting account, it’s time to deposit your first deposit and start wagering. Some operators may offer you a welcome bonus.</span></li> </ul> <h2><b>Banking Options at Asian Sites</b></h2> <p><span style="font-weight: 400">Asian bookmakers accept both local and international payment methods when depositing and withdrawing your funds. Local currencies like the Chinese Yuan or the Indian rupee are widely accepted without any conversion fees, but international punters can also wager using other currencies including the Euro and USD. These local and international payments are facilitated by safe and secure banking systems, including:</span></p> <h3><b>Credit or Debit Cards</b></h3> <p><span style="font-weight: 400">Most Asian gambling sites accept deposits through debit and credit cards since they’re readily available, safe, and secure. Some of the most widely accepted debit/credit cards in Asian gambling sites include Mastercard, Visa, and American Express.</span></p> <h3><b>Local Bank Transfers</b></h3> <p><span style="font-weight: 400">If safety is your top priority when depositing and withdrawing money from Asian sportsbooks, then bank wire transfers are the solution. Local bank transfers feature sophisticated KYC procedures, which feature multiple security levels to prevent illegal activities like fraud. However, local bank transfers can take 2-5 days to complete, causing slight delays in withdrawals and deposits.</span></p> <h3><b>Electronic Wallets</b></h3> <p><span style="font-weight: 400">E-wallets like Neteller, Muchbetter, and Skrill have become staples in Asian bookmakers. These electronic wallets facilitate cross-border payments across many countries in different continents and you can top up the wallets using different local banking methods. Some e-wallets like Skrill also accept deposits through hundreds of local payment methods available in Asian countries.</span></p> <h3><b>Vouchers and Pre-Paid Cards</b></h3> <p><span style="font-weight: 400">As a casino payment method, vouchers and pre-paid cards are worth the same as bank card accounts. You can buy prepaid cards like MasterCard or Visa, load them with the amount you want, and start making deposits on Asian sportsbooks. However, they don’t need to be connected to a bank account and you can’t withdraw your casino winnings into a prepaid card.</span></p> <h3><b>Cryptocurrencies</b></h3> <p><span style="font-weight: 400">Bitcoin, Tether, Litecoin, and other cryptocurrencies are among the most prominent payment methods in the Asian sports gambling market. These crypto transactions facilitate fast deposits and withdrawals while securing the player’s data and money through blockchain technology. Additionally, crypto transactions facilitate anonymous betting.</span></p> <h2><b>Asian Handicap Betting – a key advantage of Asian bookmakers</b></h2> <p><span style="font-weight: 400">Asian handicap is a style of betting on sports that involves giving one team or player a virtual advantage over the opponent. The differential varies depending on several factors, including form, historical performance, home-field advantage, financial strength, and player availabilities (injuries and suspensions).</span></p> <p><span style="font-weight: 400">One of the main features that make Asian handicapping a huge advantage of Asian bookies is that it eliminates the possibility of draws, which are bound to happen in sports like soccer. Unlike the traditional 1X2 bet, Asian handicaps can make it a two-way bet. Additionally, handicaps can be expressed in terms of points or goals to be added or deducted from the final score, depending on your wager.</span></p> <p><span style="font-weight: 400">By eliminating draws and introducing handicaps,</span> <a href="https://asian-bookies.net/en/bookies-with-asian-handicap-betting/"><span style="font-weight: 400">Asian handicap bookmakers</span></a><span style="font-weight: 400"> reduce the risk associated with traditional betting where two-thirds of the result may lead to losses. With handicap bets, you stand a 50% chance of winning and there’s a wide range of betting options, from winning margins to differences in corners and bookings.</span></p> <h2><b>What other types of gambling sites are popular in Asia?</b></h2> <p><span style="font-weight: 400">While online sports gambling is still the main attraction towards Asian platforms, there are various types of gambling sites operating in the region. These gambling sites can be classified into three groups:</span></p> <h3><b>Asian Online Casino</b></h3> <p><span style="font-weight: 400">Although not many Asian countries have legalized casino gambling, Asian online casinos are growing in popularity among gamblers looking for a traditional gaming experience. These gaming sites provide a variety of casino games, including slots, roulette, and blackjack.</span></p> <h3><b>Asian Betting Agents and Sportsbooks Brokers</b></h3> <p><span style="font-weight: 400">An</span> <a href="https://asian-bookies.net/en/asian-bookmaker-brokers-agents/"><span style="font-weight: 400">Asian betting broker or agent</span></a><span style="font-weight: 400"> is an organization or individual that accepts and pays out the wins on different sports bets. They are third parties that aggregate sports odds, take deposits on sports bets, and pay out the winners on behalf of sportsbooks.</span></p> <h3><b>Asian Betting Exchanges</b></h3> <p><a href="https://asian-bookies.net/en/best-betting-exchanges/"><span style="font-weight: 400">Asian betting exchanges</span></a><span style="font-weight: 400"> are essentially contemporary platforms that are gradually emerging as alternatives to conventional online bookies. These betting exchanges operate as marketplaces, enabling the users to set the odds and bet against the odds at the same time. That gives punters and bookmakers more flexibility.</span></p> <h2><b>Popular Sports for Betting in Asia</b></h2> <p><span style="font-weight: 400">Online bookmakers in the Asian market focus on a wide range of sports and leagues. While European and international football competitors are universally well-liked by punters worldwide, leading Asian bookmakers also focus on International and national leagues that comprehensively cover local events.</span></p> <p><span style="font-weight: 400">In Korea and Japan, for instance, baseball is largely a famed sport, with bettors placing wagers on MLB and other homegrown leagues. In India, cricket is all the rave. Additionally, sports like tennis and golf are also featured in Asian bookies alongside North American leagues like the NBA, NHL, and NFL. Here are Asia’s top sports that offer odds on different outcomes.</span></p> <h3><b>Football – The most popular sport in Asia</b></h3> <p><span style="font-weight: 400">Like in most places across the world, soccer is Asia’s most popular betting sport. The sport is a fan favorite for many Asians, with millions betting on international events like the FIFA World Cup and European competitions like the English Premier League, UCL, and La Liga. Additionally, Asian bookmakers also pay attention to national and local leagues like K-League, Chinese Super League, and more.</span></p> <h3><b>Cricket – Top Sport in South Asia</b></h3> <p><span style="font-weight: 400">Cricket is an incredibly popular sport in different South Asian countries, holding a special place in the hearts of many fans in the region. As such, South Asian countries like Sri Lanka, Pakistan, Afghanistan, and Bangladesh have enthusiastic cricket communities that passionately follow the sport while wagering.</span></p> <h3><b>Horse Racing</b></h3> <p><span style="font-weight: 400">Racing events on Asian bookmakers consist of top American and British events like the Kentucky Derby or the Cheltenham Festival. Most of these Asian-facing gambling sites also offer a Facebook devoted to national and local equestrian events. Additionally, some sites also feature cockfighting and greyhound racing markets.</span></p> <h3><b>eSports</b></h3> <p><span style="font-weight: 400">With the Asian market accounting for about 50% of the total revenue from the esports betting market, it’s clear that video games are reshaping the digital gambling world. South East Asia is also home to more than 250 million video game enthusiasts, who bet over $4.4 billion annually.</span></p> <h3><b>Other Sports</b></h3> <p><span style="font-weight: 400">Besides football, cricket, horse racing, and esports, Asian bookmakers also offer great odds on other sports events, including:</span></p> <ul> <li style="font-weight: 400"><span style="font-weight: 400">Basketball</span></li> <li style="font-weight: 400"><span style="font-weight: 400">Volleyball</span></li> <li style="font-weight: 400"><span style="font-weight: 400">Baseball</span></li> <li style="font-weight: 400"><span style="font-weight: 400">Tennis and Table Tennis</span></li> <li style="font-weight: 400"><span style="font-weight: 400">Golf</span></li> </ul> <h2><b>The most popular types of bets in Asian Betting</b></h2> <p><span style="font-weight: 400">Asian betting sites are known for offering a broad range of betting markets, spanning from straight-up 1X2 to over/under, corners, and more. Here are the most popular types of sports bets placed by Asian bookmakers.</span></p> <ul> <li style="font-weight: 400"><b>Over/Under – </b><span style="font-weight: 400">This betting market involves predicting whether the number of goals scored with be over/under a certain number e.g Over/Under 2.5.</span></li> <li style="font-weight: 400"><b>Corners –</b><span style="font-weight: 400"> Similar to the over/under market, corner bets involve predicting whether the number of corners in a game will exceed a particular number e.g. Over 8 corners.</span></li> <li style="font-weight: 400"><b>Total Goals –</b><span style="font-weight: 400"> Besides betting on the Over/Under market, many punters also choose to wager on the total number of goals in a match.</span></li> <li style="font-weight: 400"><b>Odds or Evens – </b><span style="font-weight: 400">This betting market involves predicting whether the number of goals scored by both teams in a game will either be an even or odd number.</span></li> <li style="font-weight: 400"><b>HT/FT – </b><span style="font-weight: 400">It involves predicting the results at half-time and full-time.</span></li> <li style="font-weight: 400"><b>Correct Score –</b><span style="font-weight: 400"> This bet is all about predicting the correct score of every team in a game. For instance, you can bet on a correct score of 2-2 on Manchester United vs Manchester City.</span></li> <li style="font-weight: 400"><b>Bookings – </b><span style="font-weight: 400">Involes betting on the number of red and yellow cards in a game.</span></li> <li style="font-weight: 400"><b>Outright Markets – </b><span style="font-weight: 400">These types of bets cover the outright winner in a competition or a sports event like the World Cup or league soccer.</span></li> </ul> <h2><b>Asian Bookies Odds</b></h2> <p><span style="font-weight: 400">Asian gambling sites generally feature four types of odds, including international format odds (decimal odds), Malay odds, Indonesian odds, and Hong Kong odds. However, the potential payout remains the same.</span></p> <p><b>Worldwide Odds Formats</b></p> <p><span style="font-weight: 400">Three types of bookmakers odds are common in international, European, and offshore Asian bookmakers. That includes:</span></p> <ul> <li style="font-weight: 400"><b>Decimal or European Odds</b></li> </ul> <p><span style="font-weight: 400">European or decimal odds are popular among Asian bookmakers that welcome players from Australia, New Zealand, Canada, and continental Europe. These odds are easy to understand and work with since the underdogs and favorites can be spotted quickly by looking at the numbers.</span></p> <p><span style="font-weight: 400">The number on the decimal odds represents the amount a punter wins for each $1 wagered. In other words, the decimal number also includes your stake, meaning there’s no need to add it back. For instance, if you bet $10 on an event with 2.24 odds, your potential win will be (2.24 x $10)=$22.4.</span></p> <ul> <li style="font-weight: 400"><b>American or Money Line Odds</b></li> </ul> <p><span style="font-weight: 400">American or moneyline odds are popular among punters in the US. The negative sign denotes the favorites and shows the amount of cash you’ll need to stake to get $100. The positive sign on the other hand shows the underdog and indicates the amount you’ll win for every $100 you stake.</span></p> <ul> <li style="font-weight: 400"><b>British or Fractional Odds</b></li> </ul> <p><span style="font-weight: 400">British or fractional odds are the most traditional and popular sports odds. These are normally written with a hyphen (-) or slash (/). For instance, a fractional odd can be written as 6/1 or 6-1, meaning that you stand a chance to make $6 for every $1 you bet. That means your potential win in this case will be $7 when you add back your wager.</span></p> <h3><b>Malay Odds</b></h3> <p><span style="font-weight: 400">Mala odds are given as a positive or negative number that’s greater than 1. Unlike other odds formats, negative odds represent the underdog while positive odds represent the favorites. When Malay odds are negative, they represent the amount you need to wager to win 1 unit. For instance, -0.75 Malay odds means you bet $0.75 to win $1 or $75 to win $100.</span></p> <h3><b>Indonesian Odds</b></h3> <p><span style="font-weight: 400">Indonesian odds formats are similar to American odds, but display the figures in 100s instead of decimals. For instance, -250 American odds translate to -2.50 Indonesian odds.</span></p> <p><span style="font-weight: 400">Negative Indonesian odds display how much you need to bet to win a unit. For instance, -2.50 means you bet $2.5 to get a $1 profit. Positive Indonesian odds, on the other hand, show you what you will win with a single unit bet. For instance, +3.45 in Indonesian odds means you’ll $1 to win $3.45.</span></p> <h3><b>Hong Kong Odds</b></h3> <p><span style="font-weight: 400">Hong Kong odds are among the simplest Asian bookie odds formats. These odds are presented with a positive number, normally with decimals. The Hong Kong odds represent the amount that a bettor will get paid and the stake required for every wagered unit.</span></p> <p><span style="font-weight: 400">For instance, if the Hong Kong odds are 0.820, you’re wagering on a favorite and you will receive $0.82 in winnings for every $1 staked. If the Hong Kong odds are 2.50, you’re wagering on the underdog and you will receive $2.50 (plus your stake) for every $1 risked.</span></p> <p><!-- /wp:paragraph --></p> <p><!-- /wp:paragraph --></p> <h2><b>Conclusion: why choose Asian betting sites?</b></h2> <p><span style="font-weight: 400">Asian bookmaker sites are widely gaining popularity among professional sports punters for several reasons. For starters, they deliver a diverse range of betting markets that rivals the traditional sports market. That includes a diverse range of Asian handicaps, featuring everything from betting on goal/point margins to corners and more. Additionally, these benefits are also available to sports punters from other continents, including Africa, Europe, and North America.</span></p> <h2>FAQ about Asian Bookies</h2> <p><!-- wp:yoast/faq-block {"questions":[{"id":"faq-question-1672223684457","question":["❓⚽️ ➤ Who can register to bet with Asian bookmakers?"],"answer":["Even though online betting popular sites for Asia bookies serve the Asian market, some will take players from the UK or Europe while other bookmakers ban visitors from the UK and other countries."],"jsonQuestion":"❓⚽️ ➤ Who can register to bet with Asian bookmakers?","jsonAnswer":"Even though online betting popular sites for Asia bookies serve the Asian market, some will take players from the UK or Europe while other bookmakers ban visitors from the UK and other countries."},{"id":"faq-question-1672223783298","question":["❓⚽️ ➤ Do I have to be from an Asian country to bet with Asian bookmakers?"],"answer":["Choosing Asian bookmakers is advantageous not just for Asians; several Asian bookmakers likewise allow players from other countries."],"jsonQuestion":"❓⚽️ ➤ Do I have to be from an Asian country to bet with Asian bookmakers?","jsonAnswer":"Choosing Asian bookmakers is advantageous not just for Asians; several Asian bookmakers likewise allow players from other countries."},{"id":"faq-question-1672223784195","question":["❓⚽️ ➤ What currencies do Asian bookmakers accept?"],"answer":["Almost all of our bookmakers accept most Asian currencies like INR, MYR, THB, BDT, PHP, VND, INR but also international currencies like USD, EUR, GBP and of course cryptocurrencies."],"jsonQuestion":"❓⚽️ ➤ What currencies do Asian bookmakers accept?","jsonAnswer":"Almost all of our bookmakers accept most Asian currencies like INR, MYR, THB, BDT, PHP, VND, INR but also international currencies like USD, EUR, GBP and of course cryptocurrencies."},{"id":"faq-question-1672224019980","question":["❓⚽️ ➤ What is the difference between Asian bookmakers and European bookmakers?"],"answer":["Asian bookies are renowned for being a unique breed of betting companies. However, European bookmakers are renowned for their social conservatism and reliability."],"jsonQuestion":"❓⚽️ ➤ What is the difference between Asian bookmakers and European bookmakers?","jsonAnswer":"Asian bookies are renowned for being a unique breed of betting companies. However, European bookmakers are renowned for their social conservatism and reliability."},{"id":"faq-question-1672224041014","question":["❓⚽️ ➤ What are the odds formats available on Asian betting sites?"],"answer":["Asian bookmakers typically provide four different kinds of odds genres: decimal odds, Hong Kong odds, Indonesian odds, and Malay odds."],"jsonQuestion":"❓⚽️ ➤ What are the odds formats available on Asian betting sites?","jsonAnswer":"Asian bookmakers typically provide four different kinds of odds genres: decimal odds, Hong Kong odds, Indonesian odds, and Malay odds."},{"id":"faq-question-1672224051278","question":["❓⚽️ ➤ What sports are most popular with Asian bookmakers and betting sites?"],"answer":["Asian bookmakers dominate the football markets at the moment."],"jsonQuestion":"❓⚽️ ➤ What sports are most popular with Asian bookmakers and betting sites?","jsonAnswer":"Asian bookmakers dominate the football markets at the moment."},{"id":"faq-question-1672224053030","question":["❓⚽️ ➤ Can USA and UK players register in Asian bookies?"],"answer":["While a few of them do and others don't, most Asian bookmakers don't welcome players from the UK."],"jsonQuestion":"❓⚽️ ➤ Can USA and UK players register in Asian bookies?","jsonAnswer":"While a few of them do and others don't, most Asian bookmakers don't welcome players from the UK."}]} --></p> <div class="schema-faq wp-block-yoast-faq-block"> <div id="faq-question-1672223684457" class="schema-faq-section" style="margin-bottom: 1em"></div> <div id="faq-question-1672223783298" class="schema-faq-section" style="margin-bottom: 1em"> <p><strong class="schema-faq-question" style="margin-bottom: 0.4em">❓⚽️ ➤ <b>What are Asian bookies?</b></strong></p> <p><span style="font-weight: 400">Asian bookies are popular sports gambling sites that originate from Asia, with unique odds formats for sports betting. These sites have plenty of solid odds and handicap markets, attracting players from across the globe.</span></p> </div> <hr /> <div id="faq-question-1672223784195" class="schema-faq-section" style="margin-bottom: 1em"> <p><strong class="schema-faq-question" style="margin-bottom: 0.4em">❓⚽️ ➤ <b>What is the best online handicap site in Asia?</b></strong></p> <p><span style="font-weight: 400">With the popularity of Asian handicap betting among skilled punters, there are plenty of handicap sites that you can trust. Some of the best handicap sites in Asia include</span> <span style="font-weight: 400">BC.Game</span><span style="font-weight: 400">, 1XBet, Dafabet, and 22Bet.</span></p> </div> <hr /> <div id="faq-question-1672224019980" class="schema-faq-section" style="margin-bottom: 1em"> <p><strong class="schema-faq-question" style="margin-bottom: 0.4em">❓⚽️ ➤ <b>What is Asia’s best betting exchange?</b></strong></p> <p><span style="font-weight: 400">While betting exchanges are still relatively new to many Asian punters, there are several top contenders you can trust. Some of the most reliable betting exchanges in Asia include Betfair, OrbitX, Smarkets, and Matchbook.</span></p> </div> <hr /> <div id="faq-question-1672224041014" class="schema-faq-section" style="margin-bottom: 1em"> <p><strong class="schema-faq-question" style="margin-bottom: 0.4em">❓⚽️ ➤ <b>Which is the best bookie in Asia?</b></strong></p> <p><span style="font-weight: 400">The best sports bookie in Asia depends on many factors, including odds, reputation, regulation, and gambling options. That said, some of the best bookies that tick all the right boxes in this sector include Dafabet, 188Bet, MaxBet, and M6-Sports.</span></p> </div> <hr /> <div id="faq-question-1672224051278" class="schema-faq-section" style="margin-bottom: 1em"> <p><strong class="schema-faq-question" style="margin-bottom: 0.4em">❓⚽️ ➤ <b>What is the biggest sportsbook in Asia?</b></strong></p> <p><span style="font-weight: 400">1XBet is the biggest and most reputable online sportsbook in Asia. Thanks to its exclusive bonuses, competitive odds, and variety of sports betting markets, 1XBet has remained a market leader since its launch in 2011.</span></p> </div> <hr /> <div id="faq-question-1672224053030" class="schema-faq-section" style="margin-bottom: 1em"> <p><strong class="schema-faq-question" style="margin-bottom: 0.4em">❓⚽️ ➤</strong><b>Who is the best bookie in the world?</b></p> <p><span style="font-weight: 400">When it comes to betting on sports, Betway is the best and most accessible platform for gamblers in Asia and abroad. However, there are several reliable bookies you can trust, including 1xBet & M88 and more.</span></p> </div> </div> </article> </div> </div> <div class="container"> <div class="author-block-wrapper"> <div class="author-block"> <div class="author-block__img"> <picture><source srcset="https://asian-bookies.net/wp-content/webp-express/webp-images/uploads/2022/11/J.Ming_-150x150-1.jpg.webp" type="image/webp"><img src="https://asian-bookies.net/wp-content/uploads/2022/11/J.Ming_-150x150-1.jpg" alt="Minato Jung" loading="lazy" class="webpexpress-processed"></picture> <div class="get-to-page"> <a href="https://asian-bookies.net/authors/">Author page</a> </div> </div> <div class="author-block__content"> <div class="title">Minato Jung</div> <div class="desc"><p>The core team of content creators at AsiaBetting.Online consists of two people: Minato Jung, serving as the Chief Editor and CEO of AsiaBetting.Online, and Natsuo Takeda, who holds the positions of Tech-CEO and Chief of the testing team for bookie sites and casinos.</p> </div> </div> </div> </div> </div> <button class="to-top-btn"><i></i></button> <footer class="site-footer"> <div class="site-footer--row container"> <div class="site-footer__logo"> <img src="https://asian-bookies.net/wp-content/themes/bb/images/logo.svg" alt="96 Bets Asia"> <div class="site-footer__copyr-txt"> AsiaBetting.Online is an independent site with reviews and ratings of betting sites and casinos. We conduct our own research and live tests of online platforms and websites. Based on our own experience, we write reviews and make ratings in which we give you information about betting and gambling, and the experience of our team. We earn commissions and this allows our site and team to continue to operate. But these commissions have no impact on our ratings, reviews and rankings. Gamble responsibly. We remind our readers that we only provide independent information, but you make your own decisions and are responsible for them when you gamble. If you need help with gambling addiction you can contact one of the organizations listed below. Their logos are clickable and lead directly to their official websites. </div> </div> <div class="site-footer__menues"> <div class="footer-menu -first"> <div class="footer-menu__title">Top Ratings</div> <nav class="footer-menu-list"><ul id="menu-top-ratings" class="menu"><li id="menu-item-19953" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-19953"><a href="https://asian-bookies.net/asian-handicap/">Asian Handicap</a></li> <li id="menu-item-19954" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-19954"><a href="https://asian-bookies.net/casino/">Asian Casinos</a></li> <li id="menu-item-21837" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-21837"><a href="https://asian-bookies.net/bangladesh/">Bangladesh</a></li> <li id="menu-item-21838" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-21838"><a href="https://asian-bookies.net/hong-kong/">Hong Kong</a></li> <li id="menu-item-21839" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-21839"><a href="https://asian-bookies.net/india/">India</a></li> <li id="menu-item-21840" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-21840"><a href="https://asian-bookies.net/indonesia/">Indonesia</a></li> <li id="menu-item-21841" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-21841"><a href="https://asian-bookies.net/japan/">Japan</a></li> <li id="menu-item-21842" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-21842"><a href="https://asian-bookies.net/korea/">Korea</a></li> <li id="menu-item-21843" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-21843"><a href="https://asian-bookies.net/malaysia/">Malaysia</a></li> <li id="menu-item-21844" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-21844"><a href="https://asian-bookies.net/vietnam/">Vietnam</a></li> <li id="menu-item-21845" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-21845"><a href="https://asian-bookies.net/philippines/">Philippines</a></li> <li id="menu-item-21846" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-21846"><a href="https://asian-bookies.net/singapore/">Singapore</a></li> <li id="menu-item-21847" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-21847"><a href="https://asian-bookies.net/thailand/">Thailand</a></li> </ul></nav> </div> <div class="footer-menu"> <div class="footer-menu__title">Info Pages</div> <nav class="footer-menu-list"><ul id="menu-info-pages" class="menu"><li id="menu-item-5569" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5569"><a href="https://asian-bookies.net/about-us/">About Us</a></li> <li id="menu-item-84" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-84"><a href="https://asian-bookies.net/authors/">Authors & Our team</a></li> <li id="menu-item-1111" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1111"><a href="https://asian-bookies.net/contacts/">Contact Us</a></li> </ul></nav> </div> </div> <div class="site-footer__bottom--logos"> <a class="logo-item" target="_blank" rel="nofollow" href="https://www.begambleaware.org/" title="BeGambleAware"> <img src="/wp-content/uploads/2022/12/bgmblawr.png" alt="BeGambleAware"> </a> <a class="logo-item" target="_blank" rel="nofollow" href="https://www.gamblingtherapy.org/" title="Gambling Therapy"> <img src="/wp-content/uploads/2022/12/gambl-therapy.png" alt="Gambling Therapy"> </a> <a class="logo-item" target="_blank" rel="nofollow" href="https://www.gamcare.org.uk/" title="GamCare"> <img src="/wp-content/uploads/2022/12/gamcare.png" alt="GamCare"> </a> <a class="logo-item" target="_blank" rel="nofollow" href="https://www.taketimetothink.co.uk/" title="Take Time To Think"> <img src="/wp-content/uploads/2022/12/taketimetothink.svg" alt="Take Time To Think"> </a> <a class="logo-item -hide-mob" target="_blank" rel="nofollow" href="https://www.gamstop.co.uk/" title="GAMSTOP"> <img src="/wp-content/uploads/2022/12/gamstop.png" alt="GAMSTOP"> </a> <a class="logo-item -hide-mob" target="_blank" rel="nofollow" href="https://quitgamble.com/" title="Quit Gamble"> <img src="/wp-content/uploads/2022/12/QuitGamble.png" alt="Quit Gamble"> </a> <a class="logo-item -hide-mob" target="_blank" rel="nofollow" href="https://www.pagcor.ph/regulatory/responsible-gaming.php" title="PACGOR"> <img src="/wp-content/uploads/2022/12/pagcor.png" alt="PACGOR"> </a> <a class="logo-item -hide-mob" target="_blank" rel="nofollow" href="https://ibia.bet/" title="International Betting Integrity Association"> <img src="/wp-content/uploads/2022/12/InternationalBettingIntegrity.svg" alt="International Betting Integrity Association"> </a> <a class="logo-item -hide-mob" target="_blank" rel="nofollow" href="https://ecogra.org/" title="eCORGA"> <img src="/wp-content/uploads/2022/12/ecorga.png" alt="eCORGA"> </a> <a class="logo-item -hide-mob" target="_blank" rel="nofollow" href="https://www.gamblingcommission.gov.uk/" title="Gambling Commission"> <img src="/wp-content/uploads/2022/12/gambling-commission.svg" alt="Gambling Commission"> </a> <div class="site-footer__bottom--logos--btn-toggle" role="button"> <span>View more +</span> </div> </div> <div class="site-footer__bottom-copyr container"> <div class="site-footer--dmcs-grid"> <a href="//www.dmca.com/Protection/Status.aspx?ID=2b8039f0-cb42-49a9-bb24-ef5811fcb356" title="DMCA.com Protection Status" class="dmca-badge"> <img width="150" height="30" src ="https://images.dmca.com/Badges/dmca_protected_sml_120n.png?ID=2b8039f0-cb42-49a9-bb24-ef5811fcb356" alt="DMCA.com Protection Status" /></a> <script src="https://images.dmca.com/Badges/DMCABadgeHelper.min.js"> </script> <a href="https://www.trustpilot.com/review/asian-bookies.net" target="_blank" rel="nofollow" title="AsiaBetting.Online on Trustpilot" > <img src="/wp-content/uploads/2022/12/trustpilot.png" alt="Asian Bookies on Trustpilot"> </a> <img src="/wp-content/uploads/2022/12/gpwa.png" alt="AsiaBetting.Online on GPWA"> </div> <div class="c-t"> Copyright © 2025 – AsiaBetting.Online </div> </div> </div> </footer> <div class="g-popup-block"> <div class="container"> <div class="row"> <div class="g-popup-block__content"> <div class="g-popup-block__logo" style="background-color:#ffffff"> <a href="https://asian-bookies.net/go/1xbet/"> <img width="171" height="80" src="https://asian-bookies.net/wp-content/uploads/2022/11/1xbet.webp" class="attachment-review-teaser-image size-review-teaser-image" alt="1xbet - bookmaker logo" decoding="async" loading="lazy" /> </a> </div> <div class="g-rating-block"> <div class="title-score">5<span> / 5</span></div><div class="main-stars-block"><i class="green"></i><i class="green"></i><i class="green"></i><i class="green"></i><i class="green"></i></div> </div> <div class="g-title-bonus-block"> <div class="prp-title">Bonus:</div> <div class="prp-col-bonus"> <span>100%</span> Bonus up to <span>$110 USD</span> <br>+ <span>150</span> Free Spins </div> </div> <div class="g-play-now-btn"> <a class="main-link-btn -ib-important" href="https://asian-bookies.net/go/1xbet/"> <span class="big-label">Play now!</span> <span class="small-label">Go to 1xBet</span> </a> </div> <button class="g-popup-block__close-btn"></button> </div> </div> </div> </div> <div class="g-comment-thank-block"> <div class="g-comment-thank-block--content"> <img src="https://asian-bookies.net/wp-content/themes/bb/images/thanks-img.svg" alt="Thanks for comment"> <div class="h2">Thank you!</div> <p>Your review has been sent for moderation</p> <button class="thanks-btn">Go back</button> </div> </div> <script type="text/javascript" id="scripts-js-extra"> /* <![CDATA[ */ var ajax = {"url":"https:\/\/asian-bookies.net\/wp-admin\/admin-ajax.php","nonce":"b5994c27cc"}; /* ]]> */ </script> <script type="text/javascript" src="https://asian-bookies.net/wp-content/themes/bb/dist/js/scripts.min.js?v=67b8766fe3ef1&ver=6.7.2" id="scripts-js"></script> <script type="text/javascript"> (function() { var expirationDate = new Date(); expirationDate.setTime( expirationDate.getTime() + 31536000 * 1000 ); document.cookie = "pll_language=en; expires=" + expirationDate.toUTCString() + "; path=/; secure; SameSite=Lax"; }()); </script> <script> !function (e, t) { "object" == typeof exports && "undefined" != typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define(t) : (e = "undefined" != typeof globalThis ? globalThis : e || self).Swiper = t() }(this, (function () { "use strict"; function e(e) { return null !== e && "object" == typeof e && "constructor" in e && e.constructor === Object } function t(s, a) { void 0 === s && (s = {}), void 0 === a && (a = {}), Object.keys(a).forEach((i => { void 0 === s[i] ? s[i] = a[i] : e(a[i]) && e(s[i]) && Object.keys(a[i]).length > 0 && t(s[i], a[i]) })) } const s = { body: {}, addEventListener() { }, removeEventListener() { }, activeElement: { blur() { }, nodeName: "" }, querySelector: () => null, querySelectorAll: () => [], getElementById: () => null, createEvent: () => ({ initEvent() { } }), createElement: () => ({ children: [], childNodes: [], style: {}, setAttribute() { }, getElementsByTagName: () => [] }), createElementNS: () => ({}), importNode: () => null, location: { hash: "", host: "", hostname: "", href: "", origin: "", pathname: "", protocol: "", search: "" } }; function a() { const e = "undefined" != typeof document ? document : {}; return t(e, s), e } const i = { document: s, navigator: { userAgent: "" }, location: { hash: "", host: "", hostname: "", href: "", origin: "", pathname: "", protocol: "", search: "" }, history: { replaceState() { }, pushState() { }, go() { }, back() { } }, CustomEvent: function () { return this }, addEventListener() { }, removeEventListener() { }, getComputedStyle: () => ({ getPropertyValue: () => "" }), Image() { }, Date() { }, screen: {}, setTimeout() { }, clearTimeout() { }, matchMedia: () => ({}), requestAnimationFrame: e => "undefined" == typeof setTimeout ? (e(), null) : setTimeout(e, 0), cancelAnimationFrame(e) { "undefined" != typeof setTimeout && clearTimeout(e) } }; function r() { const e = "undefined" != typeof window ? window : {}; return t(e, i), e } class n extends Array { constructor(e) { "number" == typeof e ? super(e) : (super(...e || []), function (e) { const t = e.__proto__; Object.defineProperty(e, "__proto__", { get: () => t, set(e) { t.__proto__ = e } }) }(this)) } } function l(e) { void 0 === e && (e = []); const t = []; return e.forEach((e => { Array.isArray(e) ? t.push(...l(e)) : t.push(e) })), t } function o(e, t) { return Array.prototype.filter.call(e, t) } function d(e, t) { const s = r(), i = a(); let l = []; if (!t && e instanceof n) return e; if (!e) return new n(l); if ("string" == typeof e) { const s = e.trim(); if (s.indexOf("<") >= 0 && s.indexOf(">") >= 0) { let e = "div"; 0 === s.indexOf("<li") && (e = "ul"), 0 === s.indexOf("<tr") && (e = "tbody"), 0 !== s.indexOf("<td") && 0 !== s.indexOf("<th") || (e = "tr"), 0 === s.indexOf("<tbody") && (e = "table"), 0 === s.indexOf("<option") && (e = "select"); const t = i.createElement(e); t.innerHTML = s; for (let e = 0; e < t.childNodes.length; e += 1)l.push(t.childNodes[e]) } else l = function (e, t) { if ("string" != typeof e) return [e]; const s = [], a = t.querySelectorAll(e); for (let e = 0; e < a.length; e += 1)s.push(a[e]); return s }(e.trim(), t || i) } else if (e.nodeType || e === s || e === i) l.push(e); else if (Array.isArray(e)) { if (e instanceof n) return e; l = e } return new n(function (e) { const t = []; for (let s = 0; s < e.length; s += 1)-1 === t.indexOf(e[s]) && t.push(e[s]); return t }(l)) } d.fn = n.prototype; const c = { addClass: function () { for (var e = arguments.length, t = new Array(e), s = 0; s < e; s++)t[s] = arguments[s]; const a = l(t.map((e => e.split(" ")))); return this.forEach((e => { e.classList.add(...a) })), this }, removeClass: function () { for (var e = arguments.length, t = new Array(e), s = 0; s < e; s++)t[s] = arguments[s]; const a = l(t.map((e => e.split(" ")))); return this.forEach((e => { e.classList.remove(...a) })), this }, hasClass: function () { for (var e = arguments.length, t = new Array(e), s = 0; s < e; s++)t[s] = arguments[s]; const a = l(t.map((e => e.split(" ")))); return o(this, (e => a.filter((t => e.classList.contains(t))).length > 0)).length > 0 }, toggleClass: function () { for (var e = arguments.length, t = new Array(e), s = 0; s < e; s++)t[s] = arguments[s]; const a = l(t.map((e => e.split(" ")))); this.forEach((e => { a.forEach((t => { e.classList.toggle(t) })) })) }, attr: function (e, t) { if (1 === arguments.length && "string" == typeof e) return this[0] ? this[0].getAttribute(e) : void 0; for (let s = 0; s < this.length; s += 1)if (2 === arguments.length) this[s].setAttribute(e, t); else for (const t in e) this[s][t] = e[t], this[s].setAttribute(t, e[t]); return this }, removeAttr: function (e) { for (let t = 0; t < this.length; t += 1)this[t].removeAttribute(e); return this }, transform: function (e) { for (let t = 0; t < this.length; t += 1)this[t].style.transform = e; return this }, transition: function (e) { for (let t = 0; t < this.length; t += 1)this[t].style.transitionDuration = "string" != typeof e ? `${e}ms` : e; return this }, on: function () { for (var e = arguments.length, t = new Array(e), s = 0; s < e; s++)t[s] = arguments[s]; let [a, i, r, n] = t; function l(e) { const t = e.target; if (!t) return; const s = e.target.dom7EventData || []; if (s.indexOf(e) < 0 && s.unshift(e), d(t).is(i)) r.apply(t, s); else { const e = d(t).parents(); for (let t = 0; t < e.length; t += 1)d(e[t]).is(i) && r.apply(e[t], s) } } function o(e) { const t = e && e.target && e.target.dom7EventData || []; t.indexOf(e) < 0 && t.unshift(e), r.apply(this, t) } "function" == typeof t[1] && ([a, r, n] = t, i = void 0), n || (n = !1); const c = a.split(" "); let p; for (let e = 0; e < this.length; e += 1) { const t = this[e]; if (i) for (p = 0; p < c.length; p += 1) { const e = c[p]; t.dom7LiveListeners || (t.dom7LiveListeners = {}), t.dom7LiveListeners[e] || (t.dom7LiveListeners[e] = []), t.dom7LiveListeners[e].push({ listener: r, proxyListener: l }), t.addEventListener(e, l, n) } else for (p = 0; p < c.length; p += 1) { const e = c[p]; t.dom7Listeners || (t.dom7Listeners = {}), t.dom7Listeners[e] || (t.dom7Listeners[e] = []), t.dom7Listeners[e].push({ listener: r, proxyListener: o }), t.addEventListener(e, o, n) } } return this }, off: function () { for (var e = arguments.length, t = new Array(e), s = 0; s < e; s++)t[s] = arguments[s]; let [a, i, r, n] = t; "function" == typeof t[1] && ([a, r, n] = t, i = void 0), n || (n = !1); const l = a.split(" "); for (let e = 0; e < l.length; e += 1) { const t = l[e]; for (let e = 0; e < this.length; e += 1) { const s = this[e]; let a; if (!i && s.dom7Listeners ? a = s.dom7Listeners[t] : i && s.dom7LiveListeners && (a = s.dom7LiveListeners[t]), a && a.length) for (let e = a.length - 1; e >= 0; e -= 1) { const i = a[e]; r && i.listener === r || r && i.listener && i.listener.dom7proxy && i.listener.dom7proxy === r ? (s.removeEventListener(t, i.proxyListener, n), a.splice(e, 1)) : r || (s.removeEventListener(t, i.proxyListener, n), a.splice(e, 1)) } } } return this }, trigger: function () { const e = r(); for (var t = arguments.length, s = new Array(t), a = 0; a < t; a++)s[a] = arguments[a]; const i = s[0].split(" "), n = s[1]; for (let t = 0; t < i.length; t += 1) { const a = i[t]; for (let t = 0; t < this.length; t += 1) { const i = this[t]; if (e.CustomEvent) { const t = new e.CustomEvent(a, { detail: n, bubbles: !0, cancelable: !0 }); i.dom7EventData = s.filter(((e, t) => t > 0)), i.dispatchEvent(t), i.dom7EventData = [], delete i.dom7EventData } } } return this }, transitionEnd: function (e) { const t = this; return e && t.on("transitionend", (function s(a) { a.target === this && (e.call(this, a), t.off("transitionend", s)) })), this }, outerWidth: function (e) { if (this.length > 0) { if (e) { const e = this.styles(); return this[0].offsetWidth + parseFloat(e.getPropertyValue("margin-right")) + parseFloat(e.getPropertyValue("margin-left")) } return this[0].offsetWidth } return null }, outerHeight: function (e) { if (this.length > 0) { if (e) { const e = this.styles(); return this[0].offsetHeight + parseFloat(e.getPropertyValue("margin-top")) + parseFloat(e.getPropertyValue("margin-bottom")) } return this[0].offsetHeight } return null }, styles: function () { const e = r(); return this[0] ? e.getComputedStyle(this[0], null) : {} }, offset: function () { if (this.length > 0) { const e = r(), t = a(), s = this[0], i = s.getBoundingClientRect(), n = t.body, l = s.clientTop || n.clientTop || 0, o = s.clientLeft || n.clientLeft || 0, d = s === e ? e.scrollY : s.scrollTop, c = s === e ? e.scrollX : s.scrollLeft; return { top: i.top + d - l, left: i.left + c - o } } return null }, css: function (e, t) { const s = r(); let a; if (1 === arguments.length) { if ("string" != typeof e) { for (a = 0; a < this.length; a += 1)for (const t in e) this[a].style[t] = e[t]; return this } if (this[0]) return s.getComputedStyle(this[0], null).getPropertyValue(e) } if (2 === arguments.length && "string" == typeof e) { for (a = 0; a < this.length; a += 1)this[a].style[e] = t; return this } return this }, each: function (e) { return e ? (this.forEach(((t, s) => { e.apply(t, [t, s]) })), this) : this }, html: function (e) { if (void 0 === e) return this[0] ? this[0].innerHTML : null; for (let t = 0; t < this.length; t += 1)this[t].innerHTML = e; return this }, text: function (e) { if (void 0 === e) return this[0] ? this[0].textContent.trim() : null; for (let t = 0; t < this.length; t += 1)this[t].textContent = e; return this }, is: function (e) { const t = r(), s = a(), i = this[0]; let l, o; if (!i || void 0 === e) return !1; if ("string" == typeof e) { if (i.matches) return i.matches(e); if (i.webkitMatchesSelector) return i.webkitMatchesSelector(e); if (i.msMatchesSelector) return i.msMatchesSelector(e); for (l = d(e), o = 0; o < l.length; o += 1)if (l[o] === i) return !0; return !1 } if (e === s) return i === s; if (e === t) return i === t; if (e.nodeType || e instanceof n) { for (l = e.nodeType ? [e] : e, o = 0; o < l.length; o += 1)if (l[o] === i) return !0; return !1 } return !1 }, index: function () { let e, t = this[0]; if (t) { for (e = 0; null !== (t = t.previousSibling);)1 === t.nodeType && (e += 1); return e } }, eq: function (e) { if (void 0 === e) return this; const t = this.length; if (e > t - 1) return d([]); if (e < 0) { const s = t + e; return d(s < 0 ? [] : [this[s]]) } return d([this[e]]) }, append: function () { let e; const t = a(); for (let s = 0; s < arguments.length; s += 1) { e = s < 0 || arguments.length <= s ? void 0 : arguments[s]; for (let s = 0; s < this.length; s += 1)if ("string" == typeof e) { const a = t.createElement("div"); for (a.innerHTML = e; a.firstChild;)this[s].appendChild(a.firstChild) } else if (e instanceof n) for (let t = 0; t < e.length; t += 1)this[s].appendChild(e[t]); else this[s].appendChild(e) } return this }, prepend: function (e) { const t = a(); let s, i; for (s = 0; s < this.length; s += 1)if ("string" == typeof e) { const a = t.createElement("div"); for (a.innerHTML = e, i = a.childNodes.length - 1; i >= 0; i -= 1)this[s].insertBefore(a.childNodes[i], this[s].childNodes[0]) } else if (e instanceof n) for (i = 0; i < e.length; i += 1)this[s].insertBefore(e[i], this[s].childNodes[0]); else this[s].insertBefore(e, this[s].childNodes[0]); return this }, next: function (e) { return this.length > 0 ? e ? this[0].nextElementSibling && d(this[0].nextElementSibling).is(e) ? d([this[0].nextElementSibling]) : d([]) : this[0].nextElementSibling ? d([this[0].nextElementSibling]) : d([]) : d([]) }, nextAll: function (e) { const t = []; let s = this[0]; if (!s) return d([]); for (; s.nextElementSibling;) { const a = s.nextElementSibling; e ? d(a).is(e) && t.push(a) : t.push(a), s = a } return d(t) }, prev: function (e) { if (this.length > 0) { const t = this[0]; return e ? t.previousElementSibling && d(t.previousElementSibling).is(e) ? d([t.previousElementSibling]) : d([]) : t.previousElementSibling ? d([t.previousElementSibling]) : d([]) } return d([]) }, prevAll: function (e) { const t = []; let s = this[0]; if (!s) return d([]); for (; s.previousElementSibling;) { const a = s.previousElementSibling; e ? d(a).is(e) && t.push(a) : t.push(a), s = a } return d(t) }, parent: function (e) { const t = []; for (let s = 0; s < this.length; s += 1)null !== this[s].parentNode && (e ? d(this[s].parentNode).is(e) && t.push(this[s].parentNode) : t.push(this[s].parentNode)); return d(t) }, parents: function (e) { const t = []; for (let s = 0; s < this.length; s += 1) { let a = this[s].parentNode; for (; a;)e ? d(a).is(e) && t.push(a) : t.push(a), a = a.parentNode } return d(t) }, closest: function (e) { let t = this; return void 0 === e ? d([]) : (t.is(e) || (t = t.parents(e).eq(0)), t) }, find: function (e) { const t = []; for (let s = 0; s < this.length; s += 1) { const a = this[s].querySelectorAll(e); for (let e = 0; e < a.length; e += 1)t.push(a[e]) } return d(t) }, children: function (e) { const t = []; for (let s = 0; s < this.length; s += 1) { const a = this[s].children; for (let s = 0; s < a.length; s += 1)e && !d(a[s]).is(e) || t.push(a[s]) } return d(t) }, filter: function (e) { return d(o(this, e)) }, remove: function () { for (let e = 0; e < this.length; e += 1)this[e].parentNode && this[e].parentNode.removeChild(this[e]); return this } }; function p(e, t) { return void 0 === t && (t = 0), setTimeout(e, t) } function u() { return Date.now() } function h(e, t) { void 0 === t && (t = "x"); const s = r(); let a, i, n; const l = function (e) { const t = r(); let s; return t.getComputedStyle && (s = t.getComputedStyle(e, null)), !s && e.currentStyle && (s = e.currentStyle), s || (s = e.style), s }(e); return s.WebKitCSSMatrix ? (i = l.transform || l.webkitTransform, i.split(",").length > 6 && (i = i.split(", ").map((e => e.replace(",", "."))).join(", ")), n = new s.WebKitCSSMatrix("none" === i ? "" : i)) : (n = l.MozTransform || l.OTransform || l.MsTransform || l.msTransform || l.transform || l.getPropertyValue("transform").replace("translate(", "matrix(1, 0, 0, 1,"), a = n.toString().split(",")), "x" === t && (i = s.WebKitCSSMatrix ? n.m41 : 16 === a.length ? parseFloat(a[12]) : parseFloat(a[4])), "y" === t && (i = s.WebKitCSSMatrix ? n.m42 : 16 === a.length ? parseFloat(a[13]) : parseFloat(a[5])), i || 0 } function m(e) { return "object" == typeof e && null !== e && e.constructor && "Object" === Object.prototype.toString.call(e).slice(8, -1) } function f(e) { return "undefined" != typeof window && void 0 !== window.HTMLElement ? e instanceof HTMLElement : e && (1 === e.nodeType || 11 === e.nodeType) } function g() { const e = Object(arguments.length <= 0 ? void 0 : arguments[0]), t = ["__proto__", "constructor", "prototype"]; for (let s = 1; s < arguments.length; s += 1) { const a = s < 0 || arguments.length <= s ? void 0 : arguments[s]; if (null != a && !f(a)) { const s = Object.keys(Object(a)).filter((e => t.indexOf(e) < 0)); for (let t = 0, i = s.length; t < i; t += 1) { const i = s[t], r = Object.getOwnPropertyDescriptor(a, i); void 0 !== r && r.enumerable && (m(e[i]) && m(a[i]) ? a[i].__swiper__ ? e[i] = a[i] : g(e[i], a[i]) : !m(e[i]) && m(a[i]) ? (e[i] = {}, a[i].__swiper__ ? e[i] = a[i] : g(e[i], a[i])) : e[i] = a[i]) } } } return e } function v(e, t, s) { e.style.setProperty(t, s) } function w(e) { let { swiper: t, targetPosition: s, side: a } = e; const i = r(), n = -t.translate; let l, o = null; const d = t.params.speed; t.wrapperEl.style.scrollSnapType = "none", i.cancelAnimationFrame(t.cssModeFrameID); const c = s > n ? "next" : "prev", p = (e, t) => "next" === c && e >= t || "prev" === c && e <= t, u = () => { l = (new Date).getTime(), null === o && (o = l); const e = Math.max(Math.min((l - o) / d, 1), 0), r = .5 - Math.cos(e * Math.PI) / 2; let c = n + r * (s - n); if (p(c, s) && (c = s), t.wrapperEl.scrollTo({ [a]: c }), p(c, s)) return t.wrapperEl.style.overflow = "hidden", t.wrapperEl.style.scrollSnapType = "", setTimeout((() => { t.wrapperEl.style.overflow = "", t.wrapperEl.scrollTo({ [a]: c }) })), void i.cancelAnimationFrame(t.cssModeFrameID); t.cssModeFrameID = i.requestAnimationFrame(u) }; u() } let b, x, y; function E() { return b || (b = function () { const e = r(), t = a(); return { smoothScroll: t.documentElement && "scrollBehavior" in t.documentElement.style, touch: !!("ontouchstart" in e || e.DocumentTouch && t instanceof e.DocumentTouch), passiveListener: function () { let t = !1; try { const s = Object.defineProperty({}, "passive", { get() { t = !0 } }); e.addEventListener("testPassiveListener", null, s) } catch (e) { } return t }(), gestures: "ongesturestart" in e } }()), b } function C(e) { return void 0 === e && (e = {}), x || (x = function (e) { let { userAgent: t } = void 0 === e ? {} : e; const s = E(), a = r(), i = a.navigator.platform, n = t || a.navigator.userAgent, l = { ios: !1, android: !1 }, o = a.screen.width, d = a.screen.height, c = n.match(/(Android);?[\s\/]+([\d.]+)?/); let p = n.match(/(iPad).*OS\s([\d_]+)/); const u = n.match(/(iPod)(.*OS\s([\d_]+))?/), h = !p && n.match(/(iPhone\sOS|iOS)\s([\d_]+)/), m = "Win32" === i; let f = "MacIntel" === i; return !p && f && s.touch && ["1024x1366", "1366x1024", "834x1194", "1194x834", "834x1112", "1112x834", "768x1024", "1024x768", "820x1180", "1180x820", "810x1080", "1080x810"].indexOf(`${o}x${d}`) >= 0 && (p = n.match(/(Version)\/([\d.]+)/), p || (p = [0, 1, "13_0_0"]), f = !1), c && !m && (l.os = "android", l.android = !0), (p || h || u) && (l.os = "ios", l.ios = !0), l }(e)), x } function T() { return y || (y = function () { const e = r(); return { isSafari: function () { const t = e.navigator.userAgent.toLowerCase(); return t.indexOf("safari") >= 0 && t.indexOf("chrome") < 0 && t.indexOf("android") < 0 }(), isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(e.navigator.userAgent) } }()), y } Object.keys(c).forEach((e => { Object.defineProperty(d.fn, e, { value: c[e], writable: !0 }) })); var $ = { on(e, t, s) { const a = this; if (!a.eventsListeners || a.destroyed) return a; if ("function" != typeof t) return a; const i = s ? "unshift" : "push"; return e.split(" ").forEach((e => { a.eventsListeners[e] || (a.eventsListeners[e] = []), a.eventsListeners[e][i](t) })), a }, once(e, t, s) { const a = this; if (!a.eventsListeners || a.destroyed) return a; if ("function" != typeof t) return a; function i() { a.off(e, i), i.__emitterProxy && delete i.__emitterProxy; for (var s = arguments.length, r = new Array(s), n = 0; n < s; n++)r[n] = arguments[n]; t.apply(a, r) } return i.__emitterProxy = t, a.on(e, i, s) }, onAny(e, t) { const s = this; if (!s.eventsListeners || s.destroyed) return s; if ("function" != typeof e) return s; const a = t ? "unshift" : "push"; return s.eventsAnyListeners.indexOf(e) < 0 && s.eventsAnyListeners[a](e), s }, offAny(e) { const t = this; if (!t.eventsListeners || t.destroyed) return t; if (!t.eventsAnyListeners) return t; const s = t.eventsAnyListeners.indexOf(e); return s >= 0 && t.eventsAnyListeners.splice(s, 1), t }, off(e, t) { const s = this; return !s.eventsListeners || s.destroyed ? s : s.eventsListeners ? (e.split(" ").forEach((e => { void 0 === t ? s.eventsListeners[e] = [] : s.eventsListeners[e] && s.eventsListeners[e].forEach(((a, i) => { (a === t || a.__emitterProxy && a.__emitterProxy === t) && s.eventsListeners[e].splice(i, 1) })) })), s) : s }, emit() { const e = this; if (!e.eventsListeners || e.destroyed) return e; if (!e.eventsListeners) return e; let t, s, a; for (var i = arguments.length, r = new Array(i), n = 0; n < i; n++)r[n] = arguments[n]; "string" == typeof r[0] || Array.isArray(r[0]) ? (t = r[0], s = r.slice(1, r.length), a = e) : (t = r[0].events, s = r[0].data, a = r[0].context || e), s.unshift(a); return (Array.isArray(t) ? t : t.split(" ")).forEach((t => { e.eventsAnyListeners && e.eventsAnyListeners.length && e.eventsAnyListeners.forEach((e => { e.apply(a, [t, ...s]) })), e.eventsListeners && e.eventsListeners[t] && e.eventsListeners[t].forEach((e => { e.apply(a, s) })) })), e } }; var S = { updateSize: function () { const e = this; let t, s; const a = e.$el; t = void 0 !== e.params.width && null !== e.params.width ? e.params.width : a[0].clientWidth, s = void 0 !== e.params.height && null !== e.params.height ? e.params.height : a[0].clientHeight, 0 === t && e.isHorizontal() || 0 === s && e.isVertical() || (t = t - parseInt(a.css("padding-left") || 0, 10) - parseInt(a.css("padding-right") || 0, 10), s = s - parseInt(a.css("padding-top") || 0, 10) - parseInt(a.css("padding-bottom") || 0, 10), Number.isNaN(t) && (t = 0), Number.isNaN(s) && (s = 0), Object.assign(e, { width: t, height: s, size: e.isHorizontal() ? t : s })) }, updateSlides: function () { const e = this; function t(t) { return e.isHorizontal() ? t : { width: "height", "margin-top": "margin-left", "margin-bottom ": "margin-right", "margin-left": "margin-top", "margin-right": "margin-bottom", "padding-left": "padding-top", "padding-right": "padding-bottom", marginRight: "marginBottom" }[t] } function s(e, s) { return parseFloat(e.getPropertyValue(t(s)) || 0) } const a = e.params, { $wrapperEl: i, size: r, rtlTranslate: n, wrongRTL: l } = e, o = e.virtual && a.virtual.enabled, d = o ? e.virtual.slides.length : e.slides.length, c = i.children(`.${e.params.slideClass}`), p = o ? e.virtual.slides.length : c.length; let u = []; const h = [], m = []; let f = a.slidesOffsetBefore; "function" == typeof f && (f = a.slidesOffsetBefore.call(e)); let g = a.slidesOffsetAfter; "function" == typeof g && (g = a.slidesOffsetAfter.call(e)); const w = e.snapGrid.length, b = e.slidesGrid.length; let x = a.spaceBetween, y = -f, E = 0, C = 0; if (void 0 === r) return; "string" == typeof x && x.indexOf("%") >= 0 && (x = parseFloat(x.replace("%", "")) / 100 * r), e.virtualSize = -x, n ? c.css({ marginLeft: "", marginBottom: "", marginTop: "" }) : c.css({ marginRight: "", marginBottom: "", marginTop: "" }), a.centeredSlides && a.cssMode && (v(e.wrapperEl, "--swiper-centered-offset-before", ""), v(e.wrapperEl, "--swiper-centered-offset-after", "")); const T = a.grid && a.grid.rows > 1 && e.grid; let $; T && e.grid.initSlides(p); const S = "auto" === a.slidesPerView && a.breakpoints && Object.keys(a.breakpoints).filter((e => void 0 !== a.breakpoints[e].slidesPerView)).length > 0; for (let i = 0; i < p; i += 1) { $ = 0; const n = c.eq(i); if (T && e.grid.updateSlide(i, n, p, t), "none" !== n.css("display")) { if ("auto" === a.slidesPerView) { S && (c[i].style[t("width")] = ""); const r = getComputedStyle(n[0]), l = n[0].style.transform, o = n[0].style.webkitTransform; if (l && (n[0].style.transform = "none"), o && (n[0].style.webkitTransform = "none"), a.roundLengths) $ = e.isHorizontal() ? n.outerWidth(!0) : n.outerHeight(!0); else { const e = s(r, "width"), t = s(r, "padding-left"), a = s(r, "padding-right"), i = s(r, "margin-left"), l = s(r, "margin-right"), o = r.getPropertyValue("box-sizing"); if (o && "border-box" === o) $ = e + i + l; else { const { clientWidth: s, offsetWidth: r } = n[0]; $ = e + t + a + i + l + (r - s) } } l && (n[0].style.transform = l), o && (n[0].style.webkitTransform = o), a.roundLengths && ($ = Math.floor($)) } else $ = (r - (a.slidesPerView - 1) * x) / a.slidesPerView, a.roundLengths && ($ = Math.floor($)), c[i] && (c[i].style[t("width")] = `${$}px`); c[i] && (c[i].swiperSlideSize = $), m.push($), a.centeredSlides ? (y = y + $ / 2 + E / 2 + x, 0 === E && 0 !== i && (y = y - r / 2 - x), 0 === i && (y = y - r / 2 - x), Math.abs(y) < .001 && (y = 0), a.roundLengths && (y = Math.floor(y)), C % a.slidesPerGroup == 0 && u.push(y), h.push(y)) : (a.roundLengths && (y = Math.floor(y)), (C - Math.min(e.params.slidesPerGroupSkip, C)) % e.params.slidesPerGroup == 0 && u.push(y), h.push(y), y = y + $ + x), e.virtualSize += $ + x, E = $, C += 1 } } if (e.virtualSize = Math.max(e.virtualSize, r) + g, n && l && ("slide" === a.effect || "coverflow" === a.effect) && i.css({ width: `${e.virtualSize + a.spaceBetween}px` }), a.setWrapperSize && i.css({ [t("width")]: `${e.virtualSize + a.spaceBetween}px` }), T && e.grid.updateWrapperSize($, u, t), !a.centeredSlides) { const t = []; for (let s = 0; s < u.length; s += 1) { let i = u[s]; a.roundLengths && (i = Math.floor(i)), u[s] <= e.virtualSize - r && t.push(i) } u = t, Math.floor(e.virtualSize - r) - Math.floor(u[u.length - 1]) > 1 && u.push(e.virtualSize - r) } if (0 === u.length && (u = [0]), 0 !== a.spaceBetween) { const s = e.isHorizontal() && n ? "marginLeft" : t("marginRight"); c.filter(((e, t) => !a.cssMode || t !== c.length - 1)).css({ [s]: `${x}px` }) } if (a.centeredSlides && a.centeredSlidesBounds) { let e = 0; m.forEach((t => { e += t + (a.spaceBetween ? a.spaceBetween : 0) })), e -= a.spaceBetween; const t = e - r; u = u.map((e => e < 0 ? -f : e > t ? t + g : e)) } if (a.centerInsufficientSlides) { let e = 0; if (m.forEach((t => { e += t + (a.spaceBetween ? a.spaceBetween : 0) })), e -= a.spaceBetween, e < r) { const t = (r - e) / 2; u.forEach(((e, s) => { u[s] = e - t })), h.forEach(((e, s) => { h[s] = e + t })) } } if (Object.assign(e, { slides: c, snapGrid: u, slidesGrid: h, slidesSizesGrid: m }), a.centeredSlides && a.cssMode && !a.centeredSlidesBounds) { v(e.wrapperEl, "--swiper-centered-offset-before", -u[0] + "px"), v(e.wrapperEl, "--swiper-centered-offset-after", e.size / 2 - m[m.length - 1] / 2 + "px"); const t = -e.snapGrid[0], s = -e.slidesGrid[0]; e.snapGrid = e.snapGrid.map((e => e + t)), e.slidesGrid = e.slidesGrid.map((e => e + s)) } if (p !== d && e.emit("slidesLengthChange"), u.length !== w && (e.params.watchOverflow && e.checkOverflow(), e.emit("snapGridLengthChange")), h.length !== b && e.emit("slidesGridLengthChange"), a.watchSlidesProgress && e.updateSlidesOffset(), !(o || a.cssMode || "slide" !== a.effect && "fade" !== a.effect)) { const t = `${a.containerModifierClass}backface-hidden`, s = e.$el.hasClass(t); p <= a.maxBackfaceHiddenSlides ? s || e.$el.addClass(t) : s && e.$el.removeClass(t) } }, updateAutoHeight: function (e) { const t = this, s = [], a = t.virtual && t.params.virtual.enabled; let i, r = 0; "number" == typeof e ? t.setTransition(e) : !0 === e && t.setTransition(t.params.speed); const n = e => a ? t.slides.filter((t => parseInt(t.getAttribute("data-swiper-slide-index"), 10) === e))[0] : t.slides.eq(e)[0]; if ("auto" !== t.params.slidesPerView && t.params.slidesPerView > 1) if (t.params.centeredSlides) (t.visibleSlides || d([])).each((e => { s.push(e) })); else for (i = 0; i < Math.ceil(t.params.slidesPerView); i += 1) { const e = t.activeIndex + i; if (e > t.slides.length && !a) break; s.push(n(e)) } else s.push(n(t.activeIndex)); for (i = 0; i < s.length; i += 1)if (void 0 !== s[i]) { const e = s[i].offsetHeight; r = e > r ? e : r } (r || 0 === r) && t.$wrapperEl.css("height", `${r}px`) }, updateSlidesOffset: function () { const e = this, t = e.slides; for (let s = 0; s < t.length; s += 1)t[s].swiperSlideOffset = e.isHorizontal() ? t[s].offsetLeft : t[s].offsetTop }, updateSlidesProgress: function (e) { void 0 === e && (e = this && this.translate || 0); const t = this, s = t.params, { slides: a, rtlTranslate: i, snapGrid: r } = t; if (0 === a.length) return; void 0 === a[0].swiperSlideOffset && t.updateSlidesOffset(); let n = -e; i && (n = e), a.removeClass(s.slideVisibleClass), t.visibleSlidesIndexes = [], t.visibleSlides = []; for (let e = 0; e < a.length; e += 1) { const l = a[e]; let o = l.swiperSlideOffset; s.cssMode && s.centeredSlides && (o -= a[0].swiperSlideOffset); const d = (n + (s.centeredSlides ? t.minTranslate() : 0) - o) / (l.swiperSlideSize + s.spaceBetween), c = (n - r[0] + (s.centeredSlides ? t.minTranslate() : 0) - o) / (l.swiperSlideSize + s.spaceBetween), p = -(n - o), u = p + t.slidesSizesGrid[e]; (p >= 0 && p < t.size - 1 || u > 1 && u <= t.size || p <= 0 && u >= t.size) && (t.visibleSlides.push(l), t.visibleSlidesIndexes.push(e), a.eq(e).addClass(s.slideVisibleClass)), l.progress = i ? -d : d, l.originalProgress = i ? -c : c } t.visibleSlides = d(t.visibleSlides) }, updateProgress: function (e) { const t = this; if (void 0 === e) { const s = t.rtlTranslate ? -1 : 1; e = t && t.translate && t.translate * s || 0 } const s = t.params, a = t.maxTranslate() - t.minTranslate(); let { progress: i, isBeginning: r, isEnd: n } = t; const l = r, o = n; 0 === a ? (i = 0, r = !0, n = !0) : (i = (e - t.minTranslate()) / a, r = i <= 0, n = i >= 1), Object.assign(t, { progress: i, isBeginning: r, isEnd: n }), (s.watchSlidesProgress || s.centeredSlides && s.autoHeight) && t.updateSlidesProgress(e), r && !l && t.emit("reachBeginning toEdge"), n && !o && t.emit("reachEnd toEdge"), (l && !r || o && !n) && t.emit("fromEdge"), t.emit("progress", i) }, updateSlidesClasses: function () { const e = this, { slides: t, params: s, $wrapperEl: a, activeIndex: i, realIndex: r } = e, n = e.virtual && s.virtual.enabled; let l; t.removeClass(`${s.slideActiveClass} ${s.slideNextClass} ${s.slidePrevClass} ${s.slideDuplicateActiveClass} ${s.slideDuplicateNextClass} ${s.slideDuplicatePrevClass}`), l = n ? e.$wrapperEl.find(`.${s.slideClass}[data-swiper-slide-index="${i}"]`) : t.eq(i), l.addClass(s.slideActiveClass), s.loop && (l.hasClass(s.slideDuplicateClass) ? a.children(`.${s.slideClass}:not(.${s.slideDuplicateClass})[data-swiper-slide-index="${r}"]`).addClass(s.slideDuplicateActiveClass) : a.children(`.${s.slideClass}.${s.slideDuplicateClass}[data-swiper-slide-index="${r}"]`).addClass(s.slideDuplicateActiveClass)); let o = l.nextAll(`.${s.slideClass}`).eq(0).addClass(s.slideNextClass); s.loop && 0 === o.length && (o = t.eq(0), o.addClass(s.slideNextClass)); let d = l.prevAll(`.${s.slideClass}`).eq(0).addClass(s.slidePrevClass); s.loop && 0 === d.length && (d = t.eq(-1), d.addClass(s.slidePrevClass)), s.loop && (o.hasClass(s.slideDuplicateClass) ? a.children(`.${s.slideClass}:not(.${s.slideDuplicateClass})[data-swiper-slide-index="${o.attr("data-swiper-slide-index")}"]`).addClass(s.slideDuplicateNextClass) : a.children(`.${s.slideClass}.${s.slideDuplicateClass}[data-swiper-slide-index="${o.attr("data-swiper-slide-index")}"]`).addClass(s.slideDuplicateNextClass), d.hasClass(s.slideDuplicateClass) ? a.children(`.${s.slideClass}:not(.${s.slideDuplicateClass})[data-swiper-slide-index="${d.attr("data-swiper-slide-index")}"]`).addClass(s.slideDuplicatePrevClass) : a.children(`.${s.slideClass}.${s.slideDuplicateClass}[data-swiper-slide-index="${d.attr("data-swiper-slide-index")}"]`).addClass(s.slideDuplicatePrevClass)), e.emitSlidesClasses() }, updateActiveIndex: function (e) { const t = this, s = t.rtlTranslate ? t.translate : -t.translate, { slidesGrid: a, snapGrid: i, params: r, activeIndex: n, realIndex: l, snapIndex: o } = t; let d, c = e; if (void 0 === c) { for (let e = 0; e < a.length; e += 1)void 0 !== a[e + 1] ? s >= a[e] && s < a[e + 1] - (a[e + 1] - a[e]) / 2 ? c = e : s >= a[e] && s < a[e + 1] && (c = e + 1) : s >= a[e] && (c = e); r.normalizeSlideIndex && (c < 0 || void 0 === c) && (c = 0) } if (i.indexOf(s) >= 0) d = i.indexOf(s); else { const e = Math.min(r.slidesPerGroupSkip, c); d = e + Math.floor((c - e) / r.slidesPerGroup) } if (d >= i.length && (d = i.length - 1), c === n) return void (d !== o && (t.snapIndex = d, t.emit("snapIndexChange"))); const p = parseInt(t.slides.eq(c).attr("data-swiper-slide-index") || c, 10); Object.assign(t, { snapIndex: d, realIndex: p, previousIndex: n, activeIndex: c }), t.emit("activeIndexChange"), t.emit("snapIndexChange"), l !== p && t.emit("realIndexChange"), (t.initialized || t.params.runCallbacksOnInit) && t.emit("slideChange") }, updateClickedSlide: function (e) { const t = this, s = t.params, a = d(e).closest(`.${s.slideClass}`)[0]; let i, r = !1; if (a) for (let e = 0; e < t.slides.length; e += 1)if (t.slides[e] === a) { r = !0, i = e; break } if (!a || !r) return t.clickedSlide = void 0, void (t.clickedIndex = void 0); t.clickedSlide = a, t.virtual && t.params.virtual.enabled ? t.clickedIndex = parseInt(d(a).attr("data-swiper-slide-index"), 10) : t.clickedIndex = i, s.slideToClickedSlide && void 0 !== t.clickedIndex && t.clickedIndex !== t.activeIndex && t.slideToClickedSlide() } }; var M = { getTranslate: function (e) { void 0 === e && (e = this.isHorizontal() ? "x" : "y"); const { params: t, rtlTranslate: s, translate: a, $wrapperEl: i } = this; if (t.virtualTranslate) return s ? -a : a; if (t.cssMode) return a; let r = h(i[0], e); return s && (r = -r), r || 0 }, setTranslate: function (e, t) { const s = this, { rtlTranslate: a, params: i, $wrapperEl: r, wrapperEl: n, progress: l } = s; let o, d = 0, c = 0; s.isHorizontal() ? d = a ? -e : e : c = e, i.roundLengths && (d = Math.floor(d), c = Math.floor(c)), i.cssMode ? n[s.isHorizontal() ? "scrollLeft" : "scrollTop"] = s.isHorizontal() ? -d : -c : i.virtualTranslate || r.transform(`translate3d(${d}px, ${c}px, 0px)`), s.previousTranslate = s.translate, s.translate = s.isHorizontal() ? d : c; const p = s.maxTranslate() - s.minTranslate(); o = 0 === p ? 0 : (e - s.minTranslate()) / p, o !== l && s.updateProgress(e), s.emit("setTranslate", s.translate, t) }, minTranslate: function () { return -this.snapGrid[0] }, maxTranslate: function () { return -this.snapGrid[this.snapGrid.length - 1] }, translateTo: function (e, t, s, a, i) { void 0 === e && (e = 0), void 0 === t && (t = this.params.speed), void 0 === s && (s = !0), void 0 === a && (a = !0); const r = this, { params: n, wrapperEl: l } = r; if (r.animating && n.preventInteractionOnTransition) return !1; const o = r.minTranslate(), d = r.maxTranslate(); let c; if (c = a && e > o ? o : a && e < d ? d : e, r.updateProgress(c), n.cssMode) { const e = r.isHorizontal(); if (0 === t) l[e ? "scrollLeft" : "scrollTop"] = -c; else { if (!r.support.smoothScroll) return w({ swiper: r, targetPosition: -c, side: e ? "left" : "top" }), !0; l.scrollTo({ [e ? "left" : "top"]: -c, behavior: "smooth" }) } return !0 } return 0 === t ? (r.setTransition(0), r.setTranslate(c), s && (r.emit("beforeTransitionStart", t, i), r.emit("transitionEnd"))) : (r.setTransition(t), r.setTranslate(c), s && (r.emit("beforeTransitionStart", t, i), r.emit("transitionStart")), r.animating || (r.animating = !0, r.onTranslateToWrapperTransitionEnd || (r.onTranslateToWrapperTransitionEnd = function (e) { r && !r.destroyed && e.target === this && (r.$wrapperEl[0].removeEventListener("transitionend", r.onTranslateToWrapperTransitionEnd), r.$wrapperEl[0].removeEventListener("webkitTransitionEnd", r.onTranslateToWrapperTransitionEnd), r.onTranslateToWrapperTransitionEnd = null, delete r.onTranslateToWrapperTransitionEnd, s && r.emit("transitionEnd")) }), r.$wrapperEl[0].addEventListener("transitionend", r.onTranslateToWrapperTransitionEnd), r.$wrapperEl[0].addEventListener("webkitTransitionEnd", r.onTranslateToWrapperTransitionEnd))), !0 } }; function P(e) { let { swiper: t, runCallbacks: s, direction: a, step: i } = e; const { activeIndex: r, previousIndex: n } = t; let l = a; if (l || (l = r > n ? "next" : r < n ? "prev" : "reset"), t.emit(`transition${i}`), s && r !== n) { if ("reset" === l) return void t.emit(`slideResetTransition${i}`); t.emit(`slideChangeTransition${i}`), "next" === l ? t.emit(`slideNextTransition${i}`) : t.emit(`slidePrevTransition${i}`) } } var k = { slideTo: function (e, t, s, a, i) { if (void 0 === e && (e = 0), void 0 === t && (t = this.params.speed), void 0 === s && (s = !0), "number" != typeof e && "string" != typeof e) throw new Error(`The 'index' argument cannot have type other than 'number' or 'string'. [${typeof e}] given.`); if ("string" == typeof e) { const t = parseInt(e, 10); if (!isFinite(t)) throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${e}] given.`); e = t } const r = this; let n = e; n < 0 && (n = 0); const { params: l, snapGrid: o, slidesGrid: d, previousIndex: c, activeIndex: p, rtlTranslate: u, wrapperEl: h, enabled: m } = r; if (r.animating && l.preventInteractionOnTransition || !m && !a && !i) return !1; const f = Math.min(r.params.slidesPerGroupSkip, n); let g = f + Math.floor((n - f) / r.params.slidesPerGroup); g >= o.length && (g = o.length - 1); const v = -o[g]; if (l.normalizeSlideIndex) for (let e = 0; e < d.length; e += 1) { const t = -Math.floor(100 * v), s = Math.floor(100 * d[e]), a = Math.floor(100 * d[e + 1]); void 0 !== d[e + 1] ? t >= s && t < a - (a - s) / 2 ? n = e : t >= s && t < a && (n = e + 1) : t >= s && (n = e) } if (r.initialized && n !== p) { if (!r.allowSlideNext && v < r.translate && v < r.minTranslate()) return !1; if (!r.allowSlidePrev && v > r.translate && v > r.maxTranslate() && (p || 0) !== n) return !1 } let b; if (n !== (c || 0) && s && r.emit("beforeSlideChangeStart"), r.updateProgress(v), b = n > p ? "next" : n < p ? "prev" : "reset", u && -v === r.translate || !u && v === r.translate) return r.updateActiveIndex(n), l.autoHeight && r.updateAutoHeight(), r.updateSlidesClasses(), "slide" !== l.effect && r.setTranslate(v), "reset" !== b && (r.transitionStart(s, b), r.transitionEnd(s, b)), !1; if (l.cssMode) { const e = r.isHorizontal(), s = u ? v : -v; if (0 === t) { const t = r.virtual && r.params.virtual.enabled; t && (r.wrapperEl.style.scrollSnapType = "none", r._immediateVirtual = !0), h[e ? "scrollLeft" : "scrollTop"] = s, t && requestAnimationFrame((() => { r.wrapperEl.style.scrollSnapType = "", r._swiperImmediateVirtual = !1 })) } else { if (!r.support.smoothScroll) return w({ swiper: r, targetPosition: s, side: e ? "left" : "top" }), !0; h.scrollTo({ [e ? "left" : "top"]: s, behavior: "smooth" }) } return !0 } return r.setTransition(t), r.setTranslate(v), r.updateActiveIndex(n), r.updateSlidesClasses(), r.emit("beforeTransitionStart", t, a), r.transitionStart(s, b), 0 === t ? r.transitionEnd(s, b) : r.animating || (r.animating = !0, r.onSlideToWrapperTransitionEnd || (r.onSlideToWrapperTransitionEnd = function (e) { r && !r.destroyed && e.target === this && (r.$wrapperEl[0].removeEventListener("transitionend", r.onSlideToWrapperTransitionEnd), r.$wrapperEl[0].removeEventListener("webkitTransitionEnd", r.onSlideToWrapperTransitionEnd), r.onSlideToWrapperTransitionEnd = null, delete r.onSlideToWrapperTransitionEnd, r.transitionEnd(s, b)) }), r.$wrapperEl[0].addEventListener("transitionend", r.onSlideToWrapperTransitionEnd), r.$wrapperEl[0].addEventListener("webkitTransitionEnd", r.onSlideToWrapperTransitionEnd)), !0 }, slideToLoop: function (e, t, s, a) { if (void 0 === e && (e = 0), void 0 === t && (t = this.params.speed), void 0 === s && (s = !0), "string" == typeof e) { const t = parseInt(e, 10); if (!isFinite(t)) throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${e}] given.`); e = t } const i = this; let r = e; return i.params.loop && (r += i.loopedSlides), i.slideTo(r, t, s, a) }, slideNext: function (e, t, s) { void 0 === e && (e = this.params.speed), void 0 === t && (t = !0); const a = this, { animating: i, enabled: r, params: n } = a; if (!r) return a; let l = n.slidesPerGroup; "auto" === n.slidesPerView && 1 === n.slidesPerGroup && n.slidesPerGroupAuto && (l = Math.max(a.slidesPerViewDynamic("current", !0), 1)); const o = a.activeIndex < n.slidesPerGroupSkip ? 1 : l; if (n.loop) { if (i && n.loopPreventsSlide) return !1; a.loopFix(), a._clientLeft = a.$wrapperEl[0].clientLeft } return n.rewind && a.isEnd ? a.slideTo(0, e, t, s) : a.slideTo(a.activeIndex + o, e, t, s) }, slidePrev: function (e, t, s) { void 0 === e && (e = this.params.speed), void 0 === t && (t = !0); const a = this, { params: i, animating: r, snapGrid: n, slidesGrid: l, rtlTranslate: o, enabled: d } = a; if (!d) return a; if (i.loop) { if (r && i.loopPreventsSlide) return !1; a.loopFix(), a._clientLeft = a.$wrapperEl[0].clientLeft } function c(e) { return e < 0 ? -Math.floor(Math.abs(e)) : Math.floor(e) } const p = c(o ? a.translate : -a.translate), u = n.map((e => c(e))); let h = n[u.indexOf(p) - 1]; if (void 0 === h && i.cssMode) { let e; n.forEach(((t, s) => { p >= t && (e = s) })), void 0 !== e && (h = n[e > 0 ? e - 1 : e]) } let m = 0; if (void 0 !== h && (m = l.indexOf(h), m < 0 && (m = a.activeIndex - 1), "auto" === i.slidesPerView && 1 === i.slidesPerGroup && i.slidesPerGroupAuto && (m = m - a.slidesPerViewDynamic("previous", !0) + 1, m = Math.max(m, 0))), i.rewind && a.isBeginning) { const i = a.params.virtual && a.params.virtual.enabled && a.virtual ? a.virtual.slides.length - 1 : a.slides.length - 1; return a.slideTo(i, e, t, s) } return a.slideTo(m, e, t, s) }, slideReset: function (e, t, s) { return void 0 === e && (e = this.params.speed), void 0 === t && (t = !0), this.slideTo(this.activeIndex, e, t, s) }, slideToClosest: function (e, t, s, a) { void 0 === e && (e = this.params.speed), void 0 === t && (t = !0), void 0 === a && (a = .5); const i = this; let r = i.activeIndex; const n = Math.min(i.params.slidesPerGroupSkip, r), l = n + Math.floor((r - n) / i.params.slidesPerGroup), o = i.rtlTranslate ? i.translate : -i.translate; if (o >= i.snapGrid[l]) { const e = i.snapGrid[l]; o - e > (i.snapGrid[l + 1] - e) * a && (r += i.params.slidesPerGroup) } else { const e = i.snapGrid[l - 1]; o - e <= (i.snapGrid[l] - e) * a && (r -= i.params.slidesPerGroup) } return r = Math.max(r, 0), r = Math.min(r, i.slidesGrid.length - 1), i.slideTo(r, e, t, s) }, slideToClickedSlide: function () { const e = this, { params: t, $wrapperEl: s } = e, a = "auto" === t.slidesPerView ? e.slidesPerViewDynamic() : t.slidesPerView; let i, r = e.clickedIndex; if (t.loop) { if (e.animating) return; i = parseInt(d(e.clickedSlide).attr("data-swiper-slide-index"), 10), t.centeredSlides ? r < e.loopedSlides - a / 2 || r > e.slides.length - e.loopedSlides + a / 2 ? (e.loopFix(), r = s.children(`.${t.slideClass}[data-swiper-slide-index="${i}"]:not(.${t.slideDuplicateClass})`).eq(0).index(), p((() => { e.slideTo(r) }))) : e.slideTo(r) : r > e.slides.length - a ? (e.loopFix(), r = s.children(`.${t.slideClass}[data-swiper-slide-index="${i}"]:not(.${t.slideDuplicateClass})`).eq(0).index(), p((() => { e.slideTo(r) }))) : e.slideTo(r) } else e.slideTo(r) } }; var z = { loopCreate: function () { const e = this, t = a(), { params: s, $wrapperEl: i } = e, r = i.children().length > 0 ? d(i.children()[0].parentNode) : i; r.children(`.${s.slideClass}.${s.slideDuplicateClass}`).remove(); let n = r.children(`.${s.slideClass}`); if (s.loopFillGroupWithBlank) { const e = s.slidesPerGroup - n.length % s.slidesPerGroup; if (e !== s.slidesPerGroup) { for (let a = 0; a < e; a += 1) { const e = d(t.createElement("div")).addClass(`${s.slideClass} ${s.slideBlankClass}`); r.append(e) } n = r.children(`.${s.slideClass}`) } } "auto" !== s.slidesPerView || s.loopedSlides || (s.loopedSlides = n.length), e.loopedSlides = Math.ceil(parseFloat(s.loopedSlides || s.slidesPerView, 10)), e.loopedSlides += s.loopAdditionalSlides, e.loopedSlides > n.length && e.params.loopedSlidesLimit && (e.loopedSlides = n.length); const l = [], o = []; n.each(((e, t) => { d(e).attr("data-swiper-slide-index", t) })); for (let t = 0; t < e.loopedSlides; t += 1) { const e = t - Math.floor(t / n.length) * n.length; o.push(n.eq(e)[0]), l.unshift(n.eq(n.length - e - 1)[0]) } for (let e = 0; e < o.length; e += 1)r.append(d(o[e].cloneNode(!0)).addClass(s.slideDuplicateClass)); for (let e = l.length - 1; e >= 0; e -= 1)r.prepend(d(l[e].cloneNode(!0)).addClass(s.slideDuplicateClass)) }, loopFix: function () { const e = this; e.emit("beforeLoopFix"); const { activeIndex: t, slides: s, loopedSlides: a, allowSlidePrev: i, allowSlideNext: r, snapGrid: n, rtlTranslate: l } = e; let o; e.allowSlidePrev = !0, e.allowSlideNext = !0; const d = -n[t] - e.getTranslate(); if (t < a) { o = s.length - 3 * a + t, o += a; e.slideTo(o, 0, !1, !0) && 0 !== d && e.setTranslate((l ? -e.translate : e.translate) - d) } else if (t >= s.length - a) { o = -s.length + t + a, o += a; e.slideTo(o, 0, !1, !0) && 0 !== d && e.setTranslate((l ? -e.translate : e.translate) - d) } e.allowSlidePrev = i, e.allowSlideNext = r, e.emit("loopFix") }, loopDestroy: function () { const { $wrapperEl: e, params: t, slides: s } = this; e.children(`.${t.slideClass}.${t.slideDuplicateClass},.${t.slideClass}.${t.slideBlankClass}`).remove(), s.removeAttr("data-swiper-slide-index") } }; function L(e) { const t = this, s = a(), i = r(), n = t.touchEventsData, { params: l, touches: o, enabled: c } = t; if (!c) return; if (t.animating && l.preventInteractionOnTransition) return; !t.animating && l.cssMode && l.loop && t.loopFix(); let p = e; p.originalEvent && (p = p.originalEvent); let h = d(p.target); if ("wrapper" === l.touchEventsTarget && !h.closest(t.wrapperEl).length) return; if (n.isTouchEvent = "touchstart" === p.type, !n.isTouchEvent && "which" in p && 3 === p.which) return; if (!n.isTouchEvent && "button" in p && p.button > 0) return; if (n.isTouched && n.isMoved) return; const m = !!l.noSwipingClass && "" !== l.noSwipingClass, f = e.composedPath ? e.composedPath() : e.path; m && p.target && p.target.shadowRoot && f && (h = d(f[0])); const g = l.noSwipingSelector ? l.noSwipingSelector : `.${l.noSwipingClass}`, v = !(!p.target || !p.target.shadowRoot); if (l.noSwiping && (v ? function (e, t) { return void 0 === t && (t = this), function t(s) { if (!s || s === a() || s === r()) return null; s.assignedSlot && (s = s.assignedSlot); const i = s.closest(e); return i || s.getRootNode ? i || t(s.getRootNode().host) : null }(t) }(g, h[0]) : h.closest(g)[0])) return void (t.allowClick = !0); if (l.swipeHandler && !h.closest(l.swipeHandler)[0]) return; o.currentX = "touchstart" === p.type ? p.targetTouches[0].pageX : p.pageX, o.currentY = "touchstart" === p.type ? p.targetTouches[0].pageY : p.pageY; const w = o.currentX, b = o.currentY, x = l.edgeSwipeDetection || l.iOSEdgeSwipeDetection, y = l.edgeSwipeThreshold || l.iOSEdgeSwipeThreshold; if (x && (w <= y || w >= i.innerWidth - y)) { if ("prevent" !== x) return; e.preventDefault() } if (Object.assign(n, { isTouched: !0, isMoved: !1, allowTouchCallbacks: !0, isScrolling: void 0, startMoving: void 0 }), o.startX = w, o.startY = b, n.touchStartTime = u(), t.allowClick = !0, t.updateSize(), t.swipeDirection = void 0, l.threshold > 0 && (n.allowThresholdMove = !1), "touchstart" !== p.type) { let e = !0; h.is(n.focusableElements) && (e = !1, "SELECT" === h[0].nodeName && (n.isTouched = !1)), s.activeElement && d(s.activeElement).is(n.focusableElements) && s.activeElement !== h[0] && s.activeElement.blur(); const a = e && t.allowTouchMove && l.touchStartPreventDefault; !l.touchStartForcePreventDefault && !a || h[0].isContentEditable || p.preventDefault() } t.params.freeMode && t.params.freeMode.enabled && t.freeMode && t.animating && !l.cssMode && t.freeMode.onTouchStart(), t.emit("touchStart", p) } function O(e) { const t = a(), s = this, i = s.touchEventsData, { params: r, touches: n, rtlTranslate: l, enabled: o } = s; if (!o) return; let c = e; if (c.originalEvent && (c = c.originalEvent), !i.isTouched) return void (i.startMoving && i.isScrolling && s.emit("touchMoveOpposite", c)); if (i.isTouchEvent && "touchmove" !== c.type) return; const p = "touchmove" === c.type && c.targetTouches && (c.targetTouches[0] || c.changedTouches[0]), h = "touchmove" === c.type ? p.pageX : c.pageX, m = "touchmove" === c.type ? p.pageY : c.pageY; if (c.preventedByNestedSwiper) return n.startX = h, void (n.startY = m); if (!s.allowTouchMove) return d(c.target).is(i.focusableElements) || (s.allowClick = !1), void (i.isTouched && (Object.assign(n, { startX: h, startY: m, currentX: h, currentY: m }), i.touchStartTime = u())); if (i.isTouchEvent && r.touchReleaseOnEdges && !r.loop) if (s.isVertical()) { if (m < n.startY && s.translate <= s.maxTranslate() || m > n.startY && s.translate >= s.minTranslate()) return i.isTouched = !1, void (i.isMoved = !1) } else if (h < n.startX && s.translate <= s.maxTranslate() || h > n.startX && s.translate >= s.minTranslate()) return; if (i.isTouchEvent && t.activeElement && c.target === t.activeElement && d(c.target).is(i.focusableElements)) return i.isMoved = !0, void (s.allowClick = !1); if (i.allowTouchCallbacks && s.emit("touchMove", c), c.targetTouches && c.targetTouches.length > 1) return; n.currentX = h, n.currentY = m; const f = n.currentX - n.startX, g = n.currentY - n.startY; if (s.params.threshold && Math.sqrt(f ** 2 + g ** 2) < s.params.threshold) return; if (void 0 === i.isScrolling) { let e; s.isHorizontal() && n.currentY === n.startY || s.isVertical() && n.currentX === n.startX ? i.isScrolling = !1 : f * f + g * g >= 25 && (e = 180 * Math.atan2(Math.abs(g), Math.abs(f)) / Math.PI, i.isScrolling = s.isHorizontal() ? e > r.touchAngle : 90 - e > r.touchAngle) } if (i.isScrolling && s.emit("touchMoveOpposite", c), void 0 === i.startMoving && (n.currentX === n.startX && n.currentY === n.startY || (i.startMoving = !0)), i.isScrolling) return void (i.isTouched = !1); if (!i.startMoving) return; s.allowClick = !1, !r.cssMode && c.cancelable && c.preventDefault(), r.touchMoveStopPropagation && !r.nested && c.stopPropagation(), i.isMoved || (r.loop && !r.cssMode && s.loopFix(), i.startTranslate = s.getTranslate(), s.setTransition(0), s.animating && s.$wrapperEl.trigger("webkitTransitionEnd transitionend"), i.allowMomentumBounce = !1, !r.grabCursor || !0 !== s.allowSlideNext && !0 !== s.allowSlidePrev || s.setGrabCursor(!0), s.emit("sliderFirstMove", c)), s.emit("sliderMove", c), i.isMoved = !0; let v = s.isHorizontal() ? f : g; n.diff = v, v *= r.touchRatio, l && (v = -v), s.swipeDirection = v > 0 ? "prev" : "next", i.currentTranslate = v + i.startTranslate; let w = !0, b = r.resistanceRatio; if (r.touchReleaseOnEdges && (b = 0), v > 0 && i.currentTranslate > s.minTranslate() ? (w = !1, r.resistance && (i.currentTranslate = s.minTranslate() - 1 + (-s.minTranslate() + i.startTranslate + v) ** b)) : v < 0 && i.currentTranslate < s.maxTranslate() && (w = !1, r.resistance && (i.currentTranslate = s.maxTranslate() + 1 - (s.maxTranslate() - i.startTranslate - v) ** b)), w && (c.preventedByNestedSwiper = !0), !s.allowSlideNext && "next" === s.swipeDirection && i.currentTranslate < i.startTranslate && (i.currentTranslate = i.startTranslate), !s.allowSlidePrev && "prev" === s.swipeDirection && i.currentTranslate > i.startTranslate && (i.currentTranslate = i.startTranslate), s.allowSlidePrev || s.allowSlideNext || (i.currentTranslate = i.startTranslate), r.threshold > 0) { if (!(Math.abs(v) > r.threshold || i.allowThresholdMove)) return void (i.currentTranslate = i.startTranslate); if (!i.allowThresholdMove) return i.allowThresholdMove = !0, n.startX = n.currentX, n.startY = n.currentY, i.currentTranslate = i.startTranslate, void (n.diff = s.isHorizontal() ? n.currentX - n.startX : n.currentY - n.startY) } r.followFinger && !r.cssMode && ((r.freeMode && r.freeMode.enabled && s.freeMode || r.watchSlidesProgress) && (s.updateActiveIndex(), s.updateSlidesClasses()), s.params.freeMode && r.freeMode.enabled && s.freeMode && s.freeMode.onTouchMove(), s.updateProgress(i.currentTranslate), s.setTranslate(i.currentTranslate)) } function I(e) { const t = this, s = t.touchEventsData, { params: a, touches: i, rtlTranslate: r, slidesGrid: n, enabled: l } = t; if (!l) return; let o = e; if (o.originalEvent && (o = o.originalEvent), s.allowTouchCallbacks && t.emit("touchEnd", o), s.allowTouchCallbacks = !1, !s.isTouched) return s.isMoved && a.grabCursor && t.setGrabCursor(!1), s.isMoved = !1, void (s.startMoving = !1); a.grabCursor && s.isMoved && s.isTouched && (!0 === t.allowSlideNext || !0 === t.allowSlidePrev) && t.setGrabCursor(!1); const d = u(), c = d - s.touchStartTime; if (t.allowClick) { const e = o.path || o.composedPath && o.composedPath(); t.updateClickedSlide(e && e[0] || o.target), t.emit("tap click", o), c < 300 && d - s.lastClickTime < 300 && t.emit("doubleTap doubleClick", o) } if (s.lastClickTime = u(), p((() => { t.destroyed || (t.allowClick = !0) })), !s.isTouched || !s.isMoved || !t.swipeDirection || 0 === i.diff || s.currentTranslate === s.startTranslate) return s.isTouched = !1, s.isMoved = !1, void (s.startMoving = !1); let h; if (s.isTouched = !1, s.isMoved = !1, s.startMoving = !1, h = a.followFinger ? r ? t.translate : -t.translate : -s.currentTranslate, a.cssMode) return; if (t.params.freeMode && a.freeMode.enabled) return void t.freeMode.onTouchEnd({ currentPos: h }); let m = 0, f = t.slidesSizesGrid[0]; for (let e = 0; e < n.length; e += e < a.slidesPerGroupSkip ? 1 : a.slidesPerGroup) { const t = e < a.slidesPerGroupSkip - 1 ? 1 : a.slidesPerGroup; void 0 !== n[e + t] ? h >= n[e] && h < n[e + t] && (m = e, f = n[e + t] - n[e]) : h >= n[e] && (m = e, f = n[n.length - 1] - n[n.length - 2]) } let g = null, v = null; a.rewind && (t.isBeginning ? v = t.params.virtual && t.params.virtual.enabled && t.virtual ? t.virtual.slides.length - 1 : t.slides.length - 1 : t.isEnd && (g = 0)); const w = (h - n[m]) / f, b = m < a.slidesPerGroupSkip - 1 ? 1 : a.slidesPerGroup; if (c > a.longSwipesMs) { if (!a.longSwipes) return void t.slideTo(t.activeIndex); "next" === t.swipeDirection && (w >= a.longSwipesRatio ? t.slideTo(a.rewind && t.isEnd ? g : m + b) : t.slideTo(m)), "prev" === t.swipeDirection && (w > 1 - a.longSwipesRatio ? t.slideTo(m + b) : null !== v && w < 0 && Math.abs(w) > a.longSwipesRatio ? t.slideTo(v) : t.slideTo(m)) } else { if (!a.shortSwipes) return void t.slideTo(t.activeIndex); t.navigation && (o.target === t.navigation.nextEl || o.target === t.navigation.prevEl) ? o.target === t.navigation.nextEl ? t.slideTo(m + b) : t.slideTo(m) : ("next" === t.swipeDirection && t.slideTo(null !== g ? g : m + b), "prev" === t.swipeDirection && t.slideTo(null !== v ? v : m)) } } function A() { const e = this, { params: t, el: s } = e; if (s && 0 === s.offsetWidth) return; t.breakpoints && e.setBreakpoint(); const { allowSlideNext: a, allowSlidePrev: i, snapGrid: r } = e; e.allowSlideNext = !0, e.allowSlidePrev = !0, e.updateSize(), e.updateSlides(), e.updateSlidesClasses(), ("auto" === t.slidesPerView || t.slidesPerView > 1) && e.isEnd && !e.isBeginning && !e.params.centeredSlides ? e.slideTo(e.slides.length - 1, 0, !1, !0) : e.slideTo(e.activeIndex, 0, !1, !0), e.autoplay && e.autoplay.running && e.autoplay.paused && e.autoplay.run(), e.allowSlidePrev = i, e.allowSlideNext = a, e.params.watchOverflow && r !== e.snapGrid && e.checkOverflow() } function D(e) { const t = this; t.enabled && (t.allowClick || (t.params.preventClicks && e.preventDefault(), t.params.preventClicksPropagation && t.animating && (e.stopPropagation(), e.stopImmediatePropagation()))) } function G() { const e = this, { wrapperEl: t, rtlTranslate: s, enabled: a } = e; if (!a) return; let i; e.previousTranslate = e.translate, e.isHorizontal() ? e.translate = -t.scrollLeft : e.translate = -t.scrollTop, 0 === e.translate && (e.translate = 0), e.updateActiveIndex(), e.updateSlidesClasses(); const r = e.maxTranslate() - e.minTranslate(); i = 0 === r ? 0 : (e.translate - e.minTranslate()) / r, i !== e.progress && e.updateProgress(s ? -e.translate : e.translate), e.emit("setTranslate", e.translate, !1) } let N = !1; function B() { } const H = (e, t) => { const s = a(), { params: i, touchEvents: r, el: n, wrapperEl: l, device: o, support: d } = e, c = !!i.nested, p = "on" === t ? "addEventListener" : "removeEventListener", u = t; if (d.touch) { const t = !("touchstart" !== r.start || !d.passiveListener || !i.passiveListeners) && { passive: !0, capture: !1 }; n[p](r.start, e.onTouchStart, t), n[p](r.move, e.onTouchMove, d.passiveListener ? { passive: !1, capture: c } : c), n[p](r.end, e.onTouchEnd, t), r.cancel && n[p](r.cancel, e.onTouchEnd, t) } else n[p](r.start, e.onTouchStart, !1), s[p](r.move, e.onTouchMove, c), s[p](r.end, e.onTouchEnd, !1); (i.preventClicks || i.preventClicksPropagation) && n[p]("click", e.onClick, !0), i.cssMode && l[p]("scroll", e.onScroll), i.updateOnWindowResize ? e[u](o.ios || o.android ? "resize orientationchange observerUpdate" : "resize observerUpdate", A, !0) : e[u]("observerUpdate", A, !0) }; var X = { attachEvents: function () { const e = this, t = a(), { params: s, support: i } = e; e.onTouchStart = L.bind(e), e.onTouchMove = O.bind(e), e.onTouchEnd = I.bind(e), s.cssMode && (e.onScroll = G.bind(e)), e.onClick = D.bind(e), i.touch && !N && (t.addEventListener("touchstart", B), N = !0), H(e, "on") }, detachEvents: function () { H(this, "off") } }; const Y = (e, t) => e.grid && t.grid && t.grid.rows > 1; var R = { addClasses: function () { const e = this, { classNames: t, params: s, rtl: a, $el: i, device: r, support: n } = e, l = function (e, t) { const s = []; return e.forEach((e => { "object" == typeof e ? Object.keys(e).forEach((a => { e[a] && s.push(t + a) })) : "string" == typeof e && s.push(t + e) })), s }(["initialized", s.direction, { "pointer-events": !n.touch }, { "free-mode": e.params.freeMode && s.freeMode.enabled }, { autoheight: s.autoHeight }, { rtl: a }, { grid: s.grid && s.grid.rows > 1 }, { "grid-column": s.grid && s.grid.rows > 1 && "column" === s.grid.fill }, { android: r.android }, { ios: r.ios }, { "css-mode": s.cssMode }, { centered: s.cssMode && s.centeredSlides }, { "watch-progress": s.watchSlidesProgress }], s.containerModifierClass); t.push(...l), i.addClass([...t].join(" ")), e.emitContainerClasses() }, removeClasses: function () { const { $el: e, classNames: t } = this; e.removeClass(t.join(" ")), this.emitContainerClasses() } }; var W = { init: !0, direction: "horizontal", touchEventsTarget: "wrapper", initialSlide: 0, speed: 300, cssMode: !1, updateOnWindowResize: !0, resizeObserver: !0, nested: !1, createElements: !1, enabled: !0, focusableElements: "input, select, option, textarea, button, video, label", width: null, height: null, preventInteractionOnTransition: !1, userAgent: null, url: null, edgeSwipeDetection: !1, edgeSwipeThreshold: 20, autoHeight: !1, setWrapperSize: !1, virtualTranslate: !1, effect: "slide", breakpoints: void 0, breakpointsBase: "window", spaceBetween: 0, slidesPerView: 1, slidesPerGroup: 1, slidesPerGroupSkip: 0, slidesPerGroupAuto: !1, centeredSlides: !1, centeredSlidesBounds: !1, slidesOffsetBefore: 0, slidesOffsetAfter: 0, normalizeSlideIndex: !0, centerInsufficientSlides: !1, watchOverflow: !0, roundLengths: !1, touchRatio: 1, touchAngle: 45, simulateTouch: !0, shortSwipes: !0, longSwipes: !0, longSwipesRatio: .5, longSwipesMs: 300, followFinger: !0, allowTouchMove: !0, threshold: 0, touchMoveStopPropagation: !1, touchStartPreventDefault: !0, touchStartForcePreventDefault: !1, touchReleaseOnEdges: !1, uniqueNavElements: !0, resistance: !0, resistanceRatio: .85, watchSlidesProgress: !1, grabCursor: !1, preventClicks: !0, preventClicksPropagation: !0, slideToClickedSlide: !1, preloadImages: !0, updateOnImagesReady: !0, loop: !1, loopAdditionalSlides: 0, loopedSlides: null, loopedSlidesLimit: !0, loopFillGroupWithBlank: !1, loopPreventsSlide: !0, rewind: !1, allowSlidePrev: !0, allowSlideNext: !0, swipeHandler: null, noSwiping: !0, noSwipingClass: "swiper-no-swiping", noSwipingSelector: null, passiveListeners: !0, maxBackfaceHiddenSlides: 10, containerModifierClass: "swiper-", slideClass: "swiper-slide", slideBlankClass: "swiper-slide-invisible-blank", slideActiveClass: "swiper-slide-active", slideDuplicateActiveClass: "swiper-slide-duplicate-active", slideVisibleClass: "swiper-slide-visible", slideDuplicateClass: "swiper-slide-duplicate", slideNextClass: "swiper-slide-next", slideDuplicateNextClass: "swiper-slide-duplicate-next", slidePrevClass: "swiper-slide-prev", slideDuplicatePrevClass: "swiper-slide-duplicate-prev", wrapperClass: "swiper-wrapper", runCallbacksOnInit: !0, _emitClasses: !1 }; function q(e, t) { return function (s) { void 0 === s && (s = {}); const a = Object.keys(s)[0], i = s[a]; "object" == typeof i && null !== i ? (["navigation", "pagination", "scrollbar"].indexOf(a) >= 0 && !0 === e[a] && (e[a] = { auto: !0 }), a in e && "enabled" in i ? (!0 === e[a] && (e[a] = { enabled: !0 }), "object" != typeof e[a] || "enabled" in e[a] || (e[a].enabled = !0), e[a] || (e[a] = { enabled: !1 }), g(t, s)) : g(t, s)) : g(t, s) } } const j = { eventsEmitter: $, update: S, translate: M, transition: { setTransition: function (e, t) { const s = this; s.params.cssMode || s.$wrapperEl.transition(e), s.emit("setTransition", e, t) }, transitionStart: function (e, t) { void 0 === e && (e = !0); const s = this, { params: a } = s; a.cssMode || (a.autoHeight && s.updateAutoHeight(), P({ swiper: s, runCallbacks: e, direction: t, step: "Start" })) }, transitionEnd: function (e, t) { void 0 === e && (e = !0); const s = this, { params: a } = s; s.animating = !1, a.cssMode || (s.setTransition(0), P({ swiper: s, runCallbacks: e, direction: t, step: "End" })) } }, slide: k, loop: z, grabCursor: { setGrabCursor: function (e) { const t = this; if (t.support.touch || !t.params.simulateTouch || t.params.watchOverflow && t.isLocked || t.params.cssMode) return; const s = "container" === t.params.touchEventsTarget ? t.el : t.wrapperEl; s.style.cursor = "move", s.style.cursor = e ? "grabbing" : "grab" }, unsetGrabCursor: function () { const e = this; e.support.touch || e.params.watchOverflow && e.isLocked || e.params.cssMode || (e["container" === e.params.touchEventsTarget ? "el" : "wrapperEl"].style.cursor = "") } }, events: X, breakpoints: { setBreakpoint: function () { const e = this, { activeIndex: t, initialized: s, loopedSlides: a = 0, params: i, $el: r } = e, n = i.breakpoints; if (!n || n && 0 === Object.keys(n).length) return; const l = e.getBreakpoint(n, e.params.breakpointsBase, e.el); if (!l || e.currentBreakpoint === l) return; const o = (l in n ? n[l] : void 0) || e.originalParams, d = Y(e, i), c = Y(e, o), p = i.enabled; d && !c ? (r.removeClass(`${i.containerModifierClass}grid ${i.containerModifierClass}grid-column`), e.emitContainerClasses()) : !d && c && (r.addClass(`${i.containerModifierClass}grid`), (o.grid.fill && "column" === o.grid.fill || !o.grid.fill && "column" === i.grid.fill) && r.addClass(`${i.containerModifierClass}grid-column`), e.emitContainerClasses()), ["navigation", "pagination", "scrollbar"].forEach((t => { const s = i[t] && i[t].enabled, a = o[t] && o[t].enabled; s && !a && e[t].disable(), !s && a && e[t].enable() })); const u = o.direction && o.direction !== i.direction, h = i.loop && (o.slidesPerView !== i.slidesPerView || u); u && s && e.changeDirection(), g(e.params, o); const m = e.params.enabled; Object.assign(e, { allowTouchMove: e.params.allowTouchMove, allowSlideNext: e.params.allowSlideNext, allowSlidePrev: e.params.allowSlidePrev }), p && !m ? e.disable() : !p && m && e.enable(), e.currentBreakpoint = l, e.emit("_beforeBreakpoint", o), h && s && (e.loopDestroy(), e.loopCreate(), e.updateSlides(), e.slideTo(t - a + e.loopedSlides, 0, !1)), e.emit("breakpoint", o) }, getBreakpoint: function (e, t, s) { if (void 0 === t && (t = "window"), !e || "container" === t && !s) return; let a = !1; const i = r(), n = "window" === t ? i.innerHeight : s.clientHeight, l = Object.keys(e).map((e => { if ("string" == typeof e && 0 === e.indexOf("@")) { const t = parseFloat(e.substr(1)); return { value: n * t, point: e } } return { value: e, point: e } })); l.sort(((e, t) => parseInt(e.value, 10) - parseInt(t.value, 10))); for (let e = 0; e < l.length; e += 1) { const { point: r, value: n } = l[e]; "window" === t ? i.matchMedia(`(min-width: ${n}px)`).matches && (a = r) : n <= s.clientWidth && (a = r) } return a || "max" } }, checkOverflow: { checkOverflow: function () { const e = this, { isLocked: t, params: s } = e, { slidesOffsetBefore: a } = s; if (a) { const t = e.slides.length - 1, s = e.slidesGrid[t] + e.slidesSizesGrid[t] + 2 * a; e.isLocked = e.size > s } else e.isLocked = 1 === e.snapGrid.length; !0 === s.allowSlideNext && (e.allowSlideNext = !e.isLocked), !0 === s.allowSlidePrev && (e.allowSlidePrev = !e.isLocked), t && t !== e.isLocked && (e.isEnd = !1), t !== e.isLocked && e.emit(e.isLocked ? "lock" : "unlock") } }, classes: R, images: { loadImage: function (e, t, s, a, i, n) { const l = r(); let o; function c() { n && n() } d(e).parent("picture")[0] || e.complete && i ? c() : t ? (o = new l.Image, o.onload = c, o.onerror = c, a && (o.sizes = a), s && (o.srcset = s), t && (o.src = t)) : c() }, preloadImages: function () { const e = this; function t() { null != e && e && !e.destroyed && (void 0 !== e.imagesLoaded && (e.imagesLoaded += 1), e.imagesLoaded === e.imagesToLoad.length && (e.params.updateOnImagesReady && e.update(), e.emit("imagesReady"))) } e.imagesToLoad = e.$el.find("img"); for (let s = 0; s < e.imagesToLoad.length; s += 1) { const a = e.imagesToLoad[s]; e.loadImage(a, a.currentSrc || a.getAttribute("src"), a.srcset || a.getAttribute("srcset"), a.sizes || a.getAttribute("sizes"), !0, t) } } } }, _ = {}; class V { constructor() { let e, t; for (var s = arguments.length, a = new Array(s), i = 0; i < s; i++)a[i] = arguments[i]; if (1 === a.length && a[0].constructor && "Object" === Object.prototype.toString.call(a[0]).slice(8, -1) ? t = a[0] : [e, t] = a, t || (t = {}), t = g({}, t), e && !t.el && (t.el = e), t.el && d(t.el).length > 1) { const e = []; return d(t.el).each((s => { const a = g({}, t, { el: s }); e.push(new V(a)) })), e } const r = this; r.__swiper__ = !0, r.support = E(), r.device = C({ userAgent: t.userAgent }), r.browser = T(), r.eventsListeners = {}, r.eventsAnyListeners = [], r.modules = [...r.__modules__], t.modules && Array.isArray(t.modules) && r.modules.push(...t.modules); const n = {}; r.modules.forEach((e => { e({ swiper: r, extendParams: q(t, n), on: r.on.bind(r), once: r.once.bind(r), off: r.off.bind(r), emit: r.emit.bind(r) }) })); const l = g({}, W, n); return r.params = g({}, l, _, t), r.originalParams = g({}, r.params), r.passedParams = g({}, t), r.params && r.params.on && Object.keys(r.params.on).forEach((e => { r.on(e, r.params.on[e]) })), r.params && r.params.onAny && r.onAny(r.params.onAny), r.$ = d, Object.assign(r, { enabled: r.params.enabled, el: e, classNames: [], slides: d(), slidesGrid: [], snapGrid: [], slidesSizesGrid: [], isHorizontal: () => "horizontal" === r.params.direction, isVertical: () => "vertical" === r.params.direction, activeIndex: 0, realIndex: 0, isBeginning: !0, isEnd: !1, translate: 0, previousTranslate: 0, progress: 0, velocity: 0, animating: !1, allowSlideNext: r.params.allowSlideNext, allowSlidePrev: r.params.allowSlidePrev, touchEvents: function () { const e = ["touchstart", "touchmove", "touchend", "touchcancel"], t = ["pointerdown", "pointermove", "pointerup"]; return r.touchEventsTouch = { start: e[0], move: e[1], end: e[2], cancel: e[3] }, r.touchEventsDesktop = { start: t[0], move: t[1], end: t[2] }, r.support.touch || !r.params.simulateTouch ? r.touchEventsTouch : r.touchEventsDesktop }(), touchEventsData: { isTouched: void 0, isMoved: void 0, allowTouchCallbacks: void 0, touchStartTime: void 0, isScrolling: void 0, currentTranslate: void 0, startTranslate: void 0, allowThresholdMove: void 0, focusableElements: r.params.focusableElements, lastClickTime: u(), clickTimeout: void 0, velocities: [], allowMomentumBounce: void 0, isTouchEvent: void 0, startMoving: void 0 }, allowClick: !0, allowTouchMove: r.params.allowTouchMove, touches: { startX: 0, startY: 0, currentX: 0, currentY: 0, diff: 0 }, imagesToLoad: [], imagesLoaded: 0 }), r.emit("_swiper"), r.params.init && r.init(), r } enable() { const e = this; e.enabled || (e.enabled = !0, e.params.grabCursor && e.setGrabCursor(), e.emit("enable")) } disable() { const e = this; e.enabled && (e.enabled = !1, e.params.grabCursor && e.unsetGrabCursor(), e.emit("disable")) } setProgress(e, t) { const s = this; e = Math.min(Math.max(e, 0), 1); const a = s.minTranslate(), i = (s.maxTranslate() - a) * e + a; s.translateTo(i, void 0 === t ? 0 : t), s.updateActiveIndex(), s.updateSlidesClasses() } emitContainerClasses() { const e = this; if (!e.params._emitClasses || !e.el) return; const t = e.el.className.split(" ").filter((t => 0 === t.indexOf("swiper") || 0 === t.indexOf(e.params.containerModifierClass))); e.emit("_containerClasses", t.join(" ")) } getSlideClasses(e) { const t = this; return t.destroyed ? "" : e.className.split(" ").filter((e => 0 === e.indexOf("swiper-slide") || 0 === e.indexOf(t.params.slideClass))).join(" ") } emitSlidesClasses() { const e = this; if (!e.params._emitClasses || !e.el) return; const t = []; e.slides.each((s => { const a = e.getSlideClasses(s); t.push({ slideEl: s, classNames: a }), e.emit("_slideClass", s, a) })), e.emit("_slideClasses", t) } slidesPerViewDynamic(e, t) { void 0 === e && (e = "current"), void 0 === t && (t = !1); const { params: s, slides: a, slidesGrid: i, slidesSizesGrid: r, size: n, activeIndex: l } = this; let o = 1; if (s.centeredSlides) { let e, t = a[l].swiperSlideSize; for (let s = l + 1; s < a.length; s += 1)a[s] && !e && (t += a[s].swiperSlideSize, o += 1, t > n && (e = !0)); for (let s = l - 1; s >= 0; s -= 1)a[s] && !e && (t += a[s].swiperSlideSize, o += 1, t > n && (e = !0)) } else if ("current" === e) for (let e = l + 1; e < a.length; e += 1) { (t ? i[e] + r[e] - i[l] < n : i[e] - i[l] < n) && (o += 1) } else for (let e = l - 1; e >= 0; e -= 1) { i[l] - i[e] < n && (o += 1) } return o } update() { const e = this; if (!e || e.destroyed) return; const { snapGrid: t, params: s } = e; function a() { const t = e.rtlTranslate ? -1 * e.translate : e.translate, s = Math.min(Math.max(t, e.maxTranslate()), e.minTranslate()); e.setTranslate(s), e.updateActiveIndex(), e.updateSlidesClasses() } let i; s.breakpoints && e.setBreakpoint(), e.updateSize(), e.updateSlides(), e.updateProgress(), e.updateSlidesClasses(), e.params.freeMode && e.params.freeMode.enabled ? (a(), e.params.autoHeight && e.updateAutoHeight()) : (i = ("auto" === e.params.slidesPerView || e.params.slidesPerView > 1) && e.isEnd && !e.params.centeredSlides ? e.slideTo(e.slides.length - 1, 0, !1, !0) : e.slideTo(e.activeIndex, 0, !1, !0), i || a()), s.watchOverflow && t !== e.snapGrid && e.checkOverflow(), e.emit("update") } changeDirection(e, t) { void 0 === t && (t = !0); const s = this, a = s.params.direction; return e || (e = "horizontal" === a ? "vertical" : "horizontal"), e === a || "horizontal" !== e && "vertical" !== e || (s.$el.removeClass(`${s.params.containerModifierClass}${a}`).addClass(`${s.params.containerModifierClass}${e}`), s.emitContainerClasses(), s.params.direction = e, s.slides.each((t => { "vertical" === e ? t.style.width = "" : t.style.height = "" })), s.emit("changeDirection"), t && s.update()), s } changeLanguageDirection(e) { const t = this; t.rtl && "rtl" === e || !t.rtl && "ltr" === e || (t.rtl = "rtl" === e, t.rtlTranslate = "horizontal" === t.params.direction && t.rtl, t.rtl ? (t.$el.addClass(`${t.params.containerModifierClass}rtl`), t.el.dir = "rtl") : (t.$el.removeClass(`${t.params.containerModifierClass}rtl`), t.el.dir = "ltr"), t.update()) } mount(e) { const t = this; if (t.mounted) return !0; const s = d(e || t.params.el); if (!(e = s[0])) return !1; e.swiper = t; const i = () => `.${(t.params.wrapperClass || "").trim().split(" ").join(".")}`; let r = (() => { if (e && e.shadowRoot && e.shadowRoot.querySelector) { const t = d(e.shadowRoot.querySelector(i())); return t.children = e => s.children(e), t } return s.children ? s.children(i()) : d(s).children(i()) })(); if (0 === r.length && t.params.createElements) { const e = a().createElement("div"); r = d(e), e.className = t.params.wrapperClass, s.append(e), s.children(`.${t.params.slideClass}`).each((e => { r.append(e) })) } return Object.assign(t, { $el: s, el: e, $wrapperEl: r, wrapperEl: r[0], mounted: !0, rtl: "rtl" === e.dir.toLowerCase() || "rtl" === s.css("direction"), rtlTranslate: "horizontal" === t.params.direction && ("rtl" === e.dir.toLowerCase() || "rtl" === s.css("direction")), wrongRTL: "-webkit-box" === r.css("display") }), !0 } init(e) { const t = this; if (t.initialized) return t; return !1 === t.mount(e) || (t.emit("beforeInit"), t.params.breakpoints && t.setBreakpoint(), t.addClasses(), t.params.loop && t.loopCreate(), t.updateSize(), t.updateSlides(), t.params.watchOverflow && t.checkOverflow(), t.params.grabCursor && t.enabled && t.setGrabCursor(), t.params.preloadImages && t.preloadImages(), t.params.loop ? t.slideTo(t.params.initialSlide + t.loopedSlides, 0, t.params.runCallbacksOnInit, !1, !0) : t.slideTo(t.params.initialSlide, 0, t.params.runCallbacksOnInit, !1, !0), t.attachEvents(), t.initialized = !0, t.emit("init"), t.emit("afterInit")), t } destroy(e, t) { void 0 === e && (e = !0), void 0 === t && (t = !0); const s = this, { params: a, $el: i, $wrapperEl: r, slides: n } = s; return void 0 === s.params || s.destroyed || (s.emit("beforeDestroy"), s.initialized = !1, s.detachEvents(), a.loop && s.loopDestroy(), t && (s.removeClasses(), i.removeAttr("style"), r.removeAttr("style"), n && n.length && n.removeClass([a.slideVisibleClass, a.slideActiveClass, a.slideNextClass, a.slidePrevClass].join(" ")).removeAttr("style").removeAttr("data-swiper-slide-index")), s.emit("destroy"), Object.keys(s.eventsListeners).forEach((e => { s.off(e) })), !1 !== e && (s.$el[0].swiper = null, function (e) { const t = e; Object.keys(t).forEach((e => { try { t[e] = null } catch (e) { } try { delete t[e] } catch (e) { } })) }(s)), s.destroyed = !0), null } static extendDefaults(e) { g(_, e) } static get extendedDefaults() { return _ } static get defaults() { return W } static installModule(e) { V.prototype.__modules__ || (V.prototype.__modules__ = []); const t = V.prototype.__modules__; "function" == typeof e && t.indexOf(e) < 0 && t.push(e) } static use(e) { return Array.isArray(e) ? (e.forEach((e => V.installModule(e))), V) : (V.installModule(e), V) } } function F(e, t, s, i) { const r = a(); return e.params.createElements && Object.keys(i).forEach((a => { if (!s[a] && !0 === s.auto) { let n = e.$el.children(`.${i[a]}`)[0]; n || (n = r.createElement("div"), n.className = i[a], e.$el.append(n)), s[a] = n, t[a] = n } })), s } function U(e) { return void 0 === e && (e = ""), `.${e.trim().replace(/([\.:!\/])/g, "\\$1").replace(/ /g, ".")}` } function K(e) { const t = this, { $wrapperEl: s, params: a } = t; if (a.loop && t.loopDestroy(), "object" == typeof e && "length" in e) for (let t = 0; t < e.length; t += 1)e[t] && s.append(e[t]); else s.append(e); a.loop && t.loopCreate(), a.observer || t.update() } function Z(e) { const t = this, { params: s, $wrapperEl: a, activeIndex: i } = t; s.loop && t.loopDestroy(); let r = i + 1; if ("object" == typeof e && "length" in e) { for (let t = 0; t < e.length; t += 1)e[t] && a.prepend(e[t]); r = i + e.length } else a.prepend(e); s.loop && t.loopCreate(), s.observer || t.update(), t.slideTo(r, 0, !1) } function Q(e, t) { const s = this, { $wrapperEl: a, params: i, activeIndex: r } = s; let n = r; i.loop && (n -= s.loopedSlides, s.loopDestroy(), s.slides = a.children(`.${i.slideClass}`)); const l = s.slides.length; if (e <= 0) return void s.prependSlide(t); if (e >= l) return void s.appendSlide(t); let o = n > e ? n + 1 : n; const d = []; for (let t = l - 1; t >= e; t -= 1) { const e = s.slides.eq(t); e.remove(), d.unshift(e) } if ("object" == typeof t && "length" in t) { for (let e = 0; e < t.length; e += 1)t[e] && a.append(t[e]); o = n > e ? n + t.length : n } else a.append(t); for (let e = 0; e < d.length; e += 1)a.append(d[e]); i.loop && s.loopCreate(), i.observer || s.update(), i.loop ? s.slideTo(o + s.loopedSlides, 0, !1) : s.slideTo(o, 0, !1) } function J(e) { const t = this, { params: s, $wrapperEl: a, activeIndex: i } = t; let r = i; s.loop && (r -= t.loopedSlides, t.loopDestroy(), t.slides = a.children(`.${s.slideClass}`)); let n, l = r; if ("object" == typeof e && "length" in e) { for (let s = 0; s < e.length; s += 1)n = e[s], t.slides[n] && t.slides.eq(n).remove(), n < l && (l -= 1); l = Math.max(l, 0) } else n = e, t.slides[n] && t.slides.eq(n).remove(), n < l && (l -= 1), l = Math.max(l, 0); s.loop && t.loopCreate(), s.observer || t.update(), s.loop ? t.slideTo(l + t.loopedSlides, 0, !1) : t.slideTo(l, 0, !1) } function ee() { const e = this, t = []; for (let s = 0; s < e.slides.length; s += 1)t.push(s); e.removeSlide(t) } function te(e) { const { effect: t, swiper: s, on: a, setTranslate: i, setTransition: r, overwriteParams: n, perspective: l, recreateShadows: o, getEffectParams: d } = e; let c; a("beforeInit", (() => { if (s.params.effect !== t) return; s.classNames.push(`${s.params.containerModifierClass}${t}`), l && l() && s.classNames.push(`${s.params.containerModifierClass}3d`); const e = n ? n() : {}; Object.assign(s.params, e), Object.assign(s.originalParams, e) })), a("setTranslate", (() => { s.params.effect === t && i() })), a("setTransition", ((e, a) => { s.params.effect === t && r(a) })), a("transitionEnd", (() => { if (s.params.effect === t && o) { if (!d || !d().slideShadows) return; s.slides.each((e => { s.$(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").remove() })), o() } })), a("virtualUpdate", (() => { s.params.effect === t && (s.slides.length || (c = !0), requestAnimationFrame((() => { c && s.slides && s.slides.length && (i(), c = !1) }))) })) } function se(e, t) { return e.transformEl ? t.find(e.transformEl).css({ "backface-visibility": "hidden", "-webkit-backface-visibility": "hidden" }) : t } function ae(e) { let { swiper: t, duration: s, transformEl: a, allSlides: i } = e; const { slides: r, activeIndex: n, $wrapperEl: l } = t; if (t.params.virtualTranslate && 0 !== s) { let e, s = !1; e = i ? a ? r.find(a) : r : a ? r.eq(n).find(a) : r.eq(n), e.transitionEnd((() => { if (s) return; if (!t || t.destroyed) return; s = !0, t.animating = !1; const e = ["webkitTransitionEnd", "transitionend"]; for (let t = 0; t < e.length; t += 1)l.trigger(e[t]) })) } } function ie(e, t, s) { const a = "swiper-slide-shadow" + (s ? `-${s}` : ""), i = e.transformEl ? t.find(e.transformEl) : t; let r = i.children(`.${a}`); return r.length || (r = d(`<div class="swiper-slide-shadow${s ? `-${s}` : ""}"></div>`), i.append(r)), r } Object.keys(j).forEach((e => { Object.keys(j[e]).forEach((t => { V.prototype[t] = j[e][t] })) })), V.use([function (e) { let { swiper: t, on: s, emit: a } = e; const i = r(); let n = null, l = null; const o = () => { t && !t.destroyed && t.initialized && (a("beforeResize"), a("resize")) }, d = () => { t && !t.destroyed && t.initialized && a("orientationchange") }; s("init", (() => { t.params.resizeObserver && void 0 !== i.ResizeObserver ? t && !t.destroyed && t.initialized && (n = new ResizeObserver((e => { l = i.requestAnimationFrame((() => { const { width: s, height: a } = t; let i = s, r = a; e.forEach((e => { let { contentBoxSize: s, contentRect: a, target: n } = e; n && n !== t.el || (i = a ? a.width : (s[0] || s).inlineSize, r = a ? a.height : (s[0] || s).blockSize) })), i === s && r === a || o() })) })), n.observe(t.el)) : (i.addEventListener("resize", o), i.addEventListener("orientationchange", d)) })), s("destroy", (() => { l && i.cancelAnimationFrame(l), n && n.unobserve && t.el && (n.unobserve(t.el), n = null), i.removeEventListener("resize", o), i.removeEventListener("orientationchange", d) })) }, function (e) { let { swiper: t, extendParams: s, on: a, emit: i } = e; const n = [], l = r(), o = function (e, t) { void 0 === t && (t = {}); const s = new (l.MutationObserver || l.WebkitMutationObserver)((e => { if (1 === e.length) return void i("observerUpdate", e[0]); const t = function () { i("observerUpdate", e[0]) }; l.requestAnimationFrame ? l.requestAnimationFrame(t) : l.setTimeout(t, 0) })); s.observe(e, { attributes: void 0 === t.attributes || t.attributes, childList: void 0 === t.childList || t.childList, characterData: void 0 === t.characterData || t.characterData }), n.push(s) }; s({ observer: !1, observeParents: !1, observeSlideChildren: !1 }), a("init", (() => { if (t.params.observer) { if (t.params.observeParents) { const e = t.$el.parents(); for (let t = 0; t < e.length; t += 1)o(e[t]) } o(t.$el[0], { childList: t.params.observeSlideChildren }), o(t.$wrapperEl[0], { attributes: !1 }) } })), a("destroy", (() => { n.forEach((e => { e.disconnect() })), n.splice(0, n.length) })) }]); const re = [function (e) { let t, { swiper: s, extendParams: a, on: i, emit: r } = e; function n(e, t) { const a = s.params.virtual; if (a.cache && s.virtual.cache[t]) return s.virtual.cache[t]; const i = a.renderSlide ? d(a.renderSlide.call(s, e, t)) : d(`<div class="${s.params.slideClass}" data-swiper-slide-index="${t}">${e}</div>`); return i.attr("data-swiper-slide-index") || i.attr("data-swiper-slide-index", t), a.cache && (s.virtual.cache[t] = i), i } function l(e) { const { slidesPerView: t, slidesPerGroup: a, centeredSlides: i } = s.params, { addSlidesBefore: l, addSlidesAfter: o } = s.params.virtual, { from: d, to: c, slides: p, slidesGrid: u, offset: h } = s.virtual; s.params.cssMode || s.updateActiveIndex(); const m = s.activeIndex || 0; let f, g, v; f = s.rtlTranslate ? "right" : s.isHorizontal() ? "left" : "top", i ? (g = Math.floor(t / 2) + a + o, v = Math.floor(t / 2) + a + l) : (g = t + (a - 1) + o, v = a + l); const w = Math.max((m || 0) - v, 0), b = Math.min((m || 0) + g, p.length - 1), x = (s.slidesGrid[w] || 0) - (s.slidesGrid[0] || 0); function y() { s.updateSlides(), s.updateProgress(), s.updateSlidesClasses(), s.lazy && s.params.lazy.enabled && s.lazy.load(), r("virtualUpdate") } if (Object.assign(s.virtual, { from: w, to: b, offset: x, slidesGrid: s.slidesGrid }), d === w && c === b && !e) return s.slidesGrid !== u && x !== h && s.slides.css(f, `${x}px`), s.updateProgress(), void r("virtualUpdate"); if (s.params.virtual.renderExternal) return s.params.virtual.renderExternal.call(s, { offset: x, from: w, to: b, slides: function () { const e = []; for (let t = w; t <= b; t += 1)e.push(p[t]); return e }() }), void (s.params.virtual.renderExternalUpdate ? y() : r("virtualUpdate")); const E = [], C = []; if (e) s.$wrapperEl.find(`.${s.params.slideClass}`).remove(); else for (let e = d; e <= c; e += 1)(e < w || e > b) && s.$wrapperEl.find(`.${s.params.slideClass}[data-swiper-slide-index="${e}"]`).remove(); for (let t = 0; t < p.length; t += 1)t >= w && t <= b && (void 0 === c || e ? C.push(t) : (t > c && C.push(t), t < d && E.push(t))); C.forEach((e => { s.$wrapperEl.append(n(p[e], e)) })), E.sort(((e, t) => t - e)).forEach((e => { s.$wrapperEl.prepend(n(p[e], e)) })), s.$wrapperEl.children(".swiper-slide").css(f, `${x}px`), y() } a({ virtual: { enabled: !1, slides: [], cache: !0, renderSlide: null, renderExternal: null, renderExternalUpdate: !0, addSlidesBefore: 0, addSlidesAfter: 0 } }), s.virtual = { cache: {}, from: void 0, to: void 0, slides: [], offset: 0, slidesGrid: [] }, i("beforeInit", (() => { s.params.virtual.enabled && (s.virtual.slides = s.params.virtual.slides, s.classNames.push(`${s.params.containerModifierClass}virtual`), s.params.watchSlidesProgress = !0, s.originalParams.watchSlidesProgress = !0, s.params.initialSlide || l()) })), i("setTranslate", (() => { s.params.virtual.enabled && (s.params.cssMode && !s._immediateVirtual ? (clearTimeout(t), t = setTimeout((() => { l() }), 100)) : l()) })), i("init update resize", (() => { s.params.virtual.enabled && s.params.cssMode && v(s.wrapperEl, "--swiper-virtual-size", `${s.virtualSize}px`) })), Object.assign(s.virtual, { appendSlide: function (e) { if ("object" == typeof e && "length" in e) for (let t = 0; t < e.length; t += 1)e[t] && s.virtual.slides.push(e[t]); else s.virtual.slides.push(e); l(!0) }, prependSlide: function (e) { const t = s.activeIndex; let a = t + 1, i = 1; if (Array.isArray(e)) { for (let t = 0; t < e.length; t += 1)e[t] && s.virtual.slides.unshift(e[t]); a = t + e.length, i = e.length } else s.virtual.slides.unshift(e); if (s.params.virtual.cache) { const e = s.virtual.cache, t = {}; Object.keys(e).forEach((s => { const a = e[s], r = a.attr("data-swiper-slide-index"); r && a.attr("data-swiper-slide-index", parseInt(r, 10) + i), t[parseInt(s, 10) + i] = a })), s.virtual.cache = t } l(!0), s.slideTo(a, 0) }, removeSlide: function (e) { if (null == e) return; let t = s.activeIndex; if (Array.isArray(e)) for (let a = e.length - 1; a >= 0; a -= 1)s.virtual.slides.splice(e[a], 1), s.params.virtual.cache && delete s.virtual.cache[e[a]], e[a] < t && (t -= 1), t = Math.max(t, 0); else s.virtual.slides.splice(e, 1), s.params.virtual.cache && delete s.virtual.cache[e], e < t && (t -= 1), t = Math.max(t, 0); l(!0), s.slideTo(t, 0) }, removeAllSlides: function () { s.virtual.slides = [], s.params.virtual.cache && (s.virtual.cache = {}), l(!0), s.slideTo(0, 0) }, update: l }) }, function (e) { let { swiper: t, extendParams: s, on: i, emit: n } = e; const l = a(), o = r(); function c(e) { if (!t.enabled) return; const { rtlTranslate: s } = t; let a = e; a.originalEvent && (a = a.originalEvent); const i = a.keyCode || a.charCode, r = t.params.keyboard.pageUpDown, d = r && 33 === i, c = r && 34 === i, p = 37 === i, u = 39 === i, h = 38 === i, m = 40 === i; if (!t.allowSlideNext && (t.isHorizontal() && u || t.isVertical() && m || c)) return !1; if (!t.allowSlidePrev && (t.isHorizontal() && p || t.isVertical() && h || d)) return !1; if (!(a.shiftKey || a.altKey || a.ctrlKey || a.metaKey || l.activeElement && l.activeElement.nodeName && ("input" === l.activeElement.nodeName.toLowerCase() || "textarea" === l.activeElement.nodeName.toLowerCase()))) { if (t.params.keyboard.onlyInViewport && (d || c || p || u || h || m)) { let e = !1; if (t.$el.parents(`.${t.params.slideClass}`).length > 0 && 0 === t.$el.parents(`.${t.params.slideActiveClass}`).length) return; const a = t.$el, i = a[0].clientWidth, r = a[0].clientHeight, n = o.innerWidth, l = o.innerHeight, d = t.$el.offset(); s && (d.left -= t.$el[0].scrollLeft); const c = [[d.left, d.top], [d.left + i, d.top], [d.left, d.top + r], [d.left + i, d.top + r]]; for (let t = 0; t < c.length; t += 1) { const s = c[t]; if (s[0] >= 0 && s[0] <= n && s[1] >= 0 && s[1] <= l) { if (0 === s[0] && 0 === s[1]) continue; e = !0 } } if (!e) return } t.isHorizontal() ? ((d || c || p || u) && (a.preventDefault ? a.preventDefault() : a.returnValue = !1), ((c || u) && !s || (d || p) && s) && t.slideNext(), ((d || p) && !s || (c || u) && s) && t.slidePrev()) : ((d || c || h || m) && (a.preventDefault ? a.preventDefault() : a.returnValue = !1), (c || m) && t.slideNext(), (d || h) && t.slidePrev()), n("keyPress", i) } } function p() { t.keyboard.enabled || (d(l).on("keydown", c), t.keyboard.enabled = !0) } function u() { t.keyboard.enabled && (d(l).off("keydown", c), t.keyboard.enabled = !1) } t.keyboard = { enabled: !1 }, s({ keyboard: { enabled: !1, onlyInViewport: !0, pageUpDown: !0 } }), i("init", (() => { t.params.keyboard.enabled && p() })), i("destroy", (() => { t.keyboard.enabled && u() })), Object.assign(t.keyboard, { enable: p, disable: u }) }, function (e) { let { swiper: t, extendParams: s, on: a, emit: i } = e; const n = r(); let l; s({ mousewheel: { enabled: !1, releaseOnEdges: !1, invert: !1, forceToAxis: !1, sensitivity: 1, eventsTarget: "container", thresholdDelta: null, thresholdTime: null } }), t.mousewheel = { enabled: !1 }; let o, c = u(); const h = []; function m() { t.enabled && (t.mouseEntered = !0) } function f() { t.enabled && (t.mouseEntered = !1) } function g(e) { return !(t.params.mousewheel.thresholdDelta && e.delta < t.params.mousewheel.thresholdDelta) && (!(t.params.mousewheel.thresholdTime && u() - c < t.params.mousewheel.thresholdTime) && (e.delta >= 6 && u() - c < 60 || (e.direction < 0 ? t.isEnd && !t.params.loop || t.animating || (t.slideNext(), i("scroll", e.raw)) : t.isBeginning && !t.params.loop || t.animating || (t.slidePrev(), i("scroll", e.raw)), c = (new n.Date).getTime(), !1))) } function v(e) { let s = e, a = !0; if (!t.enabled) return; const r = t.params.mousewheel; t.params.cssMode && s.preventDefault(); let n = t.$el; if ("container" !== t.params.mousewheel.eventsTarget && (n = d(t.params.mousewheel.eventsTarget)), !t.mouseEntered && !n[0].contains(s.target) && !r.releaseOnEdges) return !0; s.originalEvent && (s = s.originalEvent); let c = 0; const m = t.rtlTranslate ? -1 : 1, f = function (e) { let t = 0, s = 0, a = 0, i = 0; return "detail" in e && (s = e.detail), "wheelDelta" in e && (s = -e.wheelDelta / 120), "wheelDeltaY" in e && (s = -e.wheelDeltaY / 120), "wheelDeltaX" in e && (t = -e.wheelDeltaX / 120), "axis" in e && e.axis === e.HORIZONTAL_AXIS && (t = s, s = 0), a = 10 * t, i = 10 * s, "deltaY" in e && (i = e.deltaY), "deltaX" in e && (a = e.deltaX), e.shiftKey && !a && (a = i, i = 0), (a || i) && e.deltaMode && (1 === e.deltaMode ? (a *= 40, i *= 40) : (a *= 800, i *= 800)), a && !t && (t = a < 1 ? -1 : 1), i && !s && (s = i < 1 ? -1 : 1), { spinX: t, spinY: s, pixelX: a, pixelY: i } }(s); if (r.forceToAxis) if (t.isHorizontal()) { if (!(Math.abs(f.pixelX) > Math.abs(f.pixelY))) return !0; c = -f.pixelX * m } else { if (!(Math.abs(f.pixelY) > Math.abs(f.pixelX))) return !0; c = -f.pixelY } else c = Math.abs(f.pixelX) > Math.abs(f.pixelY) ? -f.pixelX * m : -f.pixelY; if (0 === c) return !0; r.invert && (c = -c); let v = t.getTranslate() + c * r.sensitivity; if (v >= t.minTranslate() && (v = t.minTranslate()), v <= t.maxTranslate() && (v = t.maxTranslate()), a = !!t.params.loop || !(v === t.minTranslate() || v === t.maxTranslate()), a && t.params.nested && s.stopPropagation(), t.params.freeMode && t.params.freeMode.enabled) { const e = { time: u(), delta: Math.abs(c), direction: Math.sign(c) }, a = o && e.time < o.time + 500 && e.delta <= o.delta && e.direction === o.direction; if (!a) { o = void 0, t.params.loop && t.loopFix(); let n = t.getTranslate() + c * r.sensitivity; const d = t.isBeginning, u = t.isEnd; if (n >= t.minTranslate() && (n = t.minTranslate()), n <= t.maxTranslate() && (n = t.maxTranslate()), t.setTransition(0), t.setTranslate(n), t.updateProgress(), t.updateActiveIndex(), t.updateSlidesClasses(), (!d && t.isBeginning || !u && t.isEnd) && t.updateSlidesClasses(), t.params.freeMode.sticky) { clearTimeout(l), l = void 0, h.length >= 15 && h.shift(); const s = h.length ? h[h.length - 1] : void 0, a = h[0]; if (h.push(e), s && (e.delta > s.delta || e.direction !== s.direction)) h.splice(0); else if (h.length >= 15 && e.time - a.time < 500 && a.delta - e.delta >= 1 && e.delta <= 6) { const s = c > 0 ? .8 : .2; o = e, h.splice(0), l = p((() => { t.slideToClosest(t.params.speed, !0, void 0, s) }), 0) } l || (l = p((() => { o = e, h.splice(0), t.slideToClosest(t.params.speed, !0, void 0, .5) }), 500)) } if (a || i("scroll", s), t.params.autoplay && t.params.autoplayDisableOnInteraction && t.autoplay.stop(), n === t.minTranslate() || n === t.maxTranslate()) return !0 } } else { const s = { time: u(), delta: Math.abs(c), direction: Math.sign(c), raw: e }; h.length >= 2 && h.shift(); const a = h.length ? h[h.length - 1] : void 0; if (h.push(s), a ? (s.direction !== a.direction || s.delta > a.delta || s.time > a.time + 150) && g(s) : g(s), function (e) { const s = t.params.mousewheel; if (e.direction < 0) { if (t.isEnd && !t.params.loop && s.releaseOnEdges) return !0 } else if (t.isBeginning && !t.params.loop && s.releaseOnEdges) return !0; return !1 }(s)) return !0 } return s.preventDefault ? s.preventDefault() : s.returnValue = !1, !1 } function w(e) { let s = t.$el; "container" !== t.params.mousewheel.eventsTarget && (s = d(t.params.mousewheel.eventsTarget)), s[e]("mouseenter", m), s[e]("mouseleave", f), s[e]("wheel", v) } function b() { return t.params.cssMode ? (t.wrapperEl.removeEventListener("wheel", v), !0) : !t.mousewheel.enabled && (w("on"), t.mousewheel.enabled = !0, !0) } function x() { return t.params.cssMode ? (t.wrapperEl.addEventListener(event, v), !0) : !!t.mousewheel.enabled && (w("off"), t.mousewheel.enabled = !1, !0) } a("init", (() => { !t.params.mousewheel.enabled && t.params.cssMode && x(), t.params.mousewheel.enabled && b() })), a("destroy", (() => { t.params.cssMode && b(), t.mousewheel.enabled && x() })), Object.assign(t.mousewheel, { enable: b, disable: x }) }, function (e) { let { swiper: t, extendParams: s, on: a, emit: i } = e; function r(e) { let s; return e && (s = d(e), t.params.uniqueNavElements && "string" == typeof e && s.length > 1 && 1 === t.$el.find(e).length && (s = t.$el.find(e))), s } function n(e, s) { const a = t.params.navigation; e && e.length > 0 && (e[s ? "addClass" : "removeClass"](a.disabledClass), e[0] && "BUTTON" === e[0].tagName && (e[0].disabled = s), t.params.watchOverflow && t.enabled && e[t.isLocked ? "addClass" : "removeClass"](a.lockClass)) } function l() { if (t.params.loop) return; const { $nextEl: e, $prevEl: s } = t.navigation; n(s, t.isBeginning && !t.params.rewind), n(e, t.isEnd && !t.params.rewind) } function o(e) { e.preventDefault(), (!t.isBeginning || t.params.loop || t.params.rewind) && (t.slidePrev(), i("navigationPrev")) } function c(e) { e.preventDefault(), (!t.isEnd || t.params.loop || t.params.rewind) && (t.slideNext(), i("navigationNext")) } function p() { const e = t.params.navigation; if (t.params.navigation = F(t, t.originalParams.navigation, t.params.navigation, { nextEl: "swiper-button-next", prevEl: "swiper-button-prev" }), !e.nextEl && !e.prevEl) return; const s = r(e.nextEl), a = r(e.prevEl); s && s.length > 0 && s.on("click", c), a && a.length > 0 && a.on("click", o), Object.assign(t.navigation, { $nextEl: s, nextEl: s && s[0], $prevEl: a, prevEl: a && a[0] }), t.enabled || (s && s.addClass(e.lockClass), a && a.addClass(e.lockClass)) } function u() { const { $nextEl: e, $prevEl: s } = t.navigation; e && e.length && (e.off("click", c), e.removeClass(t.params.navigation.disabledClass)), s && s.length && (s.off("click", o), s.removeClass(t.params.navigation.disabledClass)) } s({ navigation: { nextEl: null, prevEl: null, hideOnClick: !1, disabledClass: "swiper-button-disabled", hiddenClass: "swiper-button-hidden", lockClass: "swiper-button-lock", navigationDisabledClass: "swiper-navigation-disabled" } }), t.navigation = { nextEl: null, $nextEl: null, prevEl: null, $prevEl: null }, a("init", (() => { !1 === t.params.navigation.enabled ? h() : (p(), l()) })), a("toEdge fromEdge lock unlock", (() => { l() })), a("destroy", (() => { u() })), a("enable disable", (() => { const { $nextEl: e, $prevEl: s } = t.navigation; e && e[t.enabled ? "removeClass" : "addClass"](t.params.navigation.lockClass), s && s[t.enabled ? "removeClass" : "addClass"](t.params.navigation.lockClass) })), a("click", ((e, s) => { const { $nextEl: a, $prevEl: r } = t.navigation, n = s.target; if (t.params.navigation.hideOnClick && !d(n).is(r) && !d(n).is(a)) { if (t.pagination && t.params.pagination && t.params.pagination.clickable && (t.pagination.el === n || t.pagination.el.contains(n))) return; let e; a ? e = a.hasClass(t.params.navigation.hiddenClass) : r && (e = r.hasClass(t.params.navigation.hiddenClass)), i(!0 === e ? "navigationShow" : "navigationHide"), a && a.toggleClass(t.params.navigation.hiddenClass), r && r.toggleClass(t.params.navigation.hiddenClass) } })); const h = () => { t.$el.addClass(t.params.navigation.navigationDisabledClass), u() }; Object.assign(t.navigation, { enable: () => { t.$el.removeClass(t.params.navigation.navigationDisabledClass), p(), l() }, disable: h, update: l, init: p, destroy: u }) }, function (e) { let { swiper: t, extendParams: s, on: a, emit: i } = e; const r = "swiper-pagination"; let n; s({ pagination: { el: null, bulletElement: "span", clickable: !1, hideOnClick: !1, renderBullet: null, renderProgressbar: null, renderFraction: null, renderCustom: null, progressbarOpposite: !1, type: "bullets", dynamicBullets: !1, dynamicMainBullets: 1, formatFractionCurrent: e => e, formatFractionTotal: e => e, bulletClass: `${r}-bullet`, bulletActiveClass: `${r}-bullet-active`, modifierClass: `${r}-`, currentClass: `${r}-current`, totalClass: `${r}-total`, hiddenClass: `${r}-hidden`, progressbarFillClass: `${r}-progressbar-fill`, progressbarOppositeClass: `${r}-progressbar-opposite`, clickableClass: `${r}-clickable`, lockClass: `${r}-lock`, horizontalClass: `${r}-horizontal`, verticalClass: `${r}-vertical`, paginationDisabledClass: `${r}-disabled` } }), t.pagination = { el: null, $el: null, bullets: [] }; let l = 0; function o() { return !t.params.pagination.el || !t.pagination.el || !t.pagination.$el || 0 === t.pagination.$el.length } function c(e, s) { const { bulletActiveClass: a } = t.params.pagination; e[s]().addClass(`${a}-${s}`)[s]().addClass(`${a}-${s}-${s}`) } function p() { const e = t.rtl, s = t.params.pagination; if (o()) return; const a = t.virtual && t.params.virtual.enabled ? t.virtual.slides.length : t.slides.length, r = t.pagination.$el; let p; const u = t.params.loop ? Math.ceil((a - 2 * t.loopedSlides) / t.params.slidesPerGroup) : t.snapGrid.length; if (t.params.loop ? (p = Math.ceil((t.activeIndex - t.loopedSlides) / t.params.slidesPerGroup), p > a - 1 - 2 * t.loopedSlides && (p -= a - 2 * t.loopedSlides), p > u - 1 && (p -= u), p < 0 && "bullets" !== t.params.paginationType && (p = u + p)) : p = void 0 !== t.snapIndex ? t.snapIndex : t.activeIndex || 0, "bullets" === s.type && t.pagination.bullets && t.pagination.bullets.length > 0) { const a = t.pagination.bullets; let i, o, u; if (s.dynamicBullets && (n = a.eq(0)[t.isHorizontal() ? "outerWidth" : "outerHeight"](!0), r.css(t.isHorizontal() ? "width" : "height", n * (s.dynamicMainBullets + 4) + "px"), s.dynamicMainBullets > 1 && void 0 !== t.previousIndex && (l += p - (t.previousIndex - t.loopedSlides || 0), l > s.dynamicMainBullets - 1 ? l = s.dynamicMainBullets - 1 : l < 0 && (l = 0)), i = Math.max(p - l, 0), o = i + (Math.min(a.length, s.dynamicMainBullets) - 1), u = (o + i) / 2), a.removeClass(["", "-next", "-next-next", "-prev", "-prev-prev", "-main"].map((e => `${s.bulletActiveClass}${e}`)).join(" ")), r.length > 1) a.each((e => { const t = d(e), a = t.index(); a === p && t.addClass(s.bulletActiveClass), s.dynamicBullets && (a >= i && a <= o && t.addClass(`${s.bulletActiveClass}-main`), a === i && c(t, "prev"), a === o && c(t, "next")) })); else { const e = a.eq(p), r = e.index(); if (e.addClass(s.bulletActiveClass), s.dynamicBullets) { const e = a.eq(i), n = a.eq(o); for (let e = i; e <= o; e += 1)a.eq(e).addClass(`${s.bulletActiveClass}-main`); if (t.params.loop) if (r >= a.length) { for (let e = s.dynamicMainBullets; e >= 0; e -= 1)a.eq(a.length - e).addClass(`${s.bulletActiveClass}-main`); a.eq(a.length - s.dynamicMainBullets - 1).addClass(`${s.bulletActiveClass}-prev`) } else c(e, "prev"), c(n, "next"); else c(e, "prev"), c(n, "next") } } if (s.dynamicBullets) { const i = Math.min(a.length, s.dynamicMainBullets + 4), r = (n * i - n) / 2 - u * n, l = e ? "right" : "left"; a.css(t.isHorizontal() ? l : "top", `${r}px`) } } if ("fraction" === s.type && (r.find(U(s.currentClass)).text(s.formatFractionCurrent(p + 1)), r.find(U(s.totalClass)).text(s.formatFractionTotal(u))), "progressbar" === s.type) { let e; e = s.progressbarOpposite ? t.isHorizontal() ? "vertical" : "horizontal" : t.isHorizontal() ? "horizontal" : "vertical"; const a = (p + 1) / u; let i = 1, n = 1; "horizontal" === e ? i = a : n = a, r.find(U(s.progressbarFillClass)).transform(`translate3d(0,0,0) scaleX(${i}) scaleY(${n})`).transition(t.params.speed) } "custom" === s.type && s.renderCustom ? (r.html(s.renderCustom(t, p + 1, u)), i("paginationRender", r[0])) : i("paginationUpdate", r[0]), t.params.watchOverflow && t.enabled && r[t.isLocked ? "addClass" : "removeClass"](s.lockClass) } function u() { const e = t.params.pagination; if (o()) return; const s = t.virtual && t.params.virtual.enabled ? t.virtual.slides.length : t.slides.length, a = t.pagination.$el; let r = ""; if ("bullets" === e.type) { let i = t.params.loop ? Math.ceil((s - 2 * t.loopedSlides) / t.params.slidesPerGroup) : t.snapGrid.length; t.params.freeMode && t.params.freeMode.enabled && !t.params.loop && i > s && (i = s); for (let s = 0; s < i; s += 1)e.renderBullet ? r += e.renderBullet.call(t, s, e.bulletClass) : r += `<${e.bulletElement} class="${e.bulletClass}"></${e.bulletElement}>`; a.html(r), t.pagination.bullets = a.find(U(e.bulletClass)) } "fraction" === e.type && (r = e.renderFraction ? e.renderFraction.call(t, e.currentClass, e.totalClass) : `<span class="${e.currentClass}"></span> / <span class="${e.totalClass}"></span>`, a.html(r)), "progressbar" === e.type && (r = e.renderProgressbar ? e.renderProgressbar.call(t, e.progressbarFillClass) : `<span class="${e.progressbarFillClass}"></span>`, a.html(r)), "custom" !== e.type && i("paginationRender", t.pagination.$el[0]) } function h() { t.params.pagination = F(t, t.originalParams.pagination, t.params.pagination, { el: "swiper-pagination" }); const e = t.params.pagination; if (!e.el) return; let s = d(e.el); 0 !== s.length && (t.params.uniqueNavElements && "string" == typeof e.el && s.length > 1 && (s = t.$el.find(e.el), s.length > 1 && (s = s.filter((e => d(e).parents(".swiper")[0] === t.el)))), "bullets" === e.type && e.clickable && s.addClass(e.clickableClass), s.addClass(e.modifierClass + e.type), s.addClass(t.isHorizontal() ? e.horizontalClass : e.verticalClass), "bullets" === e.type && e.dynamicBullets && (s.addClass(`${e.modifierClass}${e.type}-dynamic`), l = 0, e.dynamicMainBullets < 1 && (e.dynamicMainBullets = 1)), "progressbar" === e.type && e.progressbarOpposite && s.addClass(e.progressbarOppositeClass), e.clickable && s.on("click", U(e.bulletClass), (function (e) { e.preventDefault(); let s = d(this).index() * t.params.slidesPerGroup; t.params.loop && (s += t.loopedSlides), t.slideTo(s) })), Object.assign(t.pagination, { $el: s, el: s[0] }), t.enabled || s.addClass(e.lockClass)) } function m() { const e = t.params.pagination; if (o()) return; const s = t.pagination.$el; s.removeClass(e.hiddenClass), s.removeClass(e.modifierClass + e.type), s.removeClass(t.isHorizontal() ? e.horizontalClass : e.verticalClass), t.pagination.bullets && t.pagination.bullets.removeClass && t.pagination.bullets.removeClass(e.bulletActiveClass), e.clickable && s.off("click", U(e.bulletClass)) } a("init", (() => { !1 === t.params.pagination.enabled ? f() : (h(), u(), p()) })), a("activeIndexChange", (() => { (t.params.loop || void 0 === t.snapIndex) && p() })), a("snapIndexChange", (() => { t.params.loop || p() })), a("slidesLengthChange", (() => { t.params.loop && (u(), p()) })), a("snapGridLengthChange", (() => { t.params.loop || (u(), p()) })), a("destroy", (() => { m() })), a("enable disable", (() => { const { $el: e } = t.pagination; e && e[t.enabled ? "removeClass" : "addClass"](t.params.pagination.lockClass) })), a("lock unlock", (() => { p() })), a("click", ((e, s) => { const a = s.target, { $el: r } = t.pagination; if (t.params.pagination.el && t.params.pagination.hideOnClick && r && r.length > 0 && !d(a).hasClass(t.params.pagination.bulletClass)) { if (t.navigation && (t.navigation.nextEl && a === t.navigation.nextEl || t.navigation.prevEl && a === t.navigation.prevEl)) return; const e = r.hasClass(t.params.pagination.hiddenClass); i(!0 === e ? "paginationShow" : "paginationHide"), r.toggleClass(t.params.pagination.hiddenClass) } })); const f = () => { t.$el.addClass(t.params.pagination.paginationDisabledClass), t.pagination.$el && t.pagination.$el.addClass(t.params.pagination.paginationDisabledClass), m() }; Object.assign(t.pagination, { enable: () => { t.$el.removeClass(t.params.pagination.paginationDisabledClass), t.pagination.$el && t.pagination.$el.removeClass(t.params.pagination.paginationDisabledClass), h(), u(), p() }, disable: f, render: u, update: p, init: h, destroy: m }) }, function (e) { let { swiper: t, extendParams: s, on: i, emit: r } = e; const n = a(); let l, o, c, u, h = !1, m = null, f = null; function g() { if (!t.params.scrollbar.el || !t.scrollbar.el) return; const { scrollbar: e, rtlTranslate: s, progress: a } = t, { $dragEl: i, $el: r } = e, n = t.params.scrollbar; let l = o, d = (c - o) * a; s ? (d = -d, d > 0 ? (l = o - d, d = 0) : -d + o > c && (l = c + d)) : d < 0 ? (l = o + d, d = 0) : d + o > c && (l = c - d), t.isHorizontal() ? (i.transform(`translate3d(${d}px, 0, 0)`), i[0].style.width = `${l}px`) : (i.transform(`translate3d(0px, ${d}px, 0)`), i[0].style.height = `${l}px`), n.hide && (clearTimeout(m), r[0].style.opacity = 1, m = setTimeout((() => { r[0].style.opacity = 0, r.transition(400) }), 1e3)) } function v() { if (!t.params.scrollbar.el || !t.scrollbar.el) return; const { scrollbar: e } = t, { $dragEl: s, $el: a } = e; s[0].style.width = "", s[0].style.height = "", c = t.isHorizontal() ? a[0].offsetWidth : a[0].offsetHeight, u = t.size / (t.virtualSize + t.params.slidesOffsetBefore - (t.params.centeredSlides ? t.snapGrid[0] : 0)), o = "auto" === t.params.scrollbar.dragSize ? c * u : parseInt(t.params.scrollbar.dragSize, 10), t.isHorizontal() ? s[0].style.width = `${o}px` : s[0].style.height = `${o}px`, a[0].style.display = u >= 1 ? "none" : "", t.params.scrollbar.hide && (a[0].style.opacity = 0), t.params.watchOverflow && t.enabled && e.$el[t.isLocked ? "addClass" : "removeClass"](t.params.scrollbar.lockClass) } function w(e) { return t.isHorizontal() ? "touchstart" === e.type || "touchmove" === e.type ? e.targetTouches[0].clientX : e.clientX : "touchstart" === e.type || "touchmove" === e.type ? e.targetTouches[0].clientY : e.clientY } function b(e) { const { scrollbar: s, rtlTranslate: a } = t, { $el: i } = s; let r; r = (w(e) - i.offset()[t.isHorizontal() ? "left" : "top"] - (null !== l ? l : o / 2)) / (c - o), r = Math.max(Math.min(r, 1), 0), a && (r = 1 - r); const n = t.minTranslate() + (t.maxTranslate() - t.minTranslate()) * r; t.updateProgress(n), t.setTranslate(n), t.updateActiveIndex(), t.updateSlidesClasses() } function x(e) { const s = t.params.scrollbar, { scrollbar: a, $wrapperEl: i } = t, { $el: n, $dragEl: o } = a; h = !0, l = e.target === o[0] || e.target === o ? w(e) - e.target.getBoundingClientRect()[t.isHorizontal() ? "left" : "top"] : null, e.preventDefault(), e.stopPropagation(), i.transition(100), o.transition(100), b(e), clearTimeout(f), n.transition(0), s.hide && n.css("opacity", 1), t.params.cssMode && t.$wrapperEl.css("scroll-snap-type", "none"), r("scrollbarDragStart", e) } function y(e) { const { scrollbar: s, $wrapperEl: a } = t, { $el: i, $dragEl: n } = s; h && (e.preventDefault ? e.preventDefault() : e.returnValue = !1, b(e), a.transition(0), i.transition(0), n.transition(0), r("scrollbarDragMove", e)) } function E(e) { const s = t.params.scrollbar, { scrollbar: a, $wrapperEl: i } = t, { $el: n } = a; h && (h = !1, t.params.cssMode && (t.$wrapperEl.css("scroll-snap-type", ""), i.transition("")), s.hide && (clearTimeout(f), f = p((() => { n.css("opacity", 0), n.transition(400) }), 1e3)), r("scrollbarDragEnd", e), s.snapOnRelease && t.slideToClosest()) } function C(e) { const { scrollbar: s, touchEventsTouch: a, touchEventsDesktop: i, params: r, support: l } = t, o = s.$el; if (!o) return; const d = o[0], c = !(!l.passiveListener || !r.passiveListeners) && { passive: !1, capture: !1 }, p = !(!l.passiveListener || !r.passiveListeners) && { passive: !0, capture: !1 }; if (!d) return; const u = "on" === e ? "addEventListener" : "removeEventListener"; l.touch ? (d[u](a.start, x, c), d[u](a.move, y, c), d[u](a.end, E, p)) : (d[u](i.start, x, c), n[u](i.move, y, c), n[u](i.end, E, p)) } function T() { const { scrollbar: e, $el: s } = t; t.params.scrollbar = F(t, t.originalParams.scrollbar, t.params.scrollbar, { el: "swiper-scrollbar" }); const a = t.params.scrollbar; if (!a.el) return; let i = d(a.el); t.params.uniqueNavElements && "string" == typeof a.el && i.length > 1 && 1 === s.find(a.el).length && (i = s.find(a.el)), i.addClass(t.isHorizontal() ? a.horizontalClass : a.verticalClass); let r = i.find(`.${t.params.scrollbar.dragClass}`); 0 === r.length && (r = d(`<div class="${t.params.scrollbar.dragClass}"></div>`), i.append(r)), Object.assign(e, { $el: i, el: i[0], $dragEl: r, dragEl: r[0] }), a.draggable && t.params.scrollbar.el && t.scrollbar.el && C("on"), i && i[t.enabled ? "removeClass" : "addClass"](t.params.scrollbar.lockClass) } function $() { const e = t.params.scrollbar, s = t.scrollbar.$el; s && s.removeClass(t.isHorizontal() ? e.horizontalClass : e.verticalClass), t.params.scrollbar.el && t.scrollbar.el && C("off") } s({ scrollbar: { el: null, dragSize: "auto", hide: !1, draggable: !1, snapOnRelease: !0, lockClass: "swiper-scrollbar-lock", dragClass: "swiper-scrollbar-drag", scrollbarDisabledClass: "swiper-scrollbar-disabled", horizontalClass: "swiper-scrollbar-horizontal", verticalClass: "swiper-scrollbar-vertical" } }), t.scrollbar = { el: null, dragEl: null, $el: null, $dragEl: null }, i("init", (() => { !1 === t.params.scrollbar.enabled ? S() : (T(), v(), g()) })), i("update resize observerUpdate lock unlock", (() => { v() })), i("setTranslate", (() => { g() })), i("setTransition", ((e, s) => { !function (e) { t.params.scrollbar.el && t.scrollbar.el && t.scrollbar.$dragEl.transition(e) }(s) })), i("enable disable", (() => { const { $el: e } = t.scrollbar; e && e[t.enabled ? "removeClass" : "addClass"](t.params.scrollbar.lockClass) })), i("destroy", (() => { $() })); const S = () => { t.$el.addClass(t.params.scrollbar.scrollbarDisabledClass), t.scrollbar.$el && t.scrollbar.$el.addClass(t.params.scrollbar.scrollbarDisabledClass), $() }; Object.assign(t.scrollbar, { enable: () => { t.$el.removeClass(t.params.scrollbar.scrollbarDisabledClass), t.scrollbar.$el && t.scrollbar.$el.removeClass(t.params.scrollbar.scrollbarDisabledClass), T(), v(), g() }, disable: S, updateSize: v, setTranslate: g, init: T, destroy: $ }) }, function (e) { let { swiper: t, extendParams: s, on: a } = e; s({ parallax: { enabled: !1 } }); const i = (e, s) => { const { rtl: a } = t, i = d(e), r = a ? -1 : 1, n = i.attr("data-swiper-parallax") || "0"; let l = i.attr("data-swiper-parallax-x"), o = i.attr("data-swiper-parallax-y"); const c = i.attr("data-swiper-parallax-scale"), p = i.attr("data-swiper-parallax-opacity"); if (l || o ? (l = l || "0", o = o || "0") : t.isHorizontal() ? (l = n, o = "0") : (o = n, l = "0"), l = l.indexOf("%") >= 0 ? parseInt(l, 10) * s * r + "%" : l * s * r + "px", o = o.indexOf("%") >= 0 ? parseInt(o, 10) * s + "%" : o * s + "px", null != p) { const e = p - (p - 1) * (1 - Math.abs(s)); i[0].style.opacity = e } if (null == c) i.transform(`translate3d(${l}, ${o}, 0px)`); else { const e = c - (c - 1) * (1 - Math.abs(s)); i.transform(`translate3d(${l}, ${o}, 0px) scale(${e})`) } }, r = () => { const { $el: e, slides: s, progress: a, snapGrid: r } = t; e.children("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each((e => { i(e, a) })), s.each(((e, s) => { let n = e.progress; t.params.slidesPerGroup > 1 && "auto" !== t.params.slidesPerView && (n += Math.ceil(s / 2) - a * (r.length - 1)), n = Math.min(Math.max(n, -1), 1), d(e).find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each((e => { i(e, n) })) })) }; a("beforeInit", (() => { t.params.parallax.enabled && (t.params.watchSlidesProgress = !0, t.originalParams.watchSlidesProgress = !0) })), a("init", (() => { t.params.parallax.enabled && r() })), a("setTranslate", (() => { t.params.parallax.enabled && r() })), a("setTransition", ((e, s) => { t.params.parallax.enabled && function (e) { void 0 === e && (e = t.params.speed); const { $el: s } = t; s.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each((t => { const s = d(t); let a = parseInt(s.attr("data-swiper-parallax-duration"), 10) || e; 0 === e && (a = 0), s.transition(a) })) }(s) })) }, function (e) { let { swiper: t, extendParams: s, on: a, emit: i } = e; const n = r(); s({ zoom: { enabled: !1, maxRatio: 3, minRatio: 1, toggle: !0, containerClass: "swiper-zoom-container", zoomedSlideClass: "swiper-slide-zoomed" } }), t.zoom = { enabled: !1 }; let l, o, c, p = 1, u = !1; const m = { $slideEl: void 0, slideWidth: void 0, slideHeight: void 0, $imageEl: void 0, $imageWrapEl: void 0, maxRatio: 3 }, f = { isTouched: void 0, isMoved: void 0, currentX: void 0, currentY: void 0, minX: void 0, minY: void 0, maxX: void 0, maxY: void 0, width: void 0, height: void 0, startX: void 0, startY: void 0, touchesStart: {}, touchesCurrent: {} }, g = { x: void 0, y: void 0, prevPositionX: void 0, prevPositionY: void 0, prevTime: void 0 }; let v = 1; function w(e) { if (e.targetTouches.length < 2) return 1; const t = e.targetTouches[0].pageX, s = e.targetTouches[0].pageY, a = e.targetTouches[1].pageX, i = e.targetTouches[1].pageY; return Math.sqrt((a - t) ** 2 + (i - s) ** 2) } function b(e) { const s = t.support, a = t.params.zoom; if (o = !1, c = !1, !s.gestures) { if ("touchstart" !== e.type || "touchstart" === e.type && e.targetTouches.length < 2) return; o = !0, m.scaleStart = w(e) } m.$slideEl && m.$slideEl.length || (m.$slideEl = d(e.target).closest(`.${t.params.slideClass}`), 0 === m.$slideEl.length && (m.$slideEl = t.slides.eq(t.activeIndex)), m.$imageEl = m.$slideEl.find(`.${a.containerClass}`).eq(0).find("picture, img, svg, canvas, .swiper-zoom-target").eq(0), m.$imageWrapEl = m.$imageEl.parent(`.${a.containerClass}`), m.maxRatio = m.$imageWrapEl.attr("data-swiper-zoom") || a.maxRatio, 0 !== m.$imageWrapEl.length) ? (m.$imageEl && m.$imageEl.transition(0), u = !0) : m.$imageEl = void 0 } function x(e) { const s = t.support, a = t.params.zoom, i = t.zoom; if (!s.gestures) { if ("touchmove" !== e.type || "touchmove" === e.type && e.targetTouches.length < 2) return; c = !0, m.scaleMove = w(e) } m.$imageEl && 0 !== m.$imageEl.length ? (s.gestures ? i.scale = e.scale * p : i.scale = m.scaleMove / m.scaleStart * p, i.scale > m.maxRatio && (i.scale = m.maxRatio - 1 + (i.scale - m.maxRatio + 1) ** .5), i.scale < a.minRatio && (i.scale = a.minRatio + 1 - (a.minRatio - i.scale + 1) ** .5), m.$imageEl.transform(`translate3d(0,0,0) scale(${i.scale})`)) : "gesturechange" === e.type && b(e) } function y(e) { const s = t.device, a = t.support, i = t.params.zoom, r = t.zoom; if (!a.gestures) { if (!o || !c) return; if ("touchend" !== e.type || "touchend" === e.type && e.changedTouches.length < 2 && !s.android) return; o = !1, c = !1 } m.$imageEl && 0 !== m.$imageEl.length && (r.scale = Math.max(Math.min(r.scale, m.maxRatio), i.minRatio), m.$imageEl.transition(t.params.speed).transform(`translate3d(0,0,0) scale(${r.scale})`), p = r.scale, u = !1, 1 === r.scale && (m.$slideEl = void 0)) } function E(e) { const s = t.zoom; if (!m.$imageEl || 0 === m.$imageEl.length) return; if (t.allowClick = !1, !f.isTouched || !m.$slideEl) return; f.isMoved || (f.width = m.$imageEl[0].offsetWidth, f.height = m.$imageEl[0].offsetHeight, f.startX = h(m.$imageWrapEl[0], "x") || 0, f.startY = h(m.$imageWrapEl[0], "y") || 0, m.slideWidth = m.$slideEl[0].offsetWidth, m.slideHeight = m.$slideEl[0].offsetHeight, m.$imageWrapEl.transition(0)); const a = f.width * s.scale, i = f.height * s.scale; if (!(a < m.slideWidth && i < m.slideHeight)) { if (f.minX = Math.min(m.slideWidth / 2 - a / 2, 0), f.maxX = -f.minX, f.minY = Math.min(m.slideHeight / 2 - i / 2, 0), f.maxY = -f.minY, f.touchesCurrent.x = "touchmove" === e.type ? e.targetTouches[0].pageX : e.pageX, f.touchesCurrent.y = "touchmove" === e.type ? e.targetTouches[0].pageY : e.pageY, !f.isMoved && !u) { if (t.isHorizontal() && (Math.floor(f.minX) === Math.floor(f.startX) && f.touchesCurrent.x < f.touchesStart.x || Math.floor(f.maxX) === Math.floor(f.startX) && f.touchesCurrent.x > f.touchesStart.x)) return void (f.isTouched = !1); if (!t.isHorizontal() && (Math.floor(f.minY) === Math.floor(f.startY) && f.touchesCurrent.y < f.touchesStart.y || Math.floor(f.maxY) === Math.floor(f.startY) && f.touchesCurrent.y > f.touchesStart.y)) return void (f.isTouched = !1) } e.cancelable && e.preventDefault(), e.stopPropagation(), f.isMoved = !0, f.currentX = f.touchesCurrent.x - f.touchesStart.x + f.startX, f.currentY = f.touchesCurrent.y - f.touchesStart.y + f.startY, f.currentX < f.minX && (f.currentX = f.minX + 1 - (f.minX - f.currentX + 1) ** .8), f.currentX > f.maxX && (f.currentX = f.maxX - 1 + (f.currentX - f.maxX + 1) ** .8), f.currentY < f.minY && (f.currentY = f.minY + 1 - (f.minY - f.currentY + 1) ** .8), f.currentY > f.maxY && (f.currentY = f.maxY - 1 + (f.currentY - f.maxY + 1) ** .8), g.prevPositionX || (g.prevPositionX = f.touchesCurrent.x), g.prevPositionY || (g.prevPositionY = f.touchesCurrent.y), g.prevTime || (g.prevTime = Date.now()), g.x = (f.touchesCurrent.x - g.prevPositionX) / (Date.now() - g.prevTime) / 2, g.y = (f.touchesCurrent.y - g.prevPositionY) / (Date.now() - g.prevTime) / 2, Math.abs(f.touchesCurrent.x - g.prevPositionX) < 2 && (g.x = 0), Math.abs(f.touchesCurrent.y - g.prevPositionY) < 2 && (g.y = 0), g.prevPositionX = f.touchesCurrent.x, g.prevPositionY = f.touchesCurrent.y, g.prevTime = Date.now(), m.$imageWrapEl.transform(`translate3d(${f.currentX}px, ${f.currentY}px,0)`) } } function C() { const e = t.zoom; m.$slideEl && t.previousIndex !== t.activeIndex && (m.$imageEl && m.$imageEl.transform("translate3d(0,0,0) scale(1)"), m.$imageWrapEl && m.$imageWrapEl.transform("translate3d(0,0,0)"), e.scale = 1, p = 1, m.$slideEl = void 0, m.$imageEl = void 0, m.$imageWrapEl = void 0) } function T(e) { const s = t.zoom, a = t.params.zoom; if (m.$slideEl || (e && e.target && (m.$slideEl = d(e.target).closest(`.${t.params.slideClass}`)), m.$slideEl || (t.params.virtual && t.params.virtual.enabled && t.virtual ? m.$slideEl = t.$wrapperEl.children(`.${t.params.slideActiveClass}`) : m.$slideEl = t.slides.eq(t.activeIndex)), m.$imageEl = m.$slideEl.find(`.${a.containerClass}`).eq(0).find("picture, img, svg, canvas, .swiper-zoom-target").eq(0), m.$imageWrapEl = m.$imageEl.parent(`.${a.containerClass}`)), !m.$imageEl || 0 === m.$imageEl.length || !m.$imageWrapEl || 0 === m.$imageWrapEl.length) return; let i, r, l, o, c, u, h, g, v, w, b, x, y, E, C, T, $, S; t.params.cssMode && (t.wrapperEl.style.overflow = "hidden", t.wrapperEl.style.touchAction = "none"), m.$slideEl.addClass(`${a.zoomedSlideClass}`), void 0 === f.touchesStart.x && e ? (i = "touchend" === e.type ? e.changedTouches[0].pageX : e.pageX, r = "touchend" === e.type ? e.changedTouches[0].pageY : e.pageY) : (i = f.touchesStart.x, r = f.touchesStart.y), s.scale = m.$imageWrapEl.attr("data-swiper-zoom") || a.maxRatio, p = m.$imageWrapEl.attr("data-swiper-zoom") || a.maxRatio, e ? ($ = m.$slideEl[0].offsetWidth, S = m.$slideEl[0].offsetHeight, l = m.$slideEl.offset().left + n.scrollX, o = m.$slideEl.offset().top + n.scrollY, c = l + $ / 2 - i, u = o + S / 2 - r, v = m.$imageEl[0].offsetWidth, w = m.$imageEl[0].offsetHeight, b = v * s.scale, x = w * s.scale, y = Math.min($ / 2 - b / 2, 0), E = Math.min(S / 2 - x / 2, 0), C = -y, T = -E, h = c * s.scale, g = u * s.scale, h < y && (h = y), h > C && (h = C), g < E && (g = E), g > T && (g = T)) : (h = 0, g = 0), m.$imageWrapEl.transition(300).transform(`translate3d(${h}px, ${g}px,0)`), m.$imageEl.transition(300).transform(`translate3d(0,0,0) scale(${s.scale})`) } function $() { const e = t.zoom, s = t.params.zoom; m.$slideEl || (t.params.virtual && t.params.virtual.enabled && t.virtual ? m.$slideEl = t.$wrapperEl.children(`.${t.params.slideActiveClass}`) : m.$slideEl = t.slides.eq(t.activeIndex), m.$imageEl = m.$slideEl.find(`.${s.containerClass}`).eq(0).find("picture, img, svg, canvas, .swiper-zoom-target").eq(0), m.$imageWrapEl = m.$imageEl.parent(`.${s.containerClass}`)), m.$imageEl && 0 !== m.$imageEl.length && m.$imageWrapEl && 0 !== m.$imageWrapEl.length && (t.params.cssMode && (t.wrapperEl.style.overflow = "", t.wrapperEl.style.touchAction = ""), e.scale = 1, p = 1, m.$imageWrapEl.transition(300).transform("translate3d(0,0,0)"), m.$imageEl.transition(300).transform("translate3d(0,0,0) scale(1)"), m.$slideEl.removeClass(`${s.zoomedSlideClass}`), m.$slideEl = void 0) } function S(e) { const s = t.zoom; s.scale && 1 !== s.scale ? $() : T(e) } function M() { const e = t.support; return { passiveListener: !("touchstart" !== t.touchEvents.start || !e.passiveListener || !t.params.passiveListeners) && { passive: !0, capture: !1 }, activeListenerWithCapture: !e.passiveListener || { passive: !1, capture: !0 } } } function P() { return `.${t.params.slideClass}` } function k(e) { const { passiveListener: s } = M(), a = P(); t.$wrapperEl[e]("gesturestart", a, b, s), t.$wrapperEl[e]("gesturechange", a, x, s), t.$wrapperEl[e]("gestureend", a, y, s) } function z() { l || (l = !0, k("on")) } function L() { l && (l = !1, k("off")) } function O() { const e = t.zoom; if (e.enabled) return; e.enabled = !0; const s = t.support, { passiveListener: a, activeListenerWithCapture: i } = M(), r = P(); s.gestures ? (t.$wrapperEl.on(t.touchEvents.start, z, a), t.$wrapperEl.on(t.touchEvents.end, L, a)) : "touchstart" === t.touchEvents.start && (t.$wrapperEl.on(t.touchEvents.start, r, b, a), t.$wrapperEl.on(t.touchEvents.move, r, x, i), t.$wrapperEl.on(t.touchEvents.end, r, y, a), t.touchEvents.cancel && t.$wrapperEl.on(t.touchEvents.cancel, r, y, a)), t.$wrapperEl.on(t.touchEvents.move, `.${t.params.zoom.containerClass}`, E, i) } function I() { const e = t.zoom; if (!e.enabled) return; const s = t.support; e.enabled = !1; const { passiveListener: a, activeListenerWithCapture: i } = M(), r = P(); s.gestures ? (t.$wrapperEl.off(t.touchEvents.start, z, a), t.$wrapperEl.off(t.touchEvents.end, L, a)) : "touchstart" === t.touchEvents.start && (t.$wrapperEl.off(t.touchEvents.start, r, b, a), t.$wrapperEl.off(t.touchEvents.move, r, x, i), t.$wrapperEl.off(t.touchEvents.end, r, y, a), t.touchEvents.cancel && t.$wrapperEl.off(t.touchEvents.cancel, r, y, a)), t.$wrapperEl.off(t.touchEvents.move, `.${t.params.zoom.containerClass}`, E, i) } Object.defineProperty(t.zoom, "scale", { get: () => v, set(e) { if (v !== e) { const t = m.$imageEl ? m.$imageEl[0] : void 0, s = m.$slideEl ? m.$slideEl[0] : void 0; i("zoomChange", e, t, s) } v = e } }), a("init", (() => { t.params.zoom.enabled && O() })), a("destroy", (() => { I() })), a("touchStart", ((e, s) => { t.zoom.enabled && function (e) { const s = t.device; m.$imageEl && 0 !== m.$imageEl.length && (f.isTouched || (s.android && e.cancelable && e.preventDefault(), f.isTouched = !0, f.touchesStart.x = "touchstart" === e.type ? e.targetTouches[0].pageX : e.pageX, f.touchesStart.y = "touchstart" === e.type ? e.targetTouches[0].pageY : e.pageY)) }(s) })), a("touchEnd", ((e, s) => { t.zoom.enabled && function () { const e = t.zoom; if (!m.$imageEl || 0 === m.$imageEl.length) return; if (!f.isTouched || !f.isMoved) return f.isTouched = !1, void (f.isMoved = !1); f.isTouched = !1, f.isMoved = !1; let s = 300, a = 300; const i = g.x * s, r = f.currentX + i, n = g.y * a, l = f.currentY + n; 0 !== g.x && (s = Math.abs((r - f.currentX) / g.x)), 0 !== g.y && (a = Math.abs((l - f.currentY) / g.y)); const o = Math.max(s, a); f.currentX = r, f.currentY = l; const d = f.width * e.scale, c = f.height * e.scale; f.minX = Math.min(m.slideWidth / 2 - d / 2, 0), f.maxX = -f.minX, f.minY = Math.min(m.slideHeight / 2 - c / 2, 0), f.maxY = -f.minY, f.currentX = Math.max(Math.min(f.currentX, f.maxX), f.minX), f.currentY = Math.max(Math.min(f.currentY, f.maxY), f.minY), m.$imageWrapEl.transition(o).transform(`translate3d(${f.currentX}px, ${f.currentY}px,0)`) }() })), a("doubleTap", ((e, s) => { !t.animating && t.params.zoom.enabled && t.zoom.enabled && t.params.zoom.toggle && S(s) })), a("transitionEnd", (() => { t.zoom.enabled && t.params.zoom.enabled && C() })), a("slideChange", (() => { t.zoom.enabled && t.params.zoom.enabled && t.params.cssMode && C() })), Object.assign(t.zoom, { enable: O, disable: I, in: T, out: $, toggle: S }) }, function (e) { let { swiper: t, extendParams: s, on: a, emit: i } = e; s({ lazy: { checkInView: !1, enabled: !1, loadPrevNext: !1, loadPrevNextAmount: 1, loadOnTransitionStart: !1, scrollingElement: "", elementClass: "swiper-lazy", loadingClass: "swiper-lazy-loading", loadedClass: "swiper-lazy-loaded", preloaderClass: "swiper-lazy-preloader" } }), t.lazy = {}; let n = !1, l = !1; function o(e, s) { void 0 === s && (s = !0); const a = t.params.lazy; if (void 0 === e) return; if (0 === t.slides.length) return; const r = t.virtual && t.params.virtual.enabled ? t.$wrapperEl.children(`.${t.params.slideClass}[data-swiper-slide-index="${e}"]`) : t.slides.eq(e), n = r.find(`.${a.elementClass}:not(.${a.loadedClass}):not(.${a.loadingClass})`); !r.hasClass(a.elementClass) || r.hasClass(a.loadedClass) || r.hasClass(a.loadingClass) || n.push(r[0]), 0 !== n.length && n.each((e => { const n = d(e); n.addClass(a.loadingClass); const l = n.attr("data-background"), c = n.attr("data-src"), p = n.attr("data-srcset"), u = n.attr("data-sizes"), h = n.parent("picture"); t.loadImage(n[0], c || l, p, u, !1, (() => { if (null != t && t && (!t || t.params) && !t.destroyed) { if (l ? (n.css("background-image", `url("${l}")`), n.removeAttr("data-background")) : (p && (n.attr("srcset", p), n.removeAttr("data-srcset")), u && (n.attr("sizes", u), n.removeAttr("data-sizes")), h.length && h.children("source").each((e => { const t = d(e); t.attr("data-srcset") && (t.attr("srcset", t.attr("data-srcset")), t.removeAttr("data-srcset")) })), c && (n.attr("src", c), n.removeAttr("data-src"))), n.addClass(a.loadedClass).removeClass(a.loadingClass), r.find(`.${a.preloaderClass}`).remove(), t.params.loop && s) { const e = r.attr("data-swiper-slide-index"); if (r.hasClass(t.params.slideDuplicateClass)) { o(t.$wrapperEl.children(`[data-swiper-slide-index="${e}"]:not(.${t.params.slideDuplicateClass})`).index(), !1) } else { o(t.$wrapperEl.children(`.${t.params.slideDuplicateClass}[data-swiper-slide-index="${e}"]`).index(), !1) } } i("lazyImageReady", r[0], n[0]), t.params.autoHeight && t.updateAutoHeight() } })), i("lazyImageLoad", r[0], n[0]) })) } function c() { const { $wrapperEl: e, params: s, slides: a, activeIndex: i } = t, r = t.virtual && s.virtual.enabled, n = s.lazy; let c = s.slidesPerView; function p(t) { if (r) { if (e.children(`.${s.slideClass}[data-swiper-slide-index="${t}"]`).length) return !0 } else if (a[t]) return !0; return !1 } function u(e) { return r ? d(e).attr("data-swiper-slide-index") : d(e).index() } if ("auto" === c && (c = 0), l || (l = !0), t.params.watchSlidesProgress) e.children(`.${s.slideVisibleClass}`).each((e => { o(r ? d(e).attr("data-swiper-slide-index") : d(e).index()) })); else if (c > 1) for (let e = i; e < i + c; e += 1)p(e) && o(e); else o(i); if (n.loadPrevNext) if (c > 1 || n.loadPrevNextAmount && n.loadPrevNextAmount > 1) { const e = n.loadPrevNextAmount, t = Math.ceil(c), s = Math.min(i + t + Math.max(e, t), a.length), r = Math.max(i - Math.max(t, e), 0); for (let e = i + t; e < s; e += 1)p(e) && o(e); for (let e = r; e < i; e += 1)p(e) && o(e) } else { const t = e.children(`.${s.slideNextClass}`); t.length > 0 && o(u(t)); const a = e.children(`.${s.slidePrevClass}`); a.length > 0 && o(u(a)) } } function p() { const e = r(); if (!t || t.destroyed) return; const s = t.params.lazy.scrollingElement ? d(t.params.lazy.scrollingElement) : d(e), a = s[0] === e, i = a ? e.innerWidth : s[0].offsetWidth, l = a ? e.innerHeight : s[0].offsetHeight, o = t.$el.offset(), { rtlTranslate: u } = t; let h = !1; u && (o.left -= t.$el[0].scrollLeft); const m = [[o.left, o.top], [o.left + t.width, o.top], [o.left, o.top + t.height], [o.left + t.width, o.top + t.height]]; for (let e = 0; e < m.length; e += 1) { const t = m[e]; if (t[0] >= 0 && t[0] <= i && t[1] >= 0 && t[1] <= l) { if (0 === t[0] && 0 === t[1]) continue; h = !0 } } const f = !("touchstart" !== t.touchEvents.start || !t.support.passiveListener || !t.params.passiveListeners) && { passive: !0, capture: !1 }; h ? (c(), s.off("scroll", p, f)) : n || (n = !0, s.on("scroll", p, f)) } a("beforeInit", (() => { t.params.lazy.enabled && t.params.preloadImages && (t.params.preloadImages = !1) })), a("init", (() => { t.params.lazy.enabled && (t.params.lazy.checkInView ? p() : c()) })), a("scroll", (() => { t.params.freeMode && t.params.freeMode.enabled && !t.params.freeMode.sticky && c() })), a("scrollbarDragMove resize _freeModeNoMomentumRelease", (() => { t.params.lazy.enabled && (t.params.lazy.checkInView ? p() : c()) })), a("transitionStart", (() => { t.params.lazy.enabled && (t.params.lazy.loadOnTransitionStart || !t.params.lazy.loadOnTransitionStart && !l) && (t.params.lazy.checkInView ? p() : c()) })), a("transitionEnd", (() => { t.params.lazy.enabled && !t.params.lazy.loadOnTransitionStart && (t.params.lazy.checkInView ? p() : c()) })), a("slideChange", (() => { const { lazy: e, cssMode: s, watchSlidesProgress: a, touchReleaseOnEdges: i, resistanceRatio: r } = t.params; e.enabled && (s || a && (i || 0 === r)) && c() })), a("destroy", (() => { t.$el && t.$el.find(`.${t.params.lazy.loadingClass}`).removeClass(t.params.lazy.loadingClass) })), Object.assign(t.lazy, { load: c, loadInSlide: o }) }, function (e) { let { swiper: t, extendParams: s, on: a } = e; function i(e, t) { const s = function () { let e, t, s; return (a, i) => { for (t = -1, e = a.length; e - t > 1;)s = e + t >> 1, a[s] <= i ? t = s : e = s; return e } }(); let a, i; return this.x = e, this.y = t, this.lastIndex = e.length - 1, this.interpolate = function (e) { return e ? (i = s(this.x, e), a = i - 1, (e - this.x[a]) * (this.y[i] - this.y[a]) / (this.x[i] - this.x[a]) + this.y[a]) : 0 }, this } function r() { t.controller.control && t.controller.spline && (t.controller.spline = void 0, delete t.controller.spline) } s({ controller: { control: void 0, inverse: !1, by: "slide" } }), t.controller = { control: void 0 }, a("beforeInit", (() => { t.controller.control = t.params.controller.control })), a("update", (() => { r() })), a("resize", (() => { r() })), a("observerUpdate", (() => { r() })), a("setTranslate", ((e, s, a) => { t.controller.control && t.controller.setTranslate(s, a) })), a("setTransition", ((e, s, a) => { t.controller.control && t.controller.setTransition(s, a) })), Object.assign(t.controller, { setTranslate: function (e, s) { const a = t.controller.control; let r, n; const l = t.constructor; function o(e) { const s = t.rtlTranslate ? -t.translate : t.translate; "slide" === t.params.controller.by && (!function (e) { t.controller.spline || (t.controller.spline = t.params.loop ? new i(t.slidesGrid, e.slidesGrid) : new i(t.snapGrid, e.snapGrid)) }(e), n = -t.controller.spline.interpolate(-s)), n && "container" !== t.params.controller.by || (r = (e.maxTranslate() - e.minTranslate()) / (t.maxTranslate() - t.minTranslate()), n = (s - t.minTranslate()) * r + e.minTranslate()), t.params.controller.inverse && (n = e.maxTranslate() - n), e.updateProgress(n), e.setTranslate(n, t), e.updateActiveIndex(), e.updateSlidesClasses() } if (Array.isArray(a)) for (let e = 0; e < a.length; e += 1)a[e] !== s && a[e] instanceof l && o(a[e]); else a instanceof l && s !== a && o(a) }, setTransition: function (e, s) { const a = t.constructor, i = t.controller.control; let r; function n(s) { s.setTransition(e, t), 0 !== e && (s.transitionStart(), s.params.autoHeight && p((() => { s.updateAutoHeight() })), s.$wrapperEl.transitionEnd((() => { i && (s.params.loop && "slide" === t.params.controller.by && s.loopFix(), s.transitionEnd()) }))) } if (Array.isArray(i)) for (r = 0; r < i.length; r += 1)i[r] !== s && i[r] instanceof a && n(i[r]); else i instanceof a && s !== i && n(i) } }) }, function (e) { let { swiper: t, extendParams: s, on: a } = e; s({ a11y: { enabled: !0, notificationClass: "swiper-notification", prevSlideMessage: "Previous slide", nextSlideMessage: "Next slide", firstSlideMessage: "This is the first slide", lastSlideMessage: "This is the last slide", paginationBulletMessage: "Go to slide {{index}}", slideLabelMessage: "{{index}} / {{slidesLength}}", containerMessage: null, containerRoleDescriptionMessage: null, itemRoleDescriptionMessage: null, slideRole: "group", id: null } }), t.a11y = { clicked: !1 }; let i = null; function r(e) { const t = i; 0 !== t.length && (t.html(""), t.html(e)) } function n(e) { e.attr("tabIndex", "0") } function l(e) { e.attr("tabIndex", "-1") } function o(e, t) { e.attr("role", t) } function c(e, t) { e.attr("aria-roledescription", t) } function p(e, t) { e.attr("aria-label", t) } function u(e) { e.attr("aria-disabled", !0) } function h(e) { e.attr("aria-disabled", !1) } function m(e) { if (13 !== e.keyCode && 32 !== e.keyCode) return; const s = t.params.a11y, a = d(e.target); t.navigation && t.navigation.$nextEl && a.is(t.navigation.$nextEl) && (t.isEnd && !t.params.loop || t.slideNext(), t.isEnd ? r(s.lastSlideMessage) : r(s.nextSlideMessage)), t.navigation && t.navigation.$prevEl && a.is(t.navigation.$prevEl) && (t.isBeginning && !t.params.loop || t.slidePrev(), t.isBeginning ? r(s.firstSlideMessage) : r(s.prevSlideMessage)), t.pagination && a.is(U(t.params.pagination.bulletClass)) && a[0].click() } function f() { return t.pagination && t.pagination.bullets && t.pagination.bullets.length } function g() { return f() && t.params.pagination.clickable } const v = (e, t, s) => { n(e), "BUTTON" !== e[0].tagName && (o(e, "button"), e.on("keydown", m)), p(e, s), function (e, t) { e.attr("aria-controls", t) }(e, t) }, w = () => { t.a11y.clicked = !0 }, b = () => { requestAnimationFrame((() => { requestAnimationFrame((() => { t.a11y.clicked = !1 })) })) }, x = e => { if (t.a11y.clicked) return; const s = e.target.closest(`.${t.params.slideClass}`); if (!s || !t.slides.includes(s)) return; const a = t.slides.indexOf(s) === t.activeIndex, i = t.params.watchSlidesProgress && t.visibleSlides && t.visibleSlides.includes(s); a || i || (t.isHorizontal() ? t.el.scrollLeft = 0 : t.el.scrollTop = 0, t.slideTo(t.slides.indexOf(s), 0)) }, y = () => { const e = t.params.a11y; e.itemRoleDescriptionMessage && c(d(t.slides), e.itemRoleDescriptionMessage), e.slideRole && o(d(t.slides), e.slideRole); const s = t.params.loop ? t.slides.filter((e => !e.classList.contains(t.params.slideDuplicateClass))).length : t.slides.length; e.slideLabelMessage && t.slides.each(((a, i) => { const r = d(a), n = t.params.loop ? parseInt(r.attr("data-swiper-slide-index"), 10) : i; p(r, e.slideLabelMessage.replace(/\{\{index\}\}/, n + 1).replace(/\{\{slidesLength\}\}/, s)) })) }, E = () => { const e = t.params.a11y; t.$el.append(i); const s = t.$el; e.containerRoleDescriptionMessage && c(s, e.containerRoleDescriptionMessage), e.containerMessage && p(s, e.containerMessage); const a = t.$wrapperEl, r = e.id || a.attr("id") || `swiper-wrapper-${n = 16, void 0 === n && (n = 16), "x".repeat(n).replace(/x/g, (() => Math.round(16 * Math.random()).toString(16)))}`; var n; const l = t.params.autoplay && t.params.autoplay.enabled ? "off" : "polite"; var o; let d, u; o = r, a.attr("id", o), function (e, t) { e.attr("aria-live", t) }(a, l), y(), t.navigation && t.navigation.$nextEl && (d = t.navigation.$nextEl), t.navigation && t.navigation.$prevEl && (u = t.navigation.$prevEl), d && d.length && v(d, r, e.nextSlideMessage), u && u.length && v(u, r, e.prevSlideMessage), g() && t.pagination.$el.on("keydown", U(t.params.pagination.bulletClass), m), t.$el.on("focus", x, !0), t.$el.on("pointerdown", w, !0), t.$el.on("pointerup", b, !0) }; a("beforeInit", (() => { i = d(`<span class="${t.params.a11y.notificationClass}" aria-live="assertive" aria-atomic="true"></span>`) })), a("afterInit", (() => { t.params.a11y.enabled && E() })), a("slidesLengthChange snapGridLengthChange slidesGridLengthChange", (() => { t.params.a11y.enabled && y() })), a("fromEdge toEdge afterInit lock unlock", (() => { t.params.a11y.enabled && function () { if (t.params.loop || t.params.rewind || !t.navigation) return; const { $nextEl: e, $prevEl: s } = t.navigation; s && s.length > 0 && (t.isBeginning ? (u(s), l(s)) : (h(s), n(s))), e && e.length > 0 && (t.isEnd ? (u(e), l(e)) : (h(e), n(e))) }() })), a("paginationUpdate", (() => { t.params.a11y.enabled && function () { const e = t.params.a11y; f() && t.pagination.bullets.each((s => { const a = d(s); t.params.pagination.clickable && (n(a), t.params.pagination.renderBullet || (o(a, "button"), p(a, e.paginationBulletMessage.replace(/\{\{index\}\}/, a.index() + 1)))), a.is(`.${t.params.pagination.bulletActiveClass}`) ? a.attr("aria-current", "true") : a.removeAttr("aria-current") })) }() })), a("destroy", (() => { t.params.a11y.enabled && function () { let e, s; i && i.length > 0 && i.remove(), t.navigation && t.navigation.$nextEl && (e = t.navigation.$nextEl), t.navigation && t.navigation.$prevEl && (s = t.navigation.$prevEl), e && e.off("keydown", m), s && s.off("keydown", m), g() && t.pagination.$el.off("keydown", U(t.params.pagination.bulletClass), m), t.$el.off("focus", x, !0), t.$el.off("pointerdown", w, !0), t.$el.off("pointerup", b, !0) }() })) }, function (e) { let { swiper: t, extendParams: s, on: a } = e; s({ history: { enabled: !1, root: "", replaceState: !1, key: "slides", keepQuery: !1 } }); let i = !1, n = {}; const l = e => e.toString().replace(/\s+/g, "-").replace(/[^\w-]+/g, "").replace(/--+/g, "-").replace(/^-+/, "").replace(/-+$/, ""), o = e => { const t = r(); let s; s = e ? new URL(e) : t.location; const a = s.pathname.slice(1).split("/").filter((e => "" !== e)), i = a.length; return { key: a[i - 2], value: a[i - 1] } }, d = (e, s) => { const a = r(); if (!i || !t.params.history.enabled) return; let n; n = t.params.url ? new URL(t.params.url) : a.location; const o = t.slides.eq(s); let d = l(o.attr("data-history")); if (t.params.history.root.length > 0) { let s = t.params.history.root; "/" === s[s.length - 1] && (s = s.slice(0, s.length - 1)), d = `${s}/${e}/${d}` } else n.pathname.includes(e) || (d = `${e}/${d}`); t.params.history.keepQuery && (d += n.search); const c = a.history.state; c && c.value === d || (t.params.history.replaceState ? a.history.replaceState({ value: d }, null, d) : a.history.pushState({ value: d }, null, d)) }, c = (e, s, a) => { if (s) for (let i = 0, r = t.slides.length; i < r; i += 1) { const r = t.slides.eq(i); if (l(r.attr("data-history")) === s && !r.hasClass(t.params.slideDuplicateClass)) { const s = r.index(); t.slideTo(s, e, a) } } else t.slideTo(0, e, a) }, p = () => { n = o(t.params.url), c(t.params.speed, n.value, !1) }; a("init", (() => { t.params.history.enabled && (() => { const e = r(); if (t.params.history) { if (!e.history || !e.history.pushState) return t.params.history.enabled = !1, void (t.params.hashNavigation.enabled = !0); i = !0, n = o(t.params.url), (n.key || n.value) && (c(0, n.value, t.params.runCallbacksOnInit), t.params.history.replaceState || e.addEventListener("popstate", p)) } })() })), a("destroy", (() => { t.params.history.enabled && (() => { const e = r(); t.params.history.replaceState || e.removeEventListener("popstate", p) })() })), a("transitionEnd _freeModeNoMomentumRelease", (() => { i && d(t.params.history.key, t.activeIndex) })), a("slideChange", (() => { i && t.params.cssMode && d(t.params.history.key, t.activeIndex) })) }, function (e) { let { swiper: t, extendParams: s, emit: i, on: n } = e, l = !1; const o = a(), c = r(); s({ hashNavigation: { enabled: !1, replaceState: !1, watchState: !1 } }); const p = () => { i("hashChange"); const e = o.location.hash.replace("#", ""); if (e !== t.slides.eq(t.activeIndex).attr("data-hash")) { const s = t.$wrapperEl.children(`.${t.params.slideClass}[data-hash="${e}"]`).index(); if (void 0 === s) return; t.slideTo(s) } }, u = () => { if (l && t.params.hashNavigation.enabled) if (t.params.hashNavigation.replaceState && c.history && c.history.replaceState) c.history.replaceState(null, null, `#${t.slides.eq(t.activeIndex).attr("data-hash")}` || ""), i("hashSet"); else { const e = t.slides.eq(t.activeIndex), s = e.attr("data-hash") || e.attr("data-history"); o.location.hash = s || "", i("hashSet") } }; n("init", (() => { t.params.hashNavigation.enabled && (() => { if (!t.params.hashNavigation.enabled || t.params.history && t.params.history.enabled) return; l = !0; const e = o.location.hash.replace("#", ""); if (e) { const s = 0; for (let a = 0, i = t.slides.length; a < i; a += 1) { const i = t.slides.eq(a); if ((i.attr("data-hash") || i.attr("data-history")) === e && !i.hasClass(t.params.slideDuplicateClass)) { const e = i.index(); t.slideTo(e, s, t.params.runCallbacksOnInit, !0) } } } t.params.hashNavigation.watchState && d(c).on("hashchange", p) })() })), n("destroy", (() => { t.params.hashNavigation.enabled && t.params.hashNavigation.watchState && d(c).off("hashchange", p) })), n("transitionEnd _freeModeNoMomentumRelease", (() => { l && u() })), n("slideChange", (() => { l && t.params.cssMode && u() })) }, function (e) { let t, { swiper: s, extendParams: i, on: r, emit: n } = e; function l() { if (!s.size) return s.autoplay.running = !1, void (s.autoplay.paused = !1); const e = s.slides.eq(s.activeIndex); let a = s.params.autoplay.delay; e.attr("data-swiper-autoplay") && (a = e.attr("data-swiper-autoplay") || s.params.autoplay.delay), clearTimeout(t), t = p((() => { let e; s.params.autoplay.reverseDirection ? s.params.loop ? (s.loopFix(), e = s.slidePrev(s.params.speed, !0, !0), n("autoplay")) : s.isBeginning ? s.params.autoplay.stopOnLastSlide ? d() : (e = s.slideTo(s.slides.length - 1, s.params.speed, !0, !0), n("autoplay")) : (e = s.slidePrev(s.params.speed, !0, !0), n("autoplay")) : s.params.loop ? (s.loopFix(), e = s.slideNext(s.params.speed, !0, !0), n("autoplay")) : s.isEnd ? s.params.autoplay.stopOnLastSlide ? d() : (e = s.slideTo(0, s.params.speed, !0, !0), n("autoplay")) : (e = s.slideNext(s.params.speed, !0, !0), n("autoplay")), (s.params.cssMode && s.autoplay.running || !1 === e) && l() }), a) } function o() { return void 0 === t && (!s.autoplay.running && (s.autoplay.running = !0, n("autoplayStart"), l(), !0)) } function d() { return !!s.autoplay.running && (void 0 !== t && (t && (clearTimeout(t), t = void 0), s.autoplay.running = !1, n("autoplayStop"), !0)) } function c(e) { s.autoplay.running && (s.autoplay.paused || (t && clearTimeout(t), s.autoplay.paused = !0, 0 !== e && s.params.autoplay.waitForTransition ? ["transitionend", "webkitTransitionEnd"].forEach((e => { s.$wrapperEl[0].addEventListener(e, h) })) : (s.autoplay.paused = !1, l()))) } function u() { const e = a(); "hidden" === e.visibilityState && s.autoplay.running && c(), "visible" === e.visibilityState && s.autoplay.paused && (l(), s.autoplay.paused = !1) } function h(e) { s && !s.destroyed && s.$wrapperEl && e.target === s.$wrapperEl[0] && (["transitionend", "webkitTransitionEnd"].forEach((e => { s.$wrapperEl[0].removeEventListener(e, h) })), s.autoplay.paused = !1, s.autoplay.running ? l() : d()) } function m() { s.params.autoplay.disableOnInteraction ? d() : (n("autoplayPause"), c()), ["transitionend", "webkitTransitionEnd"].forEach((e => { s.$wrapperEl[0].removeEventListener(e, h) })) } function f() { s.params.autoplay.disableOnInteraction || (s.autoplay.paused = !1, n("autoplayResume"), l()) } s.autoplay = { running: !1, paused: !1 }, i({ autoplay: { enabled: !1, delay: 3e3, waitForTransition: !0, disableOnInteraction: !0, stopOnLastSlide: !1, reverseDirection: !1, pauseOnMouseEnter: !1 } }), r("init", (() => { if (s.params.autoplay.enabled) { o(); a().addEventListener("visibilitychange", u), s.params.autoplay.pauseOnMouseEnter && (s.$el.on("mouseenter", m), s.$el.on("mouseleave", f)) } })), r("beforeTransitionStart", ((e, t, a) => { s.autoplay.running && (a || !s.params.autoplay.disableOnInteraction ? s.autoplay.pause(t) : d()) })), r("sliderFirstMove", (() => { s.autoplay.running && (s.params.autoplay.disableOnInteraction ? d() : c()) })), r("touchEnd", (() => { s.params.cssMode && s.autoplay.paused && !s.params.autoplay.disableOnInteraction && l() })), r("destroy", (() => { s.$el.off("mouseenter", m), s.$el.off("mouseleave", f), s.autoplay.running && d(); a().removeEventListener("visibilitychange", u) })), Object.assign(s.autoplay, { pause: c, run: l, start: o, stop: d }) }, function (e) { let { swiper: t, extendParams: s, on: a } = e; s({ thumbs: { swiper: null, multipleActiveThumbs: !0, autoScrollOffset: 0, slideThumbActiveClass: "swiper-slide-thumb-active", thumbsContainerClass: "swiper-thumbs" } }); let i = !1, r = !1; function n() { const e = t.thumbs.swiper; if (!e || e.destroyed) return; const s = e.clickedIndex, a = e.clickedSlide; if (a && d(a).hasClass(t.params.thumbs.slideThumbActiveClass)) return; if (null == s) return; let i; if (i = e.params.loop ? parseInt(d(e.clickedSlide).attr("data-swiper-slide-index"), 10) : s, t.params.loop) { let e = t.activeIndex; t.slides.eq(e).hasClass(t.params.slideDuplicateClass) && (t.loopFix(), t._clientLeft = t.$wrapperEl[0].clientLeft, e = t.activeIndex); const s = t.slides.eq(e).prevAll(`[data-swiper-slide-index="${i}"]`).eq(0).index(), a = t.slides.eq(e).nextAll(`[data-swiper-slide-index="${i}"]`).eq(0).index(); i = void 0 === s ? a : void 0 === a ? s : a - e < e - s ? a : s } t.slideTo(i) } function l() { const { thumbs: e } = t.params; if (i) return !1; i = !0; const s = t.constructor; if (e.swiper instanceof s) t.thumbs.swiper = e.swiper, Object.assign(t.thumbs.swiper.originalParams, { watchSlidesProgress: !0, slideToClickedSlide: !1 }), Object.assign(t.thumbs.swiper.params, { watchSlidesProgress: !0, slideToClickedSlide: !1 }); else if (m(e.swiper)) { const a = Object.assign({}, e.swiper); Object.assign(a, { watchSlidesProgress: !0, slideToClickedSlide: !1 }), t.thumbs.swiper = new s(a), r = !0 } return t.thumbs.swiper.$el.addClass(t.params.thumbs.thumbsContainerClass), t.thumbs.swiper.on("tap", n), !0 } function o(e) { const s = t.thumbs.swiper; if (!s || s.destroyed) return; const a = "auto" === s.params.slidesPerView ? s.slidesPerViewDynamic() : s.params.slidesPerView; let i = 1; const r = t.params.thumbs.slideThumbActiveClass; if (t.params.slidesPerView > 1 && !t.params.centeredSlides && (i = t.params.slidesPerView), t.params.thumbs.multipleActiveThumbs || (i = 1), i = Math.floor(i), s.slides.removeClass(r), s.params.loop || s.params.virtual && s.params.virtual.enabled) for (let e = 0; e < i; e += 1)s.$wrapperEl.children(`[data-swiper-slide-index="${t.realIndex + e}"]`).addClass(r); else for (let e = 0; e < i; e += 1)s.slides.eq(t.realIndex + e).addClass(r); const n = t.params.thumbs.autoScrollOffset, l = n && !s.params.loop; if (t.realIndex !== s.realIndex || l) { let i, r, o = s.activeIndex; if (s.params.loop) { s.slides.eq(o).hasClass(s.params.slideDuplicateClass) && (s.loopFix(), s._clientLeft = s.$wrapperEl[0].clientLeft, o = s.activeIndex); const e = s.slides.eq(o).prevAll(`[data-swiper-slide-index="${t.realIndex}"]`).eq(0).index(), a = s.slides.eq(o).nextAll(`[data-swiper-slide-index="${t.realIndex}"]`).eq(0).index(); i = void 0 === e ? a : void 0 === a ? e : a - o == o - e ? s.params.slidesPerGroup > 1 ? a : o : a - o < o - e ? a : e, r = t.activeIndex > t.previousIndex ? "next" : "prev" } else i = t.realIndex, r = i > t.previousIndex ? "next" : "prev"; l && (i += "next" === r ? n : -1 * n), s.visibleSlidesIndexes && s.visibleSlidesIndexes.indexOf(i) < 0 && (s.params.centeredSlides ? i = i > o ? i - Math.floor(a / 2) + 1 : i + Math.floor(a / 2) - 1 : i > o && s.params.slidesPerGroup, s.slideTo(i, e ? 0 : void 0)) } } t.thumbs = { swiper: null }, a("beforeInit", (() => { const { thumbs: e } = t.params; e && e.swiper && (l(), o(!0)) })), a("slideChange update resize observerUpdate", (() => { o() })), a("setTransition", ((e, s) => { const a = t.thumbs.swiper; a && !a.destroyed && a.setTransition(s) })), a("beforeDestroy", (() => { const e = t.thumbs.swiper; e && !e.destroyed && r && e.destroy() })), Object.assign(t.thumbs, { init: l, update: o }) }, function (e) { let { swiper: t, extendParams: s, emit: a, once: i } = e; s({ freeMode: { enabled: !1, momentum: !0, momentumRatio: 1, momentumBounce: !0, momentumBounceRatio: 1, momentumVelocityRatio: 1, sticky: !1, minimumVelocity: .02 } }), Object.assign(t, { freeMode: { onTouchStart: function () { const e = t.getTranslate(); t.setTranslate(e), t.setTransition(0), t.touchEventsData.velocities.length = 0, t.freeMode.onTouchEnd({ currentPos: t.rtl ? t.translate : -t.translate }) }, onTouchMove: function () { const { touchEventsData: e, touches: s } = t; 0 === e.velocities.length && e.velocities.push({ position: s[t.isHorizontal() ? "startX" : "startY"], time: e.touchStartTime }), e.velocities.push({ position: s[t.isHorizontal() ? "currentX" : "currentY"], time: u() }) }, onTouchEnd: function (e) { let { currentPos: s } = e; const { params: r, $wrapperEl: n, rtlTranslate: l, snapGrid: o, touchEventsData: d } = t, c = u() - d.touchStartTime; if (s < -t.minTranslate()) t.slideTo(t.activeIndex); else if (s > -t.maxTranslate()) t.slides.length < o.length ? t.slideTo(o.length - 1) : t.slideTo(t.slides.length - 1); else { if (r.freeMode.momentum) { if (d.velocities.length > 1) { const e = d.velocities.pop(), s = d.velocities.pop(), a = e.position - s.position, i = e.time - s.time; t.velocity = a / i, t.velocity /= 2, Math.abs(t.velocity) < r.freeMode.minimumVelocity && (t.velocity = 0), (i > 150 || u() - e.time > 300) && (t.velocity = 0) } else t.velocity = 0; t.velocity *= r.freeMode.momentumVelocityRatio, d.velocities.length = 0; let e = 1e3 * r.freeMode.momentumRatio; const s = t.velocity * e; let c = t.translate + s; l && (c = -c); let p, h = !1; const m = 20 * Math.abs(t.velocity) * r.freeMode.momentumBounceRatio; let f; if (c < t.maxTranslate()) r.freeMode.momentumBounce ? (c + t.maxTranslate() < -m && (c = t.maxTranslate() - m), p = t.maxTranslate(), h = !0, d.allowMomentumBounce = !0) : c = t.maxTranslate(), r.loop && r.centeredSlides && (f = !0); else if (c > t.minTranslate()) r.freeMode.momentumBounce ? (c - t.minTranslate() > m && (c = t.minTranslate() + m), p = t.minTranslate(), h = !0, d.allowMomentumBounce = !0) : c = t.minTranslate(), r.loop && r.centeredSlides && (f = !0); else if (r.freeMode.sticky) { let e; for (let t = 0; t < o.length; t += 1)if (o[t] > -c) { e = t; break } c = Math.abs(o[e] - c) < Math.abs(o[e - 1] - c) || "next" === t.swipeDirection ? o[e] : o[e - 1], c = -c } if (f && i("transitionEnd", (() => { t.loopFix() })), 0 !== t.velocity) { if (e = l ? Math.abs((-c - t.translate) / t.velocity) : Math.abs((c - t.translate) / t.velocity), r.freeMode.sticky) { const s = Math.abs((l ? -c : c) - t.translate), a = t.slidesSizesGrid[t.activeIndex]; e = s < a ? r.speed : s < 2 * a ? 1.5 * r.speed : 2.5 * r.speed } } else if (r.freeMode.sticky) return void t.slideToClosest(); r.freeMode.momentumBounce && h ? (t.updateProgress(p), t.setTransition(e), t.setTranslate(c), t.transitionStart(!0, t.swipeDirection), t.animating = !0, n.transitionEnd((() => { t && !t.destroyed && d.allowMomentumBounce && (a("momentumBounce"), t.setTransition(r.speed), setTimeout((() => { t.setTranslate(p), n.transitionEnd((() => { t && !t.destroyed && t.transitionEnd() })) }), 0)) }))) : t.velocity ? (a("_freeModeNoMomentumRelease"), t.updateProgress(c), t.setTransition(e), t.setTranslate(c), t.transitionStart(!0, t.swipeDirection), t.animating || (t.animating = !0, n.transitionEnd((() => { t && !t.destroyed && t.transitionEnd() })))) : t.updateProgress(c), t.updateActiveIndex(), t.updateSlidesClasses() } else { if (r.freeMode.sticky) return void t.slideToClosest(); r.freeMode && a("_freeModeNoMomentumRelease") } (!r.freeMode.momentum || c >= r.longSwipesMs) && (t.updateProgress(), t.updateActiveIndex(), t.updateSlidesClasses()) } } } }) }, function (e) { let t, s, a, { swiper: i, extendParams: r } = e; r({ grid: { rows: 1, fill: "column" } }), i.grid = { initSlides: e => { const { slidesPerView: r } = i.params, { rows: n, fill: l } = i.params.grid; s = t / n, a = Math.floor(e / n), t = Math.floor(e / n) === e / n ? e : Math.ceil(e / n) * n, "auto" !== r && "row" === l && (t = Math.max(t, r * n)) }, updateSlide: (e, r, n, l) => { const { slidesPerGroup: o, spaceBetween: d } = i.params, { rows: c, fill: p } = i.params.grid; let u, h, m; if ("row" === p && o > 1) { const s = Math.floor(e / (o * c)), a = e - c * o * s, i = 0 === s ? o : Math.min(Math.ceil((n - s * c * o) / c), o); m = Math.floor(a / i), h = a - m * i + s * o, u = h + m * t / c, r.css({ "-webkit-order": u, order: u }) } else "column" === p ? (h = Math.floor(e / c), m = e - h * c, (h > a || h === a && m === c - 1) && (m += 1, m >= c && (m = 0, h += 1))) : (m = Math.floor(e / s), h = e - m * s); r.css(l("margin-top"), 0 !== m ? d && `${d}px` : "") }, updateWrapperSize: (e, s, a) => { const { spaceBetween: r, centeredSlides: n, roundLengths: l } = i.params, { rows: o } = i.params.grid; if (i.virtualSize = (e + r) * t, i.virtualSize = Math.ceil(i.virtualSize / o) - r, i.$wrapperEl.css({ [a("width")]: `${i.virtualSize + r}px` }), n) { s.splice(0, s.length); const e = []; for (let t = 0; t < s.length; t += 1) { let a = s[t]; l && (a = Math.floor(a)), s[t] < i.virtualSize + s[0] && e.push(a) } s.push(...e) } } } }, function (e) { let { swiper: t } = e; Object.assign(t, { appendSlide: K.bind(t), prependSlide: Z.bind(t), addSlide: Q.bind(t), removeSlide: J.bind(t), removeAllSlides: ee.bind(t) }) }, function (e) { let { swiper: t, extendParams: s, on: a } = e; s({ fadeEffect: { crossFade: !1, transformEl: null } }), te({ effect: "fade", swiper: t, on: a, setTranslate: () => { const { slides: e } = t, s = t.params.fadeEffect; for (let a = 0; a < e.length; a += 1) { const e = t.slides.eq(a); let i = -e[0].swiperSlideOffset; t.params.virtualTranslate || (i -= t.translate); let r = 0; t.isHorizontal() || (r = i, i = 0); const n = t.params.fadeEffect.crossFade ? Math.max(1 - Math.abs(e[0].progress), 0) : 1 + Math.min(Math.max(e[0].progress, -1), 0); se(s, e).css({ opacity: n }).transform(`translate3d(${i}px, ${r}px, 0px)`) } }, setTransition: e => { const { transformEl: s } = t.params.fadeEffect; (s ? t.slides.find(s) : t.slides).transition(e), ae({ swiper: t, duration: e, transformEl: s, allSlides: !0 }) }, overwriteParams: () => ({ slidesPerView: 1, slidesPerGroup: 1, watchSlidesProgress: !0, spaceBetween: 0, virtualTranslate: !t.params.cssMode }) }) }, function (e) { let { swiper: t, extendParams: s, on: a } = e; s({ cubeEffect: { slideShadows: !0, shadow: !0, shadowOffset: 20, shadowScale: .94 } }); const i = (e, t, s) => { let a = s ? e.find(".swiper-slide-shadow-left") : e.find(".swiper-slide-shadow-top"), i = s ? e.find(".swiper-slide-shadow-right") : e.find(".swiper-slide-shadow-bottom"); 0 === a.length && (a = d(`<div class="swiper-slide-shadow-${s ? "left" : "top"}"></div>`), e.append(a)), 0 === i.length && (i = d(`<div class="swiper-slide-shadow-${s ? "right" : "bottom"}"></div>`), e.append(i)), a.length && (a[0].style.opacity = Math.max(-t, 0)), i.length && (i[0].style.opacity = Math.max(t, 0)) }; te({ effect: "cube", swiper: t, on: a, setTranslate: () => { const { $el: e, $wrapperEl: s, slides: a, width: r, height: n, rtlTranslate: l, size: o, browser: c } = t, p = t.params.cubeEffect, u = t.isHorizontal(), h = t.virtual && t.params.virtual.enabled; let m, f = 0; p.shadow && (u ? (m = s.find(".swiper-cube-shadow"), 0 === m.length && (m = d('<div class="swiper-cube-shadow"></div>'), s.append(m)), m.css({ height: `${r}px` })) : (m = e.find(".swiper-cube-shadow"), 0 === m.length && (m = d('<div class="swiper-cube-shadow"></div>'), e.append(m)))); for (let e = 0; e < a.length; e += 1) { const t = a.eq(e); let s = e; h && (s = parseInt(t.attr("data-swiper-slide-index"), 10)); let r = 90 * s, n = Math.floor(r / 360); l && (r = -r, n = Math.floor(-r / 360)); const d = Math.max(Math.min(t[0].progress, 1), -1); let c = 0, m = 0, g = 0; s % 4 == 0 ? (c = 4 * -n * o, g = 0) : (s - 1) % 4 == 0 ? (c = 0, g = 4 * -n * o) : (s - 2) % 4 == 0 ? (c = o + 4 * n * o, g = o) : (s - 3) % 4 == 0 && (c = -o, g = 3 * o + 4 * o * n), l && (c = -c), u || (m = c, c = 0); const v = `rotateX(${u ? 0 : -r}deg) rotateY(${u ? r : 0}deg) translate3d(${c}px, ${m}px, ${g}px)`; d <= 1 && d > -1 && (f = 90 * s + 90 * d, l && (f = 90 * -s - 90 * d)), t.transform(v), p.slideShadows && i(t, d, u) } if (s.css({ "-webkit-transform-origin": `50% 50% -${o / 2}px`, "transform-origin": `50% 50% -${o / 2}px` }), p.shadow) if (u) m.transform(`translate3d(0px, ${r / 2 + p.shadowOffset}px, ${-r / 2}px) rotateX(90deg) rotateZ(0deg) scale(${p.shadowScale})`); else { const e = Math.abs(f) - 90 * Math.floor(Math.abs(f) / 90), t = 1.5 - (Math.sin(2 * e * Math.PI / 360) / 2 + Math.cos(2 * e * Math.PI / 360) / 2), s = p.shadowScale, a = p.shadowScale / t, i = p.shadowOffset; m.transform(`scale3d(${s}, 1, ${a}) translate3d(0px, ${n / 2 + i}px, ${-n / 2 / a}px) rotateX(-90deg)`) } const g = c.isSafari || c.isWebView ? -o / 2 : 0; s.transform(`translate3d(0px,0,${g}px) rotateX(${t.isHorizontal() ? 0 : f}deg) rotateY(${t.isHorizontal() ? -f : 0}deg)`), s[0].style.setProperty("--swiper-cube-translate-z", `${g}px`) }, setTransition: e => { const { $el: s, slides: a } = t; a.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e), t.params.cubeEffect.shadow && !t.isHorizontal() && s.find(".swiper-cube-shadow").transition(e) }, recreateShadows: () => { const e = t.isHorizontal(); t.slides.each((t => { const s = Math.max(Math.min(t.progress, 1), -1); i(d(t), s, e) })) }, getEffectParams: () => t.params.cubeEffect, perspective: () => !0, overwriteParams: () => ({ slidesPerView: 1, slidesPerGroup: 1, watchSlidesProgress: !0, resistanceRatio: 0, spaceBetween: 0, centeredSlides: !1, virtualTranslate: !0 }) }) }, function (e) { let { swiper: t, extendParams: s, on: a } = e; s({ flipEffect: { slideShadows: !0, limitRotation: !0, transformEl: null } }); const i = (e, s, a) => { let i = t.isHorizontal() ? e.find(".swiper-slide-shadow-left") : e.find(".swiper-slide-shadow-top"), r = t.isHorizontal() ? e.find(".swiper-slide-shadow-right") : e.find(".swiper-slide-shadow-bottom"); 0 === i.length && (i = ie(a, e, t.isHorizontal() ? "left" : "top")), 0 === r.length && (r = ie(a, e, t.isHorizontal() ? "right" : "bottom")), i.length && (i[0].style.opacity = Math.max(-s, 0)), r.length && (r[0].style.opacity = Math.max(s, 0)) }; te({ effect: "flip", swiper: t, on: a, setTranslate: () => { const { slides: e, rtlTranslate: s } = t, a = t.params.flipEffect; for (let r = 0; r < e.length; r += 1) { const n = e.eq(r); let l = n[0].progress; t.params.flipEffect.limitRotation && (l = Math.max(Math.min(n[0].progress, 1), -1)); const o = n[0].swiperSlideOffset; let d = -180 * l, c = 0, p = t.params.cssMode ? -o - t.translate : -o, u = 0; t.isHorizontal() ? s && (d = -d) : (u = p, p = 0, c = -d, d = 0), n[0].style.zIndex = -Math.abs(Math.round(l)) + e.length, a.slideShadows && i(n, l, a); const h = `translate3d(${p}px, ${u}px, 0px) rotateX(${c}deg) rotateY(${d}deg)`; se(a, n).transform(h) } }, setTransition: e => { const { transformEl: s } = t.params.flipEffect; (s ? t.slides.find(s) : t.slides).transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e), ae({ swiper: t, duration: e, transformEl: s }) }, recreateShadows: () => { const e = t.params.flipEffect; t.slides.each((s => { const a = d(s); let r = a[0].progress; t.params.flipEffect.limitRotation && (r = Math.max(Math.min(s.progress, 1), -1)), i(a, r, e) })) }, getEffectParams: () => t.params.flipEffect, perspective: () => !0, overwriteParams: () => ({ slidesPerView: 1, slidesPerGroup: 1, watchSlidesProgress: !0, spaceBetween: 0, virtualTranslate: !t.params.cssMode }) }) }, function (e) { let { swiper: t, extendParams: s, on: a } = e; s({ coverflowEffect: { rotate: 50, stretch: 0, depth: 100, scale: 1, modifier: 1, slideShadows: !0, transformEl: null } }), te({ effect: "coverflow", swiper: t, on: a, setTranslate: () => { const { width: e, height: s, slides: a, slidesSizesGrid: i } = t, r = t.params.coverflowEffect, n = t.isHorizontal(), l = t.translate, o = n ? e / 2 - l : s / 2 - l, d = n ? r.rotate : -r.rotate, c = r.depth; for (let e = 0, t = a.length; e < t; e += 1) { const t = a.eq(e), s = i[e], l = (o - t[0].swiperSlideOffset - s / 2) / s, p = "function" == typeof r.modifier ? r.modifier(l) : l * r.modifier; let u = n ? d * p : 0, h = n ? 0 : d * p, m = -c * Math.abs(p), f = r.stretch; "string" == typeof f && -1 !== f.indexOf("%") && (f = parseFloat(r.stretch) / 100 * s); let g = n ? 0 : f * p, v = n ? f * p : 0, w = 1 - (1 - r.scale) * Math.abs(p); Math.abs(v) < .001 && (v = 0), Math.abs(g) < .001 && (g = 0), Math.abs(m) < .001 && (m = 0), Math.abs(u) < .001 && (u = 0), Math.abs(h) < .001 && (h = 0), Math.abs(w) < .001 && (w = 0); const b = `translate3d(${v}px,${g}px,${m}px) rotateX(${h}deg) rotateY(${u}deg) scale(${w})`; if (se(r, t).transform(b), t[0].style.zIndex = 1 - Math.abs(Math.round(p)), r.slideShadows) { let e = n ? t.find(".swiper-slide-shadow-left") : t.find(".swiper-slide-shadow-top"), s = n ? t.find(".swiper-slide-shadow-right") : t.find(".swiper-slide-shadow-bottom"); 0 === e.length && (e = ie(r, t, n ? "left" : "top")), 0 === s.length && (s = ie(r, t, n ? "right" : "bottom")), e.length && (e[0].style.opacity = p > 0 ? p : 0), s.length && (s[0].style.opacity = -p > 0 ? -p : 0) } } }, setTransition: e => { const { transformEl: s } = t.params.coverflowEffect; (s ? t.slides.find(s) : t.slides).transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e) }, perspective: () => !0, overwriteParams: () => ({ watchSlidesProgress: !0 }) }) }, function (e) { let { swiper: t, extendParams: s, on: a } = e; s({ creativeEffect: { transformEl: null, limitProgress: 1, shadowPerProgress: !1, progressMultiplier: 1, perspective: !0, prev: { translate: [0, 0, 0], rotate: [0, 0, 0], opacity: 1, scale: 1 }, next: { translate: [0, 0, 0], rotate: [0, 0, 0], opacity: 1, scale: 1 } } }); const i = e => "string" == typeof e ? e : `${e}px`; te({ effect: "creative", swiper: t, on: a, setTranslate: () => { const { slides: e, $wrapperEl: s, slidesSizesGrid: a } = t, r = t.params.creativeEffect, { progressMultiplier: n } = r, l = t.params.centeredSlides; if (l) { const e = a[0] / 2 - t.params.slidesOffsetBefore || 0; s.transform(`translateX(calc(50% - ${e}px))`) } for (let s = 0; s < e.length; s += 1) { const a = e.eq(s), o = a[0].progress, d = Math.min(Math.max(a[0].progress, -r.limitProgress), r.limitProgress); let c = d; l || (c = Math.min(Math.max(a[0].originalProgress, -r.limitProgress), r.limitProgress)); const p = a[0].swiperSlideOffset, u = [t.params.cssMode ? -p - t.translate : -p, 0, 0], h = [0, 0, 0]; let m = !1; t.isHorizontal() || (u[1] = u[0], u[0] = 0); let f = { translate: [0, 0, 0], rotate: [0, 0, 0], scale: 1, opacity: 1 }; d < 0 ? (f = r.next, m = !0) : d > 0 && (f = r.prev, m = !0), u.forEach(((e, t) => { u[t] = `calc(${e}px + (${i(f.translate[t])} * ${Math.abs(d * n)}))` })), h.forEach(((e, t) => { h[t] = f.rotate[t] * Math.abs(d * n) })), a[0].style.zIndex = -Math.abs(Math.round(o)) + e.length; const g = u.join(", "), v = `rotateX(${h[0]}deg) rotateY(${h[1]}deg) rotateZ(${h[2]}deg)`, w = c < 0 ? `scale(${1 + (1 - f.scale) * c * n})` : `scale(${1 - (1 - f.scale) * c * n})`, b = c < 0 ? 1 + (1 - f.opacity) * c * n : 1 - (1 - f.opacity) * c * n, x = `translate3d(${g}) ${v} ${w}`; if (m && f.shadow || !m) { let e = a.children(".swiper-slide-shadow"); if (0 === e.length && f.shadow && (e = ie(r, a)), e.length) { const t = r.shadowPerProgress ? d * (1 / r.limitProgress) : d; e[0].style.opacity = Math.min(Math.max(Math.abs(t), 0), 1) } } const y = se(r, a); y.transform(x).css({ opacity: b }), f.origin && y.css("transform-origin", f.origin) } }, setTransition: e => { const { transformEl: s } = t.params.creativeEffect; (s ? t.slides.find(s) : t.slides).transition(e).find(".swiper-slide-shadow").transition(e), ae({ swiper: t, duration: e, transformEl: s, allSlides: !0 }) }, perspective: () => t.params.creativeEffect.perspective, overwriteParams: () => ({ watchSlidesProgress: !0, virtualTranslate: !t.params.cssMode }) }) }, function (e) { let { swiper: t, extendParams: s, on: a } = e; s({ cardsEffect: { slideShadows: !0, transformEl: null, rotate: !0, perSlideRotate: 2, perSlideOffset: 8 } }), te({ effect: "cards", swiper: t, on: a, setTranslate: () => { const { slides: e, activeIndex: s } = t, a = t.params.cardsEffect, { startTranslate: i, isTouched: r } = t.touchEventsData, n = t.translate; for (let l = 0; l < e.length; l += 1) { const o = e.eq(l), d = o[0].progress, c = Math.min(Math.max(d, -4), 4); let p = o[0].swiperSlideOffset; t.params.centeredSlides && !t.params.cssMode && t.$wrapperEl.transform(`translateX(${t.minTranslate()}px)`), t.params.centeredSlides && t.params.cssMode && (p -= e[0].swiperSlideOffset); let u = t.params.cssMode ? -p - t.translate : -p, h = 0; const m = -100 * Math.abs(c); let f = 1, g = -a.perSlideRotate * c, v = a.perSlideOffset - .75 * Math.abs(c); const w = t.virtual && t.params.virtual.enabled ? t.virtual.from + l : l, b = (w === s || w === s - 1) && c > 0 && c < 1 && (r || t.params.cssMode) && n < i, x = (w === s || w === s + 1) && c < 0 && c > -1 && (r || t.params.cssMode) && n > i; if (b || x) { const e = (1 - Math.abs((Math.abs(c) - .5) / .5)) ** .5; g += -28 * c * e, f += -.5 * e, v += 96 * e, h = -25 * e * Math.abs(c) + "%" } if (u = c < 0 ? `calc(${u}px + (${v * Math.abs(c)}%))` : c > 0 ? `calc(${u}px + (-${v * Math.abs(c)}%))` : `${u}px`, !t.isHorizontal()) { const e = h; h = u, u = e } const y = c < 0 ? "" + (1 + (1 - f) * c) : "" + (1 - (1 - f) * c), E = `\n translate3d(${u}, ${h}, ${m}px)\n rotateZ(${a.rotate ? g : 0}deg)\n scale(${y})\n `; if (a.slideShadows) { let e = o.find(".swiper-slide-shadow"); 0 === e.length && (e = ie(a, o)), e.length && (e[0].style.opacity = Math.min(Math.max((Math.abs(c) - .5) / .5, 0), 1)) } o[0].style.zIndex = -Math.abs(Math.round(d)) + e.length; se(a, o).transform(E) } }, setTransition: e => { const { transformEl: s } = t.params.cardsEffect; (s ? t.slides.find(s) : t.slides).transition(e).find(".swiper-slide-shadow").transition(e), ae({ swiper: t, duration: e, transformEl: s }) }, perspective: () => !0, overwriteParams: () => ({ watchSlidesProgress: !0, virtualTranslate: !t.params.cssMode }) }) }]; return V.use(re), V })); </script> <script> var sliderThumb = new Swiper(".home-slider-thumbs", { loop: false, slidesPerView: 6, }) var slider = new Swiper(".home-slider", { loop: false, autoHeight: true, navigation: { nextEl: ".home-slider .swiper-button-next", prevEl: ".home-slider .swiper-button-prev", }, breakpoints: { 768: { autoHeight: false } }, thumbs: { swiper: sliderThumb, }, }) </script> </body> </html> <!-- Dynamic page generated in 0.984 seconds. --> <!-- Cached page generated by WP-Super-Cache on 2025-02-21 12:49:52 --> <!-- Compression = gzip -->