diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d56272d --- /dev/null +++ b/.gitignore @@ -0,0 +1,40 @@ +# Build and Release Folders +bin-debug/ +bin-release/ +[Oo]bj/ +[Bb]in/ +wp-admin/ +wp-includes/ +wp-content/languages/ +wp-content/mu-plugins/ +wp-content/plugins/ +wp-content/uploads/ +wp-content/themes/backup +wp-content/cache + +.idea +.agent +.claude +.codex +.cursor +.gemini +.github +.idea +.kiro +.roo +.shared +.vscode + + +# Other files and folders +.settings/ + +# Executables +*.swf +*.air +*.ipa +*.apk +.idea +# Project files, i.e. `.project`, `.actionScriptProperties` and `.flexProperties` +# should NOT be excluded as they contain compiler settings and other important +# information for Eclipse / Flash Builder. diff --git a/.htaccess b/.htaccess new file mode 100644 index 0000000..d1a309b --- /dev/null +++ b/.htaccess @@ -0,0 +1,11 @@ + +RewriteEngine On +RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] +RewriteBase / +RewriteRule ^index\.php$ - [L] +RewriteCond %{REQUEST_FILENAME} !-f +RewriteCond %{REQUEST_FILENAME} !-d +RewriteRule . /index.php [L] + + +# END WordPress \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index 4bda3b7..0000000 --- a/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# official-website-abroad - -海外网站 \ No newline at end of file diff --git a/fix-site-url.php b/fix-site-url.php new file mode 100644 index 0000000..b894fa5 --- /dev/null +++ b/fix-site-url.php @@ -0,0 +1,83 @@ +query( + $wpdb->prepare( + "UPDATE {$wpdb->posts} + SET post_content = REPLACE(post_content, %s, %s)", + $old_url, + $local_url + ) +); + +if ($count > 0) { + echo "已修复 {$count} 篇文章中的URL链接\n\n"; +} else { + echo "文章内容URL无需修复\n\n"; +} + +// 6. 修复选项表中的其他URL +$options_to_fix = [ + 'upload_path', + 'upload_url_path', + 'widget_text', + 'sidebars_widgets', +]; + +foreach ($options_to_fix as $option_name) { + $option_value = get_option($option_name); + if ($option_value && is_string($option_value) && strpos($option_value, $old_url) !== false) { + $new_value = str_replace($old_url, $local_url, $option_value); + update_option($option_name, $new_value); + echo "已修复选项: {$option_name}\n"; + } +} + +echo "\n=== 修复完成! ===\n"; +echo "现在可以访问: http://localhost:82wp-admin\n"; +echo "请使用原有的管理员账号登录\n"; diff --git a/googleb9a847eee76af35d.html b/googleb9a847eee76af35d.html new file mode 100644 index 0000000..c12ef40 --- /dev/null +++ b/googleb9a847eee76af35d.html @@ -0,0 +1 @@ +google-site-verification: googleb9a847eee76af35d.html \ No newline at end of file diff --git a/index.php b/index.php new file mode 100644 index 0000000..cc2a532 --- /dev/null +++ b/index.php @@ -0,0 +1,17 @@ +get_error_code() ) ) { + status_header( 404 ); +} elseif ( is_wp_error( $result ) ) { + $error_code = $result->get_error_code(); + + if ( ! in_array( $error_code, $valid_error_codes, true ) ) { + status_header( 400 ); + } +} + +nocache_headers(); + +// Fix for page title. +$wp_query->is_404 = false; + +/** + * Fires before the Site Activation page is loaded. + * + * @since 3.0.0 + */ +do_action( 'activate_header' ); + +/** + * Adds an action hook specific to this page. + * + * Fires on {@see 'wp_head'}. + * + * @since MU (3.0.0) + */ +function do_activate_header() { + /** + * Fires within the `` section of the Site Activation page. + * + * Fires on the {@see 'wp_head'} action. + * + * @since 3.0.0 + */ + do_action( 'activate_wp_head' ); +} +add_action( 'wp_head', 'do_activate_header' ); + +/** + * Loads styles specific to this page. + * + * @since MU (3.0.0) + */ +function wpmu_activate_stylesheet() { + ?> + + + +
+
+ + +

+
+

+ +
+

+

+ +

+
+ + get_error_code(), $valid_error_codes, true ) ) { + $signup = $result->get_error_data(); + ?> +

+ '; + if ( '' === $signup->domain . $signup->path ) { + printf( + /* translators: 1: Login URL, 2: Username, 3: User email address, 4: Lost password URL. */ + __( 'Your account has been activated. You may now log in to the site using your chosen username of “%2$s”. Please check your email inbox at %3$s for your password and login instructions. If you do not receive an email, please check your junk or spam folder. If you still do not receive an email within an hour, you can reset your password.' ), + esc_url( network_site_url( $blog_details->path . 'wp-login.php', 'login' ) ), + esc_html( $signup->user_login ), + esc_html( $signup->user_email ), + esc_url( wp_lostpassword_url() ) + ); + } else { + printf( + /* translators: 1: Site URL, 2: Username, 3: User email address, 4: Lost password URL. */ + __( 'Your site at %1$s is active. You may now log in to your site using your chosen username of “%2$s”. Please check your email inbox at %3$s for your password and login instructions. If you do not receive an email, please check your junk or spam folder. If you still do not receive an email within an hour, you can reset your password.' ), + sprintf( '%1$s', esc_url( $signup->domain . $blog_details->path ) ), + esc_html( $signup->user_login ), + esc_html( $signup->user_email ), + esc_url( wp_lostpassword_url() ) + ); + } + echo '

'; + } elseif ( null === $result || is_wp_error( $result ) ) { + ?> +

+ +

get_error_message() ); ?>

+ + +

+ +
+

user_login ); ?>

+

+
+ + +

+ View your site or Log in' ), esc_url( $url ), esc_url( $login_url ) ); + ?> +

+ +

+ Log in or go back to the homepage.' ), + esc_url( network_site_url( $blog_details->path . 'wp-login.php', 'login' ) ), + esc_url( network_home_url( $blog_details->path ) ) + ); + ?> +

+ +
+
+get_error_data(); + if ( ! empty( $data ) ) { + wp_die( + '

' . $comment->get_error_message() . '

', + __( 'Comment Submission Failure' ), + array( + 'response' => $data, + 'back_link' => true, + ) + ); + } else { + exit; + } +} + +$user = wp_get_current_user(); +$cookies_consent = ( isset( $_POST['wp-comment-cookies-consent'] ) ); + +/** + * Fires after comment cookies are set. + * + * @since 3.4.0 + * @since 4.9.6 The `$cookies_consent` parameter was added. + * + * @param WP_Comment $comment Comment object. + * @param WP_User $user Comment author's user object. The user may not exist. + * @param bool $cookies_consent Comment author's consent to store cookies. + */ +do_action( 'set_comment_cookies', $comment, $user, $cookies_consent ); + +$location = empty( $_POST['redirect_to'] ) ? get_comment_link( $comment ) : $_POST['redirect_to'] . '#comment-' . $comment->comment_ID; + +// If user didn't consent to cookies, add specific query arguments to display the awaiting moderation message. +if ( ! $cookies_consent && 'unapproved' === wp_get_comment_status( $comment ) && ! empty( $comment->comment_author_email ) ) { + $location = add_query_arg( + array( + 'unapproved' => $comment->comment_ID, + 'moderation-hash' => wp_hash( $comment->comment_date_gmt ), + ), + $location + ); +} + +/** + * Filters the location URI to send the commenter after posting. + * + * @since 2.0.5 + * + * @param string $location The 'redirect_to' URI sent via $_POST. + * @param WP_Comment $comment Comment object. + */ +$location = apply_filters( 'comment_post_redirect', $location, $comment ); + +wp_safe_redirect( $location ); +exit; diff --git a/wp-config-sample.php b/wp-config-sample.php new file mode 100644 index 0000000..7752dc9 --- /dev/null +++ b/wp-config-sample.php @@ -0,0 +1,102 @@ +U[yzWEWnx)uoWpSVyn8rsrNmC>$l#.$Fw5|nA+he~Xy6wd#I|Plj3u+)-lQeH:LJmAKA7paw`$:g/,VA`K{Q=}dFYr~-zUv]'); +define('LOGGED_IN_KEY', '/DCK24H2U{>eri&W)1;}Cnv:8Q|]RpUnymRQ6x~}3|Q[wy0yC+|CaZ@-Y=btZD'); +define('AUTH_SALT', '8WA$moce-{uA$+*84z}8bS);Ei;hedt13a+tpR:/}UNA{0u!^.Hw,SbE,)a(0*d>Zki62CD_HAmY=77sA^AD%HgJ::rXt<'); +define('NONCE_SALT', 'fs/WpNr<8yo6iRDS&hgru2i0w@K5tC/0T6gxk(f1}XsxfnBX@|pid^ + + +
+
+
+ + +
+
+
+ + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/archive-faq.php b/wp-content/themes/nenghui-energy-theme-4/archive-faq.php new file mode 100644 index 0000000..133e168 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/archive-faq.php @@ -0,0 +1,19 @@ + + + +
+
+
+ + + +
+
+
+ + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/archive.php b/wp-content/themes/nenghui-energy-theme-4/archive.php new file mode 100644 index 0000000..13b5513 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/archive.php @@ -0,0 +1,29 @@ + + + +
+
+
+ term_id, 'full'); + if ($category_image_url) { + $banner_bg_image = $category_image_url; + } + } + echo do_shortcode('[nenghui_banner_title bg_image="' . esc_url($banner_bg_image) . '" title="NEWS" description="Nenghui has been awarded excellent honors in the industry and is committed to providing prompt service for all of our current and potential customers." overlay_opacity="0.5"]'); + ?> + + +
+
+
+ + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/css/admin.css b/wp-content/themes/nenghui-energy-theme-4/assets/css/admin.css new file mode 100644 index 0000000..2fed05d --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/assets/css/admin.css @@ -0,0 +1,1758 @@ +@charset "UTF-8"; +/** +* 后台样式 +*/ + +/* 字体声明 - 优先使用主题文件夹中的字体 */ +@font-face { + font-family: 'NotoSans'; + src: url('../fonts/NotoSans-Regular.ttf') format('truetype'); + font-weight: normal; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'NotoSans'; + src: url('../fonts/NotoSans-Bold.ttf') format('truetype'); + font-weight: bold; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'NotoSans'; + src: url('../fonts/NotoSans-Italic.ttf') format('truetype'); + font-weight: normal; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'NotoSans'; + src: url('../fonts/NotoSans-BoldItalic.ttf') format('truetype'); + font-weight: bold; + font-style: italic; + font-display: swap; +} +.one-text{ + border-left: 5px solid #fd9710; + padding-left: 15px; +} +.welcome-panel-header-image svg { + margin-top: 25px!important; +} +#wpadminbar .quicklinks .ab-top-secondary>li { + background: #fd9710!important; + padding-left: 30px!important; +} +#wpadminbar .quicklinks .ab-top-secondary>li { + background: #fd9710!important; +} +li#wp-admin-bar-site-name { + background: #fd9710!important; +} +li#collapse-menu { + display: none!important; +} +.bg { + animation: slide 3s ease-in-out infinite alternate; + background-image:linear-gradient(-60deg, #20b8ff 50%, #20a1ff 50%); + bottom: 0; + left: -50%; + opacity: .5; + position: fixed; + right: -50%; + top: 0; + z-index: -1; +} +.bg2 { + animation-direction: alternate-reverse; + animation-duration: 4s; +} +.bg3 { + animation-duration: 5s; +} +#login { + background-color: rgba(255, 255, 255, .8); + border-radius: .25em; + box-shadow: 0 0 .25em rgba(0, 0, 0, .25); + position: fixed; + transform: translate(-50%, -50%); +} +@keyframes slide { + 0% { + transform: translateX(-25%); + } + 100% { + transform: translateX(25%); + } +} + + +body { + margin: 0; + width: 100%; + height: 100vh; + /*background-repeat: repeat;*/ + /*background-size:cover;*/ + font-family: 'NotoSans', Nunito, "Microsoft YaHei UI", "Microsoft YaHei", "PingFang SC", "Helvetica Neue", Helvetica, Arial, sans-serif !important; +} +a { + color: #000000; + font-size: 14px; +} +a:focus { + outline:none!important; + box-shadow:none!important +} +a:hover,a:active,a:focus { + color:#fd9710 +} +#media-upload a.del-link:hover,div.dashboard-widget-submit input:hover,.subsubsub a:hover,.subsubsub a.current:hover { + color:#fd9710 +} +input[type=checkbox]:checked:before { + color:#fd9710 +} +input[type=radio]:checked:before { + background:#fd9710 +} +.wp-core-ui input[type="reset"]:hover,.wp-core-ui input[type="reset"]:active { + color:#0096dd +} +.wp-core-ui .button-primary { + background:-webkit-gradient(linear,left top,right top,from(#fd9710),to(#20b8ff)); + background:-webkit-linear-gradient(left,#fd9710,#20b8ff); + background:linear-gradient(90deg,#fda900,#ffbd43); + text-shadow:none; + color:#fff; + cursor:pointer; + -webkit-transition:all ease-in .3s; + transition:all ease-in .3s; + box-shadow:none; + text-shadow:none +} +.wp-core-ui .button,.wp-core-ui .button-primary,.wp-core-ui .button-secondary { + border-width:0px +} +.wp-core-ui .button-primary:hover,.wp-core-ui .button-primary:focus { + background:-webkit-gradient(linear,left top,right top,from(#fd9710),to(#20b8ff)); + background:-webkit-linear-gradient(left,#fd9710,#20b8ff); + background:linear-gradient(90deg,#fda900,#ffbd43); + color:#fff; + box-shadow:none +} +#screen-meta-links .show-settings{border:none;} +.wp-core-ui .button-primary:focus { + box-shadow:none +} +.wp-core-ui .button-primary:active,.wp-core-ui .button-primary.active,.wp-core-ui .button-primary.active:focus,.wp-core-ui .button-primary.active:hover { + box-shadow:none +} +.wp-core-ui .button-primary[disabled],.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary.button-primary-disabled,.wp-core-ui .button-primary.disabled { + color:#c7cfd1 !important; + background:#fd9710!important; + border-color:#20b8ff!important; + text-shadow:none !important +} +.wp-core-ui .button-primary.button-hero { + box-shadow:none !important +} +.wp-core-ui .button-primary.button-hero:active { + box-shadow:none !important +} +.wp-core-ui .wp-ui-primary { + color:#404e67; + background-color:#e5e5e5 +} +.wp-core-ui .wp-ui-text-primary { + color:#e5e5e5 +} +.wp-core-ui .wp-ui-highlight { + color:#fff; + background-color:#888 +} +.wp-core-ui .wp-ui-text-highlight { + color:#888 +} +.wp-core-ui .wp-ui-notification { + color:#fff; + background-color:#fd9710 +} +.wp-core-ui .wp-ui-text-notification { + color:#fd9710 +} +.wp-core-ui .wp-ui-text-icon { + color:#999 +} +.theme-name { + height: 45px!important; +} +.folded{ + transition: 2s!important; + -webkit-transition: 2s!important; /* Safari */ +} +.wrap { + margin: 10px 20px 0 25px !important; +} +.wrap .add-new-h2:hover,.wrap .page-title-action:hover { + color:#404e67; + background-color:#e5e5e5 +} +.view-switch a.current:before { + color:#e5e5e5 +} +.view-switch a:hover:before { + color:#fd9710 +} +#adminmenuback,#adminmenuwrap,#adminmenu { + background:#202020 +} +#wpcontent,#wpfooter { + margin-left:240px +} +#adminmenu a { + color:#dcdcdc +} +ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after { + right:15px; + border:solid 8px transparent; + content:" "; + height:0; + width:0; + position:absolute; + pointer-events:none; + border-right-color:#f1f1f1; + top:50%; + margin-top:-8px +} +#adminmenu div.wp-menu-image:before { + color:#dcdcdc +} +#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub > a.menu-top,#adminmenu li > a.menu-top:focus { + color:#dcdcdc; + background: #161616; +} +#adminmenu,#adminmenu .wp-submenu,#adminmenuback,#adminmenuwrap { + width:240px +} +#adminmenu .wp-submenu-head,#adminmenu a.menu-top { + font-size:14px; + font-weight:400; + line-height:18px; + text-align:left; + padding:5px 15px +} +#adminmenu .wp-submenu { + list-style:none; + position:absolute; + top:-1000em; + left:240px; + overflow:visible; + word-wrap:break-word +} +#adminmenu .wp-not-current-submenu li>a,.folded #adminmenu .wp-has-current-submenu li>a { + padding-right:16px; + padding-left:14px; + padding:5px 16px 5px 14px; + transition:all .1s ease-in-out,outline 0s; + font-size:12px +} +#adminmenu .wp-has-current-submenu ul>li>a,.folded #adminmenu li.menu-top .wp-submenu>li>a { + font-size:12px; + line-height:18px; + text-align:left; + padding:8px 15px 8px 50px +} +#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after { + border:solid transparent; + content:" "; + height:0; + width:0; + position:absolute; + pointer-events:none; + border-width:8px; + top:15px; + z-index:10000 +} +#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub > a.menu-top div.wp-menu-image:before { + color:#ccc +} +.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover { + background-color:#f5f5f5; + border-bottom-color:#f5f5f5 +} +#adminmenu .wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus + .wp-submenu { + background:#272727 +} +#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after { + border-right-color:#404e67 +} +#adminmenu .wp-submenu .wp-submenu-head { + color:#686868 +} +#adminmenu .wp-submenu a,#adminmenu .wp-has-current-submenu .wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus + .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a { + color:#dcdcdc +} +#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover { + color:#fd9710!important; +} +#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a { + color:#fd9710!important; +} +#adminmenu .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus { + color:#fd9710 +} +ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu > li.current > a.current:after { + border-right-color:#f5f5f5 +} +#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,.folded #adminmenu li.current.menu-top { + color: #ffffff!important; + background:#34425a +} +li.wp-has-current-submenu:before { + border-left-color:#fda900!important; + border-left-style:solid; + border-left-width:3px; + content:" "; + height:100%; + left:0; + position:absolute; + top:0; + z-index:9 +} +#collapse-button:hover, #collapse-button:focus { + color: #fea515!important; +} +#adminmenu li.wp-has-current-submenu div.wp-menu-image:before,#adminmenu a.current:hover div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before,#adminmenu li:hover div.wp-menu-image:before,#adminmenu li a:focus div.wp-menu-image:before,#adminmenu li.opensub div.wp-menu-image:before,.ie8 #adminmenu li.opensub div.wp-menu-image:before { + color:#fff; +} +#adminmenu .awaiting-mod,#adminmenu .update-plugins { + color:#fff; + border-radius:4px; + width:20px; + background:linear-gradient(to right,#fe5d70,#fe909d); + position:absolute; + right:30px +} +#adminmenu li.current a .awaiting-mod,#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li:hover a .awaiting-mod,#adminmenu li.menu-top:hover > a .update-plugins { + color:#fff; + border-radius:4px; + width:20px; + background:linear-gradient(to right,#fe5d70,#fe909d); + position:absolute; + right:30px +} +#collapse-button:hover,#collapse-button:focus { + color:#fd9710; +} +#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top { + background: #fda20d!important; +} +#wpadminbar { + color:#404e67; + /* background:#fff; */ + height:52px; + box-shadow: 0 0 11px rgb(0 0 0 / 60%); +} +#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar > #wp-toolbar span.ab-label,#wpadminbar > #wp-toolbar span.noticon { + color: #ffffff; +} +#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:before,#wpadminbar .ab-item:after { + color:#fff +} +#wpadminbar:not(.mobile) .ab-top-menu > li:hover > .ab-item,#wpadminbar:not(.mobile) .ab-top-menu > li > .ab-item:focus,#wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus,#wpadminbar.nojs .ab-top-menu > li.menupop:hover > .ab-item,#wpadminbar .ab-top-menu > li.menupop.hover > .ab-item { + color: #ffffff; + background: #fd9710; +} +#wpadminbar:not(.mobile) > #wp-toolbar li:hover span.ab-label,#wpadminbar:not(.mobile) > #wp-toolbar li.hover span.ab-label,#wpadminbar:not(.mobile) > #wp-toolbar a:focus span.ab-label { + color:#fd9710 +} +#wpadminbar:not(.mobile) li:hover .ab-icon:before,#wpadminbar:not(.mobile) li:hover .ab-item:before,#wpadminbar:not(.mobile) li:hover .ab-item:after,#wpadminbar:not(.mobile) li:hover #adminbarsearch:before { + color: #fffdfd; +} +#wpadminbar .menupop .ab-sub-wrapper { + background:#fff +} +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu { + background:#f7f7f7 +} +#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar.nojs .quicklinks .menupop:hover ul li a { + color:#686868 +} +#wpadminbar .quicklinks li .blavatar,#wpadminbar .menupop .menupop > .ab-item:before { + color:#999 +} +#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover > a,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li .ab-item:focus:before,#wpadminbar li .ab-item:focus .ab-icon:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li #adminbarsearch.adminbar-focused:before { + color:#fd9710 +} +#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar .quicklinks li a:focus .blavatar,#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover > a .blavatar,#wpadminbar .menupop .menupop > .ab-item:hover:before,#wpadminbar.mobile .quicklinks .ab-icon:before,#wpadminbar.mobile .quicklinks .ab-item:before { + color:#fd9710 +} +#wpadminbar.mobile .quicklinks .hover .ab-icon:before,#wpadminbar.mobile .quicklinks .hover .ab-item:before { + color:#999 +} +#wpadminbar #adminbarsearch:before { + color:#999 +} +#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus { + color:#404e67; + background:#f7f7f7 +} +#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + border-color:#f7f7f7; + background-color:#f7f7f7; +} +#wpadminbar #wp-admin-bar-user-info .display-name { + color:#404e67 +} +#wpadminbar #wp-admin-bar-user-info a:hover .display-name { + color:#fd9710 +} +#wpadminbar #wp-admin-bar-user-info .username { + color:#686868 +} +.wp-pointer .wp-pointer-content h3 { + background-color:#fd9710; + border-color:#0490b3 +} +.wp-pointer .wp-pointer-content h3:before { + color:#fd9710 +} +.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-top .wp-pointer-arrow-inner,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner { + border-bottom-color:#fd9710 +} +.components-button.is-primary { + background:-webkit-gradient(linear,left top,right top,from(#fd9710),to(#20b8ff)); + background:-webkit-linear-gradient(left,#fd9710,#20b8ff); + background:linear-gradient(90deg,#fda900,#ffbd43); + -webkit-box-shadow:0 3px 5px rgba(32,160,255,.5); + box-shadow:0 3px 5px rgba(32,160,255,.5); + border-color:rgba(32,163,255,0) rgba(32,177,255,0) rgba(32,179,255,0); + text-decoration:none; + text-shadow:0 -1px 1px #ffffff00,1px 0 1px #ffffff00,0 1px 1px #ffffff00,-1px 0 1px #ffffff00 +} +.components-button.is-primary:hover,.components-button.is-primary:focus { + background:-webkit-gradient(linear,left top,right top,from(#fd9710),to(#20b8ff)); + background:-webkit-linear-gradient(left,#fd9710,#20b8ff); + background:linear-gradient(90deg,#fda900,#ffbd43); + -webkit-box-shadow:0 3px 5px rgba(32,160,255,.5); + box-shadow:0 3px 5px rgba(32,160,255,.5); + border-color:rgba(32,163,255,0) rgba(32,177,255,0) rgba(32,179,255,0); + text-decoration:none; + text-shadow:0 -1px 1px #ffffff00,1px 0 1px #ffffff00,0 1px 1px #ffffff00,-1px 0 1px #ffffff00 +} +.components-button.is-default { + color:#555; + border-color:#ccc; + background:#f7f7f7; + box-shadow:inset 0 -1px 0 rgba(204,204,204,0); + vertical-align:top +} +.components-button.is-default:hover,.components-button.is-default:focus { + color:#555; + border-color:#ccc; + background:#f7f7f7; + box-shadow:inset 0 -1px 0 rgba(204,204,204,0); + vertical-align:top +} +.media-item .bar,.media-progress-bar div { + background-color:#fd9710; +} +.details.attachment { + box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #fd9710; +} +.attachment.details .check { + background-color:#fd9710;; + box-shadow:0 0 0 1px #fff,0 0 0 2px #fd9710 +} +.media-selection .attachment.selection.details .thumbnail { + box-shadow:0 0 0 1px #fff,0 0 0 3px #fd9710 +} +.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme a:hover:after,.theme-browser .theme.add-new-theme a:focus:after { + background:#fd9710; +} +.theme-browser .theme.add-new-theme a:hover span:after,.theme-browser .theme.add-new-theme a:focus span:after { + color:#fd9710; +} +.theme-section.current,.theme-filter.current { + border-bottom-color:#e5e5e5 +} +body.more-filters-opened .more-filters { + color:#404e67; + background-color:#e5e5e5 +} +body.more-filters-opened .more-filters:before { + color:#404e67 +} +body.more-filters-opened .more-filters:hover,body.more-filters-opened .more-filters:focus { + background-color:#888; + color:#fff +} +body.more-filters-opened .more-filters:hover:before,body.more-filters-opened .more-filters:focus:before { + color:#fff +} +.plugin-update-tr.active td,.plugins .active th.check-column { + border-left:4px solid #fd9710 +} +.js.plugins-php .search-box .wp-filter-search:hover,.js.plugins-php .search-box .wp-filter-search:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +.widgets-chooser li.widgets-chooser-selected { + background-color:#888; + color:#fff +} +.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before { + color:#fff +} +#dashboard-widgets form .textarea-wrap textarea:hover,#dashboard-widgets form .textarea-wrap textarea:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#dashboard-widgets form .input-text-wrap input:hover,#dashboard-widgets form .input-text-wrap input:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +div#wp-responsive-toggle a:before { + color:#999 +} +.wp-responsive-open div#wp-responsive-toggle a { + border-color:transparent; + background:#888 +} +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background:#fff +} +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before { + color:#999 +} +.mce-container.mce-menu .mce-menu-item:hover,.mce-container.mce-menu .mce-menu-item.mce-selected,.mce-container.mce-menu .mce-menu-item:focus,.mce-container.mce-menu .mce-menu-item-normal.mce-active,.mce-container.mce-menu .mce-menu-item-preview.mce-active { + background:#fd9710 +} +#wpadminbar .ab-top-menu > li:hover > .ab-item,#wpadminbar .ab-top-menu > li.hover > .ab-item,#wpadminbar > #wp-toolbar > #wp-admin-bar-root-default li:hover span.ab-label,#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary li.hover span.ab-label,#wpadminbar .ab-top-menu > li > .ab-item:focus,#wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus,#wpadminbar.nojs .ab-top-menu > li.menupop:hover > .ab-item,#wpadminbar .ab-top-menu > li.menupop.hover > .ab-item { + color:#ffffff +} +.theme-section.current,.theme-filter.current { + border-bottom-color:#fd9710 +} +html.wp-toolbar { + padding-top:52px; + box-sizing:border-box +} +#wpadminbar .quicklinks>ul>li>a { + padding:10px 15px +} +#wpadminbar .quicklinks>ul>li#wp-admin-bar-my-account>a { + padding:10px 40px +} +#wpadminbar #wp-admin-bar-wp-logo>.ab-item { + padding:10px 15px; + display: none; +} +.folded #adminmenu, .folded #adminmenu li.menu-top, .folded #adminmenuback, .folded #adminmenuwrap { + width: 70px !important; +} +li#wp-admin-bar-custom_menu { + width:240px; + background:#28374a !important; + background-image:url(./images/here_logo.png) !important; + background-size: auto 50px; + +} +#wpadminbar:not(.mobile) .ab-top-menu > li#wp-admin-bar-custom_menu:hover > .ab-item,#wpadminbar:not(.mobile) .ab-top-menu > li#wp-admin-bar-custom_menu > .ab-item:focus,#wpadminbar.nojq .quicklinks .ab-top-menu > li#wp-admin-bar-custom_menu > .ab-item:focus,#wpadminbar.nojs .ab-top-menu > li#wp-admin-bar-custom_menu.menupop:hover > .ab-item,#wpadminbar .ab-top-menu > li#wp-admin-bar-custom_menu.menupop.hover > .ab-item { + background:#28374a !important; + background-image:url(./images/here_logo.png) !important +} +#wpadminbar #wp-admin-bar-my-account.with-avatar>.ab-empty-item img,#wpadminbar #wp-admin-bar-my-account.with-avatar>a img { + width:auto; + height:30px; + padding:0; + border:1px solid #82878c; + background:#eee; + line-height:24px; + vertical-align:middle; + margin:0; + float:none; + display:inline; + border-radius:6px; + left: 25px; + position:absolute +} +#wp-admin-bar-user-info .avatar { + display:none +} +#wpadminbar .ab-top-secondary .menupop .ab-sub-wrapper { + right:30px; + left:auto; + margin-top:15px; + box-shadow:0 2px 30px 6px rgba(0,0,0,.1); + border-radius:5px +} +ul#wp-admin-bar-top-secondary li .ab-sub-wrapper:before { + content:''; + width:0; + height:0; + border:10px solid transparent; + border-bottom-color:#fff; + position:absolute; + right:30px; + bottom:100%; + margin-top:20px +} +ul#wp-admin-bar-root-default li .ab-sub-wrapper:before { + content:''; + width:0; + height:0; + border:10px solid transparent; + border-bottom-color:#fff; + position:absolute; + left:20px; + bottom:100%; + margin-top:20px +} +#adminmenu .wp-not-current-submenu .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu { + min-width:160px; + width:auto; + margin-left:10px; + border-radius:5px; + box-shadow:0 2px 30px 6px rgba(0,0,0,.1) +} +#wpadminbar .ab-top-menu>.menupop>.ab-sub-wrapper { + min-width:100%; + margin-top:15px; + border-radius:5px; + box-shadow:0 2px 30px 6px rgba(0,0,0,.1) +} +#wpadminbar .quicklinks .ab-empty-item,#wpadminbar .quicklinks a,#wpadminbar .shortlink-input { + height:32px; + display:block; + padding:2px 20px; + margin:0 +} +#wpadminbar .quicklinks .menupop ul li .ab-item,#wpadminbar .quicklinks .menupop ul li a strong,#wpadminbar .quicklinks .menupop.hover ul li .ab-item,#wpadminbar .shortlink-input,#wpadminbar.nojs .quicklinks .menupop:hover ul li .ab-item { + line-height:26px; + height:26px; + white-space:nowrap; + min-width:100px +} +#wpadminbar #wp-admin-bar-my-account.with-avatar #wp-admin-bar-user-actions>li { + margin:10px 20px +} +li#wp-admin-bar-user-info { + display:none +} +.welcome-panel { + position:relative; + overflow:auto; + margin:16px 0; + padding:23px 10px 0; + background:#fff; + font-size:13px; + line-height:2.1em; + border-radius:5px; + -webkit-box-shadow:0 1px 20px 0 rgba(69,90,100,.08); + box-shadow:0 1px 20px 0 rgba(69,90,100,.08); + border:none; + margin-bottom:30px +} +.postbox { + position:relative; + min-width:255px; + background:#fff; + border-radius:5px; + -webkit-box-shadow:0 1px 20px 0 rgba(69,90,100,.08); + box-shadow:0 1px 20px 0 rgba(69,90,100,.08); + border:none; + margin-bottom:30px; + padding:10px 10px +} +.metabox-holder .postbox>h3,.metabox-holder .stuffbox>h3,.metabox-holder h2.hndle,.metabox-holder h3.hndle { + font-size:14px; + padding:8px 12px; + margin:0; + line-height:1.4; + background-color:transparent; + border-bottom:none +} +#title-wrap #title-prompt-text { + font-size:1.1em; + padding:5px 8px; + line-height:27px +} +#title-wrap #title { + border-radius:4px; + font-size:1.3em; + outline:none; + display:block; + width:100%; + padding:.5rem .75rem; + line-height:1.25; + color:#495057; + background-color:#fff; + background-image:none; + background-clip:padding-box; + transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s +} +input[type=checkbox],input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=radio],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea { + border:1px solid #ddd; + box-shadow:none; + background-color:#fff; + color:#32373c; + outline:none; + transition:50ms border-color ease-in-out; + border-radius:4px +} +input[type=checkbox]:focus,input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=radio]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus,select:focus,textarea:focus { + border-color:#fd9710; + box-shadow:none; + border-radius:4px; + outline:none +} +@media (min-width:782px) { + .edit-post-header { + left:240px; + top:52px +} +.edit-post-layout__content { + position:fixed; + bottom:0; + left:0; + right:0; + top:88px; + min-height:calc(100% - 88px); + height:auto; + margin-left:240px +} +.edit-post-sidebar { + top:108px +} +.components-notice-list { + left:240px +} +.edit-post-layout .components-notice-list { + position:fixed; + top:106px +} +}.wp-core-ui .button,.wp-core-ui .button-primary,.wp-core-ui .button-secondary { + display:inline-block; + font-size:13px; + line-height:28px; + height:28px; + padding:0 10px 1px; + border-style:solid; + -webkit-appearance:none; + border-radius:3px; + white-space:nowrap +} +.notice,div.error,div.updated { + background:#fff; + border-left:none; + box-shadow:none; + margin:5px 15px 2px; + padding:1px 12px; + border-radius:5px +} +.notice-success,div.updated { + border-color:#fd9710; + border:1px solid #fd9710; + color:#fd9710 +} +input,button,select,textarea { + outline:none!important; + box-shadow:none!important +} +.login #login_error,.login .message,.login .success { + border-left:none; + padding:3px 12px; + margin-left:0; + margin-bottom:20px; + background-color:#fff; + box-shadow:none; + border-radius:5px; + border:1px solid; + width:250px; + margin:0 30px; + position:absolute; + bottom:10px +} +#contextual-help-link-wrap,#screen-options-link-wrap { + float:right; + height:28px; + margin:0 0 0 6px; + border:1px solid #efefef; + border-top:none; + background:#fff; + box-shadow:none; + border-radius:0 0 5px 5px +} +#screen-meta { + display:none; + margin:0 20px -1px 0; + position:relative; + background-color:#fff; + border:1px solid #efefef; + border-top:none; + box-shadow:none; + border-radius:0 0 5px 5px +} +#collapse-button .collapse-button-icon { + display:block; + position:absolute; + top:0; + left:15px +} +#collapse-button .collapse-button-label { + display:block; + position:absolute; + top:8px; + left:15px +} +.login form .input,.login input[type=text]:focus { + background:#fff; + border-color:#fd9710; + -webkit-transition:.25s; + transition:.25s +} +form#loginform p { + padding:10px 0 +} +#login { + width:900px; + margin:auto; + background:#fff; + border-radius:10px; + height:500px; + box-shadow:0 10px 13px rgba(31,45,61,.1),0 0 1px rgba(31,45,61,.1); + padding:0; + position:absolute; + left:50%; + top:50%; + transform:translate(-50%,-50%); + background-image:none,url(./images/login_bg.png); + background-repeat:no-repeat; + transition:0.5s; +} +@media screen and (max-height:550px) { + #login { + padding:0 + } +} +@media screen and (max-width:782px) { + wpadminbar .quicklinks>ul>li>a { + padding:0 +} +#wpadminbar #wp-admin-bar-wp-logo>.ab-item { + padding:0 +} +#wpadminbar .quicklinks>ul>li>a { + padding:0 +} +.auto-fold #wpcontent { + position:relative; + margin-left:0; + padding-left:10px; + transition:0.5s +} +.auto-fold #adminmenu,.auto-fold #adminmenuback,.auto-fold #adminmenuwrap { + position:absolute; + width:190px; + z-index:100; + transition:0.5s +} +.auto-fold #adminmenu li.menu-top { + width:100%; + transition:0.5s +} +.auto-fold #adminmenu .wp-has-current-submenu a.menu-top:focus+.wp-submenu,.auto-fold #adminmenu a.menu-top:focus+.wp-submenu { + position:relative; + left:-1px; + right:0; + top:0; + transition:0.5s +} +.auto-fold #adminmenu .selected .wp-submenu { + display:block; + margin-top:0!important; + transition:0.5s +} +}@media (min-width:782px) { + body.auto-fold .edit-post-layout__content { + margin-left:66px +} +.auto-fold .edit-post-header { + left:66px +} +}@media (min-width:960px) { + .auto-fold .edit-post-header { + left:240px +} +}@media (min-width:782px) and (min-width:960px) { + body.auto-fold .edit-post-layout__content { + margin-left:240px +} +}.el-input-group--prepend .el-input__inner,.el-input-group__append:hover,.el-input-group--prepend .el-input__inner,.el-input-group__append:focus { + background:#fff; + -webkit-transition:.25s; + transition:.25s +} +.el-switch.is-checked .el-switch__core { + background:-webkit-gradient(linear,left top,right top,from(#fd9710),to(#20b8ff)); + background:-webkit-linear-gradient(left,#fd9710,#20b8ff); + background:linear-gradient(90deg,#fda900,#ffbd43) +} +#footer-thankyou { + font-style:initial +} +.editor-post-title__block:not(.is-focus-mode).is-selected .editor-post-title__input { + border-color:rgba(52,66,90,0) +} +.block-editor-inserter__search:hover,.block-editor-inserter__search:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +.form-field textarea:hover,.form-field textarea:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#user_login.input:hover,#user_login.input:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#user_pass.input:hover,#user_pass.input:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +.el-input--small .el-input__inner:hover,.el-input--small .el-input__inner:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#post-search-input:hover,#post-search-input:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#tag-search-input:hover,#tag-search-input:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#tag-name:hover,#tag-name:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#tag-slug:hover,#tag-slug:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#media-search-input.search:hover,#media-search-input.search:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#comment-search-input:hover,#comment-search-input:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#wp-filter-search-input.wp-filter-search:hover,#wp-filter-search-input.wp-filter-search:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +.filter-count .count,.title-count { + background:-webkit-gradient(linear,left top,right top,from(#fd9710),to(#20b8ff)); + background:-webkit-linear-gradient(left,#fd9710,#20b8ff); + background:linear-gradient(90deg,#fda900,#ffbd43) +} +.wrap .wp-heading-inline+.page-title-action { + color:#fff; + background:-webkit-gradient(linear,left top,right top,from(#fd9710),to(#20b8ff)); + background:-webkit-linear-gradient(left,#fd9710,#20b8ff); + background:linear-gradient(90deg,#fda900,#ffbd43) +} +.wrap .wp-heading-inline+.page-title-action:hover,.wrap .wp-heading-inline+.page-title-action:focus { + color:#fff; + border:1px solid rgba(255,255,255,0); + background:-webkit-gradient(linear,left top,right top,from(#fd9710),to(#20b8ff)); + background:-webkit-linear-gradient(left,#fd9710,#20b8ff); + background:linear-gradient(90deg,#fda900,#ffbd43) +} +.wrap .add-new-h2,.wrap .add-new-h2:active,.wrap .page-title-action,.wrap .page-title-action:active { + border:1px solid rgba(255,255,255,0) +} +#_customize-input-blogname:hover,#_customize-input-blogname:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#_customize-input-blogdescription:hover,#_customize-input-blogdescription:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#publish-settings { + background:-webkit-gradient(linear,left top,right top,from(#20b8ff),to(#fd9710)); + background:-webkit-linear-gradient(left,#20b8ff,#fd9710); + background:linear-gradient(90deg,#20b8ff,#fd9710) +} +.customize-control input.menu-name-field:hover,.customize-control input.menu-name-field:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +.wp-customizer .menu-item-settings input[type=text]:hover,.wp-customizer .menu-item-settings input[type=text]:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#widget-pf_user_info-widget-2-name:hover,#widget-pf_user_info-widget-2-name:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#widget-pf_user_info-widget-2-description:hover,#widget-pf_user_info-widget-2-description:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#widget-pf_user_info-widget-2-img:hover,#widget-pf_user_info-widget-2-img:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#widget-pf_tag_cloud-widget-2-title:hover,#widget-pf_tag_cloud-widget-2-title:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#widget-pf_microblog-widget-2-title:hover,#widget-pf_microblog-widget-2-title:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#widget-pf_microblog-widget-2-number.tiny-text:hover,#widget-pf_microblog-widget-2-number.tiny-text:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#widget-pf_microblog-widget-2-title:hover,#widget-pf_microblog-widget-2-title:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#widget-wordpressrunninginfostat-2-title:hover,#widget-wordpressrunninginfostat-2-title:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#widget-wordpressrunninginfostat-2-establish_time:hover,#widget-wordpressrunninginfostat-2-establish_time:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#widget-pf_hotposts-widget-2-title:hover,#widget-pf_hotposts-widget-2-title:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#widget-pf_hotposts-widget-2-number.tiny-text:hover,#widget-pf_hotposts-widget-2-number.tiny-text:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#widget-pf_hotposts-widget-3-title:hover,#widget-pf_hotposts-widget-3-title:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#widget-pf_hotposts-widget-3-number.tiny-text:hover,#widget-pf_hotposts-widget-3-number.tiny-text:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +.widgets-chooser .widgets-chooser-selected .widgets-chooser-button { + background:-webkit-gradient(linear,left top,right top,from(#fd9710),to(#20b8ff)); + background:-webkit-linear-gradient(left,#fd9710,#20b8ff); + background:linear-gradient(90deg,#fda900,#ffbd43) +} +#menu-name:hover,#menu-name:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +.form-invalid input,.form-invalid input:focus,.form-invalid select,.form-invalid select:focus { + border-color:#f5f5f5 !important; + box-shadow:0 0 0 3px rgba(32,160,255,.2) +} +#quick-search-posttype-page.quick-search:hover,#quick-search-posttype-page.quick-search:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#quick-search-posttype-post.quick-search:hover,#quick-search-posttype-post.quick-search:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#quick-search-posttype-music.quick-search:hover,#quick-search-posttype-music.quick-search:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#quick-search-posttype-gallery.quick-search:hover,#quick-search-posttype-gallery.quick-search:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#quick-search-posttype-faq.quick-search:hover,#quick-search-posttype-faq.quick-search:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#quick-search-posttype-favlinks.quick-search:hover,#quick-search-posttype-favlinks.quick-search:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#quick-search-posttype-microblog.quick-search:hover,#quick-search-posttype-microblog.quick-search:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#custom-menu-item-url.code.menu-item-textbox:hover,#custom-menu-item-url.code.menu-item-textbox:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#custom-menu-item-name.regular-text.menu-item-textbox:hover,#custom-menu-item-name.regular-text.menu-item-textbox:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#quick-search-taxonomy-category.quick-search:hover,#quick-search-taxonomy-category.quick-search:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#quick-search-taxonomy-gallery-category.quick-search:hover,#quick-search-taxonomy-gallery-category.quick-search:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#quick-search-taxonomy-favlinks-category.quick-search:hover,#quick-search-taxonomy-favlinks-category.quick-search:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +.el-textarea__inner:hover,.el-textarea__inner:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +.wp-filter-search:hover,.wp-filter-search:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +.filter-links .current { + border-bottom:4px solid #fd9710 +} +#user-search-input:hover,#user-search-input:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#user_login:hover,#user_login:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#email:hover,#email:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#first_name:hover,#first_name:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#last_name:hover,#last_name:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#url.code:hover,#url.code:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#nickname.regular-text:hover,#nickname.regular-text:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#description:hover,#description:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#blogname.regular-text:hover,#blogname.regular-text:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#blogdescription.regular-text:hover,#blogdescription.regular-text:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#siteurl.regular-text.code:hover,#siteurl.regular-text.code:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#home.regular-text.code:hover,#home.regular-text.code:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#date_format_custom.small-text:hover,#date_format_custom.small-text:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#time_format_custom.small-text:hover,#time_format_custom.small-text:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#mailserver_url.regular-text.code:hover,#mailserver_url.regular-text.code:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#mailserver_login.regular-text.ltr:hover,#mailserver_login.regular-text.ltr:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#mailserver_pass.regular-text.ltr:hover,#mailserver_pass.regular-text.ltr:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#ping_sites.large-text.code:hover,#ping_sites.large-text.code:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#mailserver_port.small-text:hover,#mailserver_port.small-text:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#posts_per_page.small-text:hover,#posts_per_page.small-text:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#posts_per_rss.small-text:hover,#posts_per_rss.small-text:focus{ + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#close_comments_days_old.small-text:hover,#close_comments_days_old.small-text:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#comments_per_page.small-text:hover,#comments_per_page.small-text:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#comment_max_links.small-text:hover,#comment_max_links.small-text:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#moderation_keys.large-text.code:hover,#moderation_keys.large-text.code:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#blacklist_keys.large-text.code:hover,#blacklist_keys.large-text.code:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#thumbnail_size_w.small-text:hover,#thumbnail_size_w.small-text:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#thumbnail_size_h.small-text:hover,#thumbnail_size_h.small-text:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#medium_size_w.small-text:hover,#medium_size_w.small-text:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#medium_size_h.small-text:hover,#medium_size_h.small-text:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#large_size_w.small-text:hover,#large_size_w.small-text:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#large_size_h.small-text:hover,#large_size_h.small-text:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#upload_path.regular-text.code:hover,#upload_path.regular-text.code:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#upload_url_path.regular-text.code:hover,#upload_url_path.regular-text.code:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#permalink_structure.regular-text.code:hover,#permalink_structure.regular-text.code:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#category_base.regular-text.code:hover,#category_base.regular-text.code:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#tag_base.regular-text.code:hover,#tag_base.regular-text.code:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#new_admin_email.regular-text.ltr:hover,#new_admin_email.regular-text.ltr:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +.el-button.el-button--primary.el-button--small:hover { + background-color: #fd9710; + border-color: #fd9710; +} +#doaction.button.action { + color: #fff; + background:-webkit-gradient(linear,left top,right top,from(#fd9710),to(#20b8ff)); + background:-webkit-linear-gradient(left,#fd9710,#20b8ff); + background:linear-gradient(90deg,#fda900,#ffbd43) +} +#post-query-submit.button { + color: #fff; + background:-webkit-gradient(linear,left top,right top,from(#fd9710),to(#20b8ff)); + background:-webkit-linear-gradient(left,#fd9710,#20b8ff); + background:linear-gradient(90deg,#fda900,#ffbd43) +} +#search-submit.button { + color: #fff; + background:-webkit-gradient(linear,left top,right top,from(#fd9710),to(#20b8ff)); + background:-webkit-linear-gradient(left,#fd9710,#20b8ff); + background:linear-gradient(90deg,#fda900,#ffbd43) +} +#show-settings-link.button.show-settings { + color: #fff; + background:-webkit-gradient(linear,left top,right top,from(#fd9710),to(#20b8ff)); + background:-webkit-linear-gradient(left,#fd9710,#20b8ff); + background:linear-gradient(90deg,#fda900,#ffbd43); + border-bottom-right-radius:3px; + border-bottom-left-radius:3px; +} +#show-settings-link.button.show-settings::after { + color: #fff; + border-bottom-right-radius:3px; + border-bottom-left-radius:3px +} +#doaction2.button.action { + color: #fff; + background:-webkit-gradient(linear,left top,right top,from(#fd9710),to(#20b8ff)); + background:-webkit-linear-gradient(left,#fd9710,#20b8ff); + background:linear-gradient(90deg,#fda900,#ffbd43) +} +#major-publishing-actions { + border-top: 1px solid #f5f5f5; + background: #fff; +} +#post-preview.preview.button { + color: #fff; + background:-webkit-gradient(linear,left top,right top,from(#fd9710),to(#20b8ff)); + background:-webkit-linear-gradient(left,#fd9710,#20b8ff); + background:linear-gradient(90deg,#fda900,#ffbd43) +} +.install-now.button { + color: #fff; + background:-webkit-gradient(linear,left top,right top,from(#fd9710),to(#20b8ff)); + background:-webkit-linear-gradient(left,#fd9710,#20b8ff); + background:linear-gradient(90deg,#fda900,#ffbd43) +} +.install-now.button:hover,.install-now.button:focus { + color: #fff; + background:-webkit-gradient(linear,left top,right top,from(#fd9710),to(#20b8ff)); + background:-webkit-linear-gradient(left,#fd9710,#20b8ff); + background:linear-gradient(90deg,#fda900,#ffbd43) +} +#current-page-selector.current-page:hover,#current-page-selector.current-page:focus { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +.components-button.editor-post-publish-button.is-button.is-default.is-primary.is-large { + color: #fff; + background:-webkit-gradient(linear,left top,right top,from(#fd9710),to(#20b8ff)); + background:-webkit-linear-gradient(left,#fd9710,#20b8ff); + background:linear-gradient(90deg,#fda900,#ffbd43) +} +.components-button.editor-post-preview.is-button.is-default.is-large { + color: #fff; + background:-webkit-gradient(linear,left top,right top,from(#fd9710),to(#20b8ff)); + background:-webkit-linear-gradient(left,#fd9710,#20b8ff); + background:linear-gradient(90deg,#fda900,#ffbd43) +} +.components-button.editor-post-trash.button-link-delete.is-button.is-default.is-large { + color: #fff; + background:-webkit-gradient(linear,left top,right top,from(#fd9710),to(#20b8ff)); + background:-webkit-linear-gradient(left,#fd9710,#20b8ff); + background:linear-gradient(90deg,#fda900,#ffbd43) +} +#inspector-text-control.components-text-control__input { + background:#fff; + border-color:#fd9710; + -webkit-box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + box-shadow:0 0 0 3px rgba(32,160,255,.2)!important; + -webkit-transition:.25s; + transition:.25s +} +#activity-widget #latest-comments #the-comment-list.comment-item { + background: #fff; +} +#delete_all.button.apply { + color: #fff; + background:-webkit-gradient(linear,left top,right top,from(#fd9710),to(#20b8ff)); + background:-webkit-linear-gradient(left,#fd9710,#20b8ff); + background:linear-gradient(90deg,#fda900,#ffbd43) +} +.comment-count-approved { + color: #fff; + background:-webkit-gradient(linear,left top,right top,from(#fd9710),to(#20b8ff)); + background:-webkit-linear-gradient(left,#fd9710,#20b8ff); + background:linear-gradient(90deg,#fda900,#ffbd43) +} +.post-com-count.post-com-count-approved::after { + border-top: 5px solid #20a2ff; +} +.button.media-button.select-mode-toggle-button { + color: #fff; + background:-webkit-gradient(linear,left top,right top,from(#fd9710),to(#20b8ff)); + background:-webkit-linear-gradient(left,#fd9710,#20b8ff); + background:linear-gradient(90deg,#fda900,#ffbd43) +} +#activity-widget #the-comment-list .comment-item { + background: #fff; +} +.activity-block .subsubsub li { + color: #fff; +} +.return { + text-decoration: none; + color: #20a4ff; + font-weight: 700 +} +.button.cancel.alignleft { + color: #fff; + background:-webkit-gradient(linear,left top,right top,from(#fd9710),to(#20b8ff)); + background:-webkit-linear-gradient(left,#fd9710,#20b8ff); + background:linear-gradient(90deg,#fda900,#ffbd43) +} + +/*#adminmenu li.menu-top:hover, #adminmenu li.opensub>a.menu-top, #adminmenu li>a.menu-top:focus {*/ +/* position: none; */ +/*}*/ \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/css/animate.min.css b/wp-content/themes/nenghui-energy-theme-4/assets/css/animate.min.css new file mode 100644 index 0000000..76d2fe1 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/assets/css/animate.min.css @@ -0,0 +1,7 @@ +@charset "UTF-8";/*! + * animate.css - https://animate.style/ + * Version - 4.1.1 + * Licensed under the MIT license - http://opensource.org/licenses/MIT + * + * Copyright (c) 2020 Animate.css + */:root{--animate-duration:1s;--animate-delay:1s;--animate-repeat:1}.animate__animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-duration:var(--animate-duration);animation-duration:var(--animate-duration);-webkit-animation-fill-mode:both;animation-fill-mode:both}.animate__animated.animate__infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.animate__animated.animate__repeat-1{-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-iteration-count:var(--animate-repeat);animation-iteration-count:var(--animate-repeat)}.animate__animated.animate__repeat-2{-webkit-animation-iteration-count:2;animation-iteration-count:2;-webkit-animation-iteration-count:calc(var(--animate-repeat)*2);animation-iteration-count:calc(var(--animate-repeat)*2)}.animate__animated.animate__repeat-3{-webkit-animation-iteration-count:3;animation-iteration-count:3;-webkit-animation-iteration-count:calc(var(--animate-repeat)*3);animation-iteration-count:calc(var(--animate-repeat)*3)}.animate__animated.animate__delay-1s{-webkit-animation-delay:1s;animation-delay:1s;-webkit-animation-delay:var(--animate-delay);animation-delay:var(--animate-delay)}.animate__animated.animate__delay-2s{-webkit-animation-delay:2s;animation-delay:2s;-webkit-animation-delay:calc(var(--animate-delay)*2);animation-delay:calc(var(--animate-delay)*2)}.animate__animated.animate__delay-3s{-webkit-animation-delay:3s;animation-delay:3s;-webkit-animation-delay:calc(var(--animate-delay)*3);animation-delay:calc(var(--animate-delay)*3)}.animate__animated.animate__delay-4s{-webkit-animation-delay:4s;animation-delay:4s;-webkit-animation-delay:calc(var(--animate-delay)*4);animation-delay:calc(var(--animate-delay)*4)}.animate__animated.animate__delay-5s{-webkit-animation-delay:5s;animation-delay:5s;-webkit-animation-delay:calc(var(--animate-delay)*5);animation-delay:calc(var(--animate-delay)*5)}.animate__animated.animate__faster{-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-duration:calc(var(--animate-duration)/2);animation-duration:calc(var(--animate-duration)/2)}.animate__animated.animate__fast{-webkit-animation-duration:.8s;animation-duration:.8s;-webkit-animation-duration:calc(var(--animate-duration)*0.8);animation-duration:calc(var(--animate-duration)*0.8)}.animate__animated.animate__slow{-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-duration:calc(var(--animate-duration)*2);animation-duration:calc(var(--animate-duration)*2)}.animate__animated.animate__slower{-webkit-animation-duration:3s;animation-duration:3s;-webkit-animation-duration:calc(var(--animate-duration)*3);animation-duration:calc(var(--animate-duration)*3)}@media (prefers-reduced-motion:reduce),print{.animate__animated{-webkit-animation-duration:1ms!important;animation-duration:1ms!important;-webkit-transition-duration:1ms!important;transition-duration:1ms!important;-webkit-animation-iteration-count:1!important;animation-iteration-count:1!important}.animate__animated[class*=Out]{opacity:0}}@-webkit-keyframes bounce{0%,20%,53%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0);transform:translateZ(0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0) scaleY(1.1);transform:translate3d(0,-30px,0) scaleY(1.1)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0) scaleY(1.05);transform:translate3d(0,-15px,0) scaleY(1.05)}80%{-webkit-transition-timing-function:cubic-bezier(.215,.61,.355,1);transition-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0) scaleY(.95);transform:translateZ(0) scaleY(.95)}90%{-webkit-transform:translate3d(0,-4px,0) scaleY(1.02);transform:translate3d(0,-4px,0) scaleY(1.02)}}@keyframes bounce{0%,20%,53%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0);transform:translateZ(0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0) scaleY(1.1);transform:translate3d(0,-30px,0) scaleY(1.1)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0) scaleY(1.05);transform:translate3d(0,-15px,0) scaleY(1.05)}80%{-webkit-transition-timing-function:cubic-bezier(.215,.61,.355,1);transition-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0) scaleY(.95);transform:translateZ(0) scaleY(.95)}90%{-webkit-transform:translate3d(0,-4px,0) scaleY(1.02);transform:translate3d(0,-4px,0) scaleY(1.02)}}.animate__bounce{-webkit-animation-name:bounce;animation-name:bounce;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}@keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}.animate__flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes pulse{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.animate__pulse{-webkit-animation-name:pulse;animation-name:pulse;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}@-webkit-keyframes rubberBand{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes rubberBand{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.animate__rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shakeX{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@keyframes shakeX{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}.animate__shakeX{-webkit-animation-name:shakeX;animation-name:shakeX}@-webkit-keyframes shakeY{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}20%,40%,60%,80%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}}@keyframes shakeY{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}20%,40%,60%,80%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}}.animate__shakeY{-webkit-animation-name:shakeY;animation-name:shakeY}@-webkit-keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}.animate__headShake{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-name:headShake;animation-name:headShake}@-webkit-keyframes swing{20%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}60%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes swing{20%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}60%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}.animate__swing{-webkit-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate(-3deg);transform:scale3d(.9,.9,.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(3deg);transform:scale3d(1.1,1.1,1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(-3deg);transform:scale3d(1.1,1.1,1.1) rotate(-3deg)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes tada{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate(-3deg);transform:scale3d(.9,.9,.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(3deg);transform:scale3d(1.1,1.1,1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(-3deg);transform:scale3d(1.1,1.1,1.1) rotate(-3deg)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.animate__tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}15%{-webkit-transform:translate3d(-25%,0,0) rotate(-5deg);transform:translate3d(-25%,0,0) rotate(-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate(3deg);transform:translate3d(20%,0,0) rotate(3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate(-3deg);transform:translate3d(-15%,0,0) rotate(-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate(2deg);transform:translate3d(10%,0,0) rotate(2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate(-1deg);transform:translate3d(-5%,0,0) rotate(-1deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes wobble{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}15%{-webkit-transform:translate3d(-25%,0,0) rotate(-5deg);transform:translate3d(-25%,0,0) rotate(-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate(3deg);transform:translate3d(20%,0,0) rotate(3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate(-3deg);transform:translate3d(-15%,0,0) rotate(-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate(2deg);transform:translate3d(10%,0,0) rotate(2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate(-1deg);transform:translate3d(-5%,0,0) rotate(-1deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes jello{0%,11.1%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.390625deg) skewY(.390625deg);transform:skewX(.390625deg) skewY(.390625deg)}88.8%{-webkit-transform:skewX(-.1953125deg) skewY(-.1953125deg);transform:skewX(-.1953125deg) skewY(-.1953125deg)}}@keyframes jello{0%,11.1%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.390625deg) skewY(.390625deg);transform:skewX(.390625deg) skewY(.390625deg)}88.8%{-webkit-transform:skewX(-.1953125deg) skewY(-.1953125deg);transform:skewX(-.1953125deg) skewY(-.1953125deg)}}.animate__jello{-webkit-animation-name:jello;animation-name:jello;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes heartBeat{0%{-webkit-transform:scale(1);transform:scale(1)}14%{-webkit-transform:scale(1.3);transform:scale(1.3)}28%{-webkit-transform:scale(1);transform:scale(1)}42%{-webkit-transform:scale(1.3);transform:scale(1.3)}70%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes heartBeat{0%{-webkit-transform:scale(1);transform:scale(1)}14%{-webkit-transform:scale(1.3);transform:scale(1.3)}28%{-webkit-transform:scale(1);transform:scale(1)}42%{-webkit-transform:scale(1.3);transform:scale(1.3)}70%{-webkit-transform:scale(1);transform:scale(1)}}.animate__heartBeat{-webkit-animation-name:heartBeat;animation-name:heartBeat;-webkit-animation-duration:1.3s;animation-duration:1.3s;-webkit-animation-duration:calc(var(--animate-duration)*1.3);animation-duration:calc(var(--animate-duration)*1.3);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}@-webkit-keyframes backInDown{0%{-webkit-transform:translateY(-1200px) scale(.7);transform:translateY(-1200px) scale(.7);opacity:.7}80%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes backInDown{0%{-webkit-transform:translateY(-1200px) scale(.7);transform:translateY(-1200px) scale(.7);opacity:.7}80%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.animate__backInDown{-webkit-animation-name:backInDown;animation-name:backInDown}@-webkit-keyframes backInLeft{0%{-webkit-transform:translateX(-2000px) scale(.7);transform:translateX(-2000px) scale(.7);opacity:.7}80%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes backInLeft{0%{-webkit-transform:translateX(-2000px) scale(.7);transform:translateX(-2000px) scale(.7);opacity:.7}80%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.animate__backInLeft{-webkit-animation-name:backInLeft;animation-name:backInLeft}@-webkit-keyframes backInRight{0%{-webkit-transform:translateX(2000px) scale(.7);transform:translateX(2000px) scale(.7);opacity:.7}80%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes backInRight{0%{-webkit-transform:translateX(2000px) scale(.7);transform:translateX(2000px) scale(.7);opacity:.7}80%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.animate__backInRight{-webkit-animation-name:backInRight;animation-name:backInRight}@-webkit-keyframes backInUp{0%{-webkit-transform:translateY(1200px) scale(.7);transform:translateY(1200px) scale(.7);opacity:.7}80%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes backInUp{0%{-webkit-transform:translateY(1200px) scale(.7);transform:translateY(1200px) scale(.7);opacity:.7}80%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.animate__backInUp{-webkit-animation-name:backInUp;animation-name:backInUp}@-webkit-keyframes backOutDown{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:translateY(700px) scale(.7);transform:translateY(700px) scale(.7);opacity:.7}}@keyframes backOutDown{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:translateY(700px) scale(.7);transform:translateY(700px) scale(.7);opacity:.7}}.animate__backOutDown{-webkit-animation-name:backOutDown;animation-name:backOutDown}@-webkit-keyframes backOutLeft{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:translateX(-2000px) scale(.7);transform:translateX(-2000px) scale(.7);opacity:.7}}@keyframes backOutLeft{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:translateX(-2000px) scale(.7);transform:translateX(-2000px) scale(.7);opacity:.7}}.animate__backOutLeft{-webkit-animation-name:backOutLeft;animation-name:backOutLeft}@-webkit-keyframes backOutRight{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:translateX(2000px) scale(.7);transform:translateX(2000px) scale(.7);opacity:.7}}@keyframes backOutRight{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:translateX(2000px) scale(.7);transform:translateX(2000px) scale(.7);opacity:.7}}.animate__backOutRight{-webkit-animation-name:backOutRight;animation-name:backOutRight}@-webkit-keyframes backOutUp{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:translateY(-700px) scale(.7);transform:translateY(-700px) scale(.7);opacity:.7}}@keyframes backOutUp{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:translateY(-700px) scale(.7);transform:translateY(-700px) scale(.7);opacity:.7}}.animate__backOutUp{-webkit-animation-name:backOutUp;animation-name:backOutUp}@-webkit-keyframes bounceIn{0%,20%,40%,60%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes bounceIn{0%,20%,40%,60%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scaleX(1);transform:scaleX(1)}}.animate__bounceIn{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-duration:calc(var(--animate-duration)*0.75);animation-duration:calc(var(--animate-duration)*0.75);-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0) scaleY(3);transform:translate3d(0,-3000px,0) scaleY(3)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0) scaleY(.9);transform:translate3d(0,25px,0) scaleY(.9)}75%{-webkit-transform:translate3d(0,-10px,0) scaleY(.95);transform:translate3d(0,-10px,0) scaleY(.95)}90%{-webkit-transform:translate3d(0,5px,0) scaleY(.985);transform:translate3d(0,5px,0) scaleY(.985)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0) scaleY(3);transform:translate3d(0,-3000px,0) scaleY(3)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0) scaleY(.9);transform:translate3d(0,25px,0) scaleY(.9)}75%{-webkit-transform:translate3d(0,-10px,0) scaleY(.95);transform:translate3d(0,-10px,0) scaleY(.95)}90%{-webkit-transform:translate3d(0,5px,0) scaleY(.985);transform:translate3d(0,5px,0) scaleY(.985)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0) scaleX(3);transform:translate3d(-3000px,0,0) scaleX(3)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0) scaleX(1);transform:translate3d(25px,0,0) scaleX(1)}75%{-webkit-transform:translate3d(-10px,0,0) scaleX(.98);transform:translate3d(-10px,0,0) scaleX(.98)}90%{-webkit-transform:translate3d(5px,0,0) scaleX(.995);transform:translate3d(5px,0,0) scaleX(.995)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0) scaleX(3);transform:translate3d(-3000px,0,0) scaleX(3)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0) scaleX(1);transform:translate3d(25px,0,0) scaleX(1)}75%{-webkit-transform:translate3d(-10px,0,0) scaleX(.98);transform:translate3d(-10px,0,0) scaleX(.98)}90%{-webkit-transform:translate3d(5px,0,0) scaleX(.995);transform:translate3d(5px,0,0) scaleX(.995)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0) scaleX(3);transform:translate3d(3000px,0,0) scaleX(3)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0) scaleX(1);transform:translate3d(-25px,0,0) scaleX(1)}75%{-webkit-transform:translate3d(10px,0,0) scaleX(.98);transform:translate3d(10px,0,0) scaleX(.98)}90%{-webkit-transform:translate3d(-5px,0,0) scaleX(.995);transform:translate3d(-5px,0,0) scaleX(.995)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0) scaleX(3);transform:translate3d(3000px,0,0) scaleX(3)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0) scaleX(1);transform:translate3d(-25px,0,0) scaleX(1)}75%{-webkit-transform:translate3d(10px,0,0) scaleX(.98);transform:translate3d(10px,0,0) scaleX(.98)}90%{-webkit-transform:translate3d(-5px,0,0) scaleX(.995);transform:translate3d(-5px,0,0) scaleX(.995)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0) scaleY(5);transform:translate3d(0,3000px,0) scaleY(5)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0) scaleY(.9);transform:translate3d(0,-20px,0) scaleY(.9)}75%{-webkit-transform:translate3d(0,10px,0) scaleY(.95);transform:translate3d(0,10px,0) scaleY(.95)}90%{-webkit-transform:translate3d(0,-5px,0) scaleY(.985);transform:translate3d(0,-5px,0) scaleY(.985)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0) scaleY(5);transform:translate3d(0,3000px,0) scaleY(5)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0) scaleY(.9);transform:translate3d(0,-20px,0) scaleY(.9)}75%{-webkit-transform:translate3d(0,10px,0) scaleY(.95);transform:translate3d(0,10px,0) scaleY(.95)}90%{-webkit-transform:translate3d(0,-5px,0) scaleY(.985);transform:translate3d(0,-5px,0) scaleY(.985)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}@keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}.animate__bounceOut{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-duration:calc(var(--animate-duration)*0.75);animation-duration:calc(var(--animate-duration)*0.75);-webkit-animation-name:bounceOut;animation-name:bounceOut}@-webkit-keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0) scaleY(.985);transform:translate3d(0,10px,0) scaleY(.985)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0) scaleY(.9);transform:translate3d(0,-20px,0) scaleY(.9)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0) scaleY(3);transform:translate3d(0,2000px,0) scaleY(3)}}@keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0) scaleY(.985);transform:translate3d(0,10px,0) scaleY(.985)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0) scaleY(.9);transform:translate3d(0,-20px,0) scaleY(.9)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0) scaleY(3);transform:translate3d(0,2000px,0) scaleY(3)}}.animate__bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0) scaleX(.9);transform:translate3d(20px,0,0) scaleX(.9)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0) scaleX(2);transform:translate3d(-2000px,0,0) scaleX(2)}}@keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0) scaleX(.9);transform:translate3d(20px,0,0) scaleX(.9)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0) scaleX(2);transform:translate3d(-2000px,0,0) scaleX(2)}}.animate__bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0) scaleX(.9);transform:translate3d(-20px,0,0) scaleX(.9)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0) scaleX(2);transform:translate3d(2000px,0,0) scaleX(2)}}@keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0) scaleX(.9);transform:translate3d(-20px,0,0) scaleX(.9)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0) scaleX(2);transform:translate3d(2000px,0,0) scaleX(2)}}.animate__bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0) scaleY(.985);transform:translate3d(0,-10px,0) scaleY(.985)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0) scaleY(.9);transform:translate3d(0,20px,0) scaleY(.9)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0) scaleY(3);transform:translate3d(0,-2000px,0) scaleY(3)}}@keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0) scaleY(.985);transform:translate3d(0,-10px,0) scaleY(.985)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0) scaleY(.9);transform:translate3d(0,20px,0) scaleY(.9)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0) scaleY(3);transform:translate3d(0,-2000px,0) scaleY(3)}}.animate__bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.animate__fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeInTopLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,-100%,0);transform:translate3d(-100%,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInTopLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,-100%,0);transform:translate3d(-100%,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInTopLeft{-webkit-animation-name:fadeInTopLeft;animation-name:fadeInTopLeft}@-webkit-keyframes fadeInTopRight{0%{opacity:0;-webkit-transform:translate3d(100%,-100%,0);transform:translate3d(100%,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInTopRight{0%{opacity:0;-webkit-transform:translate3d(100%,-100%,0);transform:translate3d(100%,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInTopRight{-webkit-animation-name:fadeInTopRight;animation-name:fadeInTopRight}@-webkit-keyframes fadeInBottomLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,100%,0);transform:translate3d(-100%,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInBottomLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,100%,0);transform:translate3d(-100%,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInBottomLeft{-webkit-animation-name:fadeInBottomLeft;animation-name:fadeInBottomLeft}@-webkit-keyframes fadeInBottomRight{0%{opacity:0;-webkit-transform:translate3d(100%,100%,0);transform:translate3d(100%,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInBottomRight{0%{opacity:0;-webkit-transform:translate3d(100%,100%,0);transform:translate3d(100%,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInBottomRight{-webkit-animation-name:fadeInBottomRight;animation-name:fadeInBottomRight}@-webkit-keyframes fadeOut{0%{opacity:1}to{opacity:0}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}.animate__fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes fadeOutDown{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.animate__fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes fadeOutDownBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.animate__fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes fadeOutLeft{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.animate__fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes fadeOutLeftBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.animate__fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes fadeOutRight{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.animate__fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes fadeOutRightBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.animate__fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes fadeOutUp{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.animate__fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes fadeOutUpBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.animate__fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes fadeOutTopLeft{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(-100%,-100%,0);transform:translate3d(-100%,-100%,0)}}@keyframes fadeOutTopLeft{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(-100%,-100%,0);transform:translate3d(-100%,-100%,0)}}.animate__fadeOutTopLeft{-webkit-animation-name:fadeOutTopLeft;animation-name:fadeOutTopLeft}@-webkit-keyframes fadeOutTopRight{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(100%,-100%,0);transform:translate3d(100%,-100%,0)}}@keyframes fadeOutTopRight{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(100%,-100%,0);transform:translate3d(100%,-100%,0)}}.animate__fadeOutTopRight{-webkit-animation-name:fadeOutTopRight;animation-name:fadeOutTopRight}@-webkit-keyframes fadeOutBottomRight{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(100%,100%,0);transform:translate3d(100%,100%,0)}}@keyframes fadeOutBottomRight{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(100%,100%,0);transform:translate3d(100%,100%,0)}}.animate__fadeOutBottomRight{-webkit-animation-name:fadeOutBottomRight;animation-name:fadeOutBottomRight}@-webkit-keyframes fadeOutBottomLeft{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(-100%,100%,0);transform:translate3d(-100%,100%,0)}}@keyframes fadeOutBottomLeft{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(-100%,100%,0);transform:translate3d(-100%,100%,0)}}.animate__fadeOutBottomLeft{-webkit-animation-name:fadeOutBottomLeft;animation-name:fadeOutBottomLeft}@-webkit-keyframes flip{0%{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{0%{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.animate__animated.animate__flip{-webkit-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.animate__flipInX{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInX;animation-name:flipInX}@-webkit-keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateY(-20deg);transform:perspective(400px) rotateY(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateY(10deg);transform:perspective(400px) rotateY(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateY(-5deg);transform:perspective(400px) rotateY(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateY(-20deg);transform:perspective(400px) rotateY(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateY(10deg);transform:perspective(400px) rotateY(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateY(-5deg);transform:perspective(400px) rotateY(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.animate__flipInY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInY;animation-name:flipInY}@-webkit-keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}}@keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}}.animate__flipOutX{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-duration:calc(var(--animate-duration)*0.75);animation-duration:calc(var(--animate-duration)*0.75);-webkit-animation-name:flipOutX;animation-name:flipOutX;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}@-webkit-keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateY(-15deg);transform:perspective(400px) rotateY(-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}}@keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateY(-15deg);transform:perspective(400px) rotateY(-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}}.animate__flipOutY{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-duration:calc(var(--animate-duration)*0.75);animation-duration:calc(var(--animate-duration)*0.75);-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipOutY;animation-name:flipOutY}@-webkit-keyframes lightSpeedInRight{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes lightSpeedInRight{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__lightSpeedInRight{-webkit-animation-name:lightSpeedInRight;animation-name:lightSpeedInRight;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedInLeft{0%{-webkit-transform:translate3d(-100%,0,0) skewX(30deg);transform:translate3d(-100%,0,0) skewX(30deg);opacity:0}60%{-webkit-transform:skewX(-20deg);transform:skewX(-20deg);opacity:1}80%{-webkit-transform:skewX(5deg);transform:skewX(5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes lightSpeedInLeft{0%{-webkit-transform:translate3d(-100%,0,0) skewX(30deg);transform:translate3d(-100%,0,0) skewX(30deg);opacity:0}60%{-webkit-transform:skewX(-20deg);transform:skewX(-20deg);opacity:1}80%{-webkit-transform:skewX(5deg);transform:skewX(5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__lightSpeedInLeft{-webkit-animation-name:lightSpeedInLeft;animation-name:lightSpeedInLeft;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOutRight{0%{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}@keyframes lightSpeedOutRight{0%{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.animate__lightSpeedOutRight{-webkit-animation-name:lightSpeedOutRight;animation-name:lightSpeedOutRight;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes lightSpeedOutLeft{0%{opacity:1}to{-webkit-transform:translate3d(-100%,0,0) skewX(-30deg);transform:translate3d(-100%,0,0) skewX(-30deg);opacity:0}}@keyframes lightSpeedOutLeft{0%{opacity:1}to{-webkit-transform:translate3d(-100%,0,0) skewX(-30deg);transform:translate3d(-100%,0,0) skewX(-30deg);opacity:0}}.animate__lightSpeedOutLeft{-webkit-animation-name:lightSpeedOutLeft;animation-name:lightSpeedOutLeft;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{0%{-webkit-transform:rotate(-200deg);transform:rotate(-200deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateIn{0%{-webkit-transform:rotate(-200deg);transform:rotate(-200deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.animate__rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes rotateInDownLeft{0%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInDownLeft{0%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.animate__rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft;-webkit-transform-origin:left bottom;transform-origin:left bottom}@-webkit-keyframes rotateInDownRight{0%{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInDownRight{0%{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.animate__rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight;-webkit-transform-origin:right bottom;transform-origin:right bottom}@-webkit-keyframes rotateInUpLeft{0%{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInUpLeft{0%{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.animate__rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft;-webkit-transform-origin:left bottom;transform-origin:left bottom}@-webkit-keyframes rotateInUpRight{0%{-webkit-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInUpRight{0%{-webkit-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.animate__rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight;-webkit-transform-origin:right bottom;transform-origin:right bottom}@-webkit-keyframes rotateOut{0%{opacity:1}to{-webkit-transform:rotate(200deg);transform:rotate(200deg);opacity:0}}@keyframes rotateOut{0%{opacity:1}to{-webkit-transform:rotate(200deg);transform:rotate(200deg);opacity:0}}.animate__rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes rotateOutDownLeft{0%{opacity:1}to{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}}@keyframes rotateOutDownLeft{0%{opacity:1}to{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}}.animate__rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft;-webkit-transform-origin:left bottom;transform-origin:left bottom}@-webkit-keyframes rotateOutDownRight{0%{opacity:1}to{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}@keyframes rotateOutDownRight{0%{opacity:1}to{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}.animate__rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight;-webkit-transform-origin:right bottom;transform-origin:right bottom}@-webkit-keyframes rotateOutUpLeft{0%{opacity:1}to{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}@keyframes rotateOutUpLeft{0%{opacity:1}to{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}.animate__rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft;-webkit-transform-origin:left bottom;transform-origin:left bottom}@-webkit-keyframes rotateOutUpRight{0%{opacity:1}to{-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:0}}@keyframes rotateOutUpRight{0%{opacity:1}to{-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:0}}.animate__rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight;-webkit-transform-origin:right bottom;transform-origin:right bottom}@-webkit-keyframes hinge{0%{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate(80deg);transform:rotate(80deg);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate(60deg);transform:rotate(60deg);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}@keyframes hinge{0%{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate(80deg);transform:rotate(80deg);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate(60deg);transform:rotate(60deg);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}.animate__hinge{-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-duration:calc(var(--animate-duration)*2);animation-duration:calc(var(--animate-duration)*2);-webkit-animation-name:hinge;animation-name:hinge;-webkit-transform-origin:top left;transform-origin:top left}@-webkit-keyframes jackInTheBox{0%{opacity:0;-webkit-transform:scale(.1) rotate(30deg);transform:scale(.1) rotate(30deg);-webkit-transform-origin:center bottom;transform-origin:center bottom}50%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}70%{-webkit-transform:rotate(3deg);transform:rotate(3deg)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes jackInTheBox{0%{opacity:0;-webkit-transform:scale(.1) rotate(30deg);transform:scale(.1) rotate(30deg);-webkit-transform-origin:center bottom;transform-origin:center bottom}50%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}70%{-webkit-transform:rotate(3deg);transform:rotate(3deg)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.animate__jackInTheBox{-webkit-animation-name:jackInTheBox;animation-name:jackInTheBox}@-webkit-keyframes rollIn{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate(-120deg);transform:translate3d(-100%,0,0) rotate(-120deg)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes rollIn{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate(-120deg);transform:translate3d(-100%,0,0) rotate(-120deg)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate(120deg);transform:translate3d(100%,0,0) rotate(120deg)}}@keyframes rollOut{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate(120deg);transform:translate3d(100%,0,0) rotate(120deg)}}.animate__rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}.animate__zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}.animate__zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0)}}@keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0)}}.animate__zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft;-webkit-transform-origin:left center;transform-origin:left center}@-webkit-keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0)}}@keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0)}}.animate__zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight;-webkit-transform-origin:right center;transform-origin:right center}@-webkit-keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes slideInDown{0%{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInDown{0%{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{0%{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInLeft{0%{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInRight{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideInUp{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInUp{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__slideInUp{-webkit-animation-name:slideInUp;animation-name:slideInUp}@-webkit-keyframes slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.animate__slideOutDown{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}@-webkit-keyframes slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.animate__slideOutLeft{-webkit-animation-name:slideOutLeft;animation-name:slideOutLeft}@-webkit-keyframes slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.animate__slideOutRight{-webkit-animation-name:slideOutRight;animation-name:slideOutRight}@-webkit-keyframes slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.animate__slideOutUp{-webkit-animation-name:slideOutUp;animation-name:slideOutUp} \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/css/black-about-company-banner.css b/wp-content/themes/nenghui-energy-theme-4/assets/css/black-about-company-banner.css new file mode 100644 index 0000000..88a38d8 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/assets/css/black-about-company-banner.css @@ -0,0 +1,278 @@ +.black-about-company-banner { + background-color: #fff; + color: #333; + padding: 60px 0; + overflow: hidden; + margin: 0 auto; + width: 90%; +} + +.banner-content { + display: flex; + gap: 40px; + align-items: flex-start; + width: 100%; +} + +.banner-left { + flex: 1; + max-width: 50%; +} + +.main-image { + width: 100%; + height: auto !important;; + border-radius: 8px; + overflow: hidden; + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1); +} + +.main-image img { + width: 100%; + height: auto; + display: block; + transition: transform 0.3s ease; +} + +.main-image:hover img { + transform: scale(1.02); +} + +.banner-right { + flex: 1; + max-width: 50%; + display: flex; + flex-direction: column; + padding-left: 20px; +} + +.content-text h2 { + font-size: 26px; + color: #007cba; + line-height: 1; +} + +.content-text p { + font-size: 14px; + line-height: 1.6; + color: #000; +} + +.mass-production h3 { + font-size: 1.1rem; + font-weight: bold; + color: #000; +} + +.mass-production p { + font-size: 14px; + line-height: 1.6; + color: #000; +} + +/* Swiper轮播容器样式 */ +.production-carousel-container { + width: 100%; + border-radius: 6px; + background: #f8f9fa; + padding: 4px; + border: 1px solid #e9ecef; + position: relative; +} + +.production-swiper { + width: 100%; + height: 88px; + overflow: hidden; +} + +.production-swiper .swiper-wrapper { + align-items: center; + transition-timing-function: linear; +} + +.production-swiper .swiper-slide { + display: flex; + align-items: center; + justify-content: center; + height: 80px; + width: auto !important; + flex-shrink: 0; + transition: transform 0.3s ease; +} + +.production-swiper .swiper-slide img { + width: auto; + height: auto; + max-height: 80px; + max-width: 120px; + min-width: 80px; + object-fit: contain; + border-radius: 2px; + transition: transform 0.3s ease; + background: #fff; + margin: 0 8px; +} + +.production-swiper .swiper-slide:hover img { + transform: scale(1.05); +} + +/* Swiper导航按钮样式 */ +.production-swiper .swiper-button-next, +.production-swiper .swiper-button-prev { + width: 24px; + height: 24px; + margin-top: -12px; + background: rgba(255, 255, 255, 0.9); + border-radius: 50%; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); + color: #333; + transition: all 0.3s ease; +} + +.production-swiper .swiper-button-next:hover, +.production-swiper .swiper-button-prev:hover { + background: #2196F3; + color: white; + transform: scale(1.1); +} + +.production-swiper .swiper-button-next::after, +.production-swiper .swiper-button-prev::after { + font-size: 12px; + font-weight: 600; +} + +.production-swiper .swiper-button-next { + right: -12px; +} + +.production-swiper .swiper-button-prev { + left: -12px; +} + +/* Swiper分页器样式 */ +.production-swiper .swiper-pagination { + bottom: -20px; + position: relative; + margin-top: 8px; +} + +.production-swiper .swiper-pagination-bullet { + width: 20px; + height: 3px; + background: #ddd; + opacity: 1; + transition: all 0.3s ease; + border-radius: 2px; + margin: 0 2px; +} + +.production-swiper .swiper-pagination-bullet-active { + background: #2196F3; + transform: none; +} + +/* 响应式设计 */ +@media (min-width: 768px) { + .production-swiper { + height: 88px; + } + + .production-swiper .swiper-slide { + height: 80px; + } + + .production-swiper .swiper-slide img { + max-height: 80px; + } + + .production-swiper .swiper-button-next, + .production-swiper .swiper-button-prev { + width: 28px; + height: 28px; + margin-top: -14px; + } + + .production-swiper .swiper-button-next::after, + .production-swiper .swiper-button-prev::after { + font-size: 14px; + } +} + +@media (max-width: 767px) { + .banner-content { + flex-direction: column; + text-align: center; + gap: 1rem; + } + + .banner-left, + .banner-right { + max-width: 100%; + } + + .banner-right { + padding-left: 0; + } + + .content-text h2 { + font-size: 1.5rem; + } + + .content-text p, + .mass-production p { + font-size: 0.9rem; + } + + .production-swiper { + height: 68px; + } + + .production-swiper .swiper-slide { + height: 60px; + } + + .production-swiper .swiper-slide img { + max-height: 60px; + max-width: 100px; + min-width: 60px; + margin: 0 6px; + } + + .production-swiper .swiper-button-next, + .production-swiper .swiper-button-prev { + width: 20px; + height: 20px; + margin-top: -10px; + } + + .production-swiper .swiper-button-next::after, + .production-swiper .swiper-button-prev::after { + font-size: 10px; + } + + .production-swiper .swiper-button-next { + right: -8px; + } + + .production-swiper .swiper-button-prev { + left: -8px; + } +} + +@media (max-width: 480px) { + .black-about-company-banner { + padding: 40px 0; + } + + .content-text h2 { + font-size: 1.5rem; + } + + .content-text p, + .mass-production p { + font-size: 0.85rem; + } +} \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/css/black-maps.css b/wp-content/themes/nenghui-energy-theme-4/assets/css/black-maps.css new file mode 100644 index 0000000..53050d3 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/assets/css/black-maps.css @@ -0,0 +1,109 @@ +/** + * Black Maps Block Styles + * WordPress标准地图区块样式文件 + */ + +.black-maps-wrapper { + background-size: 100% 100%; + background-color: #f5f5f5; + display: flex; + width: 100%; + height: 100vh; + align-items: center; + justify-content: center; + position: relative; +} + +.black-maps-container { + width: 100%; + height: 100vh; + position: relative; +} + +#echartsMap { + width: 100%; + height: 100vh; +} + +/* 响应式设计 */ +@media (max-width: 768px) { + .black-maps-wrapper, + .black-maps-container, + #echartsMap { + height: 60vh; + min-height: 400px; + } +} + +@media (max-width: 480px) { + .black-maps-wrapper, + .black-maps-container, + #echartsMap { + height: 50vh; + min-height: 350px; + } +} + +/* 加载状态样式 */ +.black-maps-loading { + display: flex; + align-items: center; + justify-content: center; + height: 100%; + font-size: 16px; + color: #666; +} + +.black-maps-loading::after { + content: ''; + width: 20px; + height: 20px; + margin-left: 10px; + border: 2px solid #f3f3f3; + border-top: 2px solid #3498db; + border-radius: 50%; + animation: spin 1s linear infinite; +} + +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + +/* 错误状态样式 */ +.black-maps-error { + display: flex; + align-items: center; + justify-content: center; + height: 100%; + font-size: 16px; + color: #e74c3c; + text-align: center; + padding: 20px; +} + +/* 自定义器预览模式样式 */ +.customize-preview .black-maps-wrapper { + transition: all 0.3s ease; +} + +/* 地图标题样式覆盖 */ +.black-maps-wrapper .echarts-title { + font-family: inherit; + font-weight: bold; +} + +/* 地图工具提示样式 */ +.black-maps-wrapper .echarts-tooltip { + background-color: rgba(0, 0, 0, 0.8); + border: none; + border-radius: 4px; + color: #fff; + font-size: 12px; + padding: 8px 12px; +} + +/* 确保地图容器不会溢出 */ +.black-maps-wrapper * { + box-sizing: border-box; +} \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/css/business-process.css b/wp-content/themes/nenghui-energy-theme-4/assets/css/business-process.css new file mode 100644 index 0000000..69aae89 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/assets/css/business-process.css @@ -0,0 +1,326 @@ +/** + * 业务流程设计区块样式 + * Business Process Block Styles + */ + +.business-process-block { + padding: 80px 0; + background: #f8f9fa; + position: relative; + overflow: hidden; +} + +.business-process-block .container { + max-width: 1200px; + margin: 0 auto; + padding: 0 20px; +} + +/* 头部样式 */ +.process-header { + text-align: left; + margin-bottom: 60px; +} + +.process-title { + font-size: 2.5rem; + font-weight: 700; + color: #2c3e50; + margin-bottom: 16px; + line-height: 1.2; +} + +.process-subtitle { + font-size: 1.125rem; + color: #6c757d; + margin: 0; + line-height: 1.6; +} + +/* 主要内容区域 */ +.process-content { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 60px; + align-items: center; +} + +/* 左侧Tab标签区域 */ +.process-tabs { + display: flex; + flex-direction: column; + border-radius: 8px; +} + +.process-tab { + display: flex; + align-items: center; + padding: 24px 0; + background: transparent; + cursor: pointer; + transition: all 0.3s ease; + border-bottom: 1px solid #e9ecef; + position: relative; +} + +.process-tab:hover { + background: rgba(0, 149, 123, 0.02); +} + +.process-tab.active { + background: rgba(0, 149, 123, 0.05); + border-left: 4px solid #00957b; + padding-left: 16px; +} + +.tab-number { + font-size: 2.5rem; + font-weight: 700; + color: #00957b; + margin-right: 24px; + min-width: 70px; + text-align: left; + transition: color 0.3s ease; + line-height: 1; +} + +.process-tab.active .tab-number { + color: #00957b; +} + +.process-tab:last-child { + border-bottom: none; +} + +.tab-content { + flex: 1; + display: flex; + flex-direction: column; + justify-content: center; +} + +.tab-title { + font-size: 1.25rem; + font-weight: 600; + margin-bottom: 8px; + color: #2c3e50; + transition: color 0.3s ease; +} + +.process-tab.active .tab-title { + color: #00957b; +} + +.tab-description { + font-size: 0.9rem; + color: #6c757d; + margin: 0; + line-height: 1.6; + transition: color 0.3s ease; +} + +.process-tab.active .tab-description { + color: #6c757d; +} + +.tab-arrow { + margin-left: 20px; + color: #00957b; + transition: all 0.3s ease; + opacity: 0.7; + font-size: 1.1rem; + transform: translateX(-14px); +} + +.process-tab.active .tab-arrow { + color: #00957b; + opacity: 1; + transform: translateX(-14px); +} + +/* 右侧图片显示区域 */ +.process-images { + position: relative; + height: 500px; +} + +.process-image { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + opacity: 0; + transition: opacity 0.5s ease; + display: flex; + align-items: center; + justify-content: center; +} + +.process-image.active { + opacity: 1; +} + +.process-image img { + max-width: 100%; + max-height: 100%; + object-fit: contain; + object-position: center; +} + +/* 响应式设计 */ +@media (max-width: 1024px) { + .business-process-block { + padding: 60px 0; + } + + .process-content { + gap: 40px; + } + + .process-images { + height: 400px; + } +} + +@media (max-width: 768px) { + .business-process-block { + padding: 40px 0; + } + + .business-process-block .container { + padding: 0 16px; + } + + .process-header { + margin-bottom: 40px; + text-align: left; + } + + .process-title { + font-size: 2rem; + } + + .process-subtitle { + font-size: 1rem; + } + + .process-content { + grid-template-columns: 1fr; + gap: 30px; + } + + .process-tabs { + gap: 16px; + } + + .process-tab { + padding: 20px; + } + + .tab-number { + font-size: 1.5rem; + margin-right: 16px; + min-width: 50px; + } + + .tab-title { + font-size: 1.125rem; + } + + .tab-description { + font-size: 0.8125rem; + } + + .process-images { + height: 300px; + } +} + +@media (max-width: 480px) { + .process-tab { + padding: 16px; + flex-direction: column; + text-align: center; + } + + .tab-number { + margin-right: 0; + margin-bottom: 12px; + } + + .tab-arrow { + margin-left: 0; + margin-top: 12px; + transform: rotate(90deg); + } + + .process-tab.active .tab-arrow { + transform: rotate(90deg) translateX(4px); + } + + .process-images { + height: 250px; + } +} + +/* 动画效果 */ +@keyframes fadeInUp { + from { + opacity: 0; + transform: translateY(30px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +.business-process-block.animate-in .process-header, +.business-process-block.animate-in .process-tab, +.business-process-block.animate-in .process-images { + animation: fadeInUp 0.6s ease forwards; +} + +.business-process-block.animate-in .process-tab:nth-child(1) { + animation-delay: 0.1s; +} + +.business-process-block.animate-in .process-tab:nth-child(2) { + animation-delay: 0.2s; +} + +.business-process-block.animate-in .process-tab:nth-child(3) { + animation-delay: 0.3s; +} + +.business-process-block.animate-in .process-tab:nth-child(4) { + animation-delay: 0.4s; +} + +.business-process-block.animate-in .process-images { + animation-delay: 0.5s; +} + +/* 打印样式 */ +@media print { + .business-process-block { + background: #ffffff; + padding: 20px 0; + } + + .process-content { + grid-template-columns: 1fr; + gap: 20px; + } + + .process-tab { + box-shadow: none; + border: 1px solid #ddd; + } + + .process-images { + height: 300px; + box-shadow: none; + } +} \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/css/epc.css b/wp-content/themes/nenghui-energy-theme-4/assets/css/epc.css new file mode 100644 index 0000000..d287ca7 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/assets/css/epc.css @@ -0,0 +1,67 @@ +/* 组件:EPC 解决方案横幅 — 外层布局容器 */ +.epc-hero { +max-width: 1200px; +margin: 32px auto; +padding: 0 16px; +} + +/* 组件:横幅主体(负责背景图、圆角与投影) */ +.epc-banner { +position: relative; +height: 260px; +border-radius: var(--radius); +overflow: hidden; +/* 背景图片:与项目同级,使用相对路径,便于兼容 */ +background: url("../images/epc-bg.jpg") center/cover no-repeat; +box-shadow: 0 10px 28px rgba(0, 0, 0, 0.18); +} + +/* 组件:可读性增强的渐变遮罩层 */ +.epc-overlay { +position: absolute; +inset: 0; +background: linear-gradient( + 180deg, + rgba(0, 0, 0, 0.20) 0%, + rgba(0, 0, 0, 0.50) 100% +); +/* 轻微饱和度与亮度调整提升层次感 */ +backdrop-filter: saturate(1.05) brightness(0.95); +} + +/* 组件:内容承载层(标题与副标题居中显示) */ +.epc-content { +position: relative; +height: 100%; +display: flex; +flex-direction: column; +align-items: center; +justify-content: center; +text-align: center; +padding: 0 24px; +color: #ffffff; +} + +/* 组件:主标题样式 */ +.epc-title { +margin: 0 0 10px 0; +font-size: var(--title-size); +font-weight: 700; +color: #ffffff; +letter-spacing: 0.6px; +text-shadow: 0 1px 2px rgba(0, 0, 0, 0.25); +} + +/* 组件:副标题样式 */ +.epc-subtitle { +margin: 0; +font-size: var(--subtitle-size); +opacity: 0.96; +} + +/* 响应式:在较窄屏幕降低高度以保持比例 */ +@media (max-width: 640px) { +.epc-banner { + height: 220px; +} +} \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/css/feature-module.css b/wp-content/themes/nenghui-energy-theme-4/assets/css/feature-module.css new file mode 100644 index 0000000..86fc924 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/assets/css/feature-module.css @@ -0,0 +1,60 @@ + +/* feature-module 模块 */ +.feature-module { +width: 100%; +max-width: 1300px; +margin: 40px auto; +overflow: hidden; +background-color: #fff; +} + +.feature-inner { +display: flex; +align-items: stretch; +gap: 15px; +padding: 15px; /* 让外框与内容留出安全距离 */ +} + +/* 左侧文字区域 */ +.feature-text { +flex: 0 0 50%; +padding: 20px; +} +.feature-text h2 { +color: #116598; +font-size: 28px; +font-weight: 400; +margin: 0 0 16px; +} +.feature-text p { +color: #808080; +font-size: 16px; +line-height: 1.5; +margin: 0; +} + +.feature-divider { +width: 32px; +height: 3px; +background-color: #116598; +border-radius: 2px; +margin: 12px 0 16px 0; +} + +/* 右侧图片区域(背景图) */ +.feature-media { +flex: 0 0 40%; +border-radius: 15px; +background: url('../images/tgrdfrfed.jpg'); +background-size: cover; /* 保持比例,填充容器 */ +background-position: center; +background-repeat: no-repeat; +min-height: 280px; /* 保证在文本较少时也有可视高度 */ +} + +/* 响应式:小屏幕上下布局 */ +@media (max-width: 768px) { +.feature-inner { flex-direction: column; } +.feature-text { flex: 1 1 auto; padding: 16px; } +.feature-media { flex: 1 1 auto; min-height: 220px; } +} \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/css/index.css b/wp-content/themes/nenghui-energy-theme-4/assets/css/index.css new file mode 100644 index 0000000..e7ae19f --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/assets/css/index.css @@ -0,0 +1,1082 @@ +/* 你可以在这里写一些自定义的全局CSS样式 */ +/* 全局重置样式 */ +* { + margin: 0; + padding: 0; + box-sizing: border-box; + font-family: "calibri","PingFang SC", Arial, sans-serif; +} + +/* 链接样式 */ +a { + text-decoration: none; + color: rgb(57, 57, 57); + transition: all 0.3s ease; +} + +a:hover { + font-weight: 600; + color: #000; + transition: all 0.3s ease; +} + +/* 主容器样式 */ +#box { + width: 80%; + margin: 0 auto; + margin-top: 14vh; +} + +/* 图片样式 */ +img { + display: flex; + max-width: 100%; + height: auto; +} + +.article-content{ + width: 80%; + margin: 0 auto; + padding: 30px; +} + +/* 页脚样式 */ +#footer { + font-size: 1.5rem; + display: flex; + justify-content: center; + padding: 10px; +} + +/* 页面样式 */ +.page-style { + display: flex; + justify-content: start; + margin-top: 10px; +} + +/* 按钮组样式 */ +#btns { + margin-top: 2rem; + display: flex; + justify-content: center; + align-items: center; + flex-wrap: nowrap; +} + +#btns button { + margin: 0 10px; + padding: 5px 10px; + border: 1px solid #eee; + border-radius: 5px; + background: #fbfbfb; + cursor: pointer; + transition: all 0.3s ease; +} + +#btns button:hover { + background: #f6f6f6; + border: 1px solid #d7d7d7; + transform: translateY(-1px); + transition: all 0.3s ease; +} + +/* 自定义样式文件 */ +/* 导航栏样式 */ +.main-nav { + transition: background-color 0.3s ease, box-shadow 0.3s ease, transform 0.3s ease; +} + +.main-nav .menu-items li a { + transition: color 0.3s ease; +} + +/* 分页导航样式 */ +.pagination { + margin: 60px 0; + text-align: center; + display: flex; + justify-content: center; + align-items: center; + gap: 12px; +} + +.pagination .page-numbers { + display: inline-flex; + align-items: center; + justify-content: center; + min-width: 44px; + height: 44px; + padding: 0 12px; + border-radius: 8px; + background: #ffffff; + color: #374151; + text-decoration: none; + font-weight: 500; + font-size: 15px; + transition: all 0.2s ease; + border: 1px solid #e5e7eb; + position: relative; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.pagination .page-numbers:hover { + background: #f9fafb; + border-color: #3b82f6; + color: #3b82f6; + transform: translateY(-1px); + box-shadow: 0 4px 8px rgba(59, 130, 246, 0.15); + transition: all 0.3s ease; +} + +.pagination .page-numbers.current { + background: linear-gradient(135deg, #3b82f6 0%, #1d4ed8 100%); + color: white; + border-color: #3b82f6; + box-shadow: 0 4px 12px rgba(59, 130, 246, 0.4); + font-weight: 600; + transition: all 0.3s ease; +} + +.pagination .page-numbers.current:hover { + transform: translateY(-1px); + box-shadow: 0 6px 16px rgba(59, 130, 246, 0.5); + transition: all 0.3s ease; +} + +.pagination .page-numbers.prev, +.pagination .page-numbers.next { + min-width: 44px; + height: 44px; + background: #ffffff; + border: 1px solid #e5e7eb; + color: #6b7280; + font-weight: 600; + border-radius: 8px; + transition: all 0.3s ease; +} + +.pagination .page-numbers.prev:hover, +.pagination .page-numbers.next:hover { + background: #3b82f6; + color: white; + border-color: #3b82f6; + box-shadow: 0 4px 8px rgba(59, 130, 246, 0.25); + transition: all 0.3s ease; +} + +.pagination .page-numbers.dots { + border: none; + background: transparent; + cursor: default; + color: #9ca3af; + box-shadow: none; + font-weight: 400; +} + +.pagination .page-numbers.dots:hover { + background: transparent; + border: none; + transform: none; + box-shadow: none; + color: #9ca3af; +} + +/* 分页导航响应式 */ +@media (max-width: 768px) { + .pagination { + margin: 40px 0; + gap: 4px; + } + + .pagination .page-numbers { + width: 36px; + height: 36px; + font-size: 13px; + } +} + +/* 响应式布局 */ +@media screen and (max-width: 1024px) { + .posts-grid { + grid-template-columns: repeat(2, 1fr); + } +} + +@media screen and (max-width: 768px) { + .posts-grid { + grid-template-columns: 1fr; + } + + .content-area { + padding: 15px; + } +} + +/* +* 首页Banner轮播组件样式 +*/ + +/* Banner轮播容器样式已移至block-banner.php中的内联样式 */ + +.banner-slide { + height: 100%; + background-size: cover; + background-position: center; + position: relative; + display: flex; + align-items: center; +} + +.banner-overlay { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0, 0, 0, 0.4); + z-index: 1; +} + +.banner-content { + position: relative; + z-index: 2; + width: 100%; + max-width: 80%; + color: white; + margin: 0 auto; +} +/* Banner分页器样式已移至block-banner.php中的内联样式 */ + +.banner-title { + font-size: 3rem; + font-weight: bold; + margin-bottom: 1rem; + text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5); +} + +.banner-description { + font-size: 1.2rem; + margin-bottom: 2rem; + text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5); +} + +.banner-btn { + padding: 12px 30px; + font-size: 1.1rem; + border-radius: 25px; + margin-top: 20px; + background: #fff; + border: none; + transition: all 0.3s ease; + text-decoration: none; + display: inline-block; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3); + color: #0056b3; +} + +.banner-btn:hover { + transform: translateY(-2px); + background: #fff; + opacity: 0.7; + color: #0056b3; + transition: all 0.3s ease; +} + +/* Banner导航按钮和分页器样式已移至block-banner.php中的内联样式 */ + +@media (max-width: 768px) { + .nenghui-banner { + height: 400px; + } + + .banner-title { + font-size: 2rem; + } + + .banner-description { + font-size: 1rem; + } + + .banner-btn { + padding: 10px 25px; + font-size: 1rem; + } +} + +/* +* Futures 组件样式 +*/ + +.warpbox { + text-align: center; +} + +.section-title { + font-size: 2.125rem; + color: #fff; + text-transform: uppercase; + margin-bottom: 3rem; + font-weight: 600; +} + +.stats-grid { + max-width: 1200px; + margin: 0 auto; + display: flex; + align-items: flex-start; + justify-content: space-around; +} + +.stat-item { + text-align: center; + color: white; + padding: 20px; +} + +.stat-item img { + margin: 0 auto 15px; + height: 75px; +} + +.stat-label { + font-size: 1.2rem; + letter-spacing: 0.5px; + opacity: 0.9; +} + +.stat-value { + font-size: 1.2rem; + font-weight: 700; + margin: 15px 0; +} + +.cta-button { + padding: 12px 32px; + display: inline-flex; + align-items: center; + gap: 8px; + font-weight: 500; + letter-spacing: 0.5px; + color: white; + text-decoration: none; + transition: all 0.3s; + background-color: #ffffff; + border-radius: 2rem; + color: #03447c; + margin-top: 1rem; +} + +.cta-button:hover { + background: rgba(255, 255, 255, 0.1); + transition: all 0.3s ease; +} + +@media (max-width: 768px) { + .stats-grid { + grid-template-columns: 1fr; + gap: 40px; + } + + .stat-item img { + width: 50px; + height: 50px; + } + + .stat-value { + font-size: 2.2rem; + } + + .stat-label { + font-size: 1rem; + } +} + +.wow { + visibility: hidden; +} + +.animated { + animation-duration: 1s; +} + +@keyframes fadeInUp { + 0% { + opacity: 0; + transform: translateY(30px); + } + + 100% { + opacity: 1; + transform: translateY(0); + } +} + +.fadeInUp { + animation-name: fadeInUp; +} + +/* +* 首页News板块 +*/ +.news-container { + max-width: 80%; + margin: 0 auto; + padding: 40px 20px; + margin-top: 3rem; +} + +.news-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 40px; +} + +.news-title { + font-size: 48px; + font-weight: bold; + color: #333; + letter-spacing: 2px; +} + +.learn-more-btn { + background-color: #1976d2; + color: white; + padding: 12px 24px; + border: none; + border-radius: 25px; + font-size: 14px; + cursor: pointer; + text-decoration: none; + display: inline-flex; + align-items: center; + gap: 8px; + transition: background-color 0.3s; +} + +.learn-more-btn:hover { + background-color: #1565c0; + transition: all 0.3s ease; +} + +.learn-more-btn::after { + content: '→'; + font-size: 16px; +} + +.news-content { + display: flex; + gap: 40px; + align-items: flex-start; +} + +.image-section { + flex: 1; +} + +.main-image { + width: 100%; + height: 330px; + border-radius: 15px; + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1); +} + +.news-list { + flex: 1; + display: flex; + flex-direction: column; + gap: 20px; +} + +.news-item { + background: white; + padding: 18px; + border-radius: 12px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05); + transition: transform 0.2s, box-shadow 0.2s; +} + +.news-item:hover { + transform: translateY(-2px); + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1); + transition: all 0.3s ease; +} + +.news-item-link { + text-decoration: none; + color: inherit; + display: block; +} + +.news-item-link:hover { + text-decoration: none; + color: inherit; + transition: all 0.3s ease; +} + +.news-item-title { + font-size: 16px; + font-weight: bold; + color: #333; + margin-bottom: 12px; + line-height: 1.4; +} + +.news-meta { + display: flex; + align-items: center; + gap: 12px; +} + +.review-tag { + background-color: #1976d2; + color: white; + padding: 4px 12px; + border-radius: 15px; + font-size: 12px; + font-weight: 500; +} + +.news-date { + color: #666; + font-size: 14px; +} + +@media (max-width: 768px) { + .news-container { + padding: 20px 15px; + } + + .news-header { + flex-direction: column; + gap: 20px; + text-align: center; + } + + .news-title { + font-size: 36px; + } + + .news-content { + flex-direction: column; + gap: 30px; + } +} + + +/* +* 首页Tabs选项卡样式 +*/ +.nenghui-container { + max-width: 80%; + margin: 0 auto; + padding: 60px 20px; + position: relative; + overflow: hidden; +} + +.nenghui-container::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: url('data:image/svg+xml,'); + pointer-events: none; + z-index: 1; +} + +.nenghui-container > * { + position: relative; + z-index: 2; +} + +.nenghui-tabs { + display: flex; + justify-content: center; + margin-bottom: 40px; + gap: 10px; +} + +.nenghui-tab { + padding: 12px 24px; + background-color: #e8e8e8; + border: none; + border-radius: 25px; + cursor: pointer; + font-size: 20px; + margin-right: 15px; + color: #666; + display: flex; + align-items: center; + gap: 8px; + font-weight: 500; +} + +.nenghui-tab.active { + background-color: #1e5a96; + color: white; +} + +.nenghui-tab:hover { + background-color: #d0d0d0; + transition: all 0.3s ease; +} + +.nenghui-tab.active:hover { + background-color: #1e5a96; + transition: all 0.3s ease; +} + +/* 主要内容区域 */ +.main-content { + display: flex; + align-items: center; + gap: 60px; + border-radius: 20px; + padding: 60px; + background: #ffffff; + margin-top: 20px; +} + +.content-left { + flex: 1; +} + +.content-right { + flex: 1; +} + +.main-title { + font-size: 48px; + font-weight: bold; + color: #333; + line-height: 1.2; + margin-bottom: 30px; +} + +.highlight { + color: #1e5a96; +} + +.learn-more-btn { + background-color: #1e5a96; + color: white; + padding: 15px 30px; + border: none; + border-radius: 25px; + font-size: 16px; + cursor: pointer; + display: inline-flex; + align-items: center; + gap: 10px; +} + +.learn-more-btn:hover { + background-color: #164a7a; + transition: all 0.3s ease; +} + +.arrow { + font-size: 14px; +} + +.tab-image { + width: 100%; + height: 300px; + border-radius: 15px; + position: relative; + overflow: hidden; + background: linear-gradient(135deg, #f0f0f0 0%, #e0e0e0 100%); + display: flex; + align-items: center; + justify-content: center; +} + +.tab-image img { + width: 100%; + height: 100%; + object-fit: cover; + border-radius: 15px; +} + +/* 当没有图片时的占位样式 */ +.tab-image:empty::before { + content: "暂无图片"; + color: #999; + font-size: 16px; + display: flex; + align-items: center; + justify-content: center; + width: 100%; + height: 100%; +} + +/* 响应式设计 */ +@media (max-width: 1024px) { + .nenghui-container { + max-width: 95%; + padding: 40px 15px; + border-radius: 20px; + } + + .main-content { + gap: 40px; + padding: 40px; + } +} + +@media (max-width: 768px) { + .nenghui-container { + padding: 30px 15px; + border-radius: 15px; + } + + .main-content { + flex-direction: column; + padding: 30px 20px; + gap: 30px; + } + + .main-title { + font-size: 32px; + text-align: center; + margin-bottom: 20px; + } + + .nenghui-tabs { + flex-wrap: wrap; + gap: 8px; + margin-bottom: 30px; + } + + .nenghui-tab { + font-size: 13px; + padding: 10px 18px; + } + + .tab-image { + height: 250px; + } +} + +@media (max-width: 480px) { + .nenghui-container { + padding: 20px 10px; + } + + .main-content { + padding: 20px 15px; + } + + .main-title { + font-size: 28px; + } + + .nenghui-tab { + font-size: 12px; + padding: 8px 16px; + } + + .learn-more-btn { + padding: 12px 24px; + font-size: 14px; + } + + .tab-image { + height: 200px; + } +} + +/* +* Footer 样式 +*/ +.main-footer { + background-color: #fff !important; + padding: 60px 0 30px; + border-top: 1px solid #e9ecef; +} + +.footer-container { + max-width: 1300px; + margin: 0 auto; + padding: 0 20px; +} + +.footer-main { + display: grid; + grid-template-columns: 1fr 3fr 1fr; + gap: 0; + margin-bottom: 40px; +} + +/* Logo 和品牌区域 */ +.footer-brand { + display: flex; + flex-direction: column; + gap: 20px; +} + +.footer-logo { + display: flex; + justify-content: flex-start; +} + +.footer-logo .logo-img { + height: 60px; + width: auto; + margin: 0 !important; +} + +.footer-social { + display: flex; + gap: 15px; +} + +.social-link { + display: flex; + align-items: center; + justify-content: center; + width: 40px; + height: 40px; + background-color: #000; + color: white; + border-radius: 50%; + text-decoration: none; + transition: all 0.3s ease; +} + +.social-link:hover { + background-color: #0069a0; + transform: translateY(-2px); +} + +.social-link.linkedin:hover { + background-color: #0077b5; +} + +.social-link.facebook:hover { + background-color: #1877f2; +} + +.social-link.twitter:hover { + background-color: #1da1f2; +} + +/* 导航菜单区域 */ +.footer-nav { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 30px; +} + +.footer-nav-column { + display: flex; + flex-direction: column; +} + +.footer-nav-title { + font-size: 16px; + font-weight: 600; + color: #333; + margin: 0 0 20px 0; + text-transform: uppercase; + letter-spacing: 0.5px; +} + +.footer-nav-list { + list-style: none; + margin: 0; + padding: 0; + display: flex; + flex-direction: column; + gap: 12px; +} + +.footer-nav-list li a { + color: #000; + text-decoration: none; + font-size: 14px; + line-height: 1.5; + transition: color 0.3s ease; +} + +.footer-nav-list li a:hover { + color: #0069a0; +} + +/* 订阅区域 */ +.footer-subscribe { + display: flex; + flex-direction: column; + align-items: flex-end; +} + +.subscribe-form { + display: flex; + gap: 0; + width: 100%; + max-width: 300px; +} + +.subscribe-input { + flex: 1; + padding: 12px 16px; + border: 1px solid #dee2e6; + border-right: none; + border-radius: 4px 0 0 4px; + font-size: 14px; + outline: none; + transition: border-color 0.3s ease; +} + +.subscribe-input:focus { + border-color: #0069a0; +} + +.subscribe-input::placeholder { + color: #adb5bd; +} + +.subscribe-btn { + padding: 12px 20px; + background-color: #0069a0; + color: white; + border: 1px solid #0069a0; + border-radius: 0 4px 4px 0; + font-size: 14px; + font-weight: 500; + cursor: pointer; + transition: background-color 0.3s ease; + white-space: nowrap; +} + +.subscribe-btn:hover { + background-color: #005580; + border-color: #005580; +} + +/* 分隔线 */ +.footer-divider { + height: 1px; + background-color: #dee2e6; + margin: 40px 0 30px; +} + +/* 底部版权区域 */ +.footer-bottom { + display: flex; + justify-content: space-between; + align-items: center; + flex-wrap: wrap; + gap: 20px; +} + +.footer-copyright p { + margin: 0; + color: #000; + font-size: 14px; +} + +.footer-links { + display: flex; + gap: 30px; +} + +.footer-links a { + color: #000; + text-decoration: none; + font-size: 14px; + transition: color 0.3s ease; +} + +.footer-links a:hover { + color: #0069a0; +} + +/* Footer 响应式设计 */ +@media (max-width: 992px) { + .footer-main { + grid-template-columns: 1fr; + gap: 40px; + text-align: center; + } + + .footer-nav { + grid-template-columns: repeat(2, 1fr); + gap: 40px; + } + + .footer-subscribe { + align-items: center; + } +} + +@media (max-width: 768px) { + .main-footer { + padding: 40px 0 20px; + margin-top: 60px; + } + + .article-content { + width: 90%; + padding: 20px 10px; + } + + .footer-container { + padding: 0 15px; + } + + .footer-main { + gap: 30px; + } + + .footer-logo { + justify-content: center; + } + + .footer-nav { + grid-template-columns: 1fr; + gap: 30px; + } + + .footer-bottom { + flex-direction: column; + text-align: center; + gap: 15px; + } + + .footer-links { + gap: 20px; + } + + .subscribe-form { + max-width: 100%; + } +} + +@media (max-width: 480px) { + .footer-links { + gap: 10px; + } + + .footer-social { + justify-content: center; + } + + .subscribe-form { + flex-direction: column; + gap: 10px; + } + + .subscribe-input { + border-radius: 4px; + border-right: 1px solid #dee2e6; + } + + .subscribe-btn { + border-radius: 4px; + } +} \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/css/mobile.css b/wp-content/themes/nenghui-energy-theme-4/assets/css/mobile.css new file mode 100644 index 0000000..e69de29 diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/css/post.css b/wp-content/themes/nenghui-energy-theme-4/assets/css/post.css new file mode 100644 index 0000000..1b2957b --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/assets/css/post.css @@ -0,0 +1,227 @@ +.article-content h1 { + font-size: 25px; + transition: all 0.3s ease; +} + +.article-content h2 { + font-size: 30px; + color: #0073aa; + font-weight: bold; + border-bottom: 2px solid #0073aa; + transition: all 0.3s ease; +} + +.article-content h3 { + font-size: 26px; + color: #333; + font-weight: normal; + transition: all 0.3s ease; +} + +.article-content h4 { + font-size: 22px; + color: #555; + font-weight: bold; + margin-top: 20px; + margin-bottom: 10px; + transition: all 0.3s ease; +} + +.article-content h5 { + font-size: 18px; + color: #666; + font-weight: bold; + margin-top: 15px; + margin-bottom: 8px; +} + +.article-content h6 { + font-size: 16px; + color: #777; + font-weight: bold; + margin-top: 10px; + margin-bottom: 5px; +} + +/* 段落样式 */ +.article-content p { + font-size: 14px; + line-height: 1.8; + color: #000000; + margin-bottom: 16px; + word-wrap: break-word; + overflow-wrap: break-word; + white-space: normal; +} + +/* 链接样式 */ +.article-content a { + color: #0073aa; + text-decoration: none; + border-bottom: 1px solid transparent; + transition: all 0.3s ease; +} + +.article-content a:hover { + color: #0056b3; + text-decoration: underline; + transition: all 0.3s ease; +} + +/* 列表样式 */ +.article-content ul, +.article-content ol { + margin: 16px 0; + padding-left: 30px; +} + +.article-content ul li, +.article-content ol li { + font-size: 16px; + line-height: 1.6; + color: #333; + margin-bottom: 8px; +} + +.article-content ul li { + list-style-type: disc; +} + +.article-content ol li { + list-style-type: decimal; +} + +/* 引用样式 */ +.article-content blockquote { + background: #f9f9f9; + border-left: 4px solid #0073aa; + margin: 20px 0; + padding: 15px 20px; + font-style: italic; + color: #555; +} + +.article-content blockquote p { + margin-bottom: 0; +} + +/* 代码样式 */ +.article-content code { + background: #f4f4f4; + padding: 2px 6px; + border-radius: 3px; + font-family: 'Courier New', monospace; + font-size: 14px; + color: #d63384; +} + +.article-content pre { + background: #f8f8f8; + border: 1px solid #ddd; + border-radius: 5px; + padding: 15px; + margin: 20px 0; +} + +.article-content pre code { + background: none; + padding: 0; + color: #333; +} + +/* 图片样式 */ +.article-content img { + max-width: 100%; + height: auto; + border-radius: 5px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); + margin: 20px 0; + display: block; +} + +/* 表格样式 */ +.article-content table { + width: 100%; + border-collapse: collapse; + margin: 20px 0; + background: #fff; +} + +.article-content table th, +.article-content table td { + border: 1px solid #ddd; + padding: 12px; + text-align: left; +} + +.article-content table th { + background: #f5f5f5; + font-weight: bold; + color: #333; +} + +.article-content table tr:nth-child(even) { + background: #f9f9f9; +} + +/* 分隔线样式 */ +.article-content hr { + border: none; + height: 2px; + background: linear-gradient(to right, #0073aa, #2eb6aa); + margin: 30px 0; + border-radius: 1px; +} + +/* 强调文本样式 */ +.article-content strong, +.article-content b { + font-weight: bold; + color: #333; + transition: all 0.3s ease; +} + +.article-content em, +.article-content i { + font-style: italic; + color: #555; +} + +/* 文章容器整体样式 */ +.article-content { + margin: 20px auto; + padding: 30px; + font-family: 'Arial', 'Microsoft YaHei', sans-serif; + background: #fff; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); + border-radius: 8px; + word-wrap: break-word; + overflow-wrap: break-word; +} + +/* 响应式设计 */ +@media (max-width: 768px) { + .article-content { + padding: 15px; + } + + .article-content h1 { + font-size: 28px; + } + + .article-content h2 { + font-size: 24px; + } + + .article-content h3 { + font-size: 20px; + } + + .article-content h4 { + font-size: 18px; + } + + .article-content p { + font-size: 14px; + } +} \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/css/products-content.css b/wp-content/themes/nenghui-energy-theme-4/assets/css/products-content.css new file mode 100644 index 0000000..f653abd --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/assets/css/products-content.css @@ -0,0 +1,740 @@ +/** + * 产品详情页样式 + * Product Content Page Styles + */ + +/* 产品特性样式 */ +.product-features { + padding: 60px 0; + max-width: 1200px; + margin: 0 auto; +} + +h2.product-title { + align-content: center; + padding: 0 20px; +} + +.product-description{ + color: #666; + line-height: 1.5; + padding: 10px 20px; +} + +.features-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); + gap: 30px; + padding: 0 20px; + max-width: 1200px; + margin: 0 auto; +} + +.feature-card { + background: #ffffff; + border: 1px solid #e5e5e5; + border-radius: 8px; + padding: 40px 30px; + text-align: center; + transition: all 0.3s ease; + position: relative; + overflow: hidden; + box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05); +} + +.feature-card:hover { + border-radius: 0; + transform: translateY(-5px); + box-shadow: 0 8px 25px rgba(0, 0, 0, 0.1); + transition: all 0.3s ease; +} + +.feature-card::after { + content: ''; + position: absolute; + bottom: 0; + left: 0; + right: 0; + height: 5px; + background: linear-gradient(90deg, #009294 0%, #116698 100%); + transform: scaleX(0); + transition: transform 0.3s ease; +} + +.feature-card:hover::after { + transform: scaleX(1); + transition: all 0.3s ease; +} + +.feature-icon { + margin-bottom: 25px; + display: flex; + justify-content: center; + align-items: center; +} + +.feature-icon img { + width: 60px; + height: 60px; + object-fit: contain; +} + +.feature-title { + font-size: 16px; + font-weight: 700; + color: #333333; + line-height: 1.3; + letter-spacing: 0.5px; + margin-bottom: 15px; + text-transform: uppercase; +} + +.feature-description { + font-size: 14px; + color: #666666; + line-height: 1.5; + margin: 0; +} + +/* 响应式设计 */ +@media (max-width: 992px) { + .features-grid { + grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); + gap: 25px; + } + + .feature-card { + padding: 35px 25px; + } + + .feature-icon img { + width: 50px; + height: 50px; + } +} + +@media (max-width: 768px) { + .features-grid { + grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); + gap: 20px; + padding: 0 15px; + } + + .feature-card { + padding: 30px 20px; + } + + .feature-icon img { + width: 45px; + height: 45px; + } + + .feature-title { + font-size: 15px; + } + + .feature-description { + font-size: 13px; + } +} + +@media (max-width: 576px) { + .features-grid { + grid-template-columns: 1fr; + } + + .product-features { + padding: 40px 0; + } + + .feature-card { + padding: 25px 15px; + } + + .feature-icon { + margin-bottom: 20px; + } + + .feature-icon img { + width: 40px; + height: 40px; + } + + .feature-title { + font-size: 14px; + margin-bottom: 12px; + } + + .feature-description { + font-size: 12px; + } +} + +/* 使用场景板块样式 */ +.usage-scenario-section { + padding: 20px 0; + background: #f8f9fa; +} + +.usage-scenario-content { + max-width: 1200px; + margin: 0 auto; + padding: 0 20px; +} + +.scenario-header { + text-align: left; + margin-bottom: 50px; +} + +.scenario-title { + font-size: 36px; + font-weight: 700; + background: linear-gradient(to bottom, #30b7aa, #027da4); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + letter-spacing: 2px; + margin-bottom: 20px; + text-transform: uppercase; +} + +.scenario-description { + font-size: 18px; + color: #666666; + line-height: 1.6; + margin: 0; + max-width: 600px; +} + +.scenario-image { + text-align: center; + margin: 50px 0; + display: flex; + justify-content: center; +} + +.scenario-image img { + max-width: 100%; + height: auto; + border-radius: 8px; + display: block; +} + +.scenario-footer { + text-align: left; + margin-top: 50px; + display: flex; + justify-content: center; +} + +.scenario-text { + font-size: 16px; + color: #555555; + line-height: 1.8; + margin: 0; + text-align: left; +} + +/* 响应式设计 */ +@media (max-width: 992px) { + .usage-scenario-section { + padding: 60px 0; + } + + .scenario-title { + font-size: 30px; + } + + .scenario-description { + font-size: 16px; + } + + .scenario-text { + font-size: 15px; + } +} + +@media (max-width: 768px) { + .usage-scenario-section { + padding: 50px 0; + margin-top: 40px; + } + + .usage-scenario-content { + padding: 0 15px; + } + + .scenario-header { + margin-bottom: 40px; + } + + .scenario-title { + font-size: 26px; + letter-spacing: 1px; + } + + .scenario-description { + font-size: 15px; + } + + .scenario-image { + margin: 40px 0; + } + + .scenario-footer { + margin-top: 40px; + } + + .scenario-text { + font-size: 14px; + line-height: 1.7; + } +} + +@media (max-width: 576px) { + .usage-scenario-section { + padding: 40px 0; + } + + .scenario-title { + font-size: 22px; + margin-bottom: 15px; + } + + .scenario-description { + font-size: 14px; + } + + .scenario-image { + margin: 30px 0; + } + + .scenario-text { + font-size: 13px; + line-height: 1.6; + } +} + +/* 技术规格板块样式 */ +.technical-specs-section { + padding: 20px 0; + background: #ffffff; +} + +.technical-specs-content { + max-width: 1200px; + margin: 0 auto; + padding: 0 20px; +} + +.specs-header { + text-align: left; + margin-bottom: 50px; +} + +.specs-title { + font-size: 36px; + font-weight: 700; + background: linear-gradient(to bottom, #30b7aa, #027da4); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + letter-spacing: 2px; + margin-bottom: 20px; + text-transform: uppercase; +} + +.specs-accordion { + width: 100%; +} + +.accordion-item { + margin-bottom: 20px; + background: #ffffff; + border: 1px solid #e5e5e5; + border-radius: 8px; + overflow: hidden; + transition: box-shadow 0.3s ease; +} + +.accordion-item:hover { + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); +} + +.accordion-trigger { + width: 100%; + padding: 20px 24px; + background: none; + border: none; + cursor: pointer; + display: flex; + justify-content: space-between; + align-items: center; + text-align: left; + transition: background-color 0.3s ease; +} + +.accordion-trigger:hover { + background-color: #f8f9fa; +} + +.accordion-trigger:focus { + outline: 2px solid #30b7aa; + outline-offset: -2px; +} + +.accordion-title { + font-size: 18px; + font-weight: 600; + margin: 0; + color: #333333; + text-transform: uppercase; + letter-spacing: 1px; + flex: 1; +} + +.accordion-icon { + width: 20px; + height: 20px; + position: relative; + flex-shrink: 0; + margin-left: 16px; + transition: transform 0.3s ease; +} + +.accordion-icon::before, +.accordion-icon::after { + content: ''; + position: absolute; + top: 50%; + left: 50%; + background: #30b7aa; + transition: transform 0.3s ease; +} + +.accordion-icon::before { + width: 12px; + height: 2px; + transform: translate(-50%, -50%); +} + +.accordion-icon::after { + width: 2px; + height: 12px; + transform: translate(-50%, -50%); +} + +.accordion-item.is-expanded .accordion-icon::after { + transform: translate(-50%, -50%) rotate(90deg); +} + +.accordion-panel { + max-height: 0; + overflow: hidden; + transition: max-height 0.3s cubic-bezier(0.4, 0, 0.2, 1); + background: #ffffff; + will-change: max-height; +} + +.accordion-panel[hidden] { + display: none; +} + +.accordion-content { + padding: 24px; + color: #555555; + line-height: 1.6; + border-top: 1px solid #f0f0f0; +} + +/* 响应式设计 */ +@media (max-width: 992px) { + .specs-title { + font-size: 30px; + } + + .accordion-trigger { + padding: 18px 20px; + } + + .accordion-title { + font-size: 16px; + } + + .accordion-content { + padding: 20px; + } +} + +@media (max-width: 768px) { + .technical-specs-content { + padding: 0 15px; + } + + .specs-header { + margin-bottom: 40px; + } + + .specs-title { + font-size: 26px; + letter-spacing: 1px; + } + + .accordion-trigger { + padding: 16px 18px; + } + + .accordion-title { + font-size: 15px; + } + + .accordion-icon { + width: 18px; + height: 18px; + margin-left: 12px; + } + + .accordion-icon::before { + width: 10px; + } + + .accordion-icon::after { + height: 10px; + } + + .accordion-content { + padding: 18px; + } +} + +@media (max-width: 576px) { + .specs-title { + font-size: 22px; + margin-bottom: 15px; + } + + .accordion-item { + margin-bottom: 16px; + } + + .accordion-trigger { + padding: 14px 16px; + } + + .accordion-title { + font-size: 14px; + letter-spacing: 0.5px; + } + + .accordion-icon { + width: 16px; + height: 16px; + margin-left: 10px; + } + + .accordion-icon::before { + width: 8px; + } + + .accordion-icon::after { + height: 8px; + } + + .accordion-content { + padding: 16px; + } +} + +/* PDF下载板块样式 */ +.pdf-downloads-section { + padding: 60px 0; + max-width: 1200px; + margin: 0 auto; +} + +.pdf-downloads-content { + padding: 0 20px; + max-width: 1200px; + margin: 0; +} + +.downloads-header { + text-align: left; + margin-bottom: 50px; +} + +.downloads-title { + font-size: 32px; + font-weight: 700; + color: #333333; + letter-spacing: 2px; + margin: 0; + position: relative; + display: inline-block; +} + +.downloads-title::after { + content: ''; + position: absolute; + bottom: -10px; + left: 0; + width: 60px; + height: 3px; + background: linear-gradient(90deg, #009294 0%, #116698 100%); +} + +.downloads-grid { + display: grid; + grid-template-columns: 1fr; + gap: 20px; + margin: 0; +} + +.download-item { + background: #ffffff; + border: 1px solid #e5e5e5; + border-radius: 8px; + padding: 25px; + display: flex; + align-items: center; + gap: 20px; + transition: all 0.3s ease; + box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05); +} + +.download-item:hover { + transform: translateY(-3px); + box-shadow: 0 8px 25px rgba(0, 0, 0, 0.1); + border-color: #009294; + transition: all 0.3s ease; +} + +.download-icon { + flex-shrink: 0; +} + +.pdf-icon { + width: 48px; + height: 48px; + object-fit: contain; +} + +.download-info { + flex: 1; + min-width: 0; +} + +.download-title { + font-size: 18px; + font-weight: 600; + color: #333333; + margin: 0 0 8px 0; + line-height: 1.3; +} + +.download-description { + font-size: 14px; + color: #666666; + margin: 0 0 8px 0; + line-height: 1.4; +} + +.download-size { + font-size: 12px; + color: #999999; + font-weight: 500; +} + +.download-action { + flex-shrink: 0; +} + +.download-button { + display: inline-flex; + align-items: center; + justify-content: center; + width: 48px; + height: 48px; + background: linear-gradient(135deg, #009294 0%, #116698 100%); + border-radius: 50%; + text-decoration: none; + transition: all 0.3s ease; + box-shadow: 0 4px 15px rgba(0, 146, 148, 0.3); +} + +.download-button:hover { + transform: scale(1.1); + box-shadow: 0 6px 20px rgba(0, 146, 148, 0.4); + text-decoration: none; + transition: all 0.3s ease; +} + +.download-btn-icon { + width: 20px; + height: 20px; + filter: brightness(0) invert(1); +} + +/* 响应式设计 */ +@media (max-width: 768px) { + .pdf-downloads-section { + padding: 40px 0; + } + + .pdf-downloads-content { + padding: 0 15px; + } + + .downloads-title { + font-size: 24px; + } + + .download-item { + padding: 20px; + gap: 15px; + } + + .download-title { + font-size: 16px; + } + + .download-description { + font-size: 13px; + } + + .pdf-icon { + width: 40px; + height: 40px; + } + + .download-button { + width: 40px; + height: 40px; + } + + .download-btn-icon { + width: 16px; + height: 16px; + } +} + +@media (max-width: 480px) { + .download-item { + flex-direction: column; + text-align: center; + gap: 15px; + } + + .download-info { + order: 1; + } + + .download-icon { + order: 2; + } + + .download-action { + order: 3; + } +} \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/css/swiper-bundle.min.css b/wp-content/themes/nenghui-energy-theme-4/assets/css/swiper-bundle.min.css new file mode 100644 index 0000000..af74a68 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/assets/css/swiper-bundle.min.css @@ -0,0 +1,13 @@ +/** + * Swiper 11.2.10 + * Most modern mobile touch slider and framework with hardware accelerated transitions + * https://swiperjs.com + * + * Copyright 2014-2025 Vladimir Kharlampidi + * + * Released under the MIT License + * + * Released on: June 28, 2025 + */ + +@font-face{font-family:swiper-icons;src:url('data:application/font-woff;charset=utf-8;base64, d09GRgABAAAAAAZgABAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAGRAAAABoAAAAci6qHkUdERUYAAAWgAAAAIwAAACQAYABXR1BPUwAABhQAAAAuAAAANuAY7+xHU1VCAAAFxAAAAFAAAABm2fPczU9TLzIAAAHcAAAASgAAAGBP9V5RY21hcAAAAkQAAACIAAABYt6F0cBjdnQgAAACzAAAAAQAAAAEABEBRGdhc3AAAAWYAAAACAAAAAj//wADZ2x5ZgAAAywAAADMAAAD2MHtryVoZWFkAAABbAAAADAAAAA2E2+eoWhoZWEAAAGcAAAAHwAAACQC9gDzaG10eAAAAigAAAAZAAAArgJkABFsb2NhAAAC0AAAAFoAAABaFQAUGG1heHAAAAG8AAAAHwAAACAAcABAbmFtZQAAA/gAAAE5AAACXvFdBwlwb3N0AAAFNAAAAGIAAACE5s74hXjaY2BkYGAAYpf5Hu/j+W2+MnAzMYDAzaX6QjD6/4//Bxj5GA8AuRwMYGkAPywL13jaY2BkYGA88P8Agx4j+/8fQDYfA1AEBWgDAIB2BOoAeNpjYGRgYNBh4GdgYgABEMnIABJzYNADCQAACWgAsQB42mNgYfzCOIGBlYGB0YcxjYGBwR1Kf2WQZGhhYGBiYGVmgAFGBiQQkOaawtDAoMBQxXjg/wEGPcYDDA4wNUA2CCgwsAAAO4EL6gAAeNpj2M0gyAACqxgGNWBkZ2D4/wMA+xkDdgAAAHjaY2BgYGaAYBkGRgYQiAHyGMF8FgYHIM3DwMHABGQrMOgyWDLEM1T9/w8UBfEMgLzE////P/5//f/V/xv+r4eaAAeMbAxwIUYmIMHEgKYAYjUcsDAwsLKxc3BycfPw8jEQA/gZBASFhEVExcQlJKWkZWTl5BUUlZRVVNXUNTQZBgMAAMR+E+gAEQFEAAAAKgAqACoANAA+AEgAUgBcAGYAcAB6AIQAjgCYAKIArAC2AMAAygDUAN4A6ADyAPwBBgEQARoBJAEuATgBQgFMAVYBYAFqAXQBfgGIAZIBnAGmAbIBzgHsAAB42u2NMQ6CUAyGW568x9AneYYgm4MJbhKFaExIOAVX8ApewSt4Bic4AfeAid3VOBixDxfPYEza5O+Xfi04YADggiUIULCuEJK8VhO4bSvpdnktHI5QCYtdi2sl8ZnXaHlqUrNKzdKcT8cjlq+rwZSvIVczNiezsfnP/uznmfPFBNODM2K7MTQ45YEAZqGP81AmGGcF3iPqOop0r1SPTaTbVkfUe4HXj97wYE+yNwWYxwWu4v1ugWHgo3S1XdZEVqWM7ET0cfnLGxWfkgR42o2PvWrDMBSFj/IHLaF0zKjRgdiVMwScNRAoWUoH78Y2icB/yIY09An6AH2Bdu/UB+yxopYshQiEvnvu0dURgDt8QeC8PDw7Fpji3fEA4z/PEJ6YOB5hKh4dj3EvXhxPqH/SKUY3rJ7srZ4FZnh1PMAtPhwP6fl2PMJMPDgeQ4rY8YT6Gzao0eAEA409DuggmTnFnOcSCiEiLMgxCiTI6Cq5DZUd3Qmp10vO0LaLTd2cjN4fOumlc7lUYbSQcZFkutRG7g6JKZKy0RmdLY680CDnEJ+UMkpFFe1RN7nxdVpXrC4aTtnaurOnYercZg2YVmLN/d/gczfEimrE/fs/bOuq29Zmn8tloORaXgZgGa78yO9/cnXm2BpaGvq25Dv9S4E9+5SIc9PqupJKhYFSSl47+Qcr1mYNAAAAeNptw0cKwkAAAMDZJA8Q7OUJvkLsPfZ6zFVERPy8qHh2YER+3i/BP83vIBLLySsoKimrqKqpa2hp6+jq6RsYGhmbmJqZSy0sraxtbO3sHRydnEMU4uR6yx7JJXveP7WrDycAAAAAAAH//wACeNpjYGRgYOABYhkgZgJCZgZNBkYGLQZtIJsFLMYAAAw3ALgAeNolizEKgDAQBCchRbC2sFER0YD6qVQiBCv/H9ezGI6Z5XBAw8CBK/m5iQQVauVbXLnOrMZv2oLdKFa8Pjuru2hJzGabmOSLzNMzvutpB3N42mNgZGBg4GKQYzBhYMxJLMlj4GBgAYow/P/PAJJhLM6sSoWKfWCAAwDAjgbRAAB42mNgYGBkAIIbCZo5IPrmUn0hGA0AO8EFTQAA');font-weight:400;font-style:normal}:root{--swiper-theme-color:#007aff}:host{position:relative;display:block;margin-left:auto;margin-right:auto;z-index:1}.swiper{margin-left:auto;margin-right:auto;position:relative;overflow:hidden;list-style:none;padding:0;z-index:1;display:block}.swiper-vertical>.swiper-wrapper{flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:flex;transition-property:transform;transition-timing-function:var(--swiper-wrapper-transition-timing-function,initial);box-sizing:content-box}.swiper-android .swiper-slide,.swiper-ios .swiper-slide,.swiper-wrapper{transform:translate3d(0px,0,0)}.swiper-horizontal{touch-action:pan-y}.swiper-vertical{touch-action:pan-x}.swiper-slide{flex-shrink:0;width:100%;height:100%;position:relative;transition-property:transform;display:block}.swiper-slide-invisible-blank{visibility:hidden}.swiper-autoheight,.swiper-autoheight .swiper-slide{height:auto}.swiper-autoheight .swiper-wrapper{align-items:flex-start;transition-property:transform,height}.swiper-backface-hidden .swiper-slide{transform:translateZ(0);-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-3d.swiper-css-mode .swiper-wrapper{perspective:1200px}.swiper-3d .swiper-wrapper{transform-style:preserve-3d}.swiper-3d{perspective:1200px}.swiper-3d .swiper-cube-shadow,.swiper-3d .swiper-slide{transform-style:preserve-3d}.swiper-css-mode>.swiper-wrapper{overflow:auto;scrollbar-width:none;-ms-overflow-style:none}.swiper-css-mode>.swiper-wrapper::-webkit-scrollbar{display:none}.swiper-css-mode>.swiper-wrapper>.swiper-slide{scroll-snap-align:start start}.swiper-css-mode.swiper-horizontal>.swiper-wrapper{scroll-snap-type:x mandatory}.swiper-css-mode.swiper-vertical>.swiper-wrapper{scroll-snap-type:y mandatory}.swiper-css-mode.swiper-free-mode>.swiper-wrapper{scroll-snap-type:none}.swiper-css-mode.swiper-free-mode>.swiper-wrapper>.swiper-slide{scroll-snap-align:none}.swiper-css-mode.swiper-centered>.swiper-wrapper::before{content:'';flex-shrink:0;order:9999}.swiper-css-mode.swiper-centered>.swiper-wrapper>.swiper-slide{scroll-snap-align:center center;scroll-snap-stop:always}.swiper-css-mode.swiper-centered.swiper-horizontal>.swiper-wrapper>.swiper-slide:first-child{margin-inline-start:var(--swiper-centered-offset-before)}.swiper-css-mode.swiper-centered.swiper-horizontal>.swiper-wrapper::before{height:100%;min-height:1px;width:var(--swiper-centered-offset-after)}.swiper-css-mode.swiper-centered.swiper-vertical>.swiper-wrapper>.swiper-slide:first-child{margin-block-start:var(--swiper-centered-offset-before)}.swiper-css-mode.swiper-centered.swiper-vertical>.swiper-wrapper::before{width:100%;min-width:1px;height:var(--swiper-centered-offset-after)}.swiper-3d .swiper-slide-shadow,.swiper-3d .swiper-slide-shadow-bottom,.swiper-3d .swiper-slide-shadow-left,.swiper-3d .swiper-slide-shadow-right,.swiper-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-3d .swiper-slide-shadow{background:rgba(0,0,0,.15)}.swiper-3d .swiper-slide-shadow-left{background-image:linear-gradient(to left,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-3d .swiper-slide-shadow-right{background-image:linear-gradient(to right,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-3d .swiper-slide-shadow-top{background-image:linear-gradient(to top,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-3d .swiper-slide-shadow-bottom{background-image:linear-gradient(to bottom,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;transform-origin:50%;box-sizing:border-box;border:4px solid var(--swiper-preloader-color,var(--swiper-theme-color));border-radius:50%;border-top-color:transparent}.swiper-watch-progress .swiper-slide-visible .swiper-lazy-preloader,.swiper:not(.swiper-watch-progress) .swiper-lazy-preloader{animation:swiper-preloader-spin 1s infinite linear}.swiper-lazy-preloader-white{--swiper-preloader-color:#fff}.swiper-lazy-preloader-black{--swiper-preloader-color:#000}@keyframes swiper-preloader-spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.swiper-virtual .swiper-slide{-webkit-backface-visibility:hidden;transform:translateZ(0)}.swiper-virtual.swiper-css-mode .swiper-wrapper::after{content:'';position:absolute;left:0;top:0;pointer-events:none}.swiper-virtual.swiper-css-mode.swiper-horizontal .swiper-wrapper::after{height:1px;width:var(--swiper-virtual-size)}.swiper-virtual.swiper-css-mode.swiper-vertical .swiper-wrapper::after{width:1px;height:var(--swiper-virtual-size)}:root{--swiper-navigation-size:44px}.swiper-button-next,.swiper-button-prev{position:absolute;top:var(--swiper-navigation-top-offset,50%);width:calc(var(--swiper-navigation-size)/ 44 * 27);height:var(--swiper-navigation-size);margin-top:calc(0px - (var(--swiper-navigation-size)/ 2));z-index:10;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--swiper-navigation-color,var(--swiper-theme-color))}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-next.swiper-button-hidden,.swiper-button-prev.swiper-button-hidden{opacity:0;cursor:auto;pointer-events:none}.swiper-navigation-disabled .swiper-button-next,.swiper-navigation-disabled .swiper-button-prev{display:none!important}.swiper-button-next svg,.swiper-button-prev svg{width:100%;height:100%;object-fit:contain;transform-origin:center}.swiper-rtl .swiper-button-next svg,.swiper-rtl .swiper-button-prev svg{transform:rotate(180deg)}.swiper-button-prev,.swiper-rtl .swiper-button-next{left:var(--swiper-navigation-sides-offset,10px);right:auto}.swiper-button-next,.swiper-rtl .swiper-button-prev{right:var(--swiper-navigation-sides-offset,10px);left:auto}.swiper-button-lock{display:none}.swiper-button-next:after,.swiper-button-prev:after{font-family:swiper-icons;font-size:var(--swiper-navigation-size);text-transform:none!important;letter-spacing:0;font-variant:initial;line-height:1}.swiper-button-prev:after,.swiper-rtl .swiper-button-next:after{content:'prev'}.swiper-button-next,.swiper-rtl .swiper-button-prev{right:var(--swiper-navigation-sides-offset,10px);left:auto}.swiper-button-next:after,.swiper-rtl .swiper-button-prev:after{content:'next'}.swiper-pagination{position:absolute;text-align:center;transition:.3s opacity;transform:translate3d(0,0,0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-pagination-disabled>.swiper-pagination,.swiper-pagination.swiper-pagination-disabled{display:none!important}.swiper-horizontal>.swiper-pagination-bullets,.swiper-pagination-bullets.swiper-pagination-horizontal,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:var(--swiper-pagination-bottom,8px);top:var(--swiper-pagination-top,auto);left:0;width:100%}.swiper-pagination-bullets-dynamic{overflow:hidden;font-size:0}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transform:scale(.33);position:relative}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active{transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main{transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev{transform:scale(.33)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next{transform:scale(.33)}.swiper-pagination-bullet{width:var(--swiper-pagination-bullet-width,var(--swiper-pagination-bullet-size,8px));height:var(--swiper-pagination-bullet-height,var(--swiper-pagination-bullet-size,8px));display:inline-block;border-radius:var(--swiper-pagination-bullet-border-radius,50%);background:var(--swiper-pagination-bullet-inactive-color,#000);opacity:var(--swiper-pagination-bullet-inactive-opacity, .2)}button.swiper-pagination-bullet{border:none;margin:0;padding:0;box-shadow:none;-webkit-appearance:none;appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-bullet:only-child{display:none!important}.swiper-pagination-bullet-active{opacity:var(--swiper-pagination-bullet-opacity, 1);background:var(--swiper-pagination-color,var(--swiper-theme-color))}.swiper-pagination-vertical.swiper-pagination-bullets,.swiper-vertical>.swiper-pagination-bullets{right:var(--swiper-pagination-right,8px);left:var(--swiper-pagination-left,auto);top:50%;transform:translate3d(0px,-50%,0)}.swiper-pagination-vertical.swiper-pagination-bullets .swiper-pagination-bullet,.swiper-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:var(--swiper-pagination-bullet-vertical-gap,6px) 0;display:block}.swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic,.swiper-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{top:50%;transform:translateY(-50%);width:8px}.swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet,.swiper-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{display:inline-block;transition:.2s transform,.2s top}.swiper-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet,.swiper-pagination-horizontal.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 var(--swiper-pagination-bullet-horizontal-gap,4px)}.swiper-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic,.swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{left:50%;transform:translateX(-50%);white-space:nowrap}.swiper-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet,.swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:.2s transform,.2s left}.swiper-horizontal.swiper-rtl>.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:.2s transform,.2s right}.swiper-pagination-fraction{color:var(--swiper-pagination-fraction-color,inherit)}.swiper-pagination-progressbar{background:var(--swiper-pagination-progressbar-bg-color,rgba(0,0,0,.25));position:absolute}.swiper-pagination-progressbar .swiper-pagination-progressbar-fill{background:var(--swiper-pagination-color,var(--swiper-theme-color));position:absolute;left:0;top:0;width:100%;height:100%;transform:scale(0);transform-origin:left top}.swiper-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill{transform-origin:right top}.swiper-horizontal>.swiper-pagination-progressbar,.swiper-pagination-progressbar.swiper-pagination-horizontal,.swiper-pagination-progressbar.swiper-pagination-vertical.swiper-pagination-progressbar-opposite,.swiper-vertical>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite{width:100%;height:var(--swiper-pagination-progressbar-size,4px);left:0;top:0}.swiper-horizontal>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,.swiper-pagination-progressbar.swiper-pagination-horizontal.swiper-pagination-progressbar-opposite,.swiper-pagination-progressbar.swiper-pagination-vertical,.swiper-vertical>.swiper-pagination-progressbar{width:var(--swiper-pagination-progressbar-size,4px);height:100%;left:0;top:0}.swiper-pagination-lock{display:none}.swiper-scrollbar{border-radius:var(--swiper-scrollbar-border-radius,10px);position:relative;touch-action:none;background:var(--swiper-scrollbar-bg-color,rgba(0,0,0,.1))}.swiper-scrollbar-disabled>.swiper-scrollbar,.swiper-scrollbar.swiper-scrollbar-disabled{display:none!important}.swiper-horizontal>.swiper-scrollbar,.swiper-scrollbar.swiper-scrollbar-horizontal{position:absolute;left:var(--swiper-scrollbar-sides-offset,1%);bottom:var(--swiper-scrollbar-bottom,4px);top:var(--swiper-scrollbar-top,auto);z-index:50;height:var(--swiper-scrollbar-size,4px);width:calc(100% - 2 * var(--swiper-scrollbar-sides-offset,1%))}.swiper-scrollbar.swiper-scrollbar-vertical,.swiper-vertical>.swiper-scrollbar{position:absolute;left:var(--swiper-scrollbar-left,auto);right:var(--swiper-scrollbar-right,4px);top:var(--swiper-scrollbar-sides-offset,1%);z-index:50;width:var(--swiper-scrollbar-size,4px);height:calc(100% - 2 * var(--swiper-scrollbar-sides-offset,1%))}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:var(--swiper-scrollbar-drag-bg-color,rgba(0,0,0,.5));border-radius:var(--swiper-scrollbar-border-radius,10px);left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-scrollbar-lock{display:none}.swiper-zoom-container{width:100%;height:100%;display:flex;justify-content:center;align-items:center;text-align:center}.swiper-zoom-container>canvas,.swiper-zoom-container>img,.swiper-zoom-container>svg{max-width:100%;max-height:100%;object-fit:contain}.swiper-slide-zoomed{cursor:move;touch-action:none}.swiper .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-free-mode>.swiper-wrapper{transition-timing-function:ease-out;margin:0 auto}.swiper-grid>.swiper-wrapper{flex-wrap:wrap}.swiper-grid-column>.swiper-wrapper{flex-wrap:wrap;flex-direction:column}.swiper-fade.swiper-free-mode .swiper-slide{transition-timing-function:ease-out}.swiper-fade .swiper-slide{pointer-events:none;transition-property:opacity}.swiper-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-fade .swiper-slide-active{pointer-events:auto}.swiper-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper.swiper-cube{overflow:visible}.swiper-cube .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1;visibility:hidden;transform-origin:0 0;width:100%;height:100%}.swiper-cube .swiper-slide .swiper-slide{pointer-events:none}.swiper-cube.swiper-rtl .swiper-slide{transform-origin:100% 0}.swiper-cube .swiper-slide-active,.swiper-cube .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-cube .swiper-slide-active,.swiper-cube .swiper-slide-next,.swiper-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0px;width:100%;height:100%;opacity:.6;z-index:0}.swiper-cube .swiper-cube-shadow:before{content:'';background:#000;position:absolute;left:0;top:0;bottom:0;right:0;filter:blur(50px)}.swiper-cube .swiper-slide-next+.swiper-slide{pointer-events:auto;visibility:visible}.swiper-cube .swiper-slide-shadow-cube.swiper-slide-shadow-bottom,.swiper-cube .swiper-slide-shadow-cube.swiper-slide-shadow-left,.swiper-cube .swiper-slide-shadow-cube.swiper-slide-shadow-right,.swiper-cube .swiper-slide-shadow-cube.swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper.swiper-flip{overflow:visible}.swiper-flip .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1}.swiper-flip .swiper-slide .swiper-slide{pointer-events:none}.swiper-flip .swiper-slide-active,.swiper-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-flip .swiper-slide-shadow-flip.swiper-slide-shadow-bottom,.swiper-flip .swiper-slide-shadow-flip.swiper-slide-shadow-left,.swiper-flip .swiper-slide-shadow-flip.swiper-slide-shadow-right,.swiper-flip .swiper-slide-shadow-flip.swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-creative .swiper-slide{-webkit-backface-visibility:hidden;backface-visibility:hidden;overflow:hidden;transition-property:transform,opacity,height}.swiper.swiper-cards{overflow:visible}.swiper-cards .swiper-slide{transform-origin:center bottom;-webkit-backface-visibility:hidden;backface-visibility:hidden;overflow:hidden} \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/fonts/NotoSans-Bold.ttf b/wp-content/themes/nenghui-energy-theme-4/assets/fonts/NotoSans-Bold.ttf new file mode 100644 index 0000000..987da8c Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/fonts/NotoSans-Bold.ttf differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/fonts/NotoSans-BoldItalic.ttf b/wp-content/themes/nenghui-energy-theme-4/assets/fonts/NotoSans-BoldItalic.ttf new file mode 100644 index 0000000..8233baf Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/fonts/NotoSans-BoldItalic.ttf differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/fonts/NotoSans-Italic.ttf b/wp-content/themes/nenghui-energy-theme-4/assets/fonts/NotoSans-Italic.ttf new file mode 100644 index 0000000..14c0e3c Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/fonts/NotoSans-Italic.ttf differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/fonts/NotoSans-Regular.ttf b/wp-content/themes/nenghui-energy-theme-4/assets/fonts/NotoSans-Regular.ttf new file mode 100644 index 0000000..79a438a Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/fonts/NotoSans-Regular.ttf differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/24-h.webp b/wp-content/themes/nenghui-energy-theme-4/assets/images/24-h.webp new file mode 100644 index 0000000..07a3c3c Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/images/24-h.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/Certified Pre-sales.webp b/wp-content/themes/nenghui-energy-theme-4/assets/images/Certified Pre-sales.webp new file mode 100644 index 0000000..634ba5c Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/images/Certified Pre-sales.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/Development History.webp b/wp-content/themes/nenghui-energy-theme-4/assets/images/Development History.webp new file mode 100644 index 0000000..3defdf1 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/images/Development History.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/ESS Scenarios.webp b/wp-content/themes/nenghui-energy-theme-4/assets/images/ESS Scenarios.webp new file mode 100644 index 0000000..58936b0 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/images/ESS Scenarios.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/Intelligent ESS Guardian.webp b/wp-content/themes/nenghui-energy-theme-4/assets/images/Intelligent ESS Guardian.webp new file mode 100644 index 0000000..a63ab5f Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/images/Intelligent ESS Guardian.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/NaN-img.png b/wp-content/themes/nenghui-energy-theme-4/assets/images/NaN-img.png new file mode 100644 index 0000000..9b3fcb1 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/images/NaN-img.png differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/OME-1.jpeg b/wp-content/themes/nenghui-energy-theme-4/assets/images/OME-1.jpeg new file mode 100644 index 0000000..5cba569 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/images/OME-1.jpeg differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/Overseas-Services-bg.webp b/wp-content/themes/nenghui-energy-theme-4/assets/images/Overseas-Services-bg.webp new file mode 100644 index 0000000..db32954 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/images/Overseas-Services-bg.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/PDF-ICON.svg b/wp-content/themes/nenghui-energy-theme-4/assets/images/PDF-ICON.svg new file mode 100644 index 0000000..4e827d9 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/assets/images/PDF-ICON.svg @@ -0,0 +1,13 @@ + + 新建项目 + + + + + + + + + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/PDF-IMG.webp b/wp-content/themes/nenghui-energy-theme-4/assets/images/PDF-IMG.webp new file mode 100644 index 0000000..8e673e7 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/images/PDF-IMG.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/Usage scenario.webp b/wp-content/themes/nenghui-energy-theme-4/assets/images/Usage scenario.webp new file mode 100644 index 0000000..06d1e2b Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/images/Usage scenario.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/about-bg.webp b/wp-content/themes/nenghui-energy-theme-4/assets/images/about-bg.webp new file mode 100644 index 0000000..72bc390 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/images/about-bg.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/about-icon-1-1.svg b/wp-content/themes/nenghui-energy-theme-4/assets/images/about-icon-1-1.svg new file mode 100644 index 0000000..fd0046a --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/assets/images/about-icon-1-1.svg @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/about-icon-2-2.svg b/wp-content/themes/nenghui-energy-theme-4/assets/images/about-icon-2-2.svg new file mode 100644 index 0000000..ee3b9dc --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/assets/images/about-icon-2-2.svg @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/about-icon-3-3.svg b/wp-content/themes/nenghui-energy-theme-4/assets/images/about-icon-3-3.svg new file mode 100644 index 0000000..66febb2 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/assets/images/about-icon-3-3.svg @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/about-icon-4-4.svg b/wp-content/themes/nenghui-energy-theme-4/assets/images/about-icon-4-4.svg new file mode 100644 index 0000000..2d198bf --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/assets/images/about-icon-4-4.svg @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/about-img.webp b/wp-content/themes/nenghui-energy-theme-4/assets/images/about-img.webp new file mode 100644 index 0000000..50aa13b Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/images/about-img.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/black-about-company-banner-img.webp b/wp-content/themes/nenghui-energy-theme-4/assets/images/black-about-company-banner-img.webp new file mode 100644 index 0000000..040b12f Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/images/black-about-company-banner-img.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/black-about-company-banner-imgs-1.webp b/wp-content/themes/nenghui-energy-theme-4/assets/images/black-about-company-banner-imgs-1.webp new file mode 100644 index 0000000..c9056d8 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/images/black-about-company-banner-imgs-1.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/black-about-company-banner-imgs-2.webp b/wp-content/themes/nenghui-energy-theme-4/assets/images/black-about-company-banner-imgs-2.webp new file mode 100644 index 0000000..5aa4c69 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/images/black-about-company-banner-imgs-2.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/black-about-company-banner-imgs-3.jpg b/wp-content/themes/nenghui-energy-theme-4/assets/images/black-about-company-banner-imgs-3.jpg new file mode 100644 index 0000000..45790f4 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/images/black-about-company-banner-imgs-3.jpg differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/black-about-company-banner-imgs-4.jpg b/wp-content/themes/nenghui-energy-theme-4/assets/images/black-about-company-banner-imgs-4.jpg new file mode 100644 index 0000000..20d4038 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/images/black-about-company-banner-imgs-4.jpg differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/black-about-company-banner-imgs-5.jpg b/wp-content/themes/nenghui-energy-theme-4/assets/images/black-about-company-banner-imgs-5.jpg new file mode 100644 index 0000000..a23cbb6 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/images/black-about-company-banner-imgs-5.jpg differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/black-about-company-banner-imgs.webp b/wp-content/themes/nenghui-energy-theme-4/assets/images/black-about-company-banner-imgs.webp new file mode 100644 index 0000000..4868d67 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/images/black-about-company-banner-imgs.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/cabinet-process flow-chart.png b/wp-content/themes/nenghui-energy-theme-4/assets/images/cabinet-process flow-chart.png new file mode 100644 index 0000000..588996a Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/images/cabinet-process flow-chart.png differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/contact-bg.webp b/wp-content/themes/nenghui-energy-theme-4/assets/images/contact-bg.webp new file mode 100644 index 0000000..e3b9797 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/images/contact-bg.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/download-icon.svg b/wp-content/themes/nenghui-energy-theme-4/assets/images/download-icon.svg new file mode 100644 index 0000000..1c37464 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/assets/images/download-icon.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/epc-bg.jpg b/wp-content/themes/nenghui-energy-theme-4/assets/images/epc-bg.jpg new file mode 100644 index 0000000..ad8b953 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/images/epc-bg.jpg differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/faq-title-bg.webp b/wp-content/themes/nenghui-energy-theme-4/assets/images/faq-title-bg.webp new file mode 100644 index 0000000..5903111 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/images/faq-title-bg.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/futures-bg.webp b/wp-content/themes/nenghui-energy-theme-4/assets/images/futures-bg.webp new file mode 100644 index 0000000..c63d6e6 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/images/futures-bg.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/htbgfd.png b/wp-content/themes/nenghui-energy-theme-4/assets/images/htbgfd.png new file mode 100644 index 0000000..3f7e64e Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/images/htbgfd.png differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/htgfvdd.png b/wp-content/themes/nenghui-energy-theme-4/assets/images/htgfvdd.png new file mode 100644 index 0000000..425d548 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/images/htgfvdd.png differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/logo.svg b/wp-content/themes/nenghui-energy-theme-4/assets/images/logo.svg new file mode 100644 index 0000000..809b157 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/assets/images/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/maps-bg.webp b/wp-content/themes/nenghui-energy-theme-4/assets/images/maps-bg.webp new file mode 100644 index 0000000..85d3883 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/images/maps-bg.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/module-process flow.png b/wp-content/themes/nenghui-energy-theme-4/assets/images/module-process flow.png new file mode 100644 index 0000000..3941492 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/images/module-process flow.png differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/pack-process flow-chart.png b/wp-content/themes/nenghui-energy-theme-4/assets/images/pack-process flow-chart.png new file mode 100644 index 0000000..4223ff0 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/images/pack-process flow-chart.png differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/product-icon-1.webp b/wp-content/themes/nenghui-energy-theme-4/assets/images/product-icon-1.webp new file mode 100644 index 0000000..853ab85 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/images/product-icon-1.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/product-icon-2.webp b/wp-content/themes/nenghui-energy-theme-4/assets/images/product-icon-2.webp new file mode 100644 index 0000000..befbe48 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/images/product-icon-2.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/product-icon-3.webp b/wp-content/themes/nenghui-energy-theme-4/assets/images/product-icon-3.webp new file mode 100644 index 0000000..809cd45 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/images/product-icon-3.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/product-icon-4.webp b/wp-content/themes/nenghui-energy-theme-4/assets/images/product-icon-4.webp new file mode 100644 index 0000000..98165d7 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/images/product-icon-4.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/product-icon-5.webp b/wp-content/themes/nenghui-energy-theme-4/assets/images/product-icon-5.webp new file mode 100644 index 0000000..30efc63 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/images/product-icon-5.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/product-icon-6.webp b/wp-content/themes/nenghui-energy-theme-4/assets/images/product-icon-6.webp new file mode 100644 index 0000000..98165d7 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/images/product-icon-6.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/product-icon-7.webp b/wp-content/themes/nenghui-energy-theme-4/assets/images/product-icon-7.webp new file mode 100644 index 0000000..83c76c1 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/images/product-icon-7.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/products-1.webp b/wp-content/themes/nenghui-energy-theme-4/assets/images/products-1.webp new file mode 100644 index 0000000..ee69d7c Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/images/products-1.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/images/tgrdfrfed.jpg b/wp-content/themes/nenghui-energy-theme-4/assets/images/tgrdfrfed.jpg new file mode 100644 index 0000000..585ff37 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/assets/images/tgrdfrfed.jpg differ diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/js/business-process.js b/wp-content/themes/nenghui-energy-theme-4/assets/js/business-process.js new file mode 100644 index 0000000..691f593 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/assets/js/business-process.js @@ -0,0 +1,347 @@ +/** + * 业务流程设计区块交互脚本 + * Business Process Block Interactive Script + */ + +(function($) { + 'use strict'; + + /** + * 业务流程Tab切换类 + */ + class BusinessProcessTabs { + constructor(container) { + this.container = $(container); + this.tabs = this.container.find('.process-tab'); + this.images = this.container.find('.process-image'); + this.currentIndex = 0; + this.isAnimating = false; + + this.init(); + } + + /** + * 初始化 + */ + init() { + this.bindEvents(); + this.setupIntersectionObserver(); + this.preloadImages(); + + // 设置初始状态 + this.setActiveTab(0, false); + } + + /** + * 绑定事件 + */ + bindEvents() { + // Tab点击事件 + this.tabs.on('click', (e) => { + e.preventDefault(); + const index = this.tabs.index($(e.currentTarget)); + this.switchTab(index); + }); + + // 键盘导航支持 + this.tabs.on('keydown', (e) => { + if (e.key === 'Enter' || e.key === ' ') { + e.preventDefault(); + const index = this.tabs.index($(e.currentTarget)); + this.switchTab(index); + } + }); + + // 触摸滑动支持(移动端) + if ('ontouchstart' in window) { + this.setupTouchEvents(); + } + + // 窗口大小改变时重新计算 + $(window).on('resize', this.debounce(() => { + this.handleResize(); + }, 250)); + } + + /** + * 设置触摸事件(移动端滑动支持) + */ + setupTouchEvents() { + let startX = 0; + let startY = 0; + let isScrolling = false; + + this.container.on('touchstart', (e) => { + const touch = e.originalEvent.touches[0]; + startX = touch.clientX; + startY = touch.clientY; + isScrolling = false; + }); + + this.container.on('touchmove', (e) => { + if (isScrolling) return; + + const touch = e.originalEvent.touches[0]; + const deltaX = touch.clientX - startX; + const deltaY = touch.clientY - startY; + + // 判断是否为水平滑动 + if (Math.abs(deltaX) > Math.abs(deltaY) && Math.abs(deltaX) > 30) { + isScrolling = true; + e.preventDefault(); + + if (deltaX > 0 && this.currentIndex > 0) { + // 向右滑动,切换到上一个tab + this.switchTab(this.currentIndex - 1); + } else if (deltaX < 0 && this.currentIndex < this.tabs.length - 1) { + // 向左滑动,切换到下一个tab + this.switchTab(this.currentIndex + 1); + } + } + }); + } + + /** + * 切换Tab + */ + switchTab(index) { + if (index === this.currentIndex || this.isAnimating || index < 0 || index >= this.tabs.length) { + return; + } + + this.setActiveTab(index, true); + } + + /** + * 设置活动Tab + */ + setActiveTab(index, animate = true) { + if (this.isAnimating && animate) return; + + this.isAnimating = animate; + this.currentIndex = index; + + // 更新Tab状态 + this.tabs.removeClass('active').eq(index).addClass('active'); + + // 更新图片显示 + if (animate) { + this.animateImageTransition(index); + } else { + this.images.removeClass('active').eq(index).addClass('active'); + this.isAnimating = false; + } + + // 更新ARIA属性 + this.updateAccessibility(index); + + // 触发自定义事件 + this.container.trigger('tabChanged', [index, this.tabs.eq(index)]); + } + + /** + * 图片切换动画 + */ + animateImageTransition(index) { + const currentImage = this.images.filter('.active'); + const nextImage = this.images.eq(index); + + // 如果没有当前活动图片,直接显示新图片 + if (currentImage.length === 0) { + nextImage.addClass('active'); + this.isAnimating = false; + return; + } + + // 淡出当前图片 + currentImage.animate({ opacity: 0 }, 250, () => { + currentImage.removeClass('active'); + + // 淡入新图片 + nextImage.addClass('active').css('opacity', 0).animate({ opacity: 1 }, 250, () => { + this.isAnimating = false; + }); + }); + } + + /** + * 更新无障碍访问属性 + */ + updateAccessibility(index) { + this.tabs.each((i, tab) => { + const $tab = $(tab); + $tab.attr('aria-selected', i === index ? 'true' : 'false'); + $tab.attr('tabindex', i === index ? '0' : '-1'); + }); + + this.images.each((i, image) => { + const $image = $(image); + $image.attr('aria-hidden', i === index ? 'false' : 'true'); + }); + } + + /** + * 预加载图片 + */ + preloadImages() { + this.images.each((index, element) => { + const $img = $(element).find('img'); + if ($img.length && $img.attr('data-src')) { + const img = new Image(); + img.onload = () => { + $img.attr('src', $img.attr('data-src')).removeAttr('data-src'); + }; + img.src = $img.attr('data-src'); + } + }); + } + + /** + * 设置交叉观察器(用于动画触发) + */ + setupIntersectionObserver() { + if (!window.IntersectionObserver) return; + + const observer = new IntersectionObserver((entries) => { + entries.forEach(entry => { + if (entry.isIntersecting) { + this.container.addClass('animate-in'); + observer.unobserve(entry.target); + } + }); + }, { + threshold: 0.2, + rootMargin: '0px 0px -50px 0px' + }); + + observer.observe(this.container[0]); + } + + /** + * 处理窗口大小改变 + */ + handleResize() { + // 重新计算布局相关的尺寸 + this.container.removeClass('animate-in'); + + // 延迟重新添加动画类 + setTimeout(() => { + this.container.addClass('animate-in'); + }, 100); + } + + /** + * 防抖函数 + */ + debounce(func, wait) { + let timeout; + return function executedFunction(...args) { + const later = () => { + clearTimeout(timeout); + func(...args); + }; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + }; + } + + /** + * 自动播放功能 + */ + startAutoPlay(interval = 5000) { + this.stopAutoPlay(); + + this.autoPlayTimer = setInterval(() => { + const nextIndex = (this.currentIndex + 1) % this.tabs.length; + this.switchTab(nextIndex); + }, interval); + } + + /** + * 停止自动播放 + */ + stopAutoPlay() { + if (this.autoPlayTimer) { + clearInterval(this.autoPlayTimer); + this.autoPlayTimer = null; + } + } + + /** + * 销毁实例 + */ + destroy() { + this.stopAutoPlay(); + this.tabs.off('click keydown'); + this.container.off('touchstart touchmove'); + $(window).off('resize'); + this.container.removeClass('animate-in'); + } + } + + /** + * 初始化所有业务流程区块 + */ + function initBusinessProcessBlocks() { + $('.business-process-block').each(function() { + const $block = $(this); + + // 避免重复初始化 + if ($block.data('business-process-initialized')) { + return; + } + + const instance = new BusinessProcessTabs(this); + $block.data('business-process-instance', instance); + $block.data('business-process-initialized', true); + + // 如果设置了自动播放,启动自动播放 + const autoPlay = $block.data('auto-play'); + const autoPlayInterval = $block.data('auto-play-interval') || 5000; + + if (autoPlay) { + instance.startAutoPlay(autoPlayInterval); + + // 鼠标悬停时暂停自动播放 + $block.on('mouseenter', () => instance.stopAutoPlay()); + $block.on('mouseleave', () => instance.startAutoPlay(autoPlayInterval)); + } + }); + } + + /** + * 页面加载完成后初始化 + */ + $(document).ready(function() { + initBusinessProcessBlocks(); + }); + + /** + * 支持动态加载的内容 + */ + $(document).on('DOMNodeInserted', function(e) { + const $target = $(e.target); + if ($target.hasClass('business-process-block') || $target.find('.business-process-block').length) { + setTimeout(initBusinessProcessBlocks, 100); + } + }); + + /** + * 自定义器预览支持 + */ + if (typeof wp !== 'undefined' && wp.customize) { + wp.customize.bind('ready', function() { + // 当自定义器设置改变时重新初始化 + wp.customize.bind('change', function() { + setTimeout(initBusinessProcessBlocks, 500); + }); + }); + } + + /** + * 导出到全局作用域(用于外部调用) + */ + window.BusinessProcessTabs = BusinessProcessTabs; + window.initBusinessProcessBlocks = initBusinessProcessBlocks; + +})(jQuery); \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/js/customizer-controls.js b/wp-content/themes/nenghui-energy-theme-4/assets/js/customizer-controls.js new file mode 100644 index 0000000..6dbce11 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/assets/js/customizer-controls.js @@ -0,0 +1,84 @@ +/** + * 自定义器控制脚本 + * 用于增强自定义器界面的用户体验 + */ + +// 立即定义全局测试函数,确保在控制台中可用 +window.testGalleryControls = function() { + if (typeof $ !== 'undefined') { + var galleryWrappers = $('.gallery-control-wrapper'); + var selectButtons = $('.gallery-select-button'); + var clearButtons = $('.gallery-clear-button'); + + return { + wrappers: galleryWrappers.length, + selectButtons: selectButtons.length, + clearButtons: clearButtons.length, + mediaAvailable: typeof wp !== 'undefined' && typeof wp.media !== 'undefined', + customizeAvailable: typeof wp !== 'undefined' && typeof wp.customize !== 'undefined' + }; + } else { + return { error: 'jQuery not available' }; + } +}; + +window.triggerGallerySelect = function() { + if (typeof $ === 'undefined') { + return false; + } + + var selectButton = $('.gallery-select-button').first(); + if (selectButton.length > 0) { + selectButton.trigger('click'); + return true; + } else { + return false; + } +}; + +(function($) { + 'use strict'; + + // 当自定义器准备就绪时执行 + wp.customize.bind('ready', function() { + + // 确保媒体库已加载 + if (typeof wp.media === 'undefined') { + // Error handling silently + } + + // 强制初始化媒体库 + if (typeof wp.media !== 'undefined') { + wp.media.view.settings.post.id = 0; + } + // 添加Banner面板的帮助信息 + var bannerPanel = wp.customize.panel('nenghui_banner_panel'); + // if (bannerPanel) { + // bannerPanel.container.find('.accordion-section-title').after( + // '

' + + // '配置完成后,您可以在任何文章或页面中使用短代码 [nenghui_banner] 来显示Banner轮播。' + + // '

' + // ); + // } + + // 添加Banner Title面板的帮助信息 + var bannerTitlePanel = wp.customize.panel('nenghui_banner_title_panel'); + // if (bannerTitlePanel) { + // bannerTitlePanel.container.find('.accordion-section-title').after( + // '

' + + // '配置完成后,您可以在任何文章或页面中使用短代码 [nenghui_banner_title] 来显示Banner标题区块。' + + // '

' + // ); + // } + + // 添加Futures面板的帮助信息 + var futuresPanel = wp.customize.panel('nenghui_futures_panel'); + // if (futuresPanel) { + // futuresPanel.container.find('.accordion-section-title').after( + // '

' + + // '配置完成后,您可以在任何文章或页面中使用短代码 [nenghui_futures] 来显示Futures区块。' + + // '

' + // ); + // } + }); +})(jQuery); diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/js/customizer-preview.js b/wp-content/themes/nenghui-energy-theme-4/assets/js/customizer-preview.js new file mode 100644 index 0000000..39543b7 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/assets/js/customizer-preview.js @@ -0,0 +1,1284 @@ +/** + * 自定义器预览脚本 + * 用于在自定义器中实时预览Banner和Futures更改 + */ + +(function($) { + 'use strict'; + + // 横幅图片更改预览 + for (let i = 1; i <= 5; i++) { + wp.customize('banner_image_' + i, function(value) { + value.bind(function(newval) { + // 刷新页面以显示新的Banner图片 + wp.customize.preview.send('refresh'); + }); + }); + + // 横幅内容更改预览 + wp.customize('banner_content_' + i, function(value) { + value.bind(function(newval) { + $('.nenghui-banner .banner-slide:nth-child(' + i + ') .banner-text-content').html(newval); + }); + }); + + // 横幅按钮文字更改预览 + wp.customize('banner_button_text_' + i, function(value) { + value.bind(function(newval) { + $('.nenghui-banner .banner-slide:nth-child(' + i + ') .banner-btn').text(newval); + }); + }); + + // 横幅按钮链接更改预览 + wp.customize('banner_button_url_' + i, function(value) { + value.bind(function(newval) { + $('.nenghui-banner .banner-slide:nth-child(' + i + ') .banner-btn').attr('href', newval); + }); + }); + } + + // 横幅高度更改预览 + wp.customize('banner_height', function(value) { + value.bind(function(newval) { + // 处理高度值,确保包含单位 + var height = newval; + if (/^\d+$/.test(newval)) { + height = newval + 'px'; + } + // 验证格式 + if (!/^\d+(\.\d+)?(px|vh)$/.test(height)) { + height = '500px'; + } + $('.nenghui-banner').css('height', height); + $('.nenghui-banner .banner-slide').css('height', height); + }); + }); + + // 横幅自动播放设置更改预览 + wp.customize('banner_autoplay', function(value) { + value.bind(function(newval) { + // 刷新页面以应用新的自动播放设置 + wp.customize.preview.send('refresh'); + }); + }); + + // 横幅自动播放间隔更改预览 + wp.customize('banner_autoplay_delay', function(value) { + value.bind(function(newval) { + // 刷新页面以应用新的播放间隔 + wp.customize.preview.send('refresh'); + }); + }); + + // 横幅遮罩开关更改预览 + wp.customize('banner_overlay_enabled', function(value) { + value.bind(function(newval) { + if (newval) { + // 显示遮罩 + $('.nenghui-banner .banner-overlay').show(); + } else { + // 隐藏遮罩 + $('.nenghui-banner .banner-overlay').hide(); + } + }); + }); + + // 横幅纯图模式开关更改预览 + wp.customize('banner_image_only_mode', function(value) { + value.bind(function(newval) { + if (newval) { + // 隐藏文字和按钮内容 + $('.nenghui-banner .banner-content').hide(); + } else { + // 显示文字和按钮内容 + $('.nenghui-banner .banner-content').show(); + } + }); + }); + + // 横幅移动端显示控制更改预览 + wp.customize('banner_show_on_mobile', function(value) { + value.bind(function(newval) { + if (!newval) { + // 移动端隐藏 + $('.nenghui-banner').addClass('hide-on-mobile'); + } else { + // 移动端显示 + $('.nenghui-banner').removeClass('hide-on-mobile'); + } + }); + }); + + // 横幅左右切换按钮开关更改预览 + wp.customize('banner_navigation_enabled', function(value) { + value.bind(function(newval) { + if (newval) { + // 显示切换按钮 + $('.nenghui-banner .banner-nav-prev, .nenghui-banner .banner-nav-next').show(); + } else { + // 隐藏切换按钮 + $('.nenghui-banner .banner-nav-prev, .nenghui-banner .banner-nav-next').hide(); + } + }); + }); + + // 横幅数量更改预览 + wp.customize('banner_count', function(value) { + value.bind(function(newval) { + // 刷新页面以重新生成Banner结构 + wp.customize.preview.send('refresh'); + }); + }); + + // ========== 特色功能区块预览功能 ========== + + // 特色功能主标题更改预览 + wp.customize('futures_title', function(value) { + value.bind(function(newval) { + $('.nenghui-futures .futures-title').text(newval); + }); + }); + + // 特色功能背景图片更改预览 + wp.customize('futures_bg_image', function(value) { + value.bind(function(newval) { + if (newval) { + $('.nenghui-futures').css('background-image', 'url(' + newval + ')'); + } else { + $('.nenghui-futures').css('background-image', 'none'); + } + }); + }); + + // 特色功能按钮文字更改预览 + wp.customize('futures_button_text', function(value) { + value.bind(function(newval) { + $('.nenghui-futures .futures-btn').text(newval); + }); + }); + + // 特色功能按钮链接更改预览 + wp.customize('futures_button_url', function(value) { + value.bind(function(newval) { + $('.nenghui-futures .futures-btn').attr('href', newval); + }); + }); + + // 特色功能项目预览 + for (let i = 1; i <= 5; i++) { + // 功能图标更改预览 + wp.customize('futures_item_' + i + '_icon', function(value) { + value.bind(function(newval) { + if (newval) { + $('.nenghui-futures .futures-item:nth-child(' + i + ') .futures-icon img').attr('src', newval); + $('.nenghui-futures .futures-item:nth-child(' + i + ')').show(); + } else { + $('.nenghui-futures .futures-item:nth-child(' + i + ')').hide(); + } + }); + }); + + // 功能标题更改预览 + wp.customize('futures_item_' + i + '_title', function(value) { + value.bind(function(newval) { + $('.nenghui-futures .futures-item:nth-child(' + i + ') .futures-item-title').text(newval); + }); + }); + + + } + + // ========== 页面标题横幅区块预览功能 ========== + + // 页面标题横幅主标题更改预览 + wp.customize('banner_title_main_title', function(value) { + value.bind(function(newval) { + $('.nenghui-banner-title .banner-title').text(newval); + }); + }); + + // 页面标题横幅描述更改预览 + wp.customize('banner_title_description', function(value) { + value.bind(function(newval) { + if (newval && newval.trim() !== '') { + $('.nenghui-banner-title .banner-description').text(newval).show(); + } else { + $('.nenghui-banner-title .banner-description').hide(); + } + }); + }); + + // 页面标题横幅背景图片更改预览 + wp.customize('banner_title_bg_image', function(value) { + value.bind(function(newval) { + const bannerElement = $('.nenghui-banner-title'); + const bannerImage = bannerElement.find('.banner-image'); + + if (newval && newval.trim() !== '') { + // 设置新的背景图片 + bannerImage.css('background-image', 'url(' + newval + ')'); + bannerElement.attr('data-bg-image', newval); + bannerElement.removeClass('no-image'); + + // 预加载图片以检测是否有效 + const img = new Image(); + img.onload = function() { + bannerElement.removeClass('no-image'); + }; + img.onerror = function() { + bannerElement.addClass('no-image'); + }; + img.src = newval; + } else { + // 使用默认背景图片 + const defaultImage = bannerElement.data('default-bg') || + (typeof wp !== 'undefined' && wp.customize && wp.customize.settings && wp.customize.settings.theme && wp.customize.settings.theme.template_url ? + wp.customize.settings.theme.template_url + '/assets/images/about-bg.webp' : + '/wp-content/themes/nenghui-energy-theme-4/assets/images/about-bg.webp'); + + bannerImage.css('background-image', 'url(' + defaultImage + ')'); + bannerElement.attr('data-bg-image', defaultImage); + bannerElement.removeClass('no-image'); + } + }); + }); + + // 页面标题横幅遮罩透明度更改预览 + wp.customize('banner_title_overlay_opacity', function(value) { + value.bind(function(newval) { + $('.nenghui-banner-title .banner-overlay').css('opacity', newval); + }); + }); + + // 页面标题横幅高度更改预览 + wp.customize('banner_title_height', function(value) { + value.bind(function(newval) { + var height = newval; + // 处理高度值,确保包含单位 + if (/^\d+$/.test(newval)) { + height = newval + 'px'; + } + // 验证格式 + if (!/^\d+(\.\d+)?(px|vh|%)$/.test(height)) { + height = '60vh'; + } + $('.nenghui-banner-title').css('height', height); + }); + }); + + // ========== 新闻区块预览功能 ========== + + // 新闻标题更改预览 + wp.customize('news_title', function(value) { + value.bind(function(newval) { + $('.news-container .news-title').text(newval); + }); + }); + + + + // 新闻分类更改预览 - 需要刷新页面 + wp.customize('news_category_id', function(value) { + value.bind(function(newval) { + wp.customize.preview.send('refresh'); + }); + }); + + // 新闻排序字段更改预览 + wp.customize('news_order_by', function(value) { + value.bind(function(newval) { + wp.customize.preview.send('refresh'); + }); + }); + + // 新闻排序方向更改预览 + wp.customize('news_order', function(value) { + value.bind(function(newval) { + wp.customize.preview.send('refresh'); + }); + }); + + // 新闻文章数量更改预览 + wp.customize('news_posts_count', function(value) { + value.bind(function(newval) { + wp.customize.preview.send('refresh'); + }); + }); + + // 新闻每页文章数量更改预览 + wp.customize('news_posts_per_page', function(value) { + value.bind(function(newval) { + wp.customize.preview.send('refresh'); + }); + }); + + // 新闻分页开关更改预览 + wp.customize('news_enable_pagination', function(value) { + value.bind(function(newval) { + wp.customize.preview.send('refresh'); + }); + }); + + // ========== 选项卡区块预览功能 ========== + + // 选项卡数量更改预览 + wp.customize('tabs_count', function(value) { + value.bind(function(newval) { + // 刷新页面以重新生成选项卡结构 + wp.customize.preview.send('refresh'); + }); + }); + + // ========== 关于我们导航区块预览功能 ========== + + // 关于我们导航菜单更改预览 + wp.customize('about_nav_menu_id', function(value) { + value.bind(function(newval) { + // 刷新页面以重新生成导航菜单 + wp.customize.preview.send('refresh'); + }); + }); + + // 关于我们导航背景色更改预览 + wp.customize('about_nav_bg_color', function(value) { + value.bind(function(newval) { + $('.nenghui-about-nav').css('background-color', newval); + }); + }); + + // 关于我们导航文字颜色更改预览 + wp.customize('about_nav_text_color', function(value) { + value.bind(function(newval) { + $('.nenghui-about-nav .about-nav-link').css('color', newval); + }); + }); + + // 关于我们导航激活状态颜色更改预览 + wp.customize('about_nav_active_color', function(value) { + value.bind(function(newval) { + $('.nenghui-about-nav .about-nav-item.active .about-nav-link').css({ + 'color': newval, + 'border-bottom-color': newval + }); + $('.nenghui-about-nav .about-nav-link:hover').css('color', newval); + }); + }); + + // 关于我们导航样式更改预览 + wp.customize('about_nav_style', function(value) { + value.bind(function(newval) { + const aboutNav = $('.nenghui-about-nav'); + const navMenu = aboutNav.find('.about-nav-menu'); + + // 移除所有样式类 + aboutNav.removeClass('nav-horizontal nav-vertical nav-dropdown'); + + // 添加新样式类 + aboutNav.addClass('nav-' + newval); + + // 根据样式调整布局 + if (newval === 'vertical') { + navMenu.css({ + 'flex-direction': 'column', + 'align-items': 'stretch' + }); + } else { + navMenu.css({ + 'flex-direction': 'row', + 'align-items': 'center' + }); + } + }); + }); + + // 关于我们导航位置更改预览 + wp.customize('about_nav_position', function(value) { + value.bind(function(newval) { + // 刷新页面以应用新的位置设置 + wp.customize.preview.send('refresh'); + }); + }); + + // 选项卡项目预览(支持最多5个选项卡) + for (let i = 1; i <= 5; i++) { + // 选项卡标题更改预览 + wp.customize('tab_title_' + i, function(value) { + value.bind(function(newval) { + const tabElement = $('.nenghui-container .nenghui-tab[data-nenghui-tab="tab-' + i + '"]'); + if (newval && newval.trim() !== '') { + tabElement.text(newval).show(); + } else { + tabElement.hide(); + } + }); + }); + + // 选项卡ID更改预览 + wp.customize('tab_id_' + i, function(value) { + value.bind(function(newval) { + // 刷新页面以应用新的ID + wp.customize.preview.send('refresh'); + }); + }); + + // 选项卡主标题更改预览 + wp.customize('tab_main_title_' + i, function(value) { + value.bind(function(newval) { + // 如果当前选项卡是激活状态,更新主标题 + const tabId = wp.customize('tab_id_' + i).get() || 'tab-' + i; + const activeTab = $('.nenghui-container .nenghui-tab.active[data-nenghui-tab="' + tabId + '"]'); + if (activeTab.length > 0) { + $('.nenghui-container .main-title').html(newval); + } + }); + }); + + // 选项卡按钮文字更改预览 + wp.customize('tab_button_text_' + i, function(value) { + value.bind(function(newval) { + // 如果当前选项卡是激活状态,更新按钮文字 + const tabId = wp.customize('tab_id_' + i).get() || 'tab-' + i; + const activeTab = $('.nenghui-container .nenghui-tab.active[data-nenghui-tab="' + tabId + '"]'); + if (activeTab.length > 0) { + const button = $('.nenghui-container .learn-more-btn'); + const spanElement = button.find('span:not(.arrow)'); + if (spanElement.length > 0) { + spanElement.text(newval); + } else { + // 如果没有span元素,直接更新按钮文字(保留箭头) + const arrowHtml = button.find('.arrow').length > 0 ? button.find('.arrow')[0].outerHTML : ''; + button.html('' + newval + ''); + } + } + }); + }); + + // 选项卡按钮链接更改预览 + wp.customize('tab_button_url_' + i, function(value) { + value.bind(function(newval) { + // 如果当前选项卡是激活状态,更新按钮链接 + const tabId = wp.customize('tab_id_' + i).get() || 'tab-' + i; + const activeTab = $('.nenghui-container .nenghui-tab.active[data-nenghui-tab="' + tabId + '"]'); + if (activeTab.length > 0) { + $('.nenghui-container .learn-more-btn').attr('href', newval); + } + }); + }); + + // 选项卡图片更改预览 + wp.customize('tab_image_' + i, function(value) { + value.bind(function(newval) { + // 如果当前选项卡是激活状态,更新图片 + const tabId = wp.customize('tab_id_' + i).get() || 'tab-' + i; + const activeTab = $('.nenghui-container .nenghui-tab.active[data-nenghui-tab="' + tabId + '"]'); + if (activeTab.length > 0 && newval) { + $('.nenghui-container .tab-image img').attr('src', newval); + } + }); + }); + + // 选项卡图片替代文字更改预览 + wp.customize('tab_image_alt_' + i, function(value) { + value.bind(function(newval) { + // 如果当前选项卡是激活状态,更新图片alt属性 + const tabId = wp.customize('tab_id_' + i).get() || 'tab-' + i; + const activeTab = $('.nenghui-container .nenghui-tab.active[data-nenghui-tab="' + tabId + '"]'); + if (activeTab.length > 0) { + $('.nenghui-container .tab-image img').attr('alt', newval); + } + }); + }); + } + + // 监听选项卡切换事件,确保预览功能正常工作 + $(document).on('click', '.nenghui-container .nenghui-tab', function() { + // 延迟一点时间确保DOM更新完成 + setTimeout(function() { + // 触发当前激活选项卡的所有设置重新应用 + const activeTab = $('.nenghui-container .nenghui-tab.active'); + if (activeTab.length > 0) { + const tabType = activeTab.attr('data-nenghui-tab'); + // 优化:减少循环范围,只检查实际存在的选项卡 + const maxTabs = wp.customize('tabs_count') ? wp.customize('tabs_count').get() : 5; + for (let i = 1; i <= Math.min(maxTabs, 10); i++) { + const tabIdControl = wp.customize('tab_id_' + i); + if (!tabIdControl) continue; // 跳过不存在的控件 + + const tabId = tabIdControl.get() || 'tab-' + i; + if (tabId === tabType) { + // 重新应用当前选项卡的设置 + const mainTitleControl = wp.customize('tab_main_title_' + i); + const buttonTextControl = wp.customize('tab_button_text_' + i); + const buttonUrlControl = wp.customize('tab_button_url_' + i); + const imageControl = wp.customize('tab_image_' + i); + + const mainTitle = mainTitleControl ? mainTitleControl.get() : ''; + const buttonText = buttonTextControl ? buttonTextControl.get() : '了解更多'; + const buttonUrl = buttonUrlControl ? buttonUrlControl.get() : '#'; + let image = imageControl ? imageControl.get() : ''; + const imageAlt = wp.customize('tab_image_alt_' + i) ? wp.customize('tab_image_alt_' + i).get() : ''; + + // 如果没有图片,使用默认占位图片 + if (!image) { + image = '/wp-content/themes/nenghui-energy-theme-1.0/assets/images/NaN-img.png'; + } + + // 更新内容 + if (mainTitle) $('.nenghui-container .main-title').html(mainTitle); + if (buttonText) { + const button = $('.nenghui-container .learn-more-btn'); + const spanElement = button.find('span:not(.arrow)'); + if (spanElement.length > 0) { + spanElement.text(buttonText); + } else { + button.html('' + buttonText + ''); + } + } + if (buttonUrl) $('.nenghui-container .learn-more-btn').attr('href', buttonUrl); + if (image) $('.nenghui-container .tab-image img').attr('src', image); + if (imageAlt) $('.nenghui-container .tab-image img').attr('alt', imageAlt); + + break; + } + } + } + }, 100); + }); + + // ========== 关于公司区块预览功能 ========== + + // 关于公司主标题更改预览 + wp.customize('about_company_title', function(value) { + value.bind(function(newval) { + $('.about-company-section .about-company-title').text(newval); + }); + }); + + // 关于公司描述更改预览 + wp.customize('about_company_description', function(value) { + value.bind(function(newval) { + $('.about-company-section .about-company-description p').html(newval); + }); + }); + + // 关于公司第二段描述更改预览 + wp.customize('about_company_description_2', function(value) { + value.bind(function(newval) { + $('.about-company-section .about-company-description-2 p').html(newval); + }); + }); + + // 关于公司右侧图片更改预览 + wp.customize('about_company_image', function(value) { + value.bind(function(newval) { + if (newval) { + $('.about-company-section .about-company-image img').attr('src', newval); + } + }); + }); + + // 关于公司统计项目预览 + for (let i = 1; i <= 4; i++) { + // 统计数字更改预览 + wp.customize('about_company_stat_' + i + '_number', function(value) { + value.bind(function(newval) { + $('.about-company-section .stat-item:nth-child(' + i + ') .stat-number').text(newval); + }); + }); + + // 统计标签更改预览 + wp.customize('about_company_stat_' + i + '_label', function(value) { + value.bind(function(newval) { + $('.about-company-section .stat-item:nth-child(' + i + ') .stat-label').text(newval); + }); + }); + + // 统计图标更改预览 + wp.customize('about_company_stat_' + i + '_icon', function(value) { + value.bind(function(newval) { + if (newval) { + $('.about-company-section .stat-item:nth-child(' + i + ') .stat-icon img').attr('src', newval); + } + }); + }); + } + + // ========== 发展历程区块预览功能 ========== + + // 发展历程主标题更改预览 + wp.customize('development_history_title', function(value) { + value.bind(function(newval) { + $('.development-history-section .development-history-title').text(newval); + }); + }); + + // 发展历程背景图片更改预览 + wp.customize('development_history_bg_image', function(value) { + value.bind(function(newval) { + if (newval) { + $('.development-history-section .development-history-bg').css('background-image', 'url(' + newval + ')'); + } + }); + }); + + // 发展历程年份数量更改预览 + wp.customize('development_history_items_count', function(value) { + value.bind(function(newval) { + // 年份数量变化时刷新页面以重新生成项目 + wp.customize.preview.send('refresh'); + }); + }); + + // 发展历程各年份项目预览 + // 动态获取年份数量并为每个项目添加预览功能 + function addDevelopmentHistoryItemPreview(itemIndex) { + // 年份更改预览 + wp.customize('development_history_item_' + itemIndex + '_year', function(value) { + value.bind(function(newval) { + const timelineItem = $('.development-history-section .timeline-item').eq(itemIndex - 1); + if (timelineItem.length > 0) { + timelineItem.find('.timeline-year').text(newval); + timelineItem.attr('data-year', newval); + + // 如果这是当前激活的项目,也更新右侧显示 + if (timelineItem.hasClass('active')) { + $('.development-history-section .display-year').text(newval); + } + } + }); + }); + + // 描述更改预览 + wp.customize('development_history_item_' + itemIndex + '_description', function(value) { + value.bind(function(newval) { + const timelineItem = $('.development-history-section .timeline-item').eq(itemIndex - 1); + if (timelineItem.length > 0) { + const descriptionElement = timelineItem.find('.timeline-description'); + timelineItem.attr('data-description', newval); + + if (newval && newval.trim() !== '') { + if (descriptionElement.length === 0) { + timelineItem.find('.timeline-content').append('
' + newval + '
'); + } else { + descriptionElement.text(newval); + } + } else { + descriptionElement.remove(); + } + + // 如果这是当前激活的项目,也更新右侧显示 + if (timelineItem.hasClass('active')) { + const displayDescription = $('.development-history-section .display-description'); + if (newval && newval.trim() !== '') { + if (displayDescription.length === 0) { + $('.development-history-section .development-history-display').append('
' + newval + '
'); + } else { + displayDescription.text(newval).show(); + } + } else { + displayDescription.hide(); + } + } + } + }); + }); + + // 激活状态更改预览 + wp.customize('development_history_item_' + itemIndex + '_active', function(value) { + value.bind(function(newval) { + const timelineItem = $('.development-history-section .timeline-item').eq(itemIndex - 1); + if (timelineItem.length > 0) { + if (newval) { + // 移除其他项目的激活状态 + $('.development-history-section .timeline-item').removeClass('active'); + // 激活当前项目 + timelineItem.addClass('active'); + + // 更新右侧显示 + const year = timelineItem.attr('data-year') || ''; + const description = timelineItem.attr('data-description') || ''; + + $('.development-history-section .display-year').text(year); + + const displayDescription = $('.development-history-section .display-description'); + if (description && description.trim() !== '') { + if (displayDescription.length === 0) { + $('.development-history-section .development-history-display').append('
' + description + '
'); + } else { + displayDescription.text(description).show(); + } + } else { + displayDescription.hide(); + } + } else { + timelineItem.removeClass('active'); + } + } + }); + }); + } + + // 为最多20个年份项目添加预览功能 + for (let i = 1; i <= 20; i++) { + addDevelopmentHistoryItemPreview(i); + } + + // ========== 联系地图区块预览功能 ========== + + // 联系地图区块标题更改预览 + wp.customize('contact_map_title', function(value) { + value.bind(function(newval) { + $('.nenghui-contact-map .contact-map-title').text(newval); + if (newval && newval.trim() !== '') { + $('.nenghui-contact-map .contact-map-header').show(); + } else { + $('.nenghui-contact-map .contact-map-header').hide(); + } + }); + }); + + // 办公地址更改预览 + wp.customize('contact_office_address', function(value) { + value.bind(function(newval) { + const addressItem = $('.nenghui-contact-map .contact-item').eq(0); + if (newval && newval.trim() !== '') { + addressItem.find('.contact-value').html(newval.replace(/\n/g, '
')); + addressItem.show(); + } else { + addressItem.hide(); + } + }); + }); + + // 电话/手机更改预览 + wp.customize('contact_phone', function(value) { + value.bind(function(newval) { + const phoneItem = $('.nenghui-contact-map .contact-item').eq(1); + if (newval && newval.trim() !== '') { + const cleanPhone = newval.replace(/[\s\-\(\)]/g, ''); + phoneItem.find('.contact-value a').attr('href', 'tel:' + cleanPhone).text(newval); + phoneItem.show(); + } else { + phoneItem.hide(); + } + }); + }); + + // 邮箱更改预览 + wp.customize('contact_email', function(value) { + value.bind(function(newval) { + const emailItem = $('.nenghui-contact-map .contact-item').eq(2); + if (newval && newval.trim() !== '') { + emailItem.find('.contact-value a').attr('href', 'mailto:' + newval).text(newval); + emailItem.show(); + } else { + emailItem.hide(); + } + }); + }); + + // 地图嵌入代码更改预览 + wp.customize('contact_map_embed_code', function(value) { + value.bind(function(newval) { + const mapContainer = $('.nenghui-contact-map .contact-map-container'); + if (newval && newval.trim() !== '') { + mapContainer.html(newval); + } else { + mapContainer.html('

请在自定义器中设置地图嵌入代码
联系地图设置 → 地图设置 → 地图嵌入代码

'); + } + }); + }); + + // 地图高度更改预览 + wp.customize('contact_map_height', function(value) { + value.bind(function(newval) { + let height = newval; + // 验证高度格式 + if (!/^\d+(\.\d+)?(px|vh|%)$/.test(height)) { + height = '400px'; + } + $('.nenghui-contact-map .contact-map-container').css('height', height); + }); + }); + + // 背景颜色更改预览 + wp.customize('contact_bg_color', function(value) { + value.bind(function(newval) { + $('.nenghui-contact-map').css('background-color', newval); + }); + }); + + // 文字颜色更改预览 + wp.customize('contact_text_color', function(value) { + value.bind(function(newval) { + $('.nenghui-contact-map').css('color', newval); + }); + }); + + // 图标颜色更改预览 + wp.customize('contact_icon_color', function(value) { + value.bind(function(newval) { + $('.nenghui-contact-map .contact-icon').css('color', newval); + }); + }); + + // 产品Banner预览功能 + // 产品数量更改预览 + wp.customize('products_banner_count', function(value) { + value.bind(function(newval) { + wp.customize.preview.send('refresh'); + }); + }); + + // 自动播放设置更改预览 + wp.customize('products_banner_autoplay', function(value) { + value.bind(function(newval) { + var carousel = document.querySelector('.products-carousel'); + if (carousel) { + carousel.setAttribute('data-autoplay', newval ? 'true' : 'false'); + // 重新初始化轮播 + wp.customize.preview.send('refresh'); + } + }); + }); + + // 自动播放延迟更改预览 + wp.customize('products_banner_autoplay_delay', function(value) { + value.bind(function(newval) { + var carousel = document.querySelector('.products-carousel'); + if (carousel) { + carousel.setAttribute('data-delay', newval); + // 重新初始化轮播 + wp.customize.preview.send('refresh'); + } + }); + }); + + // 为每个产品添加预览功能 + for (let i = 1; i <= 7; i++) { + // 产品图片更改预览 + wp.customize('products_banner_image_' + i, function(value) { + value.bind(function(newval) { + wp.customize.preview.send('refresh'); + }); + }); + + // 产品标题更改预览 + wp.customize('products_banner_title_' + i, function(value) { + value.bind(function(newval) { + var titleElement = $('.nenghui-products-banner .product-slide:nth-child(' + i + ') .product-title'); + if (titleElement.length) { + titleElement.text(newval); + } else { + wp.customize.preview.send('refresh'); + } + }); + }); + + // 产品描述更改预览 + wp.customize('products_banner_description_' + i, function(value) { + value.bind(function(newval) { + var descElement = $('.nenghui-products-banner .product-slide:nth-child(' + i + ') .product-description'); + if (descElement.length) { + descElement.text(newval); + } else { + wp.customize.preview.send('refresh'); + } + }); + }); + + // 产品链接更改预览 + wp.customize('products_banner_link_' + i, function(value) { + value.bind(function(newval) { + var linkElement = $('.nenghui-products-banner .product-slide:nth-child(' + i + ') .product-link'); + if (linkElement.length) { + linkElement.attr('href', newval); + } else { + wp.customize.preview.send('refresh'); + } + }); + }); + } + + // ===== Black Maps 地图设置实时预览 ===== + + // 地图背景颜色更改预览 + wp.customize('black_maps_bg_color', function(value) { + value.bind(function(newval) { + $('.black-maps-wrapper').css('background-color', newval); + // 同时更新ECharts配置中的背景色 + updateMapBackgroundColor(newval); + }); + }); + + // 地图标题更改预览 + wp.customize('black_maps_title', function(value) { + value.bind(function(newval) { + updateMapTitle(newval); + }); + }); + + // 地图副标题更改预览 + wp.customize('black_maps_subtitle', function(value) { + value.bind(function(newval) { + updateMapSubtitle(newval); + }); + }); + + // 地图高度更改预览 + wp.customize('black_maps_height', function(value) { + value.bind(function(newval) { + $('.black-maps-wrapper').css('height', newval); + // 触发ECharts重新调整大小 + resizeAllMaps(); + }); + }); + + // 中国区域颜色更改预览 + wp.customize('black_maps_china_color', function(value) { + value.bind(function(newval) { + updateMapChinaColor(newval); + }); + }); + + // 目标国家颜色更改预览 + wp.customize('black_maps_target_color', function(value) { + value.bind(function(newval) { + updateMapTargetColor(newval); + }); + }); + + // 连接线颜色更改预览 + wp.customize('black_maps_line_color', function(value) { + value.bind(function(newval) { + updateMapLineColor(newval); + }); + }); + + // 自定义国家数据更改预览 + wp.customize('black_maps_countries', function(value) { + value.bind(function(newval) { + updateMapCountries(newval); + }); + }); + + // 地图更新辅助函数 + function updateMapBackgroundColor(color) { + // 查找所有地图实例并更新背景色 + $('.black-maps-container').each(function() { + var chartInstance = echarts.getInstanceByDom(this); + if (chartInstance) { + var option = chartInstance.getOption(); + option.backgroundColor = color; + chartInstance.setOption(option); + } + }); + } + + function updateMapTitle(title) { + $('.black-maps-container').each(function() { + var chartInstance = echarts.getInstanceByDom(this); + if (chartInstance) { + var option = chartInstance.getOption(); + if (option.title && option.title[0]) { + option.title[0].text = title; + chartInstance.setOption(option); + } + } + }); + } + + function updateMapSubtitle(subtitle) { + $('.black-maps-container').each(function() { + var chartInstance = echarts.getInstanceByDom(this); + if (chartInstance) { + var option = chartInstance.getOption(); + if (option.title && option.title[0]) { + option.title[0].subtext = subtitle; + chartInstance.setOption(option); + } + } + }); + } + + function updateMapChinaColor(color) { + $('.black-maps-container').each(function() { + var chartInstance = echarts.getInstanceByDom(this); + if (chartInstance) { + var option = chartInstance.getOption(); + if (option.geo && option.geo[0] && option.geo[0].regions) { + // 查找中国区域配置并更新颜色 + option.geo[0].regions.forEach(function(region) { + if (region.name === 'China') { + region.itemStyle.normal.areaColor = color; + region.itemStyle.emphasis.areaColor = color; + } + }); + chartInstance.setOption(option); + } + } + }); + } + + function updateMapTargetColor(color) { + $('.black-maps-container').each(function() { + var chartInstance = echarts.getInstanceByDom(this); + if (chartInstance) { + var option = chartInstance.getOption(); + if (option.geo && option.geo[0] && option.geo[0].regions) { + // 更新所有目标国家的颜色(除了中国) + option.geo[0].regions.forEach(function(region) { + if (region.name !== 'China') { + region.itemStyle.normal.areaColor = color; + region.itemStyle.emphasis.areaColor = color; + } + }); + chartInstance.setOption(option); + } + } + }); + } + + function updateMapLineColor(color) { + $('.black-maps-container').each(function() { + var chartInstance = echarts.getInstanceByDom(this); + if (chartInstance) { + var option = chartInstance.getOption(); + if (option.series) { + // 更新所有线条系列的颜色 + option.series.forEach(function(series) { + if (series.type === 'lines' && series.lineStyle) { + series.lineStyle.normal.color = color; + } + }); + chartInstance.setOption(option); + } + } + }); + } + + function updateMapCountries(countriesJson) { + // 当国家数据更改时,重新加载整个地图 + // 这是最简单和最可靠的方法 + wp.customize.preview.send('refresh'); + } + + function resizeAllMaps() { + // 调整所有地图实例的大小 + setTimeout(function() { + $('.black-maps-container').each(function() { + var chartInstance = echarts.getInstanceByDom(this); + if (chartInstance) { + chartInstance.resize(); + } + }); + }, 100); + } + + // ========== 地图设置实时预览 ========== + + // 地图标题预览 + wp.customize('black_maps_title', function(value) { + value.bind(function(newval) { + // 如果页面上有ECharts实例,更新标题 + if (typeof echarts !== 'undefined') { + $('.black-maps-wrapper').each(function() { + var mapId = $(this).find('[id^="echartsMap"]').attr('id'); + if (mapId) { + var chartInstance = echarts.getInstanceByDom(document.getElementById(mapId)); + if (chartInstance) { + chartInstance.setOption({ + title: { + text: newval + } + }); + } + } + }); + } + }); + }); + + // 地图副标题预览 + wp.customize('black_maps_subtitle', function(value) { + value.bind(function(newval) { + if (typeof echarts !== 'undefined') { + $('.black-maps-wrapper').each(function() { + var mapId = $(this).find('[id^="echartsMap"]').attr('id'); + if (mapId) { + var chartInstance = echarts.getInstanceByDom(document.getElementById(mapId)); + if (chartInstance) { + chartInstance.setOption({ + title: { + subtext: newval + } + }); + } + } + }); + } + }); + }); + + // 地图高度预览 + wp.customize('black_maps_height', function(value) { + value.bind(function(newval) { + var height = newval; + if (/^\d+$/.test(newval)) { + height = newval + 'px'; + } + $('.black-maps-wrapper, .black-maps-container, [id^="echartsMap"]').css('height', height); + + // 重新调整ECharts大小 + if (typeof echarts !== 'undefined') { + setTimeout(function() { + $('.black-maps-wrapper').each(function() { + var mapId = $(this).find('[id^="echartsMap"]').attr('id'); + if (mapId) { + var chartInstance = echarts.getInstanceByDom(document.getElementById(mapId)); + if (chartInstance) { + chartInstance.resize(); + } + } + }); + }, 100); + } + }); + }); + + // 背景颜色预览 + wp.customize('black_maps_bg_color', function(value) { + value.bind(function(newval) { + $('.black-maps-wrapper').css('background-color', newval); + }); + }); + + // 图表背景颜色预览 + wp.customize('black_maps_chart_bg', function(value) { + value.bind(function(newval) { + if (typeof echarts !== 'undefined') { + $('.black-maps-wrapper').each(function() { + var mapId = $(this).find('[id^="echartsMap"]').attr('id'); + if (mapId) { + var chartInstance = echarts.getInstanceByDom(document.getElementById(mapId)); + if (chartInstance) { + chartInstance.setOption({ + backgroundColor: newval + }); + } + } + }); + } + }); + }); + + // 标题颜色预览 + wp.customize('black_maps_title_color', function(value) { + value.bind(function(newval) { + if (typeof echarts !== 'undefined') { + $('.black-maps-wrapper').each(function() { + var mapId = $(this).find('[id^="echartsMap"]').attr('id'); + if (mapId) { + var chartInstance = echarts.getInstanceByDom(document.getElementById(mapId)); + if (chartInstance) { + chartInstance.setOption({ + title: { + textStyle: { + color: newval + } + } + }); + } + } + }); + } + }); + }); + + // 标题字体大小预览 + wp.customize('black_maps_title_size', function(value) { + value.bind(function(newval) { + if (typeof echarts !== 'undefined') { + $('.black-maps-wrapper').each(function() { + var mapId = $(this).find('[id^="echartsMap"]').attr('id'); + if (mapId) { + var chartInstance = echarts.getInstanceByDom(document.getElementById(mapId)); + if (chartInstance) { + chartInstance.setOption({ + title: { + textStyle: { + fontSize: parseInt(newval) + } + } + }); + } + } + }); + } + }); + }); + + // 颜色相关设置预览(需要刷新页面以完全应用) + var colorSettings = [ + 'black_maps_china_color', + 'black_maps_target_color', + 'black_maps_line_color', + 'black_maps_effect_color' + ]; + + colorSettings.forEach(function(setting) { + wp.customize(setting, function(value) { + value.bind(function(newval) { + // 颜色变化需要重新初始化地图,所以刷新页面 + wp.customize.preview.send('refresh'); + }); + }); + }); + + // 自定义国家数据预览 + wp.customize('black_maps_countries_json', function(value) { + value.bind(function(newval) { + // 国家数据变化需要重新初始化地图 + wp.customize.preview.send('refresh'); + }); + }); + + // 显示参数预览 + var displaySettings = [ + 'black_maps_enable_zoom', + 'black_maps_enable_drag', + 'black_maps_animation_speed' + ]; + + displaySettings.forEach(function(setting) { + wp.customize(setting, function(value) { + value.bind(function(newval) { + // 显示参数变化需要重新初始化地图 + wp.customize.preview.send('refresh'); + }); + }); + }); + + // 地图预览辅助函数 + function refreshMapPreview() { + if (typeof echarts !== 'undefined') { + setTimeout(function() { + $('.black-maps-wrapper').each(function() { + var mapId = $(this).find('[id^="echartsMap"]').attr('id'); + if (mapId) { + var chartInstance = echarts.getInstanceByDom(document.getElementById(mapId)); + if (chartInstance) { + chartInstance.resize(); + } + } + }); + }, 200); + } + } + + // 监听窗口大小变化,调整地图大小 + $(window).on('resize', function() { + refreshMapPreview(); + }); + +})(jQuery); \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/js/echarts.min.js b/wp-content/themes/nenghui-energy-theme-4/assets/js/echarts.min.js new file mode 100644 index 0000000..d2b63cd --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/assets/js/echarts.min.js @@ -0,0 +1,22 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + + +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e(t.echarts={})}(this,function(t){"use strict";var e=2311,n=function(){return e++},v="object"==typeof wx&&"function"==typeof wx.getSystemInfoSync?{browser:{},os:{},node:!1,wxa:!0,canvasSupported:!0,svgSupported:!1,touchEventsSupported:!0,domSupported:!1}:"undefined"==typeof document&&"undefined"!=typeof self?{browser:{},os:{},node:!1,worker:!0,canvasSupported:!0,domSupported:!1}:"undefined"==typeof navigator?{browser:{},os:{},node:!0,worker:!1,canvasSupported:!0,svgSupported:!0,domSupported:!1}:function(t){var e={},i=t.match(/Firefox\/([\d.]+)/),n=t.match(/MSIE\s([\d.]+)/)||t.match(/Trident\/.+?rv:(([\d.]+))/),a=t.match(/Edge\/([\d.]+)/),o=/micromessenger/i.test(t);i&&(e.firefox=!0,e.version=i[1]);n&&(e.ie=!0,e.version=n[1]);a&&(e.edge=!0,e.version=a[1]);o&&(e.weChat=!0);return{browser:e,os:{},node:!1,canvasSupported:!!document.createElement("canvas").getContext,svgSupported:"undefined"!=typeof SVGRect,touchEventsSupported:"ontouchstart"in window&&!e.ie&&!e.edge,pointerEventsSupported:"onpointerdown"in window&&(e.edge||e.ie&&11<=e.version),domSupported:"undefined"!=typeof document}}(navigator.userAgent);var s={"[object Function]":1,"[object RegExp]":1,"[object Date]":1,"[object Error]":1,"[object CanvasGradient]":1,"[object CanvasPattern]":1,"[object Image]":1,"[object Canvas]":1},l={"[object Int8Array]":1,"[object Uint8Array]":1,"[object Uint8ClampedArray]":1,"[object Int16Array]":1,"[object Uint16Array]":1,"[object Int32Array]":1,"[object Uint32Array]":1,"[object Float32Array]":1,"[object Float64Array]":1},u=Object.prototype.toString,i=Array.prototype,r=i.forEach,h=i.filter,a=i.slice,c=i.map,d=i.reduce,o={};function f(t,e){"createCanvas"===t&&(y=null),o[t]=e}function D(t){if(null==t||"object"!=typeof t)return t;var e=t,i=u.call(t);if("[object Array]"===i){if(!$(t)){e=[];for(var n=0,a=t.length;n>1)%2;s.cssText=["position:absolute","visibility: hidden","padding: 0","margin: 0","border-width: 0","width:0","height:0",n[l]+":0",a[u]+":0",n[1-l]+":auto",a[1-u]+":auto",""].join("!important;"),t.appendChild(r),i.push(r)}return i}(t,r),r);if(s)return s(Rt,n,a),i.zrX=Rt[0],void(i.zrY=Rt[1])}i.zrX=i.zrY=0}function Vt(t,e,i){if(null!=(e=e||window.event).zrX)return e;var n=e.type;if(n&&0<=n.indexOf("touch")){var a="touchend"!==n?e.targetTouches[0]:e.changedTouches[0];a&&Et(t,a,e,i)}else Et(t,e,e,i),e.zrDelta=e.wheelDelta?e.wheelDelta/120:-(e.detail||0)/3;var o=e.button;return null==e.which&&void 0!==o&&Ot.test(e.type)&&(e.which=1&o?1:2&o?3:4&o?2:0),e}function Gt(t,e,i){Nt?t.addEventListener(e,i):t.attachEvent("on"+e,i)}var Ft=Nt?function(t){t.preventDefault(),t.stopPropagation(),t.cancelBubble=!0}:function(t){t.returnValue=!1,t.cancelBubble=!0};function Wt(t){return 2===t.which||3===t.which}function Ht(){this._track=[]}function Zt(t){var e=t[1][0]-t[0][0],i=t[1][1]-t[0][1];return Math.sqrt(e*e+i*i)}Ht.prototype={constructor:Ht,recognize:function(t,e,i){return this._doTrack(t,e,i),this._recognize(t)},clear:function(){return this._track.length=0,this},_doTrack:function(t,e,i){var n=t.touches;if(n){for(var a={points:[],touches:[],target:e,event:t},o=0,r=n.length;o=this._maxSize&&0>4|(3840&n)>>8,240&n|(240&n)>>4,15&n|(15&n)<<4,1),Oe(t,e),e):void Le(e,0,0,0,1):7===a.length?0<=(n=parseInt(a.substr(1),16))&&n<=16777215?(Le(e,(16711680&n)>>16,(65280&n)>>8,255&n,1),Oe(t,e),e):void Le(e,0,0,0,1):void 0;var o=a.indexOf("("),r=a.indexOf(")");if(-1!==o&&r+1===a.length){var s=a.substr(0,o),l=a.substr(o+1,r-(o+1)).split(","),u=1;switch(s){case"rgba":if(4!==l.length)return void Le(e,0,0,0,1);u=Te(l.pop());case"rgb":return 3!==l.length?void Le(e,0,0,0,1):(Le(e,Ae(l[0]),Ae(l[1]),Ae(l[2]),u),Oe(t,e),e);case"hsla":return 4!==l.length?void Le(e,0,0,0,1):(l[3]=Te(l[3]),Re(l,e),Oe(t,e),e);case"hsl":return 3!==l.length?void Le(e,0,0,0,1):(Re(l,e),Oe(t,e),e);default:return}}Le(e,0,0,0,1)}}function Re(t,e){var i=(parseFloat(t[0])%360+360)%360/360,n=Te(t[1]),a=Te(t[2]),o=a<=.5?a*(n+1):a+n-a*n,r=2*a-o;return Le(e=e||[],Me(255*De(r,o,i+1/3)),Me(255*De(r,o,i)),Me(255*De(r,o,i-1/3)),1),4===t.length&&(e[3]=t[3]),e}function Ee(t,e){var i=ze(t);if(i){for(var n=0;n<3;n++)i[n]=e<0?i[n]*(1-e)|0:(255-i[n])*e+i[n]|0,255e);i++);i=Math.min(i-1,u-2)}C=e;var n=g[(D=i)+1]-g[i];if(0!=n)if(S=(e-g[i])/n,l)if(I=m[i],M=m[0===i?i:i-1],A=m[u-2=i.x&&t<=i.x+i.width&&e>=i.y&&e<=i.y+i.height},clone:function(){return new bi(this.x,this.y,this.width,this.height)},copy:function(t){this.x=t.x,this.y=t.y,this.width=t.width,this.height=t.height},plain:function(){return{x:this.x,y:this.y,width:this.width,height:this.height}}},bi.create=function(t){return new bi(t.x,t.y,t.width,t.height)};var Si=function(t){for(var e in t=t||{},pi.call(this,t),t)t.hasOwnProperty(e)&&(this[e]=t[e]);this._children=[],this.__storage=null,this.__dirty=!0};Si.prototype={constructor:Si,isGroup:!0,type:"group",silent:!1,children:function(){return this._children.slice()},childAt:function(t){return this._children[t]},childOfName:function(t){for(var e=this._children,i=0;i>>1])<0?l=o:s=1+o;var u=n-s;switch(u){case 3:t[s+3]=t[s+2];case 2:t[s+2]=t[s+1];case 1:t[s+1]=t[s];break;default:for(;0>>1);0>>1);o(t,e[i+h])<0?l=h:r=h+1}return l}function Li(p,g){var r,s,m=Ii,l=0,v=[];function e(t){var e=r[t],i=s[t],n=r[t+1],a=s[t+1];s[t]=i+a,t===l-3&&(r[t+1]=r[t+2],s[t+1]=s[t+2]),l--;var o=Ci(p[n],p,e,i,0,g);e+=o,0!==(i-=o)&&0!==(a=Di(p[e+i-1],p,n,a,a-1,g))&&(i<=a?function(t,e,i,n){var a=0;for(a=0;as[t+1])break;e(t)}},this.forceMergeRuns=function(){for(;1>=1;return t+e}(a);do{if((o=Ai(t,i,n,e))=e.maxIterations){t+=e.ellipsis;break}var s=0===r?mn(t,a,e.ascCharWidth,e.cnCharWidth):0f)return{lines:[],width:0,height:0};C.textWidth=ln(C.text,w);var S=x.textWidth,M=null==S||"auto"===S;if("string"==typeof S&&"%"===S.charAt(S.length-1))C.percentWidth=S,u.push(C),S=0;else{if(M){S=C.textWidth;var I=x.textBackgroundColor,A=I&&I.image;A&&tn(A=$i(A))&&(S=Math.max(S,A.width*b/A.height))}var T=_?_[1]+_[3]:0;S+=T;var D=null!=d?d-v:null;null!=D&&Dn[0]){for(r=0;rt);r++);o=i[n[r]]}if(n.splice(r+1,0,t),!(i[t]=e).virtual)if(o){var l=o.dom;l.nextSibling?s.insertBefore(e.dom,l.nextSibling):s.appendChild(e.dom)}else s.firstChild?s.insertBefore(e.dom,s.firstChild):s.appendChild(e.dom)}else ci("Layer of zlevel "+t+" is not valid")},eachLayer:function(t,e){var i,n,a=this._zlevelList;for(n=0;n=o.length&&o.push({option:t})}}),o}function Aa(t){var r=Q();va(t,function(t,e){var i=t.exist;i&&r.set(i.id,t)}),va(t,function(t,e){var i=t.option;Y(!i||null==i.id||!r.get(i.id)||r.get(i.id)===t,"id duplicates: "+(i&&i.id)),i&&null!=i.id&&r.set(i.id,t),t.keyInfo||(t.keyInfo={})}),va(t,function(t,e){var i=t.exist,n=t.option,a=t.keyInfo;if(ya(n)){if(a.name=null!=n.name?n.name+"":i?i.name:_a+e,i)a.id=i.id;else if(null!=n.id)a.id=n.id+"";else for(var o=0;a.id="\0"+a.name+"\0"+o++,r.get(a.id););r.set(a.id,t)}})}function Ta(t){var e=t.name;return!(!e||!e.indexOf(_a))}function Da(t){return ya(t)&&t.id&&0===(t.id+"").indexOf("\0_ec_\0")}function Ca(e,t){return null!=t.dataIndexInside?t.dataIndexInside:null!=t.dataIndex?O(t.dataIndex)?k(t.dataIndex,function(t){return e.indexOfRawIndex(t)}):e.indexOfRawIndex(t.dataIndex):null!=t.name?O(t.name)?k(t.name,function(t){return e.indexOfName(t)}):e.indexOfName(t.name):void 0}function La(){var e="__\0ec_inner_"+ka+++"_"+Math.random().toFixed(5);return function(t){return t[e]||(t[e]={})}}var ka=0;function Pa(s,l,u){if(R(l)){var t={};t[l+"Index"]=0,l=t}var e=u&&u.defaultMainType;!e||Na(l,e+"Index")||Na(l,e+"Id")||Na(l,e+"Name")||(l[e+"Index"]=0);var h={};return va(l,function(t,e){t=l[e];if("dataIndex"!==e&&"dataIndexInside"!==e){var i=e.match(/^(\w+)(Index|Id|Name)$/)||[],n=i[1],a=(i[2]||"").toLowerCase();if(!(!n||!a||null==t||"index"===a&&"none"===t||u&&u.includeMainTypes&&_(u.includeMainTypes,n)<0)){var o={mainType:n};"index"===a&&"all"===t||(o[a]=t);var r=s.queryComponents(o);h[n+"Models"]=r,h[n+"Model"]=r[0]}}else h[e]=t}),h}function Na(t,e){return t&&t.hasOwnProperty(e)}function Oa(t,e,i){t.setAttribute?t.setAttribute(e,i):t[e]=i}function za(t){return"auto"===t?v.domSupported?"html":"richText":t||"html"}function Ra(t,i){var n=Q(),a=[];return L(t,function(t){var e=i(t);(n.get(e)||(a.push(e),n.set(e,[]))).push(t)}),{keys:a,buckets:n}}var Ea=".",Ba="___EC__COMPONENT__CONTAINER___";function Va(t){var e={main:"",sub:""};return t&&(t=t.split(Ea),e.main=t[0]||"",e.sub=t[1]||""),e}function Ga(t){(t.$constructor=t).extend=function(t){function e(){t.$constructor?t.$constructor.apply(this,arguments):i.apply(this,arguments)}var i=this;return C(e.prototype,t),e.extend=this.extend,e.superCall=Ha,e.superApply=Za,w(e,this),e.superClass=i,e}}var Fa=0;function Wa(t){var e=["__\0is_clz",Fa++,Math.random().toFixed(3)].join("_");t.prototype[e]=!0,t.isInstance=function(t){return!(!t||!t[e])}}function Ha(t,e){var i=U(arguments,2);return this.superClass.prototype[e].apply(t,i)}function Za(t,e,i){return this.superClass.prototype[e].apply(t,i)}function Ua(i,t){t=t||{};var a={};if(i.registerClass=function(t,e){if(e)if(function(t){Y(/^[a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)?$/.test(t),'componentType "'+t+'" illegal')}(e),(e=Va(e)).sub){if(e.sub!==Ba){(function(t){var e=a[t.main];e&&e[Ba]||((e=a[t.main]={})[Ba]=!0);return e})(e)[e.sub]=t}}else a[e.main]=t;return t},i.getClass=function(t,e,i){var n=a[t];if(n&&n[Ba]&&(n=e?n[e]:null),i&&!n)throw new Error(e?"Component "+t+"."+(e||"")+" not exists. Load it first.":t+".type should be specified.");return n},i.getClassesByMainType=function(t){t=Va(t);var i=[],e=a[t.main];return e&&e[Ba]?L(e,function(t,e){e!==Ba&&i.push(t)}):i.push(e),i},i.hasClass=function(t){return t=Va(t),!!a[t.main]},i.getAllClassMainTypes=function(){var i=[];return L(a,function(t,e){i.push(e)}),i},i.hasSubTypes=function(t){t=Va(t);var e=a[t.main];return e&&e[Ba]},i.parseClassType=Va,t.registerWhenExtend){var n=i.extend;n&&(i.extend=function(t){var e=n.call(this,t);return i.registerClass(e,t.type)})}return i}function Xa(s){for(var t=0;tthis._ux||Fo(e-this._yi)>this._uy||this._len<5;return this.addData(ko.L,t,e),this._ctx&&i&&(this._needsDash()?this._dashedLineTo(t,e):this._ctx.lineTo(t,e)),i&&(this._xi=t,this._yi=e),this},bezierCurveTo:function(t,e,i,n,a,o){return this.addData(ko.C,t,e,i,n,a,o),this._ctx&&(this._needsDash()?this._dashedBezierTo(t,e,i,n,a,o):this._ctx.bezierCurveTo(t,e,i,n,a,o)),this._xi=a,this._yi=o,this},quadraticCurveTo:function(t,e,i,n){return this.addData(ko.Q,t,e,i,n),this._ctx&&(this._needsDash()?this._dashedQuadraticTo(t,e,i,n):this._ctx.quadraticCurveTo(t,e,i,n)),this._xi=i,this._yi=n,this},arc:function(t,e,i,n,a,o){return this.addData(ko.A,t,e,i,i,n,a-n,0,o?0:1),this._ctx&&this._ctx.arc(t,e,i,n,a,o),this._xi=Bo(a)*i+t,this._yi=Vo(a)*i+e,this},arcTo:function(t,e,i,n,a){return this._ctx&&this._ctx.arcTo(t,e,i,n,a),this},rect:function(t,e,i,n){return this._ctx&&this._ctx.rect(t,e,i,n),this.addData(ko.R,t,e,i,n),this},closePath:function(){this.addData(ko.Z);var t=this._ctx,e=this._x0,i=this._y0;return t&&(this._needsDash()&&this._dashedLineTo(e,i),t.closePath()),this._xi=e,this._yi=i,this},fill:function(t){t&&t.fill(),this.toStatic()},stroke:function(t){t&&t.stroke(),this.toStatic()},setLineDash:function(t){if(t instanceof Array){this._lineDash=t;for(var e=this._dashIdx=0,i=0;ie.length&&(this._expandData(),e=this.data);for(var i=0;il||Fo(r-a)>u||c===h-1)&&(t.lineTo(o,r),n=o,a=r);break;case ko.C:t.bezierCurveTo(s[c++],s[c++],s[c++],s[c++],s[c++],s[c++]),n=s[c-2],a=s[c-1];break;case ko.Q:t.quadraticCurveTo(s[c++],s[c++],s[c++],s[c++]),n=s[c-2],a=s[c-1];break;case ko.A:var f=s[c++],p=s[c++],g=s[c++],m=s[c++],v=s[c++],y=s[c++],x=s[c++],_=s[c++],w=m=er[n=0]+t&&r<=er[1]+t?h:0}if(o){l=n;n=jo(a),a=jo(l)}else n=jo(n),a=jo(a);aMath.PI/2&&p<1.5*Math.PI&&(h=-h),c+=h)}}return c}function rr(t,e,i,n,a){for(var o=0,r=0,s=0,l=0,u=0,h=0;hMath.abs(o[1])?0=e[1])return i[1]}else{if(t>=e[0])return i[0];if(t<=e[1])return i[1]}else{if(t===e[0])return i[0];if(t===e[1])return i[1]}return(t-e[0])/a*o+i[0]}function ml(t,e){switch(t){case"center":case"middle":t="50%";break;case"left":case"top":t="0%";break;case"right":case"bottom":t="100%"}return"string"==typeof t?function(t){return t.replace(/^\s+/,"").replace(/\s+$/,"")}(t).match(/%$/)?parseFloat(t)/100*e:parseFloat(t):null==t?NaN:+t}function vl(t,e,i){return null==e&&(e=10),e=Math.min(Math.max(0,e),20),t=(+t).toFixed(e),i?t:+t}function yl(t){return t.sort(function(t,e){return t-e}),t}function xl(t){if(t=+t,isNaN(t))return 0;for(var e=1,i=0;Math.round(t*e)/e!==t;)e*=10,i++;return i}function _l(t){var e=t.toString(),i=e.indexOf("e");if(0h&&(h=u[d],c=d);++s[c],u[c]=0,++l}return s[e]/a}var Sl=9007199254740991;function Ml(t){var e=2*Math.PI;return(t%e+e)%e}function Il(t){return-pl"'])/g,Bl={"&":"&","<":"<",">":">",'"':""","'":"'"};function Vl(t){return null==t?"":(t+"").replace(El,function(t,e){return Bl[e]})}function Gl(t,e){return"{"+t+(null==e?"":e)+"}"}var Fl=["a","b","c","d","e","f","g"];function Wl(t,e,i){O(e)||(e=[e]);var n=e.length;if(!n)return"";for(var a=e[0].$vars||[],o=0;o':'':{renderMode:a,content:"{marker"+o+"|} ",style:{color:i}}:""}function Ul(t,e){return"0000".substr(0,e-(t+="").length)+t}function Xl(t,e,i){"week"!==t&&"month"!==t&&"quarter"!==t&&"half-year"!==t&&"year"!==t||(t="MM-dd\nyyyy");var n=Tl(e),a=i?"UTC":"",o=n["get"+a+"FullYear"](),r=n["get"+a+"Month"]()+1,s=n["get"+a+"Date"](),l=n["get"+a+"Hours"](),u=n["get"+a+"Minutes"](),h=n["get"+a+"Seconds"](),c=n["get"+a+"Milliseconds"]();return t=t.replace("MM",Ul(r,2)).replace("M",r).replace("yyyy",o).replace("yy",o%100).replace("dd",Ul(s,2)).replace("d",s).replace("hh",Ul(l,2)).replace("h",l).replace("mm",Ul(u,2)).replace("m",u).replace("ss",Ul(h,2)).replace("s",h).replace("SSS",Ul(c,3))}function Yl(t){return t?t.charAt(0).toUpperCase()+t.substr(1):t}var jl=fn;var ql=(Object.freeze||Object)({addCommas:Ol,toCamelCase:zl,normalizeCssArray:Rl,encodeHTML:Vl,formatTpl:Wl,formatTplSimple:Hl,getTooltipMarker:Zl,formatTime:Xl,capitalFirst:Yl,truncateText:jl,getTextBoundingRect:function(t){return un(t.text,t.font,t.textAlign,t.textVerticalAlign,t.textPadding,t.textLineHeight,t.rich,t.truncate)},getTextRect:function(t,e,i,n,a,o,r,s){return un(t,e,i,n,a,s,o,r)}}),Kl=L,$l=["left","right","top","bottom","width","height"],Jl=[["width","left","right"],["height","top","bottom"]];function Ql(h,c,d,f,p){var g=0,m=0;null==f&&(f=1/0),null==p&&(p=1/0);var v=0;c.eachChild(function(t,e){var i,n,a=t.position,o=t.getBoundingRect(),r=c.childAt(e+1),s=r&&r.getBoundingRect();if("horizontal"===h){var l=o.width+(s?-s.x+o.x:0);v=f<(i=g+l)||t.newline?(g=0,i=l,m+=v+d,o.height):Math.max(v,o.height)}else{var u=o.height+(s?-s.y+o.y:0);v=p<(n=m+u)||t.newline?(g+=v+d,m=0,n=u,o.width):Math.max(v,o.width)}t.newline||(a[0]=g,a[1]=m,"horizontal"===h?g=i+d:m=n+d)})}var tu=Ql;A(Ql,"vertical"),A(Ql,"horizontal");function eu(t,e,i){i=Rl(i||0);var n=e.width,a=e.height,o=ml(t.left,n),r=ml(t.top,a),s=ml(t.right,n),l=ml(t.bottom,a),u=ml(t.width,n),h=ml(t.height,a),c=i[2]+i[0],d=i[1]+i[3],f=t.aspect;switch(isNaN(u)&&(u=n-s-d-o),isNaN(h)&&(h=a-l-c-r),null!=f&&(isNaN(u)&&isNaN(h)&&(n/ae)return t[n];return t[i-1]}(s,i):r;if((l=l||r)&&l.length){var u=l[a];return t&&(o[t]=u),n.colorIdx=(a+1)%l.length,u}}};function mu(t){var e=t.get("coordinateSystem"),i={coordSysName:e,coordSysDims:[],axisMap:Q(),categoryAxisMap:Q()},n=vu[e];if(n)return n(t,i,i.axisMap,i.categoryAxisMap),i}var vu={cartesian2d:function(t,e,i,n){var a=t.getReferringComponents("xAxis")[0],o=t.getReferringComponents("yAxis")[0];e.coordSysDims=["x","y"],i.set("x",a),i.set("y",o),yu(a)&&(n.set("x",a),e.firstCategoryDimIndex=0),yu(o)&&(n.set("y",o),e.firstCategoryDimIndex=1)},singleAxis:function(t,e,i,n){var a=t.getReferringComponents("singleAxis")[0];e.coordSysDims=["single"],i.set("single",a),yu(a)&&(n.set("single",a),e.firstCategoryDimIndex=0)},polar:function(t,e,i,n){var a=t.getReferringComponents("polar")[0],o=a.findAxisModel("radiusAxis"),r=a.findAxisModel("angleAxis");e.coordSysDims=["radius","angle"],i.set("radius",o),i.set("angle",r),yu(o)&&(n.set("radius",o),e.firstCategoryDimIndex=0),yu(r)&&(n.set("angle",r),e.firstCategoryDimIndex=1)},geo:function(t,e,i,n){e.coordSysDims=["lng","lat"]},parallel:function(t,a,o,r){var s=t.ecModel,e=s.getComponent("parallel",t.get("parallelIndex")),l=a.coordSysDims=e.dimensions.slice();L(e.parallelAxisIndex,function(t,e){var i=s.getComponent("parallelAxis",t),n=l[e];o.set(n,i),yu(i)&&null==a.firstCategoryDimIndex&&(r.set(n,i),a.firstCategoryDimIndex=e)})}};function yu(t){return"category"===t.get("type")}var xu="original",_u="arrayRows",wu="objectRows",bu="keyedColumns",Su="unknown",Mu="typedArray",Iu="column",Au="row";function Tu(t){this.fromDataset=t.fromDataset,this.data=t.data||(t.sourceFormat===bu?{}:[]),this.sourceFormat=t.sourceFormat||Su,this.seriesLayoutBy=t.seriesLayoutBy||Iu,this.dimensionsDefine=t.dimensionsDefine,this.encodeDefine=t.encodeDefine&&Q(t.encodeDefine),this.startIndex=t.startIndex||0,this.dimensionsDetectCount=t.dimensionsDetectCount}Tu.seriesDataToSource=function(t){return new Tu({data:t,sourceFormat:V(t)?Mu:xu,fromDataset:!1})},Wa(Tu);var Du=La();function Cu(t){var e=t.option,i=e.data,n=V(i)?Mu:xu,a=!1,o=e.seriesLayoutBy,r=e.sourceHeader,s=e.dimensions,l=function(t){var e=t.option;if(!e.data)return t.ecModel.getComponent("dataset",e.datasetIndex||0)}(t);if(l){var u=l.option;i=u.source,n=Du(l).sourceFormat,a=!0,o=o||u.seriesLayoutBy,null==r&&(r=u.sourceHeader),s=s||u.dimensions}var h=function(t,e,i,n,a){if(!t)return{dimensionsDefine:Lu(a)};var o,r,s,l;if(e===_u)"auto"===n||null==n?ku(function(t){null!=t&&"-"!==t&&(R(t)?null==r&&(r=1):r=0)},i,t,10):r=n?1:0,a||1!==r||(a=[],ku(function(t,e){a[e]=null!=t?t:""},i,t)),o=a?a.length:i===Au?t.length:t[0]?t[0].length:null;else if(e===wu)a||(a=function(t){var e,i=0;for(;i":"\n",f="richText"===c,p={},g=0;function i(t){return{renderMode:c,content:Vl(Ol(t)),style:p}}var m=this.getData(),o=m.mapDimension("defaultedTooltip",!0),n=o.length,r=this.getRawValue(a),s=O(r),v=m.getItemVisual(a,"color");E(v)&&v.colorStops&&(v=(v.colorStops[0]||{}).color),v=v||"transparent";var l=(1":"",n=i+u.join(i||", ");return{renderMode:c,content:n,style:p}}(r):i(n?wh(m,a,o[0]):s?r[0]:r)).content,u=d.seriesIndex+"at"+g,y=Zl({color:v,type:"item",renderMode:c,markerId:u});p[u]=v,++g;var x=m.getName(a),_=this.name;Ta(this)||(_=""),_=_?Vl(_)+(h?": ":e):"";var w="string"==typeof y?y:y.content;return{html:h?w+_+l:_+w+(x?Vl(x)+": "+l:l),markers:p}},isAnimationEnabled:function(){if(v.node)return!1;var t=this.getShallow("animation");return t&&this.getData().count()>this.getShallow("animationThreshold")&&(t=!1),t},restoreData:function(){this.dataTask.dirty()},getColorFromPalette:function(t,e,i){var n=this.ecModel,a=gu.getColorFromPalette.call(this,t,e,i);return a=a||n.getColorFromPalette(t,e,i)},coordDimToDataDim:function(t){return this.getRawData().mapDimension(t,!0)},getProgressive:function(){return this.get("progressive")},getProgressiveThreshold:function(){return this.get("progressiveThreshold")},getAxisTooltipData:null,getTooltipPosition:null,pipeTask:null,preventIncremental:null,pipelineContext:null});function Gh(t){var e=t.name;Ta(t)||(t.name=function(t){var i=t.getRawData(),e=i.mapDimension("seriesName",!0),n=[];return L(e,function(t){var e=i.getDimensionInfo(t);e.displayName&&n.push(e.displayName)}),n.join(" ")}(t)||e)}function Fh(t){return t.model.getRawData().count()}function Wh(t){var e=t.model;return e.setData(e.getRawData().cloneShallow()),Hh}function Hh(t,e){t.end>e.outputData.count()&&e.model.getRawData().cloneShallow(e.outputData)}function Zh(e,i){L(e.CHANGABLE_METHODS,function(t){e.wrapMethod(t,A(Uh,i))})}function Uh(t){var e=Xh(t);e&&e.setOutputEnd(this.count())}function Xh(t){var e=(t.ecModel||{}).scheduler,i=e&&e.getPipeline(t.uid);if(i){var n=i.currentTask;if(n){var a=n.agentStubMap;a&&(n=a.get(t.uid))}return n}}b(Vh,Mh),b(Vh,gu);var Yh=function(){this.group=new Si,this.uid=fl("viewComponent")};Yh.prototype={constructor:Yh,init:function(t,e){},render:function(t,e,i,n){},dispose:function(){},filterForExposedEvent:null};var jh=Yh.prototype;jh.updateView=jh.updateLayout=jh.updateVisual=function(t,e,i,n){},Ga(Yh),Ua(Yh,{registerWhenExtend:!0});function qh(){var s=La();return function(t){var e=s(t),i=t.pipelineContext,n=e.large,a=e.progressiveRender,o=e.large=i.large,r=e.progressiveRender=i.progressiveRender;return!!(n^o||a^r)&&"reset"}}var Kh=La(),$h=qh();function Jh(){this.group=new Si,this.uid=fl("viewChart"),this.renderTask=Ih({plan:ic,reset:nc}),this.renderTask.context={view:this}}var Qh=Jh.prototype={type:"chart",init:function(t,e){},render:function(t,e,i,n){},highlight:function(t,e,i,n){ec(t.getData(),n,"emphasis")},downplay:function(t,e,i,n){ec(t.getData(),n,"normal")},remove:function(t,e){this.group.removeAll()},dispose:function(){},incrementalPrepareRender:null,incrementalRender:null,updateTransform:null,filterForExposedEvent:null};function tc(t,e,i){if(t&&(t.trigger(e,i),t.isGroup&&!Ns(t)))for(var n=0,a=t.childCount();nc?i+=p(g("data.partialData"),{displayCnt:c}):i+=g("data.allData");for(var r=[],s=0;si.blockIndex?i.step:null,o=n&&n.modDataCount;return{step:a,modBy:null!=o?Math.ceil(o/a):null,modDataCount:o}}},mc.getPipeline=function(t){return this._pipelineMap.get(t)},mc.updateStreamModes=function(t,e){var i=this._pipelineMap.get(t.uid),n=t.getData().count(),a=i.progressiveEnabled&&e.incrementalPrepareRender&&n>=i.threshold,o=t.get("large")&&n>=t.get("largeThreshold"),r="mod"===t.get("progressiveChunkMode")?n:null;t.pipelineContext=i.context={progressiveRender:a,modDataCount:r,large:o}},mc.restorePipelines=function(t){var n=this,a=n._pipelineMap=Q();t.eachSeries(function(t){var e=t.getProgressive(),i=t.uid;a.set(i,{id:i,head:null,tail:null,threshold:t.getProgressiveThreshold(),progressiveEnabled:e&&!(t.preventIncremental&&t.preventIncremental()),blockIndex:-1,step:Math.round(e||700),count:0}),Dc(n,t,t.dataTask)})},mc.prepareStageTasks=function(){var i=this._stageTaskMap,n=this.ecInstance.getModel(),a=this.api;L(this._allHandlers,function(t){var e=i.get(t.uid)||i.set(t.uid,[]);t.reset&&function(n,a,t,o,r){var s=t.seriesTaskMap||(t.seriesTaskMap=Q()),e=a.seriesType,i=a.getTargetSeries;a.createOnAllSeries?o.eachRawSeries(l):e?o.eachRawSeriesByType(e,l):i&&i(o,r).each(l);function l(t){var e=t.uid,i=s.get(e)||s.set(e,Ih({plan:Sc,reset:Mc,count:Tc}));i.context={model:t,ecModel:o,api:r,useClearVisual:a.isVisual&&!a.isLayout,plan:a.plan,reset:a.reset,scheduler:n},Dc(n,t,i)}var u=n._pipelineMap;s.each(function(t,e){u.get(e)||(t.dispose(),s.removeKey(e))})}(this,t,e,n,a),t.overallReset&&function(n,t,e,i,a){var o=e.overallTask=e.overallTask||Ih({reset:xc});o.context={ecModel:i,api:a,overallReset:t.overallReset,scheduler:n};var r=o.agentStubMap=o.agentStubMap||Q(),s=t.seriesType,l=t.getTargetSeries,u=!0,h=t.modifyOutputEnd;s?i.eachRawSeriesByType(s,c):l?l(i,a).each(c):(u=!1,L(i.getSeries(),c));function c(t){var e=t.uid,i=r.get(e);i||(i=r.set(e,Ih({reset:_c,onDirty:bc})),o.dirty()),i.context={model:t,overallProgress:u,modifyOutputEnd:h},i.agent=o,i.__block=u,Dc(n,t,i)}var d=n._pipelineMap;r.each(function(t,e){d.get(e)||(t.dispose(),o.dirty(),r.removeKey(e))})}(this,t,e,n,a)},this)},mc.prepareView=function(t,e,i,n){var a=t.renderTask,o=a.context;o.model=e,o.ecModel=i,o.api=n,a.__block=!t.incrementalPrepareRender,Dc(this,e,a)},mc.performDataProcessorTasks=function(t,e){vc(this,this._dataProcessorHandlers,t,e,{block:!0})},mc.performVisualTasks=function(t,e,i){vc(this,this._visualHandlers,t,e,i)},mc.performSeriesTasks=function(t){var e;t.eachSeries(function(t){e|=t.dataTask.perform()}),this.unfinished|=e},mc.plan=function(){this._pipelineMap.each(function(t){var e=t.tail;do{if(e.__block){t.blockIndex=e.__idxInPipeline;break}e=e.getUpstream()}while(e)})};var yc=mc.updatePayload=function(t,e){"remain"!==e&&(t.context.payload=e)};function xc(t){t.overallReset(t.ecModel,t.api,t.payload)}function _c(t,e){return t.overallProgress&&wc}function wc(){this.agent.dirty(),this.getDownstream().dirty()}function bc(){this.agent&&this.agent.dirty()}function Sc(t){return t.plan&&t.plan(t.model,t.ecModel,t.api,t.payload)}function Mc(t){t.useClearVisual&&t.data.clearAllVisual();var e=t.resetDefines=wa(t.reset(t.model,t.ecModel,t.api,t.payload));return 1t.get("hoverLayerThreshold")&&!v.node&&t.eachSeries(function(t){if(!t.preventUsingHoverLayer){var e=i._chartsMap[t.__viewId];e.__alive&&e.group.traverse(function(t){t.useHoverLayer=!0})}})}(n,t),fc(n._zr.dom,t)}function Dd(e,i){ad(Rd,function(t){t(e,i)})}gd.resize=function(t){this._zr.resize(t);var e=this._model;if(this._loadingFX&&this._loadingFX.resize(),e){var i=e.resetOption("media"),n=t&&t.silent;this[ud]=!0,i&&yd(this),vd.update.call(this),this[ud]=!1,bd.call(this,n),Sd.call(this,n)}},gd.showLoading=function(t,e){if(rd(t)&&(e=t,t=""),t=t||"default",this.hideLoading(),Vd[t]){var i=Vd[t](this._api,e),n=this._zr;this._loadingFX=i,n.add(i)}},gd.hideLoading=function(){this._loadingFX&&this._zr.remove(this._loadingFX),this._loadingFX=null},gd.makeActionFromEvent=function(t){var e=C({},t);return e.type=Nd[t.type],e},gd.dispatchAction=function(t,e){rd(e)||(e={silent:!!e}),Pd[t.type]&&this._model&&(this[ud]?this._pendingActions.push(t):(wd.call(this,t,e.silent),e.flush?this._zr.flush(!0):!1!==e.flush&&v.browser.weChat&&this._throttledZrFlush(),bd.call(this,e.silent),Sd.call(this,e.silent)))},gd.appendData=function(t){var e=t.seriesIndex;this.getModel().getSeriesByIndex(e).appendData(t),this._scheduler.unfinished=!0},gd.on=dd("on"),gd.off=dd("off"),gd.one=dd("one");var Cd=["click","dblclick","mouseover","mouseout","mousemove","mousedown","mouseup","globalout","contextmenu"];function Ld(t,e){var i=t.get("z"),n=t.get("zlevel");e.group.traverse(function(t){"group"!==t.type&&(null!=i&&(t.z=i),null!=n&&(t.zlevel=n))})}function kd(){this.eventInfo}gd._initEvents=function(){ad(Cd,function(u){function t(t){var e,i=this.getModel(),n=t.target;if("globalout"===u)e={};else if(n&&null!=n.dataIndex){var a=n.dataModel||i.getSeriesByIndex(n.seriesIndex);e=a&&a.getDataParams(n.dataIndex,n.dataType,n)||{}}else n&&n.eventData&&(e=C({},n.eventData));if(e){var o=e.componentType,r=e.componentIndex;"markLine"!==o&&"markPoint"!==o&&"markArea"!==o||(o="series",r=e.seriesIndex);var s=o&&null!=r&&i.getComponent(o,r),l=s&&this["series"===s.mainType?"_chartsMap":"_componentsMap"][s.__viewId];e.event=t,e.type=u,this._ecEventProcessor.eventInfo={targetEl:n,packedEvent:e,model:s,view:l},this.trigger(u,e)}}t.zrEventfulCallAtLast=!0,this._zr.on(u,t,this)},this),ad(Nd,function(t,e){this._messageCenter.on(e,function(t){this.trigger(e,t)},this)},this)},gd.isDisposed=function(){return this._disposed},gd.clear=function(){this.setOption({series:[]},!0)},gd.dispose=function(){if(!this._disposed){this._disposed=!0,Oa(this.getDom(),Zd,"");var e=this._api,i=this._model;ad(this._componentsViews,function(t){t.dispose(i,e)}),ad(this._chartsViews,function(t){t.dispose(i,e)}),this._zr.dispose(),delete Gd[this.id]}},b(pd,Ct),kd.prototype={constructor:kd,normalizeQuery:function(t){var s={},l={},u={};if(R(t)){var e=sd(t);s.mainType=e.main||null,s.subType=e.sub||null}else{var h=["Index","Name","Id"],c={name:1,dataIndex:1,dataType:1};L(t,function(t,e){for(var i=!1,n=0;nx[1]&&(x[1]=y)}e&&(this._nameList[d]=e[f])}this._rawCount=this._count=l,this._extent={},Tf(this)},If._initDataFromProvider=function(t,e){if(!(e<=t)){for(var i,n=this._chunkSize,a=this._rawData,o=this._storage,r=this.dimensions,s=r.length,l=this._dimensionInfos,u=this._nameList,h=this._idList,c=this._rawExtent,d=this._nameRepeatCount={},f=this._chunkCount,p=0;pM[1]&&(M[1]=S)}if(!a.pure){var I=u[v];if(m&&null==I)if(null!=m.name)u[v]=I=m.name;else if(null!=i){var A=r[i],T=o[A][y];if(T){I=T[x];var D=l[A].ordinalMeta;D&&D.categories.length&&(I=D.categories[I])}}var C=null==m?null:m.id;null==C&&null!=I&&(d[I]=d[I]||0,0=this._rawCount||t<0)return-1;var e=this._indices,i=e[t];if(null!=i&&it))return o;a=o-1}}return-1},If.indicesOfNearest=function(t,e,i){var n=[];if(!this._storage[t])return n;null==i&&(i=1/0);for(var a=Number.MAX_VALUE,o=-1,r=0,s=this.count();rt[I][1])&&(M=!1)}M&&(o[r++]=this.getRawIndex(m))}return rw[1]&&(w[1]=_)}}}return a},If.downSample=function(t,e,i,n){for(var a=Nf(this,[t]),o=a._storage,r=[],s=Math.floor(1/e),l=o[t],u=this.count(),h=this._chunkSize,c=a._rawExtent[t],d=new(_f(this))(u),f=0,p=0;pc[1]&&(c[1]=x),d[f++]=_}return a._count=f,a._indices=d,a.getRawIndex=Lf,a},If.getItemModel=function(t){var e=this.hostModel;return new ul(this.getRawDataItem(t),e,e&&e.ecModel)},If.diff=function(e){var i=this;return new uf(e?e.getIndices():[],this.getIndices(),function(t){return kf(e,t)},function(t){return kf(i,t)})},If.getVisual=function(t){var e=this._visual;return e&&e[t]},If.setVisual=function(t,e){if(pf(t))for(var i in t)t.hasOwnProperty(i)&&this.setVisual(i,t[i]);else this._visual=this._visual||{},this._visual[t]=e},If.setLayout=function(t,e){if(pf(t))for(var i in t)t.hasOwnProperty(i)&&this.setLayout(i,t[i]);else this._layout[t]=e},If.getLayout=function(t){return this._layout[t]},If.getItemLayout=function(t){return this._itemLayouts[t]},If.setItemLayout=function(t,e,i){this._itemLayouts[t]=i?C(this._itemLayouts[t]||{},e):e},If.clearItemLayouts=function(){this._itemLayouts.length=0},If.getItemVisual=function(t,e,i){var n=this._itemVisuals[t],a=n&&n[e];return null!=a||i?a:this.getVisual(e)},If.setItemVisual=function(t,e,i){var n=this._itemVisuals[t]||{},a=this.hasItemVisual;if(this._itemVisuals[t]=n,pf(e))for(var o in e)e.hasOwnProperty(o)&&(n[o]=e[o],a[o]=!0);else n[e]=i,a[e]=!0},If.clearAllVisual=function(){this._visual={},this._itemVisuals=[],this.hasItemVisual={}};function Rf(t){t.seriesIndex=this.seriesIndex,t.dataIndex=this.dataIndex,t.dataType=this.dataType}function Ef(t,e,i){Tu.isInstance(e)||(e=Tu.seriesDataToSource(e)),i=i||{},t=(t||[]).slice();for(var n=(i.dimsDef||[]).slice(),l=Q(i.encodeDef),a=Q(),o=Q(),u=[],r=function(t,e,i,n){var a=Math.max(t.dimensionsDetectCount||1,e.length,i.length,n||0);return L(e,function(t){var e=t.dimsDef;e&&(a=Math.max(a,e.length))}),a}(e,t,n,i.dimCount),s=0;s=e[0]&&t<=e[1]},Zf.prototype.normalize=function(t){var e=this._extent;return e[1]===e[0]?.5:(t-e[0])/(e[1]-e[0])},Zf.prototype.scale=function(t){var e=this._extent;return t*(e[1]-e[0])+e[0]},Zf.prototype.unionExtent=function(t){var e=this._extent;t[0]e[1]&&(e[1]=t[1])},Zf.prototype.unionExtentFromData=function(t,e){this.unionExtent(t.getApproximateExtent(e))},Zf.prototype.getExtent=function(){return this._extent.slice()},Zf.prototype.setExtent=function(t,e){var i=this._extent;isNaN(t)||(i[0]=t),isNaN(e)||(i[1]=e)},Zf.prototype.isBlank=function(){return this._isBlank},Zf.prototype.setBlank=function(t){this._isBlank=t},Zf.prototype.getLabel=null,Ga(Zf),Ua(Zf,{registerWhenExtend:!0}),Uf.createByAxisModel=function(t){var e=t.option,i=e.data,n=i&&k(i,jf);return new Uf({categories:n,needCollect:!n,deduplication:!1!==e.dedplication})};var Xf=Uf.prototype;function Yf(t){return t._map||(t._map=Q(t.categories))}function jf(t){return E(t)&&null!=t.value?t.value:t+""}Xf.getOrdinal=function(t){return Yf(this).get(t)},Xf.parseAndCollect=function(t){var e,i=this._needCollect;if("string"!=typeof t&&!i)return t;if(i&&!this._deduplication)return e=this.categories.length,this.categories[e]=t,e;var n=Yf(this);return null==(e=n.get(t))&&(i?(e=this.categories.length,this.categories[e]=t,n.set(t,e)):e=NaN),e};var qf=Zf.prototype,Kf=Zf.extend({type:"ordinal",init:function(t,e){t&&!O(t)||(t=new Uf({categories:t})),this._ordinalMeta=t,this._extent=e||[0,t.categories.length-1]},parse:function(t){return"string"==typeof t?this._ordinalMeta.getOrdinal(t):Math.round(t)},contain:function(t){return t=this.parse(t),qf.contain.call(this,t)&&null!=this._ordinalMeta.categories[t]},normalize:function(t){return qf.normalize.call(this,this.parse(t))},scale:function(t){return Math.round(qf.scale.call(this,t))},getTicks:function(){for(var t=[],e=this._extent,i=e[0];i<=e[1];)t.push(i),i++;return t},getLabel:function(t){if(!this.isBlank())return this._ordinalMeta.categories[t]},count:function(){return this._extent[1]-this._extent[0]+1},unionExtentFromData:function(t,e){this.unionExtent(t.getApproximateExtent(e))},getOrdinalMeta:function(){return this._ordinalMeta},niceTicks:et,niceExtent:et});Kf.create=function(){return new Kf};var $f=vl;function Jf(t){return _l(t)+2}function Qf(t,e,i){t[e]=Math.max(Math.min(t[e],i[1]),i[0])}function tp(t,e){isFinite(t[0])||(t[0]=e[0]),isFinite(t[1])||(t[1]=e[1]),Qf(t,0,e),Qf(t,1,e),t[0]>t[1]&&(t[0]=t[1])}var ep=vl,ip=Zf.extend({type:"interval",_interval:0,_intervalPrecision:2,setExtent:function(t,e){var i=this._extent;isNaN(t)||(i[0]=parseFloat(t)),isNaN(e)||(i[1]=parseFloat(e))},unionExtent:function(t){var e=this._extent;t[0]e[1]&&(e[1]=t[1]),ip.prototype.setExtent.call(this,e[0],e[1])},getInterval:function(){return this._interval},setInterval:function(t){this._interval=t,this._niceExtent=this._extent.slice(),this._intervalPrecision=Jf(t)},getTicks:function(){return function(t,e,i,n){var a=[];if(!t)return a;e[0](a.length?a[a.length-1]:i[1])&&a.push(e[1]),a}(this._interval,this._extent,this._niceExtent,this._intervalPrecision)},getLabel:function(t,e){if(null==t)return"";var i=e&&e.precision;return null==i?i=_l(t)||0:"auto"===i&&(i=this._intervalPrecision),Ol(t=ep(t,i,!0))},niceTicks:function(t,e,i){t=t||5;var n=this._extent,a=n[1]-n[0];if(isFinite(a)){a<0&&(a=-a,n.reverse());var o=function(t,e,i,n){var a={},o=t[1]-t[0],r=a.interval=Ll(o/e,!0);null!=i&&ra[1]?(i=a[1],a[0]):(i=a[0],a[1]);var o=e.toGlobalCoord(e.dataToCoord(0));return o>>1;t[a][1]>1^-(1&s),l=l>>1^-(1&l),a=s+=a,o=l+=o,n.push([s/i,l/i])}return n}eg.prototype={constructor:eg,properties:null,getBoundingRect:function(){var t=this._rect;if(t)return t;for(var e=Number.MAX_VALUE,i=[e,e],n=[-e,-e],a=[],o=[],r=this.geometries,s=0;ss[1];h(e[0].coord,s[0])&&(a?e[0].coord=s[0]:e.shift());a&&h(s[0],e[0].coord)&&e.unshift({coord:s[0]});h(s[1],r.coord)&&(a?r.coord=s[1]:e.pop());a&&h(r.coord,s[1])&&e.push({coord:s[1]});function h(t,e){return u?en[0]&&(n[0]=o[0]),o[1]>n[1]&&(n[1]=o[1])}return{min:e?i:n,max:e?n:i}}var Yg=hr.extend({type:"ec-polyline",shape:{points:[],smooth:0,smoothConstraint:!0,smoothMonotone:null,connectNulls:!1},style:{fill:null,stroke:"#000"},brush:Cr(hr.prototype.brush),buildPath:function(t,e){var i=e.points,n=0,a=i.length,o=Xg(i,e.smoothConstraint);if(e.connectNulls){for(;0e[0]?1:-1;e[0]+=n*i,e[1]-=n*i}return e}function Jg(t,e,i,n){return"polar"===t.type?function(t,e,i,n){var a=t.getAngleAxis(),o=t.getRadiusAxis().getExtent().slice();o[0]>o[1]&&o.reverse();var r=a.getExtent(),s=Math.PI/180;i&&(o[0]-=.5,o[1]+=.5);var l=new Pr({shape:{cx:vl(t.cx,1),cy:vl(t.cy,1),r0:vl(o[0],1),r:vl(o[1],1),startAngle:-r[0]*s,endAngle:-r[1]*s,clockwise:a.inverse}});return e&&(l.shape.endAngle=-r[0]*s,Xs(l,{shape:{endAngle:-r[1]*s}},n)),l}(t,e,i,n):function(t,e,i,n){var a=$g(t.getAxis("x")),o=$g(t.getAxis("y")),r=t.getBaseAxis().isHorizontal(),s=Math.min(a[0],a[1]),l=Math.min(o[0],o[1]),u=Math.max(a[0],a[1])-s,h=Math.max(o[0],o[1])-l;if(i)s-=.5,u+=.5,l-=.5,h+=.5;else{var c=n.get("lineStyle.width")||2,d=n.get("clipOverflow")?c/2:Math.max(u,h);r?(l-=d,h+=2*d):(s-=d,u+=2*d)}var f=new Hr({shape:{x:s,y:l,width:u,height:h}});return e&&(f.shape[r?"width":"height"]=0,Xs(f,{shape:{width:u,height:h}},n)),f}(t,e,i,n)}function Qg(t,e,i){for(var n=e.getBaseAxis(),a="x"===n.dim||"radius"===n.dim?0:1,o=[],r=0;rn)return!1;return!0}(o,e))){var r=e.mapDimension(o.dim),s={};return L(o.getViewLabels(),function(t){s[t.tickValue]=1}),function(t){return!s.hasOwnProperty(e.get(r,t))}}}}Jh.extend({type:"line",init:function(){var t=new Si,e=new Lg;this.group.add(e.group),this._symbolDraw=e,this._lineGroup=t},render:function(t,e,i){var n=t.coordinateSystem,a=this.group,o=t.getData(),r=t.getModel("lineStyle"),s=t.getModel("areaStyle"),l=o.mapArray(o.getItemLayout),u="polar"===n.type,h=this._coordSys,c=this._symbolDraw,d=this._polyline,f=this._polygon,p=this._lineGroup,g=t.get("animation"),m=!s.isEmpty(),v=s.get("origin"),y=function(t,e,i){if(!i.valueDim)return[];for(var n=[],a=0,o=e.count();ah[c-1].coord&&(h.reverse(),d.reverse());var f=h[0].coord-10,p=h[c-1].coord+10,g=p-f;if(g<.001)return"transparent";L(h,function(t){t.offset=(t.coord-f)/g}),h.push({offset:c?h[c-1].offset:.5,color:d[1]||"transparent"}),h.unshift({offset:c?h[0].offset:.5,color:d[0]||"transparent"});var m=new Jr(0,0,0,0,h,!0);return m[n]=f,m[n+"2"]=p,m}}}(o,n)||o.getVisual("color");d.useStyle(T(r.getLineStyle(),{fill:"none",stroke:S,lineJoin:"bevel"}));var M=t.get("smooth");if(M=Kg(t.get("smooth")),d.setShape({smooth:M,smoothMonotone:t.get("smoothMonotone"),connectNulls:t.get("connectNulls")}),f){var I=o.getCalculationInfo("stackedOnSeries"),A=0;f.useStyle(T(s.getAreaStyle(),{fill:S,opacity:.7,lineJoin:"bevel"})),I&&(A=Kg(I.get("smooth"))),f.setShape({smooth:M,stackedOnSmooth:A,smoothMonotone:t.get("smoothMonotone"),connectNulls:t.get("connectNulls")})}this._data=o,this._coordSys=n,this._stackedOnPoints=y,this._points=l,this._step=b,this._valueOrigin=v},dispose:function(){},highlight:function(t,e,i,n){var a=t.getData(),o=Ca(a,n);if(!(o instanceof Array)&&null!=o&&0<=o){var r=a.getItemGraphicEl(o);if(!r){var s=a.getItemLayout(o);if(!s)return;(r=new _g(a,o)).position=s,r.setZ(t.get("zlevel"),t.get("z")),r.ignore=isNaN(s[0])||isNaN(s[1]),r.__temp=!0,a.setItemGraphicEl(o,r),r.stopSymbolAnimation(!0),this.group.add(r)}r.highlight()}else Jh.prototype.highlight.call(this,t,e,i,n)},downplay:function(t,e,i,n){var a=t.getData(),o=Ca(a,n);if(null!=o&&0<=o){var r=a.getItemGraphicEl(o);r&&(r.__temp?(a.setItemGraphicEl(o,null),this.group.remove(r)):r.downplay())}else Jh.prototype.downplay.call(this,t,e,i,n)},_newPolyline:function(t){var e=this._polyline;return e&&this._lineGroup.remove(e),e=new Yg({shape:{points:t},silent:!0,z2:10}),this._lineGroup.add(e),this._polyline=e},_newPolygon:function(t,e){var i=this._polygon;return i&&this._lineGroup.remove(i),i=new jg({shape:{points:t,stackedOnPoints:e},silent:!0}),this._lineGroup.add(i),this._polygon=i},_updateAnimation:function(t,e,i,n,a,o){var r=this._polyline,s=this._polygon,l=t.hostModel,u=function(t,e,i,n,a,o,r,s){for(var l=function(t,e){var i=[];return e.diff(t).add(function(t){i.push({cmd:"+",idx:t})}).update(function(t,e){i.push({cmd:"=",idx:e,idx1:t})}).remove(function(t){i.push({cmd:"-",idx:t})}).execute(),i}(t,e),u=[],h=[],c=[],d=[],f=[],p=[],g=[],m=zg(a,e,r),v=zg(o,t,s),y=0;ye&&(e=t[i]);return isFinite(e)?e:NaN},min:function(t){for(var e=1/0,i=0;ie[1]&&e.reverse(),e},getOtherAxis:function(){this.grid.getOtherAxis()},pointToData:function(t,e){return this.coordToData(this.toLocalCoord(t["x"===this.dim?0:1]),e)},toLocalCoord:null,toGlobalCoord:null},w(lm,pg);var um={show:!0,zlevel:0,z:0,inverse:!1,name:"",nameLocation:"end",nameRotate:null,nameTruncate:{maxWidth:null,ellipsis:"...",placeholder:"."},nameTextStyle:{},nameGap:15,silent:!1,triggerEvent:!1,tooltip:{show:!1},axisPointer:{},axisLine:{show:!0,onZero:!0,onZeroAxisIndex:null,lineStyle:{color:"#333",width:1,type:"solid"},symbol:["none","none"],symbolSize:[10,15]},axisTick:{show:!0,inside:!1,length:5,lineStyle:{width:1}},axisLabel:{show:!0,inside:!1,rotate:0,showMinLabel:null,showMaxLabel:null,margin:8,fontSize:12},splitLine:{show:!0,lineStyle:{color:["#ccc"],width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:["rgba(250,250,250,0.3)","rgba(200,200,200,0.3)"]}}},hm={};hm.categoryAxis=m({boundaryGap:!0,deduplication:null,splitLine:{show:!1},axisTick:{alignWithLabel:!1,interval:"auto"},axisLabel:{interval:"auto"}},um),hm.valueAxis=m({boundaryGap:[0,0],splitNumber:5},um),hm.timeAxis=T({scale:!0,min:"dataMin",max:"dataMax"},hm.valueAxis),hm.logAxis=T({scale:!0,logBase:10},hm.valueAxis);function cm(o,t,r,e){L(dm,function(a){t.extend({type:o+"Axis."+a,mergeDefaultAndTheme:function(t,e){var i=this.layoutMode,n=i?au(t):{};m(t,e.getTheme().get(a+"Axis")),m(t,this.getDefaultOption()),t.type=r(o,t),i&&nu(t,n,i)},optionUpdated:function(){"category"===this.option.type&&(this.__ordinalMeta=Uf.createByAxisModel(this))},getCategories:function(t){var e=this.option;if("category"===e.type)return t?e.data:this.__ordinalMeta.categories},getOrdinalMeta:function(){return this.__ordinalMeta},defaultOption:p([{},hm[a+"Axis"],e],!0)})}),hu.registerSubTypeDefaulter(o+"Axis",A(r,o))}var dm=["value","category","time","log"],fm=hu.extend({type:"cartesian2dAxis",axis:null,init:function(){fm.superApply(this,"init",arguments),this.resetRange()},mergeOption:function(){fm.superApply(this,"mergeOption",arguments),this.resetRange()},restoreData:function(){fm.superApply(this,"restoreData",arguments),this.resetRange()},getCoordSysModel:function(){return this.ecModel.queryComponents({mainType:"grid",index:this.option.gridIndex,id:this.option.gridId})[0]}});function pm(t,e){return e.type||(e.data?"category":"value")}m(fm.prototype,Gp);var gm={offset:0};function mm(t,e){return t.getCoordSysModel()===e}function vm(t,e,i){this._coordsMap={},this._coordsList=[],this._axesMap={},this._axesList=[],this._initCartesian(t,e,i),this.model=t}cm("x",fm,pm,gm),cm("y",fm,pm,gm),hu.extend({type:"grid",dependencies:["xAxis","yAxis"],layoutMode:"box",coordinateSystem:null,defaultOption:{show:!1,zlevel:0,z:0,left:"10%",top:60,right:"10%",bottom:60,containLabel:!1,backgroundColor:"rgba(0,0,0,0)",borderWidth:1,borderColor:"#ccc"}});var ym=vm.prototype;function xm(t,e,i,n){i.getAxesOnZeroOf=function(){return a?[a]:[]};var a,o=t[e],r=i.model,s=r.get("axisLine.onZero"),l=r.get("axisLine.onZeroAxisIndex");if(s){if(null!=l)_m(o[l])&&(a=o[l]);else for(var u in o)if(o.hasOwnProperty(u)&&_m(o[u])&&!n[h(o[u])]){a=o[u];break}a&&(n[h(a)]=!0)}function h(t){return t.dim+"_"+t.index}}function _m(t){return t&&"category"!==t.type&&"time"!==t.type&&function(t){var e=t.scale.getExtent(),i=e[0],n=e[1];return!(0u[1]?-1:1,c=["start"===o?u[0]-h*l:"end"===o?u[1]+h*l:(u[0]+u[1])/2,Pm(o)?t.labelOffset+r*l:0],d=e.get("nameRotate");null!=d&&(d=d*Im/180),Pm(o)?n=Dm(t.rotation,null!=d?d:t.rotation,r):(n=function(t,e,i,n){var a,o,r=Ml(i-t.rotation),s=n[0]>n[1],l="start"===e&&!s||"start"!==e&&s;a=Il(r-Im/2)?(o=l?"bottom":"top","center"):Il(r-1.5*Im)?(o=l?"top":"bottom","center"):(o="middle",r<1.5*Im&&Im/2l[1]&&l.reverse(),(null==r||r>l[1])&&(r=l[1]),r=i.r0}}});var vv=Math.PI/180;function yv(a,t,e,i,n,o,r){function s(t,e,i){for(var n=t;na[n].y+a[n].height)return void l(n,i/2);l(e-1,i/2)}function l(t,e){for(var i=t;0<=i&&(a[i].y-=e,!(0a[i-1].y+a[i-1].height));i--);}function u(t,e,i,n,a,o){for(var r=e?Number.MAX_VALUE:0,s=0,l=t.length;s=e?p.push(a[g]):f.push(a[g]);u(f,!1,t,e,i,n),u(p,!0,t,e,i,n)}function xv(t){return"center"===t.position}function _v(I,A,t,e,i){var T,D,C=I.getData(),L=[],k=!1,P=(I.get("minShowLabelAngle")||0)*vv;C.each(function(t){var e=C.getItemLayout(t),i=C.getItemModel(t),n=i.getModel("label"),a=n.get("position")||i.get("emphasis.label.position"),o=i.getModel("labelLine"),r=o.get("length"),s=o.get("length2");if(!(e.anglei[0]&&isFinite(u)&&isFinite(i[0]););else{var h=a.getTicks().length-1;f"+k(t,function(t,e){var i=a.get(a.mapDimension(t.dim),n);return Vl(t.name+" : "+i)}).join("
")},defaultOption:{zlevel:0,z:2,coordinateSystem:"radar",legendHoverLink:!0,radarIndex:0,lineStyle:{width:2,type:"solid"},label:{position:"top"},symbol:"emptyCircle",symbolSize:4}});sf({type:"radar",render:function(l,t,e){var i=l.coordinateSystem,g=this.group,m=l.getData(),s=this._data;function u(t,e){var i=t.getItemVisual(e,"symbol")||"circle",n=t.getItemVisual(e,"color");if("none"!==i){var a=function(t){return O(t)||(t=[+t,+t]),t}(t.getItemVisual(e,"symbolSize")),o=qp(i,-1,-1,2,2,n);return o.attr({style:{strokeNoScale:!0},z2:100,scale:[a[0]/2,a[1]/2]}),o}}function h(t,e,i,n,a,o){i.removeAll();for(var r=0;r"+Vl(n+" : "+i)},getTooltipPosition:function(t){if(null!=t){var e=this.getData().getName(t),i=this.coordinateSystem,n=i.getRegion(e);return n&&i.dataToPoint(n.center)}},setZoom:function(t){this.option.zoom=t},setCenter:function(t){this.option.center=t},defaultOption:{zlevel:0,z:2,coordinateSystem:"geo",map:"",left:"center",top:"center",aspectScale:.75,showLegendSymbol:!0,dataRangeHoverLink:!0,boundingCoords:null,center:null,zoom:1,scaleLimit:null,label:{show:!1,color:"#000"},itemStyle:{borderWidth:.5,borderColor:"#444",areaColor:"#eee"},emphasis:{label:{show:!0,color:"rgb(100,0,0)"},itemStyle:{areaColor:"rgba(255,215,0,0.8)"}}}}),uv);var Kv="\0_ec_interaction_mutex";function $v(t,e){return!!Jv(t)[e]}function Jv(t){return t[Kv]||(t[Kv]={})}function Qv(i){this.pointerChecker,this._zr=i,this._opt={};var t=N,n=t(ty,this),a=t(ey,this),o=t(iy,this),r=t(ny,this),s=t(ay,this);Ct.call(this),this.setPointerChecker=function(t){this.pointerChecker=t},this.enable=function(t,e){this.disable(),this._opt=T(D(e)||{},{zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!1,preventDefaultMouseMove:!0}),null==t&&(t=!0),!0!==t&&"move"!==t&&"pan"!==t||(i.on("mousedown",n),i.on("mousemove",a),i.on("mouseup",o)),!0!==t&&"scale"!==t&&"zoom"!==t||(i.on("mousewheel",r),i.on("pinch",s))},this.disable=function(){i.off("mousedown",n),i.off("mousemove",a),i.off("mouseup",o),i.off("mousewheel",r),i.off("pinch",s)},this.dispose=this.disable,this.isDragging=function(){return this._dragging},this.isPinching=function(){return this._pinching}}function ty(t){if(!(Wt(t)||t.target&&t.target.draggable)){var e=t.offsetX,i=t.offsetY;this.pointerChecker&&this.pointerChecker(t,e,i)&&(this._x=e,this._y=i,this._dragging=!0)}}function ey(t){if(this._dragging&&sy("moveOnMouseMove",t,this._opt)&&"pinch"!==t.gestureEvent&&!$v(this._zr,"globalPan")){var e=t.offsetX,i=t.offsetY,n=this._x,a=this._y,o=e-n,r=i-a;this._x=e,this._y=i,this._opt.preventDefaultMouseMove&&Ft(t.event),ry(this,"pan","moveOnMouseMove",t,{dx:o,dy:r,oldX:n,oldY:a,newX:e,newY:i})}}function iy(t){Wt(t)||(this._dragging=!1)}function ny(t){var e=sy("zoomOnMouseWheel",t,this._opt),i=sy("moveOnMouseWheel",t,this._opt),n=t.wheelDelta,a=Math.abs(n),o=t.offsetX,r=t.offsetY;if(0!==n&&(e||i)){if(e){var s=3x.x)||(m-=Math.PI);var b=v?"left":"right";g.setStyle({textPosition:b,textRotation:-m,textOrigin:"center",verticalAlign:"middle"})}if(s.parentNode&&s.parentNode!==u){var S=i.__edge;Us(S=S||(i.__edge=new qr({shape:tx(o,f,f),style:T({opacity:0,strokeNoScale:!0},o.lineStyle)})),{shape:tx(o,d,p),style:{opacity:1}},a),n.add(S)}}function Qy(t,e,i,n,a,o){for(var r,s=t.tree.getNodeByDataIndex(e),l=t.tree.root,u=s.getModel(),h=(o=$y(s,u,o),s.parentNode===l?s:s.parentNode||s);null==(r=h.getLayout());)h=h.parentNode===l?h:h.parentNode||h;Us(i,{position:[r.x+1,r.y+1]},a,function(){n.remove(i),t.setItemGraphicEl(e,null)}),i.fadeOut(null,{keepLabel:!0});var c=i.__edge;c&&Us(c,{shape:tx(o,r,r),style:{opacity:0}},a,function(){n.remove(c)})}function tx(t,e,i){var n,a,o,r,s,l,u,h,c=t.orient;if("radial"!==t.layout)return s=e.x,u=e.y,l=i.x,h=i.y,"LR"!==c&&"RL"!==c||(n=s+(l-s)*t.curvature,a=u,o=l+(s-l)*t.curvature,r=h),"TB"!==c&&"BT"!==c||(n=s,a=u+(h-u)*t.curvature,o=l,r=h+(u-h)*t.curvature),{x1:s,y1:u,x2:l,y2:h,cpx1:n,cpy1:a,cpx2:o,cpy2:r};s=e.rawX,u=e.rawY,l=i.rawX,h=i.rawY;var d=Uy(s,u),f=Uy(s,u+(h-u)*t.curvature),p=Uy(l,h+(u-h)*t.curvature),g=Uy(l,h);return{x1:d.x,y1:d.y,x2:g.x,y2:g.y,cpx1:f.x,cpy1:f.y,cpx2:p.x,cpy2:p.y}}function ex(t,e){for(var i,n=[t];i=n.pop();)if(e(i),i.isExpand){var a=i.children;if(a.length)for(var o=a.length-1;0<=o;o--)n.push(a[o])}}Vy.prototype={constructor:Vy,isRemoved:function(){return this.dataIndex<0},eachNode:function(t,e,i){"function"==typeof t&&(i=e,e=t,t=null),R(t=t||{})&&(t={order:t});var n,a=t.order||"preorder",o=this[t.attr||"children"];"preorder"===a&&(n=e.call(i,this));for(var r=0;!n&&re&&(e=n.height)}this.height=e+1},getNodeById:function(t){if(this.getId()===t)return this;for(var e=0,i=this.children,n=i.length;eo&&(o=t.depth)});var r=t.expandAndCollapse&&0<=t.initialTreeDepth?t.initialTreeDepth:o;return a.root.eachNode("preorder",function(t){var e=t.hostTree.data.getRawDataItem(t.dataIndex);t.isExpand=e&&null!=e.collapsed?!e.collapsed:t.depth<=r}),a.data},getOrient:function(){var t=this.get("orient");return"horizontal"===t?t="LR":"vertical"===t&&(t="TB"),t},setZoom:function(t){this.option.zoom=t},setCenter:function(t){this.option.center=t},formatTooltip:function(t){for(var e=this.getData().tree,i=e.root.children[0],n=e.getNodeByDataIndex(t),a=n.getValue(),o=n.name;n&&n!==i;)o=n.parentNode.name+"."+o,n=n.parentNode;return Vl(o+(isNaN(a)||null==a?"":" : "+a))},defaultOption:{zlevel:0,z:2,coordinateSystem:"view",left:"12%",top:"12%",right:"12%",bottom:"12%",layout:"orthogonal",roam:!1,nodeScaleRatio:.4,center:null,zoom:1,orient:"LR",symbol:"emptyCircle",symbolSize:7,expandAndCollapse:!0,initialTreeDepth:2,lineStyle:{color:"#ccc",width:1.5,curveness:.5},itemStyle:{color:"lightsteelblue",borderColor:"#c23531",borderWidth:1.5},label:{show:!0,color:"#555"},leaves:{label:{show:!0}},animationEasing:"linear",animationDuration:700,animationDurationUpdate:1e3}}),sf({type:"tree",init:function(t,e){this._oldTree,this._mainGroup=new Si,this._controller=new Qv(e.getZr()),this._controllerHost={target:this.group},this.group.add(this._mainGroup)},render:function(n,t,i,e){var a=n.getData(),o=n.layoutInfo,r=this._mainGroup,s=n.get("layout");"radial"===s?r.attr("position",[o.x+o.width/2,o.y+o.height/2]):r.attr("position",[o.x,o.y]),this._updateViewCoordSys(n),this._updateController(n,t,i);var l=this._data,u={expandAndCollapse:n.get("expandAndCollapse"),layout:s,orient:n.getOrient(),curvature:n.get("lineStyle.curveness"),symbolRotate:n.get("symbolRotate"),symbolOffset:n.get("symbolOffset"),hoverAnimation:n.get("hoverAnimation"),useNameLabel:!0,fadeIn:!0};a.diff(l).add(function(t){Ky(a,t)&&Jy(a,t,null,r,n,u)}).update(function(t,e){var i=l.getItemGraphicEl(e);Ky(a,t)?Jy(a,t,i,r,n,u):i&&Qy(l,e,i,r,n,u)}).remove(function(t){var e=l.getItemGraphicEl(t);e&&Qy(l,t,e,r,n,u)}).execute(),this._nodeScaleRatio=n.get("nodeScaleRatio"),this._updateNodeAndLinkScale(n),!0===u.expandAndCollapse&&a.eachItemGraphicEl(function(t,e){t.off("click").on("click",function(){i.dispatchAction({type:"treeExpandAndCollapse",seriesId:n.id,dataIndex:e})})}),this._data=a},_updateViewCoordSys:function(t){var i=t.getData(),n=[];i.each(function(t){var e=i.getItemLayout(t);!e||isNaN(e.x)||isNaN(e.y)||n.push([+e.x,+e.y])});var e=[],a=[];Io(n,e,a),a[0]-e[0]==0&&(a[0]+=1,e[0]-=1),a[1]-e[1]==0&&(a[1]+=1,e[1]-=1);var o=t.coordinateSystem=new by;o.zoomLimit=t.get("scaleLimit"),o.setBoundingRect(e[0],e[1],a[0]-e[0],a[1]-e[1]),o.setCenter(t.get("center")),o.setZoom(t.get("zoom")),this.group.attr({position:o.position,scale:o.scale}),this._viewCoordSys=o},_updateController:function(a,t,o){var e=this._controller,i=this._controllerHost,r=this.group;e.setPointerChecker(function(t,e,i){var n=r.getBoundingRect();return n.applyTransform(r.transform),n.contain(e,i)&&!cy(t,o,a)}),e.enable(a.get("roam")),i.zoomLimit=a.get("scaleLimit"),i.zoom=a.coordinateSystem.getZoom(),e.off("pan").off("zoom").on("pan",function(t){ly(i,t.dx,t.dy),o.dispatchAction({seriesId:a.id,type:"treeRoam",dx:t.dx,dy:t.dy})},this).on("zoom",function(t){uy(i,t.scale,t.originX,t.originY),o.dispatchAction({seriesId:a.id,type:"treeRoam",zoom:t.scale,originX:t.originX,originY:t.originY}),this._updateNodeAndLinkScale(a)},this)},_updateNodeAndLinkScale:function(t){var e=t.getData(),i=this._getNodeGlobalScale(t),n=[i,i];e.eachItemGraphicEl(function(t,e){t.attr("scale",n)})},_getNodeGlobalScale:function(t){var e=t.coordinateSystem;if("view"!==e.type)return 1;var i=this._nodeScaleRatio,n=e.scale,a=n&&n[0]||1;return((e.getZoom()-1)*i+1)/a},dispose:function(){this._controller&&this._controller.dispose(),this._controllerHost={}},remove:function(){this._mainGroup.removeAll(),this._data=null}}),$d({type:"treeExpandAndCollapse",event:"treeExpandAndCollapse",update:"update"},function(n,t){t.eachComponent({mainType:"series",subType:"tree",query:n},function(t){var e=n.dataIndex,i=t.getData().tree.getNodeByDataIndex(e);i.isExpand=!i.isExpand})}),$d({type:"treeRoam",event:"treeRoam",update:"none"},function(i,t){t.eachComponent({mainType:"series",subType:"tree",query:i},function(t){var e=xy(t.coordinateSystem,i);t.setCenter&&t.setCenter(e.center),t.setZoom&&t.setZoom(e.zoom)})});function ix(t,e,i){if(t&&0<=_(e,t.type)){var n=i.getData().tree.root,a=t.targetNode;if("string"==typeof a&&(a=n.getNodeById(a)),a&&n.contains(a))return{node:a};var o=t.targetNodeId;if(null!=o&&(a=n.getNodeById(o)))return{node:a}}}function nx(t){for(var e=[];t;)(t=t.parentNode)&&e.push(t);return e.reverse()}function ax(t,e){return 0<=_(nx(t),e)}function ox(t,e){for(var i=[];t;){var n=t.dataIndex;i.push({name:t.name,dataIndex:n,value:e.getRawValue(n)}),t=t.parentNode}return i.reverse(),i}tf(em("tree","circle")),Qd(function(t,e){t.eachSeriesByType("tree",function(t){!function(t,e){var i=function(t,e){return eu(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()})}(t,e);t.layoutInfo=i;var n=t.get("layout"),a=0,o=0,r=null;r="radial"===n?(a=2*Math.PI,o=Math.min(i.height,i.width)/2,Zy(function(t,e){return(t.parentNode===e.parentNode?1:2)/t.depth})):(a=i.width,o=i.height,Zy());var s=t.getData().tree.root,l=s.children[0];if(l){!function(t){t.hierNode={defaultAncestor:null,ancestor:t,prelim:0,modifier:0,change:0,shift:0,i:0,thread:null};for(var e,i,n=[t];e=n.pop();)if(i=e.children,e.isExpand&&i.length)for(var a=i.length-1;0<=a;a--){var o=i[a];o.hierNode={defaultAncestor:null,ancestor:o,prelim:0,modifier:0,change:0,shift:0,i:a,thread:null},n.push(o)}}(s),function(t,e,i){for(var n,a=[t],o=[];n=a.pop();)if(o.push(n),n.isExpand){var r=n.children;if(r.length)for(var s=0;sh.getLayout().x&&(h=t),t.depth>c.depth&&(c=t)});var d=u===h?1:r(u,h)/2,f=d-u.getLayout().x,p=0,g=0,m=0,v=0;if("radial"===n)p=a/(h.getLayout().x+d+f),g=o/(c.depth-1||1),ex(l,function(t){m=(t.getLayout().x+f)*p,v=(t.depth-1)*g;var e=Uy(m,v);t.setLayout({x:e.x,y:e.y,rawX:m,rawY:v},!0)});else{var y=t.getOrient();"RL"===y||"LR"===y?(g=o/(h.getLayout().x+d+f),p=a/(c.depth-1||1),ex(l,function(t){v=(t.getLayout().x+f)*g,m="LR"===y?(t.depth-1)*p:a-(t.depth-1)*p,t.setLayout({x:m,y:v},!0)})):"TB"!==y&&"BT"!==y||(p=a/(h.getLayout().x+d+f),g=o/(c.depth-1||1),ex(l,function(t){m=(t.getLayout().x+f)*p,v="TB"===y?(t.depth-1)*g:o-(t.depth-1)*g,t.setLayout({x:m,y:v},!0)}))}}}(t,e)})}),Vh.extend({type:"series.treemap",layoutMode:"box",dependencies:["grid","polar"],preventUsingHoverLayer:!0,_viewRoot:null,defaultOption:{progressive:0,left:"center",top:"middle",right:null,bottom:null,width:"80%",height:"80%",sort:!0,clipWindow:"origin",squareRatio:.5*(1+Math.sqrt(5)),leafDepth:null,drillDownIcon:"▶",zoomToNodeRatio:.1024,roam:!0,nodeClick:"zoomToNode",animation:!0,animationDurationUpdate:900,animationEasing:"quinticInOut",breadcrumb:{show:!0,height:22,left:"center",top:"bottom",emptyItemWidth:25,itemStyle:{color:"rgba(0,0,0,0.7)",borderColor:"rgba(255,255,255,0.7)",borderWidth:1,shadowColor:"rgba(150,150,150,1)",shadowBlur:3,shadowOffsetX:0,shadowOffsetY:0,textStyle:{color:"#fff"}},emphasis:{textStyle:{}}},label:{show:!0,distance:0,padding:5,position:"inside",color:"#fff",ellipsis:!0},upperLabel:{show:!1,position:[0,"50%"],height:20,color:"#fff",ellipsis:!0,verticalAlign:"middle"},itemStyle:{color:null,colorAlpha:null,colorSaturation:null,borderWidth:0,gapWidth:0,borderColor:"#fff",borderColorSaturation:null},emphasis:{upperLabel:{show:!0,position:[0,"50%"],color:"#fff",ellipsis:!0,verticalAlign:"middle"}},visualDimension:0,visualMin:null,visualMax:null,color:[],colorAlpha:null,colorSaturation:null,colorMappingBy:"index",visibleMin:10,childrenVisibleMin:null,levels:[]},getInitialData:function(t,e){var i={name:t.name,children:t.data};!function i(t){var n=0;L(t.children,function(t){i(t);var e=t.value;O(e)&&(e=e[0]),n+=e});var e=t.value;O(e)&&(e=e[0]);null!=e&&!isNaN(e)||(e=n);e<0&&(e=0);O(t.value)?t.value[0]=e:t.value=e}(i);var n=t.levels||[];n=t.levels=function(t,e){var n,i=e.get("color");if(!i)return;if(L(t=t||[],function(t){var e=new ul(t),i=e.get("color");(e.get("itemStyle.color")||i&&"none"!==i)&&(n=!0)}),!n){(t[0]||(t[0]={})).color=i.slice()}return t}(n,e);var a={};return a.levels=n,Gy.createTree(i,this,a).data},optionUpdated:function(){this.resetViewRoot()},formatTooltip:function(t){var e=this.getData(),i=this.getRawValue(t),n=O(i)?Ol(i[0]):Ol(i);return Vl(e.getName(t)+": "+n)},getDataParams:function(t){var e=Vh.prototype.getDataParams.apply(this,arguments),i=this.getData().tree.getNodeByDataIndex(t);return e.treePathInfo=ox(i,this),e},setLayoutInfo:function(t){this.layoutInfo=this.layoutInfo||{},C(this.layoutInfo,t)},mapIdToIndex:function(t){var e=this._idIndexMap;e||(e=this._idIndexMap=Q(),this._idIndexMapCount=0);var i=e.get(t);return null==i&&e.set(t,i=this._idIndexMapCount++),i},getViewRoot:function(){return this._viewRoot},resetViewRoot:function(t){t?this._viewRoot=t:t=this._viewRoot;var e=this.getRawData().tree.root;t&&(t===e||e.contains(t))||(this._viewRoot=e)}});var rx=5;function sx(t){this.group=new Si,t.add(this.group)}function lx(t,e,i,n,a,o){var r=[[a?t:t-rx,e],[t+i,e],[t+i,e+n],[a?t:t-rx,e+n]];return o||r.splice(2,0,[t+i+rx,e+n/2]),a||r.push([t,e+n/2]),r}sx.prototype={constructor:sx,render:function(t,e,i,n){var a=t.getModel("breadcrumb"),o=this.group;if(o.removeAll(),a.get("show")&&i){var r=a.getModel("itemStyle"),s=r.getModel("textStyle"),l={pos:{left:a.get("left"),right:a.get("right"),top:a.get("top"),bottom:a.get("bottom")},box:{width:e.getWidth(),height:e.getHeight()},emptyItemWidth:a.get("emptyItemWidth"),totalWidth:0,renderList:[]};this._prepare(i,l,s),this._renderContent(t,l,r,s,n),iu(o,l.pos,l.box)}},_prepare:function(t,e,i){for(var n=t;n;n=n.parentNode){var a=n.getModel().get("name"),o=i.getTextRect(a),r=Math.max(o.width+16,e.emptyItemWidth);e.totalWidth+=r+8,e.renderList.push({node:n,text:a,width:r})}},_renderContent:function(t,e,i,n,a){for(var o,r,s=0,l=e.emptyItemWidth,u=t.get("breadcrumb.height"),h=function(t,e,i){var n=e.width,a=e.height,o=ml(t.x,n),r=ml(t.y,a),s=ml(t.x2,n),l=ml(t.y2,a);return(isNaN(o)||isNaN(parseFloat(t.x)))&&(o=0),(isNaN(s)||isNaN(parseFloat(t.x2)))&&(s=n),(isNaN(r)||isNaN(parseFloat(t.y)))&&(r=0),(isNaN(l)||isNaN(parseFloat(t.y2)))&&(l=a),i=Rl(i||0),{width:Math.max(s-o-i[1]-i[3],0),height:Math.max(l-r-i[0]-i[2],0)}}(e.pos,e.box),c=e.totalWidth,d=e.renderList,f=d.length-1;0<=f;f--){var p=d[f],g=p.node,m=p.width,v=p.text;c>h.width&&(c-=m-l,m=l,v=null);var y=new Rr({shape:{points:lx(s,0,m,u,f===d.length-1,0===f)},style:T(i.getItemStyle(),{lineJoin:"bevel",text:v,textFill:n.getTextColor(),textFont:n.getFont()}),z:10,onclick:A(a,g)});this.group.add(y),o=t,r=g,y.eventData={componentType:"series",componentSubType:"treemap",componentIndex:o.componentIndex,seriesIndex:o.componentIndex,seriesName:o.name,seriesType:"treemap",selfType:"breadcrumb",nodeData:{dataIndex:r&&r.dataIndex,name:r&&r.name},treePathInfo:r&&ox(r,o)},s+=m+8}},remove:function(){this.group.removeAll()}};function ux(t){var e=xx(t);return e.stroke=e.fill=e.lineWidth=null,e}var hx=N,cx=Si,dx=Hr,fx=L,px=["label"],gx=["emphasis","label"],mx=["upperLabel"],vx=["emphasis","upperLabel"],yx=10,xx=Xa([["fill","color"],["stroke","strokeColor"],["lineWidth","strokeWidth"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["shadowColor"]]);function _x(d,r,s,l,u,i,f,t,e,n){if(f){var p=f.getLayout();if(p&&p.isInView){var h=p.width,c=p.height,g=p.borderWidth,m=p.invisible,v=f.getRawIndex(),y=t&&t.getRawIndex(),a=f.viewChildren,x=p.upperHeight,o=a&&a.length,_=f.getModel("itemStyle"),w=f.getModel("emphasis.itemStyle"),b=T("nodeGroup",cx);if(b){if(e.add(b),b.attr("position",[p.x||0,p.y||0]),b.__tmNodeWidth=h,b.__tmNodeHeight=c,p.isAboveViewRoot)return b;var S=T("background",dx,n,1);if(S&&function(t,n,a){n.dataIndex=f.dataIndex,n.seriesIndex=d.seriesIndex,n.setShape({x:0,y:0,width:h,height:c});var o=f.getVisual("borderColor",!0),r=w.get("borderColor");I(n,function(){var t=ux(_);t.fill=o;var e=xx(w);if(e.fill=r,a){var i=h-2*g;A(t,e,o,i,x,{x:g,y:0,width:i,height:x})}else t.text=e.text=null;n.setStyle(t),ks(n,e)}),t.add(n)}(b,S,o&&p.upperHeight),!o){var M=T("content",dx,n,2);M&&function(t,i){i.dataIndex=f.dataIndex,i.seriesIndex=d.seriesIndex;var n=Math.max(h-2*g,0),a=Math.max(c-2*g,0);i.culling=!0,i.setShape({x:g,y:g,width:n,height:a});var o=f.getVisual("color",!0);I(i,function(){var t=ux(_);t.fill=o;var e=xx(w);A(t,e,o,n,a),i.setStyle(t),ks(i,e)}),t.add(i)}(b,M)}return b}}}function I(t,e){m?t.invisible||i.push(t):(e(),t.__tmWillVisible||(t.invisible=!1))}function A(t,e,i,n,a,o){var r=f.getModel(),s=W(d.getFormattedLabel(f.dataIndex,"normal",null,null,o?"upperLabel":"label"),r.get("name"));if(!o&&p.isLeafRoot){var l=d.get("drillDownIcon",!0);s=l?l+" "+s:s}var u=r.getModel(o?mx:px),h=r.getModel(o?vx:gx),c=u.getShallow("show");zs(t,e,u,h,{defaultText:c?s:null,autoColor:i,isRectText:!0}),o&&(t.textRect=D(o)),t.truncate=c&&u.get("ellipsis")?{outerWidth:n,outerHeight:a,minChar:2}:null}function T(t,e,i,n){var a=null!=y&&s[t][y],o=u[t];return a?(s[t][y]=null,function(t,e,i){(t[v]={}).old="nodeGroup"===i?e.position.slice():C({},e.shape)}(o,a,t)):m||((a=new e({z:function(t,e){var i=t*yx+e;return(i-1)/i}(i,n)})).__tmDepth=i,function(t,e,i){var n=t[v]={},a=f.parentNode;if(a&&(!l||"drillDown"===l.direction)){var o=0,r=0,s=u.background[a.getRawIndex()];!l&&s&&s.old&&(o=s.old.width,r=s.old.height),n.old="nodeGroup"===i?[0,r]:{x:o,y:r,width:0,height:0}}n.fadein="nodeGroup"!==i}(o,0,a.__tmStorageName=t)),r[t][v]=a}}sf({type:"treemap",init:function(t,e){this._containerGroup,this._storage={nodeGroup:[],background:[],content:[]},this._oldTree,this._breadcrumb,this._controller,this._state="ready"},render:function(t,e,i,n){if(!(_(e.findComponents({mainType:"series",subType:"treemap",query:n}),t)<0)){this.seriesModel=t,this.api=i,this.ecModel=e;var a=ix(n,["treemapZoomToNode","treemapRootToNode"],t),o=n&&n.type,r=t.layoutInfo,s=!this._oldTree,l=this._storage,u="treemapRootToNode"===o&&a&&l?{rootNodeGroup:l.nodeGroup[a.node.getRawIndex()],direction:n.direction}:null,h=this._giveContainerGroup(r),c=this._doRender(h,t,u);s||o&&"treemapZoomToNode"!==o&&"treemapRootToNode"!==o?c.renderFinally():this._doAnimation(h,c,t,u),this._resetController(i),this._renderBreadcrumb(t,i,a)}},_giveContainerGroup:function(t){var e=this._containerGroup;return e||(e=this._containerGroup=new cx,this._initEvents(e),this.group.add(e)),e.attr("position",[t.x,t.y]),e},_doRender:function(t,e,i){var n=e.getData().tree,a=this._oldTree,o={nodeGroup:[],background:[],content:[]},r={nodeGroup:[],background:[],content:[]},s=this._storage,l=[],c=A(_x,e,r,s,i,o,l);!function o(r,s,l,u,h){u?fx(s=r,function(t,e){t.isRemoved()||i(e,e)}):new uf(s,r,t,t).add(i).update(i).remove(A(i,null)).execute();function t(t){return t.getId()}function i(t,e){var i=null!=t?r[t]:null,n=null!=e?s[e]:null,a=c(i,n,l,h);a&&o(i&&i.viewChildren||[],n&&n.viewChildren||[],a,u,h+1)}}(n.root?[n.root]:[],a&&a.root?[a.root]:[],t,n===a||!a,0);var u,h,d=(h={nodeGroup:[],background:[],content:[]},(u=s)&&fx(u,function(t,e){var i=h[e];fx(t,function(t){t&&(i.push(t),t.__tmWillDelete=1)})}),h);return this._oldTree=n,this._storage=r,{lastsForAnimation:o,willDeleteEls:d,renderFinally:function(){fx(d,function(t){fx(t,function(t){t.parent&&t.parent.remove(t)})}),fx(l,function(t){t.invisible=!0,t.dirty()})}}},_doAnimation:function(t,o,e,s){if(e.get("animation")){var l=e.get("animationDurationUpdate"),u=e.get("animationEasing"),h=function(){var o,r=[],s={};return{add:function(t,e,i,n,a){return R(n)&&(a=n,n=0),!s[t.id]&&(s[t.id]=1,r.push({el:t,target:e,time:i,delay:n,easing:a}),!0)},done:function(t){return o=t,this},start:function(){for(var t=r.length,e=0,i=r.length;e=r.length||t===r[t.depth]){var i=qx(l,c,t,e,y,s);n(t,i,a,o,r,s)}})}else p=Ux(c),t.setVisual("color",p)}(o,{},k(a.levelModels,function(t){return t?t.get(Wx):null}),r,t.getViewRoot().getAncestors(),t)}};function Zx(i,n,a,o){var r=C({},n);return L(["color","colorAlpha","colorSaturation"],function(t){var e=i.get(t,!0);null==e&&a&&(e=a[t]),null==e&&(e=n[t]),null==e&&(e=o.get(t)),null!=e&&(r[t]=e)}),r}function Ux(t){var e=Xx(t,"color");if(e){var i=Xx(t,"colorAlpha"),n=Xx(t,"colorSaturation");return n&&(e=He(e,null,null,n)),i&&(e=Ze(e,i)),e}}function Xx(t,e){var i=t[e];if(null!=i&&"none"!==i)return i}function Yx(t,e,i,n,a,o){if(o&&o.length){var r=jx(e,"color")||null!=a.color&&"none"!==a.color&&(jx(e,"colorAlpha")||jx(e,"colorSaturation"));if(r){var s=e.get("visualMin"),l=e.get("visualMax"),u=i.dataExtent.slice();null!=s&&su[1]&&(u[1]=l);var h=e.get("colorMappingBy"),c={type:r.name,dataExtent:u,visual:r.range};"color"!==c.type||"index"!==h&&"id"!==h?c.mappingMethod="linear":(c.mappingMethod="category",c.loop=!0);var d=new Dx(c);return d.__drColorMappingBy=h,d}}}function jx(t,e){var i=t.get(e);return Fx(i)&&i.length?{name:e,range:i}:null}function qx(t,e,i,n,a,o){var r=C({},e);if(a){var s=a.type,l="color"===s&&a.__drColorMappingBy,u="index"===l?n:"id"===l?o.mapIdToIndex(i.getId()):i.getValue(t.get("visualDimension"));r[s]=a.mapValueToVisual(u)}return r}var Kx=Math.max,$x=Math.min,Jx=W,Qx=L,t_=["itemStyle","borderWidth"],e_=["itemStyle","gapWidth"],i_=["upperLabel","show"],n_=["upperLabel","height"],a_={seriesType:"treemap",reset:function(t,e,i,n){var a=i.getWidth(),o=i.getHeight(),r=t.option,s=eu(t.getBoxLayoutParams(),{width:i.getWidth(),height:i.getHeight()}),l=r.size||[],u=ml(Jx(s.width,l[0]),a),h=ml(Jx(s.height,l[1]),o),c=n&&n.type,d=ix(n,["treemapZoomToNode","treemapRootToNode"],t),f="treemapRender"===c||"treemapMove"===c?n.rootRect:null,p=t.getViewRoot(),g=nx(p);if("treemapMove"!==c){var m="treemapZoomToNode"===c?function(t,e,i,n,a){var o,r=(e||{}).node,s=[n,a];if(!r||r===i)return s;var l=n*a,u=l*t.option.zoomToNodeRatio;for(;o=r.parentNode;){for(var h=0,c=o.children,d=0,f=c.length;ds[1]&&(s[1]=e)})}else s=[NaN,NaN];return{sum:n,dataExtent:s}}(e,r,s);if(0===u.sum)return t.viewChildren=[];if(u.sum=function(t,e,i,n,a){if(!n)return i;for(var o=t.get("visibleMin"),r=a.length,s=r,l=r-1;0<=l;l--){var u=a["asc"===n?r-l-1:l].getValue();u/i*ei[l[r]])&&(h=i[l[r]]);for(var c=0,d=t.length;c "+d)),u++)}var f,p=i.get("coordinateSystem");if("cartesian2d"===p||"polar"===p)f=Hf(t,i);else{var g=Gu.get(p),m=g&&"view"!==g.type&&g.dimensions||[];_(m,"value")<0&&m.concat(["value"]);var v=Vf(t,{coordDimensions:m});(f=new Mf(v,i)).initData(t)}var y=new Mf(["value"],i);return y.initData(l,s),a&&a(f,y),Py({mainData:f,struct:o,structAttr:"graph",datas:{node:f,edge:y},datasAttr:{node:"data",edge:"edgeData"}}),o.update(),o}var m_=rf({type:"series.graph",init:function(t){m_.superApply(this,"init",arguments),this.legendDataProvider=function(){return this._categoriesData},this.fillDataTextStyle(t.edges||t.links),this._updateCategoriesData()},mergeOption:function(t){m_.superApply(this,"mergeOption",arguments),this.fillDataTextStyle(t.edges||t.links),this._updateCategoriesData()},mergeDefaultAndTheme:function(t){m_.superApply(this,"mergeDefaultAndTheme",arguments),ba(t,["edgeLabel"],["show"])},getInitialData:function(t,s){var e=t.edges||t.links||[],i=t.data||t.nodes||[],l=this;if(i&&e)return g_(i,e,this,!0,function(t,e){t.wrapMethod("getItemModel",function(t){var e=l._categoriesModels[t.getShallow("category")];return e&&(e.parentModel=t.parentModel,t.parentModel=e),t});var i=l.getModel("edgeLabel"),n=new ul({label:i.option},i.parentModel,s),a=l.getModel("emphasis.edgeLabel"),o=new ul({emphasis:{label:a.option}},a.parentModel,s);function r(t){return(t=this.parsePath(t))&&"label"===t[0]?n:t&&"emphasis"===t[0]&&"label"===t[1]?o:this.parentModel}e.wrapMethod("getItemModel",function(t){return t.customizeGetParent(r),t})}).data},getGraph:function(){return this.getData().graph},getEdgeData:function(){return this.getGraph().edgeData},getCategoriesData:function(){return this._categoriesData},formatTooltip:function(t,e,i){if("edge"!==i)return m_.superApply(this,"formatTooltip",arguments);var n=this.getData(),a=this.getDataParams(t,i),o=n.graph.getEdgeByIndex(t),r=n.getName(o.node1.dataIndex),s=n.getName(o.node2.dataIndex),l=[];return null!=r&&l.push(r),null!=s&&l.push(s),l=Vl(l.join(" > ")),a.value&&(l+=" : "+Vl(a.value)),l},_updateCategoriesData:function(){var t=k(this.option.categories||[],function(t){return null!=t.value?t:C({value:0},t)}),e=new Mf(["value"],this);e.initData(t),this._categoriesData=e,this._categoriesModels=e.mapArray(function(t){return e.getItemModel(t,!0)})},setZoom:function(t){this.option.zoom=t},setCenter:function(t){this.option.center=t},isAnimationEnabled:function(){return m_.superCall(this,"isAnimationEnabled")&&!("force"===this.get("layout")&&this.get("force.layoutAnimation"))},defaultOption:{zlevel:0,z:2,coordinateSystem:"view",legendHoverLink:!0,hoverAnimation:!0,layout:null,focusNodeAdjacency:!1,circular:{rotateLabel:!1},force:{initLayout:null,repulsion:[0,50],gravity:.1,edgeLength:30,layoutAnimation:!0},left:"center",top:"center",symbol:"circle",symbolSize:10,edgeSymbol:["none","none"],edgeSymbolSize:10,edgeLabel:{position:"middle"},draggable:!1,roam:!1,center:null,zoom:1,nodeScaleRatio:.6,label:{show:!1,formatter:"{b}"},itemStyle:{},lineStyle:{color:"#aaa",width:1,curveness:0,opacity:.5},emphasis:{label:{show:!0}}}}),v_=Ur.prototype,y_=qr.prototype;function x_(t){return isNaN(+t.cpx1)||isNaN(+t.cpy1)}var __=cs({type:"ec-line",style:{stroke:"#000",fill:null},shape:{x1:0,y1:0,x2:0,y2:0,percent:1,cpx1:null,cpy1:null},buildPath:function(t,e){this[x_(e)?"_buildPathLine":"_buildPathCurve"](t,e)},_buildPathLine:v_.buildPath,_buildPathCurve:y_.buildPath,pointAt:function(t){return this[x_(this.shape)?"_pointAtLine":"_pointAtCurve"](t)},_pointAtLine:v_.pointAt,_pointAtCurve:y_.pointAt,tangentAt:function(t){var e=this.shape,i=x_(e)?[e.x2-e.x1,e.y2-e.y1]:this._tangentAtCurve(t);return mt(i,i)},_tangentAtCurve:y_.tangentAt}),w_=["fromSymbol","toSymbol"];function b_(t){return"_"+t+"Type"}function S_(t,e,i){var n=e.getItemVisual(i,"color"),a=e.getItemVisual(i,t),o=e.getItemVisual(i,t+"Size");if(a&&"none"!==a){O(o)||(o=[o,o]);var r=qp(a,-o[0]/2,-o[1]/2,o[0],o[1],n);return r.name=t,r}}function M_(t,e){t.x1=e[0][0],t.y1=e[0][1],t.x2=e[1][0],t.y2=e[1][1],t.percent=1;var i=e[2];i?(t.cpx1=i[0],t.cpy1=i[1]):(t.cpx1=NaN,t.cpy1=NaN)}function I_(t,e,i){Si.call(this),this._createLine(t,e,i)}var A_=I_.prototype;function T_(t){this._ctor=t||I_,this.group=new Si}A_.beforeUpdate=function(){var t=this.childOfName("fromSymbol"),e=this.childOfName("toSymbol"),i=this.childOfName("label");if(t||e||!i.ignore){for(var n=1,a=this.parent;a;)a.scale&&(n/=a.scale[0]),a=a.parent;var o=this.childOfName("line");if(this.__dirty||o.__dirty){var r=o.shape.percent,s=o.pointAt(0),l=o.pointAt(r),u=ht([],l,s);if(mt(u,u),t){t.attr("position",s);var h=o.tangentAt(0);t.attr("rotation",Math.PI/2-Math.atan2(h[1],h[0])),t.attr("scale",[n*r,n*r])}if(e){e.attr("position",l);h=o.tangentAt(1);e.attr("rotation",-Math.PI/2-Math.atan2(h[1],h[0])),e.attr("scale",[n*r,n*r])}if(!i.ignore){var c,d,f;i.attr("position",l);var p=5*n;if("end"===i.__position)c=[u[0]*p+l[0],u[1]*p+l[1]],d=.8=t&&(0===e?0:n[e-1][0])o&&(e[1-n]=e[n]+c.sign*o),e}function dw(t,e){var i=t[e]-t[1-e];return{span:Math.abs(i),sign:0a*(1-h[0])?(l="jump",r=s-a*(1-h[2])):0<=(r=s-a*h[1])&&(r=s-a*(1-h[1]))<=0&&(r=0),(r*=e.axisExpandWidth/u)?cw(r,n,o,"all"):l="none";else{a=n[1]-n[0];(n=[mw(0,o[1]*s/a-a/2)])[1]=gw(o[1],n[0]+a),n[0]=n[1]-a}return{axisExpandWindow:n,behavior:l}}},Gu.register("parallel",{create:function(n,a){var o=[];return n.eachComponent("parallel",function(t,e){var i=new ww(t,n,a);i.name="parallel_"+e,i.resize(t,a),(t.coordinateSystem=i).model=t,o.push(i)}),n.eachSeries(function(t){if("parallel"===t.get("coordinateSystem")){var e=n.queryComponents({mainType:"parallel",index:t.get("parallelIndex"),id:t.get("parallelId")})[0];t.coordinateSystem=e.coordinateSystem}}),o}});var Sw=hu.extend({type:"baseParallelAxis",axis:null,activeIntervals:[],getAreaSelectStyle:function(){return Xa([["fill","color"],["lineWidth","borderWidth"],["stroke","borderColor"],["width","width"],["opacity","opacity"]])(this.getModel("areaSelectStyle"))},setActiveIntervals:function(t){var e=this.activeIntervals=D(t);if(e)for(var i=e.length-1;0<=i;i--)yl(e[i])},getActiveState:function(t){var e=this.activeIntervals;if(!e.length)return"normal";if(null==t||isNaN(t))return"inactive";if(1===e.length){var i=e[0];if(i[0]<=t&&t<=i[1])return"active"}else for(var n=0,a=e.length;nf&&(f=m.depth),g.setLayout({depth:v?m.depth:c},!0),"vertical"===o?g.setLayout({dy:i},!0):g.setLayout({dx:i},!0);for(var y=0;y "))},preventIncremental:function(){return!!this.get("effect.show")},getProgressive:function(){var t=this.option.progressive;return null==t?this.option.large?1e4:this.get("progressive"):t},getProgressiveThreshold:function(){var t=this.option.progressiveThreshold;return null==t?this.option.large?2e4:this.get("progressiveThreshold"):t},defaultOption:{coordinateSystem:"geo",zlevel:0,z:2,legendHoverLink:!0,hoverAnimation:!0,xAxisIndex:0,yAxisIndex:0,symbol:["none","none"],symbolSize:[10,10],geoIndex:0,effect:{show:!1,period:4,constantSpeed:0,symbol:"circle",symbolSize:3,loop:!0,trailLength:.2},large:!1,largeThreshold:2e3,polyline:!1,label:{show:!1,position:"end"},lineStyle:{opacity:.5}}});function wS(t,e,i){Si.call(this),this.add(this.createLine(t,e,i)),this._updateEffectSymbol(t,e)}var bS=wS.prototype;function SS(t,e,i){Si.call(this),this._createPolyline(t,e,i)}bS.createLine=function(t,e,i){return new I_(t,e,i)},bS._updateEffectSymbol=function(t,e){var i=t.getItemModel(e).getModel("effect"),n=i.get("symbolSize"),a=i.get("symbol");O(n)||(n=[n,n]);var o=i.get("color")||t.getItemVisual(e,"color"),r=this.childAt(1);this._symbolType!==a&&(this.remove(r),(r=qp(a,-.5,-.5,1,1,o)).z2=100,r.culling=!0,this.add(r)),r&&(r.setStyle("shadowColor",o),r.setStyle(i.getItemStyle(["color"])),r.attr("scale",n),r.setColor(o),r.attr("scale",n),this._symbolType=a,this._updateEffectAnimation(t,i,e))},bS._updateEffectAnimation=function(e,t,i){var n=this.childAt(1);if(n){var a=this,o=e.getItemLayout(i),r=1e3*t.get("period"),s=t.get("loop"),l=t.get("constantSpeed"),u=W(t.get("delay"),function(t){return t/e.count()*r/3}),h="function"==typeof u;if(n.ignore=!0,this.updateAnimationPoints(n,o),0e);r++);r=Math.min(r-1,a-2)}wt(t.position,i[r],i[r+1],(e-n[r])/(n[r+1]-n[r]));var s=i[r+1][0]-i[r][0],l=i[r+1][1]-i[r][1];t.rotation=-Math.atan2(l,s)-Math.PI/2,this._lastFrame=r,this._lastFramePercent=e,t.ignore=!1}},w(IS,wS);var TS=cs({shape:{polyline:!1,curveness:0,segs:[]},buildPath:function(t,e){var i=e.segs,n=e.curveness;if(e.polyline)for(var a=0;a=e[0]&&t<=e[1]}}(y,e.option.range):function(e,n,a){var i=e[1]-e[0],o=(n=k(n,function(t){return{interval:[(t.interval[0]-e[0])/i,(t.interval[1]-e[0])/i]}})).length,r=0;return function(t){for(var e=r;e=e.y&&t[1]<=e.y+e.height:i.contain(i.toLocalCoord(t[1]))&&t[0]>=e.y&&t[0]<=e.y+e.height},pointToData:function(t){var e=this.getAxis();return[e.coordToData(e.toLocalCoord(t["horizontal"===e.orient?0:1]))]},dataToPoint:function(t){var e=this.getAxis(),i=this.getRect(),n=[],a="horizontal"===e.orient?0:1;return t instanceof Array&&(t=t[0]),n[a]=e.toGlobalCoord(e.dataToCoord(+t)),n[1-a]=0==a?i.y+i.height/2:i.x+i.width/2,n}}).dimensions});var rM=["axisLine","axisTickLabel","axisName"],sM="splitLine",lM=Gm.extend({type:"singleAxis",axisPointerClass:"SingleAxisPointer",render:function(t,e,i,n){var a=this.group;a.removeAll();var o=oM(t),r=new Mm(t,o);L(rM,r.add,r),a.add(r.getGroup()),t.get(sM+".show")&&this["_"+sM](t),lM.superCall(this,"render",t,e,i,n)},_splitLine:function(t){var e=t.axis;if(!e.scale.isBlank()){var i=t.getModel("splitLine"),n=i.getModel("lineStyle"),a=n.get("width"),o=n.get("color");o=o instanceof Array?o:[o];for(var r=t.coordinateSystem.getRect(),s=e.isHorizontal(),l=[],u=0,h=e.getTicksCoords({tickModel:i}),c=[],d=[],f=0;fr)return!0;if(o){var s=Em(t).seriesDataCount,l=n.getExtent();return Math.abs(l[0]-l[1])/s>r}return!1},makeElOption:function(t,e,i,n,a){},createPointerEl:function(t,e,i,n){var a=e.pointer;if(a){var o=AM(t).pointerEl=new il[a.type](TM(e.pointer));t.add(o)}},createLabelEl:function(t,e,i,n){if(e.label){var a=AM(t).labelEl=new Hr(TM(e.label));t.add(a),kM(a,n)}},updatePointerEl:function(t,e,i){var n=AM(t).pointerEl;n&&e.pointer&&(n.setStyle(e.pointer.style),i(n,{shape:e.pointer.shape}))},updateLabelEl:function(t,e,i,n){var a=AM(t).labelEl;a&&(a.setStyle(e.label.style),i(a,{shape:e.label.shape,position:e.label.position}),kM(a,n))},_renderHandle:function(t){if(!this._dragging&&this.updateHandleTransform){var e,i=this._axisPointerModel,n=this._api.getZr(),a=this._handle,o=i.getModel("handle"),r=i.get("status");if(!o.get("show")||!r||"hide"===r)return a&&n.remove(a),void(this._handle=null);this._handle||(e=!0,a=this._handle=Js(o.get("icon"),{cursor:"move",draggable:!0,onmousemove:function(t){Ft(t.event)},onmousedown:DM(this._onHandleDragMove,this,0,0),drift:DM(this._onHandleDragMove,this),ondragend:DM(this._onHandleDragEnd,this)}),n.add(a)),NM(a,i,!1);a.setStyle(o.getItemStyle(null,["color","borderColor","borderWidth","opacity","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY"]));var s=o.get("size");O(s)||(s=[s,s]),a.attr("scale",[s[0]/2,s[1]/2]),uc(this,"_doDispatchAxisPointer",o.get("throttle")||0,"fixRate"),this._moveHandleToValue(t,e)}},_moveHandleToValue:function(t,e){LM(this._axisPointerModel,!e&&this._moveAnimation,this._handle,PM(this.getHandleTransform(t,this._axisModel,this._axisPointerModel)))},_onHandleDragMove:function(t,e){var i=this._handle;if(i){this._dragging=!0;var n=this.updateHandleTransform(PM(i),[t,e],this._axisModel,this._axisPointerModel);this._payloadInfo=n,i.stopAnimation(),i.attr(PM(n)),AM(i).lastProp=null,this._doDispatchAxisPointer()}},_doDispatchAxisPointer:function(){if(this._handle){var t=this._payloadInfo,e=this._axisModel;this._api.dispatchAction({type:"updateAxisPointer",x:t.cursorPoint[0],y:t.cursorPoint[1],tooltipOption:t.tooltipOption,axesInfo:[{axisDim:e.axis.dim,axisIndex:e.componentIndex}]})}},_onHandleDragEnd:function(t){if(this._dragging=!1,this._handle){var e=this._axisPointerModel.get("value");this._moveHandleToValue(e),this._api.dispatchAction({type:"hideTip"})}},getHandleTransform:null,updateHandleTransform:null,clear:function(t){this._lastValue=null,this._lastStatus=null;var e=t.getZr(),i=this._group,n=this._handle;e&&i&&(this._lastGraphicKey=null,i&&e.remove(i),n&&e.remove(n),this._group=null,this._handle=null,this._payloadInfo=null)},doClear:function(){},buildLabel:function(t,e,i){return{x:t[i=i||0],y:t[1-i],width:e[i],height:e[1-i]}}}).constructor=CM);var WM=CM.extend({makeElOption:function(t,e,i,n,a){var o=i.axis,r=o.grid,s=n.get("type"),l=HM(r,o).getOtherAxis(o).getGlobalExtent(),u=o.toGlobalCoord(o.dataToCoord(e,!0));if(s&&"none"!==s){var h=OM(n),c=ZM[s](o,u,l);c.style=h,t.graphicKey=c.type,t.pointer=c}BM(e,t,Zm(r.model,i),i,n,a)},getHandleTransform:function(t,e,i){var n=Zm(e.axis.grid.model,e,{labelInside:!1});return n.labelMargin=i.get("handle.margin"),{position:EM(e.axis,t,n),rotation:n.rotation+(n.labelDirection<0?Math.PI:0)}},updateHandleTransform:function(t,e,i,n){var a=i.axis,o=a.grid,r=a.getGlobalExtent(!0),s=HM(o,a).getOtherAxis(a).getGlobalExtent(),l="x"===a.dim?0:1,u=t.position;u[l]+=e[l],u[l]=Math.min(r[1],u[l]),u[l]=Math.max(r[0],u[l]);var h=(s[1]+s[0])/2,c=[h,h];c[l]=u[l];return{position:u,rotation:t.rotation,cursorPoint:c,tooltipOption:[{verticalAlign:"middle"},{align:"center"}][l]}}});function HM(t,e){var i={};return i[e.dim+"AxisIndex"]=e.index,t.getCartesian(i)}var ZM={line:function(t,e,i){return{type:"Line",subPixelOptimize:!0,shape:VM([e,i[0]],[e,i[1]],UM(t))}},shadow:function(t,e,i){var n=Math.max(1,t.getBandWidth()),a=i[1]-i[0];return{type:"Rect",shape:GM([e-n/2,i[0]],[n,a],UM(t))}}};function UM(t){return"x"===t.dim?0:1}Gm.registerAxisPointerClass("CartesianAxisPointer",WM),qd(function(t){if(t){t.axisPointer&&0!==t.axisPointer.length||(t.axisPointer={});var e=t.axisPointer.link;e&&!O(e)&&(t.axisPointer.link=[e])}}),Kd(ld.PROCESSOR.STATISTIC,function(t,e){t.getComponent("axisPointer").coordSysAxesInfo=zm(t,e)}),$d({type:"updateAxisPointer",event:"updateAxisPointer",update:":updateAxisPointer"},function(t,e,i){var n=t.currTrigger,r=[t.x,t.y],a=t,o=t.dispatchAction||N(i.dispatchAction,i),s=e.getComponent("axisPointer").coordSysAxesInfo;if(s){yM(r)&&(r=hM({seriesIndex:a.seriesIndex,dataIndex:a.dataIndex},e).point);var l=yM(r),u=a.axesInfo,h=s.axesInfo,c="leave"===n||yM(r),d={},f={},p={list:[],map:{}},g={showPointer:dM(gM,f),showTooltip:dM(mM,p)};cM(s.coordSysMap,function(t,e){var o=l||t.containPoint(r);cM(s.coordSysAxesInfo[e],function(t,e){var i=t.axis,n=function(t,e){for(var i=0;i<(t||[]).length;i++){var n=t[i];if(e.axis.dim===n.axisDim&&e.axis.model.componentIndex===n.axisIndex)return n}}(u,t);if(!c&&o&&(!u||n)){var a=n&&n.value;null!=a||l||(a=i.pointToData(r)),null!=a&&pM(t,a,g,!1,d)}})});var m={};return cM(h,function(a,t){var o=a.linkGroup;o&&!f[t]&&cM(o.axesInfo,function(t,e){var i=f[e];if(t!==a&&i){var n=i.value;o.mapper&&(n=a.axis.scale.parse(o.mapper(n,vM(t),vM(a)))),m[a.key]=n}})}),cM(m,function(t,e){pM(h[e],t,g,!0,d)}),function(a,t,e){var o=e.axesInfo=[];cM(t,function(t,e){var i=t.axisPointerModel.option,n=a[e];n?(t.useHandle||(i.status="show"),i.value=n.value,i.seriesDataIndices=(n.payloadBatch||[]).slice()):t.useHandle||(i.status="hide"),"show"===i.status&&o.push({axisDim:t.axis.dim,axisIndex:t.axis.model.componentIndex,value:i.value})})}(f,h,d),function(t,e,i,n){if(yM(e)||!t.list.length)return n({type:"hideTip"});var a=((t.list[0].dataByAxis[0]||{}).seriesDataIndices||[])[0]||{};n({type:"showTip",escapeConnect:!0,x:e[0],y:e[1],tooltipOption:i.tooltipOption,position:i.position,dataIndexInside:a.dataIndexInside,dataIndex:a.dataIndex,seriesIndex:a.seriesIndex,dataByCoordSys:t.list})}(p,r,t,o),function(t,e,i){var n=i.getZr(),a="axisPointerLastHighlights",o=fM(n)[a]||{},r=fM(n)[a]={};cM(t,function(t,e){var i=t.axisPointerModel.option;"show"===i.status&&cM(i.seriesDataIndices,function(t){var e=t.seriesIndex+" | "+t.dataIndex;r[e]=t})});var s=[],l=[];L(o,function(t,e){r[e]||l.push(t)}),L(r,function(t,e){o[e]||s.push(t)}),l.length&&i.dispatchAction({type:"downplay",escapeConnect:!0,batch:l}),s.length&&i.dispatchAction({type:"highlight",escapeConnect:!0,batch:s})}(h,0,i),d}});var XM=["x","y"],YM=["width","height"],jM=CM.extend({makeElOption:function(t,e,i,n,a){var o=i.axis,r=o.coordinateSystem,s=$M(r,1-KM(o)),l=r.dataToPoint(e)[0],u=n.get("type");if(u&&"none"!==u){var h=OM(n),c=qM[u](o,l,s);c.style=h,t.graphicKey=c.type,t.pointer=c}BM(e,t,oM(i),i,n,a)},getHandleTransform:function(t,e,i){var n=oM(e,{labelInside:!1});return n.labelMargin=i.get("handle.margin"),{position:EM(e.axis,t,n),rotation:n.rotation+(n.labelDirection<0?Math.PI:0)}},updateHandleTransform:function(t,e,i,n){var a=i.axis,o=a.coordinateSystem,r=KM(a),s=$M(o,r),l=t.position;l[r]+=e[r],l[r]=Math.min(s[1],l[r]),l[r]=Math.max(s[0],l[r]);var u=$M(o,1-r),h=(u[1]+u[0])/2,c=[h,h];return c[r]=l[r],{position:l,rotation:t.rotation,cursorPoint:c,tooltipOption:{verticalAlign:"middle"}}}}),qM={line:function(t,e,i){return{type:"Line",subPixelOptimize:!0,shape:VM([e,i[0]],[e,i[1]],KM(t))}},shadow:function(t,e,i){var n=t.getBandWidth(),a=i[1]-i[0];return{type:"Rect",shape:GM([e-n/2,i[0]],[n,a],KM(t))}}};function KM(t){return t.isHorizontal()?0:1}function $M(t,e){var i=t.getRect();return[i[XM[e]],i[XM[e]]+i[YM[e]]]}Gm.registerAxisPointerClass("SingleAxisPointer",jM),of({type:"single"});var JM=Vh.extend({type:"series.themeRiver",dependencies:["singleAxis"],nameMap:null,init:function(t){JM.superApply(this,"init",arguments),this.legendDataProvider=function(){return this.getRawData()}},fixData:function(t){var e=t.length,i=Ra(t,function(t){return t[2]}),n=[];i.buckets.each(function(t,e){n.push({name:e,dataList:t})});for(var a=n.length,o=-1,r=-1,s=0;sMath.PI/2?"right":"left"):y&&"center"!==y?"left"===y?(d=l.r0+v,f>Math.PI/2&&(y="right")):"right"===y&&(d=l.r-v,f>Math.PI/2&&(y="left")):(d=(l.r+l.r0)/2,y="center"),c.attr("style",{text:s,textAlign:y,textVerticalAlign:S("verticalAlign")||"middle",opacity:S("opacity")});var x=d*p+l.cx,_=d*g+l.cy;c.attr("position",[x,_]);var w=S("rotate"),b=0;function S(t){var e=o.get(t);return null==e?a.get(t):e}"radial"===w?(b=-f)<-Math.PI/2&&(b+=Math.PI):"tangential"===w?(b=Math.PI/2-f)>Math.PI/2?b-=Math.PI:b<-Math.PI/2&&(b+=Math.PI):"number"==typeof w&&(b=w*Math.PI/180),c.attr("rotation",b)},rI._initEvents=function(t,e,i,n){t.off("mouseover").off("mouseout").off("emphasis").off("normal");function a(){r.onEmphasis(n)}function o(){r.onNormal()}var r=this;i.isAnimationEnabled()&&t.on("mouseover",a).on("mouseout",o).on("emphasis",a).on("normal",o).on("downplay",function(){r.onDownplay()}).on("highlight",function(){r.onHighlight()})},w(oI,Si);Jh.extend({type:"sunburst",init:function(){},render:function(a,o,t,e){var n=this;this.seriesModel=a,this.api=t,this.ecModel=o;var r=a.getData(),s=r.tree.root,i=a.getViewRoot(),l=this.group,u=a.get("renderLabelForZeroData"),h=[];i.eachNode(function(t){h.push(t)});var c=this._oldChildren||[];if(function(i,n){if(0===i.length&&0===n.length)return;function t(t){return t.getId()}function e(t,e){!function(t,e){u||!t||t.getValue()||(t=null);if(t!==s&&e!==s)if(e&&e.piece)t?(e.piece.updateData(!1,t,"normal",a,o),r.setItemGraphicEl(t.dataIndex,e.piece)):function(t){if(!t)return;t.piece&&(l.remove(t.piece),t.piece=null)}(e);else if(t){var i=new oI(t,a,o);l.add(i),r.setItemGraphicEl(t.dataIndex,i)}}(null==t?null:i[t],null==e?null:n[e])}new uf(n,i,t,t).add(e).update(e).remove(A(e,null)).execute()}(h,c),function(t,e){if(0=i.r0}}});var sI="sunburstRootToNode";$d({type:sI,update:"updateView"},function(a,t){t.eachComponent({mainType:"series",subType:"sunburst",query:a},function(t,e){var i=ix(a,[sI],t);if(i){var n=t.getViewRoot();n&&(a.direction=ax(n,i.node)?"rollUp":"drillDown"),t.resetViewRoot(i.node)}})});var lI="sunburstHighlight";$d({type:lI,update:"updateView"},function(n,t){t.eachComponent({mainType:"series",subType:"sunburst",query:n},function(t,e){var i=ix(n,[lI],t);i&&(n.highlight=i.node)})});$d({type:"sunburstUnhighlight",update:"updateView"},function(i,t){t.eachComponent({mainType:"series",subType:"sunburst",query:i},function(t,e){i.unhighlight=!0})});var uI=Math.PI/180;function hI(t,e){if("function"==typeof e)return t.sort(e);var n="asc"===e;return t.sort(function(t,e){var i=(t.getValue()-e.getValue())*(n?1:-1);return 0==i?(t.dataIndex-e.dataIndex)*(n?-1:1):i})}function cI(o,r){return r=r||[0,0],k(["x","y"],function(t,e){var i=this.getAxis(t),n=r[e],a=o[e]/2;return"category"===i.type?i.getBandWidth():Math.abs(i.dataToCoord(n-a)-i.dataToCoord(n+a))},this)}tf(A(mv,"sunburst")),Qd(A(function(t,e,C,i){e.eachSeriesByType(t,function(t){var e=t.get("center"),i=t.get("radius");O(i)||(i=[0,i]),O(e)||(e=[e,e]);var n=C.getWidth(),a=C.getHeight(),h=Math.min(n,a),c=ml(e[0],n),d=ml(e[1],a),f=ml(i[0],h/2),o=ml(i[1],h/2),r=-t.get("startAngle")*uI,p=t.get("minAngle")*uI,g=t.getData().tree.root,s=t.getViewRoot(),m=s.depth,l=t.get("sort");null!=l&&!function e(t,i){var n=t.children||[];t.children=hI(n,i);n.length&&L(t.children,function(t){e(t,i)})}(s,l);var u=0;L(s.children,function(t){isNaN(t.getValue())||u++});var v=s.getValue(),y=Math.PI/(v||u)*2,x=0t[1]&&t.reverse(),{coordSys:{type:"polar",cx:a.cx,cy:a.cy,r:t[1],r0:t[0]},api:{coord:N(function(t){var e=o.dataToRadius(t[0]),i=r.dataToAngle(t[1]),n=a.coordToPoint([e,i]);return n.push(e,i*Math.PI/180),n}),size:N(pI,a)}}},calendar:function(i){var t=i.getRect(),e=i.getRangeInfo();return{coordSys:{type:"calendar",x:t.x,y:t.y,width:t.width,height:t.height,cellWidth:i.getCellWidth(),cellHeight:i.getCellHeight(),rangeInfo:{start:e.start,end:e.end,weeks:e.weeks,dayCount:e.allDay}},api:{coord:function(t,e){return i.dataToPoint(t,e)}}}}};function bI(t,e,i,n,a){null==i[t]||a||(e[t]=i[t],i[t]=n[t])}function SI(o,r,e,t){var i=o.get("renderItem"),n=o.coordinateSystem,a={};n&&(a=n.prepareCustoms?n.prepareCustoms():wI[n.type](n));var s,l,u,h,c,d=T({getWidth:t.getWidth,getHeight:t.getHeight,getZr:t.getZr,getDevicePixelRatio:t.getDevicePixelRatio,value:function(t,e){return null==e&&(e=s),r.get(r.getDimension(t||0),e)},style:function(t,e){null==e&&(e=s),g(e);var i=l.getModel(mI).getItemStyle();null!=c&&(i.fill=c);var n=r.getItemVisual(e,"opacity");null!=n&&(i.opacity=n);var a=t?DI(t,u):u;return Es(i,a,null,{autoColor:c,isRectText:!0}),i.text=a.getShallow("show")?H(o.getFormattedLabel(e,"normal"),xg(r,e)):null,t&&CI(i,t),i},styleEmphasis:function(t,e){null==e&&(e=s),g(e);var i=l.getModel(vI).getItemStyle(),n=t?DI(t,h):h;return Es(i,n,null,{isRectText:!0},!0),i.text=n.getShallow("show")?Z(o.getFormattedLabel(e,"emphasis"),o.getFormattedLabel(e,"normal"),xg(r,e)):null,t&&CI(i,t),i},visual:function(t,e){return null==e&&(e=s),r.getItemVisual(e,t)},barLayout:function(t){if(n.getBaseAxis){return function(t){var e=[],i=t.axis;if("category"===i.type){for(var n=i.getBandWidth(),a=0;ae[0]&&(e=e.slice().reverse());var n=t.coordToPoint([e[0],i]),a=t.coordToPoint([e[1],i]);return{x1:n[0],y1:n[1],x2:a[0],y2:a[1]}}function XI(t){return t.getRadiusAxis().inverse?0:1}function YI(t){var e=t[0],i=t[t.length-1];e&&i&&Math.abs(Math.abs(e.coord-i.coord)-360)<1e-4&&t.pop()}Gm.extend({type:"angleAxis",axisPointerClass:"PolarAxisPointer",render:function(e,t){if(this.group.removeAll(),e.get("show")){var i=e.axis,n=i.polar,a=n.getRadiusAxis().getExtent(),o=i.getTicksCoords(),r=k(i.getViewLabels(),function(t){return(t=D(t)).coord=i.dataToCoord(t.tickValue),t});YI(r),YI(o),L(ZI,function(t){!e.get(t+".show")||i.scale.isBlank()&&"axisLine"!==t||this["_"+t](e,n,o,a,r)},this)}},_axisLine:function(t,e,i,n){var a=t.getModel("axisLine.lineStyle"),o=new Lr({shape:{cx:e.cx,cy:e.cy,r:n[XI(e)]},style:a.getLineStyle(),z2:1,silent:!0});o.style.fill=null,this.group.add(o)},_axisTick:function(t,e,i,n){var a=t.getModel("axisTick"),o=(a.get("inside")?-1:1)*a.get("length"),r=n[XI(e)],s=k(i,function(t){return new Ur({shape:UI(e,[r,r+o],t.coord)})});this.group.add(gs(s,{style:T(a.getModel("lineStyle").getLineStyle(),{stroke:t.get("axisLine.lineStyle.color")})}))},_axisLabel:function(c,d,t,f,e){var p=c.getCategories(!0),g=c.getModel("axisLabel"),m=g.get("margin"),v=c.get("triggerEvent");L(e,function(t,e){var i=g,n=t.tickValue,a=f[XI(d)],o=d.coordToPoint([a+m,t.coord]),r=d.cx,s=d.cy,l=Math.abs(o[0]-r)/a<.3?"center":o[0]>r?"left":"right",u=Math.abs(o[1]-s)/a<.3?"middle":o[1]>s?"top":"bottom";p&&p[n]&&p[n].textStyle&&(i=new ul(p[n].textStyle,g,g.ecModel));var h=new Dr({silent:Mm.isLabelSilent(c)});this.group.add(h),Es(h.style,i,{x:o[0],y:o[1],textFill:i.getTextColor()||c.get("axisLine.lineStyle.color"),text:t.formattedLabel,textAlign:l,textVerticalAlign:u}),v&&(h.eventData=Mm.makeAxisEventDataBase(c),h.eventData.targetType="axisLabel",h.eventData.value=t.rawLabel)},this)},_splitLine:function(t,e,i,n){var a=t.getModel("splitLine").getModel("lineStyle"),o=a.get("color"),r=0;o=o instanceof Array?o:[o];for(var s=[],l=0;lm?"left":"right",h=Math.abs(l[1]-v)/g<.3?"middle":l[1]>v?"top":"bottom"}return{position:l,align:u,verticalAlign:h}}(e,i,0,s,d))}});var $I={line:function(t,e,i,n,a){return"angle"===t.dim?{type:"Line",shape:VM(e.coordToPoint([n[0],i]),e.coordToPoint([n[1],i]))}:{type:"Circle",shape:{cx:e.cx,cy:e.cy,r:i}}},shadow:function(t,e,i,n,a){var o=Math.max(1,t.getBandWidth()),r=Math.PI/180;return"angle"===t.dim?{type:"Sector",shape:FM(e.cx,e.cy,n[0],n[1],(-i-o/2)*r,(o/2-i)*r)}:{type:"Sector",shape:FM(e.cx,e.cy,i-o/2,i+o/2,0,2*Math.PI)}}};function JI(n,t){t.update="updateView",$d(t,function(t,e){var i={};return e.eachComponent({mainType:"geo",query:t},function(e){e[n](t.name),L(e.coordinateSystem.regions,function(t){i[t.name]=e.isSelected(t.name)||!1})}),{selected:i,name:t.name}})}Gm.registerAxisPointerClass("PolarAxisPointer",KI),Qd(A(function(t,e,i){var P={},N=function(t){var g={};L(t,function(t,e){var i=t.getData(),n=t.coordinateSystem,a=n.getBaseAxis(),o=OI(n,a),r=a.getExtent(),s="category"===a.type?a.getBandWidth():Math.abs(r[1]-r[0])/i.count(),l=g[o]||{bandWidth:s,remainedWidth:s,autoWidthCount:0,categoryGap:"20%",gap:"30%",stacks:{}},u=l.stacks;g[o]=l;var h=NI(t);u[h]||l.autoWidthCount++,u[h]=u[h]||{width:0,maxWidth:0};var c=ml(t.get("barWidth"),s),d=ml(t.get("barMaxWidth"),s),f=t.get("barGap"),p=t.get("barCategoryGap");c&&!u[h].width&&(c=Math.min(l.remainedWidth,c),u[h].width=c,l.remainedWidth-=c),d&&(u[h].maxWidth=d),null!=f&&(l.gap=f),null!=p&&(l.categoryGap=p)});var d={};return L(g,function(t,i){d[i]={};var e=t.stacks,n=t.bandWidth,a=ml(t.categoryGap,n),o=ml(t.gap,1),r=t.remainedWidth,s=t.autoWidthCount,l=(r-a)/(s+(s-1)*o);l=Math.max(l,0),L(e,function(t,e){var i=t.maxWidth;i&&i=n.start.time&&i.timeo.end.time&&t.reverse(),t},_getRangeInfo:function(t){var e;(t=[this.getDateInfo(t[0]),this.getDateInfo(t[1])])[0].time>t[1].time&&(e=!0,t.reverse());var i=Math.floor(t[1].time/864e5)-Math.floor(t[0].time/864e5)+1,n=new Date(t[0].time),a=n.getDate(),o=t[1].date.getDate();if(n.setDate(a+i-1),n.getDate()!==o)for(var r=0n.weeks||0===t&&en.lweek)return!1;var a=7*(t-1)-n.fweek+e,o=new Date(n.start.time);return o.setDate(n.start.d+a),this.getDateInfo(o)}},QI.dimensions=QI.prototype.dimensions,QI.getDimensionsInfo=QI.prototype.getDimensionsInfo,QI.create=function(i,n){var a=[];return i.eachComponent("calendar",function(t){var e=new QI(t,i,n);a.push(e),t.coordinateSystem=e}),i.eachSeries(function(t){"calendar"===t.get("coordinateSystem")&&(t.coordinateSystem=a[t.get("calendarIndex")||0])}),a},Gu.register("calendar",QI);var eA=hu.extend({type:"calendar",coordinateSystem:null,defaultOption:{zlevel:0,z:2,left:80,top:60,cellSize:20,orient:"horizontal",splitLine:{show:!0,lineStyle:{color:"#000",width:1,type:"solid"}},itemStyle:{color:"#fff",borderWidth:1,borderColor:"#ccc"},dayLabel:{show:!0,firstDay:0,position:"start",margin:"50%",nameMap:"en",color:"#000"},monthLabel:{show:!0,position:"start",margin:5,align:"center",nameMap:"en",formatter:null,color:"#000"},yearLabel:{show:!0,position:null,margin:30,formatter:null,color:"#ccc",fontFamily:"sans-serif",fontWeight:"bolder",fontSize:20}},init:function(t,e,i,n){var a=au(t);eA.superApply(this,"init",arguments),iA(t,a)},mergeOption:function(t,e){eA.superApply(this,"mergeOption",arguments),iA(this.option,t)}});function iA(t,e){var i=t.cellSize;O(i)?1===i.length&&(i[1]=i[0]):i=t.cellSize=[i,i];var n=k([0,1],function(t){return function(t,e){return null!=t[Jl[e][0]]||null!=t[Jl[e][1]]&&null!=t[Jl[e][2]]}(e,t)&&(i[t]="auto"),null!=i[t]&&"auto"!==i[t]});nu(t,e,{type:"box",ignoreSize:n})}var nA={EN:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],CN:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"]},aA={EN:["S","M","T","W","T","F","S"],CN:["日","一","二","三","四","五","六"]};of({type:"calendar",_tlpoints:null,_blpoints:null,_firstDayOfMonth:null,_firstDayPoints:null,render:function(t,e,i){var n=this.group;n.removeAll();var a=t.coordinateSystem,o=a.getRangeInfo(),r=a.getOrient();this._renderDayRect(t,o,n),this._renderLines(t,o,r,n),this._renderYearText(t,o,r,n),this._renderMonthText(t,r,n),this._renderWeekText(t,o,r,n)},_renderDayRect:function(t,e,i){for(var n=t.coordinateSystem,a=t.getModel("itemStyle").getItemStyle(),o=n.getCellWidth(),r=n.getCellHeight(),s=e.start.time;s<=e.end.time;s=n.getNextNDay(s,1).time){var l=n.dataToRect([s],!1).tl,u=new Hr({shape:{x:l[0],y:l[1],width:o,height:r},cursor:"default",style:a});i.add(u)}},_renderLines:function(i,t,n,a){var o=this,r=i.coordinateSystem,s=i.getModel("splitLine.lineStyle").getLineStyle(),l=i.get("splitLine.show"),e=s.lineWidth;this._tlpoints=[],this._blpoints=[],this._firstDayOfMonth=[],this._firstDayPoints=[];for(var u=t.start,h=0;u.time<=t.end.time;h++){d(u.formatedDate),0===h&&(u=r.getDateInfo(t.start.y+"-"+t.start.m));var c=u.date;c.setMonth(c.getMonth()+1),u=r.getDateInfo(c)}function d(t){o._firstDayOfMonth.push(r.getDateInfo(t)),o._firstDayPoints.push(r.dataToRect([t],!1).tl);var e=o._getLinePointsOfOneWeek(i,t,n);o._tlpoints.push(e[0]),o._blpoints.push(e[e.length-1]),l&&o._drawSplitline(e,s,a)}d(r.getNextNDay(t.end.time,1).formatedDate),l&&this._drawSplitline(o._getEdgesPoints(o._tlpoints,e,n),s,a),l&&this._drawSplitline(o._getEdgesPoints(o._blpoints,e,n),s,a)},_getEdgesPoints:function(t,e,i){var n=[t[0].slice(),t[t.length-1].slice()],a="horizontal"===i?0:1;return n[0][a]=n[0][a]-e/2,n[1][a]=n[1][a]+e/2,n},_drawSplitline:function(t,e,i){var n=new Er({z2:20,shape:{points:t},style:e});i.add(n)},_getLinePointsOfOneWeek:function(t,e,i){var n=t.coordinateSystem;e=n.getDateInfo(e);for(var a=[],o=0;o<7;o++){var r=n.getNextNDay(e.time,o),s=n.dataToRect([r.time],!1);a[2*r.day]=s.tl,a[2*r.day+1]=s["horizontal"===i?"bl":"tr"]}return a},_formatterLabel:function(t,e){return"string"==typeof t&&t?Hl(t,e):"function"==typeof t?t(e):e.nameMap},_yearTextPositionControl:function(t,e,i,n,a){e=e.slice();var o=["center","bottom"];"bottom"===n?(e[1]+=a,o=["center","top"]):"left"===n?e[0]-=a:"right"===n?(e[0]+=a,o=["center","top"]):e[1]-=a;var r=0;return"left"!==n&&"right"!==n||(r=Math.PI/2),{rotation:r,position:e,style:{textAlign:o[0],textVerticalAlign:o[1]}}},_renderYearText:function(t,e,i,n){var a=t.getModel("yearLabel");if(a.get("show")){var o=a.get("margin"),r=a.get("position");r=r||("horizontal"!==i?"top":"left");var s=[this._tlpoints[this._tlpoints.length-1],this._blpoints[0]],l=(s[0][0]+s[1][0])/2,u=(s[0][1]+s[1][1])/2,h="horizontal"===i?0:1,c={top:[l,s[h][1]],bottom:[l,s[1-h][1]],left:[s[1-h][0],u],right:[s[h][0],u]},d=e.start.y;+e.end.y>+e.start.y&&(d=d+"-"+e.end.y);var f=a.get("formatter"),p={start:e.start.y,end:e.end.y,nameMap:d},g=this._formatterLabel(f,p),m=new Dr({z2:30});Es(m.style,a,{text:g}),m.attr(this._yearTextPositionControl(m,c[r],i,r,o)),n.add(m)}},_monthTextPositionControl:function(t,e,i,n,a){var o="left",r="top",s=t[0],l=t[1];return"horizontal"===i?(l+=a,e&&(o="center"),"start"===n&&(r="bottom")):(s+=a,e&&(r="middle"),"start"===n&&(o="right")),{x:s,y:l,textAlign:o,textVerticalAlign:r}},_renderMonthText:function(t,e,i){var n=t.getModel("monthLabel");if(n.get("show")){var a=n.get("nameMap"),o=n.get("margin"),r=n.get("position"),s=n.get("align"),l=[this._tlpoints,this._blpoints];R(a)&&(a=nA[a.toUpperCase()]||[]);var u="start"===r?0:1,h="horizontal"===e?0:1;o="start"===r?-o:o;for(var c="center"===s,d=0;dd.getHeight()&&(i.textPosition="top",o=!0);var r=o?-5-n.height:p+8;a+n.width/2>d.getWidth()?(i.textPosition=["100%",r],i.textAlign="right"):a-n.width/2<0&&(i.textPosition=[0,r],i.textAlign="left")}})}function t(t,e){var i,n=g[t],a=g[e],o=new ul(l[n],h,h.ecModel);if(n&&!a){if(function(t){return 0===t.indexOf("my")}(n))i={model:o,onclick:o.option.onclick,featureName:n};else{var r=cA(n);if(!r)return;i=new r(o,c,d)}u[n]=i}else{if(!(i=u[a]))return;i.model=o,i.ecModel=c,i.api=d}n||!a?o.get("show")&&!i.unusable?(function(a,o,t){var r=a.getModel("iconStyle"),s=a.getModel("emphasis.iconStyle"),e=o.getIcons?o.getIcons():a.get("icon"),l=a.get("title")||{};if("string"==typeof e){var i=e,n=l;l={},(e={})[t]=i,l[t]=n}var u=a.iconPaths={};L(e,function(t,e){var i=Js(t,{},{x:-p/2,y:-p/2,width:p,height:p});i.setStyle(r.getItemStyle()),i.hoverStyle=s.getItemStyle();var n=h.getModel("tooltip");n&&n.get("show")&&i.attr("tooltip",C({content:l[e],formatter:n.get("formatter",!0)||function(){return l[e]},formatterParams:{componentType:"toolbox",name:e,title:l[e],$vars:["name","title"]},position:n.get("position",!0)||"bottom"},n.option)),ks(i),h.get("showTitle")&&(i.__title=l[e],i.on("mouseover",function(){var t=s.getItemStyle();i.setStyle({text:l[e],textPosition:s.get("textPosition")||"bottom",textFill:s.get("textFill")||t.fill||t.stroke||"#000",textAlign:s.get("textAlign")||"center",textBackgroundColor:s.get("textBackgroundColor"),textBorderRadius:s.get("textBorderRadius"),textPadding:s.get("textPadding")})}).on("mouseout",function(){i.setStyle({textFill:null,textBackgroundColor:null})})),i.trigger(a.get("iconStatus."+e)||"normal"),f.add(i),i.on("click",N(o.onclick,o,c,d,e)),u[e]=i})}(o,i,n),o.setIconStatus=function(t,e){var i=this.option,n=this.iconPaths;i.iconStatus=i.iconStatus||{},i.iconStatus[t]=e,n[t]&&n[t].trigger(e)},i.render&&i.render(o,c,d,s)):i.remove&&i.remove(c,d):i.dispose&&i.dispose(c,d)}},updateView:function(t,e,i,n){L(this._features,function(t){t.updateView&&t.updateView(t.model,e,i,n)})},remove:function(e,i){L(this._features,function(t){t.remove&&t.remove(e,i)}),this.group.removeAll()},dispose:function(e,i){L(this._features,function(t){t.dispose&&t.dispose(e,i)})}});var pA=dc.toolbox.saveAsImage;function gA(t){this.model=t}gA.defaultOption={show:!0,icon:"M4.7,22.9L29.3,45.5L54.7,23.4M4.6,43.6L4.6,58L53.8,58L53.8,43.6M29.2,45.1L29.2,0",title:pA.title,type:"png",connectedBackgroundColor:"#fff",name:"",excludeComponents:["toolbox"],pixelRatio:1,lang:pA.lang.slice()},gA.prototype.unusable=!v.canvasSupported,gA.prototype.onclick=function(t,e){var i=this.model,n=i.get("name")||t.get("title.0.text")||"echarts",a=i.get("type",!0)||"png",o=e.getConnectedDataURL({type:a,backgroundColor:i.get("backgroundColor",!0)||t.get("backgroundColor")||"#fff",connectedBackgroundColor:i.get("connectedBackgroundColor"),excludeComponents:i.get("excludeComponents"),pixelRatio:i.get("pixelRatio")});if("function"!=typeof MouseEvent||v.browser.ie||v.browser.edge)if(window.navigator.msSaveOrOpenBlob){for(var r=atob(o.split(",")[1]),s=r.length,l=new Uint8Array(s);s--;)l[s]=r.charCodeAt(s);var u=new Blob([l]);window.navigator.msSaveOrOpenBlob(u,n+"."+a)}else{var h=i.get("lang"),c='';window.open().document.write(c)}else{var d=document.createElement("a");d.download=n+"."+a,d.target="_blank",d.href=o;var f=new MouseEvent("click",{view:window,bubbles:!0,cancelable:!1});d.dispatchEvent(f)}},hA("saveAsImage",gA);var mA=dc.toolbox.magicType;function vA(t){this.model=t}vA.defaultOption={show:!0,type:[],icon:{line:"M4.1,28.9h7.1l9.3-22l7.4,38l9.7-19.7l3,12.8h14.9M4.1,58h51.4",bar:"M6.7,22.9h10V48h-10V22.9zM24.9,13h10v35h-10V13zM43.2,2h10v46h-10V2zM3.1,58h53.7",stack:"M8.2,38.4l-8.4,4.1l30.6,15.3L60,42.5l-8.1-4.1l-21.5,11L8.2,38.4z M51.9,30l-8.1,4.2l-13.4,6.9l-13.9-6.9L8.2,30l-8.4,4.2l8.4,4.2l22.2,11l21.5-11l8.1-4.2L51.9,30z M51.9,21.7l-8.1,4.2L35.7,30l-5.3,2.8L24.9,30l-8.4-4.1l-8.3-4.2l-8.4,4.2L8.2,30l8.3,4.2l13.9,6.9l13.4-6.9l8.1-4.2l8.1-4.1L51.9,21.7zM30.4,2.2L-0.2,17.5l8.4,4.1l8.3,4.2l8.4,4.2l5.5,2.7l5.3-2.7l8.1-4.2l8.1-4.2l8.1-4.1L30.4,2.2z",tiled:"M2.3,2.2h22.8V25H2.3V2.2z M35,2.2h22.8V25H35V2.2zM2.3,35h22.8v22.8H2.3V35z M35,35h22.8v22.8H35V35z"},title:D(mA.title),option:{},seriesIndex:{}};var yA=vA.prototype;yA.getIcons=function(){var t=this.model,e=t.get("icon"),i={};return L(t.get("type"),function(t){e[t]&&(i[t]=e[t])}),i};var xA={line:function(t,e,i,n){if("bar"===t)return m({id:e,type:"line",data:i.get("data"),stack:i.get("stack"),markPoint:i.get("markPoint"),markLine:i.get("markLine")},n.get("option.line")||{},!0)},bar:function(t,e,i,n){if("line"===t)return m({id:e,type:"bar",data:i.get("data"),stack:i.get("stack"),markPoint:i.get("markPoint"),markLine:i.get("markLine")},n.get("option.bar")||{},!0)},stack:function(t,e,i,n){if("line"===t||"bar"===t)return m({id:e,stack:"__ec_magicType_stack__"},n.get("option.stack")||{},!0)},tiled:function(t,e,i,n){if("line"===t||"bar"===t)return m({id:e,stack:""},n.get("option.tiled")||{},!0)}},_A=[["line","bar"],["stack","tiled"]];yA.onclick=function(u,t,h){var c=this.model,e=c.get("seriesIndex."+h);if(xA[h]){var d={series:[]};L(_A,function(t){0<=_(t,h)&&L(t,function(t){c.setIconStatus(t,"normal")})}),c.setIconStatus(h,"emphasis"),u.eachComponent({mainType:"series",query:null==e?null:{seriesIndex:e}},function(t){var e=t.subType,i=t.id,n=xA[h](e,i,t,c);n&&(T(n,t.option),d.series.push(n));var a=t.coordinateSystem;if(a&&"cartesian2d"===a.type&&("line"===h||"bar"===h)){var o=a.getAxesByScale("ordinal")[0];if(o){var r=o.dim+"Axis",s=u.queryComponents({mainType:r,index:t.get(name+"Index"),id:t.get(name+"Id")})[0].componentIndex;d[r]=d[r]||[];for(var l=0;l<=s;l++)d[r][s]=d[r][s]||{};d[r][s].boundaryGap="bar"===h}}}),t.dispatchAction({type:"changeMagicType",currentType:h,newOption:d})}},$d({type:"changeMagicType",event:"magicTypeChanged",update:"prepareAndUpdate"},function(t,e){e.mergeOption(t.newOption)}),hA("magicType",vA);var wA=dc.toolbox.dataView,bA=new Array(60).join("-"),SA="\t";function MA(t){var e=function(t){var a={},o=[],r=[];return t.eachRawSeries(function(t){var e=t.coordinateSystem;if(!e||"cartesian2d"!==e.type&&"polar"!==e.type)o.push(t);else{var i=e.getBaseAxis();if("category"===i.type){var n=i.dim+"_"+i.index;a[n]||(a[n]={categoryAxis:i,valueAxis:e.getOtherAxis(i),series:[]},r.push({axisDim:i.dim,axisIndex:i.index})),a[n].series.push(t)}else o.push(t)}}),{seriesGroupByCategoryAxis:a,other:o,meta:r}}(t);return{value:M([function(t){var h=[];return L(t,function(t,e){var i=t.categoryAxis,n=t.valueAxis.dim,a=[" "].concat(k(t.series,function(t){return t.name})),o=[i.model.getCategories()];L(t.series,function(t){o.push(t.getRawData().mapArray(n,function(t){return t}))});for(var r=[a.join(SA)],s=0;st[1]&&t.reverse(),t}function EA(t,e){return Pa(t,e,{includeMainTypes:NA})}zA.setOutputRanges=function(t,e){this.matchOutputRanges(t,e,function(t,e,i){if((t.coordRanges||(t.coordRanges=[])).push(e),!t.coordRange){t.coordRange=e;var n=FA[t.brushType](0,i,e);t.__rangeOffset={offset:HA[t.brushType](n.values,t.range,[1,1]),xyMinMax:n.xyMinMax}}})},zA.matchOutputRanges=function(t,n,a){CA(t,function(i){var t=this.findTargetInfo(i,n);t&&!0!==t&&L(t.coordSyses,function(t){var e=FA[i.brushType](1,t,i.range);a(i,e.values,t,n)})},this)},zA.setInputRanges=function(t,a){CA(t,function(t){var e=this.findTargetInfo(t,a);if(t.range=t.range||[],e&&!0!==e){t.panelId=e.panelId;var i=FA[t.brushType](0,e.coordSys,t.coordRange),n=t.__rangeOffset;t.range=n?HA[t.brushType](i.values,n.offset,function(t,e){var i=UA(t),n=UA(e),a=[i[0]/n[0],i[1]/n[1]];return isNaN(a[0])&&(a[0]=1),isNaN(a[1])&&(a[1]=1),a}(i.xyMinMax,n.xyMinMax)):i.values}},this)},zA.makePanelOpts=function(i,n){return k(this._targetInfoList,function(t){var e=t.getPanelRect();return{panelId:t.panelId,defaultBrushType:n&&n(t),clipPath:pb(e),isTargetByCursor:mb(e,i,t.coordSysModel),getLinearBrushOtherExtent:gb(e)}})},zA.controlSeries=function(t,e,i){var n=this.findTargetInfo(t,i);return!0===n||n&&0<=LA(n.coordSyses,e.coordinateSystem)},zA.findTargetInfo=function(t,e){for(var i=this._targetInfoList,n=EA(e,t),a=0;an[1]&&(n[1]=e[1])})}),n[1]c[1];if(r&&!s&&!l)return!0;r&&(n=!0),s&&(e=!0),l&&(i=!0)}return n&&e&&i}):nT(h,function(t){if("empty"===a)i.setData(u=u.map(t,function(t){return function(t){return t>=c[0]&&t<=c[1]}(t)?t:NaN}));else{var e={};e[t]=c,u.selectRange(e)}}),nT(h,function(t){u.setApproximateExtent(c,t)}))})}}};var rT=L,sT=tT,lT=af({type:"dataZoom",dependencies:["xAxis","yAxis","zAxis","radiusAxis","angleAxis","singleAxis","series"],defaultOption:{zlevel:0,z:4,orient:null,xAxisIndex:null,yAxisIndex:null,filterMode:"filter",throttle:null,start:0,end:100,startValue:null,endValue:null,minSpan:null,maxSpan:null,minValueSpan:null,maxValueSpan:null,rangeMode:null},init:function(t,e,i){this._dataIntervalByAxis={},this._dataInfo={},this._axisProxies={},this.textStyleModel,this._autoThrottle=!0,this._rangePropMode=["percent","percent"];var n=uT(t);this.mergeDefaultAndTheme(t,i),this.doInit(n)},mergeOption:function(t){var e=uT(t);m(this.option,t,!0),this.doInit(e)},doInit:function(t){var i=this.option;v.canvasSupported||(i.realtime=!1),this._setDefaultThrottle(t),hT(this,t),rT([["start","startValue"],["end","endValue"]],function(t,e){"value"===this._rangePropMode[e]&&(i[t[0]]=null)},this),this.textStyleModel=this.getModel("textStyle"),this._resetTarget(),this._giveAxisProxies()},_giveAxisProxies:function(){var r=this._axisProxies;this.eachTargetAxis(function(t,e,i,n){var a=this.dependentModels[t.axis][e],o=a.__dzAxisProxy||(a.__dzAxisProxy=new iT(t.name,e,this,n));r[t.name+"_"+e]=o},this)},_resetTarget:function(){var i=this.option,t=this._judgeAutoMode();sT(function(t){var e=t.axisIndex;i[e]=wa(i[e])},this),"axisIndex"===t?this._autoSetAxisIndex():"orient"===t&&this._autoSetOrient()},_judgeAutoMode:function(){var e=this.option,i=!1;sT(function(t){null!=e[t.axisIndex]&&(i=!0)},this);var t=e.orient;return null==t&&i?"orient":i?void 0:(null==t&&(e.orient="horizontal"),"axisIndex")},_autoSetAxisIndex:function(){var o=!0,e=this.get("orient",!0),r=this.option,t=this.dependentModels;if(o){var i="vertical"===e?"y":"x";t[i+"Axis"].length?(r[i+"AxisIndex"]=[0],o=!1):rT(t.singleAxis,function(t){o&&t.get("orient",!0)===e&&(r.singleAxisIndex=[t.componentIndex],o=!1)})}o&&sT(function(t){if(o){var e=[],i=this.dependentModels[t.axis];if(i.length&&!e.length)for(var n=0,a=i.length;ne[0][1]&&(e[0][1]=o[0]),o[1]e[1][1]&&(e[1][1]=o[1])}return e&&qT(e)}};function qT(t){return new bi(t[0][0],t[1][0],t[0][1]-t[0][0],t[1][1]-t[1][0])}var KT=["#ddd"];af({type:"brush",dependencies:["geo","grid","xAxis","yAxis","parallel","series"],defaultOption:{toolbox:null,brushLink:null,seriesIndex:"all",geoIndex:null,xAxisIndex:null,yAxisIndex:null,brushType:"rect",brushMode:"single",transformable:!0,brushStyle:{borderWidth:1,color:"rgba(120,140,180,0.3)",borderColor:"rgba(120,140,180,0.8)"},throttleType:"fixRate",throttleDelay:0,removeOnClick:!0,z:1e4},areas:[],brushType:null,brushOption:{},coordInfoList:[],optionUpdated:function(t,e){var i=this.option;e||ET(i,t,["inBrush","outOfBrush"]);var n=i.inBrush=i.inBrush||{};i.outOfBrush=i.outOfBrush||{color:KT},n.hasOwnProperty("liftZ")||(n.liftZ=5)},setAreas:function(t){t&&(this.areas=k(t,function(t){return $T(this.option,t)},this))},setBrushOption:function(t){this.brushOption=$T(this.option,t),this.brushType=this.brushOption.brushType}});function $T(t,e){return m({brushType:t.brushType,brushMode:t.brushMode,transformable:t.transformable,brushStyle:new ul(t.brushStyle).getItemStyle(),removeOnClick:t.removeOnClick,z:t.z},e,!0)}function JT(t,e,i,n){n&&n.$from===t.id||this._brushController.setPanels(t.brushTargetManager.makePanelOpts(i)).enableBrush(t.brushOption).updateCovers(t.areas.slice())}of({type:"brush",init:function(t,e){this.ecModel=t,this.api=e,this.model,(this._brushController=new Bw(e.getZr())).on("brush",N(this._onBrush,this)).mount()},render:function(t){return this.model=t,JT.apply(this,arguments)},updateTransform:JT,updateView:JT,dispose:function(){this._brushController.dispose()},_onBrush:function(t,e){var i=this.model.id;this.model.brushTargetManager.setOutputRanges(t,this.ecModel),e.isEnd&&!e.removeOnClick||this.api.dispatchAction({type:"brush",brushId:i,areas:D(t),$from:i})}}),$d({type:"brush",event:"brush"},function(e,t){t.eachComponent({mainType:"brush",query:e},function(t){t.setAreas(e.areas)})}),$d({type:"brushSelect",event:"brushSelected",update:"none"},function(){});var QT=dc.toolbox.brush;function tD(t,e,i){this.model=t,this.ecModel=e,this.api=i,this._brushType,this._brushMode}tD.defaultOption={show:!0,type:["rect","polygon","lineX","lineY","keep","clear"],icon:{rect:"M7.3,34.7 M0.4,10V-0.2h9.8 M89.6,10V-0.2h-9.8 M0.4,60v10.2h9.8 M89.6,60v10.2h-9.8 M12.3,22.4V10.5h13.1 M33.6,10.5h7.8 M49.1,10.5h7.8 M77.5,22.4V10.5h-13 M12.3,31.1v8.2 M77.7,31.1v8.2 M12.3,47.6v11.9h13.1 M33.6,59.5h7.6 M49.1,59.5 h7.7 M77.5,47.6v11.9h-13",polygon:"M55.2,34.9c1.7,0,3.1,1.4,3.1,3.1s-1.4,3.1-3.1,3.1 s-3.1-1.4-3.1-3.1S53.5,34.9,55.2,34.9z M50.4,51c1.7,0,3.1,1.4,3.1,3.1c0,1.7-1.4,3.1-3.1,3.1c-1.7,0-3.1-1.4-3.1-3.1 C47.3,52.4,48.7,51,50.4,51z M55.6,37.1l1.5-7.8 M60.1,13.5l1.6-8.7l-7.8,4 M59,19l-1,5.3 M24,16.1l6.4,4.9l6.4-3.3 M48.5,11.6 l-5.9,3.1 M19.1,12.8L9.7,5.1l1.1,7.7 M13.4,29.8l1,7.3l6.6,1.6 M11.6,18.4l1,6.1 M32.8,41.9 M26.6,40.4 M27.3,40.2l6.1,1.6 M49.9,52.1l-5.6-7.6l-4.9-1.2",lineX:"M15.2,30 M19.7,15.6V1.9H29 M34.8,1.9H40.4 M55.3,15.6V1.9H45.9 M19.7,44.4V58.1H29 M34.8,58.1H40.4 M55.3,44.4 V58.1H45.9 M12.5,20.3l-9.4,9.6l9.6,9.8 M3.1,29.9h16.5 M62.5,20.3l9.4,9.6L62.3,39.7 M71.9,29.9H55.4",lineY:"M38.8,7.7 M52.7,12h13.2v9 M65.9,26.6V32 M52.7,46.3h13.2v-9 M24.9,12H11.8v9 M11.8,26.6V32 M24.9,46.3H11.8v-9 M48.2,5.1l-9.3-9l-9.4,9.2 M38.9-3.9V12 M48.2,53.3l-9.3,9l-9.4-9.2 M38.9,62.3V46.4",keep:"M4,10.5V1h10.3 M20.7,1h6.1 M33,1h6.1 M55.4,10.5V1H45.2 M4,17.3v6.6 M55.6,17.3v6.6 M4,30.5V40h10.3 M20.7,40 h6.1 M33,40h6.1 M55.4,30.5V40H45.2 M21,18.9h62.9v48.6H21V18.9z",clear:"M22,14.7l30.9,31 M52.9,14.7L22,45.7 M4.7,16.8V4.2h13.1 M26,4.2h7.8 M41.6,4.2h7.8 M70.3,16.8V4.2H57.2 M4.7,25.9v8.6 M70.3,25.9v8.6 M4.7,43.2v12.6h13.1 M26,55.8h7.8 M41.6,55.8h7.8 M70.3,43.2v12.6H57.2"},title:D(QT.title)};var eD=tD.prototype;eD.render=eD.updateView=function(e,t,i){var n,a,o;t.eachComponent({mainType:"brush"},function(t){n=t.brushType,a=t.brushOption.brushMode||"single",o|=t.areas.length}),this._brushType=n,this._brushMode=a,L(e.get("type",!0),function(t){e.setIconStatus(t,("keep"===t?"multiple"===a:"clear"===t?o:t===n)?"emphasis":"normal")})},eD.getIcons=function(){var t=this.model,e=t.get("icon",!0),i={};return L(t.get("type",!0),function(t){e[t]&&(i[t]=e[t])}),i},eD.onclick=function(t,e,i){var n=this._brushType,a=this._brushMode;"clear"===i?(e.dispatchAction({type:"axisAreaSelect",intervals:[]}),e.dispatchAction({type:"brush",command:"clear",areas:[]})):e.dispatchAction({type:"takeGlobalCursor",key:"brush",brushOption:{brushType:"keep"===i?n:n!==i&&i,brushMode:"keep"===i?"multiple"===a?"single":"multiple":a}})},hA("brush",tD),qd(function(t,e){var i=t&&t.brush;if(O(i)||(i=i?[i]:[]),i.length){var n=[];L(i,function(t){var e=t.hasOwnProperty("toolbox")?t.toolbox:[];e instanceof Array&&(n=n.concat(e))});var a=t&&t.toolbox;O(a)&&(a=a[0]),a||(a={feature:{}},t.toolbox=[a]);var o=a.feature||(a.feature={}),r=o.brush||(o.brush={}),s=r.type||(r.type=[]);s.push.apply(s,n),function(i){var e={};L(i,function(t){e[t]=1}),i.length=0,L(e,function(t,e){i.push(e)})}(s),e&&!s.length&&s.push.apply(s,NT)}}),af({type:"title",layoutMode:{type:"box",ignoreSize:!0},defaultOption:{zlevel:0,z:6,show:!0,text:"",target:"blank",subtext:"",subtarget:"blank",left:0,top:0,backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:10,textStyle:{fontSize:18,fontWeight:"bolder",color:"#333"},subtextStyle:{color:"#aaa"}}}),of({type:"title",render:function(t,e,i){if(this.group.removeAll(),t.get("show")){var n=this.group,a=t.getModel("textStyle"),o=t.getModel("subtextStyle"),r=t.get("textAlign"),s=H(t.get("textBaseline"),t.get("textVerticalAlign")),l=new Dr({style:Es({},a,{text:t.get("text"),textFill:a.getTextColor()},{disableBox:!0}),z2:10}),u=l.getBoundingRect(),h=t.get("subtext"),c=new Dr({style:Es({},o,{text:h,textFill:o.getTextColor(),y:u.height+t.get("itemGap"),textVerticalAlign:"top"},{disableBox:!0}),z2:10}),d=t.get("link"),f=t.get("sublink"),p=t.get("triggerEvent",!0);l.silent=!d&&!p,c.silent=!f&&!p,d&&l.on("click",function(){window.open(d,"_"+t.get("target"))}),f&&c.on("click",function(){window.open(f,"_"+t.get("subtarget"))}),l.eventData=c.eventData=p?{componentType:"title",componentIndex:t.componentIndex}:null,n.add(l),h&&n.add(c);var g=n.getBoundingRect(),m=t.getBoxLayoutParams();m.width=g.width,m.height=g.height;var v=eu(m,{width:i.getWidth(),height:i.getHeight()},t.get("padding"));r||("middle"===(r=t.get("left")||t.get("right"))&&(r="center"),"right"===r?v.x+=v.width:"center"===r&&(v.x+=v.width/2)),s||("center"===(s=t.get("top")||t.get("bottom"))&&(s="middle"),"bottom"===s?v.y+=v.height:"middle"===s&&(v.y+=v.height/2),s=s||"top"),n.attr("position",[v.x,v.y]);var y={textAlign:r,textVerticalAlign:s};l.setStyle(y),c.setStyle(y),g=n.getBoundingRect();var x=v.margin,_=t.getItemStyle(["color","opacity"]);_.fill=t.get("backgroundColor");var w=new Hr({shape:{x:g.x-x[3],y:g.y-x[0],width:g.width+x[1]+x[3],height:g.height+x[0]+x[2],r:t.get("borderRadius")},style:_,subPixelOptimize:!0,silent:!0});n.add(w)}}});function iD(t){var e=t.itemStyle||(t.itemStyle={}),i=e.emphasis||(e.emphasis={}),n=t.label||t.label||{},a=n.normal||(n.normal={}),o={normal:1,emphasis:1};L(n,function(t,e){o[e]||nD(a,e)||(a[e]=t)}),i.label&&!nD(n,"emphasis")&&(n.emphasis=i.label,delete i.label)}function nD(t,e){return t.hasOwnProperty(e)}hu.registerSubTypeDefaulter("timeline",function(){return"slider"}),$d({type:"timelineChange",event:"timelineChanged",update:"prepareAndUpdate"},function(t,e){var i=e.getComponent("timeline");return i&&null!=t.currentIndex&&(i.setCurrentIndex(t.currentIndex),!i.get("loop",!0)&&i.isIndexMax()&&i.setPlayState(!1)),e.resetOption("timeline"),T({currentIndex:i.option.currentIndex},t)}),$d({type:"timelinePlayChange",event:"timelinePlayChanged",update:"update"},function(t,e){var i=e.getComponent("timeline");i&&null!=t.playState&&i.setPlayState(t.playState)});var aD=hu.extend({type:"timeline",layoutMode:"box",defaultOption:{zlevel:0,z:4,show:!0,axisType:"time",realtime:!0,left:"20%",top:null,right:"20%",bottom:0,width:null,height:40,padding:5,controlPosition:"left",autoPlay:!1,rewind:!1,loop:!0,playInterval:2e3,currentIndex:0,itemStyle:{},label:{color:"#000"},data:[]},init:function(t,e,i){this._data,this._names,this.mergeDefaultAndTheme(t,i),this._initData()},mergeOption:function(t){aD.superApply(this,"mergeOption",arguments),this._initData()},setCurrentIndex:function(t){null==t&&(t=this.option.currentIndex);var e=this._data.count();this.option.loop?t=(t%e+e)%e:(e<=t&&(t=e-1),t<0&&(t=0)),this.option.currentIndex=t},getCurrentIndex:function(){return this.option.currentIndex},isIndexMax:function(){return this.getCurrentIndex()>=this._data.count()-1},setPlayState:function(t){this.option.autoPlay=!!t},getPlayState:function(){return!!this.option.autoPlay},_initData:function(){var t=this.option,e=t.data||[],i=t.axisType,a=this._names=[];if("category"===i){var o=[];L(e,function(t,e){var i,n=Ma(t);E(t)?(i=D(t)).value=e:i=e,o.push(i),R(n)||null!=n&&!isNaN(n)||(n=""),a.push(n+"")}),e=o}var n={category:"ordinal",time:"time"}[i]||"number";(this._data=new Mf([{name:"value",type:n}],this)).initData(e,a)},getData:function(){return this._data},getCategories:function(){if("category"===this.get("axisType"))return this._names.slice()}});b(aD.extend({type:"timeline.slider",defaultOption:{backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,orient:"horizontal",inverse:!1,tooltip:{trigger:"item"},symbol:"emptyCircle",symbolSize:10,lineStyle:{show:!0,width:2,color:"#304654"},label:{position:"auto",show:!0,interval:"auto",rotate:0,color:"#304654"},itemStyle:{color:"#304654",borderWidth:1},checkpointStyle:{symbol:"circle",symbolSize:13,color:"#c23531",borderWidth:5,borderColor:"rgba(194,53,49, 0.5)",animation:!0,animationDuration:300,animationEasing:"quinticInOut"},controlStyle:{show:!0,showPlayBtn:!0,showPrevBtn:!0,showNextBtn:!0,itemSize:22,itemGap:12,position:"left",playIcon:"path://M31.6,53C17.5,53,6,41.5,6,27.4S17.5,1.8,31.6,1.8C45.7,1.8,57.2,13.3,57.2,27.4S45.7,53,31.6,53z M31.6,3.3 C18.4,3.3,7.5,14.1,7.5,27.4c0,13.3,10.8,24.1,24.1,24.1C44.9,51.5,55.7,40.7,55.7,27.4C55.7,14.1,44.9,3.3,31.6,3.3z M24.9,21.3 c0-2.2,1.6-3.1,3.5-2l10.5,6.1c1.899,1.1,1.899,2.9,0,4l-10.5,6.1c-1.9,1.1-3.5,0.2-3.5-2V21.3z",stopIcon:"path://M30.9,53.2C16.8,53.2,5.3,41.7,5.3,27.6S16.8,2,30.9,2C45,2,56.4,13.5,56.4,27.6S45,53.2,30.9,53.2z M30.9,3.5C17.6,3.5,6.8,14.4,6.8,27.6c0,13.3,10.8,24.1,24.101,24.1C44.2,51.7,55,40.9,55,27.6C54.9,14.4,44.1,3.5,30.9,3.5z M36.9,35.8c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H36c0.5,0,0.9,0.4,0.9,1V35.8z M27.8,35.8 c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H27c0.5,0,0.9,0.4,0.9,1L27.8,35.8L27.8,35.8z",nextIcon:"path://M18.6,50.8l22.5-22.5c0.2-0.2,0.3-0.4,0.3-0.7c0-0.3-0.1-0.5-0.3-0.7L18.7,4.4c-0.1-0.1-0.2-0.3-0.2-0.5 c0-0.4,0.3-0.8,0.8-0.8c0.2,0,0.5,0.1,0.6,0.3l23.5,23.5l0,0c0.2,0.2,0.3,0.4,0.3,0.7c0,0.3-0.1,0.5-0.3,0.7l-0.1,0.1L19.7,52 c-0.1,0.1-0.3,0.2-0.5,0.2c-0.4,0-0.8-0.3-0.8-0.8C18.4,51.2,18.5,51,18.6,50.8z",prevIcon:"path://M43,52.8L20.4,30.3c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.3,0.1-0.5,0.3-0.7L42.9,6.4c0.1-0.1,0.2-0.3,0.2-0.5 c0-0.4-0.3-0.8-0.8-0.8c-0.2,0-0.5,0.1-0.6,0.3L18.3,28.8l0,0c-0.2,0.2-0.3,0.4-0.3,0.7c0,0.3,0.1,0.5,0.3,0.7l0.1,0.1L41.9,54 c0.1,0.1,0.3,0.2,0.5,0.2c0.4,0,0.8-0.3,0.8-0.8C43.2,53.2,43.1,53,43,52.8z",color:"#304654",borderColor:"#304654",borderWidth:1},emphasis:{label:{show:!0,color:"#c23531"},itemStyle:{color:"#c23531"},controlStyle:{color:"#c23531",borderColor:"#c23531",borderWidth:2}},data:[]}}),Mh);function oD(t,e,i,n){pg.call(this,t,e,i),this.type=n||"value",this.model=null}var rD=Yh.extend({type:"timeline"});oD.prototype={constructor:oD,getLabelModel:function(){return this.model.getModel("label")},isHorizontal:function(){return"horizontal"===this.model.get("orient")}},w(oD,pg);var sD=N,lD=L,uD=Math.PI;function hD(t,e,i,n,a,o){var r=e.get("color");a?(a.setColor(r),i.add(a),o&&o.onUpdate(a)):((a=qp(t.get("symbol"),-1,-1,2,2,r)).setStyle("strokeNoScale",!0),i.add(a),o&&o.onCreate(a));var s=e.getItemStyle(["color","symbol","symbolSize"]);a.setStyle(s),n=m({rectHover:!0,z2:100},n,!0);var l=t.get("symbolSize");(l=l instanceof Array?l.slice():[+l,+l])[0]/=2,l[1]/=2,n.scale=l;var u=t.get("symbolOffset");if(u){var h=n.position=n.position||[0,0];h[0]+=ml(u[0],l[0]),h[1]+=ml(u[1],l[1])}var c=t.get("symbolRotate");return n.rotation=(c||0)*Math.PI/180||0,a.attr(n),a.updateTransform(),a}function cD(t,e,i,n,a){if(!t.dragging){var o=n.getModel("checkpointStyle"),r=i.dataToCoord(n.getData().get(["value"],e));a||!o.get("animation",!0)?t.attr({position:[r,0]}):(t.stopAnimation(!0),t.animateTo({position:[r,0]},o.get("animationDuration",!0),o.get("animationEasing",!0)))}}rD.extend({type:"timeline.slider",init:function(t,e){this.api=e,this._axis,this._viewRect,this._timer,this._currentPointer,this._mainGroup,this._labelGroup},render:function(e,t,i,n){if(this.model=e,this.api=i,this.ecModel=t,this.group.removeAll(),e.get("show",!0)){var a=this._layout(e,i),o=this._createGroup("mainGroup"),r=this._createGroup("labelGroup"),s=this._axis=this._createAxis(a,e);e.formatTooltip=function(t){return Vl(s.scale.getLabel(t))},lD(["AxisLine","AxisTick","Control","CurrentPointer"],function(t){this["_render"+t](a,o,s,e)},this),this._renderAxisLabel(a,r,s,e),this._position(a,e)}this._doPlayStop()},remove:function(){this._clearTimer(),this.group.removeAll()},dispose:function(){this._clearTimer()},_layout:function(t,e){var i=t.get("label.position"),n=t.get("orient"),a=function(t,e){return eu(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()},t.get("padding"))}(t,e);null==i||"auto"===i?i="horizontal"===n?a.y+a.height/2n[1]&&(i=n[1]),i"),a&&(o+=fD(a),null!=i&&(o+=" : ")),null!=i&&(o+=fD(n)),o},getData:function(){return this._data},setData:function(t){this._data=t}});b(gD,Mh),gD.extend({type:"markPoint",defaultOption:{zlevel:0,z:5,symbol:"pin",symbolSize:50,tooltip:{trigger:"item"},label:{show:!0,position:"inside"},itemStyle:{borderWidth:2},emphasis:{label:{show:!0}}}});var mD=_;function vD(t,e,i,n,a,o){var r=[],s=Ff(e,n)?e.getCalculationInfo("stackResultDimension"):n,l=MD(e,s,t),u=e.indicesOfNearest(s,l)[0];r[a]=e.get(i,u),r[o]=e.get(n,u);var h=xl(e.get(n,u));return 0<=(h=Math.min(h,20))&&(r[o]=+r[o].toFixed(h)),r}var yD=A,xD={min:yD(vD,"min"),max:yD(vD,"max"),average:yD(vD,"average")};function _D(t,e){var i=t.getData(),n=t.coordinateSystem;if(e&&!function(t){return!isNaN(parseFloat(t.x))&&!isNaN(parseFloat(t.y))}(e)&&!O(e.coord)&&n){var a=n.dimensions,o=wD(e,i,n,t);if((e=D(e)).type&&xD[e.type]&&o.baseAxis&&o.valueAxis){var r=mD(a,o.baseAxis.dim),s=mD(a,o.valueAxis.dim);e.coord=xD[e.type](i,o.baseDataDim,o.valueDataDim,r,s),e.value=e.coord[s]}else{for(var l=[null!=e.xAxis?e.xAxis:e.radiusAxis,null!=e.yAxis?e.yAxis:e.angleAxis],u=0;u<2;u++)xD[l[u]]&&(l[u]=MD(i,i.mapDimension(a[u]),l[u]));e.coord=l}}return e}function wD(t,e,i,n){var a={};return null!=t.valueIndex||null!=t.valueDim?(a.valueDataDim=null!=t.valueIndex?e.getDimension(t.valueIndex):t.valueDim,a.valueAxis=i.getAxis(function(t,e){var i=t.getData(),n=i.dimensions;e=i.getDimension(e);for(var a=0;ai[l],p=[-c.x,-c.y];n||(p[s]=a.position[s]);var g=[0,0],m=[-d.x,-d.y],v=H(t.get("pageButtonGap",!0),t.get("itemGap",!0));f&&("end"===t.get("pageButtonPosition",!0)?m[s]+=i[l]-d[l]:g[s]+=d[l]+v);m[1-s]+=c[u]/2-d[u]/2,a.attr("position",p),o.attr("position",g),r.attr("position",m);var y=this.group.getBoundingRect();if((y={x:0,y:0})[l]=f?i[l]:c[l],y[u]=Math.max(c[u],d[u]),y[h]=Math.min(0,d[h]+m[1-s]),o.__rectSize=i[l],f){var x={x:0,y:0};x[l]=Math.max(i[l]-d[l]-v,0),x[u]=y[u],o.setClipPath(new Hr({shape:x})),o.__rectSize=x[l]}else r.eachChild(function(t){t.attr({invisible:!0,silent:!0})});var _=this._getPageInfo(t);return null!=_.pageIndex&&Us(a,{position:_.contentPosition},f&&t),this._updatePageInfoView(t,_),y},_pageGo:function(t,e,i){var n=this._getPageInfo(e)[t];null!=n&&i.dispatchAction({type:"legendScroll",scrollDataIndex:n,legendId:e.id})},_updatePageInfoView:function(n,a){var o=this._controllerGroup;L(["pagePrev","pageNext"],function(t){var e=null!=a[t+"DataIndex"],i=o.childOfName(t);i&&(i.setStyle("fill",e?n.get("pageIconColor",!0):n.get("pageIconInactiveColor",!0)),i.cursor=e?"pointer":"default")});var t=o.childOfName("pageText"),e=n.get("pageFormatter"),i=a.pageIndex,r=null!=i?i+1:0,s=a.pageCount;t&&e&&t.setStyle("text",R(e)?e.replace("{current}",r).replace("{total}",s):e({current:r,total:s}))},_getPageInfo:function(t){var e=t.get("scrollDataIndex",!0),i=this.getContentGroup(),n=this._containerGroup.__rectSize,a=t.getOrient().index,o=KD[a],r=$D[a],s=this._findTargetItemIndex(e),l=i.children(),u=l[s],h=l.length,c=h?1:0,d={contentPosition:i.position.slice(),pageCount:c,pageIndex:c-1,pagePrevDataIndex:null,pageNextDataIndex:null};if(!u)return d;var f=y(u);d.contentPosition[a]=-f.s;for(var p=s+1,g=f,m=f,v=null;p<=h;++p)(!(v=y(l[p]))&&m.e>g.s+n||v&&!x(v,g.s))&&(g=m.i>g.i?m:v)&&(null==d.pageNextDataIndex&&(d.pageNextDataIndex=g.i),++d.pageCount),m=v;for(p=s-1,g=f,m=f,v=null;-1<=p;--p)(v=y(l[p]))&&x(m,v.s)||!(g.i=e&&t.s<=e+n}},_findTargetItemIndex:function(n){var a,o,t=this.getContentGroup();return this._showController&&t.eachChild(function(t,e){var i=t.__legendDataIndex;null==o&&null!=i&&(o=e),i===n&&(a=e)}),null!=a?a:o}});$d("legendScroll","legendscroll",function(t,e){var i=t.scrollDataIndex;null!=i&&e.eachComponent({mainType:"legend",subType:"scroll",query:t},function(t){t.setScrollDataIndex(i)})});lT.extend({type:"dataZoom.slider",layoutMode:"box",defaultOption:{show:!0,right:"ph",top:"ph",width:"ph",height:"ph",left:null,bottom:null,backgroundColor:"rgba(47,69,84,0)",dataBackground:{lineStyle:{color:"#2f4554",width:.5,opacity:.3},areaStyle:{color:"rgba(47,69,84,0.3)",opacity:.3}},borderColor:"#ddd",fillerColor:"rgba(167,183,204,0.4)",handleIcon:"M8.2,13.6V3.9H6.3v9.7H3.1v14.9h3.3v9.7h1.8v-9.7h3.3V13.6H8.2z M9.7,24.4H4.8v-1.4h4.9V24.4z M9.7,19.1H4.8v-1.4h4.9V19.1z",handleSize:"100%",handleStyle:{color:"#a7b7cc"},labelPrecision:null,labelFormatter:null,showDetail:!0,showDataShadow:"auto",realtime:!0,zoomLock:!1,textStyle:{color:"#333"}}});var QD=Hr,tC=gl,eC=yl,iC=N,nC=L,aC="horizontal",oC="vertical",rC=["line","bar","candlestick","scatter"],sC=cT.extend({type:"dataZoom.slider",init:function(t,e){this._displayables={},this._orient,this._range,this._handleEnds,this._size,this._handleWidth,this._handleHeight,this._location,this._dragging,this._dataShadowInfo,this.api=e},render:function(t,e,i,n){sC.superApply(this,"render",arguments),uc(this,"_dispatchZoomAction",this.dataZoomModel.get("throttle"),"fixRate"),this._orient=t.get("orient"),!1!==this.dataZoomModel.get("show")?(n&&"dataZoom"===n.type&&n.from===this.uid||this._buildView(),this._updateView()):this.group.removeAll()},remove:function(){sC.superApply(this,"remove",arguments),hc(this,"_dispatchZoomAction")},dispose:function(){sC.superApply(this,"dispose",arguments),hc(this,"_dispatchZoomAction")},_buildView:function(){var t=this.group;t.removeAll(),this._resetLocation(),this._resetInterval();var e=this._displayables.barGroup=new Si;this._renderBackground(),this._renderHandle(),this._renderDataShadow(),t.add(e),this._positionGroup()},_resetLocation:function(){var t=this.dataZoomModel,e=this.api,i=this._findCoordRect(),n={width:e.getWidth(),height:e.getHeight()},a=this._orient===aC?{right:n.width-i.x-i.width,top:n.height-30-7,width:i.width,height:30}:{right:7,top:i.y,width:30,height:i.height},o=au(t.option);L(["right","top","width","height"],function(t){"ph"===o[t]&&(o[t]=a[t])});var r=eu(o,n,t.padding);this._location={x:r.x,y:r.y},this._size=[r.width,r.height],this._orient===oC&&this._size.reverse()},_positionGroup:function(){var t=this.group,e=this._location,i=this._orient,n=this.dataZoomModel.getFirstTargetAxisModel(),a=n&&n.get("inverse"),o=this._displayables.barGroup,r=(this._dataShadowInfo||{}).otherAxisInverse;o.attr(i!==aC||a?i===aC&&a?{scale:r?[-1,1]:[-1,-1]}:i!==oC||a?{scale:r?[-1,-1]:[-1,1],rotation:Math.PI/2}:{scale:r?[1,-1]:[1,1],rotation:Math.PI/2}:{scale:r?[1,1]:[1,-1]});var s=t.getBoundingRect([o]);t.attr("position",[e.x-s.x,e.y-s.y])},_getViewExtent:function(){return[0,this._size[0]]},_renderBackground:function(){var t=this.dataZoomModel,e=this._size,i=this._displayables.barGroup;i.add(new QD({silent:!0,shape:{x:0,y:0,width:e[0],height:e[1]},style:{fill:t.get("backgroundColor")},z2:-40})),i.add(new QD({shape:{x:0,y:0,width:e[0],height:e[1]},style:{fill:"transparent"},z2:0,onclick:N(this._onClickPanelClick,this)}))},_renderDataShadow:function(){var t=this._dataShadowInfo=this._prepareDataShadowInfo();if(t){var e=this._size,i=t.series,n=i.getRawData(),a=i.getShadowDim?i.getShadowDim():t.otherDim;if(null!=a){var o=n.getDataExtent(a),r=.3*(o[1]-o[0]);o=[o[0]-r,o[1]+r];var s,l=[0,e[1]],u=[0,e[0]],h=[[e[0],0],[0,0]],c=[],d=u[1]/(n.count()-1),f=0,p=Math.round(n.count()/e[0]);n.each([a],function(t,e){if(0e[0]||i[1]<0||i[1]>e[1])){var n=this._handleEnds,a=(n[0]+n[1])/2,o=this._updateInterval("all",i[0]-a);this._updateView(),o&&this._dispatchZoomAction()}},_dispatchZoomAction:function(){var t=this._range;this.api.dispatchAction({type:"dataZoom",from:this.uid,dataZoomId:this.dataZoomModel.id,start:t[0],end:t[1]})},_findCoordRect:function(){var i;if(nC(this.getTargetCoordInfo(),function(t){if(!i&&t.length){var e=t[0].model.coordinateSystem;i=e.getRect&&e.getRect()}}),!i){var t=this.api.getWidth(),e=this.api.getHeight();i={x:.2*t,y:.2*e,width:.6*t,height:.6*e}}return i}});function lC(t){return"vertical"===t?"ns-resize":"ew-resize"}lT.extend({type:"dataZoom.inside",defaultOption:{disabled:!1,zoomLock:!1,zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!1,preventDefaultMouseMove:!0}});var uC="\0_ec_dataZoom_roams";function hC(t,n){var e=dC(t),a=n.dataZoomId,o=n.coordId;L(e,function(t,e){var i=t.dataZoomInfos;i[a]&&_(n.allCoordIds,o)<0&&(delete i[a],t.count--)}),fC(e);var i=e[o];i||((i=e[o]={coordId:o,dataZoomInfos:{},count:0}).controller=function(t,r){var e=new Qv(t.getZr());return L(["pan","zoom","scrollMove"],function(o){e.on(o,function(n){var a=[];L(r.dataZoomInfos,function(t){if(n.isAvailableBehavior(t.dataZoomModel.option)){var e=(t.getRange||{})[o],i=e&&e(r.controller,n);!t.dataZoomModel.get("disabled",!0)&&i&&a.push({dataZoomId:t.dataZoomId,start:i[0],end:i[1]})}}),a.length&&r.dispatchAction(a)})}),e}(t,i),i.dispatchAction=A(pC,t)),i.dataZoomInfos[a]||i.count++,i.dataZoomInfos[a]=n;var r=function(t){var n,a={type_true:2,type_move:1,type_false:0,type_undefined:-1},o=!0;return L(t,function(t){var e=t.dataZoomModel,i=!e.get("disabled",!0)&&(!e.get("zoomLock",!0)||"move");a["type_"+n]"],O(t)&&(t=t.slice(),n=!0),a=e?t:n?[u(t[0]),u(t[1])]:u(t),R(l)?l.replace("{value}",n?a[0]:a).replace("{value2}",n?a[1]:a):z(l)?n?l(t[0],t[1]):l(t):n?t[0]===s[0]?i[0]+" "+a[1]:t[1]===s[1]?i[1]+" "+a[0]:a[0]+" - "+a[1]:a;function u(t){return t===s[0]?"min":t===s[1]?"max":(+t).toFixed(Math.min(r,20))}},resetExtent:function(){var t=this.option,e=kC([t.min,t.max]);this._dataExtent=e},getDataDimension:function(t){var e=this.option.dimension,i=t.dimensions;if(null!=e||i.length){if(null!=e)return t.getDimension(e);for(var n=t.dimensions,a=n.length-1;0<=a;a--){var o=n[a];if(!t.getDimensionInfo(o).isCalculationCoord)return o}}},getExtent:function(){return this._dataExtent.slice()},completeVisualOption:function(){var t=this.ecModel,e=this.option,i={inRange:e.inRange,outOfRange:e.outOfRange},n=e.target||(e.target={}),a=e.controller||(e.controller={});m(n,i),m(a,i);var u=this.isCategory();function o(n){CC(e.color)&&!n.inRange&&(n.inRange={color:e.color.slice().reverse()}),n.inRange=n.inRange||{color:t.get("gradientColor")},LC(this.stateList,function(t){var e=n[t];if(R(e)){var i=IC(e,"active",u);i?(n[t]={},n[t][e]=i):delete n[t]}},this)}o.call(this,n),o.call(this,a),function(t,e,i){var n=t[e],a=t[i];n&&!a&&(a=t[i]={},LC(n,function(t,e){if(Dx.isValidType(e)){var i=IC(e,"inactive",u);null!=i&&(a[e]=i,"color"!==e||a.hasOwnProperty("opacity")||a.hasOwnProperty("colorAlpha")||(a.opacity=[0,0]))}}))}.call(this,n,"inRange","outOfRange"),function(o){var r=(o.inRange||{}).symbol||(o.outOfRange||{}).symbol,s=(o.inRange||{}).symbolSize||(o.outOfRange||{}).symbolSize,l=this.get("inactiveColor");LC(this.stateList,function(t){var e=this.itemSize,i=o[t];null==(i=i||(o[t]={color:u?l:[l]})).symbol&&(i.symbol=r&&D(r)||(u?"roundRect":["roundRect"])),null==i.symbolSize&&(i.symbolSize=s&&D(s)||(u?e[0]:[e[0],e[0]])),i.symbol=TC(i.symbol,function(t){return"none"===t||"square"===t?"roundRect":t});var n=i.symbolSize;if(null!=n){var a=-1/0;DC(n,function(t){ae[1]&&e.reverse(),e[0]=Math.max(e[0],t[0]),e[1]=Math.min(e[1],t[1]))},completeVisualOption:function(){NC.prototype.completeVisualOption.apply(this,arguments),L(this.stateList,function(t){var e=this.option.controller[t].symbolSize;e&&e[0]!==e[1]&&(e[0]=0)},this)},setSelected:function(t){this.option.range=t.slice(),this._resetRange()},getSelected:function(){var t=this.getExtent(),e=yl((this.get("range")||[]).slice());return e[0]>t[1]&&(e[0]=t[1]),e[1]>t[1]&&(e[1]=t[1]),e[0]=i[1]||t<=e[1])?"inRange":"outOfRange"},findTargetDataIndices:function(n){var a=[];return this.eachTargetSeries(function(t){var i=[],e=t.getData();e.each(this.getDataDimension(e),function(t,e){n[0]<=t&&t<=n[1]&&i.push(e)},this),a.push({seriesId:t.id,dataIndex:i})},this),a},getVisualMeta:function(i){var t=RC(this,"outOfRange",this.getExtent()),e=RC(this,"inRange",this.option.range.slice()),n=[];function a(t,e){n.push({value:t,color:i(t,e)})}for(var o=0,r=0,s=e.length,l=t.length;rt[1])break;i.push({color:this.getControllerVisual(o,"color",e),offset:a/100})}return i.push({color:this.getControllerVisual(t[1],"color",e),offset:1}),i},_createBarPoints:function(t,e){var i=this.visualMapModel.itemSize;return[[i[0]-e[0],t[0]],[i[0],t[0]],[i[0],t[1]],[i[0]-e[1],t[1]]]},_createBarGroup:function(t){var e=this._orient,i=this.visualMapModel.get("inverse");return new Si("horizontal"!==e||i?"horizontal"===e&&i?{scale:"bottom"===t?[-1,1]:[1,1],rotation:-Math.PI/2}:"vertical"!==e||i?{scale:"left"===t?[1,1]:[-1,1]}:{scale:"left"===t?[1,-1]:[-1,-1]}:{scale:"bottom"===t?[1,1]:[-1,1],rotation:Math.PI/2})},_updateHandle:function(n,a){if(this._useHandle){var o=this._shapes,r=this.visualMapModel,s=o.handleThumbs,l=o.handleLabels;FC([0,1],function(t){var e=s[t];e.setStyle("fill",a.handlesColor[t]),e.position[1]=n[t];var i=js(o.handleLabelPoints[t],Ys(e,this.group));l[t].setStyle({x:i[0],y:i[1],text:r.formatValueText(this._dataInterval[t]),textVerticalAlign:"middle",textAlign:this._applyTransform("horizontal"===this._orient?0===t?"bottom":"top":"left",o.barGroup)})},this)}},_showIndicator:function(t,e,i,n){var a=this.visualMapModel,o=a.getExtent(),r=a.itemSize,s=[0,r[1]],l=GC(t,o,s,!0),u=this._shapes,h=u.indicator;if(h){h.position[1]=l,h.attr("invisible",!1),h.setShape("points",function(t,e,i,n){return t?[[0,-WC(e,HC(i,0))],[6,0],[0,WC(e,HC(n-i,0))]]:[[0,0],[5,-5],[5,5]]}(!!i,n,l,r[1]));var c=this.getControllerVisual(t,"color",{convertOpacityToAlpha:!0});h.setStyle("fill",c);var d=js(u.indicatorLabelPoint,Ys(h,this.group)),f=u.indicatorLabel;f.attr("invisible",!1);var p=this._applyTransform("left",u.barGroup),g=this._orient;f.setStyle({text:(i||"")+a.formatValueText(e),textVerticalAlign:"horizontal"===g?p:"middle",textAlign:"horizontal"===g?"center":p,x:d[0],y:d[1]})}},_enableHoverLinkToSeries:function(){var n=this;this._shapes.barGroup.on("mousemove",function(t){if(n._hovering=!0,!n._dragging){var e=n.visualMapModel.itemSize,i=n._applyTransform([t.offsetX,t.offsetY],n._shapes.barGroup,!0,!0);i[1]=WC(HC(0,i[1]),e[1]),n._doHoverLinkToSeries(i[1],0<=i[0]&&i[0]<=e[0])}}).on("mouseout",function(){n._hovering=!1,n._dragging||n._clearHoverLinkToSeries()})},_enableHoverLinkFromSeries:function(){var t=this.api.getZr();this.visualMapModel.option.hoverLink?(t.on("mouseover",this._hoverLinkFromSeriesMouseOver,this),t.on("mouseout",this._hideIndicator,this)):this._clearHoverLinkFromSeries()},_doHoverLinkToSeries:function(t,e){var i=this.visualMapModel,n=i.itemSize;if(i.option.hoverLink){var a=[0,n[1]],o=i.getExtent();t=WC(HC(a[0],t),a[1]);var r=function(t,e,i){var n=6,a=t.get("hoverLinkDataSize");a&&(n=GC(a,e,i,!0)/2);return n}(i,o,a),s=[t-r,t+r],l=GC(t,a,o,!0),u=[GC(s[0],a,o,!0),GC(s[1],a,o,!0)];s[0] ",r):this._showIndicator(l,l,"≈ ",r));var h=this._hoverLinkDataIndices,c=[];(e||XC(i))&&(c=this._hoverLinkDataIndices=i.findTargetDataIndices(u));var d=function(t,e){var i={},n={};return a(t||[],i),a(e||[],n,i),[o(i),o(n)];function a(t,e,i){for(var n=0,a=t.length;ni&&n([i,e[0]],"outOfRange"),n(e.slice()),i=e[1])},this),{stops:o,outerColors:r}}function n(t,e){var i=s.getRepresentValue({interval:t});e=e||s.getValueState(i);var n=a(i,e);t[0]===-1/0?r[0]=n:t[1]===1/0?r[1]=n:o.push({value:t[0],color:n},{value:t[1],color:n})}}}),qC={splitNumber:function(){var t=this.option,e=this._pieceList,i=Math.min(t.precision,20),n=this.getExtent(),a=t.splitNumber;a=Math.max(parseInt(a,10),1),t.splitNumber=a;for(var o=(n[1]-n[0])/a;+o.toFixed(i)!==o&&i<5;)i++;t.precision=i,o=+o.toFixed(i);var r=0;t.minOpen&&e.push({index:r++,interval:[-1/0,n[0]],close:[0,0]});for(var s=n[0],l=r+a;r","≥"][e[0]]];t.text=t.text||this.formatValueText(null!=t.value?t.value:t.interval,!1,i)},this)}};function KC(t,e){var i=t.inverse;("vertical"===t.orient?!i:i)&&e.reverse()}EC.extend({type:"visualMap.piecewise",doRender:function(){var o=this.group;o.removeAll();var r=this.visualMapModel,s=r.get("textGap"),t=r.textStyleModel,l=t.getFont(),u=t.getTextColor(),h=this._getItemAlign(),c=r.itemSize,e=this._getViewData(),i=e.endsText,d=W(r.get("showLabel",!0),!i);i&&this._renderEndsText(o,i[0],c,d,h),L(e.viewPieceList,function(t){var e=t.piece,i=new Si;i.onclick=N(this._onItemClick,this,e),this._enableHoverLink(i,t.indexInModelPieceList);var n=r.getRepresentValue(e);if(this._createItemSymbol(i,n,[0,0,c[0],c[1]]),d){var a=this.visualMapModel.getValueState(n);i.add(new Dr({style:{x:"right"===h?-s:c[0]+s,y:c[1]/2,text:e.text,textVerticalAlign:"middle",textAlign:h,textFont:l,textFill:u,opacity:"outOfRange"===a?.5:1}}))}o.add(i)},this),i&&this._renderEndsText(o,i[1],c,d,h),tu(r.get("orient"),o,r.get("itemGap")),this.renderBackground(o),this.positionGroup(o)},_enableHoverLink:function(t,i){function e(t){var e=this.visualMapModel;e.option.hoverLink&&this.api.dispatchAction({type:t,batch:VC(e.findTargetDataIndices(i),e)})}t.on("mouseover",N(e,this,"highlight")).on("mouseout",N(e,this,"downplay"))},_getItemAlign:function(){var t=this.visualMapModel,e=t.option;if("vertical"===e.orient)return BC(t,this.api,t.itemSize);var i=e.align;return i&&"auto"!==i||(i="left"),i},_renderEndsText:function(t,e,i,n,a){if(e){var o=new Si,r=this.visualMapModel.textStyleModel;o.add(new Dr({style:{x:n?"right"===a?i[0]:0:i[0]/2,y:i[1]/2,textVerticalAlign:"middle",textAlign:n?a:"center",text:e,textFont:r.getFont(),textFill:r.getTextColor()}})),t.add(o)}},_getViewData:function(){var t=this.visualMapModel,e=k(t.getPieceList(),function(t,e){return{piece:t,indexInModelPieceList:e}}),i=t.get("text"),n=t.get("orient"),a=t.get("inverse");return("horizontal"===n?a:!a)?e.reverse():i=i&&i.slice().reverse(),{viewPieceList:e,endsText:i}},_createItemSymbol:function(t,e,i){t.add(qp(this.getControllerVisual(e,"symbol"),i[0],i[1],i[2],i[3],this.getControllerVisual(e,"color")))},_onItemClick:function(t){var e=this.visualMapModel,i=e.option,n=D(i.selected),a=e.getSelectedMapKey(t);"single"===i.selectedMode?(n[a]=!0,L(n,function(t,e){n[e]=e===a})):n[a]=!n[a],this.api.dispatchAction({type:"selectDataRange",from:this.uid,visualMapId:this.visualMapModel.id,selected:n})}});qd(xC);var $C,JC="urn:schemas-microsoft-com:vml",QC="undefined"==typeof window?null:window,tL=!1,eL=QC&&QC.document;function iL(t){return $C(t)}if(eL&&!v.canvasSupported)try{eL.namespaces.zrvml||eL.namespaces.add("zrvml",JC),$C=function(t){return eL.createElement("')}}catch(t){$C=function(t){return eL.createElement("<"+t+' xmlns="'+JC+'" class="zrvml">')}}var nL,aL=Ho.CMD,oL=Math.round,rL=Math.sqrt,sL=Math.abs,lL=Math.cos,uL=Math.sin,hL=Math.max;if(!v.canvasSupported){var cL=",",dL="progid:DXImageTransform.Microsoft",fL=21600,pL=fL/2,gL=function(t){t.style.cssText="position:absolute;left:0;top:0;width:1px;height:1px;",t.coordsize=fL+","+fL,t.coordorigin="0,0"},mL=function(t,e,i){return"rgb("+[t,e,i].join(",")+")"},vL=function(t,e){e&&t&&e.parentNode!==t&&t.appendChild(e)},yL=function(t,e){e&&t&&e.parentNode===t&&t.removeChild(e)},xL=function(t,e,i){return 1e5*(parseFloat(t)||0)+1e3*(parseFloat(e)||0)+i},_L=function(t,e){return"string"==typeof t?0<=t.lastIndexOf("%")?parseFloat(t)/100*e:parseFloat(t):t},wL=function(t,e,i){var n=ze(e);i=+i,isNaN(i)&&(i=1),n&&(t.color=mL(n[0],n[1],n[2]),t.opacity=i*n[3])},bL=function(t,e,i,n){var a="fill"===e,o=t.getElementsByTagName(e)[0];null!=i[e]&&"none"!==i[e]&&(a||!a&&i.lineWidth)?(t[a?"filled":"stroked"]="true",i[e]instanceof jr&&yL(t,o),o=o||iL(e),a?function(t,e,i){var n,a,o=e.fill;if(null!=o)if(o instanceof jr){var r,s=0,l=[0,0],u=0,h=1,c=i.getBoundingRect(),d=c.width,f=c.height;if("linear"===o.type){r="gradient";var p=i.transform,g=[o.x*d,o.y*f],m=[o.x2*d,o.y2*f];p&&(bt(g,g,p),bt(m,m,p));var v=m[0]-g[0],y=m[1]-g[1];(s=180*Math.atan2(v,y)/Math.PI)<0&&(s+=360),s<1e-6&&(s=0)}else{r="gradientradial";g=[o.x*d,o.y*f],p=i.transform;var x=i.scale,_=d,w=f;l=[(g[0]-c.x)/_,(g[1]-c.y)/w],p&&bt(g,g,p),_/=x[0]*fL,w/=x[1]*fL;var b=hL(_,w);u=0/b,h=2*o.r/b-u}var S=o.colorStops.slice();S.sort(function(t,e){return t.offset-e.offset});for(var M=S.length,I=[],A=[],T=0;T=c&&d<=i+1){for(var n=[],a=0;a=c&&d<=a+1)return lk(h,e.components,u,l);p[t]=e}else p[t]=void 0}var s;f++}for(;f<=e;){var r=o();if(r)return r}},pushComponent:function(t,e,i){var n=t[t.length-1];n&&n.added===e&&n.removed===i?t[t.length-1]={count:n.count+1,added:e,removed:i}:t.push({count:1,added:e,removed:i})},extractCommon:function(t,e,i,n){for(var a=e.length,o=i.length,r=t.newPos,s=r-n,l=0;r+1 inThrottle = false, limit); + } + } + } + + // 处理菜单切换逻辑 + const toggleMenu = function(e, item) { + // 只在移动端处理 + if (window.innerWidth > 768) return; + + e.preventDefault(); + e.stopPropagation(); + + // 如果正在动画中,则忽略点击(可选,依赖CSS过渡时间) + // 这里使用简单的类切换,由CSS控制动画 + + const isOpening = !item.classList.contains('mobile-open'); + + // 关闭同级其他菜单项 + const siblings = item.parentNode.children; + for (let sibling of siblings) { + if (sibling !== item && sibling.classList.contains('menu-item-has-children')) { + sibling.classList.remove('mobile-open'); + } + } + + // 切换当前菜单状态 + item.classList.toggle('mobile-open'); + }; + + // 创建节流版本的切换函数,300ms内只响应一次 + const throttledToggle = throttle(toggleMenu, 300); + + menuItems.forEach(function(item) { + const link = item.querySelector('a'); + const arrow = item.querySelector('.dropdown-arrow'); + + if (link) { + // 如果有箭头,优先使用箭头触发 + if (arrow) { + arrow.addEventListener('click', function(e) { + throttledToggle(e, item); + }); + + // 同时也为箭头添加触摸事件监听,提高响应速度 + arrow.addEventListener('touchend', function(e) { + // 防止触发 click + e.preventDefault(); + throttledToggle(e, item); + }); + } + + // 链接点击处理 + link.addEventListener('click', function(e) { + const href = link.getAttribute('href'); + // 如果是在移动端,且链接是空或者#,或者没有箭头(只能点链接),则触发菜单切换 + if (window.innerWidth <= 768) { + if (!href || href === '#' || href === 'javascript:void(0);') { + throttledToggle(e, item); + } + } + }); + } + }); + } + + // 初始化移动端下拉菜单 + initMobileDropdown(); + + // 窗口大小改变时重新初始化 + window.addEventListener('resize', function() { + // 如果切换到桌面端,关闭所有移动端展开的菜单 + if (window.innerWidth > 768) { + const openItems = document.querySelectorAll('.menu-item-has-children.mobile-open'); + openItems.forEach(function(item) { + item.classList.remove('mobile-open'); + }); + } + }); + + // 滚动时改变导航栏样式 + let lastScroll = 0; + const nav = document.querySelector('.main-nav'); + + window.addEventListener('scroll', function() { + const currentScroll = window.pageYOffset; + + // 到顶部时显示导航栏并清除背景和阴影 + if (currentScroll <= 0) { + nav.classList.remove('scrolled'); + nav.style.transform = 'translateY(0)'; + nav.style.backgroundColor = ''; + nav.style.boxShadow = ''; + // 设置主菜单项颜色为白色 + const menuLinks = nav.querySelectorAll('.menu-items > li > a'); + menuLinks.forEach(link => { + link.style.color = '#333'; + }); + // 确保下拉菜单项保持黑色 + const subMenuLinks = nav.querySelectorAll('.sub-menu li a'); + subMenuLinks.forEach(link => { + link.style.color = '#333'; + }); + } else if (currentScroll > 80) { + // 滚动超过80px时添加背景和阴影 + nav.classList.add('scrolled'); + nav.style.backgroundColor = '#fff'; + nav.style.boxShadow = '0 2px 10px rgba(0, 0, 0, 1)'; + // 设置主菜单项颜色为黑色 + const menuLinks = nav.querySelectorAll('.menu-items > li > a'); + menuLinks.forEach(link => { + link.style.color = '#000'; + }); + // 确保下拉菜单项保持黑色 + const subMenuLinks = nav.querySelectorAll('.sub-menu li a'); + subMenuLinks.forEach(link => { + link.style.color = '#333'; + }); + if (currentScroll > lastScroll) { + // 向下滚动时显示导航栏 + nav.style.transform = 'translateY(0)'; + } else { + // 向上滚动时隐藏导航栏 + nav.style.transform = 'translateY(-100%)'; + } + } else { + // 滚动在0-80px之间时清除背景和阴影 + nav.classList.remove('scrolled'); + nav.style.backgroundColor = ''; + nav.style.boxShadow = ''; + nav.style.transform = 'translateY(0)'; + // 设置主菜单项颜色为白色 + const menuLinks = nav.querySelectorAll('.menu-items > li > a'); + menuLinks.forEach(link => { + link.style.color = '#333'; + }); + // 确保下拉菜单项保持黑色 + const subMenuLinks = nav.querySelectorAll('.sub-menu li a'); + subMenuLinks.forEach(link => { + link.style.color = '#333'; + }); + } + + lastScroll = currentScroll; + }); + + // 鼠标移入移出导航栏效果 + nav.addEventListener('mouseenter', function() { + nav.classList.add('scrolled'); + nav.style.backgroundColor = '#fff'; + nav.style.boxShadow = '0 2px 10px rgba(0, 0, 0, 0.1)'; + // 设置菜单项颜色为黑色 + const menuLinks = nav.querySelectorAll('.menu-items > li > a'); + menuLinks.forEach(link => { + link.style.color = '#000'; + }); + // 确保下拉菜单项保持黑色 + const subMenuLinks = nav.querySelectorAll('.sub-menu li a'); + subMenuLinks.forEach(link => { + link.style.color = '#333'; + }); + }); + + nav.addEventListener('mouseleave', function() { + const currentScroll = window.pageYOffset; + // 根据当前滚动位置决定是否保持背景色 + if (currentScroll <= 80) { + nav.classList.remove('scrolled'); + nav.style.backgroundColor = ''; + nav.style.boxShadow = ''; + + // 设置菜单项颜色为白色 + const menuLinks = nav.querySelectorAll('.menu-items > li > a'); + menuLinks.forEach(link => { + link.style.color = '#333'; + }); + // 确保下拉菜单项保持黑色 + const subMenuLinks = nav.querySelectorAll('.sub-menu li a'); + subMenuLinks.forEach(link => { + link.style.color = '#333'; + }); + } + }); + + // 为有子菜单的项目添加特殊处理 + const menuItemsWithChildren = nav.querySelectorAll('.menu-item-has-children'); + menuItemsWithChildren.forEach(function(item) { + item.addEventListener('mouseenter', function() { + // 确保导航栏有背景色以便下拉菜单显示 + nav.classList.add('scrolled'); + nav.style.backgroundColor = '#fff'; + nav.style.boxShadow = '0 2px 10px rgba(0, 0, 0, 0.1)'; + const menuLinks = nav.querySelectorAll('.menu-items > li > a'); + menuLinks.forEach(link => { + link.style.color = '#000'; + }); + // 确保下拉菜单项保持黑色 + const subMenuLinks = nav.querySelectorAll('.sub-menu li a'); + subMenuLinks.forEach(link => { + link.style.color = '#333'; + }); + }); + }); + + // 窗口大小改变时重置菜单状态 + window.addEventListener('resize', function() { + if (window.innerWidth > 768) { + // 桌面端时隐藏所有移动端展开的子菜单 + document.querySelectorAll('.sub-menu').forEach(menu => { + menu.style.display = ''; + }); + } + }); +}); + +// Banner轮播现在使用原生JavaScript实现,无需Swiper初始化 +// 轮播逻辑已集成在block-banner.php模板中 \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/js/jquery.min.js b/wp-content/themes/nenghui-energy-theme-4/assets/js/jquery.min.js new file mode 100644 index 0000000..7f37b5d --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/assets/js/jquery.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="",le.option=!!xe.lastChild;var ke={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n",""]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="
",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 0 { + if (scenarioTexts[index]) { + const updateWidth = () => { + const imgWidth = img.offsetWidth; + scenarioTexts[index].style.width = imgWidth + 'px'; + }; + + // 图片加载完成后调整宽度 + // if (img.complete) { + // updateWidth(); + // } else { + // img.addEventListener('load', updateWidth); + // } + + // 窗口大小改变时重新调整 + window.addEventListener('resize', updateWidth); + } + }); +} + +/** + * 技术规格手风琴组件 + */ +class TechnicalSpecsAccordion { + constructor(container) { + this.container = container; + this.triggers = container.querySelectorAll('.accordion-trigger'); + this.init(); + } + + init() { + this.bindEvents(); + this.setInitialStates(); + } + + bindEvents() { + this.triggers.forEach(trigger => { + trigger.addEventListener('click', (e) => this.handleToggle(e)); + trigger.addEventListener('keydown', (e) => this.handleKeydown(e)); + }); + } + + handleToggle(event) { + const trigger = event.currentTarget; + const item = trigger.closest('.accordion-item'); + const panel = item.querySelector('.accordion-panel'); + const isExpanded = trigger.getAttribute('aria-expanded') === 'true'; + + this.togglePanel(trigger, panel, !isExpanded); + } + + handleKeydown(event) { + const { key } = event; + const trigger = event.currentTarget; + + // 支持键盘导航 + if (key === 'Enter' || key === ' ') { + event.preventDefault(); + this.handleToggle(event); + } else if (key === 'ArrowDown' || key === 'ArrowUp') { + event.preventDefault(); + this.focusNextTrigger(trigger, key === 'ArrowDown'); + } + } + + togglePanel(trigger, panel, expand) { + const item = trigger.closest('.accordion-item'); + + // 更新ARIA属性 + trigger.setAttribute('aria-expanded', expand.toString()); + + if (expand) { + // 展开面板 + item.classList.add('is-expanded'); + panel.removeAttribute('hidden'); + panel.style.maxHeight = 'none'; // 先重置maxHeight + + // 设置动画高度 + requestAnimationFrame(() => { + const height = panel.scrollHeight; + panel.style.maxHeight = '0'; + requestAnimationFrame(() => { + panel.style.maxHeight = height + 'px'; + }); + }); + } else { + // 收起面板 + const currentHeight = panel.scrollHeight; + panel.style.maxHeight = currentHeight + 'px'; + + // 强制重绘后设置为0 + requestAnimationFrame(() => { + panel.style.maxHeight = '0'; + item.classList.remove('is-expanded'); + }); + + // 动画完成后隐藏 + setTimeout(() => { + if (!item.classList.contains('is-expanded')) { + panel.setAttribute('hidden', ''); + panel.style.maxHeight = ''; // 清除内联样式 + } + }, 300); + } + } + + focusNextTrigger(currentTrigger, forward = true) { + const triggers = Array.from(this.triggers); + const currentIndex = triggers.indexOf(currentTrigger); + let nextIndex; + + if (forward) { + nextIndex = currentIndex === triggers.length - 1 ? 0 : currentIndex + 1; + } else { + nextIndex = currentIndex === 0 ? triggers.length - 1 : currentIndex - 1; + } + + triggers[nextIndex].focus(); + } + + setInitialStates() { + this.triggers.forEach(trigger => { + const item = trigger.closest('.accordion-item'); + const panel = item.querySelector('.accordion-panel'); + const isExpanded = item.classList.contains('is-expanded'); + + // 设置初始ARIA属性 + trigger.setAttribute('aria-expanded', isExpanded.toString()); + + // 设置初始显示状态 + if (isExpanded) { + panel.removeAttribute('hidden'); + // 确保展开的面板有正确的高度 + requestAnimationFrame(() => { + panel.style.maxHeight = panel.scrollHeight + 'px'; + }); + } else { + panel.setAttribute('hidden', ''); + panel.style.maxHeight = '0'; + } + }); + + // 添加调试信息 + console.log('Technical Specs Accordion initialized with', this.triggers.length, 'triggers'); + } +} + +// 防止重复初始化的标志 +let accordionInitialized = false; +let scenarioWidthInitialized = false; + +// 初始化技术规格手风琴 +function initTechnicalSpecsAccordion() { + if (accordionInitialized) { + return; + } + + const accordionContainer = document.querySelector('.specs-accordion'); + if (accordionContainer) { + // 检查是否已经初始化过 + if (!accordionContainer.hasAttribute('data-accordion-initialized')) { + new TechnicalSpecsAccordion(accordionContainer); + accordionContainer.setAttribute('data-accordion-initialized', 'true'); + accordionInitialized = true; + } + } +} + +// 初始化场景文字宽度调整 +function initScenarioTextWidth() { + if (scenarioWidthInitialized) { + return; + } + + adjustScenarioTextWidth(); + scenarioWidthInitialized = true; +} + +// 主初始化函数 +function initProductsContent() { + initScenarioTextWidth(); + initTechnicalSpecsAccordion(); +} + +// DOM加载完成后执行 +if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', initProductsContent); +} else { + // DOM已经加载完成 + initProductsContent(); +} + +// 如果是WordPress环境,也在jQuery ready时执行(作为备用) +if (typeof jQuery !== 'undefined') { + jQuery(document).ready(function() { + // 延迟执行以避免与其他脚本冲突 + setTimeout(initProductsContent, 100); + }); +} \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/js/swiper-bundle.min.js b/wp-content/themes/nenghui-energy-theme-4/assets/js/swiper-bundle.min.js new file mode 100644 index 0000000..2a57d2a --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/assets/js/swiper-bundle.min.js @@ -0,0 +1,14 @@ +/** + * Swiper 11.2.10 + * Most modern mobile touch slider and framework with hardware accelerated transitions + * https://swiperjs.com + * + * Copyright 2014-2025 Vladimir Kharlampidi + * + * Released under the MIT License + * + * Released on: June 28, 2025 + */ + +var Swiper=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={});const i=["__proto__","constructor","prototype"];Object.keys(a).filter((e=>i.indexOf(e)<0)).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}function n(e){return void 0===e&&(e=""),e.trim().split(" ").filter((e=>!!e.trim()))}function l(e,t){return void 0===t&&(t=0),setTimeout(e,t)}function o(){return Date.now()}function d(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 c(e){return"object"==typeof e&&null!==e&&e.constructor&&"Object"===Object.prototype.toString.call(e).slice(8,-1)}function p(){const e=Object(arguments.length<=0?void 0:arguments[0]),t=["__proto__","constructor","prototype"];for(let a=1;at.indexOf(e)<0));for(let t=0,a=s.length;tn?"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()}function h(e){return e.querySelector(".swiper-slide-transform")||e.shadowRoot&&e.shadowRoot.querySelector(".swiper-slide-transform")||e}function f(e,t){void 0===t&&(t="");const s=r(),a=[...e.children];return s.HTMLSlotElement&&e instanceof HTMLSlotElement&&a.push(...e.assignedElements()),t?a.filter((e=>e.matches(t))):a}function g(e){try{return void console.warn(e)}catch(e){}}function v(e,t){void 0===t&&(t=[]);const s=document.createElement(e);return s.classList.add(...Array.isArray(t)?t:n(t)),s}function w(e){const t=r(),s=a(),i=e.getBoundingClientRect(),n=s.body,l=e.clientTop||n.clientTop||0,o=e.clientLeft||n.clientLeft||0,d=e===t?t.scrollY:e.scrollTop,c=e===t?t.scrollX:e.scrollLeft;return{top:i.top+d-l,left:i.left+c-o}}function b(e,t){return r().getComputedStyle(e,null).getPropertyValue(t)}function y(e){let t,s=e;if(s){for(t=0;null!==(s=s.previousSibling);)1===s.nodeType&&(t+=1);return t}}function E(e,t){const s=[];let a=e.parentElement;for(;a;)t?a.matches(t)&&s.push(a):s.push(a),a=a.parentElement;return s}function x(e,t){t&&e.addEventListener("transitionend",(function s(a){a.target===e&&(t.call(e,a),e.removeEventListener("transitionend",s))}))}function S(e,t,s){const a=r();return s?e["width"===t?"offsetWidth":"offsetHeight"]+parseFloat(a.getComputedStyle(e,null).getPropertyValue("width"===t?"margin-right":"margin-top"))+parseFloat(a.getComputedStyle(e,null).getPropertyValue("width"===t?"margin-left":"margin-bottom")):e.offsetWidth}function T(e){return(Array.isArray(e)?e:[e]).filter((e=>!!e))}function M(e){return t=>Math.abs(t)>0&&e.browser&&e.browser.need3dFix&&Math.abs(t)%90==0?t+.001:t}function C(e,t){void 0===t&&(t=""),"undefined"!=typeof trustedTypes?e.innerHTML=trustedTypes.createPolicy("html",{createHTML:e=>e}).createHTML(t):e.innerHTML=t}let P,L,I;function z(){return P||(P=function(){const e=r(),t=a();return{smoothScroll:t.documentElement&&t.documentElement.style&&"scrollBehavior"in t.documentElement.style,touch:!!("ontouchstart"in e||e.DocumentTouch&&t instanceof e.DocumentTouch)}}()),P}function A(e){return void 0===e&&(e={}),L||(L=function(e){let{userAgent:t}=void 0===e?{}:e;const s=z(),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_]+))?/),m=!p&&n.match(/(iPhone\sOS|iOS)\s([\d_]+)/),h="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&&!h&&(l.os="android",l.android=!0),(p||m||u)&&(l.os="ios",l.ios=!0),l}(e)),L}function $(){return I||(I=function(){const e=r(),t=A();let s=!1;function a(){const t=e.navigator.userAgent.toLowerCase();return t.indexOf("safari")>=0&&t.indexOf("chrome")<0&&t.indexOf("android")<0}if(a()){const t=String(e.navigator.userAgent);if(t.includes("Version/")){const[e,a]=t.split("Version/")[1].split(" ")[0].split(".").map((e=>Number(e)));s=e<16||16===e&&a<2}}const i=/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(e.navigator.userAgent),n=a();return{isSafari:s||n,needPerspectiveFix:s,need3dFix:n||i&&t.ios,isWebView:i}}()),I}var k={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=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{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}};const O=(e,t,s)=>{t&&!e.classList.contains(s)?e.classList.add(s):!t&&e.classList.contains(s)&&e.classList.remove(s)};const D=(e,t,s)=>{t&&!e.classList.contains(s)?e.classList.add(s):!t&&e.classList.contains(s)&&e.classList.remove(s)};const G=(e,t)=>{if(!e||e.destroyed||!e.params)return;const s=t.closest(e.isElement?"swiper-slide":`.${e.params.slideClass}`);if(s){let t=s.querySelector(`.${e.params.lazyPreloaderClass}`);!t&&e.isElement&&(s.shadowRoot?t=s.shadowRoot.querySelector(`.${e.params.lazyPreloaderClass}`):requestAnimationFrame((()=>{s.shadowRoot&&(t=s.shadowRoot.querySelector(`.${e.params.lazyPreloaderClass}`),t&&t.remove())}))),t&&t.remove()}},X=(e,t)=>{if(!e.slides[t])return;const s=e.slides[t].querySelector('[loading="lazy"]');s&&s.removeAttribute("loading")},Y=e=>{if(!e||e.destroyed||!e.params)return;let t=e.params.lazyPreloadPrevNext;const s=e.slides.length;if(!s||!t||t<0)return;t=Math.min(t,s);const a="auto"===e.params.slidesPerView?e.slidesPerViewDynamic():Math.ceil(e.params.slidesPerView),i=e.activeIndex;if(e.params.grid&&e.params.grid.rows>1){const s=i,r=[s-t];return r.push(...Array.from({length:t}).map(((e,t)=>s+a+t))),void e.slides.forEach(((t,s)=>{r.includes(t.column)&&X(e,s)}))}const r=i+a-1;if(e.params.rewind||e.params.loop)for(let a=i-t;a<=r+t;a+=1){const t=(a%s+s)%s;(tr)&&X(e,t)}else for(let a=Math.max(i-t,0);a<=Math.min(r+t,s-1);a+=1)a!==i&&(a>r||a=0?x=parseFloat(x.replace("%",""))/100*r:"string"==typeof x&&(x=parseFloat(x)),e.virtualSize=-x,c.forEach((e=>{n?e.style.marginLeft="":e.style.marginRight="",e.style.marginBottom="",e.style.marginTop=""})),s.centeredSlides&&s.cssMode&&(u(a,"--swiper-centered-offset-before",""),u(a,"--swiper-centered-offset-after",""));const P=s.grid&&s.grid.rows>1&&e.grid;let L;P?e.grid.initSlides(c):e.grid&&e.grid.unsetSlides();const I="auto"===s.slidesPerView&&s.breakpoints&&Object.keys(s.breakpoints).filter((e=>void 0!==s.breakpoints[e].slidesPerView)).length>0;for(let a=0;a1&&m.push(e.virtualSize-r)}if(o&&s.loop){const t=g[0]+x;if(s.slidesPerGroup>1){const a=Math.ceil((e.virtual.slidesBefore+e.virtual.slidesAfter)/s.slidesPerGroup),i=t*s.slidesPerGroup;for(let e=0;e!(s.cssMode&&!s.loop)||t!==c.length-1)).forEach((e=>{e.style[t]=`${x}px`}))}if(s.centeredSlides&&s.centeredSlidesBounds){let e=0;g.forEach((t=>{e+=t+(x||0)})),e-=x;const t=e>r?e-r:0;m=m.map((e=>e<=0?-v:e>t?t+w:e))}if(s.centerInsufficientSlides){let e=0;g.forEach((t=>{e+=t+(x||0)})),e-=x;const t=(s.slidesOffsetBefore||0)+(s.slidesOffsetAfter||0);if(e+t{m[t]=e-s})),h.forEach(((e,t)=>{h[t]=e+s}))}}if(Object.assign(e,{slides:c,snapGrid:m,slidesGrid:h,slidesSizesGrid:g}),s.centeredSlides&&s.cssMode&&!s.centeredSlidesBounds){u(a,"--swiper-centered-offset-before",-m[0]+"px"),u(a,"--swiper-centered-offset-after",e.size/2-g[g.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"),m.length!==y&&(e.params.watchOverflow&&e.checkOverflow(),e.emit("snapGridLengthChange")),h.length!==E&&e.emit("slidesGridLengthChange"),s.watchSlidesProgress&&e.updateSlidesOffset(),e.emit("slidesUpdated"),!(o||s.cssMode||"slide"!==s.effect&&"fade"!==s.effect)){const t=`${s.containerModifierClass}backface-hidden`,a=e.el.classList.contains(t);p<=s.maxBackfaceHiddenSlides?a||e.el.classList.add(t):a&&e.el.classList.remove(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[t.getSlideIndexByData(e)]:t.slides[e];if("auto"!==t.params.slidesPerView&&t.params.slidesPerView>1)if(t.params.centeredSlides)(t.visibleSlides||[]).forEach((e=>{s.push(e)}));else for(i=0;it.slides.length&&!a)break;s.push(n(e))}else s.push(n(t.activeIndex));for(i=0;ir?e:r}(r||0===r)&&(t.wrapperEl.style.height=`${r}px`)},updateSlidesOffset:function(){const e=this,t=e.slides,s=e.isElement?e.isHorizontal()?e.wrapperEl.offsetLeft:e.wrapperEl.offsetTop:0;for(let a=0;a=0?l=parseFloat(l.replace("%",""))/100*t.size:"string"==typeof l&&(l=parseFloat(l));for(let e=0;e=0&&u<=t.size-t.slidesSizesGrid[e],f=u>=0&&u1&&m<=t.size||u<=0&&m>=t.size;f&&(t.visibleSlides.push(o),t.visibleSlidesIndexes.push(e)),O(o,f,s.slideVisibleClass),O(o,h,s.slideFullyVisibleClass),o.progress=i?-c:c,o.originalProgress=i?-p:p}},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,progressLoop:l}=t;const o=r,d=n;if(0===a)i=0,r=!0,n=!0;else{i=(e-t.minTranslate())/a;const s=Math.abs(e-t.minTranslate())<1,l=Math.abs(e-t.maxTranslate())<1;r=s||i<=0,n=l||i>=1,s&&(i=0),l&&(i=1)}if(s.loop){const s=t.getSlideIndexByData(0),a=t.getSlideIndexByData(t.slides.length-1),i=t.slidesGrid[s],r=t.slidesGrid[a],n=t.slidesGrid[t.slidesGrid.length-1],o=Math.abs(e);l=o>=i?(o-i)/n:(o+n-r)/n,l>1&&(l-=1)}Object.assign(t,{progress:i,progressLoop:l,isBeginning:r,isEnd:n}),(s.watchSlidesProgress||s.centeredSlides&&s.autoHeight)&&t.updateSlidesProgress(e),r&&!o&&t.emit("reachBeginning toEdge"),n&&!d&&t.emit("reachEnd toEdge"),(o&&!r||d&&!n)&&t.emit("fromEdge"),t.emit("progress",i)},updateSlidesClasses:function(){const e=this,{slides:t,params:s,slidesEl:a,activeIndex:i}=e,r=e.virtual&&s.virtual.enabled,n=e.grid&&s.grid&&s.grid.rows>1,l=e=>f(a,`.${s.slideClass}${e}, swiper-slide${e}`)[0];let o,d,c;if(r)if(s.loop){let t=i-e.virtual.slidesBefore;t<0&&(t=e.virtual.slides.length+t),t>=e.virtual.slides.length&&(t-=e.virtual.slides.length),o=l(`[data-swiper-slide-index="${t}"]`)}else o=l(`[data-swiper-slide-index="${i}"]`);else n?(o=t.find((e=>e.column===i)),c=t.find((e=>e.column===i+1)),d=t.find((e=>e.column===i-1))):o=t[i];o&&(n||(c=function(e,t){const s=[];for(;e.nextElementSibling;){const a=e.nextElementSibling;t?a.matches(t)&&s.push(a):s.push(a),e=a}return s}(o,`.${s.slideClass}, swiper-slide`)[0],s.loop&&!c&&(c=t[0]),d=function(e,t){const s=[];for(;e.previousElementSibling;){const a=e.previousElementSibling;t?a.matches(t)&&s.push(a):s.push(a),e=a}return s}(o,`.${s.slideClass}, swiper-slide`)[0],s.loop&&0===!d&&(d=t[t.length-1]))),t.forEach((e=>{D(e,e===o,s.slideActiveClass),D(e,e===c,s.slideNextClass),D(e,e===d,s.slidePrevClass)})),e.emitSlidesClasses()},updateActiveIndex:function(e){const t=this,s=t.rtlTranslate?t.translate:-t.translate,{snapGrid:a,params:i,activeIndex:r,realIndex:n,snapIndex:l}=t;let o,d=e;const c=e=>{let s=e-t.virtual.slidesBefore;return s<0&&(s=t.virtual.slides.length+s),s>=t.virtual.slides.length&&(s-=t.virtual.slides.length),s};if(void 0===d&&(d=function(e){const{slidesGrid:t,params:s}=e,a=e.rtlTranslate?e.translate:-e.translate;let i;for(let e=0;e=t[e]&&a=t[e]&&a=t[e]&&(i=e);return s.normalizeSlideIndex&&(i<0||void 0===i)&&(i=0),i}(t)),a.indexOf(s)>=0)o=a.indexOf(s);else{const e=Math.min(i.slidesPerGroupSkip,d);o=e+Math.floor((d-e)/i.slidesPerGroup)}if(o>=a.length&&(o=a.length-1),d===r&&!t.params.loop)return void(o!==l&&(t.snapIndex=o,t.emit("snapIndexChange")));if(d===r&&t.params.loop&&t.virtual&&t.params.virtual.enabled)return void(t.realIndex=c(d));const p=t.grid&&i.grid&&i.grid.rows>1;let u;if(t.virtual&&i.virtual.enabled&&i.loop)u=c(d);else if(p){const e=t.slides.find((e=>e.column===d));let s=parseInt(e.getAttribute("data-swiper-slide-index"),10);Number.isNaN(s)&&(s=Math.max(t.slides.indexOf(e),0)),u=Math.floor(s/i.grid.rows)}else if(t.slides[d]){const e=t.slides[d].getAttribute("data-swiper-slide-index");u=e?parseInt(e,10):d}else u=d;Object.assign(t,{previousSnapIndex:l,snapIndex:o,previousRealIndex:n,realIndex:u,previousIndex:r,activeIndex:d}),t.initialized&&Y(t),t.emit("activeIndexChange"),t.emit("snapIndexChange"),(t.initialized||t.params.runCallbacksOnInit)&&(n!==u&&t.emit("realIndexChange"),t.emit("slideChange"))},updateClickedSlide:function(e,t){const s=this,a=s.params;let i=e.closest(`.${a.slideClass}, swiper-slide`);!i&&s.isElement&&t&&t.length>1&&t.includes(e)&&[...t.slice(t.indexOf(e)+1,t.length)].forEach((e=>{!i&&e.matches&&e.matches(`.${a.slideClass}, swiper-slide`)&&(i=e)}));let r,n=!1;if(i)for(let e=0;eo?o:a&&en?"next":r=o.length&&(v=o.length-1);const w=-o[v];if(l.normalizeSlideIndex)for(let e=0;e=s&&t=s&&t=s&&(n=e)}if(r.initialized&&n!==p){if(!r.allowSlideNext&&(u?w>r.translate&&w>r.minTranslate():wr.translate&&w>r.maxTranslate()&&(p||0)!==n)return!1}let b;n!==(c||0)&&s&&r.emit("beforeSlideChangeStart"),r.updateProgress(w),b=n>p?"next":n0?(r._cssModeVirtualInitialSet=!0,requestAnimationFrame((()=>{h[e?"scrollLeft":"scrollTop"]=s}))):h[e?"scrollLeft":"scrollTop"]=s,y&&requestAnimationFrame((()=>{r.wrapperEl.style.scrollSnapType="",r._immediateVirtual=!1}));else{if(!r.support.smoothScroll)return m({swiper:r,targetPosition:s,side:e?"left":"top"}),!0;h.scrollTo({[e?"left":"top"]:s,behavior:"smooth"})}return!0}const E=$().isSafari;return y&&!i&&E&&r.isElement&&r.virtual.update(!1,!1,n),r.setTransition(t),r.setTranslate(w),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.removeEventListener("transitionend",r.onSlideToWrapperTransitionEnd),r.onSlideToWrapperTransitionEnd=null,delete r.onSlideToWrapperTransitionEnd,r.transitionEnd(s,b))}),r.wrapperEl.addEventListener("transitionend",r.onSlideToWrapperTransitionEnd)),!0},slideToLoop:function(e,t,s,a){if(void 0===e&&(e=0),void 0===s&&(s=!0),"string"==typeof e){e=parseInt(e,10)}const i=this;if(i.destroyed)return;void 0===t&&(t=i.params.speed);const r=i.grid&&i.params.grid&&i.params.grid.rows>1;let n=e;if(i.params.loop)if(i.virtual&&i.params.virtual.enabled)n+=i.virtual.slidesBefore;else{let e;if(r){const t=n*i.params.grid.rows;e=i.slides.find((e=>1*e.getAttribute("data-swiper-slide-index")===t)).column}else e=i.getSlideIndexByData(n);const t=r?Math.ceil(i.slides.length/i.params.grid.rows):i.slides.length,{centeredSlides:s}=i.params;let l=i.params.slidesPerView;"auto"===l?l=i.slidesPerViewDynamic():(l=Math.ceil(parseFloat(i.params.slidesPerView,10)),s&&l%2==0&&(l+=1));let o=t-e1*t.getAttribute("data-swiper-slide-index")===e)).column}else n=i.getSlideIndexByData(n)}return requestAnimationFrame((()=>{i.slideTo(n,t,s,a)})),i},slideNext:function(e,t,s){void 0===t&&(t=!0);const a=this,{enabled:i,params:r,animating:n}=a;if(!i||a.destroyed)return a;void 0===e&&(e=a.params.speed);let l=r.slidesPerGroup;"auto"===r.slidesPerView&&1===r.slidesPerGroup&&r.slidesPerGroupAuto&&(l=Math.max(a.slidesPerViewDynamic("current",!0),1));const o=a.activeIndex{a.slideTo(a.activeIndex+o,e,t,s)})),!0}return r.rewind&&a.isEnd?a.slideTo(0,e,t,s):a.slideTo(a.activeIndex+o,e,t,s)},slidePrev:function(e,t,s){void 0===t&&(t=!0);const a=this,{params:i,snapGrid:r,slidesGrid:n,rtlTranslate:l,enabled:o,animating:d}=a;if(!o||a.destroyed)return a;void 0===e&&(e=a.params.speed);const c=a.virtual&&i.virtual.enabled;if(i.loop){if(d&&!c&&i.loopPreventsSliding)return!1;a.loopFix({direction:"prev"}),a._clientLeft=a.wrapperEl.clientLeft}function p(e){return e<0?-Math.floor(Math.abs(e)):Math.floor(e)}const u=p(l?a.translate:-a.translate),m=r.map((e=>p(e))),h=i.freeMode&&i.freeMode.enabled;let f=r[m.indexOf(u)-1];if(void 0===f&&(i.cssMode||h)){let e;r.forEach(((t,s)=>{u>=t&&(e=s)})),void 0!==e&&(f=h?r[e]:r[e>0?e-1:e])}let g=0;if(void 0!==f&&(g=n.indexOf(f),g<0&&(g=a.activeIndex-1),"auto"===i.slidesPerView&&1===i.slidesPerGroup&&i.slidesPerGroupAuto&&(g=g-a.slidesPerViewDynamic("previous",!0)+1,g=Math.max(g,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 i.loop&&0===a.activeIndex&&i.cssMode?(requestAnimationFrame((()=>{a.slideTo(g,e,t,s)})),!0):a.slideTo(g,e,t,s)},slideReset:function(e,t,s){void 0===t&&(t=!0);const a=this;if(!a.destroyed)return void 0===e&&(e=a.params.speed),a.slideTo(a.activeIndex,e,t,s)},slideToClosest:function(e,t,s,a){void 0===t&&(t=!0),void 0===a&&(a=.5);const i=this;if(i.destroyed)return;void 0===e&&(e=i.params.speed);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;if(e.destroyed)return;const{params:t,slidesEl:s}=e,a="auto"===t.slidesPerView?e.slidesPerViewDynamic():t.slidesPerView;let i,r=e.getSlideIndexWhenGrid(e.clickedIndex);const n=e.isElement?"swiper-slide":`.${t.slideClass}`,o=e.grid&&e.params.grid&&e.params.grid.rows>1;if(t.loop){if(e.animating)return;i=parseInt(e.clickedSlide.getAttribute("data-swiper-slide-index"),10),t.centeredSlides?e.slideToLoop(i):r>(o?(e.slides.length-a)/2-(e.params.grid.rows-1):e.slides.length-a)?(e.loopFix(),r=e.getSlideIndex(f(s,`${n}[data-swiper-slide-index="${i}"]`)[0]),l((()=>{e.slideTo(r)}))):e.slideTo(r)}else e.slideTo(r)}};var _={loopCreate:function(e,t){const s=this,{params:a,slidesEl:i}=s;if(!a.loop||s.virtual&&s.params.virtual.enabled)return;const r=()=>{f(i,`.${a.slideClass}, swiper-slide`).forEach(((e,t)=>{e.setAttribute("data-swiper-slide-index",t)}))},n=s.grid&&a.grid&&a.grid.rows>1;a.loopAddBlankSlides&&(a.slidesPerGroup>1||n)&&(()=>{const e=f(i,`.${a.slideBlankClass}`);e.forEach((e=>{e.remove()})),e.length>0&&(s.recalcSlides(),s.updateSlides())})();const l=a.slidesPerGroup*(n?a.grid.rows:1),o=s.slides.length%l!=0,d=n&&s.slides.length%a.grid.rows!=0,c=e=>{for(let t=0;t1;c.lengthe.classList.contains(h.slideActiveClass)))):C=r;const P="next"===a||!a,L="prev"===a||!a;let I=0,z=0;const A=(E?c[r].column:r)+(f&&void 0===i?-w/2+.5:0);if(A=0;t-=1)c[t].column===e&&x.push(t)}else x.push(T-t-1)}}else if(A+w>T-y){z=Math.max(A-(T-2*y),b),M&&(z=Math.max(z,w-T+v+1));for(let e=0;e{e.column===t&&S.push(s)})):S.push(t)}}if(d.__preventObserver__=!0,requestAnimationFrame((()=>{d.__preventObserver__=!1})),"cards"===d.params.effect&&c.length{c[e].swiperLoopMoveDOM=!0,m.prepend(c[e]),c[e].swiperLoopMoveDOM=!1})),P&&S.forEach((e=>{c[e].swiperLoopMoveDOM=!0,m.append(c[e]),c[e].swiperLoopMoveDOM=!1})),d.recalcSlides(),"auto"===h.slidesPerView?d.updateSlides():E&&(x.length>0&&L||S.length>0&&P)&&d.slides.forEach(((e,t)=>{d.grid.updateSlide(t,e,d.slides)})),h.watchSlidesProgress&&d.updateSlidesOffset(),s)if(x.length>0&&L){if(void 0===t){const e=d.slidesGrid[C],t=d.slidesGrid[C+I]-e;o?d.setTranslate(d.translate-t):(d.slideTo(C+Math.ceil(I),0,!1,!0),i&&(d.touchEventsData.startTranslate=d.touchEventsData.startTranslate-t,d.touchEventsData.currentTranslate=d.touchEventsData.currentTranslate-t))}else if(i){const e=E?x.length/h.grid.rows:x.length;d.slideTo(d.activeIndex+e,0,!1,!0),d.touchEventsData.currentTranslate=d.translate}}else if(S.length>0&&P)if(void 0===t){const e=d.slidesGrid[C],t=d.slidesGrid[C-z]-e;o?d.setTranslate(d.translate-t):(d.slideTo(C-z,0,!1,!0),i&&(d.touchEventsData.startTranslate=d.touchEventsData.startTranslate-t,d.touchEventsData.currentTranslate=d.touchEventsData.currentTranslate-t))}else{const e=E?S.length/h.grid.rows:S.length;d.slideTo(d.activeIndex-e,0,!1,!0)}if(d.allowSlidePrev=p,d.allowSlideNext=u,d.controller&&d.controller.control&&!l){const e={slideRealIndex:t,direction:a,setTranslate:i,activeSlideIndex:r,byController:!0};Array.isArray(d.controller.control)?d.controller.control.forEach((t=>{!t.destroyed&&t.params.loop&&t.loopFix({...e,slideTo:t.params.slidesPerView===h.slidesPerView&&s})})):d.controller.control instanceof d.constructor&&d.controller.control.params.loop&&d.controller.control.loopFix({...e,slideTo:d.controller.control.params.slidesPerView===h.slidesPerView&&s})}d.emit("loopFix")},loopDestroy:function(){const e=this,{params:t,slidesEl:s}=e;if(!t.loop||!s||e.virtual&&e.params.virtual.enabled)return;e.recalcSlides();const a=[];e.slides.forEach((e=>{const t=void 0===e.swiperSlideIndex?1*e.getAttribute("data-swiper-slide-index"):e.swiperSlideIndex;a[t]=e})),e.slides.forEach((e=>{e.removeAttribute("data-swiper-slide-index")})),a.forEach((e=>{s.append(e)})),e.recalcSlides(),e.slideTo(e.realIndex,0)}};function q(e,t,s){const a=r(),{params:i}=e,n=i.edgeSwipeDetection,l=i.edgeSwipeThreshold;return!n||!(s<=l||s>=a.innerWidth-l)||"prevent"===n&&(t.preventDefault(),!0)}function V(e){const t=this,s=a();let i=e;i.originalEvent&&(i=i.originalEvent);const n=t.touchEventsData;if("pointerdown"===i.type){if(null!==n.pointerId&&n.pointerId!==i.pointerId)return;n.pointerId=i.pointerId}else"touchstart"===i.type&&1===i.targetTouches.length&&(n.touchId=i.targetTouches[0].identifier);if("touchstart"===i.type)return void q(t,i,i.targetTouches[0].pageX);const{params:l,touches:d,enabled:c}=t;if(!c)return;if(!l.simulateTouch&&"mouse"===i.pointerType)return;if(t.animating&&l.preventInteractionOnTransition)return;!t.animating&&l.cssMode&&l.loop&&t.loopFix();let p=i.target;if("wrapper"===l.touchEventsTarget&&!function(e,t){const s=r();let a=t.contains(e);!a&&s.HTMLSlotElement&&t instanceof HTMLSlotElement&&(a=[...t.assignedElements()].includes(e),a||(a=function(e,t){const s=[t];for(;s.length>0;){const t=s.shift();if(e===t)return!0;s.push(...t.children,...t.shadowRoot?t.shadowRoot.children:[],...t.assignedElements?t.assignedElements():[])}}(e,t)));return a}(p,t.wrapperEl))return;if("which"in i&&3===i.which)return;if("button"in i&&i.button>0)return;if(n.isTouched&&n.isMoved)return;const u=!!l.noSwipingClass&&""!==l.noSwipingClass,m=i.composedPath?i.composedPath():i.path;u&&i.target&&i.target.shadowRoot&&m&&(p=m[0]);const h=l.noSwipingSelector?l.noSwipingSelector:`.${l.noSwipingClass}`,f=!(!i.target||!i.target.shadowRoot);if(l.noSwiping&&(f?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)}(h,p):p.closest(h)))return void(t.allowClick=!0);if(l.swipeHandler&&!p.closest(l.swipeHandler))return;d.currentX=i.pageX,d.currentY=i.pageY;const g=d.currentX,v=d.currentY;if(!q(t,i,g))return;Object.assign(n,{isTouched:!0,isMoved:!1,allowTouchCallbacks:!0,isScrolling:void 0,startMoving:void 0}),d.startX=g,d.startY=v,n.touchStartTime=o(),t.allowClick=!0,t.updateSize(),t.swipeDirection=void 0,l.threshold>0&&(n.allowThresholdMove=!1);let w=!0;p.matches(n.focusableElements)&&(w=!1,"SELECT"===p.nodeName&&(n.isTouched=!1)),s.activeElement&&s.activeElement.matches(n.focusableElements)&&s.activeElement!==p&&("mouse"===i.pointerType||"mouse"!==i.pointerType&&!p.matches(n.focusableElements))&&s.activeElement.blur();const b=w&&t.allowTouchMove&&l.touchStartPreventDefault;!l.touchStartForcePreventDefault&&!b||p.isContentEditable||i.preventDefault(),l.freeMode&&l.freeMode.enabled&&t.freeMode&&t.animating&&!l.cssMode&&t.freeMode.onTouchStart(),t.emit("touchStart",i)}function F(e){const t=a(),s=this,i=s.touchEventsData,{params:r,touches:n,rtlTranslate:l,enabled:d}=s;if(!d)return;if(!r.simulateTouch&&"mouse"===e.pointerType)return;let c,p=e;if(p.originalEvent&&(p=p.originalEvent),"pointermove"===p.type){if(null!==i.touchId)return;if(p.pointerId!==i.pointerId)return}if("touchmove"===p.type){if(c=[...p.changedTouches].find((e=>e.identifier===i.touchId)),!c||c.identifier!==i.touchId)return}else c=p;if(!i.isTouched)return void(i.startMoving&&i.isScrolling&&s.emit("touchMoveOpposite",p));const u=c.pageX,m=c.pageY;if(p.preventedByNestedSwiper)return n.startX=u,void(n.startY=m);if(!s.allowTouchMove)return p.target.matches(i.focusableElements)||(s.allowClick=!1),void(i.isTouched&&(Object.assign(n,{startX:u,startY:m,currentX:u,currentY:m}),i.touchStartTime=o()));if(r.touchReleaseOnEdges&&!r.loop)if(s.isVertical()){if(mn.startY&&s.translate>=s.minTranslate())return i.isTouched=!1,void(i.isMoved=!1)}else{if(l&&(u>n.startX&&-s.translate<=s.maxTranslate()||u=s.minTranslate()))return;if(!l&&(un.startX&&s.translate>=s.minTranslate()))return}if(t.activeElement&&t.activeElement.matches(i.focusableElements)&&t.activeElement!==p.target&&"mouse"!==p.pointerType&&t.activeElement.blur(),t.activeElement&&p.target===t.activeElement&&p.target.matches(i.focusableElements))return i.isMoved=!0,void(s.allowClick=!1);i.allowTouchCallbacks&&s.emit("touchMove",p),n.previousX=n.currentX,n.previousY=n.currentY,n.currentX=u,n.currentY=m;const h=n.currentX-n.startX,f=n.currentY-n.startY;if(s.params.threshold&&Math.sqrt(h**2+f**2)=25&&(e=180*Math.atan2(Math.abs(f),Math.abs(h))/Math.PI,i.isScrolling=s.isHorizontal()?e>r.touchAngle:90-e>r.touchAngle)}if(i.isScrolling&&s.emit("touchMoveOpposite",p),void 0===i.startMoving&&(n.currentX===n.startX&&n.currentY===n.startY||(i.startMoving=!0)),i.isScrolling||"touchmove"===p.type&&i.preventTouchMoveFromPointerMove)return void(i.isTouched=!1);if(!i.startMoving)return;s.allowClick=!1,!r.cssMode&&p.cancelable&&p.preventDefault(),r.touchMoveStopPropagation&&!r.nested&&p.stopPropagation();let g=s.isHorizontal()?h:f,v=s.isHorizontal()?n.currentX-n.previousX:n.currentY-n.previousY;r.oneWayMovement&&(g=Math.abs(g)*(l?1:-1),v=Math.abs(v)*(l?1:-1)),n.diff=g,g*=r.touchRatio,l&&(g=-g,v=-v);const w=s.touchesDirection;s.swipeDirection=g>0?"prev":"next",s.touchesDirection=v>0?"prev":"next";const b=s.params.loop&&!r.cssMode,y="next"===s.touchesDirection&&s.allowSlideNext||"prev"===s.touchesDirection&&s.allowSlidePrev;if(!i.isMoved){if(b&&y&&s.loopFix({direction:s.swipeDirection}),i.startTranslate=s.getTranslate(),s.setTransition(0),s.animating){const e=new window.CustomEvent("transitionend",{bubbles:!0,cancelable:!0,detail:{bySwiperTouchMove:!0}});s.wrapperEl.dispatchEvent(e)}i.allowMomentumBounce=!1,!r.grabCursor||!0!==s.allowSlideNext&&!0!==s.allowSlidePrev||s.setGrabCursor(!0),s.emit("sliderFirstMove",p)}if((new Date).getTime(),!1!==r._loopSwapReset&&i.isMoved&&i.allowThresholdMove&&w!==s.touchesDirection&&b&&y&&Math.abs(g)>=1)return Object.assign(n,{startX:u,startY:m,currentX:u,currentY:m,startTranslate:i.currentTranslate}),i.loopSwapReset=!0,void(i.startTranslate=i.currentTranslate);s.emit("sliderMove",p),i.isMoved=!0,i.currentTranslate=g+i.startTranslate;let E=!0,x=r.resistanceRatio;if(r.touchReleaseOnEdges&&(x=0),g>0?(b&&y&&i.allowThresholdMove&&i.currentTranslate>(r.centeredSlides?s.minTranslate()-s.slidesSizesGrid[s.activeIndex+1]-("auto"!==r.slidesPerView&&s.slides.length-r.slidesPerView>=2?s.slidesSizesGrid[s.activeIndex+1]+s.params.spaceBetween:0)-s.params.spaceBetween:s.minTranslate())&&s.loopFix({direction:"prev",setTranslate:!0,activeSlideIndex:0}),i.currentTranslate>s.minTranslate()&&(E=!1,r.resistance&&(i.currentTranslate=s.minTranslate()-1+(-s.minTranslate()+i.startTranslate+g)**x))):g<0&&(b&&y&&i.allowThresholdMove&&i.currentTranslate<(r.centeredSlides?s.maxTranslate()+s.slidesSizesGrid[s.slidesSizesGrid.length-1]+s.params.spaceBetween+("auto"!==r.slidesPerView&&s.slides.length-r.slidesPerView>=2?s.slidesSizesGrid[s.slidesSizesGrid.length-1]+s.params.spaceBetween:0):s.maxTranslate())&&s.loopFix({direction:"next",setTranslate:!0,activeSlideIndex:s.slides.length-("auto"===r.slidesPerView?s.slidesPerViewDynamic():Math.ceil(parseFloat(r.slidesPerView,10)))}),i.currentTranslatei.startTranslate&&(i.currentTranslate=i.startTranslate),s.allowSlidePrev||s.allowSlideNext||(i.currentTranslate=i.startTranslate),r.threshold>0){if(!(Math.abs(g)>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()),r.freeMode&&r.freeMode.enabled&&s.freeMode&&s.freeMode.onTouchMove(),s.updateProgress(i.currentTranslate),s.setTranslate(i.currentTranslate))}function W(e){const t=this,s=t.touchEventsData;let a,i=e;i.originalEvent&&(i=i.originalEvent);if("touchend"===i.type||"touchcancel"===i.type){if(a=[...i.changedTouches].find((e=>e.identifier===s.touchId)),!a||a.identifier!==s.touchId)return}else{if(null!==s.touchId)return;if(i.pointerId!==s.pointerId)return;a=i}if(["pointercancel","pointerout","pointerleave","contextmenu"].includes(i.type)){if(!(["pointercancel","contextmenu"].includes(i.type)&&(t.browser.isSafari||t.browser.isWebView)))return}s.pointerId=null,s.touchId=null;const{params:r,touches:n,rtlTranslate:d,slidesGrid:c,enabled:p}=t;if(!p)return;if(!r.simulateTouch&&"mouse"===i.pointerType)return;if(s.allowTouchCallbacks&&t.emit("touchEnd",i),s.allowTouchCallbacks=!1,!s.isTouched)return s.isMoved&&r.grabCursor&&t.setGrabCursor(!1),s.isMoved=!1,void(s.startMoving=!1);r.grabCursor&&s.isMoved&&s.isTouched&&(!0===t.allowSlideNext||!0===t.allowSlidePrev)&&t.setGrabCursor(!1);const u=o(),m=u-s.touchStartTime;if(t.allowClick){const e=i.path||i.composedPath&&i.composedPath();t.updateClickedSlide(e&&e[0]||i.target,e),t.emit("tap click",i),m<300&&u-s.lastClickTime<300&&t.emit("doubleTap doubleClick",i)}if(s.lastClickTime=o(),l((()=>{t.destroyed||(t.allowClick=!0)})),!s.isTouched||!s.isMoved||!t.swipeDirection||0===n.diff&&!s.loopSwapReset||s.currentTranslate===s.startTranslate&&!s.loopSwapReset)return s.isTouched=!1,s.isMoved=!1,void(s.startMoving=!1);let h;if(s.isTouched=!1,s.isMoved=!1,s.startMoving=!1,h=r.followFinger?d?t.translate:-t.translate:-s.currentTranslate,r.cssMode)return;if(r.freeMode&&r.freeMode.enabled)return void t.freeMode.onTouchEnd({currentPos:h});const f=h>=-t.maxTranslate()&&!t.params.loop;let g=0,v=t.slidesSizesGrid[0];for(let e=0;e=c[e]&&h=c[e])&&(g=e,v=c[c.length-1]-c[c.length-2])}let w=null,b=null;r.rewind&&(t.isBeginning?b=r.virtual&&r.virtual.enabled&&t.virtual?t.virtual.slides.length-1:t.slides.length-1:t.isEnd&&(w=0));const y=(h-c[g])/v,E=gr.longSwipesMs){if(!r.longSwipes)return void t.slideTo(t.activeIndex);"next"===t.swipeDirection&&(y>=r.longSwipesRatio?t.slideTo(r.rewind&&t.isEnd?w:g+E):t.slideTo(g)),"prev"===t.swipeDirection&&(y>1-r.longSwipesRatio?t.slideTo(g+E):null!==b&&y<0&&Math.abs(y)>r.longSwipesRatio?t.slideTo(b):t.slideTo(g))}else{if(!r.shortSwipes)return void t.slideTo(t.activeIndex);t.navigation&&(i.target===t.navigation.nextEl||i.target===t.navigation.prevEl)?i.target===t.navigation.nextEl?t.slideTo(g+E):t.slideTo(g):("next"===t.swipeDirection&&t.slideTo(null!==w?w:g+E),"prev"===t.swipeDirection&&t.slideTo(null!==b?b:g))}}function j(){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,n=e.virtual&&e.params.virtual.enabled;e.allowSlideNext=!0,e.allowSlidePrev=!0,e.updateSize(),e.updateSlides(),e.updateSlidesClasses();const l=n&&t.loop;!("auto"===t.slidesPerView||t.slidesPerView>1)||!e.isEnd||e.isBeginning||e.params.centeredSlides||l?e.params.loop&&!n?e.slideToLoop(e.realIndex,0,!1,!0):e.slideTo(e.activeIndex,0,!1,!0):e.slideTo(e.slides.length-1,0,!1,!0),e.autoplay&&e.autoplay.running&&e.autoplay.paused&&(clearTimeout(e.autoplay.resizeTimeout),e.autoplay.resizeTimeout=setTimeout((()=>{e.autoplay&&e.autoplay.running&&e.autoplay.paused&&e.autoplay.resume()}),500)),e.allowSlidePrev=i,e.allowSlideNext=a,e.params.watchOverflow&&r!==e.snapGrid&&e.checkOverflow()}function U(e){const t=this;t.enabled&&(t.allowClick||(t.params.preventClicks&&e.preventDefault(),t.params.preventClicksPropagation&&t.animating&&(e.stopPropagation(),e.stopImmediatePropagation())))}function K(){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)}function Z(e){const t=this;G(t,e.target),t.params.cssMode||"auto"!==t.params.slidesPerView&&!t.params.autoHeight||t.update()}function Q(){const e=this;e.documentTouchHandlerProceeded||(e.documentTouchHandlerProceeded=!0,e.params.touchReleaseOnEdges&&(e.el.style.touchAction="auto"))}const J=(e,t)=>{const s=a(),{params:i,el:r,wrapperEl:n,device:l}=e,o=!!i.nested,d="on"===t?"addEventListener":"removeEventListener",c=t;r&&"string"!=typeof r&&(s[d]("touchstart",e.onDocumentTouchStart,{passive:!1,capture:o}),r[d]("touchstart",e.onTouchStart,{passive:!1}),r[d]("pointerdown",e.onTouchStart,{passive:!1}),s[d]("touchmove",e.onTouchMove,{passive:!1,capture:o}),s[d]("pointermove",e.onTouchMove,{passive:!1,capture:o}),s[d]("touchend",e.onTouchEnd,{passive:!0}),s[d]("pointerup",e.onTouchEnd,{passive:!0}),s[d]("pointercancel",e.onTouchEnd,{passive:!0}),s[d]("touchcancel",e.onTouchEnd,{passive:!0}),s[d]("pointerout",e.onTouchEnd,{passive:!0}),s[d]("pointerleave",e.onTouchEnd,{passive:!0}),s[d]("contextmenu",e.onTouchEnd,{passive:!0}),(i.preventClicks||i.preventClicksPropagation)&&r[d]("click",e.onClick,!0),i.cssMode&&n[d]("scroll",e.onScroll),i.updateOnWindowResize?e[c](l.ios||l.android?"resize orientationchange observerUpdate":"resize observerUpdate",j,!0):e[c]("observerUpdate",j,!0),r[d]("load",e.onLoad,{capture:!0}))};const ee=(e,t)=>e.grid&&t.grid&&t.grid.rows>1;var te={init:!0,direction:"horizontal",oneWayMovement:!1,swiperElementNodeName:"SWIPER-CONTAINER",touchEventsTarget:"wrapper",initialSlide:0,speed:300,cssMode:!1,updateOnWindowResize:!0,resizeObserver:!0,nested:!1,createElements:!1,eventsPrefix:"swiper",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:5,touchMoveStopPropagation:!1,touchStartPreventDefault:!0,touchStartForcePreventDefault:!1,touchReleaseOnEdges:!1,uniqueNavElements:!0,resistance:!0,resistanceRatio:.85,watchSlidesProgress:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,loop:!1,loopAddBlankSlides:!0,loopAdditionalSlides:0,loopPreventsSliding:!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-blank",slideActiveClass:"swiper-slide-active",slideVisibleClass:"swiper-slide-visible",slideFullyVisibleClass:"swiper-slide-fully-visible",slideNextClass:"swiper-slide-next",slidePrevClass:"swiper-slide-prev",wrapperClass:"swiper-wrapper",lazyPreloaderClass:"swiper-lazy-preloader",lazyPreloadPrevNext:0,runCallbacksOnInit:!0,_emitClasses:!1};function se(e,t){return function(s){void 0===s&&(s={});const a=Object.keys(s)[0],i=s[a];"object"==typeof i&&null!==i?(!0===e[a]&&(e[a]={enabled:!0}),"navigation"===a&&e[a]&&e[a].enabled&&!e[a].prevEl&&!e[a].nextEl&&(e[a].auto=!0),["pagination","scrollbar"].indexOf(a)>=0&&e[a]&&e[a].enabled&&!e[a].el&&(e[a].auto=!0),a in e&&"enabled"in i?("object"!=typeof e[a]||"enabled"in e[a]||(e[a].enabled=!0),e[a]||(e[a]={enabled:!1}),p(t,s)):p(t,s)):p(t,s)}}const ae={eventsEmitter:k,update:B,translate:H,transition:{setTransition:function(e,t){const s=this;s.params.cssMode||(s.wrapperEl.style.transitionDuration=`${e}ms`,s.wrapperEl.style.transitionDelay=0===e?"0ms":""),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(),N({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),N({swiper:s,runCallbacks:e,direction:t,step:"End"}))}},slide:R,loop:_,grabCursor:{setGrabCursor:function(e){const t=this;if(!t.params.simulateTouch||t.params.watchOverflow&&t.isLocked||t.params.cssMode)return;const s="container"===t.params.touchEventsTarget?t.el:t.wrapperEl;t.isElement&&(t.__preventObserver__=!0),s.style.cursor="move",s.style.cursor=e?"grabbing":"grab",t.isElement&&requestAnimationFrame((()=>{t.__preventObserver__=!1}))},unsetGrabCursor:function(){const e=this;e.params.watchOverflow&&e.isLocked||e.params.cssMode||(e.isElement&&(e.__preventObserver__=!0),e["container"===e.params.touchEventsTarget?"el":"wrapperEl"].style.cursor="",e.isElement&&requestAnimationFrame((()=>{e.__preventObserver__=!1})))}},events:{attachEvents:function(){const e=this,{params:t}=e;e.onTouchStart=V.bind(e),e.onTouchMove=F.bind(e),e.onTouchEnd=W.bind(e),e.onDocumentTouchStart=Q.bind(e),t.cssMode&&(e.onScroll=K.bind(e)),e.onClick=U.bind(e),e.onLoad=Z.bind(e),J(e,"on")},detachEvents:function(){J(this,"off")}},breakpoints:{setBreakpoint:function(){const e=this,{realIndex:t,initialized:s,params:i,el:r}=e,n=i.breakpoints;if(!n||n&&0===Object.keys(n).length)return;const l=a(),o="window"!==i.breakpointsBase&&i.breakpointsBase?"container":i.breakpointsBase,d=["window","container"].includes(i.breakpointsBase)||!i.breakpointsBase?e.el:l.querySelector(i.breakpointsBase),c=e.getBreakpoint(n,o,d);if(!c||e.currentBreakpoint===c)return;const u=(c in n?n[c]:void 0)||e.originalParams,m=ee(e,i),h=ee(e,u),f=e.params.grabCursor,g=u.grabCursor,v=i.enabled;m&&!h?(r.classList.remove(`${i.containerModifierClass}grid`,`${i.containerModifierClass}grid-column`),e.emitContainerClasses()):!m&&h&&(r.classList.add(`${i.containerModifierClass}grid`),(u.grid.fill&&"column"===u.grid.fill||!u.grid.fill&&"column"===i.grid.fill)&&r.classList.add(`${i.containerModifierClass}grid-column`),e.emitContainerClasses()),f&&!g?e.unsetGrabCursor():!f&&g&&e.setGrabCursor(),["navigation","pagination","scrollbar"].forEach((t=>{if(void 0===u[t])return;const s=i[t]&&i[t].enabled,a=u[t]&&u[t].enabled;s&&!a&&e[t].disable(),!s&&a&&e[t].enable()}));const w=u.direction&&u.direction!==i.direction,b=i.loop&&(u.slidesPerView!==i.slidesPerView||w),y=i.loop;w&&s&&e.changeDirection(),p(e.params,u);const E=e.params.enabled,x=e.params.loop;Object.assign(e,{allowTouchMove:e.params.allowTouchMove,allowSlideNext:e.params.allowSlideNext,allowSlidePrev:e.params.allowSlidePrev}),v&&!E?e.disable():!v&&E&&e.enable(),e.currentBreakpoint=c,e.emit("_beforeBreakpoint",u),s&&(b?(e.loopDestroy(),e.loopCreate(t),e.updateSlides()):!y&&x?(e.loopCreate(t),e.updateSlides()):y&&!x&&e.loopDestroy()),e.emit("breakpoint",u)},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;es}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:{addClasses:function(){const e=this,{classNames:t,params:s,rtl:a,el:i,device:r}=e,n=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,{"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(...n),i.classList.add(...t),e.emitContainerClasses()},removeClasses:function(){const{el:e,classNames:t}=this;e&&"string"!=typeof e&&(e.classList.remove(...t),this.emitContainerClasses())}}},ie={};class re{constructor(){let e,t;for(var s=arguments.length,i=new Array(s),r=0;r1){const e=[];return n.querySelectorAll(t.el).forEach((s=>{const a=p({},t,{el:s});e.push(new re(a))})),e}const l=this;l.__swiper__=!0,l.support=z(),l.device=A({userAgent:t.userAgent}),l.browser=$(),l.eventsListeners={},l.eventsAnyListeners=[],l.modules=[...l.__modules__],t.modules&&Array.isArray(t.modules)&&l.modules.push(...t.modules);const o={};l.modules.forEach((e=>{e({params:t,swiper:l,extendParams:se(t,o),on:l.on.bind(l),once:l.once.bind(l),off:l.off.bind(l),emit:l.emit.bind(l)})}));const d=p({},te,o);return l.params=p({},d,ie,t),l.originalParams=p({},l.params),l.passedParams=p({},t),l.params&&l.params.on&&Object.keys(l.params.on).forEach((e=>{l.on(e,l.params.on[e])})),l.params&&l.params.onAny&&l.onAny(l.params.onAny),Object.assign(l,{enabled:l.params.enabled,el:e,classNames:[],slides:[],slidesGrid:[],snapGrid:[],slidesSizesGrid:[],isHorizontal:()=>"horizontal"===l.params.direction,isVertical:()=>"vertical"===l.params.direction,activeIndex:0,realIndex:0,isBeginning:!0,isEnd:!1,translate:0,previousTranslate:0,progress:0,velocity:0,animating:!1,cssOverflowAdjustment(){return Math.trunc(this.translate/2**23)*2**23},allowSlideNext:l.params.allowSlideNext,allowSlidePrev:l.params.allowSlidePrev,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:l.params.focusableElements,lastClickTime:0,clickTimeout:void 0,velocities:[],allowMomentumBounce:void 0,startMoving:void 0,pointerId:null,touchId:null},allowClick:!0,allowTouchMove:l.params.allowTouchMove,touches:{startX:0,startY:0,currentX:0,currentY:0,diff:0},imagesToLoad:[],imagesLoaded:0}),l.emit("_swiper"),l.params.init&&l.init(),l}getDirectionLabel(e){return this.isHorizontal()?e:{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"}[e]}getSlideIndex(e){const{slidesEl:t,params:s}=this,a=y(f(t,`.${s.slideClass}, swiper-slide`)[0]);return y(e)-a}getSlideIndexByData(e){return this.getSlideIndex(this.slides.find((t=>1*t.getAttribute("data-swiper-slide-index")===e)))}getSlideIndexWhenGrid(e){return this.grid&&this.params.grid&&this.params.grid.rows>1&&("column"===this.params.grid.fill?e=Math.floor(e/this.params.grid.rows):"row"===this.params.grid.fill&&(e%=Math.ceil(this.slides.length/this.params.grid.rows))),e}recalcSlides(){const{slidesEl:e,params:t}=this;this.slides=f(e,`.${t.slideClass}, swiper-slide`)}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.forEach((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("number"==typeof s.slidesPerView)return s.slidesPerView;if(s.centeredSlides){let e,t=a[l]?Math.ceil(a[l].swiperSlideSize):0;for(let s=l+1;sn&&(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=0;e-=1){i[l]-i[e]{t.complete&&G(e,t)})),e.updateSize(),e.updateSlides(),e.updateProgress(),e.updateSlidesClasses(),s.freeMode&&s.freeMode.enabled&&!s.cssMode)a(),s.autoHeight&&e.updateAutoHeight();else{if(("auto"===s.slidesPerView||s.slidesPerView>1)&&e.isEnd&&!s.centeredSlides){const t=e.virtual&&s.virtual.enabled?e.virtual.slides:e.slides;i=e.slideTo(t.length-1,0,!1,!0)}else i=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.classList.remove(`${s.params.containerModifierClass}${a}`),s.el.classList.add(`${s.params.containerModifierClass}${e}`),s.emitContainerClasses(),s.params.direction=e,s.slides.forEach((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.classList.add(`${t.params.containerModifierClass}rtl`),t.el.dir="rtl"):(t.el.classList.remove(`${t.params.containerModifierClass}rtl`),t.el.dir="ltr"),t.update())}mount(e){const t=this;if(t.mounted)return!0;let s=e||t.params.el;if("string"==typeof s&&(s=document.querySelector(s)),!s)return!1;s.swiper=t,s.parentNode&&s.parentNode.host&&s.parentNode.host.nodeName===t.params.swiperElementNodeName.toUpperCase()&&(t.isElement=!0);const a=()=>`.${(t.params.wrapperClass||"").trim().split(" ").join(".")}`;let i=(()=>{if(s&&s.shadowRoot&&s.shadowRoot.querySelector){return s.shadowRoot.querySelector(a())}return f(s,a())[0]})();return!i&&t.params.createElements&&(i=v("div",t.params.wrapperClass),s.append(i),f(s,`.${t.params.slideClass}`).forEach((e=>{i.append(e)}))),Object.assign(t,{el:s,wrapperEl:i,slidesEl:t.isElement&&!s.parentNode.host.slideSlots?s.parentNode.host:i,hostEl:t.isElement?s.parentNode.host:s,mounted:!0,rtl:"rtl"===s.dir.toLowerCase()||"rtl"===b(s,"direction"),rtlTranslate:"horizontal"===t.params.direction&&("rtl"===s.dir.toLowerCase()||"rtl"===b(s,"direction")),wrongRTL:"-webkit-box"===b(i,"display")}),!0}init(e){const t=this;if(t.initialized)return t;if(!1===t.mount(e))return t;t.emit("beforeInit"),t.params.breakpoints&&t.setBreakpoint(),t.addClasses(),t.updateSize(),t.updateSlides(),t.params.watchOverflow&&t.checkOverflow(),t.params.grabCursor&&t.enabled&&t.setGrabCursor(),t.params.loop&&t.virtual&&t.params.virtual.enabled?t.slideTo(t.params.initialSlide+t.virtual.slidesBefore,0,t.params.runCallbacksOnInit,!1,!0):t.slideTo(t.params.initialSlide,0,t.params.runCallbacksOnInit,!1,!0),t.params.loop&&t.loopCreate(void 0,!0),t.attachEvents();const s=[...t.el.querySelectorAll('[loading="lazy"]')];return t.isElement&&s.push(...t.hostEl.querySelectorAll('[loading="lazy"]')),s.forEach((e=>{e.complete?G(t,e):e.addEventListener("load",(e=>{G(t,e.target)}))})),Y(t),t.initialized=!0,Y(t),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&&"string"!=typeof i&&i.removeAttribute("style"),r&&r.removeAttribute("style"),n&&n.length&&n.forEach((e=>{e.classList.remove(a.slideVisibleClass,a.slideFullyVisibleClass,a.slideActiveClass,a.slideNextClass,a.slidePrevClass),e.removeAttribute("style"),e.removeAttribute("data-swiper-slide-index")}))),s.emit("destroy"),Object.keys(s.eventsListeners).forEach((e=>{s.off(e)})),!1!==e&&(s.el&&"string"!=typeof s.el&&(s.el.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){p(ie,e)}static get extendedDefaults(){return ie}static get defaults(){return te}static installModule(e){re.prototype.__modules__||(re.prototype.__modules__=[]);const t=re.prototype.__modules__;"function"==typeof e&&t.indexOf(e)<0&&t.push(e)}static use(e){return Array.isArray(e)?(e.forEach((e=>re.installModule(e))),re):(re.installModule(e),re)}}function ne(e,t,s,a){return e.params.createElements&&Object.keys(a).forEach((i=>{if(!s[i]&&!0===s.auto){let r=f(e.el,`.${a[i]}`)[0];r||(r=v("div",a[i]),r.className=a[i],e.el.append(r)),s[i]=r,t[i]=r}})),s}function le(e){return void 0===e&&(e=""),`.${e.trim().replace(/([\.:!+\/()[\]])/g,"\\$1").replace(/ /g,".")}`}function oe(e){const t=this,{params:s,slidesEl:a}=t;s.loop&&t.loopDestroy();const i=e=>{if("string"==typeof e){const t=document.createElement("div");C(t,e),a.append(t.children[0]),C(t,"")}else a.append(e)};if("object"==typeof e&&"length"in e)for(let t=0;t{if("string"==typeof e){const t=document.createElement("div");C(t,e),i.prepend(t.children[0]),C(t,"")}else i.prepend(e)};if("object"==typeof e&&"length"in e){for(let t=0;t=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[t];e.remove(),d.unshift(e)}if("object"==typeof t&&"length"in t){for(let e=0;ee?n+t.length:n}else r.append(t);for(let e=0;e{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 _virtualUpdated",(()=>{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.forEach((e=>{e.querySelectorAll(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").forEach((e=>e.remove()))})),o()}})),a("virtualUpdate",(()=>{s.params.effect===t&&(s.slides.length||(c=!0),requestAnimationFrame((()=>{c&&s.slides&&s.slides.length&&(i(),c=!1)})))}))}function he(e,t){const s=h(t);return s!==t&&(s.style.backfaceVisibility="hidden",s.style["-webkit-backface-visibility"]="hidden"),s}function fe(e){let{swiper:t,duration:s,transformElements:a,allSlides:i}=e;const{activeIndex:r}=t;if(t.params.virtualTranslate&&0!==s){let e,s=!1;e=i?a:a.filter((e=>{const s=e.classList.contains("swiper-slide-transform")?(e=>{if(!e.parentElement)return t.slides.find((t=>t.shadowRoot&&t.shadowRoot===e.parentNode));return e.parentElement})(e):e;return t.getSlideIndex(s)===r})),e.forEach((e=>{x(e,(()=>{if(s)return;if(!t||t.destroyed)return;s=!0,t.animating=!1;const e=new window.CustomEvent("transitionend",{bubbles:!0,cancelable:!0});t.wrapperEl.dispatchEvent(e)}))}))}}function ge(e,t,s){const a=`swiper-slide-shadow${s?`-${s}`:""}${e?` swiper-slide-shadow-${e}`:""}`,i=h(t);let r=i.querySelector(`.${a.split(" ").join(".")}`);return r||(r=v("div",a.split(" ")),i.append(r)),r}Object.keys(ae).forEach((e=>{Object.keys(ae[e]).forEach((t=>{re.prototype[t]=ae[e][t]}))})),re.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,s){void 0===s&&(s={});const a=new(l.MutationObserver||l.WebkitMutationObserver)((e=>{if(t.__preventObserver__)return;if(1===e.length)return void i("observerUpdate",e[0]);const s=function(){i("observerUpdate",e[0])};l.requestAnimationFrame?l.requestAnimationFrame(s):l.setTimeout(s,0)}));a.observe(e,{attributes:void 0===s.attributes||s.attributes,childList:t.isElement||(void 0===s.childList||s).childList,characterData:void 0===s.characterData||s.characterData}),n.push(a)};s({observer:!1,observeParents:!1,observeSlideChildren:!1}),a("init",(()=>{if(t.params.observer){if(t.params.observeParents){const e=E(t.hostEl);for(let t=0;t{n.forEach((e=>{e.disconnect()})),n.splice(0,n.length)}))}]);const ve=[function(e){let t,{swiper:s,extendParams:i,on:r,emit:n}=e;i({virtual:{enabled:!1,slides:[],cache:!0,renderSlide:null,renderExternal:null,renderExternalUpdate:!0,addSlidesBefore:0,addSlidesAfter:0}});const l=a();s.virtual={cache:{},from:void 0,to:void 0,slides:[],offset:0,slidesGrid:[]};const o=l.createElement("div");function d(e,t){const a=s.params.virtual;if(a.cache&&s.virtual.cache[t])return s.virtual.cache[t];let i;return a.renderSlide?(i=a.renderSlide.call(s,e,t),"string"==typeof i&&(C(o,i),i=o.children[0])):i=s.isElement?v("swiper-slide"):v("div",s.params.slideClass),i.setAttribute("data-swiper-slide-index",t),a.renderSlide||C(i,e),a.cache&&(s.virtual.cache[t]=i),i}function c(e,t,a){const{slidesPerView:i,slidesPerGroup:r,centeredSlides:l,loop:o,initialSlide:c}=s.params;if(t&&!o&&c>0)return;const{addSlidesBefore:p,addSlidesAfter:u}=s.params.virtual,{from:m,to:h,slides:g,slidesGrid:v,offset:w}=s.virtual;s.params.cssMode||s.updateActiveIndex();const b=void 0===a?s.activeIndex||0:a;let y,E,x;y=s.rtlTranslate?"right":s.isHorizontal()?"left":"top",l?(E=Math.floor(i/2)+r+u,x=Math.floor(i/2)+r+p):(E=i+(r-1)+u,x=(o?i:r)+p);let S=b-x,T=b+E;o||(S=Math.max(S,0),T=Math.min(T,g.length-1));let M=(s.slidesGrid[S]||0)-(s.slidesGrid[0]||0);function C(){s.updateSlides(),s.updateProgress(),s.updateSlidesClasses(),n("virtualUpdate")}if(o&&b>=x?(S-=x,l||(M+=s.slidesGrid[0])):o&&b{e.style[y]=M-Math.abs(s.cssOverflowAdjustment())+"px"})),s.updateProgress(),void n("virtualUpdate");if(s.params.virtual.renderExternal)return s.params.virtual.renderExternal.call(s,{offset:M,from:S,to:T,slides:function(){const e=[];for(let t=S;t<=T;t+=1)e.push(g[t]);return e}()}),void(s.params.virtual.renderExternalUpdate?C():n("virtualUpdate"));const P=[],L=[],I=e=>{let t=e;return e<0?t=g.length+e:t>=g.length&&(t-=g.length),t};if(e)s.slides.filter((e=>e.matches(`.${s.params.slideClass}, swiper-slide`))).forEach((e=>{e.remove()}));else for(let e=m;e<=h;e+=1)if(eT){const t=I(e);s.slides.filter((e=>e.matches(`.${s.params.slideClass}[data-swiper-slide-index="${t}"], swiper-slide[data-swiper-slide-index="${t}"]`))).forEach((e=>{e.remove()}))}const z=o?-g.length:0,A=o?2*g.length:g.length;for(let t=z;t=S&&t<=T){const s=I(t);void 0===h||e?L.push(s):(t>h&&L.push(s),t{s.slidesEl.append(d(g[e],e))})),o)for(let e=P.length-1;e>=0;e-=1){const t=P[e];s.slidesEl.prepend(d(g[t],t))}else P.sort(((e,t)=>t-e)),P.forEach((e=>{s.slidesEl.prepend(d(g[e],e))}));f(s.slidesEl,".swiper-slide, swiper-slide").forEach((e=>{e.style[y]=M-Math.abs(s.cssOverflowAdjustment())+"px"})),C()}r("beforeInit",(()=>{if(!s.params.virtual.enabled)return;let e;if(void 0===s.passedParams.virtual.slides){const t=[...s.slidesEl.children].filter((e=>e.matches(`.${s.params.slideClass}, swiper-slide`)));t&&t.length&&(s.virtual.slides=[...t],e=!0,t.forEach(((e,t)=>{e.setAttribute("data-swiper-slide-index",t),s.virtual.cache[t]=e,e.remove()})))}e||(s.virtual.slides=s.params.virtual.slides),s.classNames.push(`${s.params.containerModifierClass}virtual`),s.params.watchSlidesProgress=!0,s.originalParams.watchSlidesProgress=!0,c(!1,!0)})),r("setTranslate",(()=>{s.params.virtual.enabled&&(s.params.cssMode&&!s._immediateVirtual?(clearTimeout(t),t=setTimeout((()=>{c()}),100)):c())})),r("init update resize",(()=>{s.params.virtual.enabled&&s.params.cssMode&&u(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{const a=e[s],r=a.getAttribute("data-swiper-slide-index");r&&a.setAttribute("data-swiper-slide-index",parseInt(r,10)+i),t[parseInt(s,10)+i]=a})),s.virtual.cache=t}c(!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.params.virtual.cache&&(delete s.virtual.cache[e[a]],Object.keys(s.virtual.cache).forEach((t=>{t>e&&(s.virtual.cache[t-1]=s.virtual.cache[t],s.virtual.cache[t-1].setAttribute("data-swiper-slide-index",t-1),delete s.virtual.cache[t])}))),s.virtual.slides.splice(e[a],1),e[a]{t>e&&(s.virtual.cache[t-1]=s.virtual.cache[t],s.virtual.cache[t-1].setAttribute("data-swiper-slide-index",t-1),delete s.virtual.cache[t])}))),s.virtual.slides.splice(e,1),e0&&0===E(t.el,`.${t.params.slideActiveClass}`).length)return;const a=t.el,i=a.clientWidth,r=a.clientHeight,n=o.innerWidth,l=o.innerHeight,d=w(a);s&&(d.left-=a.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=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||m||h)&&(a.preventDefault?a.preventDefault():a.returnValue=!1),(c||h)&&t.slideNext(),(d||m)&&t.slidePrev()),n("keyPress",i)}}function c(){t.keyboard.enabled||(l.addEventListener("keydown",d),t.keyboard.enabled=!0)}function p(){t.keyboard.enabled&&(l.removeEventListener("keydown",d),t.keyboard.enabled=!1)}t.keyboard={enabled:!1},s({keyboard:{enabled:!1,onlyInViewport:!0,pageUpDown:!0}}),i("init",(()=>{t.params.keyboard.enabled&&c()})),i("destroy",(()=>{t.keyboard.enabled&&p()})),Object.assign(t.keyboard,{enable:c,disable:p})},function(e){let{swiper:t,extendParams:s,on:a,emit:i}=e;const n=r();let d;s({mousewheel:{enabled:!1,releaseOnEdges:!1,invert:!1,forceToAxis:!1,sensitivity:1,eventsTarget:"container",thresholdDelta:null,thresholdTime:null,noMousewheelClass:"swiper-no-mousewheel"}}),t.mousewheel={enabled:!1};let c,p=o();const u=[];function m(){t.enabled&&(t.mouseEntered=!0)}function h(){t.enabled&&(t.mouseEntered=!1)}function f(e){return!(t.params.mousewheel.thresholdDelta&&e.delta=6&&o()-p<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)),p=(new n.Date).getTime(),!1)))}function g(e){let s=e,a=!0;if(!t.enabled)return;if(e.target.closest(`.${t.params.mousewheel.noMousewheelClass}`))return;const r=t.params.mousewheel;t.params.cssMode&&s.preventDefault();let n=t.el;"container"!==t.params.mousewheel.eventsTarget&&(n=document.querySelector(t.params.mousewheel.eventsTarget));const p=n&&n.contains(s.target);if(!t.mouseEntered&&!p&&!r.releaseOnEdges)return!0;s.originalEvent&&(s=s.originalEvent);let m=0;const h=t.rtlTranslate?-1:1,g=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(g.pixelX)>Math.abs(g.pixelY)))return!0;m=-g.pixelX*h}else{if(!(Math.abs(g.pixelY)>Math.abs(g.pixelX)))return!0;m=-g.pixelY}else m=Math.abs(g.pixelX)>Math.abs(g.pixelY)?-g.pixelX*h:-g.pixelY;if(0===m)return!0;r.invert&&(m=-m);let v=t.getTranslate()+m*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:o(),delta:Math.abs(m),direction:Math.sign(m)},a=c&&e.time=t.minTranslate()&&(n=t.minTranslate()),n<=t.maxTranslate()&&(n=t.maxTranslate()),t.setTransition(0),t.setTranslate(n),t.updateProgress(),t.updateActiveIndex(),t.updateSlidesClasses(),(!o&&t.isBeginning||!p&&t.isEnd)&&t.updateSlidesClasses(),t.params.loop&&t.loopFix({direction:e.direction<0?"next":"prev",byMousewheel:!0}),t.params.freeMode.sticky){clearTimeout(d),d=void 0,u.length>=15&&u.shift();const s=u.length?u[u.length-1]:void 0,a=u[0];if(u.push(e),s&&(e.delta>s.delta||e.direction!==s.direction))u.splice(0);else if(u.length>=15&&e.time-a.time<500&&a.delta-e.delta>=1&&e.delta<=6){const s=m>0?.8:.2;c=e,u.splice(0),d=l((()=>{!t.destroyed&&t.params&&t.slideToClosest(t.params.speed,!0,void 0,s)}),0)}d||(d=l((()=>{if(t.destroyed||!t.params)return;c=e,u.splice(0),t.slideToClosest(t.params.speed,!0,void 0,.5)}),500))}if(a||i("scroll",s),t.params.autoplay&&t.params.autoplay.disableOnInteraction&&t.autoplay.stop(),r.releaseOnEdges&&(n===t.minTranslate()||n===t.maxTranslate()))return!0}}else{const s={time:o(),delta:Math.abs(m),direction:Math.sign(m),raw:e};u.length>=2&&u.shift();const a=u.length?u[u.length-1]:void 0;if(u.push(s),a?(s.direction!==a.direction||s.delta>a.delta||s.time>a.time+150)&&f(s):f(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 v(e){let s=t.el;"container"!==t.params.mousewheel.eventsTarget&&(s=document.querySelector(t.params.mousewheel.eventsTarget)),s[e]("mouseenter",m),s[e]("mouseleave",h),s[e]("wheel",g)}function w(){return t.params.cssMode?(t.wrapperEl.removeEventListener("wheel",g),!0):!t.mousewheel.enabled&&(v("addEventListener"),t.mousewheel.enabled=!0,!0)}function b(){return t.params.cssMode?(t.wrapperEl.addEventListener(event,g),!0):!!t.mousewheel.enabled&&(v("removeEventListener"),t.mousewheel.enabled=!1,!0)}a("init",(()=>{!t.params.mousewheel.enabled&&t.params.cssMode&&b(),t.params.mousewheel.enabled&&w()})),a("destroy",(()=>{t.params.cssMode&&w(),t.mousewheel.enabled&&b()})),Object.assign(t.mousewheel,{enable:w,disable:b})},function(e){let{swiper:t,extendParams:s,on:a,emit:i}=e;function r(e){let s;return e&&"string"==typeof e&&t.isElement&&(s=t.el.querySelector(e)||t.hostEl.querySelector(e),s)?s:(e&&("string"==typeof e&&(s=[...document.querySelectorAll(e)]),t.params.uniqueNavElements&&"string"==typeof e&&s&&s.length>1&&1===t.el.querySelectorAll(e).length?s=t.el.querySelector(e):s&&1===s.length&&(s=s[0])),e&&!s?e:s)}function n(e,s){const a=t.params.navigation;(e=T(e)).forEach((e=>{e&&(e.classList[s?"add":"remove"](...a.disabledClass.split(" ")),"BUTTON"===e.tagName&&(e.disabled=s),t.params.watchOverflow&&t.enabled&&e.classList[t.isLocked?"add":"remove"](a.lockClass))}))}function l(){const{nextEl:e,prevEl:s}=t.navigation;if(t.params.loop)return n(s,!1),void n(e,!1);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 d(e){e.preventDefault(),(!t.isEnd||t.params.loop||t.params.rewind)&&(t.slideNext(),i("navigationNext"))}function c(){const e=t.params.navigation;if(t.params.navigation=ne(t,t.originalParams.navigation,t.params.navigation,{nextEl:"swiper-button-next",prevEl:"swiper-button-prev"}),!e.nextEl&&!e.prevEl)return;let s=r(e.nextEl),a=r(e.prevEl);Object.assign(t.navigation,{nextEl:s,prevEl:a}),s=T(s),a=T(a);const i=(s,a)=>{s&&s.addEventListener("click","next"===a?d:o),!t.enabled&&s&&s.classList.add(...e.lockClass.split(" "))};s.forEach((e=>i(e,"next"))),a.forEach((e=>i(e,"prev")))}function p(){let{nextEl:e,prevEl:s}=t.navigation;e=T(e),s=T(s);const a=(e,s)=>{e.removeEventListener("click","next"===s?d:o),e.classList.remove(...t.params.navigation.disabledClass.split(" "))};e.forEach((e=>a(e,"next"))),s.forEach((e=>a(e,"prev")))}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,prevEl:null},a("init",(()=>{!1===t.params.navigation.enabled?u():(c(),l())})),a("toEdge fromEdge lock unlock",(()=>{l()})),a("destroy",(()=>{p()})),a("enable disable",(()=>{let{nextEl:e,prevEl:s}=t.navigation;e=T(e),s=T(s),t.enabled?l():[...e,...s].filter((e=>!!e)).forEach((e=>e.classList.add(t.params.navigation.lockClass)))})),a("click",((e,s)=>{let{nextEl:a,prevEl:r}=t.navigation;a=T(a),r=T(r);const n=s.target;let l=r.includes(n)||a.includes(n);if(t.isElement&&!l){const e=s.path||s.composedPath&&s.composedPath();e&&(l=e.find((e=>a.includes(e)||r.includes(e))))}if(t.params.navigation.hideOnClick&&!l){if(t.pagination&&t.params.pagination&&t.params.pagination.clickable&&(t.pagination.el===n||t.pagination.el.contains(n)))return;let e;a.length?e=a[0].classList.contains(t.params.navigation.hiddenClass):r.length&&(e=r[0].classList.contains(t.params.navigation.hiddenClass)),i(!0===e?"navigationShow":"navigationHide"),[...a,...r].filter((e=>!!e)).forEach((e=>e.classList.toggle(t.params.navigation.hiddenClass)))}}));const u=()=>{t.el.classList.add(...t.params.navigation.navigationDisabledClass.split(" ")),p()};Object.assign(t.navigation,{enable:()=>{t.el.classList.remove(...t.params.navigation.navigationDisabledClass.split(" ")),c(),l()},disable:u,update:l,init:c,destroy:p})},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,bullets:[]};let l=0;function o(){return!t.params.pagination.el||!t.pagination.el||Array.isArray(t.pagination.el)&&0===t.pagination.el.length}function d(e,s){const{bulletActiveClass:a}=t.params.pagination;e&&(e=e[("prev"===s?"previous":"next")+"ElementSibling"])&&(e.classList.add(`${a}-${s}`),(e=e[("prev"===s?"previous":"next")+"ElementSibling"])&&e.classList.add(`${a}-${s}-${s}`))}function c(e){const s=e.target.closest(le(t.params.pagination.bulletClass));if(!s)return;e.preventDefault();const a=y(s)*t.params.slidesPerGroup;if(t.params.loop){if(t.realIndex===a)return;const e=(i=t.realIndex,r=a,n=t.slides.length,(r%=n)==1+(i%=n)?"next":r===i-1?"previous":void 0);"next"===e?t.slideNext():"previous"===e?t.slidePrev():t.slideToLoop(a)}else t.slideTo(a);var i,r,n}function p(){const e=t.rtl,s=t.params.pagination;if(o())return;let a,r,c=t.pagination.el;c=T(c);const p=t.virtual&&t.params.virtual.enabled?t.virtual.slides.length:t.slides.length,u=t.params.loop?Math.ceil(p/t.params.slidesPerGroup):t.snapGrid.length;if(t.params.loop?(r=t.previousRealIndex||0,a=t.params.slidesPerGroup>1?Math.floor(t.realIndex/t.params.slidesPerGroup):t.realIndex):void 0!==t.snapIndex?(a=t.snapIndex,r=t.previousSnapIndex):(r=t.previousIndex||0,a=t.activeIndex||0),"bullets"===s.type&&t.pagination.bullets&&t.pagination.bullets.length>0){const i=t.pagination.bullets;let o,p,u;if(s.dynamicBullets&&(n=S(i[0],t.isHorizontal()?"width":"height",!0),c.forEach((e=>{e.style[t.isHorizontal()?"width":"height"]=n*(s.dynamicMainBullets+4)+"px"})),s.dynamicMainBullets>1&&void 0!==r&&(l+=a-(r||0),l>s.dynamicMainBullets-1?l=s.dynamicMainBullets-1:l<0&&(l=0)),o=Math.max(a-l,0),p=o+(Math.min(i.length,s.dynamicMainBullets)-1),u=(p+o)/2),i.forEach((e=>{const t=[...["","-next","-next-next","-prev","-prev-prev","-main"].map((e=>`${s.bulletActiveClass}${e}`))].map((e=>"string"==typeof e&&e.includes(" ")?e.split(" "):e)).flat();e.classList.remove(...t)})),c.length>1)i.forEach((e=>{const i=y(e);i===a?e.classList.add(...s.bulletActiveClass.split(" ")):t.isElement&&e.setAttribute("part","bullet"),s.dynamicBullets&&(i>=o&&i<=p&&e.classList.add(...`${s.bulletActiveClass}-main`.split(" ")),i===o&&d(e,"prev"),i===p&&d(e,"next"))}));else{const e=i[a];if(e&&e.classList.add(...s.bulletActiveClass.split(" ")),t.isElement&&i.forEach(((e,t)=>{e.setAttribute("part",t===a?"bullet-active":"bullet")})),s.dynamicBullets){const e=i[o],t=i[p];for(let e=o;e<=p;e+=1)i[e]&&i[e].classList.add(...`${s.bulletActiveClass}-main`.split(" "));d(e,"prev"),d(t,"next")}}if(s.dynamicBullets){const a=Math.min(i.length,s.dynamicMainBullets+4),r=(n*a-n)/2-u*n,l=e?"right":"left";i.forEach((e=>{e.style[t.isHorizontal()?l:"top"]=`${r}px`}))}}c.forEach(((e,r)=>{if("fraction"===s.type&&(e.querySelectorAll(le(s.currentClass)).forEach((e=>{e.textContent=s.formatFractionCurrent(a+1)})),e.querySelectorAll(le(s.totalClass)).forEach((e=>{e.textContent=s.formatFractionTotal(u)}))),"progressbar"===s.type){let i;i=s.progressbarOpposite?t.isHorizontal()?"vertical":"horizontal":t.isHorizontal()?"horizontal":"vertical";const r=(a+1)/u;let n=1,l=1;"horizontal"===i?n=r:l=r,e.querySelectorAll(le(s.progressbarFillClass)).forEach((e=>{e.style.transform=`translate3d(0,0,0) scaleX(${n}) scaleY(${l})`,e.style.transitionDuration=`${t.params.speed}ms`}))}"custom"===s.type&&s.renderCustom?(C(e,s.renderCustom(t,a+1,u)),0===r&&i("paginationRender",e)):(0===r&&i("paginationRender",e),i("paginationUpdate",e)),t.params.watchOverflow&&t.enabled&&e.classList[t.isLocked?"add":"remove"](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.grid&&t.params.grid.rows>1?t.slides.length/Math.ceil(t.params.grid.rows):t.slides.length;let a=t.pagination.el;a=T(a);let r="";if("bullets"===e.type){let a=t.params.loop?Math.ceil(s/t.params.slidesPerGroup):t.snapGrid.length;t.params.freeMode&&t.params.freeMode.enabled&&a>s&&(a=s);for(let s=0;s`}"fraction"===e.type&&(r=e.renderFraction?e.renderFraction.call(t,e.currentClass,e.totalClass):` / `),"progressbar"===e.type&&(r=e.renderProgressbar?e.renderProgressbar.call(t,e.progressbarFillClass):``),t.pagination.bullets=[],a.forEach((s=>{"custom"!==e.type&&C(s,r||""),"bullets"===e.type&&t.pagination.bullets.push(...s.querySelectorAll(le(e.bulletClass)))})),"custom"!==e.type&&i("paginationRender",a[0])}function m(){t.params.pagination=ne(t,t.originalParams.pagination,t.params.pagination,{el:"swiper-pagination"});const e=t.params.pagination;if(!e.el)return;let s;"string"==typeof e.el&&t.isElement&&(s=t.el.querySelector(e.el)),s||"string"!=typeof e.el||(s=[...document.querySelectorAll(e.el)]),s||(s=e.el),s&&0!==s.length&&(t.params.uniqueNavElements&&"string"==typeof e.el&&Array.isArray(s)&&s.length>1&&(s=[...t.el.querySelectorAll(e.el)],s.length>1&&(s=s.find((e=>E(e,".swiper")[0]===t.el)))),Array.isArray(s)&&1===s.length&&(s=s[0]),Object.assign(t.pagination,{el:s}),s=T(s),s.forEach((s=>{"bullets"===e.type&&e.clickable&&s.classList.add(...(e.clickableClass||"").split(" ")),s.classList.add(e.modifierClass+e.type),s.classList.add(t.isHorizontal()?e.horizontalClass:e.verticalClass),"bullets"===e.type&&e.dynamicBullets&&(s.classList.add(`${e.modifierClass}${e.type}-dynamic`),l=0,e.dynamicMainBullets<1&&(e.dynamicMainBullets=1)),"progressbar"===e.type&&e.progressbarOpposite&&s.classList.add(e.progressbarOppositeClass),e.clickable&&s.addEventListener("click",c),t.enabled||s.classList.add(e.lockClass)})))}function h(){const e=t.params.pagination;if(o())return;let s=t.pagination.el;s&&(s=T(s),s.forEach((s=>{s.classList.remove(e.hiddenClass),s.classList.remove(e.modifierClass+e.type),s.classList.remove(t.isHorizontal()?e.horizontalClass:e.verticalClass),e.clickable&&(s.classList.remove(...(e.clickableClass||"").split(" ")),s.removeEventListener("click",c))}))),t.pagination.bullets&&t.pagination.bullets.forEach((t=>t.classList.remove(...e.bulletActiveClass.split(" "))))}a("changeDirection",(()=>{if(!t.pagination||!t.pagination.el)return;const e=t.params.pagination;let{el:s}=t.pagination;s=T(s),s.forEach((s=>{s.classList.remove(e.horizontalClass,e.verticalClass),s.classList.add(t.isHorizontal()?e.horizontalClass:e.verticalClass)}))})),a("init",(()=>{!1===t.params.pagination.enabled?f():(m(),u(),p())})),a("activeIndexChange",(()=>{void 0===t.snapIndex&&p()})),a("snapIndexChange",(()=>{p()})),a("snapGridLengthChange",(()=>{u(),p()})),a("destroy",(()=>{h()})),a("enable disable",(()=>{let{el:e}=t.pagination;e&&(e=T(e),e.forEach((e=>e.classList[t.enabled?"remove":"add"](t.params.pagination.lockClass))))})),a("lock unlock",(()=>{p()})),a("click",((e,s)=>{const a=s.target,r=T(t.pagination.el);if(t.params.pagination.el&&t.params.pagination.hideOnClick&&r&&r.length>0&&!a.classList.contains(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[0].classList.contains(t.params.pagination.hiddenClass);i(!0===e?"paginationShow":"paginationHide"),r.forEach((e=>e.classList.toggle(t.params.pagination.hiddenClass)))}}));const f=()=>{t.el.classList.add(t.params.pagination.paginationDisabledClass);let{el:e}=t.pagination;e&&(e=T(e),e.forEach((e=>e.classList.add(t.params.pagination.paginationDisabledClass)))),h()};Object.assign(t.pagination,{enable:()=>{t.el.classList.remove(t.params.pagination.paginationDisabledClass);let{el:e}=t.pagination;e&&(e=T(e),e.forEach((e=>e.classList.remove(t.params.pagination.paginationDisabledClass)))),m(),u(),p()},disable:f,render:u,update:p,init:m,destroy:h})},function(e){let{swiper:t,extendParams:s,on:i,emit:r}=e;const o=a();let d,c,p,u,m=!1,h=null,f=null;function g(){if(!t.params.scrollbar.el||!t.scrollbar.el)return;const{scrollbar:e,rtlTranslate:s}=t,{dragEl:a,el:i}=e,r=t.params.scrollbar,n=t.params.loop?t.progressLoop:t.progress;let l=c,o=(p-c)*n;s?(o=-o,o>0?(l=c-o,o=0):-o+c>p&&(l=p+o)):o<0?(l=c+o,o=0):o+c>p&&(l=p-o),t.isHorizontal()?(a.style.transform=`translate3d(${o}px, 0, 0)`,a.style.width=`${l}px`):(a.style.transform=`translate3d(0px, ${o}px, 0)`,a.style.height=`${l}px`),r.hide&&(clearTimeout(h),i.style.opacity=1,h=setTimeout((()=>{i.style.opacity=0,i.style.transitionDuration="400ms"}),1e3))}function b(){if(!t.params.scrollbar.el||!t.scrollbar.el)return;const{scrollbar:e}=t,{dragEl:s,el:a}=e;s.style.width="",s.style.height="",p=t.isHorizontal()?a.offsetWidth:a.offsetHeight,u=t.size/(t.virtualSize+t.params.slidesOffsetBefore-(t.params.centeredSlides?t.snapGrid[0]:0)),c="auto"===t.params.scrollbar.dragSize?p*u:parseInt(t.params.scrollbar.dragSize,10),t.isHorizontal()?s.style.width=`${c}px`:s.style.height=`${c}px`,a.style.display=u>=1?"none":"",t.params.scrollbar.hide&&(a.style.opacity=0),t.params.watchOverflow&&t.enabled&&e.el.classList[t.isLocked?"add":"remove"](t.params.scrollbar.lockClass)}function y(e){return t.isHorizontal()?e.clientX:e.clientY}function E(e){const{scrollbar:s,rtlTranslate:a}=t,{el:i}=s;let r;r=(y(e)-w(i)[t.isHorizontal()?"left":"top"]-(null!==d?d:c/2))/(p-c),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:l}=a;m=!0,d=e.target===l?y(e)-e.target.getBoundingClientRect()[t.isHorizontal()?"left":"top"]:null,e.preventDefault(),e.stopPropagation(),i.style.transitionDuration="100ms",l.style.transitionDuration="100ms",E(e),clearTimeout(f),n.style.transitionDuration="0ms",s.hide&&(n.style.opacity=1),t.params.cssMode&&(t.wrapperEl.style["scroll-snap-type"]="none"),r("scrollbarDragStart",e)}function S(e){const{scrollbar:s,wrapperEl:a}=t,{el:i,dragEl:n}=s;m&&(e.preventDefault&&e.cancelable?e.preventDefault():e.returnValue=!1,E(e),a.style.transitionDuration="0ms",i.style.transitionDuration="0ms",n.style.transitionDuration="0ms",r("scrollbarDragMove",e))}function M(e){const s=t.params.scrollbar,{scrollbar:a,wrapperEl:i}=t,{el:n}=a;m&&(m=!1,t.params.cssMode&&(t.wrapperEl.style["scroll-snap-type"]="",i.style.transitionDuration=""),s.hide&&(clearTimeout(f),f=l((()=>{n.style.opacity=0,n.style.transitionDuration="400ms"}),1e3)),r("scrollbarDragEnd",e),s.snapOnRelease&&t.slideToClosest())}function C(e){const{scrollbar:s,params:a}=t,i=s.el;if(!i)return;const r=i,n=!!a.passiveListeners&&{passive:!1,capture:!1},l=!!a.passiveListeners&&{passive:!0,capture:!1};if(!r)return;const d="on"===e?"addEventListener":"removeEventListener";r[d]("pointerdown",x,n),o[d]("pointermove",S,n),o[d]("pointerup",M,l)}function P(){const{scrollbar:e,el:s}=t;t.params.scrollbar=ne(t,t.originalParams.scrollbar,t.params.scrollbar,{el:"swiper-scrollbar"});const a=t.params.scrollbar;if(!a.el)return;let i,r;if("string"==typeof a.el&&t.isElement&&(i=t.el.querySelector(a.el)),i||"string"!=typeof a.el)i||(i=a.el);else if(i=o.querySelectorAll(a.el),!i.length)return;t.params.uniqueNavElements&&"string"==typeof a.el&&i.length>1&&1===s.querySelectorAll(a.el).length&&(i=s.querySelector(a.el)),i.length>0&&(i=i[0]),i.classList.add(t.isHorizontal()?a.horizontalClass:a.verticalClass),i&&(r=i.querySelector(le(t.params.scrollbar.dragClass)),r||(r=v("div",t.params.scrollbar.dragClass),i.append(r))),Object.assign(e,{el:i,dragEl:r}),a.draggable&&t.params.scrollbar.el&&t.scrollbar.el&&C("on"),i&&i.classList[t.enabled?"remove":"add"](...n(t.params.scrollbar.lockClass))}function L(){const e=t.params.scrollbar,s=t.scrollbar.el;s&&s.classList.remove(...n(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},i("changeDirection",(()=>{if(!t.scrollbar||!t.scrollbar.el)return;const e=t.params.scrollbar;let{el:s}=t.scrollbar;s=T(s),s.forEach((s=>{s.classList.remove(e.horizontalClass,e.verticalClass),s.classList.add(t.isHorizontal()?e.horizontalClass:e.verticalClass)}))})),i("init",(()=>{!1===t.params.scrollbar.enabled?I():(P(),b(),g())})),i("update resize observerUpdate lock unlock changeDirection",(()=>{b()})),i("setTranslate",(()=>{g()})),i("setTransition",((e,s)=>{!function(e){t.params.scrollbar.el&&t.scrollbar.el&&(t.scrollbar.dragEl.style.transitionDuration=`${e}ms`)}(s)})),i("enable disable",(()=>{const{el:e}=t.scrollbar;e&&e.classList[t.enabled?"remove":"add"](...n(t.params.scrollbar.lockClass))})),i("destroy",(()=>{L()}));const I=()=>{t.el.classList.add(...n(t.params.scrollbar.scrollbarDisabledClass)),t.scrollbar.el&&t.scrollbar.el.classList.add(...n(t.params.scrollbar.scrollbarDisabledClass)),L()};Object.assign(t.scrollbar,{enable:()=>{t.el.classList.remove(...n(t.params.scrollbar.scrollbarDisabledClass)),t.scrollbar.el&&t.scrollbar.el.classList.remove(...n(t.params.scrollbar.scrollbarDisabledClass)),P(),b(),g()},disable:I,updateSize:b,setTranslate:g,init:P,destroy:L})},function(e){let{swiper:t,extendParams:s,on:a}=e;s({parallax:{enabled:!1}});const i="[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]",r=(e,s)=>{const{rtl:a}=t,i=a?-1:1,r=e.getAttribute("data-swiper-parallax")||"0";let n=e.getAttribute("data-swiper-parallax-x"),l=e.getAttribute("data-swiper-parallax-y");const o=e.getAttribute("data-swiper-parallax-scale"),d=e.getAttribute("data-swiper-parallax-opacity"),c=e.getAttribute("data-swiper-parallax-rotate");if(n||l?(n=n||"0",l=l||"0"):t.isHorizontal()?(n=r,l="0"):(l=r,n="0"),n=n.indexOf("%")>=0?parseInt(n,10)*s*i+"%":n*s*i+"px",l=l.indexOf("%")>=0?parseInt(l,10)*s+"%":l*s+"px",null!=d){const t=d-(d-1)*(1-Math.abs(s));e.style.opacity=t}let p=`translate3d(${n}, ${l}, 0px)`;if(null!=o){p+=` scale(${o-(o-1)*(1-Math.abs(s))})`}if(c&&null!=c){p+=` rotate(${c*s*-1}deg)`}e.style.transform=p},n=()=>{const{el:e,slides:s,progress:a,snapGrid:n,isElement:l}=t,o=f(e,i);t.isElement&&o.push(...f(t.hostEl,i)),o.forEach((e=>{r(e,a)})),s.forEach(((e,s)=>{let l=e.progress;t.params.slidesPerGroup>1&&"auto"!==t.params.slidesPerView&&(l+=Math.ceil(s/2)-a*(n.length-1)),l=Math.min(Math.max(l,-1),1),e.querySelectorAll(`${i}, [data-swiper-parallax-rotate]`).forEach((e=>{r(e,l)}))}))};a("beforeInit",(()=>{t.params.parallax.enabled&&(t.params.watchSlidesProgress=!0,t.originalParams.watchSlidesProgress=!0)})),a("init",(()=>{t.params.parallax.enabled&&n()})),a("setTranslate",(()=>{t.params.parallax.enabled&&n()})),a("setTransition",((e,s)=>{t.params.parallax.enabled&&function(e){void 0===e&&(e=t.params.speed);const{el:s,hostEl:a}=t,r=[...s.querySelectorAll(i)];t.isElement&&r.push(...a.querySelectorAll(i)),r.forEach((t=>{let s=parseInt(t.getAttribute("data-swiper-parallax-duration"),10)||e;0===e&&(s=0),t.style.transitionDuration=`${s}ms`}))}(s)}))},function(e){let{swiper:t,extendParams:s,on:a,emit:i}=e;const n=r();s({zoom:{enabled:!1,limitToOriginalSize:!1,maxRatio:3,minRatio:1,panOnMouseMove:!1,toggle:!0,containerClass:"swiper-zoom-container",zoomedSlideClass:"swiper-slide-zoomed"}}),t.zoom={enabled:!1};let l=1,o=!1,c=!1,p={x:0,y:0};const u=-3;let m,h;const g=[],v={originX:0,originY:0,slideEl:void 0,slideWidth:void 0,slideHeight:void 0,imageEl:void 0,imageWrapEl:void 0,maxRatio:3},b={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:{}},y={x:void 0,y:void 0,prevPositionX:void 0,prevPositionY:void 0,prevTime:void 0};let x,S=1;function T(){if(g.length<2)return 1;const e=g[0].pageX,t=g[0].pageY,s=g[1].pageX,a=g[1].pageY;return Math.sqrt((s-e)**2+(a-t)**2)}function M(){const e=t.params.zoom,s=v.imageWrapEl.getAttribute("data-swiper-zoom")||e.maxRatio;if(e.limitToOriginalSize&&v.imageEl&&v.imageEl.naturalWidth){const e=v.imageEl.naturalWidth/v.imageEl.offsetWidth;return Math.min(e,s)}return s}function C(e){const s=t.isElement?"swiper-slide":`.${t.params.slideClass}`;return!!e.target.matches(s)||t.slides.filter((t=>t.contains(e.target))).length>0}function P(e){const s=`.${t.params.zoom.containerClass}`;return!!e.target.matches(s)||[...t.hostEl.querySelectorAll(s)].filter((t=>t.contains(e.target))).length>0}function L(e){if("mouse"===e.pointerType&&g.splice(0,g.length),!C(e))return;const s=t.params.zoom;if(m=!1,h=!1,g.push(e),!(g.length<2)){if(m=!0,v.scaleStart=T(),!v.slideEl){v.slideEl=e.target.closest(`.${t.params.slideClass}, swiper-slide`),v.slideEl||(v.slideEl=t.slides[t.activeIndex]);let a=v.slideEl.querySelector(`.${s.containerClass}`);if(a&&(a=a.querySelectorAll("picture, img, svg, canvas, .swiper-zoom-target")[0]),v.imageEl=a,v.imageWrapEl=a?E(v.imageEl,`.${s.containerClass}`)[0]:void 0,!v.imageWrapEl)return void(v.imageEl=void 0);v.maxRatio=M()}if(v.imageEl){const[e,t]=function(){if(g.length<2)return{x:null,y:null};const e=v.imageEl.getBoundingClientRect();return[(g[0].pageX+(g[1].pageX-g[0].pageX)/2-e.x-n.scrollX)/l,(g[0].pageY+(g[1].pageY-g[0].pageY)/2-e.y-n.scrollY)/l]}();v.originX=e,v.originY=t,v.imageEl.style.transitionDuration="0ms"}o=!0}}function I(e){if(!C(e))return;const s=t.params.zoom,a=t.zoom,i=g.findIndex((t=>t.pointerId===e.pointerId));i>=0&&(g[i]=e),g.length<2||(h=!0,v.scaleMove=T(),v.imageEl&&(a.scale=v.scaleMove/v.scaleStart*l,a.scale>v.maxRatio&&(a.scale=v.maxRatio-1+(a.scale-v.maxRatio+1)**.5),a.scalet.pointerId===e.pointerId));i>=0&&g.splice(i,1),m&&h&&(m=!1,h=!1,v.imageEl&&(a.scale=Math.max(Math.min(a.scale,v.maxRatio),s.minRatio),v.imageEl.style.transitionDuration=`${t.params.speed}ms`,v.imageEl.style.transform=`translate3d(0,0,0) scale(${a.scale})`,l=a.scale,o=!1,a.scale>1&&v.slideEl?v.slideEl.classList.add(`${s.zoomedSlideClass}`):a.scale<=1&&v.slideEl&&v.slideEl.classList.remove(`${s.zoomedSlideClass}`),1===a.scale&&(v.originX=0,v.originY=0,v.slideEl=void 0)))}function A(){t.touchEventsData.preventTouchMoveFromPointerMove=!1}function $(e){const s="mouse"===e.pointerType&&t.params.zoom.panOnMouseMove;if(!C(e)||!P(e))return;const a=t.zoom;if(!v.imageEl)return;if(!b.isTouched||!v.slideEl)return void(s&&O(e));if(s)return void O(e);b.isMoved||(b.width=v.imageEl.offsetWidth||v.imageEl.clientWidth,b.height=v.imageEl.offsetHeight||v.imageEl.clientHeight,b.startX=d(v.imageWrapEl,"x")||0,b.startY=d(v.imageWrapEl,"y")||0,v.slideWidth=v.slideEl.offsetWidth,v.slideHeight=v.slideEl.offsetHeight,v.imageWrapEl.style.transitionDuration="0ms");const i=b.width*a.scale,r=b.height*a.scale;b.minX=Math.min(v.slideWidth/2-i/2,0),b.maxX=-b.minX,b.minY=Math.min(v.slideHeight/2-r/2,0),b.maxY=-b.minY,b.touchesCurrent.x=g.length>0?g[0].pageX:e.pageX,b.touchesCurrent.y=g.length>0?g[0].pageY:e.pageY;if(Math.max(Math.abs(b.touchesCurrent.x-b.touchesStart.x),Math.abs(b.touchesCurrent.y-b.touchesStart.y))>5&&(t.allowClick=!1),!b.isMoved&&!o){if(t.isHorizontal()&&(Math.floor(b.minX)===Math.floor(b.startX)&&b.touchesCurrent.xb.touchesStart.x))return b.isTouched=!1,void A();if(!t.isHorizontal()&&(Math.floor(b.minY)===Math.floor(b.startY)&&b.touchesCurrent.yb.touchesStart.y))return b.isTouched=!1,void A()}e.cancelable&&e.preventDefault(),e.stopPropagation(),clearTimeout(x),t.touchEventsData.preventTouchMoveFromPointerMove=!0,x=setTimeout((()=>{t.destroyed||A()})),b.isMoved=!0;const n=(a.scale-l)/(v.maxRatio-t.params.zoom.minRatio),{originX:c,originY:p}=v;b.currentX=b.touchesCurrent.x-b.touchesStart.x+b.startX+n*(b.width-2*c),b.currentY=b.touchesCurrent.y-b.touchesStart.y+b.startY+n*(b.height-2*p),b.currentXb.maxX&&(b.currentX=b.maxX-1+(b.currentX-b.maxX+1)**.8),b.currentYb.maxY&&(b.currentY=b.maxY-1+(b.currentY-b.maxY+1)**.8),y.prevPositionX||(y.prevPositionX=b.touchesCurrent.x),y.prevPositionY||(y.prevPositionY=b.touchesCurrent.y),y.prevTime||(y.prevTime=Date.now()),y.x=(b.touchesCurrent.x-y.prevPositionX)/(Date.now()-y.prevTime)/2,y.y=(b.touchesCurrent.y-y.prevPositionY)/(Date.now()-y.prevTime)/2,Math.abs(b.touchesCurrent.x-y.prevPositionX)<2&&(y.x=0),Math.abs(b.touchesCurrent.y-y.prevPositionY)<2&&(y.y=0),y.prevPositionX=b.touchesCurrent.x,y.prevPositionY=b.touchesCurrent.y,y.prevTime=Date.now(),v.imageWrapEl.style.transform=`translate3d(${b.currentX}px, ${b.currentY}px,0)`}function k(){const e=t.zoom;v.slideEl&&t.activeIndex!==t.slides.indexOf(v.slideEl)&&(v.imageEl&&(v.imageEl.style.transform="translate3d(0,0,0) scale(1)"),v.imageWrapEl&&(v.imageWrapEl.style.transform="translate3d(0,0,0)"),v.slideEl.classList.remove(`${t.params.zoom.zoomedSlideClass}`),e.scale=1,l=1,v.slideEl=void 0,v.imageEl=void 0,v.imageWrapEl=void 0,v.originX=0,v.originY=0)}function O(e){if(l<=1||!v.imageWrapEl)return;if(!C(e)||!P(e))return;const t=n.getComputedStyle(v.imageWrapEl).transform,s=new n.DOMMatrix(t);if(!c)return c=!0,p.x=e.clientX,p.y=e.clientY,b.startX=s.e,b.startY=s.f,b.width=v.imageEl.offsetWidth||v.imageEl.clientWidth,b.height=v.imageEl.offsetHeight||v.imageEl.clientHeight,v.slideWidth=v.slideEl.offsetWidth,void(v.slideHeight=v.slideEl.offsetHeight);const a=(e.clientX-p.x)*u,i=(e.clientY-p.y)*u,r=b.width*l,o=b.height*l,d=v.slideWidth,m=v.slideHeight,h=Math.min(d/2-r/2,0),f=-h,g=Math.min(m/2-o/2,0),w=-g,y=Math.max(Math.min(b.startX+a,f),h),E=Math.max(Math.min(b.startY+i,w),g);v.imageWrapEl.style.transitionDuration="0ms",v.imageWrapEl.style.transform=`translate3d(${y}px, ${E}px, 0)`,p.x=e.clientX,p.y=e.clientY,b.startX=y,b.startY=E,b.currentX=y,b.currentY=E}function D(e){const s=t.zoom,a=t.params.zoom;if(!v.slideEl){e&&e.target&&(v.slideEl=e.target.closest(`.${t.params.slideClass}, swiper-slide`)),v.slideEl||(t.params.virtual&&t.params.virtual.enabled&&t.virtual?v.slideEl=f(t.slidesEl,`.${t.params.slideActiveClass}`)[0]:v.slideEl=t.slides[t.activeIndex]);let s=v.slideEl.querySelector(`.${a.containerClass}`);s&&(s=s.querySelectorAll("picture, img, svg, canvas, .swiper-zoom-target")[0]),v.imageEl=s,v.imageWrapEl=s?E(v.imageEl,`.${a.containerClass}`)[0]:void 0}if(!v.imageEl||!v.imageWrapEl)return;let i,r,o,d,c,p,u,m,h,g,y,x,S,T,C,P,L,I;t.params.cssMode&&(t.wrapperEl.style.overflow="hidden",t.wrapperEl.style.touchAction="none"),v.slideEl.classList.add(`${a.zoomedSlideClass}`),void 0===b.touchesStart.x&&e?(i=e.pageX,r=e.pageY):(i=b.touchesStart.x,r=b.touchesStart.y);const z=l,A="number"==typeof e?e:null;1===l&&A&&(i=void 0,r=void 0,b.touchesStart.x=void 0,b.touchesStart.y=void 0);const $=M();s.scale=A||$,l=A||$,!e||1===l&&A?(u=0,m=0):(L=v.slideEl.offsetWidth,I=v.slideEl.offsetHeight,o=w(v.slideEl).left+n.scrollX,d=w(v.slideEl).top+n.scrollY,c=o+L/2-i,p=d+I/2-r,h=v.imageEl.offsetWidth||v.imageEl.clientWidth,g=v.imageEl.offsetHeight||v.imageEl.clientHeight,y=h*s.scale,x=g*s.scale,S=Math.min(L/2-y/2,0),T=Math.min(I/2-x/2,0),C=-S,P=-T,z>0&&A&&"number"==typeof b.currentX&&"number"==typeof b.currentY?(u=b.currentX*s.scale/z,m=b.currentY*s.scale/z):(u=c*s.scale,m=p*s.scale),uC&&(u=C),mP&&(m=P)),A&&1===s.scale&&(v.originX=0,v.originY=0),b.currentX=u,b.currentY=m,v.imageWrapEl.style.transitionDuration="300ms",v.imageWrapEl.style.transform=`translate3d(${u}px, ${m}px,0)`,v.imageEl.style.transitionDuration="300ms",v.imageEl.style.transform=`translate3d(0,0,0) scale(${s.scale})`}function G(){const e=t.zoom,s=t.params.zoom;if(!v.slideEl){t.params.virtual&&t.params.virtual.enabled&&t.virtual?v.slideEl=f(t.slidesEl,`.${t.params.slideActiveClass}`)[0]:v.slideEl=t.slides[t.activeIndex];let e=v.slideEl.querySelector(`.${s.containerClass}`);e&&(e=e.querySelectorAll("picture, img, svg, canvas, .swiper-zoom-target")[0]),v.imageEl=e,v.imageWrapEl=e?E(v.imageEl,`.${s.containerClass}`)[0]:void 0}v.imageEl&&v.imageWrapEl&&(t.params.cssMode&&(t.wrapperEl.style.overflow="",t.wrapperEl.style.touchAction=""),e.scale=1,l=1,b.currentX=void 0,b.currentY=void 0,b.touchesStart.x=void 0,b.touchesStart.y=void 0,v.imageWrapEl.style.transitionDuration="300ms",v.imageWrapEl.style.transform="translate3d(0,0,0)",v.imageEl.style.transitionDuration="300ms",v.imageEl.style.transform="translate3d(0,0,0) scale(1)",v.slideEl.classList.remove(`${s.zoomedSlideClass}`),v.slideEl=void 0,v.originX=0,v.originY=0,t.params.zoom.panOnMouseMove&&(p={x:0,y:0},c&&(c=!1,b.startX=0,b.startY=0)))}function X(e){const s=t.zoom;s.scale&&1!==s.scale?G():D(e)}function Y(){return{passiveListener:!!t.params.passiveListeners&&{passive:!0,capture:!1},activeListenerWithCapture:!t.params.passiveListeners||{passive:!1,capture:!0}}}function B(){const e=t.zoom;if(e.enabled)return;e.enabled=!0;const{passiveListener:s,activeListenerWithCapture:a}=Y();t.wrapperEl.addEventListener("pointerdown",L,s),t.wrapperEl.addEventListener("pointermove",I,a),["pointerup","pointercancel","pointerout"].forEach((e=>{t.wrapperEl.addEventListener(e,z,s)})),t.wrapperEl.addEventListener("pointermove",$,a)}function H(){const e=t.zoom;if(!e.enabled)return;e.enabled=!1;const{passiveListener:s,activeListenerWithCapture:a}=Y();t.wrapperEl.removeEventListener("pointerdown",L,s),t.wrapperEl.removeEventListener("pointermove",I,a),["pointerup","pointercancel","pointerout"].forEach((e=>{t.wrapperEl.removeEventListener(e,z,s)})),t.wrapperEl.removeEventListener("pointermove",$,a)}Object.defineProperty(t.zoom,"scale",{get:()=>S,set(e){if(S!==e){const t=v.imageEl,s=v.slideEl;i("zoomChange",e,t,s)}S=e}}),a("init",(()=>{t.params.zoom.enabled&&B()})),a("destroy",(()=>{H()})),a("touchStart",((e,s)=>{t.zoom.enabled&&function(e){const s=t.device;if(!v.imageEl)return;if(b.isTouched)return;s.android&&e.cancelable&&e.preventDefault(),b.isTouched=!0;const a=g.length>0?g[0]:e;b.touchesStart.x=a.pageX,b.touchesStart.y=a.pageY}(s)})),a("touchEnd",((e,s)=>{t.zoom.enabled&&function(){const e=t.zoom;if(g.length=0,!v.imageEl)return;if(!b.isTouched||!b.isMoved)return b.isTouched=!1,void(b.isMoved=!1);b.isTouched=!1,b.isMoved=!1;let s=300,a=300;const i=y.x*s,r=b.currentX+i,n=y.y*a,l=b.currentY+n;0!==y.x&&(s=Math.abs((r-b.currentX)/y.x)),0!==y.y&&(a=Math.abs((l-b.currentY)/y.y));const o=Math.max(s,a);b.currentX=r,b.currentY=l;const d=b.width*e.scale,c=b.height*e.scale;b.minX=Math.min(v.slideWidth/2-d/2,0),b.maxX=-b.minX,b.minY=Math.min(v.slideHeight/2-c/2,0),b.maxY=-b.minY,b.currentX=Math.max(Math.min(b.currentX,b.maxX),b.minX),b.currentY=Math.max(Math.min(b.currentY,b.maxY),b.minY),v.imageWrapEl.style.transitionDuration=`${o}ms`,v.imageWrapEl.style.transform=`translate3d(${b.currentX}px, ${b.currentY}px,0)`}()})),a("doubleTap",((e,s)=>{!t.animating&&t.params.zoom.enabled&&t.zoom.enabled&&t.params.zoom.toggle&&X(s)})),a("transitionEnd",(()=>{t.zoom.enabled&&t.params.zoom.enabled&&k()})),a("slideChange",(()=>{t.zoom.enabled&&t.params.zoom.enabled&&t.params.cssMode&&k()})),Object.assign(t.zoom,{enable:B,disable:H,in:D,out:G,toggle:X})},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",(()=>{if("undefined"!=typeof window&&("string"==typeof t.params.controller.control||t.params.controller.control instanceof HTMLElement)){("string"==typeof t.params.controller.control?[...document.querySelectorAll(t.params.controller.control)]:[t.params.controller.control]).forEach((e=>{if(t.controller.control||(t.controller.control=[]),e&&e.swiper)t.controller.control.push(e.swiper);else if(e){const s=`${t.params.eventsPrefix}init`,a=i=>{t.controller.control.push(i.detail[0]),t.update(),e.removeEventListener(s,a)};e.addEventListener(s,a)}}))}else 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.control.destroyed&&t.controller.setTranslate(s,a)})),a("setTransition",((e,s,a)=>{t.controller.control&&!t.controller.control.destroyed&&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){if(e.destroyed)return;const s=t.rtlTranslate?-t.translate:t.translate;"slide"===t.params.controller.by&&(!function(e){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()),!Number.isNaN(r)&&Number.isFinite(r)||(r=1),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{s.updateAutoHeight()})),x(s.wrapperEl,(()=>{i&&s.transitionEnd()}))))}if(Array.isArray(i))for(r=0;r{e.setAttribute("tabIndex","0")}))}function p(e){(e=T(e)).forEach((e=>{e.setAttribute("tabIndex","-1")}))}function u(e,t){(e=T(e)).forEach((e=>{e.setAttribute("role",t)}))}function m(e,t){(e=T(e)).forEach((e=>{e.setAttribute("aria-roledescription",t)}))}function h(e,t){(e=T(e)).forEach((e=>{e.setAttribute("aria-label",t)}))}function f(e){(e=T(e)).forEach((e=>{e.setAttribute("aria-disabled",!0)}))}function g(e){(e=T(e)).forEach((e=>{e.setAttribute("aria-disabled",!1)}))}function w(e){if(13!==e.keyCode&&32!==e.keyCode)return;const s=t.params.a11y,a=e.target;if(!t.pagination||!t.pagination.el||a!==t.pagination.el&&!t.pagination.el.contains(e.target)||e.target.matches(le(t.params.pagination.bulletClass))){if(t.navigation&&t.navigation.prevEl&&t.navigation.nextEl){const e=T(t.navigation.prevEl);T(t.navigation.nextEl).includes(a)&&(t.isEnd&&!t.params.loop||t.slideNext(),t.isEnd?d(s.lastSlideMessage):d(s.nextSlideMessage)),e.includes(a)&&(t.isBeginning&&!t.params.loop||t.slidePrev(),t.isBeginning?d(s.firstSlideMessage):d(s.prevSlideMessage))}t.pagination&&a.matches(le(t.params.pagination.bulletClass))&&a.click()}}function b(){return t.pagination&&t.pagination.bullets&&t.pagination.bullets.length}function E(){return b()&&t.params.pagination.clickable}const x=(e,t,s)=>{c(e),"BUTTON"!==e.tagName&&(u(e,"button"),e.addEventListener("keydown",w)),h(e,s),function(e,t){(e=T(e)).forEach((e=>{e.setAttribute("aria-controls",t)}))}(e,t)},S=e=>{n&&n!==e.target&&!n.contains(e.target)&&(r=!0),t.a11y.clicked=!0},M=()=>{r=!1,requestAnimationFrame((()=>{requestAnimationFrame((()=>{t.destroyed||(t.a11y.clicked=!1)}))}))},P=e=>{o=(new Date).getTime()},L=e=>{if(t.a11y.clicked||!t.params.a11y.scrollOnFocus)return;if((new Date).getTime()-o<100)return;const s=e.target.closest(`.${t.params.slideClass}, swiper-slide`);if(!s||!t.slides.includes(s))return;n=s;const a=t.slides.indexOf(s)===t.activeIndex,i=t.params.watchSlidesProgress&&t.visibleSlides&&t.visibleSlides.includes(s);a||i||e.sourceCapabilities&&e.sourceCapabilities.firesTouchEvents||(t.isHorizontal()?t.el.scrollLeft=0:t.el.scrollTop=0,requestAnimationFrame((()=>{r||(t.params.loop?t.slideToLoop(t.getSlideIndexWhenGrid(parseInt(s.getAttribute("data-swiper-slide-index"))),0):t.slideTo(t.getSlideIndexWhenGrid(t.slides.indexOf(s)),0),r=!1)})))},I=()=>{const e=t.params.a11y;e.itemRoleDescriptionMessage&&m(t.slides,e.itemRoleDescriptionMessage),e.slideRole&&u(t.slides,e.slideRole);const s=t.slides.length;e.slideLabelMessage&&t.slides.forEach(((a,i)=>{const r=t.params.loop?parseInt(a.getAttribute("data-swiper-slide-index"),10):i;h(a,e.slideLabelMessage.replace(/\{\{index\}\}/,r+1).replace(/\{\{slidesLength\}\}/,s))}))},z=()=>{const e=t.params.a11y;t.el.append(l);const s=t.el;e.containerRoleDescriptionMessage&&m(s,e.containerRoleDescriptionMessage),e.containerMessage&&h(s,e.containerMessage),e.containerRole&&u(s,e.containerRole);const i=t.wrapperEl,r=e.id||i.getAttribute("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 o=t.params.autoplay&&t.params.autoplay.enabled?"off":"polite";var d;d=r,T(i).forEach((e=>{e.setAttribute("id",d)})),function(e,t){(e=T(e)).forEach((e=>{e.setAttribute("aria-live",t)}))}(i,o),I();let{nextEl:c,prevEl:p}=t.navigation?t.navigation:{};if(c=T(c),p=T(p),c&&c.forEach((t=>x(t,r,e.nextSlideMessage))),p&&p.forEach((t=>x(t,r,e.prevSlideMessage))),E()){T(t.pagination.el).forEach((e=>{e.addEventListener("keydown",w)}))}a().addEventListener("visibilitychange",P),t.el.addEventListener("focus",L,!0),t.el.addEventListener("focus",L,!0),t.el.addEventListener("pointerdown",S,!0),t.el.addEventListener("pointerup",M,!0)};i("beforeInit",(()=>{l=v("span",t.params.a11y.notificationClass),l.setAttribute("aria-live","assertive"),l.setAttribute("aria-atomic","true")})),i("afterInit",(()=>{t.params.a11y.enabled&&z()})),i("slidesLengthChange snapGridLengthChange slidesGridLengthChange",(()=>{t.params.a11y.enabled&&I()})),i("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&&(t.isBeginning?(f(s),p(s)):(g(s),c(s))),e&&(t.isEnd?(f(e),p(e)):(g(e),c(e)))}()})),i("paginationUpdate",(()=>{t.params.a11y.enabled&&function(){const e=t.params.a11y;b()&&t.pagination.bullets.forEach((s=>{t.params.pagination.clickable&&(c(s),t.params.pagination.renderBullet||(u(s,"button"),h(s,e.paginationBulletMessage.replace(/\{\{index\}\}/,y(s)+1)))),s.matches(le(t.params.pagination.bulletActiveClass))?s.setAttribute("aria-current","true"):s.removeAttribute("aria-current")}))}()})),i("destroy",(()=>{t.params.a11y.enabled&&function(){l&&l.remove();let{nextEl:e,prevEl:s}=t.navigation?t.navigation:{};e=T(e),s=T(s),e&&e.forEach((e=>e.removeEventListener("keydown",w))),s&&s.forEach((e=>e.removeEventListener("keydown",w))),E()&&T(t.pagination.el).forEach((e=>{e.removeEventListener("keydown",w)}));a().removeEventListener("visibilitychange",P),t.el&&"string"!=typeof t.el&&(t.el.removeEventListener("focus",L,!0),t.el.removeEventListener("pointerdown",S,!0),t.el.removeEventListener("pointerup",M,!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.virtual&&t.params.virtual.enabled?t.slidesEl.querySelector(`[data-swiper-slide-index="${s}"]`):t.slides[s];let d=l(o.getAttribute("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?`${e}/`:""}${d}`}else n.pathname.includes(e)||(d=`${e?`${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{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)):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(),d=r();s({hashNavigation:{enabled:!1,replaceState:!1,watchState:!1,getSlideIndex(e,s){if(t.virtual&&t.params.virtual.enabled){const e=t.slides.find((e=>e.getAttribute("data-hash")===s));if(!e)return 0;return parseInt(e.getAttribute("data-swiper-slide-index"),10)}return t.getSlideIndex(f(t.slidesEl,`.${t.params.slideClass}[data-hash="${s}"], swiper-slide[data-hash="${s}"]`)[0])}}});const c=()=>{i("hashChange");const e=o.location.hash.replace("#",""),s=t.virtual&&t.params.virtual.enabled?t.slidesEl.querySelector(`[data-swiper-slide-index="${t.activeIndex}"]`):t.slides[t.activeIndex];if(e!==(s?s.getAttribute("data-hash"):"")){const s=t.params.hashNavigation.getSlideIndex(t,e);if(void 0===s||Number.isNaN(s))return;t.slideTo(s)}},p=()=>{if(!l||!t.params.hashNavigation.enabled)return;const e=t.virtual&&t.params.virtual.enabled?t.slidesEl.querySelector(`[data-swiper-slide-index="${t.activeIndex}"]`):t.slides[t.activeIndex],s=e?e.getAttribute("data-hash")||e.getAttribute("data-history"):"";t.params.hashNavigation.replaceState&&d.history&&d.history.replaceState?(d.history.replaceState(null,null,`#${s}`||""),i("hashSet")):(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,a=t.params.hashNavigation.getSlideIndex(t,e);t.slideTo(a||0,s,t.params.runCallbacksOnInit,!0)}t.params.hashNavigation.watchState&&d.addEventListener("hashchange",c)})()})),n("destroy",(()=>{t.params.hashNavigation.enabled&&t.params.hashNavigation.watchState&&d.removeEventListener("hashchange",c)})),n("transitionEnd _freeModeNoMomentumRelease",(()=>{l&&p()})),n("slideChange",(()=>{l&&t.params.cssMode&&p()}))},function(e){let t,s,{swiper:i,extendParams:r,on:n,emit:l,params:o}=e;i.autoplay={running:!1,paused:!1,timeLeft:0},r({autoplay:{enabled:!1,delay:3e3,waitForTransition:!0,disableOnInteraction:!1,stopOnLastSlide:!1,reverseDirection:!1,pauseOnMouseEnter:!1}});let d,c,p,u,m,h,f,g,v=o&&o.autoplay?o.autoplay.delay:3e3,w=o&&o.autoplay?o.autoplay.delay:3e3,b=(new Date).getTime();function y(e){i&&!i.destroyed&&i.wrapperEl&&e.target===i.wrapperEl&&(i.wrapperEl.removeEventListener("transitionend",y),g||e.detail&&e.detail.bySwiperTouchMove||C())}const E=()=>{if(i.destroyed||!i.autoplay.running)return;i.autoplay.paused?c=!0:c&&(w=d,c=!1);const e=i.autoplay.paused?d:b+w-(new Date).getTime();i.autoplay.timeLeft=e,l("autoplayTimeLeft",e,e/v),s=requestAnimationFrame((()=>{E()}))},x=e=>{if(i.destroyed||!i.autoplay.running)return;cancelAnimationFrame(s),E();let a=void 0===e?i.params.autoplay.delay:e;v=i.params.autoplay.delay,w=i.params.autoplay.delay;const r=(()=>{let e;if(e=i.virtual&&i.params.virtual.enabled?i.slides.find((e=>e.classList.contains("swiper-slide-active"))):i.slides[i.activeIndex],!e)return;return parseInt(e.getAttribute("data-swiper-autoplay"),10)})();!Number.isNaN(r)&&r>0&&void 0===e&&(a=r,v=r,w=r),d=a;const n=i.params.speed,o=()=>{i&&!i.destroyed&&(i.params.autoplay.reverseDirection?!i.isBeginning||i.params.loop||i.params.rewind?(i.slidePrev(n,!0,!0),l("autoplay")):i.params.autoplay.stopOnLastSlide||(i.slideTo(i.slides.length-1,n,!0,!0),l("autoplay")):!i.isEnd||i.params.loop||i.params.rewind?(i.slideNext(n,!0,!0),l("autoplay")):i.params.autoplay.stopOnLastSlide||(i.slideTo(0,n,!0,!0),l("autoplay")),i.params.cssMode&&(b=(new Date).getTime(),requestAnimationFrame((()=>{x()}))))};return a>0?(clearTimeout(t),t=setTimeout((()=>{o()}),a)):requestAnimationFrame((()=>{o()})),a},S=()=>{b=(new Date).getTime(),i.autoplay.running=!0,x(),l("autoplayStart")},T=()=>{i.autoplay.running=!1,clearTimeout(t),cancelAnimationFrame(s),l("autoplayStop")},M=(e,s)=>{if(i.destroyed||!i.autoplay.running)return;clearTimeout(t),e||(f=!0);const a=()=>{l("autoplayPause"),i.params.autoplay.waitForTransition?i.wrapperEl.addEventListener("transitionend",y):C()};if(i.autoplay.paused=!0,s)return h&&(d=i.params.autoplay.delay),h=!1,void a();const r=d||i.params.autoplay.delay;d=r-((new Date).getTime()-b),i.isEnd&&d<0&&!i.params.loop||(d<0&&(d=0),a())},C=()=>{i.isEnd&&d<0&&!i.params.loop||i.destroyed||!i.autoplay.running||(b=(new Date).getTime(),f?(f=!1,x(d)):x(),i.autoplay.paused=!1,l("autoplayResume"))},P=()=>{if(i.destroyed||!i.autoplay.running)return;const e=a();"hidden"===e.visibilityState&&(f=!0,M(!0)),"visible"===e.visibilityState&&C()},L=e=>{"mouse"===e.pointerType&&(f=!0,g=!0,i.animating||i.autoplay.paused||M(!0))},I=e=>{"mouse"===e.pointerType&&(g=!1,i.autoplay.paused&&C())};n("init",(()=>{i.params.autoplay.enabled&&(i.params.autoplay.pauseOnMouseEnter&&(i.el.addEventListener("pointerenter",L),i.el.addEventListener("pointerleave",I)),a().addEventListener("visibilitychange",P),S())})),n("destroy",(()=>{i.el&&"string"!=typeof i.el&&(i.el.removeEventListener("pointerenter",L),i.el.removeEventListener("pointerleave",I)),a().removeEventListener("visibilitychange",P),i.autoplay.running&&T()})),n("_freeModeStaticRelease",(()=>{(u||f)&&C()})),n("_freeModeNoMomentumRelease",(()=>{i.params.autoplay.disableOnInteraction?T():M(!0,!0)})),n("beforeTransitionStart",((e,t,s)=>{!i.destroyed&&i.autoplay.running&&(s||!i.params.autoplay.disableOnInteraction?M(!0,!0):T())})),n("sliderFirstMove",(()=>{!i.destroyed&&i.autoplay.running&&(i.params.autoplay.disableOnInteraction?T():(p=!0,u=!1,f=!1,m=setTimeout((()=>{f=!0,u=!0,M(!0)}),200)))})),n("touchEnd",(()=>{if(!i.destroyed&&i.autoplay.running&&p){if(clearTimeout(m),clearTimeout(t),i.params.autoplay.disableOnInteraction)return u=!1,void(p=!1);u&&i.params.cssMode&&C(),u=!1,p=!1}})),n("slideChange",(()=>{!i.destroyed&&i.autoplay.running&&(h=!0)})),Object.assign(i.autoplay,{start:S,stop:T,pause:M,resume:C})},function(e){let{swiper:t,extendParams:s,on:i}=e;s({thumbs:{swiper:null,multipleActiveThumbs:!0,autoScrollOffset:0,slideThumbActiveClass:"swiper-slide-thumb-active",thumbsContainerClass:"swiper-thumbs"}});let r=!1,n=!1;function l(){const e=t.thumbs.swiper;if(!e||e.destroyed)return;const s=e.clickedIndex,a=e.clickedSlide;if(a&&a.classList.contains(t.params.thumbs.slideThumbActiveClass))return;if(null==s)return;let i;i=e.params.loop?parseInt(e.clickedSlide.getAttribute("data-swiper-slide-index"),10):s,t.params.loop?t.slideToLoop(i):t.slideTo(i)}function o(){const{thumbs:e}=t.params;if(r)return!1;r=!0;const s=t.constructor;if(e.swiper instanceof s){if(e.swiper.destroyed)return r=!1,!1;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}),t.thumbs.swiper.update()}else if(c(e.swiper)){const a=Object.assign({},e.swiper);Object.assign(a,{watchSlidesProgress:!0,slideToClickedSlide:!1}),t.thumbs.swiper=new s(a),n=!0}return t.thumbs.swiper.el.classList.add(t.params.thumbs.thumbsContainerClass),t.thumbs.swiper.on("tap",l),!0}function d(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.forEach((e=>e.classList.remove(r))),s.params.loop||s.params.virtual&&s.params.virtual.enabled)for(let e=0;e{e.classList.add(r)}));else for(let e=0;ee.getAttribute("data-swiper-slide-index")===`${t.realIndex}`));r=s.slides.indexOf(e),o=t.activeIndex>t.previousIndex?"next":"prev"}else r=t.realIndex,o=r>t.previousIndex?"next":"prev";l&&(r+="next"===o?n:-1*n),s.visibleSlidesIndexes&&s.visibleSlidesIndexes.indexOf(r)<0&&(s.params.centeredSlides?r=r>i?r-Math.floor(a/2)+1:r+Math.floor(a/2)-1:r>i&&s.params.slidesPerGroup,s.slideTo(r,e?0:void 0))}}t.thumbs={swiper:null},i("beforeInit",(()=>{const{thumbs:e}=t.params;if(e&&e.swiper)if("string"==typeof e.swiper||e.swiper instanceof HTMLElement){const s=a(),i=()=>{const a="string"==typeof e.swiper?s.querySelector(e.swiper):e.swiper;if(a&&a.swiper)e.swiper=a.swiper,o(),d(!0);else if(a){const s=`${t.params.eventsPrefix}init`,i=r=>{e.swiper=r.detail[0],a.removeEventListener(s,i),o(),d(!0),e.swiper.update(),t.update()};a.addEventListener(s,i)}return a},r=()=>{if(t.destroyed)return;i()||requestAnimationFrame(r)};requestAnimationFrame(r)}else o(),d(!0)})),i("slideChange update resize observerUpdate",(()=>{d()})),i("setTransition",((e,s)=>{const a=t.thumbs.swiper;a&&!a.destroyed&&a.setTransition(s)})),i("beforeDestroy",(()=>{const e=t.thumbs.swiper;e&&!e.destroyed&&n&&e.destroy()})),Object.assign(t.thumbs,{init:o,update:d})},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(){if(t.params.cssMode)return;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(){if(t.params.cssMode)return;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:o()})},onTouchEnd:function(e){let{currentPos:s}=e;if(t.params.cssMode)return;const{params:r,wrapperEl:n,rtlTranslate:l,snapGrid:d,touchEventsData:c}=t,p=o()-c.touchStartTime;if(s<-t.minTranslate())t.slideTo(t.activeIndex);else if(s>-t.maxTranslate())t.slides.length1){const e=c.velocities.pop(),s=c.velocities.pop(),a=e.position-s.position,i=e.time-s.time;t.velocity=a/i,t.velocity/=2,Math.abs(t.velocity)150||o()-e.time>300)&&(t.velocity=0)}else t.velocity=0;t.velocity*=r.freeMode.momentumVelocityRatio,c.velocities.length=0;let e=1e3*r.freeMode.momentumRatio;const s=t.velocity*e;let p=t.translate+s;l&&(p=-p);let u,m=!1;const h=20*Math.abs(t.velocity)*r.freeMode.momentumBounceRatio;let f;if(pt.minTranslate())r.freeMode.momentumBounce?(p-t.minTranslate()>h&&(p=t.minTranslate()+h),u=t.minTranslate(),m=!0,c.allowMomentumBounce=!0):p=t.minTranslate(),r.loop&&r.centeredSlides&&(f=!0);else if(r.freeMode.sticky){let e;for(let t=0;t-p){e=t;break}p=Math.abs(d[e]-p){t.loopFix()})),0!==t.velocity){if(e=l?Math.abs((-p-t.translate)/t.velocity):Math.abs((p-t.translate)/t.velocity),r.freeMode.sticky){const s=Math.abs((l?-p:p)-t.translate),a=t.slidesSizesGrid[t.activeIndex];e=s{t&&!t.destroyed&&c.allowMomentumBounce&&(a("momentumBounce"),t.setTransition(r.speed),setTimeout((()=>{t.setTranslate(u),x(n,(()=>{t&&!t.destroyed&&t.transitionEnd()}))}),0))}))):t.velocity?(a("_freeModeNoMomentumRelease"),t.updateProgress(p),t.setTransition(e),t.setTranslate(p),t.transitionStart(!0,t.swipeDirection),t.animating||(t.animating=!0,x(n,(()=>{t&&!t.destroyed&&t.transitionEnd()})))):t.updateProgress(p),t.updateActiveIndex(),t.updateSlidesClasses()}else{if(r.freeMode.sticky)return void t.slideToClosest();r.freeMode&&a("_freeModeNoMomentumRelease")}(!r.freeMode.momentum||p>=r.longSwipesMs)&&(a("_freeModeStaticRelease"),t.updateProgress(),t.updateActiveIndex(),t.updateSlidesClasses())}}}})},function(e){let t,s,a,i,{swiper:r,extendParams:n,on:l}=e;n({grid:{rows:1,fill:"column"}});const o=()=>{let e=r.params.spaceBetween;return"string"==typeof e&&e.indexOf("%")>=0?e=parseFloat(e.replace("%",""))/100*r.size:"string"==typeof e&&(e=parseFloat(e)),e};l("init",(()=>{i=r.params.grid&&r.params.grid.rows>1})),l("update",(()=>{const{params:e,el:t}=r,s=e.grid&&e.grid.rows>1;i&&!s?(t.classList.remove(`${e.containerModifierClass}grid`,`${e.containerModifierClass}grid-column`),a=1,r.emitContainerClasses()):!i&&s&&(t.classList.add(`${e.containerModifierClass}grid`),"column"===e.grid.fill&&t.classList.add(`${e.containerModifierClass}grid-column`),r.emitContainerClasses()),i=s})),r.grid={initSlides:e=>{const{slidesPerView:i}=r.params,{rows:n,fill:l}=r.params.grid,o=r.virtual&&r.params.virtual.enabled?r.virtual.slides.length:e.length;a=Math.floor(o/n),t=Math.floor(o/n)===o/n?o:Math.ceil(o/n)*n,"auto"!==i&&"row"===l&&(t=Math.max(t,i*n)),s=t/n},unsetSlides:()=>{r.slides&&r.slides.forEach((e=>{e.swiperSlideGridSet&&(e.style.height="",e.style[r.getDirectionLabel("margin-top")]="")}))},updateSlide:(e,i,n)=>{const{slidesPerGroup:l}=r.params,d=o(),{rows:c,fill:p}=r.params.grid,u=r.virtual&&r.params.virtual.enabled?r.virtual.slides.length:n.length;let m,h,f;if("row"===p&&l>1){const s=Math.floor(e/(l*c)),a=e-c*l*s,r=0===s?l:Math.min(Math.ceil((u-s*c*l)/c),l);f=Math.floor(a/r),h=a-f*r+s*l,m=h+f*t/c,i.style.order=m}else"column"===p?(h=Math.floor(e/c),f=e-h*c,(h>a||h===a&&f===c-1)&&(f+=1,f>=c&&(f=0,h+=1))):(f=Math.floor(e/s),h=e-f*s);i.row=f,i.column=h,i.style.height=`calc((100% - ${(c-1)*d}px) / ${c})`,i.style[r.getDirectionLabel("margin-top")]=0!==f?d&&`${d}px`:"",i.swiperSlideGridSet=!0},updateWrapperSize:(e,s)=>{const{centeredSlides:a,roundLengths:i}=r.params,n=o(),{rows:l}=r.params.grid;if(r.virtualSize=(e+n)*t,r.virtualSize=Math.ceil(r.virtualSize/l)-n,r.params.cssMode||(r.wrapperEl.style[r.getDirectionLabel("width")]=`${r.virtualSize+n}px`),a){const e=[];for(let t=0;t{const{slides:e}=t;t.params.fadeEffect;for(let s=0;s{const s=t.slides.map((e=>h(e)));s.forEach((t=>{t.style.transitionDuration=`${e}ms`})),fe({swiper:t,duration:e,transformElements: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.querySelector(".swiper-slide-shadow-left"):e.querySelector(".swiper-slide-shadow-top"),i=s?e.querySelector(".swiper-slide-shadow-right"):e.querySelector(".swiper-slide-shadow-bottom");a||(a=v("div",("swiper-slide-shadow-cube swiper-slide-shadow-"+(s?"left":"top")).split(" ")),e.append(a)),i||(i=v("div",("swiper-slide-shadow-cube swiper-slide-shadow-"+(s?"right":"bottom")).split(" ")),e.append(i)),a&&(a.style.opacity=Math.max(-t,0)),i&&(i.style.opacity=Math.max(t,0))};me({effect:"cube",swiper:t,on:a,setTranslate:()=>{const{el:e,wrapperEl:s,slides:a,width:r,height:n,rtlTranslate:l,size:o,browser:d}=t,c=M(t),p=t.params.cubeEffect,u=t.isHorizontal(),m=t.virtual&&t.params.virtual.enabled;let h,f=0;p.shadow&&(u?(h=t.wrapperEl.querySelector(".swiper-cube-shadow"),h||(h=v("div","swiper-cube-shadow"),t.wrapperEl.append(h)),h.style.height=`${r}px`):(h=e.querySelector(".swiper-cube-shadow"),h||(h=v("div","swiper-cube-shadow"),e.append(h))));for(let e=0;e-1&&(f=90*s+90*d,l&&(f=90*-s-90*d)),t.style.transform=w,p.slideShadows&&i(t,d,u)}if(s.style.transformOrigin=`50% 50% -${o/2}px`,s.style["-webkit-transform-origin"]=`50% 50% -${o/2}px`,p.shadow)if(u)h.style.transform=`translate3d(0px, ${r/2+p.shadowOffset}px, ${-r/2}px) rotateX(89.99deg) 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;h.style.transform=`scale3d(${s}, 1, ${a}) translate3d(0px, ${n/2+i}px, ${-n/2/a}px) rotateX(-89.99deg)`}const g=(d.isSafari||d.isWebView)&&d.needPerspectiveFix?-o/2:0;s.style.transform=`translate3d(0px,0,${g}px) rotateX(${c(t.isHorizontal()?0:f)}deg) rotateY(${c(t.isHorizontal()?-f:0)}deg)`,s.style.setProperty("--swiper-cube-translate-z",`${g}px`)},setTransition:e=>{const{el:s,slides:a}=t;if(a.forEach((t=>{t.style.transitionDuration=`${e}ms`,t.querySelectorAll(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").forEach((t=>{t.style.transitionDuration=`${e}ms`}))})),t.params.cubeEffect.shadow&&!t.isHorizontal()){const t=s.querySelector(".swiper-cube-shadow");t&&(t.style.transitionDuration=`${e}ms`)}},recreateShadows:()=>{const e=t.isHorizontal();t.slides.forEach((t=>{const s=Math.max(Math.min(t.progress,1),-1);i(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}});const i=(e,s)=>{let a=t.isHorizontal()?e.querySelector(".swiper-slide-shadow-left"):e.querySelector(".swiper-slide-shadow-top"),i=t.isHorizontal()?e.querySelector(".swiper-slide-shadow-right"):e.querySelector(".swiper-slide-shadow-bottom");a||(a=ge("flip",e,t.isHorizontal()?"left":"top")),i||(i=ge("flip",e,t.isHorizontal()?"right":"bottom")),a&&(a.style.opacity=Math.max(-s,0)),i&&(i.style.opacity=Math.max(s,0))};me({effect:"flip",swiper:t,on:a,setTranslate:()=>{const{slides:e,rtlTranslate:s}=t,a=t.params.flipEffect,r=M(t);for(let n=0;n{const s=t.slides.map((e=>h(e)));s.forEach((t=>{t.style.transitionDuration=`${e}ms`,t.querySelectorAll(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").forEach((t=>{t.style.transitionDuration=`${e}ms`}))})),fe({swiper:t,duration:e,transformElements:s})},recreateShadows:()=>{t.params.flipEffect,t.slides.forEach((e=>{let s=e.progress;t.params.flipEffect.limitRotation&&(s=Math.max(Math.min(e.progress,1),-1)),i(e,s)}))},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}}),me({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,p=M(t);for(let e=0,t=a.length;e0?u:0),s&&(s.style.opacity=-u>0?-u:0)}}},setTransition:e=>{t.slides.map((e=>h(e))).forEach((t=>{t.style.transitionDuration=`${e}ms`,t.querySelectorAll(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").forEach((t=>{t.style.transitionDuration=`${e}ms`}))}))},perspective:()=>!0,overwriteParams:()=>({watchSlidesProgress:!0})})},function(e){let{swiper:t,extendParams:s,on:a}=e;s({creativeEffect:{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`;me({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,o=M(t);if(l){const e=a[0]/2-t.params.slidesOffsetBefore||0;s.style.transform=`translateX(calc(50% - ${e}px))`}for(let s=0;s0&&(g=r.prev,f=!0),m.forEach(((e,t)=>{m[t]=`calc(${e}px + (${i(g.translate[t])} * ${Math.abs(c*n)}))`})),h.forEach(((e,t)=>{let s=g.rotate[t]*Math.abs(c*n);h[t]=s})),a.style.zIndex=-Math.abs(Math.round(d))+e.length;const v=m.join(", "),w=`rotateX(${o(h[0])}deg) rotateY(${o(h[1])}deg) rotateZ(${o(h[2])}deg)`,b=p<0?`scale(${1+(1-g.scale)*p*n})`:`scale(${1-(1-g.scale)*p*n})`,y=p<0?1+(1-g.opacity)*p*n:1-(1-g.opacity)*p*n,E=`translate3d(${v}) ${w} ${b}`;if(f&&g.shadow||!f){let e=a.querySelector(".swiper-slide-shadow");if(!e&&g.shadow&&(e=ge("creative",a)),e){const t=r.shadowPerProgress?c*(1/r.limitProgress):c;e.style.opacity=Math.min(Math.max(Math.abs(t),0),1)}}const x=he(0,a);x.style.transform=E,x.style.opacity=y,g.origin&&(x.style.transformOrigin=g.origin)}},setTransition:e=>{const s=t.slides.map((e=>h(e)));s.forEach((t=>{t.style.transitionDuration=`${e}ms`,t.querySelectorAll(".swiper-slide-shadow").forEach((t=>{t.style.transitionDuration=`${e}ms`}))})),fe({swiper:t,duration:e,transformElements: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,rotate:!0,perSlideRotate:2,perSlideOffset:8}}),me({effect:"cards",swiper:t,on:a,setTranslate:()=>{const{slides:e,activeIndex:s,rtlTranslate:a}=t,i=t.params.cardsEffect,{startTranslate:r,isTouched:n}=t.touchEventsData,l=a?-t.translate:t.translate;for(let o=0;o0&&p<1&&(n||t.params.cssMode)&&l-1&&(n||t.params.cssMode)&&l>r;if(y||E){const e=(1-Math.abs((Math.abs(p)-.5)/.5))**.5;v+=-28*p*e,g+=-.5*e,w+=96*e,h=-25*e*Math.abs(p)+"%"}if(m=p<0?`calc(${m}px ${a?"-":"+"} (${w*Math.abs(p)}%))`:p>0?`calc(${m}px ${a?"-":"+"} (-${w*Math.abs(p)}%))`:`${m}px`,!t.isHorizontal()){const e=h;h=m,m=e}const x=p<0?""+(1+(1-g)*p):""+(1-(1-g)*p),S=`\n translate3d(${m}, ${h}, ${f}px)\n rotateZ(${i.rotate?a?-v:v:0}deg)\n scale(${x})\n `;if(i.slideShadows){let e=d.querySelector(".swiper-slide-shadow");e||(e=ge("cards",d)),e&&(e.style.opacity=Math.min(Math.max((Math.abs(p)-.5)/.5,0),1))}d.style.zIndex=-Math.abs(Math.round(c))+e.length;he(0,d).style.transform=S}},setTransition:e=>{const s=t.slides.map((e=>h(e)));s.forEach((t=>{t.style.transitionDuration=`${e}ms`,t.querySelectorAll(".swiper-slide-shadow").forEach((t=>{t.style.transitionDuration=`${e}ms`}))})),fe({swiper:t,duration:e,transformElements:s})},perspective:()=>!0,overwriteParams:()=>({_loopSwapReset:!1,watchSlidesProgress:!0,loopAdditionalSlides:t.params.cardsEffect.rotate?3:2,centeredSlides:!0,virtualTranslate:!t.params.cssMode})})}];return re.use(ve),re}(); +//# sourceMappingURL=swiper-bundle.min.js.map \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/js/tinytyper.min.js b/wp-content/themes/nenghui-energy-theme-4/assets/js/tinytyper.min.js new file mode 100644 index 0000000..acff7cb --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/assets/js/tinytyper.min.js @@ -0,0 +1 @@ +(function webpackUniversalModuleDefinition(root,factory){if(typeof exports==='object'&&typeof module==='object')module.exports=factory();else if(typeof define==='function'&&define.amd)define("tinytyper",[],factory);else if(typeof exports==='object')exports["tinytyper"]=factory();else root["tinytyper"]=factory()})(this,function(){return(function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={exports:{},id:moduleId,loaded:false};modules[moduleId].call(module.exports,module,module.exports,__webpack_require__);module.loaded=true;return module.exports}__webpack_require__.m=modules;__webpack_require__.c=installedModules;__webpack_require__.p="";return __webpack_require__(0)})([function(module,exports,__webpack_require__){'use strict';Object.defineProperty(exports,"__esModule",{value:true});var _tinytyper=__webpack_require__(1);var _tinytyper2=_interopRequireDefault(_tinytyper);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}exports.default=_tinytyper2.default;module.exports=exports['default']},function(module,exports,__webpack_require__){'use strict';Object.defineProperty(exports,"__esModule",{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;i1&&arguments[1]!==undefined?arguments[1]:{};_classCallCheck(this,TinyTyper);this.element=el;this.cursor=document.createElement('span');this.textEl=document.createElement('span');this.options=options;this.text=options.text||el.innerText;this.textEl.className=options.textClass||'tiny-typer-text';this.cursor.className=options.cursorClass||'tiny-typer-cursor';this.cursor.innerHTML=options.cursor||' ▌';this.init()}_createClass(TinyTyper,[{key:'init',value:function init(){this.element.innerHTML='';this.element.innerText='';this.element.appendChild(this.textEl);this.element.appendChild(this.cursor);if(!this.options.staticCursor)this.blinker=(0,_blinker2.default)(this.cursor,this.options.blinkSpeed||0.05);if(!this.options.staticText){this.animate()}else{this.redraw(this.text)}}},{key:'animate',value:function animate(){var _this=this;var symbols=this.text.split('');var result=[];var animation=function animation(){return setTimeout(tick,_this.options.textSpeed||95)};var tick=function tick(){result.push(symbols.shift());_this.redraw(result.join(''));if(symbols.length)animation()};animation()}},{key:'redraw',value:function redraw(text){this.textEl.innerText=text}}]);return TinyTyper}();exports.default=TinyTyper;module.exports=exports['default']},function(module,exports){'use strict';Object.defineProperty(exports,"__esModule",{value:true});exports.fadeOut=fadeOut;exports.fadeIn=fadeIn;var requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||function(callback){window.setTimeout(callback,1000/60)};window.requestAnimationFrame=requestAnimationFrame;function fadeOut(el,speed,callback){el.style.opacity=1;var fade=function fade(){if((el.style.opacity-=speed)<0){el.style.opacity=0;callback()}else{requestAnimationFrame(fade)}};fade()}function fadeIn(el,speed,callback){el.style.opacity=0;var fade=function fade(){var val=parseFloat(el.style.opacity);if(!((val+=speed)>1)){el.style.opacity=val;requestAnimationFrame(fade)}else{el.style.opacity=1;callback()}};fade()}var blink=function blink(el,speed){var isStopped=false;el.style.opacity=1;var tick=function tick(){if(!isStopped){fadeIn(el,speed,function(){fadeOut(el,speed,function(){return tick()})})}};var start=function start(){isStopped=false;tick()};var stop=function stop(){return isStopped=true};tick();return{stop:stop,start:start}};exports.default=blink}])}); \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/assets/js/world.js b/wp-content/themes/nenghui-energy-theme-4/assets/js/world.js new file mode 100644 index 0000000..1fe6549 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/assets/js/world.js @@ -0,0 +1,20 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +(function (root, factory) {if (typeof define === 'function' && define.amd) {define(['exports', 'echarts'], factory);} else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {factory(exports, require('echarts'));} else {factory({}, root.echarts);}}(this, function (exports, echarts) {var log = function (msg) {if (typeof console !== 'undefined') {console && console.error && console.error(msg);}};if (!echarts) {log('ECharts is not Loaded');return;}if (!echarts.registerMap) {log('ECharts Map is not loaded');return;}echarts.registerMap('world', {"type":"FeatureCollection","crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:OGC:1.3:CRS84"}},"features":[{"geometry":{"type":"Polygon","coordinates":["@@࠿@ᠳ࡚с̶ʩт˷˔ƹͮɠͲ˖рԜ׷҄̕ҴNܾͰؼ÷۸ήԪ‡Үƴ̮¿ঞɪֶϤϲŹƛе²֭ĝDZƊĠǔōϭñėށ؅ਓɁȥԯ঻ƻԓࣗඩअ৯۝ڻो֑য়ߝล໥ϓ؇UļāļƫȖɩ̌]ᶼ̈́͘ɮ͜ɪ͚€®ĞĚ۪ƼɦːϪǰ;Ąߞᢌᣮ"],"encodeOffsets":[[49130,8189]]},"properties":{"name":"Somalia","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@ƛ¬Ð@ĞÆÒªDZ"],"encodeOffsets":[[9810,48188]]},"properties":{"name":"Liechtenstein","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@⌗†øĒ୬ͪࣆيʊˆ҄ؔ^˶ȇɪÈצϲ֌ĐФ؜ְദ׼ҢڴήࡔլİtʍԾ΃ʤ›՘IJʢË΢ǒŎɽĠPĀmǶVǢgΤ̑Įவňȵ’Ǒ¼ýĈå²yĞÇÞ³œëąÍĥʹ೵]Ɂ³Ɨ{‘ΡʼnƑcăZÉSÍƫH˃ǨǓѭLJƣġǥÕȿÕǃñÿśıƇħěŽđұĿЍU“ƉÝå‹Sĵ^čfʉdʇǍ·ƒণ֣oۋ@Ĺ"],"encodeOffsets":[[-8891,28445]]},"properties":{"name":"Morocco","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@⌘…@ķœ@@@Ŕ@@̷@̩@ǕBȍ@ȋ@ƍ@ĩ᫫@@ɋ@΃@ɭ@ŕ@қ@΃Oх̉űƽw½gΉɩķƯtįQJ–dz˜՟TšRšPėRŏᇷCฝCċα`ý§¨Ƙ࢘Ӕ׎ŰшΞ׎LJĹèƤ࠴݂Ģָ͌܌۴КͲޞŚƀ","@@i˷@@j˸"],"encodeOffsets":[[-13351,28480],[-8984,28120]]},"properties":{"name":"W. Sahara","childNum":2}},{"geometry":{"type":"Polygon","coordinates":["@@A@ƟwđĵȏÒʁč«Ǔƅ@ã̌Ο˘SǴʒÊÆ`Å_֡˰ϟʊkˆIŠDZʪĠɁ˔˶àϷˈȘѬ˻W²ɤ˲ÚͩǀºĬȋːÈĆѠŎNJĘȘoø`Ȓg¤_€cº·¶ÙȈėÒ÷´›fFfV\\T^Qhɿ՘ɳ†kĝƱƨ÷YißMµGuOD‡Ǝ‰Ĩãɰ™İŸÈßĜhŴĬŬ~Ũ±â›Z‰ƒ]ãNÇk¹ėnjƽɣȭkƒěHãƺ˝Ǵ謭’¡İÃƩǝÿďȫ•Ẹ̀Q‘ßço}ß]ĕUΥ@Ʌ±@@"],"encodeOffsets":[[22080,43262]]},"properties":{"name":"Serbia","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@хǑޟ˜ܯőࡡԧ¡á͘з¤̧սշŊƉ™ˏͭąٝ°̺׿ٓɥɓӱŒз·ʫɫƚν@ӧʟƆƋʇğԻzЛϭĭ޿ॕʳכ]ʛŷѿĘࣻõЍĺٵȀ͋ĠШъȒȢȌȜxèFƆ·ǴăĆˁȡ|ɍ‚ƒZ{ƒZØaŤDĠŽƲDèij̎őͨaŦ̰̚˽êóļ@͒ƂDzȸZíĊ•´ubSv\\vÀT˜„ΠŠhňǞjΔö’´ƌ„’FgÈèTɶǓЀ«Ȁǫ͊î̲džzĺîĢƘ؜Ɣ˒Ř˞Lj°òŠńƲъ„ÖŖ¾ŚšǶRɄJǮˊרȋ¦HʲpȮ‹ńċľsĺ¤ÚR|¼[þJ¬wNwNÌÛļûĢmnjÂpp^ªô¤ʂĸ®T¸S–Z^‚b\\~VvL¤QȂƓR¦„¼¶^ê}ĞlôÒÈŒ”ǐ`Ɛ™ǢbÀèHϱĸ^ŽǠŶˌ̆ѨīÞŗ­Ƀ”aÎJĊtÄB~oűځĈʁŔů࠰˨ȦȨˈŢƠ®ĈRľsª_ÂW\\—a÷ËvkĄOΘĈŠ˜²˜ʹkҋČѼ­§MÕryŠWJ·oğ}ƽáHiĸã|u^Q"],"encodeOffsets":[[76331,37911]]},"properties":{"name":"Afghanistan","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ÂR̮cҮƠ͎Åǖ@ǔˆ|ɔDªĞƶHNJšŖ̈ƄĺTNJ|ʖ€ĞGR_¿ƽA½n½¦ƒʬGɼEҾi°oČ଩ýٵ͔ӑĠճēśnʕ¬ÓŠIàþÖÚ~ɈqɘM͚IJ̴™ŐŢdܓ×މoěG±ðƁIĵY൑@ȗ@@ڟ@ˑ@ˑBౝǶ֡া࡙ࢳǑ೟Ƶҧƀ਩¼ҹͺሹTᅍeғ̴ʟÌՋȭǃN‘OėFǗ–ģµƇoŒ͆ƖËܼɠˌ҆ლζ֌θɌƴȞǀЊ¢ݐс޴˫ߚ̢̤hˊүஒґۤݴɦƌOՎNዲQĮ…ĘÇƈǕžϡÐŻĚƉÆ˕Ԃۻ"],["@@̆Ƅ„_øęÞËr___ğ™ı•ͅ˭DeÌ·‹ӏɫ‰θƅːОΖ"]],"encodeOffsets":[[[18002,-8293]],[[12802,-4697]]]},"properties":{"name":"Angola","childNum":2}},{"geometry":{"type":"Polygon","coordinates":["@@Π˗ä̋ÝԍȄ́ɊßQÙÚŷűŻȉ̍ǝ©¡aq›uwW@yÐğBƧůÙPь‹XkAűˬѽ̨ŚAĹɐȨࠐDŮȡæ½ʮ̾ϦŒŷɴÒ"],"encodeOffsets":[[20546,43569]]},"properties":{"name":"Albania","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@Ł•^ĊĤ³"],["@@ɨ÷ϫƯħƾƊ¡sƜƖ"]],"encodeOffsets":[[[20135,61632]],[[20470,61800]]]},"properties":{"name":"Aland","childNum":2}},{"geometry":{"type":"Polygon","coordinates":["@@Ɵ½íIir[ò\\¢Ö ÈOŢ~y@esQm"],"encodeOffsets":[[1747,43524]]},"properties":{"name":"Andorra","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ʙOǘøĂç"],["@@š‚ȆĶãŷ"],["@@ø֟˗ȫÁǸǣï…ԿƖw´ŷѡĹÂĹ˧څ[˥ççᒣʾ߳४oǪǘÚȱɴ‘ѼƸॺí̆ĐȾĚ̌҂ৎࠠŞɦò_m̙ź‘"]],"encodeOffsets":[[[55223,24758]],[[54613,24841]],[[57650,26267]]]},"properties":{"name":"United Arab Emirates","childNum":3}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ؠQۓƫĵÜǪĢ"],["@@nᇜ͠έLJvµǥˠ›Ÿɏ׶УࢸНࢴŧʕȣ࢑įԭņ౳¦"],["@@ȴǛߖȡפϿବӗɒ˳͉ӡȧɇ“˽ͫЛoÁŒıξ”บɿɮȜǴGƌùÚD涐ÌE悶̆ž rºʒàǞȔɌͦžʮbΰƠ¥ʐĒɜũȈԵƛ۩ЧʩхŃɫˇԽ˳ŽƩǟXࢣ਍ʉƽƯɃƅ曡•ě½õijģ“ă¾ɣÙßdƕqùşȅiߜ‘l•gĝ‡ëĿēk©z¿HÃiÉZǜÁEÕáųeû¤ͩɅŷĻҩžѻőēȰ͗آ˯͆˿Ʒ̛fʳɔɧ˜¥ÞщܿਟՍ̍൱ͷઃŻأ€УƊϋȰʼnŁMĒå¯̩ŽÍīʩžБůǻӃǿ֋¥਻ΤɛŧŬਅϘŷƒƋŴcˎ’ňƗ¢θĖƒƙZ΍Εƻϟ̲ЛŹ³ýתǭѫȁ΋͏Yש͏͍R̅ҧšكʗցڛþؖ͟ӁٺóɖɁÛʗΉǁʔ@ľĩൿࡕǿʛş֡γƻ·̒LƷˋÉ͎KƨůԹ˻˃ѹƄ†ƒеίăрýѬ֯ౡ̊࿩fЩϘÊܞƛØգŋ̉Ԩ«֊þŴ˜\\Đʊ͐ƢÌ̮ȒĠvɌǃȞƠ͒ψʔ‡̶ȬưƧЮȴǨī̀ͮȺȹ̒ϏÚmŎڬRĐǠ«Ĵԛ¶ŞϢȋӨżĢͩȺŽب̜ǤƉͬiߪȊʼğǤƄž»͖Ʋ„Ś֖Ҙˤʷ۾qޚŘˎմϲUҐŝɶƌČ˺܆ǚ܂߆ɝèÀˊ˻ڨĠł˥͚ÆΞǰłƀ֌ǒFĦƶīĆÉيǘȄƞׄМЪˠ٪Ɉ\\ɰƖɭцƪˈƫ؞Ǫˠƫ̂ʾ̘ݨ̞̈ࢂƽưǢʾɼʚ̆Ē–¼”ʆİxzžEÜ}™ǘşöãîSƖ`Ѷ_͘ijèţžħ‚čÔƧ¢Çd‚–NJʒѾ°š࣠€Ǽʗî·ƚ÷ƄƣΔӍ׶Ћ"]],"encodeOffsets":[[[-66098,-56029]],[[-70300,-56170]],[[-62550,-24224]]]},"properties":{"name":"Argentina","childNum":3}},{"geometry":{"type":"Polygon","coordinates":["@@́{ř̮ǯŔfƖ˟§ʭôķƶɛ½Г˲Իðą̘ŸȦʁ͚՚Ú؞Þdž€ǀťıÑѢȓǫƣÜşєʣßǫʳ¡Ժ͏ɼīŷȀƭƹúʇ"],"encodeOffsets":[[47607,39841]]},"properties":{"name":"Armenia","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@āɆœƃë"],"encodeOffsets":[[-174823,-14695]]},"properties":{"name":"American Samoa","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@īƨǜMïƙ"],["@@΂ŜªūȩÃŚÕٸǔȢťƙțȃúͽñȐŵɖ¨ĻƣࠅƦƇƥƫJÌ҈ħĊȜͼŒǗëȃŐy"],["@@ƥÈè þħ"]],"encodeOffsets":[[[70946,-50236]],[[70846,-50288]],[[53079,-47554]]]},"properties":{"name":"Fr. S. Antarctic Lands","childNum":3}},{"geometry":{"type":"Polygon","coordinates":["@@ťowîÐÒĎŏ"],"encodeOffsets":[[-63197,17446]]},"properties":{"name":"Antigua and Barb.","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ŸēǡÎƮŸÔı"],["@@Ȫb࢈ͥ;ðŀùŢƨϸQƖƂɂyĄþȺÙńଡŇȶʏԑlԟƇñĈ§ĐŸþȏêķǁŻȲ­ΧȻºæijǡ˱˙Ĕщ£ƞǴ¼˫p͕̮ʏאɨɗ¢ŚƹǪą¥FƪЅՊĵΆÔʸ˚ĩ"],["@@£ÝÏÒĴL"],["@@‹éŠżBÑ"],["@@ÞƯ͑êʴĆ"],["@@ʠȓbƿǩõ˵͢ȞĨ"],["@@÷Dzƌ˖Š̻dzƋ"],["@@’Çȏ|ƾŒ"],["@@˪ZǎŁϟȅƩȩüϡ¥ǷŤĈŢגƀɀyXı"],["@@ĥɩRʨĔ}"],["@@ǿɪcɂȤѫ"],["@@čǘ¾̞ǂǀédžĨðþ˫ɭֿ"],["@@þCȷǡȸĨ"],["@@ŅÁĮƶXij"],["@@ĕP–ŊÀř"],["@@jɇǗȞƮj"],["@@„ľàēģi"],["@@̉ƙŒɲʚÔĢĵǃµ"],["@@ųÈÈĮìƵ"],["@@ÕgIżàœ"],["@@ěWÌŖĽ"],["@@ƪdũʉǤģ³ğҷèö̆Țǂ¸Ņ"],["@@īPþŸnƇ"],["@@ƃ×ʤǮşŕ"],["@@Ŭřҿ|żň›ƴŢŠƒ˽"],["@@ͼ–ȶŨɪȹӳЩρʸŅΨȠƹ"],["@@Ñ»ɆΪƳ̭"],["@@ğɠĂÌ^˫"],["@@Í̉ʖ˱ƺڭʟǪԝǤĩјȚƦɕ՞ϙŜ௳ˠЉƂƒǶ؇ÿՙʪɽ¦ΣٌΓɼ^˘͡ࡢѧŀLJŻZĥѪқȾϟɀܥĴ¨ŶƇȰŔŦϸͧxƦĔ…ƞ࢑ʼ˙֬˵ʤЋ˜ǣǔͱɔȗÒ͑ưů¡ਗϬ࢝”εӯཝñܹ͓ԡõͥ˫ȩzá̏ťѩ֯W̃ſáĜq̡ЁÉћԟۏɗාϝȯകƍࡧؕ՝ÁĴƕŊ®Çʱȭɾȉ‰ŧȢͥŌŪŢÇŴƷL˩əȯƈǎGǪɆȓLjеȥɨÕृԡࣩκؗĬŋįƛr΍ʌԷưԗնÔӪŅʔٓڔǬ¶ĤóMȢٕɡ˳|˞ӶkɖͳԀͭࠉڷąŌ˘̈́DĒلςӨã͈ŠĚǫѠNȳ̷̉ǡλڵͳҏՋàˑƩĴŧÝѳ̖ĀĊȞÿȗԸˣ˪ĉʢƵŜʳtŅƼÕȘńdNƶӋ˺ϟpϣȒҗ§࣏ј̣ĝഁ±༱ԕ୷ƒঃӭџŏإݵଗÙ÷İտ¢ಧů͹ͥұģٓэҭģࣃĢѽNJΟ̴ұƞ_ج̬Ŀ˘ϔ`఼Է॔ȃ஖ׇࣀř؞۽঒ڽ„ƎȎБŸ‹ĒĂbƘϩԴ´ĪɘșVʣŊĬŚʵĊÓŀĖAπڟஔÔӈɤϜŽшĥɶ˸َϬfջȢŢ˨Ѥغ˨Ұϰא̈́טÉښ̄ҪĨ̒ɢМ—ஊκ˸ʆи۾ј̬ǕӀĪΎϬ̊ɀ̎Ӿ࣫~ЬȨ÷˜Ǟ͑άŔØeNJĺ€ŊǃƼİɌĻІ]̯ĔXƔƈhÔȲŧďĻǶ¸ɞĺEŌȈ̶ƗTŔƍEÏŲǘƀˊīƫ;ͶȚ¢Ȑއ—ȧƄ¼ÐůŌļ„ѤŊsØƉŨŨƖšǰǤIƖńœҰʍ؈֯ġԱðĖĊÕáɊʹɦМğƂɵ¬ʐ̮ɥFʐDznȳƴþøˍƒ˦Όň΂ΠɪĿƂ„ǀȚɨǾ”JǺȶŃLdžΘʦŬǫՂGDŽĂƂğČƈǞXçöš͖ǗƂͷbȿƢŜĸǎʼnƬô̌ʁɺĈȊʡ؀ŁќȅˀÌʦǫǂwעͪǽ͑ʮdÖȗƮWÌňáŎnjȆɶɱƬc¨ęΉι¶ǿŏȅƕò̯ƓxՋҥە¤ƑلЗðƓΎīäǫǾ`ל̕ҔС٠ƱȨίڌ̽ЎàˎǮϰߜˬ஀đӲÒˊĹ̘ƢҎˆˈǢɃȼVŠƴ̀úßǨजʎȪۓ©ŁȐȭþץʴŏ"],["@@ëµ¹ĸȤÞĥ"]],"encodeOffsets":[[[150893,-44438]],[[148525,-41765]],[[151795,-41487]],[[148260,-41478]],[[151887,-41274]],[[151553,-40711]],[[147383,-41078]],[[148803,-39414]],[[140899,-36596]],[[157224,-28094]],[[115900,-26678]],[[156752,-26368]],[[154775,-24054]],[[118217,-21286]],[[152621,-20778]],[[149789,-18668]],[[142807,-17525]],[[142857,-16970]],[[140384,-16156]],[[127588,-15771]],[[128204,-14929]],[[139996,-14135]],[[139508,-14156]],[[139611,-11880]],[[133591,-11959]],[[133754,-11649]],[[139877,-11651]],[[135776,-11574]],[[146616,-12241]],[[145690,-10961]]]},"properties":{"name":"Australia","childNum":30}},{"geometry":{"type":"Polygon","coordinates":["@@ñDZʀ͋ãʣթƒɊśȝŕV̡ͥťŕƻࣃÑ˿ǥ܋ĶǭˆśFƵ^׃Čù~·¶½ÚĩČo¦ˆ˜Š„I\\wPͥąȻXā]ǁMġ‘Ñݍ½iÇOĉLÍfϬğPčBuTD†‘ÆÅjǹőҫǦ«ǶĈǒď´ȌªúoŎŸÀvqL±Ŕ{cíƼòˆ¨ˆŔšSƨLêoŌGƚŃ२ȐdxMÀZR¸_ð@Ŝcnj_î}t_aDuvkΉø}žDd~bÒLÚſʲƘNjǼϤǐĜ|òÀ¦ƞXN`TŲAŲNZ†JłXhȠƑբE͂ͰࠬȱФ–ΆǓ"],"encodeOffsets":[[17360,49766]]},"properties":{"name":"Austria","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@Փň֍ը£¬ɜ¾ĸƵʮóˠ¨eƕǰœŚ̭"],["@@ݒ࢙ˎǻ΀áƸȋϓŒ̯ĻȏӯŽɑǓˋŷĔƃʝ\\͹ɵqԃόʞƒǁȆǾƄ˛ʈ౉ٷùʈƺ‚ǿƮĬŸɻԹ͐ʴ¢àǬѓʤÛŠǬƤѡȔIJÒƿŦǺŐÂvڲɟ̂ěĔXüҊðT”­´ˁƐķǎȸDŽˎßӌѽЈéڂը"]],"encodeOffsets":[[[47222,39811]],[[49739,42849]]]},"properties":{"name":"Azerbaijan","childNum":2}},{"geometry":{"type":"Polygon","coordinates":["@@guûƿcy¤«£ŇR§è—öcʕÐO€ōiƃ͇͟ϟչȕů˃LLJԮZپǭ˪ôľʎdzʶ^ƜàÀ̈́ǀÝʔĔŨñ"],"encodeOffsets":[[31287,-2457]]},"properties":{"name":"Burundi","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@ʦq̈ʣȋ˥w†…Aá\\ğí£Í}©™•ž͋ʁw՝ɸ£̪ɯljͫVtɴСºÿƞ˓°Ɠȼ̇{ȟ̆ۚɾèōЂ˘ƮڰêƸDžӨŁđͅ"],"encodeOffsets":[[5831,51994]]},"properties":{"name":"Belgium","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@“ÁÁŏEĕŶǽbm…l“’ʻàƋ¿ǃĿQ›ͻɷȍɽ׏ɧ‡Ó֩aл„ɍ€Ù†ÃAƒck_wL˝‡óVŃjån»k¥cÇ{ȍ࣫ŹžàȹזĀJqႬǷʾ±ՔӇ͞ŚԜѴϠҮyΆДo˚τƌڒׁ"],"encodeOffsets":[[3682,11977]]},"properties":{"name":"Benin","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@­ΏȀɃ ɯǂɥӪ̃DZNC˕ӠͿҒÈĸȡŹƁˈ΋΅Гҭzѳϟ΃ҽƊȗ¨˟ȩΑê຋WíͿļƇVֽ^óºĽV«ko¥ƒ¥D·Øs†ŸÜ“Ü­†­€ÃĆ¿žÇYʕ–ǫM͟ŕïÅćÕDķÚĉSą˜ґӂɗ̄ԮȬ˪ϞӶȼɪɘ©ˮɈĸď˚ƬǀǠĄΜǿȎĈ®͆ʢUÞʬʌɸЊ¹Şʎޤ̨ʐȒѲXϠŭ"],"encodeOffsets":[[223,15270]]},"properties":{"name":"Burkina Faso","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@÷r¢dž–Ƿ"],["@@‰ç\\ƪnā"],["@@ęψΒÒ́"],["@@ũšŠĐȟ"],["@@əqƒɚƫѐĀzɮ͇ùͩ"],["@@|JeƊÊAɪ̻ɖnńĊæŶɫD͍oȉZ¬WɆÕв«ாDΚȍéāőžo[Aġğɷ­ijǽǗij|̓ŧǃͱǖӻÞŌİǩÈWŎÖFȠˆÖŰŦQĀ@ô¦LÆ[ǞLòχzˁĒǍx¥Î՗\\ÏPVЇŽƉʧŒŵūŨуɣ͐ljনÇ«ˉӴɛȱɩ›ʑή©ӆ£ƛʉ†˔ǃſѝƲ͓͝ҁƇ¶Ŝɨɉő‰þÈ̎ơЛȱǻïђḍūNjɓŶ™͸ʼn̜iǰ¥ǔàŬǡÌuȦ¿¶ËľŐˠ\\Ê\\ĮNœUšå¨ťjƉĜĥNátÉįÞLŒ`¤ĖǜLú„AºäìȐİ@̚ˆ\\Êõ˜ïƂɡž̗ɲ‘~šȸƶƜĚĦ­Đ‡XfæŰƒȏɐ"]],"encodeOffsets":[[[94157,22025]],[[94079,22357]],[[93339,22708]],[[93755,22920]],[[92957,22620]],[[91076,26876]]]},"properties":{"name":"Bangladesh","childNum":6}},{"geometry":{"type":"Polygon","coordinates":["@@ĵ̓˧Nǡǭ‘νͻɿѼнҏmƱŐ¥\\ȝ…—é‡ɧuÇˍÏŵsySyFyĵxÿckkgÞŵXñg¥Í…ţśfɏŧ‡ŋiБĦƫòwr§î}FγyoµkQ́ÕċAđZ½SōGëÁȫ^ôͺƕɈЯːà^p~àèR’Qnół~ǴˬŦƪǞįđ¢«®dzĎƹ˞Gä„ĜlŽ‚šĄÀŠŠ˸ƩƇʼn¨ħᓞƏ؀˲ܸƈ˶ŭϬ˴Ƿ̨}"],"encodeOffsets":[[29272,44793]]},"properties":{"name":"Bulgaria","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@ÛĝƄHɜĬXl̛"],"encodeOffsets":[[51822,26505]]},"properties":{"name":"Bahrain","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@řǵѡGBņƂôʎ‰ƪƄ€ĵ"],["@@ʚďΏ¬Ķ¤"],["@@Ï{̶̀¡ǀĖ`\\lj̵˙"],["@@ǽWņɀĭ"],["@@͏ɬþĒƻʹЎٱ"],["@@̻źxÌ̄ȅ"],["@@ĹĉrŖĈ‹"],["@@ćïŞ¬®áWͯǓ\\ȓϾ˼|"],["@@Ǐ»Ăńˋ΢ΚЩ"],["@@Ƿ`ʊvѕ"],["@@CȳʣƧďǦȃ¨ËêNJv€ҌȤęȚ̓"],["@@ʰſǾLJ—ЭųƚĚJ¬ʠǫnjɁĴƇIÐŚ¾Ý"],["@@ӐۑDžȯDŽǀěǜǺĖÍ"],["@@ƩĸƀŎPͼɫʈη¶Έ@Ͼ̽xǑŇý·˱"]],"encodeOffsets":[[[-74779,21702]],[[-74794,22968]],[[-75987,22747]],[[-75834,23269]],[[-76636,23444]],[[-77480,24013]],[[-76215,24646]],[[-79521,24832]],[[-77115,24781]],[[-79203,25615]],[[-79609,25301]],[[-78488,26100]],[[-80376,27371]],[[-79079,26526]]]},"properties":{"name":"Bahamas","childNum":14}},{"geometry":{"type":"Polygon","coordinates":["@@˼Xȗѫϸˇ˵ßɂ˓ʩğ{D©OS«^­To_ðƛSáM™®ëNď¿Ù«§ǟœ_›™nLJäŕġå٥˲ç”ÆÌ̓τࠉ֮Ṷ̌ͬȶªΎȬVɞƱȦǨ͚¼ݨǗ܌@ƤǍƞ["],"encodeOffsets":[[19464,45947]]},"properties":{"name":"Bosnia and Herz.","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@ŘñࣸįkŻº¹Î“ŰÊ®fº@ät¶Œ²ZĘQLjR͢ƭʀąKơãÇUoHy±æïh¥@‹ůŕs­[¯PmƼóڟ~oÝőĢĪƉĖăȌíƎ¯†sX}Wŗãy›ÈeƞJǬ_ɀŅɈˇ»OÇaĝ•˝ƭʕ^ƳĂɁI{Uo½ß›™Œw¶³øÑüÁ~jȏOȃpw¤m”•ÊāJqǃNȑEҝȥGŕÿ÷µóåëĿ§ýzÔ»TÃj©ƵåʏǢۃăȳȶ“C¡u‡w§Sßkıě“L•d£ðÉh֡~ƅĩSĂͥrubŅŜËRķMƯbࠥŸண±çýŹġůÕwKñŽÓ\\íHýĭQM¢ѮБȸجОαজØiƦMϨŽž}æwʬòŮIlpŠĶšvƪWÆlʺʂàšwl¥{‘Ú‡NJ’¿Ħïd¹BSjjž¬êÄڒzNvSņŘǜĘxň`è”Úĸ”^ʺQ ØņÌ_jáZƻXrX|¦Ü¢ĊpÜFœϬƎѲӒ̂"],"encodeOffsets":[[28824,57491]]},"properties":{"name":"Belarus","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ÝŝĔɜuĽ"],["@@˵CÒྪzƀ˞KʄИȒv­ħȀOœĿƽԭÌÿğݑӥد"]],"encodeOffsets":[[[-89961,17841]],[[-91027,16272]]]},"properties":{"name":"Belize","childNum":2}},{"geometry":{"type":"Polygon","coordinates":["@@ŏgǎнõ"],"encodeOffsets":[[-66283,33069]]},"properties":{"name":"Bermuda","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@ĭއҀޕU฿̇ѥޗAх̽গljȤࣟ¯™ʑѽ•ljc¡ÈÓƨČĪçŤ͗Ĵѵ`ƕ_íTõäǗŠšÛ|Hwy…į“ė•»̅đɻʙǡʽƕƒǽ‹ǷZí´Cˢʯ݀Uˌ̣ͰØɰɗƜ[˾ǖŰDÄgžįĮEhļƊĦńMpkx̭ʐġŀUž¡ƀÅ̾«Ŝ¨Āǁî}nǕξ@B@œUÒĽŠl¢ԔҸWƔDŽŚ̽DŽǡѐȾͼǝɰ^ƘЪՂǟФĂڬʚ͆ݥನ̌G͌±ƜďɾĀ˜ˆä|ƀXĨiʲʘۺЬরǀĈι]ę綕³S·Ħ͕VōÇȅǢх͸ʹؚ̨͋˼ǝɼVʬ˟ծƋnçŴƑÐÁî±ǶBÄaĂ^ʌz¬RӐʥŒՇČ֛ŇIƳI¬›ŴƥŚƋŠΟhȗXŗ൚¹”DÖf¢r~AIǥĵƅO§fǭ–ƛlŹ¢¡̜șðgÔjš»RĉIJɵÚƥúûßÅŵϟµƳÆʼnΏיɪȡu‘Õi»]ÕăÅ["],"encodeOffsets":[[-59555,-20648]]},"properties":{"name":"Bolivia","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@˛XȦņƦÑ̯"],["@@åĦłĴ›ș"],["@@LJMŲƘ–Ɖ"],["@@ȗ}İĊĨË"],["@@×§™àĬœFÓ"],["@@ÚǼÊĥţĕ"],["@@ĉćĮːcȇ"],["@@ř¯–ĘĄ§"],["@@ėeɐ̮ŒξʖĞĀĿī̗ҳ΋"],["@@јÆ؊őυࣽǣĽőĐ½ƽɭôçǛǻßɕòχëɅҢ€ĨŸpŏtñƞŴՒͮƀԶĥ"],["@@ɯǑģĐǐƨDŽå"],["@@͕f˜ƬŌçÑĩ"],["@@ƯʓΟÈÈǂ҈Š"],["@@cūƯ¾ɂҌ’˧ÿĵ"],["@@ĝ…iƂȈĺÿȵ"],["@@Ɓy…ǾŰ\\˜ǟ"],["@@ŁIJǡÀ¿Nwʫ̃şݭĘ˝ŒõXŷOƅI½øŻŌŸʰ˕Άƥ†N¶œ„ƢHLżĢ˜`¢’¶ʲɪňĠfà‚ǜH¤nȒȦ–Gðn҂vQ°ÍÌgФtϴċ´^†~PøLÀŸ²µÀ­âÁnP’–––ptzvĖdffHȐĩ̄ˆ”¢¸VĈ¢ØOšRĜvJV¥–§¦ŸżQr犁œArY–iˆ¡èʬñ̦ȠܪťːˊɌպ֦݈Ęɀ˞ǽь࿫Ɍʯтƛ¸йͩ˝ϯԧѷʵוઁȻJλǃ׼…ࢬհǤەʌɇͺƸɾā;ǎ˓ޥƮŸȸӴȂòʀ˼ȺŁĨŎıôfȾˮ΂ҶÌŜąjŞ࿄ؕṇ̌Ɇɂ̘ɣµÅņ®ĨʳǿdzĀĝȒǤ®Ǔś‘ÍƗőՋʈɔǬЊļmñ˅ɔȎВæÚłόõ׀˝̼žͬƛࡌĸєÇనܗΪн΢́˚ķńǗӬƹ࢔ƂķҸ๱Aߑэ੓ΡЅŃ`LƉљՕ̵ƿΑͭơ˭EŶˣ܇ˣЭ͏̿ʏ˾ƉƕôįÑȩǏǽ·ȉĎu¹ίĚ\\įԽƮ৫˓ૃ¤ѳйңŏ્ǽƛͧ۟ͥ˯Ƒ˧ýɣ гףʻɱɩ¿̭ޓiǑȰÍɡ֥ğٚʢ¢ǃĊ٫ŧ‰ŵĔÉً˛śǝяNݩχषڣºŏɯȻbĚǻŽÕƝɋؒĻʔėɝȹöù—ȳŇ÷ǎީÇ݉ƭпЅʝЋЭҭࣁԹۧऱܙoʆ͐²΄ʢĢ̞ƴrdžɄǘwɺŔYdƼϯīɯˬŠˣĿ͗ÛÞŭαϹɹȅуÈʁѱࠃ׿ԕwJÅzË®@РhÀ|’ô¸îêĄĚö쁴ύɸƇ̄ƃĖʥĈ̶̯ϕǦ±‡ç†͑ͺtqMo…]ƒţģŃßU«B[ôhż΅͞Υ˺ʍ‹ÿŝ˳n³Öœ¢ƆĚưɄʊƾࢤ਎ǠWƪԾ˴ɬˈцńШʪƜ۪ȇԶɛŪʏđƟ¦JŤŚǴŒĊžۆ‹Ƭ¨ÀtfǕŪƻơ̈ƉĉoħgûZã\\£wð@Ö_ƹºi áކŇƆMĐăĒţxǕ@±bűƠ«`˝ƹ঱ŸZʼĦڨíʶÁ‚oNJm¦ƒ|ƒ¬ƒ’[²kÖÆ\\ÖĄ¼^Öjv’ƙŮďôΒך]ń©F¶ƴŶϠàÆùüÙƦıɶQĊ™¼ÓiïhǷŴţæ¡¢kź•ƜeǮP¨ĶƆJǦ}B¡qÕe“C൙ºWŘgȘ‰ΠřƌųƦ«œʼTċ֜őՈӏʦ«Qʋyā]ɹ`í²ÏÂųƒmèխƌȿNJ«ŖɹU˽ǞؙŽ̧͌ͷʺǡц²̔ĥ͖T¸–´èŜ^Ěćκযƿ۹ЫʱʗħjſWã{˛˅ɽÿƛĐ͋²ȝPĭGăEƑlķFė«ŻÃÏa©E¥R·„éà¿}ƒ˜୞¶ƶÇs{]ͻ˹׃ȉŗۻ]ǕвۣĊĴŪĶŪGńąĢŏƐĉÆ·Ʀ‹jŵĦƵЄXþŸ|¯^Õ쩚‡ti|jjp|KńǸš|vŘ‡ŒˆȖԸτĉ̲vΠĄƶʢþњ²zŐxú¶ŜĞĮĬÌΊȴܸżĞĶÈ´à^džQłd¾™v«à¯Ģ^ڟ¤L‚vLÆfˆɺ಄ɨఈȟּν̶b׾ӨŶˎÑƅ͢ґRHղචXãŀÀŢɐȧ҈̲ʀ΍ŒѥǦŽѼϥʌf͈ǖƄşƒŽêF̴ΖݲΠǒͶӜȌ˜Ɍցúƥ࣮ϕΦijɜDzŕ͒[ƞǓָ^К̍ŨΦʪŜɐ·˨ĊҔːɸfͰΐËǸ‘x{TøhNJƒ¨nÖUČgŶſƃңϘƱ"]],"encodeOffsets":[[[-49649,-28433]],[[-49750,-27035]],[[-46346,-24462]],[[-45188,-23697]],[[-39837,-13796]],[[-39673,-13411]],[[-45567,-3010]],[[-45960,-1349]],[[-53076,-1468]],[[-50819,-234]],[[-51868,-134]],[[-50630,-115]],[[-50931,275]],[[-51636,143]],[[-51356,403]],[[-51506,1986]],[[-61132,4458]]]},"properties":{"name":"Brazil","childNum":17}},{"geometry":{"type":"Polygon","coordinates":["@@ıj‡ǜȂųÇÑ"],"encodeOffsets":[[-60921,13396]]},"properties":{"name":"Barbados","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@Ĩ@ŴҟƷŒãє"],["@@ɽƳĀ˙ƽ̗ӷҰ̢ÌӒ̤€Ĺ"]],"encodeOffsets":[[[117788,5018]],[[117788,5018]]]},"properties":{"name":"Brunei","childNum":2}},{"geometry":{"type":"Polygon","coordinates":["@@ǝŰīĞGČh’Q®í×«ÛyÉSŸLi‚ŒÅL»q‘§gſCƝ§ŻJ½º{@ŝÝҟcͥIJş—éýƯ}ƭmŻdoºɇÎƹě¤ƵĆijǶl˜ĸâTf´Ű҄Ԅ² ĮªĆ|ÊÌæŽêb̰É^w{Ĺh[ľSźPîMʲď´HŰĆ P†]¼•ɲĉSƍ"],"encodeOffsets":[[93832,28427]]},"properties":{"name":"Bhutan","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@_ƧגࠁȖԋࡔҿĒͅͰqSһ̂Ыࡘȱbȃǎ½àߦ‰ȡgĭÅÉĭęïՇdzͭΏ›“ֵέȿ֍ǽŽƓƽ¯ɡµĉĵ›ͥޑʯÿݏ\\řĠȉNÙtщʺȫFɩƙɿ֥£Ý“ɇƛŁLJã±ȇ×§ą—…ߣOĉĚŸ۞̧٦ϙ̶EᙶࡄŽIᵦሶˎ͌ϯզξʌ{͆Ț̌z"],"encodeOffsets":[[25865,-18220]]},"properties":{"name":"Botswana","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@ڊअoЛŻȍÎʣԠųŨ̽ҾŻ̈ˡgɁĈʼn࣪ڕ­ƯǦ͗Պ̃ɒԩ˥úȿřટɀϭ́صvݷˣҫ¼ωӵ༩˞˧̰ΛɔʱŽγȣЋқ`ܱŕŨˁĻ֙ǀ݋Ƴţ֣ʇҽĵ՜޹ޘÃϪ˩ˊƗ֬®ӮƻƤʶȮϾުɰˊВaΞƨƖƶȪ˃ܪζޒ¾ҜԢȇƲÐĒୖǂβɺވݒô̔؈̮̔Ý"],"encodeOffsets":[[23409,11182]]},"properties":{"name":"Central African Rep.","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ˣ\\͠¤»¿"],["@@œ­Ăƪ’Ļ"],["@@ĵÌƚR£Ý"],["@@ƍWʈĸĹğ"],["@@ͥyɰĶǰŦùȡ"],["@@ȬǍɽ˒¢ɸǼɭWκ̖Ôī̤‰nǽۥ̍ԡcƓŤ”ϢҎՂϲǨÜɡƋϻԡ˙"],["@@ŊĀҪŝघAуǿKȍЫøń´ƉĎàüȡſΫÐįƘ̑xsƦɃ”ͨΞÿʉɶʵ"],["@@ŢqȡuìLjѺDzѥ̑"],["@@ĉƒǔȪĉǥ"],["@@ॴΠͰӮࢨҔ܈Ǥذɶࢢ޺ਞֆႺӲૼkԶˋʡɦųēɣއͷ֕Ƙٹƕ̂іųȰȫԘƪʢĹǫ̙ͿɣЦ‘§ȧ˺ӧՂÙì·ȋï̔ƍࡄį¥ýɤuѸȸƮDZʆ€ŤħÌŏƯ×ΰÙቱկʡ’Kǟ͝ƒďƁÇĊı‰Tǹ৥ۇɋ˜űȠȧfÉˤ˚Φɹŏ²Î൤ۨˀ˃–ǎ؎ŮోSҸИƕ{ųŠūʷगΑȍĀêĎ΍ˑε{ɃĒȯHÇΰ̳ľIଘέɜכœħǸljŒٝىʏګӋՓϳhǃʃᥫE›A"],["@@zùƓ‚ڏ"],["@@țûÝâʺZ"],["@@ĦéʯÇPĮƺ„"],["@@ʡĦZĴǂLĆȥ"],["@@ਫŌோ֌̔°੮ȣ࢖Οĸŧė›"],["@@įˈȒNjġĻ"],["@@෺˕նڋۮʱоաĚôâɓɗó˿Âৡ̀ɪɢŒƺĩǕҿã˵ƄƺĀʵÀbźӫImnj΂è͟ ͇ȌǯÜɒċïıĤͫ‰•ˊΚ‘jƮӻíʍȸάĮ؄ȃ"],["@@Ŀůϓ¹Șʛ޳ࡵ÷ͥդтdƥֆ˜ՙ̧ɪ¨ǽǿײŽ€įĪŖĻέ܎ϔ°ǓЬĦ˴ĵžƱӳ̓ʸpħĕɔ§΃ɗࣲȬĝțЉǍ’ijʥËȚIȍȓLjś̌͞ΖĬʭԍȌ”ƌǺňȁϯݥǩÀɡáOю΋ʳƏ”˘ҺŝˈǟĔʝϥ\\Ŧ͏ƋϫЕЇŋŲάŦרшӧGǫǏҩŒɖøRȐޓɇಿƔٽƇǡƔ¤ɒ߈Ѷ۱Š˚ǂÃądž©ˀФΎąĝøĴŸǯzmņǔƀȌ«œǰвڰɈĠijìɚˀ̔˒րȤˮćrĜǪ•"],["@@ȋŸİèĜȟ"],["@@ɓ¸̼Üħœ"],["@@ÑʞNJôķ͑"],["@@વʬNJŖײhͺϩ"],["@@Ĵɯ˳—ѢƫœĻ˦ƍ»ĥƪWßřߍՊlǺͷŚژ¸"],["@@–ΝƙȕÉЊŹõɵʔŤ˄Ͷƕäơ"],["@@ſrðǂÐdz"],["@@֛̈́ÈòюǏdžLJÿÝ"],["@@ůĩˍ¢ɌǔDzŋ"],["@@̒yŘṯ̌ʭ̈„¬̌ϼĚʑۧ͝ĵͳĸ˔xΛƜȟˤ€˒ͤ"],["@@jŸŰcƙœ"],["@@̤Ɍœǯȏ›"],["@@áäВƮͯɑ"],["@@ȩ͋M˞ˁ˳ɧÉȄ˒ϋȣѼծß̟ɞΜ˰˫"],["@@Ěř̽ŎɤL"],["@@ûÓÆƒvý"],["@@Njã¦ƺŦĕ"],["@@‡Íʝàĉłΰœ"],["@@őØɾɮɦřΑǫ"],["@@ŗWΪĐʑ÷"],["@@ԋʆդZ—ʟ"],["@@Œū˳ƒǢe"],["@@ɒƏ‹ȅЯγϗȊJʔ˪ʆ͎f"],["@@̞oYıΡHÞŚ"],["@@έ¤ϡɶٸŝĘƻ"],["@@sȋҕ˝ϕNjֵ£DZʚ҆Ϛୂ¦"],["@@̀ȣ·ijӿʸֈ "],["@@ֿǎȚĀИƭqğ"],["@@ΘǔΖȫႆӗ̾γǯǑࢸØѶ˟سʧ૧ȶõȄ۱Ǽૡۭٓǃ́Ӧ୏īȂˈְȢĹήʦ߾Ѩ͔͈ƟÁȣːȽ"],["@@Οƴ­ɒͤſêʅ"],["@@аåĉëډŠʍ̠ԶƓ¼ƙ"],["@@ʌMśşůŮ"],["@@DžNϤłɝŏ"],["@@§ëǛĤĒȢŲə"],["@@ߝœŏȨ৴ÇòǧǷS"],["@@ʟĎÉɜɐǤɾĹƣϓ"],["@@ԈűĻ׵ӟƧএƒ̡κƮɘѼ˨ޜš"],["@@LJÒȆö}Ƈ"],["@@ѕźϘD¾Ž"],["@@ѥƪĦƌʮ‘Ēʣ"],["@@ϱĄʜŦɾÓħƕ"],["@@͇“~ɖ̊ȁ"],["@@Ǜk˜ŚƄĭ"],["@@Ǣވ˲ϑλγė"],["@@ŋƕƉİʖ¦"],["@@͑ŊLjƔѨ×˝ȅ"],["@@šƮˀĩƝÃ"],["@@ÜǏʗÛǴñǩdɈ̦"],["@@ʳÜˀÆKš"],["@@UěڷĿێȜ"],["@@ĹſгFÎĿۇư̶Ğ࠲S"],["@@फ़ʣҤϑОÓ࣏॑̕Ô܉ʤ͏Ǜň̋ÍȫƐƠࡀǠùȨъĭƅ˺ΈÄ̎ǿ"],["@@̖įٟîΊ‚"],["@@­Gȟ{ͻǕΗʭ̯ȍՑԩٵ@ܥFɗMĿ“˝įöœr­MƟ’õœ‰ÆÓɏƇࣗ͏ٽıЕŧϻǵϷǵɁ@ϝʨ‚ɲӄ̘̾܌ªĆ̅ౚÇɜ̱ƞ֡ʤļƬūĺ̥ũΘˉGȋœǭ̚ǍäӧȬࡩΔ҇Dz҉ǴՓȰࣝʳૻŔȷÀ˿ŕԱȴ˽sÇ@ïƄ˯ŐΟ¼ijWˣùŧæ٥ŖûĸùŜµɌNžʧÆMͅȣBܑ@Ω@ܑ@੻@⿿@、@、@ᅍ@Χ@Ω@੻@ີ@Šćž@čąƓʂ̌Ŝͭ¯ö˰˽ʃлǦŠŐƨűȠĂʕ²¤΂ĵ’ʷʟēсȼɱͰǔϢǗ̝ΕaÁŶďƵϟ€̓øҚİԡsŞƄŭzJLjĩšΧ¡յʄʐϨؒĄիHˣȕƳǐ°Ѥ̜ƒǐѺ˫ЕͬȰʚÉúŸǃ؍̧ʻсɋ̶ːƆĈȒ˧ƵȀҢʽíƇˆұȐùƔˈƞ§ų̃śΈEǢţɻǪϽÒõNJȜĤΫaʣΡʱƕ٫ЈʖΆΖĆϩ£̃Ȭܴ࢔ȟĈɅх†ݦëƄ˅\\ÁĞƟ„ەʘ̑„“ǞȧĔĆɳł¸Æ¢®ÍÞšŌěþϛϘɯɲɫɾ֟̆ģøÁÎʅdžɡöěʒˇƒ˭]ԳĽšĿǁiĥʵȟCˁğŵ«ƉíçZÓʼ؋͔ҧˮˇŚ¢ö¶Ĝ@ÂŽGχUʟũЕĮÕåȥ”ȩ”@Ӭ@݄@௰@݄@௰@݄@௰@݂@݄໒ŕྞҧग़çܨǕ֯ʒ̨¬˭îȀǘͲEŶƈֺT¢ǢѼƥʛɉࡖƴȼǐј|íâ˚ƒࡸǞЄȄ؄‰ɨĐxǏহ̃गį݉ˡԍ̣ɾćǕöْZšȚ޲̒϶Ñɘøþȭܒі਀ȸɑƓĔċǜ¨চђУƄưžٞɷࠎف؎Nj̒ÜƹǖӶ̨ȇŒμľŰ͑ʂÝǵ˙ںrцΞߦLजŽ۔ɽណϻঘÛƹŘڪƒےǏր̅ōō֙F̥řʳȕʨëᕊŗ౜ĞޔǞόɓӾ•ƼɥȨƨՀ˻EƉчEਤ׋ϛ˺]ȴӌđک߀ƈǾାƐ֤͢שÛųƅࡕuĩƁӵgͩŦ;˂ᅰʸДùʸΑ،ƷƔƕ࡚ªॺ͇٠—ૼŪઘĥђæȁɠপϥȼȨҁļϡ¯ϩφζΤÎŋŘўwθȭҠ²ʕɭلǰͯةȒȧΜµō̦{EţࡇŽՔιȽː՘ZŢˀͣЎdžʄ׺¦ઞҢ͹͎dzǹ҇fѢːƝdžՔĔŇLJǺɊاşǎǁÓॣȎӯ΂ɈʨʎOŨ̹©ʓƖĒβ͔ƤмÝƂžϹæग़ΈΪǽҾmڢЗ·஖ٍ֣´LJŋ҈Åމ̵ӜJʹţ׮ĪȧijࡲÍЏǃ́fِͻāͿ̴ǽަ࠼ࢴ˹ΆӍáąϡ’„˳ߢٯڤʰޘ৾ٴÖȩÒȶȖѳƄĵԨ᝜ŻȔ÷̩ęώíêƉ܌¿ӣʫӜƒČljՏǗՙWˤʩǮ¤Š˧ִ̩ơΫ࿃ו्Ԑʵ²ɣĹ͂xўɃ̖ϿΥà˭ëࠍ̢क›pƋؐȯళٻѣT๻ӲşÉಋâ͖ı¶øࢺśߚε࿒ųࣟ࡝ױDž͏ĸÎũПÀǏŲȗƼƹʿn\\ʏցğছȰ̙‡ଝ̠ŘɿʒqĝĜਆɍʷŗԼŤܺɉɬ͇ؿɓދ`ΦȑԫǷǑȨƳ֫ǒʦűΫʁȻRɨƥԍʇԅ݃ɃęwਗƙǗ֞̑ΙǬτߎUظ୿ུ̫ͭˮ࿘Ϳܾ͑ӾϑྡྷЗ˺LJŭɧʰǦॴ|౤ȹƤɉǣӋʄΩųڋ׊ԇȓǫ̤g݆ҋŪɻ΃ɛ̼ƶ̾qٌѩ͝ΤͲϊʢƑŚəƠʠɁɸ҆Фʝ̙ͨࡂĖ̄ȷĆĂÐӅф࿀Զঞބà׊ʅ٠̤̅ଝ֎يז†ʞ̈́ćŕĚǐ˲ʝÈŐ¶ȓʀƬĬʋĈǜƚӻT֖ئэɶĥϚٖʒಲɍxŗϖŐ׬Ǒ[Ą߈ɘࡤ̉íʅɢèɼùƾŵƩý̎ĐȒÓǹƩδɿ०÷ʊDZЪƸĊNj̕΁ð̩࠙¥ޞěªӝ˴ƿηĭ£ŕŔ̷Ǐ̬ÑѦǐӖjˈƉŸɑŅˑַɕՄŰͤθŐǃƧſʶɠàΏĞȈ܈ɸ̠ʨ̢̡“͞˔Ǡ˴ЎźʎĐÁžξç̳ŶsȦ;KťŘ̖΢ˊ¿äą̉ƅРª¶˓ƜæʲʻǏōƜēȤ²ľřұş؈\\ƒǙȚVƪǥ֍˽˞ŚԬNǽɯϗƻٴŜƲƳ̆»SʥѷĻӘ˱ơզȥˡुĶٔɳǝđў¿ʍʼn̊]Âƙů©̢Ň̄ÚƴǷȄ¶ÉœǼƙΥΝܞȾÎĥɂiͱ̥Ӡ͖ɘ¥Ǿʽ͎ÃμĐҶʅʛǣءƃǕƭৃǷ˓ȧȿ¶ʜƕȕȃඬײ׺Ĩ͍płĨٴÅʀ̷͛ƯNJţЬɪ͂tоʙƘɑIӍѫĉӠÏ}ġȟ~ˈɋ੿ֱಅƋୁࠓ໵dzǍňڝÌṽ÷Ϗǽαթއŵୣ࠻૿Ɏॸʃú×ȁ̝ׯԋҿ˿ԣğएБзЅһȣɷ|˺ƻ؟˻"],["@@ʻºȘNJäɃ"],["@@ߎ¸ʈʢҐŠఞɭԿ̛Ȃ±ం̤ϣ̆ոq੆εӊ۝̀ćюɦ޳੊ǬǘಠŹࣈ΁ࡼৱŇљ޲εюĹzŪ଼̓ĪţѨq¼αуƜƏŵ҅ŮΏŅqƕ܁þΔƟÑɣ֤ɬʹWDŽυࢍǙඩ¤҅¢ðƊਿĨ͛ȶٿοޥÉछɑᵽƳЩ̀Ý̚ྣôݩŢֵՊᔔɐ࿢ñࡌìᄿ͎ምĕഅ˜֩ɒIŬ៺ϬᕏďʑÚОNJ۹UͻĬ˜ȆؚɸɣƐ̈ǦᰶتδÙžȏЃБ"],["@@൏ҼʶǺઞÒؘǃ…ɡ֕͡"],["@@ੂVࣤƓࡰտ൹®ఝŝсÎ̥ͰӿĠÓ͘ાÇ"],["@@ߐŢҤAɬĻľԒ՝ÈӓʐӸȸࢎǁҷɜȀÌ׽œʷʨ͚ȚࡌƁ৕ʺࢎ̎Ք‘ªƆຆżҒăैܩߝϩ԰ŜˁҗزʨʢȋžɸĪۦƥOȕ΢ƋɷȄƎɀসơ߽ʖؘɊႤŹո̃ܵёࡨ͐׌ķęŗݛŏш…ʝϧђΰ֤ļ̯͑ТƸ҂ʯćɊ͂Š੖ƋΌƫɟȝϋU׍ɛݞǺ̺ÑҜŒź³õɓे̣ԪÎŹ̻ϘϠࡾɞ௢ȡŎŇ෍ρ੾Ɗȗȋɞֺ͂אʁŤʭڣਗɏئÆ੶įѪůRť෗ÂՑőՀØӪę§ʁ஻ÖञŻɬƭ৒ÇʑōĠɓǎÂÈā€ƨΚÐșϓтȦàů̘žĞʗ]ǢвŸĉȳ͐¬ڎɱƃǿׇFܨïȶĨҨţ։΋تńӪ™ɌŠ٪̛ƥŋԃîҬɩ͕ÁԅĈhƯҖLJՏgȰƵɵNjѓdʑǐŽŧȗ¡˂™u͗ȱʩةȴÜȔʇʅ܅ծߦҬҷȩۑåƚǪ΁Óޡж÷ďȗšèɓփƂךεƕĕБˆՍʆʏ¥Ҁķ~ǩːąÏǫ̰àϞǟǿÿ՜ѿÀƼΞɹɴƐ֐ɉɉŃϤÉśő̯SΊɟЮ@ĵĥ͚ǫɇϯѷѦļсͬ˹ЫV®ʳफИIĭƻŠȫȨ—Ǐ৏֐ƞʽ٫ʬΕk٨ѿϸá»ë๎ڧť˅ᎋ̦ӷƚЀՋIӅŮʯüƈIJ͵¯թ̎ԤƐޅŮĮƒ˗ÍߥӚƸƸ՝IŻŹÅƸ˥ŒȁƼȧÅȌɥࡩx©ōࣵŻݻĺʇŞ¥τؠɐ†Ɍ఼ȍ͕̈́ĂƖχʐՎ[ࡺȂӲeܫֶ୐ҼȶʬӌȊࣃऒ҉LA˖ʝ^ņŷɽMԻɢƪȦ༳̅zʼԔlʲƴۉɎȚnjё÷̇ÀȚŞ؛ÐƵͦёSڃ̀˵ǟҖƅwɝԿ÷ᅗĶؘ̌եDzؓėܙƠ׫ŸೕŲ̇ÙҕĞÙːேǿߍȼ֡ӊഢįפÈᖑϜ³ߘঀ࠮ࠢː๨ńࡈŇࢭ΃տӵςۙ৐ҝೇ˻"],["@@܀ǵదƀрÁƚƃԽƏ̒ī९ϑڈòѐͳҊêŬƃ̗ȕǀЩ߿ǡԉ„šDŽľΉϵśһîଷ٠ԩƐџCࠟϘъ˂޲̙ڎªöǢɤÏ΃ʔײ`ғŪѯëՑDzҠĨϢųχ˼ࠈHUŴ"],["@@ס³ϋêขǶӓȫ"],["@@ߔǁഄiȸŃร࣑ჿHφõǺȹЛͣࠃ_ӿܸھ޼νǾƊƈຬĴ"],["@@ѾîôƵӖȖࡼY၊ԧÂƯᱝىҩ͍֕÷σקܑĭɷ²ଃ̍ދӪએʞңLႢຐݯӤᧈǔ࿈ʿơĵ"],["@@ͧ_ˬĮ¼č"],["@@ҙÞ˺°Ǡō"],["@@٣ĤҔʂנȱЏų"],["@@}̟߱ჃͪըΌࣜƾࠂǩ̮ͧ"],["@@۱ŋÉŌԬŨʐŧ"],["@@̽ƴ̨ÆVȹ"],["@@ЧµӟĄ๘к׏҇"],["@@ӛéՊʬ­ȁ"],["@@ȀÛӑƅء_ɰżߋ^ƺĔωVĝŔ഼ŀтʕ"],["@@ࠆőɓđ࢟Yȑɮіºªé"],["@@ǃץМóÒɅˇôȍùǢʏ̷ÖÙƗᄩsȽƲ˴¸Ӈƈ౤ʖ᭣ƹǭðոɴঠÝχ¢ϩȦ̀ŒӛĪׄĀದсȹnjӒzܻĆξÎ܏DzࡠĞޤƕưȔࡔȑ"],["@@͗t଀ňߧŻ"],["@@ӎ½ʡDžڰðʬDZȤ̂࢜ßĨˁӕҗࢽƋ૑h̙IJᶿկॷŠաɚఐɔ঒šӠȦᔱƿšdž͖ƂңdŷǍ̃ŠÀǁӋģͥŜ˅ūعǠࣵ¾ʶȐল„޺Ƽઃýاº̤ńຼľඡ¾ϤȦலmࢗĈۖȒڰ̶ȵूI൪չᄘMDƂާȘ͒Ǻ۟ȌৼϊՌ×Ʀֱ"],["@@ۣȒΜĒφą}ȝ"],["@@ੱ¨ߌĎ˦ŵ"],["@@ࣆţʯ˓ҐƢෆ¼ٚƻܻ‘ᅌŻĹĥ၁€ᅊΥ̱ȗؖģɬǤόūІÂdžùʂŐલȇkŒ႔ʒאË࣪æ໨ǝۀ̳ܻȍ࠘įҗë͹Îîˋඩģڝ´ډ̺SˇݥÝՕĊÓ÷ʷḙ̂ďᔫIģ˴ࡱɵ࠳¶˝ǤɇƗΑL۷ԜǢӪݿѐᆵ÷ٟȈ͜ĈਕżД¸̙ƦކĀಮŹ"],["@@ٹȍѨǕω‹ʲDžࢫƯȟȿّľĦͲމʕʏ͛пǞ°ˡ͗śзƒσ̜̫Ǘ્ƒ¹ǰʻw͒ȀߪĎᐄܐሺ†ǑłѺè߮ƹ"],["@@ͧ±ٟİs˄রŷLȉ"],["@@ց’ۏҶϖG࢜ͯ_Ǐ"],["@@ᆸ«ȯɯᏋdǩǼ׮ü"],["@@ַ€ÏŸ੊§džāׇ"],["@@ϣƒ׉ǎղƌм˕"],["@@۰y਱ȫ״ѝȧᆣƉڕƔ§̾ᙎǘ"],["@@˦˭ඹÐ̇ģԩúࣻḚ́ƚနɤࢾë"],["@@ઐšΏƑͪűႱɧ֗ʆ״¾कƤʃϖߚRবɁ"],["@@܎νܺǘӚɷ׌fۚȣό؏झqڣ̤ಃ°Ľĺ৹ġۇüūǚ૶YϙĄղĐہœ„ǪرƳŰȀڏLlǮńæ࿰O"],["@@ŹɍथƤHǐݴ€̤ť"],["@@ਰґஂé͈˿ւ¯˙ʴ܌ȹɱߐǡˋˁߪ°ˤſ̠ŐԘ˝ྑʹևʣΡˎ¶ϫّ¢åͯ৷Ξјϓ٫ƘˉƫรƎйŮࠚèୱÆ̱ŤЌtߣźೊ̔਺ø౫ÞणƅƩĤ࠱ĥҹȦ੖Ǭ૳Ù܋ɌƷȂᅄó͒Ŭॣ¹ࠩư܂ª̔ͅှƉೱɼ҆ǰ෎¨޷Ș়`ॲdz"],["@@ᣈ÷႟ɯᦜŪˆĒЖĻܨ†̧ͨ٬Ð࣪ßȉɏᛏχᇃŁჁ˕ᾆǘ♩टঋƀϔʱຓġద}ۍ˥ࢣÉ࿧ưޠıĢɃᅡ÷୩ĈઞɭऺSƇǍ῅טŏൂÄ๨ɋ͡ǥ಍ƒਈƷ֟ˉᅫÃÃΩՍƩ༩w࣯ǰ̜Ƴً¡ʨýቒOѦʫ׆îʲȇʩƹᑝͭƥʠرrڿȔʠɍ൷[˵Ȉ§ˋܭ«િɾȏǩ֣ÒŕŚOǗݯhċ̰¥̏ۗ¬ʼn̒ऐɸ೰æܳɂ˯̊੘âখͷ܌čࡤ®ࡖκĬŤহϫ౓vɏ̲޴ɦͤgֿÂņʎڭΗՍyʢɘ࠱ǻ՛¦شԈະŜผţ౪ǦׁÓဇþzĺڶÅᜁږßΎᙲ{ႊҗ৲ã̐ÂݕpဏՊㄾҖ༓ò໦ДℹٳགྷÝ֌ǎᇏȵ໩̑Ĉ߶ɖጎȊᐯħಣ̫֣L঍ɠᗄĂಊɂያǥጉ¡˗ŞتàϷàნǔݍ྿ƅԂȖఃÃ̗ĨᳮΌ࢜ř͢þ೨Ë೑Ȣ฀Țቜ̹ĆƜᣒͫ᠛Қ٢ľλĠੈ³ŭǨቘċ୿Ȝᒌ_ഞ̣όØಷͲᗮJ์ʕڃƸՊƪۢh࢘ǗŧƲप„Кĉ"]],"encodeOffsets":[[[-61222,44995]],[[-68364,45755]],[[-62424,46582]],[[-75463,46680]],[[-75332,46561]],[[-62571,47048]],[[-65342,47584]],[[-63400,48420]],[[-55528,48580]],[[-76501,46084]],[[-129118,50539]],[[-55863,50779]],[[-55391,50939]],[[-129680,50797]],[[-63284,50273]],[[-128188,51300]],[[-130250,51856]],[[-56789,52774]],[[-130994,52710]],[[-81289,53199]],[[-131449,53659]],[[-82669,54014]],[[-134915,54473]],[[-131637,54211]],[[-132267,54393]],[[-132964,54444]],[[-133361,55254]],[[-135839,55427]],[[-134069,55787]],[[-133709,56085]],[[-81897,57557]],[[-80830,57617]],[[-63225,58936]],[[-81629,58896]],[[-70819,60458]],[[-65952,61816]],[[-69871,61687]],[[-80416,62187]],[[-66388,62839]],[[-66591,63365]],[[-81454,63910]],[[-66379,64061]],[[-72025,64050]],[[-83968,64466]],[[-79745,64994]],[[-78517,64916]],[[-86957,66828]],[[-86706,67149]],[[-85735,67376]],[[-110686,68614]],[[-64185,68666]],[[-110489,69020]],[[-75388,69411]],[[-88673,69362]],[[-77492,69963]],[[-80878,69830]],[[-107049,70048]],[[-76678,69990]],[[-104290,70233]],[[-102622,70459]],[[-102394,70670]],[[-81111,70498]],[[-92364,71086]],[[-78843,70804]],[[-103599,71063]],[[-97805,71244]],[[-69544,71210]],[[-79901,71389]],[[-81337,71463]],[[-99778,71315]],[[-88998,71796]],[[-76501,46084]],[[-99105,74688]],[[-117270,74336]],[[-107815,74670]],[[-81446,75423]],[[-88667,72716]],[[-102401,75721]],[[-100628,75642]],[[-95406,75941]],[[-122609,75892]],[[-99692,76315]],[[-97594,76294]],[[-106618,76838]],[[-95787,76829]],[[-98384,77323]],[[-96795,77568]],[[-121168,77394]],[[-80960,77749]],[[-104680,77840]],[[-106519,78422]],[[-100045,78302]],[[-103655,78418]],[[-110891,77883]],[[-91879,78344]],[[-116286,78586]],[[-96558,78759]],[[-118324,79220]],[[-91989,79123]],[[-107067,78994]],[[-97776,79660]],[[-104134,79562]],[[-116564,79621]],[[-113109,79978]],[[-112451,80539]],[[-98513,80417]],[[-105908,81220]],[[-101162,81901]],[[-94090,83081]],[[-71156,85010]]]},"properties":{"name":"Canada","childNum":110}},{"geometry":{"type":"Polygon","coordinates":["@@ÅÑ@ĝ«ÏƜŽBAҬǥǺŒÆi’ÅC…ŸʼnOςĩȟзK¥]u­mÁN‡ŠwzµfĿ¡S‘Tďľ¯Ląků§¹B§TďƨyAā^čɵíǡťǕȍǦή̡ƚóǘӓǿųíõȫ֑ēǕÕp‡lÉü³†ĿĪ[ɀƯlűMě‰ñ½‡ŝħãI‡RAÂÆp¼–„ʌɾǂhÞxĮƘ²–nl€ŐĘŌĔvˆnj@bč°ÌºƘŠǨ³ɮƆ۴HĘxX^G\\]NčMVSt‚˜ŘœߜɃĐ³ćǑ@A"],"encodeOffsets":[[9757,48405]]},"properties":{"name":"Switzerland","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ɫªƎŞĞLJ"],["@@ɓśŽĬә™șȬࢲFƔƧ"],["@@ڪĉό¸ŽǑˤċȠ͙ۋNJoǬʫÎƓŅƬƥȗ€ӋʠĄɞƴ‹"],["@@ƾċ͚¸ĶǣƫÁ߱ʎϐl"],["@@̲áķɗˣŤЍÏɗɈǶƌԚŭ"],["@@”ąʹSɶǿǟǑϱĻĚɘɳ‚“ƑʼnXēɎѿƸͰŖѰÓ"],["@@ؚŭѦʅγ ʥǮ͹`ω˪˞ƣ"],["@@mᇛ۩IȥŬٱą૫ƶąĈņĂ؄SʂĮĆƃ͞—ҩΘIȐ˰ɎŸ̟ȿeĀŋ̮ȱάÖШɁǬŴߋʢƍȄºƔآʲɿè׉—ħʖˀŤȿdžϐËѬˮȸƳ͆úƆÛ"],["@@ʊ˭ƃˁƁPɅМʂƄ"],["@@½ijΩCȯȑŖ̆ΖÒƬÍ"],["@@ğë_ʄʾ{ƽƛ"],["@@ͥŸĺ˦Ϛćƭƽ"],["@@ʃ˕Ɂ‰źĨăȊАn"],["@@ıܝƙIįʈƀʪȣĝėˍН¼ȲʢƉŔ͌öĽĺɖǀ®Ȓ̌…Ð͋"],["@@şƪâЬƲÜȜԑ̏ş"],["@@̙…ʏР\\ƖʬŖˢم"],["@@űÖˮ”ƻĩ"],["@@ŷÅȋĂ͈ЬCѧ"],["@@ƽƜĂĜüɷ"],["@@ȯãƙð¡ŐȦʴβƣǫɫ"],["@@ɣǑɲԕʍűԏהĮƦͼìĒȾʔőķ"],["@@ŧāƿ¦˨œ"],["@@˻Wɭł̎ாђčĖʟ¡ɯˋij̔̏ˁȅoƿ"],["@@ƻ_ĦðÖÏ"],["@@ŻšĒĢÑ"],["@@ƾƯ̇ࢁݧ̝ʽ̗Ƭ́ǩ˟Ƭ؝Ʃˇɮхɯƕɇ[˟٩ЛЩƝ׃ǗȃÊىĬąĥƵǑEſ֋ǯŁÅΝ˦͙ğŁ˼ڧ¿ˉɞç߅ǙÛ˹܅ƋċŞɵVҏճϱŗˍrޙʸ۽җˣř֕Ʊƒ¼͕ƃŽĠǣȉʻjߩƊ̛ͫǣاͪȹŻġȌӧŝϡԜµ¬ijďǟګQnōϐÙȺ̑ͭȹĬ̿ȳǧƨЭȫƯˆ̵χʓƟ͑DŽȝuɋȑğḘ̈͏ơďʉ˛[ýų¬։̊ԧդŌƜ×ÉܝЪϗ࿪eౢ̉ڟŶ͉ɑথʯǙࡓʩĕ݃ɂȧʂЄĮ¦ʑϐ¨ɄϞǘ¾ȈƉ ݝ̱ɫ˟хǼ˘Кɲ©˰ƐԚœ׷ìDZĕɱø·ҍѭȤͼŊİȂĵŕ˻¿έ Ɂ҆βŇŴƀΤãϸǪȌȿęƹżňďʸŔƶɫLj΁Ĵӌ̃ޗȭȟȶύĬɢÀS̐ܿǠɻ͎΄h÷LjŎĠɺŃȐˣ˪ĵŶϐ˕˫ǩ˺Ȣq֭ˈʞȂ̀i̫ǰ„ưϢKɏƲƆ΄ʉЕũČtڲ˨ĶϷVġϸৌūǿŸę˴ȋɯʉ‘ΫɢĸŔʔģĞö̉ƈ˘ȼŽͦşlµıгŨnȔҳƽĢȡɵȔڂҞţʈކĜˆɪƒüՕǏԟ̻ƉΨÂöʴŦˆvɑȫϱĔƒɆ֖śΚϸŒ˨ęѕǸèɔԾȴ¸ŞbƄԏɤ”ɪžŠÔȘáʶˊʆ÷̶ØƐŢGşɄ޶Ȁǁñ΂˗Ôϴɔ˜Ŵȋlj·ƨʏɟ͏Nġ€ĤƊƿÄŽͰʜॾɖƤƺӆʙ׸²ЀǓ˼A̜¼Ÿ͖nĊДѾޮ‰ƤͲЪȆ޲˴њßҶʒμɋႀʢɨǀìвǟ؊DzɈȄܞƈȎɼ੒ÇҞɤԤŅѺƴ࣠Ǜʼ~ǖȚǪɄరįՎࡨɕଢаŜľǺ¥ʌƖ®ĊÞÚÈǖν~mǂí§ÿ¬śÆ̽¢ſVŽĢĿȦǟ֛²“lwPoħŃĻƉFgİĭhCÃǕů\\˽ɘƛ×ɯ̤ͯVˋʰܿDˡʦÍǾŒƖ„"]],"encodeOffsets":[[[-68903,-57115]],[[-68689,-56477]],[[-71375,-56237]],[[-72695,-56184]],[[-73103,-55329]],[[-74673,-54765]],[[-76170,-54192]],[[-70277,-53916]],[[-76618,-52869]],[[-76348,-52507]],[[-77109,-51896]],[[-76856,-51503]],[[-76909,-50008]],[[-76263,-50327]],[[-77322,-49933]],[[-76356,-49758]],[[-76914,-48985]],[[-76096,-46788]],[[-75399,-45897]],[[-74737,-45854]],[[-75504,-45460]],[[-75582,-44879]],[[-75543,-44386]],[[-80695,-34453]],[[-111902,-27791]],[[-68807,-23369]]]},"properties":{"name":"Chile","childNum":26}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ŀ˯̻̩ǃҙ͓ʥҡȕۉˊ‰٦ԤϨċNðĪބƠΖßÂƌȦū"],["@@ŘScĭȉ†Ėü"],["@@ijaļòGÏ"],["@@QƜægÓų"],["@@ý§\\Ěâ±"],["@@ĵolǦĮ¡cœ"],["@@ĵoØŢžı"],["@@ɭ¦¯ŊˆÙXĕ"],["@@˽´ʷɌնʿ"],["@@ɽǬKŮ˽ĚǙҧ͑…̿݅͟§ȴ͉şȁ߿ŦȍȦDZ™هۏऋϏѷϣɋƍϣ’ڻɽܝҡʯ¥wśУŏ³ǂӖǂ«ĤLjƔҗAQƆɀĂ@ǦʆĘЊӺυζėŅү°׏֛ࣳГΏӏ֯īɍƈƥ‰Ƚ˳·ȑǬˁȼŇަşŲ˻ŗ̳ˮNjЈbҪϾ¯´аżݠ̻ΖÌԢŁȃ˭Öķƭĩ΃ń݇̇ȱjîǁƹ}ÕʃȵÛÅƤŧsõëdžőܗַɛϝˆčࣈЋԔ੏c̕ШȣÀǿϞ͝VħƻRˡŬ͇VϟȤПƛְ¢ÔƏܼпǾͷϭŅԅι̹„ɉūʦ¾ŜƛՀƞΜ˙ͼĝӛ͕κĸoЃǙĸȗÁNJȫśiĺåƿǭŔ̉˳ÏŁĖƿʑǯuîijȵʻjƗˡ˅ljΧǡ»·ȢħįĹ²ʘϙΗɻ˗ÈNJơʌ°á΋êǙω¸ĘǽʷmËɽɫÿhǵӍLåũƏOǶȓΫ΅ƋHĉɃÝłǩŕƟÌ¥ǍșĉÎÛƇĉËȝǿˆͱƯDZªšőʫĈ˻ǙǝŜćȏʍXɁyͩ̌BɠčsǃDžȈˉG̳ͳų»ŐœʥũŒȅƗȏǜ¯ȣ̣Ğ˹ʓӯ¡ϙʟſľɍͥDzě«ƓǖŹƕȉϱÎðìʱЀfǸɀ̌ȳšķƔkŹͩĥŸƒˣ’ƭɪħHnɫƫ¼ßŕɱ¥dzŬ΃͉ˆʵ°ħѮȖɸȧŊə§ŋĦʯ¡Ӊ΢Ήǫƫ˃˅ıȓĆǛɓˑȮŅNjƓƴ́˓ѕʬ×ƛȭ»©£‡ʇRçĒkJQ‰qs³uß©©—mDzΩN£HƟqʓÞđaO±¡oMƋìɕ¥…\\ovY®RěÆlεž¹ǀЋʃϧRǧɸoɨ؋Ĉ˄۬õĠүĺθŽɾƄǼԻUխǙŦˌƩɚªʄżĂè͎dž”Őɺdž`˔ɸûǬĸĮ®ԆóڌǕìŻęȣՖϳ˦½MęſÙċ…‹gʼn–ėʛȅë»٫˼ϧÜԽ̳࢓ƇϫɝʱҍӁ¢׍”r”KºÄ’MlVžzʬ܍دî‘RćgğHůΌǠTƎɻĎ÷°ŸOůą³GʱĐíNŹOĽTg\\|ĺ]xцįrĻRéaåÉËą{ĭ©±Ÿӷس· ÉÊaüæȶhЛŜȏðŵçŵ•ői_B¿Ƚ`ȧÑ˧Nűbķøï’û€ûn¤yrÛP»c‹Ĺĝ‡ã€ġÀåþ·]ůÍq“d¾åŪåîå¶ɣCǕb÷p…´„ĤŽôAjVµNǵ³·NӉ̐­ŀ¡ĶuÂá„ïv̑ăΫή޹ϜƫɚǁŠdzrȋ¥Ƌȳß­LJǔĥ®ֵɺbĬʃǤɓÜɵĊɿ˶̧áXȐ½dž‚ȲȗȚ‘îƔy®̈Žb·ƒšɄŞqш—¨‚Ķm®ƏĶëîå͆³ǢȲǸ…ľÑŽҍǺƗ˺éǂƒ̂ȱ`̑gŷ‚ǡšǯ¾ĥ¢bą¨ËšWĪ£Qĭ“œuÕA}fÝżƃȾ˪mÜeÂýņ˜ĕ ÿdħ…‰Z¡Ū}~ʕÖėe¹_ǓêûB·]]R{vķäGjƾâĢ~¶pXIz‰Öq¨NȒźȋǺçܠ҅ǘɃĵȋÊėȺĠĪǕɖ|ƘIªLj’ìøPzĜ—¤GŒjzz¦°Ď¬Ä۶ʈ{Ȇ°~VŜ™ĚHŊvɾنCĺˍǎE͘ņ¼áގìºĈņœîdäjŒ¢ŽĬƐì–â`ԂŸŚ€Ą€ŢIƖtȈǦbøäžʦŤҨȈЈĮØĆÎhʴdfVXb‹ŊMҜ˰ŜůƜͪIJα޼ń԰ԡƚǀļ൐˾Ɇǁ˒¸Ɍÿøʤʟƞ׸೺ࠤǹմDĴšטȞƠdžŋ֊ȊЂڦŦɒѪўŠĀQȞȸ˜ªE¸ƋŇijô÷ǒ±‚yãŷˤéĔËĔg¦ÇRćĚ¥ƀËâYŊñδvèqǼƫ®Eâj¢–ÎQÚōô™ĺsdkĂųÒȁŬƹÔąìeÐ}”ÑÚœ×БŠÿ¤ÓJÍ˷ѕǺˡƢl҆ş۶ÉžDǬrؔù৒ӿ՚Õqȧǚïˬ֫ѴұېÎቚȅѠĠĒMζ­ӖÅͺYê]æo˂ʅƸ·ΘÅмï՜ɉʊžʶ¤nj€@ǿ̦]ĸ£ÌjÆ¢æØİ„ҮȈݸʜ୶ƆѠոlĔdߨˌԜӊܸ˶®ŔѽҬиגŔdäeʤIôŸĈÿĠ…˾ÕɄeǨ{âaÆdȌŐŸ ¨z˶ȚŠǀƮ|Ʋ“ȲXѦÌѢʀ˜´W¦_”̌͸ʞĊЌup|AžŠĎ\\„‚`ĞDǎÏˤŰðXŸĄ[ƨWÌTØSĸÌĨsǢąƜqŤZŬmðD”l͜~ƼƽʖՉшÁ€ř’ĵ‚ÍÄĻĸ͔ؗHΕ˯Å^ǹŞı~§bşbĝIśsœJ½`ïCſËåßăqɿǀûɌβŬÀVĈIĠ|ĺܦਸ৆ʻӠ˦ڸȈðDzƵńݺ৐ֶжÿЄӳÈvżݢкᔺɘৢ΋ɚÎӘƉ׊ֱӪ੗͐ͣ~̛Ɇş‘΁Ϙȝע€̤ȍθ^הй̜AɑɄɕÑ˓Ȕʹ౞LȚȜξƄ˘Qۚɶ̺ĵċȗƾʵӭ΍ʱࢯΧգȿġÓ̩ƫč࣫ʠͽ˽Ϸŝɰ٭D׋ǁЏէƥĒLJ"],["@@ƅ€ǦüŸĻ"],["@@ɂzDȵ˥ÎàŮ"],[],["@@těřlĦð"],["@@Ɨ׏ԛژƇδºцބ୊ҬȰ˰ʧѿຩ͝ҩ"]],"encodeOffsets":[[[113551,20472]],[[113035,21600]],[[115348,22160]],[[115498,22121]],[[121020,25085]],[[122697,26068]],[[124162,28761]],[[125232,30683]],[[124788,32249]],[[133660,43557]],[[116734,22744]],[[116752,23053]],[],[[121250,25111]],[[123913,23164]]]},"properties":{"name":"China","childNum":15}},{"geometry":{"type":"Polygon","coordinates":["@@ҒӁƗĊTĸÙÖCŶŖ͠ŖǬNʖ•ÈZÀÄą®°…òŷt…¸×¨C¤„lpT£gå“ʱ´i”ˤſĀӻ‹ÕoOwfY‰¯qķ÷ƛБɣףȔࢍǤģŽƗ»ɻ̑¦ŶŭȉٯưЧ×ӒKܥû͏Ôí¹ʲi܏ij്և{ȆÙƼՒ¯ʔƳÈÿXÑĴŽmցîÿ¨ʱ„ʧƠɜΰëЮkdžàW̓v„øƞUĚĮǰúýXێ†ZżN¢ʄnŊUîû˜@oɤșŦZnjŠŒľÂk†‘ŒáŒnȐȭäcВƐDŽˢɞɶñ̲ǓÈǘɐNp˜mĶLÆT´nnƞăȜƂºˋC}£ùFcĺ¹èMńĦX¢ª†ŴšŚNƤŁĶL"],"encodeOffsets":[[-5388,10568]]},"properties":{"name":"Côte d'Ivoire","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@ɯˉϽީʵȭƼƣ­ӭƘ֫˪ˉÄϩ޺ޗĶ՛ĽӿˉȨ۵Ĉ˗ƾઇ‹ÕĂඉžǯEgōț@ʱ@ڻ@ġžƒ|K„IlsNlȢńҐɵϬĀðĽWïƾƸ°ċĦ¤úǣT·ťΥƚçϴɏİIŽĭ²ƨЌʂܸатʒ˼”p®hƐIJĖÚr‹dŸjkô]ĶBNJƼ̊ʉàáÖȫ gìZƒêŲƎzNJàÀǢƒāž–ÖǨȴǼ׌ƞˀƮ|ΘŊŴrÌÎΖ®ļɨŚÒЈŨŔĸθƐɦNJɢöÒ܄ðHºh̜ȌºքčŮȷ¸óøķՎƲAǼ±͖ѧȠց©ؙĒϷŦʕ͈̋உwɡʍ̘Чڄիθ٧Íɛ"],"encodeOffsets":[[15852,7705]]},"properties":{"name":"Cameroon","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@͔ϵͼʛȢuʦƴмħȴȂǪsѤԕ˂ūàǯƞ@æőÌçŷ̯üǍį͡ϔƻÜȍહ਍Qˏǻͳşణ͉˧ÅЋɉǣdȡĶíǮ˩YٽLjԭBŸß˵CÁfëǚѡªŵZÓU«ėǃU¹vŭ†š¦ãĴȇöÙƎģŨĥĚĹĎƓĀɍ̂؝༓ʕyʥϿσǠϡ”ܷɗࡡČȵӦҋΠÍndžʌÔiઁȃDŽ̑űƿ|ʅόƭöśˌ۵ʔΑծ˭͕ڡÚ֩ɢ»ΊމǣWʌͱɒÅģÉ̳œ͙ijɗPɇrÙ}ýÕߏ‰J«ÔmʖĔŜğմ͓Ӓþٴċବ¯pҽjɻFʫH¥„m¾B¾ÀƾQ^ĝJʕlj{ĹU̇Ɓ™ŕGljĝƵC©{ɓǓ‡Ǖ@͍ÆүƟ̫dÁQԁۼÅ˖ęƊÏżϢƇǖėÈĭ†ዱRՍMƋPؙŧȩȰɬƒծ¨ˆÒ’nfȞȮIJ”Ġœ``^„¤CɺȝȶĮ¶ɢȊ}ΖƼüųëŕœȷʠ¥ંबȒآCܒ˚˴˶Ԫܼ֪ˎᓀΚފĴҮ_ܲЌҜδȤʲΜɓ˨̯༪˝ϊӶҬ»ݸˤضuϮ̂ઠȿɀŚ˦ù"],"encodeOffsets":[[28061,5232]]},"properties":{"name":"Dem. Rep. Congo","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@ijҭΙމˍᒿܻ֩˵ԩ˙˳Dܑȑءઁफʟ¦›ȸìŖûŴΕƻȉ~µɡȵĭɹȞ£D]ƒq`ÝÊ÷Ĝƒ`̅ƃНΕȫςխղĖȎɨƞƴƋnjb°̆ǿޜǎȇŬÊдϬÏ͐ê]ʹƄĒǠėǖ͋ЊçɦɎź˝ĚsǦ؋ŘȆ˞øૈԩ̶øҶ̾ɪĚɸȽЀˣ¢Փƛ™Ғĸ̼ઈŒ˘ƽ۶ćˊȧľԀʈҾŤ֤݌ƴ֚ƿ˂ļŖŧ"],"encodeOffsets":[[19057,3562]]},"properties":{"name":"Congo","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@՛ǏʑЁχ̣Ư˿ŗם̟ԃʶÆɘųŌЙɴ˹çٙɞŹǜ˳݆͢ĔԜŗמۣߤ„ԨŐ̈́ğPȿ̍և}ٙnjե̎ϕҡԹȬ@΄͹ˬকǥ‹ѦɿΎ̱҇ɏȨ¿šäĿඟWGձҒQƆ͡ˍÒӧŵa׽ξ̵Ƞֻɧఇɹಃe‡ǛƼÕƘµŽ“~ͩ‚՜़Ëfㄥ°ɿŒÓZµÂǫľ­X·gñgéÉǙkƋĢNjÒ¥[Žû©ȟ×؇N£°Ƒ¾•ϔʥŚƗώǕªÃÒ¹xÉÎрÅx‹–§Þéɪ¡À£¢“’½¼Ù†ÁŒs®iœ˱Ųū³Яǒг̌ȉǟݵƄÑȰȡǜГŌ֭ЦƓƘȞȎǺÙ]ӪƦń̌tɆǨئ৔ƽi]ƒãħ§ʬĥ‡ƘƼÈ˘ñԐƉǴʈȲȁͮĎͰҁպŜЂȊŏ˾΀ʁѶĔƈѮӋÓįŚ•^͊ůɚզΒɀ͚̈́î“ɼŢЎƛ¿ɚϾԐоќħƻőĬćɐҲۤsࢎԀŞʦΞȚϞíŀʏƵƹ"],"encodeOffsets":[[-73031,12147]]},"properties":{"name":"Colombia","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@нǏtĆƂ»"],["@@|ɳʇƼɌø"],["@@ȧŲÔ̈́Ā…ÔЯ"]],"encodeOffsets":[[[44840,-12602]],[[45544,-12371]],[[44509,-12186]]]},"properties":{"name":"Comoros","childNum":3}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ŏk±ŪƖlƍ"],["@@yƾú±¿ŋ"],["@@»ûǛœ—̰ʰˏ"],["@@ȌÉcŁȽD–Lj"],["@@°§ǭxãęÙłʼH"],["@@ý–¢ŠœƵ"],["@@ǥ^Ƃø¤ĕ"],["@@śU{žʬî°åǃů"]],"encodeOffsets":[[[-24891,15213]],[[-23738,15501]],[[-24006,15369]],[[-23467,16627]],[[-24665,17022]],[[-23437,17059]],[[-25484,17222]],[[-25773,17354]]]},"properties":{"name":"Cape Verde","childNum":8}},{"geometry":{"type":"Polygon","coordinates":["@@ʜԑӌթǸýIecgµƒƁð—i_¹{}‰W]i@͛¸GĊŖZ‡ǃƧ¾ėVũa‰ƓĭŰɡȳʂȢʵIJƮʧɃ’DžƚĶDŽĻ̄܁Θő˦ѩ˾Aœ̎ʉDžǿȧǬʹüȍ͞ƶϞȫźƎƐƈń֦ȳɴĎ׸ʻǦ¨ÒŎ"],"encodeOffsets":[[-85649,11180]]},"properties":{"name":"Costa Rica","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ͭŋȋŸǰAğǘúŶɸ«Ÿˋ"],["@@ȽŘʈ…‰đ"],["@@ƋؖĆĶƝ"],["@@ӚKİďж¢ʈƅҜ³ҚЕӸ“ࢤӍŞQïĎðc̔ȑȅĨŇźĘȚɑ२ȁńĭŅɽۼÁ̴ɡ̄û\\Ľ߳ɡ‡ĚśīܱĆಳœԤҬŁȤݗIJ̽ʖȥҎՉMܻʌɉɂҥ¥űǎċƃӃĔȓƤ̰ĠŅƨݱbաϹѫ«ʼnȑЅƕBż͕ÕҼǾ…ʮˆʎڎʨஜǐ"]],"encodeOffsets":[[[-84543,22090]],[[-79533,22479]],[[-79748,22659]],[[-83801,23719]]]},"properties":{"name":"Cuba","childNum":4}},{"geometry":{"type":"Polygon","coordinates":["@@ȳèƍȨ΂ˏ"],"encodeOffsets":[[-70401,12350]]},"properties":{"name":"Curaçao","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ɚ™ʡuˆÐ"],["@@çSƎ°å›"]],"encodeOffsets":[[[-83322,19814]],[[-81739,20186]]]},"properties":{"name":"Cayman Is.","childNum":2}},{"geometry":{"type":"Polygon","coordinates":["@@ѹÃýƌϵÙǧìƖRÀǮ֔‰ߖʶԩ̳Àȑ"],"encodeOffsets":[[34821,35907]]},"properties":{"name":"N. Cyprus","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@Ǩë϶ÚþƋѺĞÛ̍eׇͳҹƆōȌ_ňΊö"],"encodeOffsets":[[33498,36016]]},"properties":{"name":"Cyprus","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@òFòrVņ࡜ͷɲšŚçǫųήˑ̎Ŕğdž҈ơʌ¬ÙDžȺŧźÂ҆ſɪ̱֟ɇÙlj˝ƩԻŸƵȯ΅ǔУ•ࠫȲ́ͯաFȟƒ›¤í¼řêęG‘nП̒ȡìʓ˚ĺŚ΍θŠ@m´™žÁzrȴǀϼĈƒhী͜£ŜȎ™^ˆ‰zGS·šoÆc˜F€rXb"],"encodeOffsets":[[15165,52080]]},"properties":{"name":"Czech Rep.","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ɭ‘ćȼ̶ǩ"],["@@CďѣœŬ̸˒řªƩ"],["@@ʂŵŹǝܨſʀÂIǕǓęĚáМ§װȊϸʤϠ³ΚɧɶXŢʥͦϐƣĮɭCÉCc•ýÙáŻÿU¯ŀăɖŗĘį¥ć_Ñh–‰ÄyÔƗųȽŘǣyé^iƲ»~yx˷ñēŗIYWaq—EÅd™pT¸yH‡Š]ȍš¤śি͛ƑgϻćȳƿyqÂ±š‘n‰@SQ@…ǤōǾɑĹřʔ˙ȢëР̑’mĚHŚé£WgIŁY…ʣK]SYM¥Ɲñ¿ě{ϣǏnjǻ±ƗƀÉKÙaÑc}Cõ~ϊulCv`bs‚í~Џ¤YQN¿cw॥ȏ½JñÔo~DhŋHépƧK—T‰ő‡©ƻñdîœ|A~Itur¿‚ō ùpȋ©ߛɄŗ›—TsŽUĎN^MH[W[åWqa۳GBӄѦۈֹƮ׷R͡ʖŤ̄ʁİǸy¼NðȌ˦̇ʤ°żDžŀɮİÌʬȿ̒ܐƒÛĨʾʦʋìź˔„ƒՎĻǐǰǠ؊TČȉŘmôƊƌDZļИӲeӠʩЅʰ͡Ě[ʞɿþ˜Ĩɿξ࣎ß"],["@@ŦɦÓŽɀOˑė"]],"encodeOffsets":[[[14539,55214]],[[14039,55688]],[[9974,56142]],[[8508,56102]]]},"properties":{"name":"Germany","childNum":4}},{"geometry":{"type":"Polygon","coordinates":["@@˕п̩æٓčKצӰپ~z”v|OȌŏ–¸Ŭ’®dAĺ”ĤžȤ˻xɳثѿıX¾ÙϬüǠõ"],"encodeOffsets":[[44284,11776]]},"properties":{"name":"Djibouti","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@ÿké΀ƴęIɹ"],"encodeOffsets":[[-62752,15615]]},"properties":{"name":"Dominica","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@͆ívŅʷ§ΟŨpƘʬ£"],["@@α§žŲɴĉ"],["@@ɉhsƎɾƵ"],["@@ĥĎˢʰǻͽ"],["@@͹äæǎ̰ŵ›Ļ"],["@@ŠЏ˽íϡĬŅ̐چĂ"],["@@ĩ‘¢ľÈë"],["@@̓ˋǖƯ˕ĉ‘̻ǁ•ǩΐ̯dʵѢ̀€ʰǢNJɑ ɪ̒Ŵ̠¯Sɻ"],["@@ƭTʨ¼ĹÏ"],["@@࣍à¯ўНƴ€ࡎѐģǼȪƮ¸Ŋû¶ʼɗHȃʓʭ»ƹǀˮɒۄÂѼ΀ծƀ˝भզƫơǛι{ŕ̇ɻkĶçεɣäȑǽȏɺÑPţ"]],"encodeOffsets":[[[11635,56210]],[[12851,56285]],[[10303,56204]],[[10992,56065]],[[15450,56343]],[[10901,56945]],[[12970,56931]],[[12871,57124]],[[11318,58627]],[[9974,56142]]]},"properties":{"name":"Denmark","childNum":10,"cp":[10.2768332,56.1773879]}},{"geometry":{"type":"Polygon","coordinates":["@@ċøˆǜǜk~ĤŊ״ÆٖɳȦ„Ǽ̹юw̻Åcõ߂dz̄ʗ̇ͫȻNJ˷‚зH׫ȏƑĴ͏ÁΉՙljŜŗɠHƐxÊsÐġÚÉĄ»ð\\XĶHļĴbÐM¬ÕŌƈǬ"],"encodeOffsets":[[-73366,19657]]},"properties":{"name":"Dominican Rep.","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@Ţŵ׳CɃšē†ăçij‡ėȵؙչj̥˾ҝȢįȄїװЃĮϛÂȻʜ१ǫĩж޿ĢୡƗϣŖי͡ʟ™ɡҬ؟ɊحŠėʒÆےȥϰڝ␣ᕧ൩୧ഝ˯ܹſȣĮŖʶĿτ௏Ѻ×ƪϏɚiʆ᣽ၮ᜿༸ἡኒ@̸@Ȳpیত֤¸„ʈǎʊcĎeĶ]ŒTÞæ”ƊЎVҲŀžĒĨĜDzʤDŽòɀÖǦÖƤĢѮLjǧǔG˄ÎƬÊTĄYƒd΢Ŋ|’´Ƙʂ೶^ĦʺªźÝ´ĝȱzćæ»þ‘ǒŇȶĭஶ˯Ȃ¹¸yØҞâ਺֮͆{̢ˤֆʀഺƂ͊ƸڲĤࠖ@ҌȻৈπφƓʾ¤…ľצȣ֔ærēͥ˃"],"encodeOffsets":[[8405,37396]]},"properties":{"name":"Algeria","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@šm¤ȰŦîƠ³ȇȻ"],["@@ā”–à¬ij"],["@@Džn˒ǖŋȃ"],["@@ǩĄVĂɚĆÜƣšħ"],["@@ƹb‰Ɔƾ|†ǣ"],["@@ʙÂòĢǨƣ"],["@@ЈٷęǁȍáʍpÛŖ̀ʪȽɬ¹ɞƗtȢļøč"],["@@ç”üÈSě"],["@@˻_K‡Ò•УÈƇƒƳṬĉ]vw`YųӍѥԏӷί঳Ι͉ЫĕÚʫ܏ˁƧđ¥e³X¡I±_i…½—kġ‚åB¿|Ëô³ØĄ]Ō½»žÕYïQ¡~ı²čÀـ·]ăė÷Ÿ“D¯€SŠœ¸úńčF‡’Iža¦jº¬€ŒuŠ´ŠrŒf¥ˢåǂ̤ȘȞӢĥіéЗĕQpǠɹ̑խπƠˬţܚ̊ȘĊɚƢ‡ǗɄμѲ•ՈূΠ’Ⱦ֮ХДŋȢǛÒȯݶƃȊǠд̋аǑ"]],"encodeOffsets":[[[-82054,-3044]],[[-92594,-1372]],[[-91564,-932]],[[-92502,-790]],[[-93620,-471]],[[-92747,-342]],[[-93462,26]],[[-80803,1283]],[[-77091,-109]]]},"properties":{"name":"Ecuador","childNum":9}},{"geometry":{"type":"Polygon","coordinates":["@@քนƕǥ˱੉ƯɃϭʄљѪֳ஀ǥ˿Ҏࣅղ֕DʓʦΟĢ҉ਠᆣӸҋȱc‰šnj۩҂ˉբՍ⮿AªŸï°ŝǙƗOᢱBᢳ@@᳾@ᴀɵࡦɐВĝրʢːȚšіĜଖȱʖƑࠎƋҴȁܞͬʖ€ƢǘѺĠ̡ųςžæŠψŧ̬êȺǙȳŢķDž˦ǗưĜÅþ͘ȋࣂ¾ҀNJ¢ĩ"],"encodeOffsets":[[35068,31958]]},"properties":{"name":"Egypt","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ɐĭΣ„wêļgŋÌbŨƺNj"],["@@„ąħ´ä’"],["@@ijňԉˎ׃Ę˫µ¿Ē½ ¥@y•ƷĕʵµÕHǭȆǿò·Ö¹–ÁťĥɁ¹œßƣqIZȿʠțƳdz˜ŏOŗ£eCʎkNJoǠkNJŞȖ̈޺sˠúƨEÈhż\\ŽªDĞgȮj– ¶ưŒˆȢŔЄł\\‚nj¶žv†¤ĚǀƴΦޛɞএФڟà̄˺ϥࠆͥКՙӲͩż̿ľRɰ̙Ƣ³~üêنĭģĹ“cB‘«·ūÁ—ȋŐ{P“u}yõĔÃüùĠƵĤûŦāƄͷˆΣО"]],"encodeOffsets":[[[41105,16073]],[[41039,16469]],[[41922,14319]]]},"properties":{"name":"Eritrea","childNum":3}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ąƏƧĬɮ¤"],["@@‰˯ɯwĉǰłƆʂM"],["@@ŝĄÈðżýåõ"],["@@ëȓȩŧȻ˨ڂȤǯǏ"],["@@ŕħƅœɔĬȔЬŬ€ÑПɥë"],["@@ƓɞÒðǞĵěȗ"],["@@ť—ŠŨ̢Ȋ]ȗȧā"],["@@ǁA~ĆƄă"],["@@ȅ]ŀƪǺ’ºçƭĵ"],["@@ˈý͛ͫɭìċƂǛÃʼnĀڐͰ[Ư"],["@@ΩĮ[Ė̼}ÊDž"],["@@͒Ɨ¥ƿƈ¤׶ʩ৾ğÆžؚȽ[¡†ģîJƠ¾żÌĖÕমàŠХȱƩޟЕࢥȍˋȩƪčʛěޡँĺϧ΀ʭ؇ωʙҟĀśԙÏˁƣЃԡ቉·ʵDZйéǃʍɝğΑƌ˿ϘƖɶƭçϽϔҕċҤФϮůMȥɶ̄ԊҍԘΘjŤĮâȊŗŪȈƨı֔׺ѮˣŠÛɨѹɍŭؽkħ˚ѕǑġƐǒƚĿXðłçȔȃĘǢʵƮ´ǔްɞOŠɄĬтœϊƻ৸ú૖ȕޘĔҺŭƜêҎŃҘä"]],"encodeOffsets":[[[-18317,28478]],[[-15770,28823]],[[-17597,28695]],[[-16726,29062]],[[-14537,28846]],[[-18262,29178]],[[-14045,29606]],[[1633,39601]],[[1480,39853]],[[3221,40746]],[[4397,40799]],[[-1837,44450]]]},"properties":{"name":"Spain","childNum":12,"cp":[-2.9366964,40.3438963]}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@צƝӿȁ̝[̿ʉLjȊʱĜgȢيľ"],["@@ȟĠȊUVĉ"],["@@͋ŗōƤ̕äӾŦɖą\\Ə"],["@@Ŝğ׻ӱÌӇɶ̍ȣÑţŏ¡ś͕æηßȟÐ՛ˎ͗öƋ®շŽă•‘JǦОΏó̅ĂɑʢƠňȽŐÀɴӶĄʠƲࣂ¤ÆIJ௺ǁࢌ„"]],"encodeOffsets":[[[23161,60029]],[[23904,59956]],[[23474,60239]],[[28685,60912]]]},"properties":{"name":"Estonia","childNum":4}},{"geometry":{"type":"Polygon","coordinates":["@@ÖGʶ¶ƸĖz–¦@¾ŸÀđˬ¶ׄėԊˍĴŇΤН͸˅ĂƃüťƶģúğÄûöēӯٽLץٔĎ̪åɟͱƺͭ˸˓ʪст̵ᠴ࡙ࡀ@ᢋᣭߝͽăϩǯɥˏ۩ƻĝę­ūBɋ_ğcŵCǙĨɋǺޡΟ©ąŏƩƍķݗŦſJȏ\\ś~޳ԘȽƂݑ´ɑ˸MŤnžl¨±ǀΙj½ @žHˆʅ̬ɯڬիӆƉʄݻ͠ʂҌ֢NĴĐJޔȞؖ„ϾȒȆǘőƈIJƲߞҸڴϤŒͰాfDؤŐPǴ—ȜƴɀʟYrJÞƤ¼ŔĤɂÄŦº•¸ÕȀñǮȅ"],"encodeOffsets":[[39354,14775]]},"properties":{"name":"Ethiopia","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ȬɯřʃĸĈì"],["@@ų¥ÙŠȎù"],["@@ǖ™ƋƛłŒ‰"],["@@ɫªͦZĹÃ"],["@@ҩı̞Áʩ̏ǶʣֆŅզͥޟٵࢌও͗ďĝ́ȀēȇƩЀǟ˓ЈȱSƭљʉৄѵ̒˕̅ͻహ޹ལࡓਖ਼ĽˆDzljǙΟ¦äŏɷ×ďÈ৯ʿࠛ‡ωƛƬǦʋǀƋŷʋyĺ̐९ǺƜ࠶̋ͰĥـюʦėƒٲĘǴ˴ࣈؘٖͤ߬¸ºԴ֡LjŸǂЇ­ϣϔʎҸ̇ˌþʚɻŒƺдڇΎܙźିѠόJ@ƢѸºۊҭގÑѾƂࣴdzڴͬ˘מϠȊԐQԶƄ୨ͥLjǕХʝĶŽ"]],"encodeOffsets":[[[22708,61820]],[[21966,61983]],[[21727,64760]],[[25445,66551]],[[29662,70679]]]},"properties":{"name":"Finland","childNum":5}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ѻŭ͂ǀź‘"],["@@ăÒ¬ò˜ƃ"],["@@ʾɽÜέױƷՑƾµǶȬ˘˂Ŷϲb"],["@@đAĒƮ@ƫ"],["@@s@²@ê@ŞĈĩȥ"],["@@ϋĊĞyÑ"],["@@λϿHġ̦ȔCȍё½ǻĀǏƿʧÛǫǂðƔȆSغ͎ϔĆ@_"]],"encodeOffsets":[[[182772,-19429]],[[183654,-18536]],[[182559,-17788]],[[184320,-17370]],[[-184294,-17331]],[[-184247,-16898]],[[184320,-16556]]]},"properties":{"name":"Fiji","childNum":7}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ŤQÑŷǓĜł®"],["@@ݲĒĴÉչҕ˙cęŹ˩¡ɳŌ؈ʈ˿º˲Ö˕ʀʂĕ"],["@@ƍĬǤw•ó"],["@@Τ¯éƅȦùZƂʄ„ƘőŷÅƚ«ݡʥ~ƍҗæņŽɯm¯ĥɅƤàǬјȬ‹njȸȆ"]],"encodeOffsets":[[[-62483,-53028]],[[-61733,-52697]],[[-61554,-52629]],[[-60262,-52500]]]},"properties":{"name":"Falkland Is.","childNum":4}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ιÆʼnǺàż̎EƬș•Ǜ"],["@@ġænȲŌċ—ȋ"],["@@֥݇ɋչˏˉܩŦ̥ȟʫò率¢•jqZXRŠN„B¦ÖìœŪɄ¼ĖtƨƒŨ`”ŀƤ®ĄsƲˇΦŇڂҼ޶ࡪ˿ԞН…ƝĖüƌũ²̫ƦʄƦӗ"],["@@ȥw¬ŔǝȸʊýĎɕ"],["@@ãJ¼Ĥhĭ"],["@@ƛ°Xʘǐë‹ɛ"],["@@ǍC¨ɺʤȿŽu"],["@@Ð֧̩س͇ǠäĦɟȘâƐœɚȾɀмʦʮİDZ"],["@@‡ñƥȞǮū"],["@@†ƒÞ_zY~mªQÀRž~¾\\Ǝ͢ʕ׸QֺƭѥۇAӃɭƅǧ´Ɨ‰É¹Č¯@akiw‡ŋēŏėk•mƗ±cƣʹǩWijkƗŁÅBÁˆQäJĨžˆŞò¾ĜŠŲNưk\\ȿŀĩ´…¦·dƒȗƹ̘̟ÉšϋƟ̜ȫýЯΚǓˌvŧͭޡӋϡŁ׫ž̅Ǽ̇ÑکDŽյ̵ǧɷƆПভßĕÖË€ŻžHĎš€ÇP՟ؙȾÅŽ৽Ġ׵ʪƇ£¦ǀ͑ƘʺƀȪ࠸ƚŊÛØýćƒܮ҂ҁȯϾͽȸƐvĩӐ՟Ǣɭʜ’ȒƫŀƚĤʈµțĂѹBÜƆ˽˜cĤ౱ǔ̯Ǽ̌ŌȹĴˮ\\Бº—ôȚƚદȆҐʯȸĤϊÅĈĪѼ™ǃŸcͮɭКԈGĶʕࠌûӤŸʋº¶ǎࢸʞ̆ɈäՐܒDzȠ̅̈|ƔȻ˔¯ĀƝТ¹sɳͬUɰNJ¤̩՞ɷʂx"]],"encodeOffsets":[[[57137,-21851]],[[46265,-13288]],[[-52892,4159]],[[-62286,14843]],[[-62700,16272]],[[-63067,16392]],[[-62799,16620]],[[9708,43833]],[[-1206,47006]],[[5929,50728]]]},"properties":{"name":"France","childNum":10,"cp":[2.8719426,46.8222422]}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ÐýəzNJÄ"],["@@qœƹvĬƗϓˬҔµ"],["@@ś«SŴŰć"]],"encodeOffsets":[[[-7359,63631]],[[-6790,63722]],[[-6559,63753]]]},"properties":{"name":"Faeroe Is.","childNum":3}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ōY£ŦƈLjŗ"],["@@ÛåĴƤ—ý"]],"encodeOffsets":[[[162115,6978]],[[141459,9729]]]},"properties":{"name":"Micronesia","childNum":2}},{"geometry":{"type":"Polygon","coordinates":["@@ķ̻šґՔƜˤ¡ȾϿęɷ̽ɩ÷ҵԪ̵÷ેȅ˝ŒŗǥŗętŹ˞ɥɍЉèǕ͌ǟĘƃđ^ͳ͏éϫÐÉгȈū›ǍȀš¯̅NjaƳƌɧƝĕȍڃݺԿҞ˸éοƸ˙϶ƸPǽÐȓѠʂ˕ƶÞǥ’¨džţµśì̥רȴć̌˴¸׎ĨƷˠīǤŴϣĐȅɌƞĦĺówϤž^’zzJ²Iz£`wĒமEѼG՜hŎǰFඊÖā"],"encodeOffsets":[[13613,2214]]},"properties":{"name":"Gabon","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ƻďʽàɀĜȺë"],["@@Ů_˗ƟǍɄɆ€IJă"],["@@γ{̛̈ˉɯʁVїɪ̪ƲſĔ̢Î˨˘زŰτăˌ˝ƉƩʞnĦƍǛ¤Äɵ΋ȅǗŒ"],["@@ȏ‚\\ȔǴɕ"],["@@ÖȡȿófƔǣÙ|Ģˬĺ"],["@@ďà̆Ȏȵʭ"],["@@҇§ƤǔŭĸƸ†˼Žaū"],["@@ƉɠŦSdɋ"],["@@TLJϴ½ɵǧïƀʍBρȪϤȘƊƕ"],["@@pű˩Ìʺæ"],["@@̗ɩňÓҵɫčÄȐĠȓɒ̠N§ĦҐǜś"],["@@đǍٷ̣ěƮƒɷȭؚŌૢKʘȓڽދ׽ǕΦ†ǰŧֿȍΩÊجťϘÚϞĽЮ˧Τܯ८ӯķă˒΍͕ņ͝Y̮ӄ̙îƧʻɇȠąɼƄиOԐǥøʅŽ̝̋ů™ƗνÕŜƃϻęࠬđaƱοɋ։ų࣭UՋŎèÛƵÕћmIĹߵĨͽëɳͣѝź҃đ͟ɃчX஺ड़ࢪ`נҊܡ̍ԇǜ˿mŦúʛæџĩɡĪ]ǬߺˠȦɜķ̾ӧğΒ˴ۺǒˤã‚Ɩˆį˅ǠȀԺˍMͻ˶ĘʲάưћI΁ƕܡÆÿſķÒŝȌиѠǏ̺ʌÆɓĦšĜΫɭŦʾ˛ǝũԙƥ¯ȐϾėɆΠנϷȏЗƦ͸Ŭŋ¦ʦˤțŪǴƘƍĺŘǴϜ@ɍǂÚƚˤpQʰӬ­তŘǦ]³ĵ"],["@@ɜĻҍÄlƆɆč"],["@@ɌýȹӇRɴ̻ňʐ¦ǓƌǪĬ²Ó"]],"encodeOffsets":[[[-1091,51907]],[[-4297,54602]],[[-6367,55387]],[[-5227,56780]],[[-6275,57273]],[[-6113,57155]],[[-5916,57697]],[[-7423,58487]],[[-6292,58886]],[[-7378,59068]],[[-6347,59765]],[[-3184,59920]],[[-3130,60447]],[[-1339,61991]]]},"properties":{"name":"United Kingdom","childNum":14,"cp":[-2.5830348,54.4598409]}},{"geometry":{"type":"Polygon","coordinates":["@@˂Ə®³S“‰ïûÑēẂĜڱɠÁuǹŏsYƑe؝Ýէuȑ˜«ŽWz~nmhûžųĪít…Òƒ^ÓNÙMaOoWčijғ²ďÁ™Rß~ĿvÇhLjǂ¾ɞɱׄշͺ̽êПɰžÆ¼Ìӂgʚīޙɲ“ǵͳর¥ȚßR•ö»Ѐŧĉƈ½`eEs›U“lmÆmŎI zĊlȐòƨœɠōâŊjTÔuň‰öeƶũȂLŤ‹loýȫH}ӘǷǾĉȷǃĸǍ"],"encodeOffsets":[[47417,42504]]},"properties":{"name":"Georgia","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@àāă̇ϼ͍ĭիà“ğşʘËҡĭû˂ͻƽڷŔljĝхǰͯϚ̧ȥɻׅ«ቕ࠵थ˜ʢļɼƘǣĤȓࢎɤפƜВĸø°rZŠeŽPxÖp‚ŒÿӼ£ƀ“̳j”ʲTŊU¬¹ľ]ôU־Ļƈî΀ຌXΒéˠȪȘ§"],"encodeOffsets":[[-70,11383]]},"properties":{"name":"Ghana","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@ħǥǔƷ̺džȊʳκ˂ѪƵͬȎ‹Ǭ̐¿ȎЕGȽ΢ʳɣ̛ˢeÐщɔƏbƅƏǃdБȮãmȏ⋐‹n…ĽÁ‰‹YNjȚťpɣŅüʼnVʃmO¡Wݐ…܍þWŽùĭǯVě÷ƛuƒǕœ³™ơŊȗΧȑ̃ǘĀʎůդɛLjʁěéøï§GÛV…]đij½ŇLs\\ˆÆƪʌī̸ģng\\Ex¾ŜJzÙĄʏͶőŜq¬Ëf՗GșįʉnʼnNjǕ˥ǝġijNjǷiť̸ɉĬBͤʼn“ȍɈ͍ĜƵʪbǼëßĉȰģŒóƑۀPƚª°äƒˬºÜŒvàFŸœŀÖÀ~ŤOƚZȄÒDȊM¦ßœŏľ¾Ìń`òǺ¹ĬHæլ“lťŊ˜҂ljࡔÄ"],"encodeOffsets":[[-11662,12703]]},"properties":{"name":"Guinea","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@½ɸžŒɌǣࠤǖשiǻĕǭȴࢬAèŠˎîמʷή’ŴŕΛƟݻːŕƇѷÑiƗۃEĩ÷"],"encodeOffsets":[[-17165,13378]]},"properties":{"name":"Gambia","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ËovŒ–ġ"],["@@ŰƜê¡ř"],["@@ķX¸ĸÀŏ"],["@@©ĻĩİƔL"],["@@Ń_½ËǰƙN¥CȉȃÑʽI¿}ĿÕŷ›ßE‹u·ÛƓ˫­á›«§Ò’ŌƗģLŀƩ¾ŽƮĽ^΀ǀƁöƵÓõĠ†Ĵ͜łܧƵlŶǽiǃŒêƼljɱŴ°TŖaĖhƦÚĈ^ʰgɞ¬͈DŽ܆GʆA˰AGåºīñǹ"]],"encodeOffsets":[[[-16277,11349]],[[-16501,11325]],[[-16283,11741]],[[-16370,12168]],[[-14090,12557]]]},"properties":{"name":"Guinea-Bissau","childNum":5}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@Fѻ஭đŽ_xy¤±JyI‘y›]Pnõ¼ĽrΞڎwŠlȤtMT¯†{Ġڼ@ʲ@Ȝ@H՛"],["@@Ƥ@Šŋȯ͹ȓ”UƼɬʶ"]],"encodeOffsets":[[[11605,1566]],[[8946,3849]]]},"properties":{"name":"Eq. Guinea","childNum":2}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@˄ºµċȶŕୂW¾ȍѺNJŻʝଫíûžȵÒܷĆmɸĒiÄŢĬĵ"],["@@ėŐŸȈŸ̗"],["@@ť€’ƎĔǍ"],["@@ŅzBǶѠɚŧ̳ȳŕ"],["@@ĥ…ŽĬØå"],["@@DžČúú«"],["@@ɠƠŘ}ͷš"],["@@īA˒Ĩǥĥ"],["@@ċ]ŤŎŅ"],["@@ơ…ňΚã"],["@@õāŢƎłjȕ"],["@@ĉN¸à’í"],["@@÷ÐŴe»©"],["@@´Ęɞˑŧ"],["@@ċ¯ƇŎɔÝ"],["@@É£úžoę"],["@@ȘďǭÃɛâȲò"],["@@Ęąƥ™ǗdžÔØǒĽ"],["@@{ÇəɦɎ³ˆũ"],["@@ŰʿȥŠÓńĉ­Ǯʜ¦û"],["@@ǝtČĠũȄ˄ƒÇ˓"],["@@ŏuŞɘMȡ"],["@@ői¯LjǂƝ"],["@@ĠũԒƏŰέˀą©ť˗ŚƟɮ͝¬̞͍ͯÎ͚ƊƂÕ"],["@@ƺɿęviď̡ĜƒİǙđȓĖ˒Ƥȶ™"],["@@NjzȧʲɾNãėȚȡ"],["@@åƥěðƿ•GŮ͊a"],["@@ɑ‚ĞŪŴƫ"],["@@޷ɤʽŗˇøͧȉˍpĔˡ̄ùŌƯίǰƻ{ȪǷiűʁɒȧ’ǜ˷ؗЎtLjʗă‹ϫآܣơ×Nƀȫ¤‡ŕƲŏлƛֺǥβʹʄݶœIϳѥ̜ϷſϠρ˟ęνǬμँϋ̆ʏˋ̇ҬĿÁɅʹ̀ĆʴүъɼʰɊkƔŸ࡬̡˲Ɣٗʲďç̕²бùšƒwħDžV˿Ь˾lNŒͽL΋ʔġȀûĄćÌlBŒWҋÚOƨŰA’ÏĞ@zxXœvr‚¢bǞªȊ̎ŲżÙŸRÚԤfªxŸ°ǶƲdžxʺ‘Ģlĸޏź̺SìÂŐH¼TĒYČB͂ÖlRp¶ˤEЀ~EɌǑȂRŞ£IJÓ֠ÌŦÌ†h¦Uò·ƶllĀdĶwɖī˜ǗʙƍBʅʗȑ"]],"encodeOffsets":[[[24425,36389]],[[27829,36317]],[[23608,37059]],[[28512,36792]],[[26095,37267]],[[27096,37464]],[[27597,37609]],[[26480,37674]],[[27669,37847]],[[25886,37959]],[[26159,37855]],[[25113,38017]],[[26013,38318]],[[26655,38431]],[[25863,38503]],[[24941,38479]],[[27469,38719]],[[21390,38713]],[[25592,38666]],[[21108,39305]],[[26721,39136]],[[21184,39536]],[[25267,39741]],[[23978,39894]],[[27045,40274]],[[20560,40380]],[[26049,40943]],[[25369,41590]],[[26664,41705]]]},"properties":{"name":"Greece","childNum":29}},{"geometry":{"type":"Polygon","coordinates":["@@@ƢЎĝǯ"],"encodeOffsets":[[-63196,12301]]},"properties":{"name":"Grenada","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ĩķ΁ĈӪƼ½Ƌ"],["@@ǧàLjĦ`Dž"],["@@ǁwŗǨȴNJΒÛ˫ʝ"],["@@ּřŪǝත̉ԕŮѲ¾ƓÚँƢŎȤϸOяLjϬƸࣚģӆɕ"],["@@ύ`ZĈδħ"],["@@~ɥۇǗ͗ČறÇΘΪ࠸ڬƘ͘Ĺ"],["@@Οò̼Ɯ¤ɍ"],["@@ҥȑխž৔Ô"],["@@Ԟ̷੹‡ƻˊܘö"],["@@х͚Ǡɰʦ։"],["@@ۓĘࢴ‹ȟË"],["@@ࢣėЏŎॾǠјušǟ"],["@@བྷɞѩʸܼˆచǯ¬ͭ"],["@@ↂʭ㇓Ƨ‘ď㞆ƨպʁ᝚ȱಇʹ㏱ƍʵę̀ī෢Ġᗆ¡ܘʧৄʾ๠´ĜϽབྷەᰦܦᆦȯ૮͈཈Œຶōࡈȍෑ̳૛ā§ȕቍǃۖūҩƧ೧áଝî؃ȷ঄۩ᅡѧԅߙܰǠ଺ljpŹ׍ľѧÑϘȿ޴ūܜŒÉЙဏŤॅțӏĚΣ÷ؚŋ͞ʩ୒«ԂϱcӝߩŒএʓӫĆҎŽ׬Ģľρώ˶ζ@זέçəݙAͫũ઩ĜX˒͇ɛƾʽ๤ţš̗໳ȉݕňޥ̮ѧƋۿɀؖ˹੩ɏ৩ƶؔƿࡩġǶÏኔˠަ\\ᄄЭɍڣ๳͈ҽҐၷ˓༂ƾƎˍϽȡϜøᗨ׉ѩ̣ÀœIJƸҠžȖߝܣÁ«ͮɇΡ՗\\եǘӹӖ૕̊ঢ়°gÿਫ਼«Čʟࠍțද–΀ćßǑࡃɇᏚfœęࠟțƪŏ̚Ǯ఼Ŷ༦ǵ୐[Cûعŏ_ĝۇ±łůҳEBūݥƭĆāԗɳڇǵᙡͅԳ\\ϗijͷ¸Ġő̱³ଉ͂Ǝϑ࠯̩࢕ࠅࠫͻ֭džȦʧؽʹŭƪśǻͭæ̅Ƿқo֨֞݅æͼĽ̛͙͉ĘˈʡခŽԄǹ̟ǕˇýۥªIJțʼ ЊλԋɏڣÜҦƫΎVÊͿȋLJɯg˷ϝϥPˣŜҒȣɱȡࢃaڐŵƙΓDzʝЍŝȨċ̵܍˝ȱ݅Ò׬ǡúˣǓŏՓĈʠƕȽ—ǭ`¨Ā̅Eǂ̐͛ɍ١ƼXƜͤîȀǨԽȁ֓ƞăƊɬψࡇ͵ળ¡ΊȔԭN•ƶгṷ́ˀûʦҪDŽڛåÐȠٟȬjȾъ˔ԅȇ࣡ېß̪ઌǪȏK¦Ė७ǭĻĐʮɒތȖМȷĥɎͩÀϋκȪ͹нƙ‡Ŋ֕ґ˱޾ɹƤޘ͔ѸÀՋ«۟ɗǭňοHþ͐ʉÒᆖ۪ົ֯х¿Ķє͊Ƭն°ࢳ˜υǰðʄॎ˦ႬȅҵƔǞĨڝÍӣĊଢ଼ʋӪք଺ų˖¸ȸʮࠧǕহǛ˂κĈࠚƣ֬ŰŚŒχ݃͜ڌ–ٻڈڰ࿳œ٥Ȳ࠭Ĵѡɺ̬ĶନÍྰ͕Ǭ¬օƞÈɞѣƂيQ̛İോ¾ĬɸऺǶඛýʜȔэҲɳ™ϘϿҕlj´Ǘ؍ùݽƼɺҶЎȶحƩ¯ĸ˺®ʳČ֪IJǀʨ˭Ťǹç͉Ú͊ˌۅȚɠǜ̶͗ࡋGѲĀUǮϲĈኻۜˈźɡƶᖟЀᄓǎҩœϵČࢿƽыĞӷċѷØˊȣఉø૭˨଴ɄಷîiɈޙƗѹǨɺŬཔj۾Ƹุĉʩʹ࠹Ɓ޷àؕœহȜΞŢঁyಝ͌̄ʎےŢᖂȞԮƲᒪŖࢄ۞ԨĊᖏmǧʶᒈԬژ¶׌Ɨŀˢ௾íӾ؆ಾ|ᖖѫᕭզ◴݆̂ƿĬѕ֚҄ᅈΩ଒p୧ϸݲö⪴׉ЮӴૉ͈ᶰÇюÎ♣ĠǤي፾ȸ෬ƍߌȚᇚ˫ӽ̺ࡶń㹪Ê"]],"encodeOffsets":[[[-47377,62241]],[[-37920,67105]],[[-52237,71222]],[[-53996,71624]],[[-52915,72556]],[[-26042,72624]],[[-54820,72746]],[[-56337,74539]],[[-18432,77218]],[[-19028,77868]],[[-73387,79182]],[[-18035,81742]],[[-45941,84054]],[[-30671,85571]]]},"properties":{"name":"Greenland","childNum":14}},{"geometry":{"type":"Polygon","coordinates":["@@˶DʔŁRƾ̮ȅ—…ÿáˍɉɷǩƳãáǧºǑQ¿īÝÛĩǯsvůс˳ŸƕїNJ٩¼ܛҲÜΘ^Žœtr ĥȺĖƦŀǪȄ̮ʬBϢ@ɶ@ƴ@ÚDYøTĊ‚ø@’­¤ĕz·–@°sȧÞɟƆη͚ǶAǠCHӂໞAÑྩ"],"encodeOffsets":[[-91374,16270]]},"properties":{"name":"Guatemala","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@ýƚȐƾƛǗʻ"],"encodeOffsets":[[148216,13578]]},"properties":{"name":"Guam","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@ĽdzĠŝķƧ͋{ǥƛÒŷǩӇ΂ש̀aĘѱвۇȆāУsËh¯ÎuRǗ§ā¯óœ›¡£mǛG߁ğg©Ņʱʑµ_¡ġ—KŻơG›ƒµ…M΅Ʀʯ˖ŋ CĄÓ‚_vB̼œöĕ˞Šݮʬ̄Mx¿ÀıǢłϗƲƄҤŵƀċhÿ·ĽWlj„÷gՓפ]‚ôĢà䯜€’oƞB¾}ÈmÚ¶ĚάÖ̮Ƞ~øG–g`ĵbµm»X¥²í˘ǤɸИȬ–Ğt~Į´d¶ƻȲۈЋׄ֩~̟ljխɒϮδÅϊϡˀŹ„Չ"],"encodeOffsets":[[-58567,5682]]},"properties":{"name":"Guyana","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@ȯŸǵǪӰŗʼnq"],"encodeOffsets":[[75477,-54412]]},"properties":{"name":"Heard I. and McDonald Is.","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@ݷȱĝxǷŲĽµ×ƛűɩѳϟgMƒOǓĸ³îʓɽ]țhĽWsaW¡PÁ„ȓhÿeyÁIå[›—ùǹ¥_ɹYŵ̾˙ž‚ĺÈʖazϤ÷Jĉ_ƇĞʡŗ…F]¨MºO^ԝ͢ȯœLjLjRÀ¹ǒâǨƴäɸǪˎɊĀ☆ĆyɎƮ౤ąΞƞ¥ÐфĽєøΐƿʤjиΕǩĪřw`ûƘMƖƣɚDůŬɶŇâƉĉ̥ɍ`Ĺĉč"],"encodeOffsets":[[-85642,15234]]},"properties":{"name":"Honduras","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ŘËͳøɜk"],["@@Ҍá˱mǙĐ"],["@@٦˱æŃ׋̪ٹǾԺı"],["@@ʛ`•ĎϊÓė™"],["@@Æ×ƕĤЋ"],["@@ƧȬhɞƀщ"],["@@̟ĒĶŪȪȻ"],["@@ÇąȌˏ¹īͪƿ˱Ù±ɣƝ\\ƣǎ܋@ݧǘ͙»ȥǧɝƲȫU©΍̮ȵǔͫࠊ֭̈́σÅËֵϢёŶ΃oڥոÁì̊`Ы˦ŁВʯǼȥ’ϝп˿ը̤­Ю®¶pŢŶpK¶áŦÿƊlƀ£ŌSĈvYˆ‡OŽÐäÝÖ̀ňpĺQÄͼI€b‚кǮǸŸĚUöq®]ƮËļÝτ˽иǥҨ‹ƨ˜€bĎĂȬr"]],"encodeOffsets":[[[18031,43796]],[[17051,44029]],[[18092,43927]],[[17189,44310]],[[15741,45030]],[[14836,45732]],[[15166,46057]],[[19360,47035]]]},"properties":{"name":"Croatia","childNum":8}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@cÏɋêǗƎЈƧ"],["@@ƇǫÖŋN«aÏĻijĵG[W¼ïÊăĢÙtÏșíâýÊĩ˜ۇÝёČ̥½řůӽ΄úƦƆŽூȑΎŞ|ĎϵͬĜ̴؟ʀȂƊӦdΖſ͖¡²ll}žǛ‡ǛČ÷"]],"encodeOffsets":[[[-74551,19229]],[[-73366,19657]]]},"properties":{"name":"Haiti","childNum":2}},{"geometry":{"type":"Polygon","coordinates":["@@ĺDˢɯƾqĜƍ݃χ݅ਇ̣‰ūħė„ȑƒqd£`ȑh÷_ȗpljėًſčāaƧ—ҧŒзǦσ˾ĽÞƫÌ­^ț̜DžL̢ŦUͦȞŖɉŜժ„äʤԬȣ߲dÊǴ۬Ȉ˚Û͐ŰƀȚ߲tˆǵ̪Ê"],"encodeOffsets":[[22663,49568]]},"properties":{"name":"Hungary","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ĹVhŘѴʌ ƧЁɑ"],["@@ƭ†ʚĠīť"],["@@ùŽŐľ•Ƌ"],["@@ٮө¢ãœƙɑóʙĂҙΨџÊŃǀ˲ŶլÈÐÕ"],["@@՟՗֯ǕţÞĤLjŃĤĶ̒˞ɰȸñƌȨВȺ^ġDzV£ŭŝoĜʣ"],["@@Ұ䞤č"],["@@õ•ĺŜŤwƧÍ"],["@@áJ¾ʴĢ÷ýȅ"],["@@ʗ“NJƈĴƒeï"],["@@ŃǧÔÅ̅u͏ŀȂ˜_ʶ˺Ȝˊōßɷ"],["@@ŝǝǿêʾȶ Ł"],["@@̹ʙ˕ŠȸǪí–͔úŲé"],["@@˧âȞŖĊǷ"],["@@ÅƺƤˆĝȁ"],["@@Ќæŭفõ¦ȜŪ–"],["@@ʞÑăíǟÆFú"],["@@्ʋȣìïďʗeСŐ՟±ďƈÈɺآƮۮ˱Ѭĺ̚ơѸ˘ÎèƉŠƄäøȇȉʃ"],["@@ñȶɒƀ˃ǁ"],["@@̴ŒĐőǴİǠ̷͑Éòć̓mċƴǃƓेɑɭþ Њˢƒ͸·ȪʇƎaɠŖΛɀ¹NJ̦xŀǏ"],["@@ɎɃҹω÷ɶωǎũDzЄiǺĸʚõ"],["@@ĿïĕȦǢatœ"],["@@ˡʃγÄȯĉƪ˒Ȩ—ͬŔLjă"],["@@£ĢĖc±ý"],["@@ȩŋիfδېǶńЌ¤Ȁʱϟӟ"],["@@DZDrˀъӔþëûÏg̟ʣ̻"],["@@șîƠZºć"],["@@ş¤ĈƘĩ"],["@@őFOĈŢč"],["@@׽ijͳŶŢƢǚhނNĊñȕŧ"],["@@Ɓfjüʲßƙ"],["@@ŋtŜúOĭ"],["@@ǵ΁ț`b̦ôXãɦΠɁ"],["@@ʘǩ֐Ï̈щ฼Ɓ΄ѰŚWǬɁ̠ҠȵϞƒĠʛŪé@ȻȀėРÇӖú˶ƅmԥǒ̫ૣОӗĹঙĔݹƀ૙ώғŒʏʼn҅ÖՏɄۡĔĈ˓ŀ߉þĬƞĨįƞˀŎZè˸ǦǞـƷȆǎ˞ē"],["@@“ƓSׄ¨ѯ"],["@@ŏPĔÞ|í"],["@@ٽ§ʲƪȳ"],["@@ӵɯʉɬŮ®”ƪřŀŖIȖʈƨɻ"],["@@åïʘ֜eɏNj˛"],["@@ɍƀɖ™Gĥ"],["@@™ă‘ĆìA"],["@@ȟƴĘƺņñBɻ"],["@@åıɿÊĨɀwʬ˪۸˅ūǡ€ŋ"],["@@`ɫşØé͝ǸǍǿÕſɟƕP·ƦưɺòӼȆȚĘƏ"],["@@¨­ʧǂɀœ"],["@@ƕĩęǔȲ‚~ī"],["@@Ɲ«ºļĤÏ"],["@@ʡą«ÒͺƸ«ƃ"],["@@‰Ɵ½ĈĈØ"],["@@ȳŝJҦǦǦ„ԭ"],["@@̮ʭFȯҙDžЅȀƃƸ‚ˆٮf"],["@@ťÔƘAqÑ"],["@@ՀĽdžšʒσ¯ʋ߯Ҁ˧C›ĿԕȀ̅ǵ͑ʔȗ˵qɲ˒̚ږŒƸĕʺŮɪã"],["@@’ũɕ˼KǜɌǹ{Ƴ"],["@@ŷȕǓŠȱϧʐĒ̖ƞŠ͆ƕÚŏéƗ"],["@@ǁáwʜǺǹ"],["@@ȣð‡Țɬˉ"],["@@lj̀ºĐŐЏ"],["@@ʶƒܑįûĆ՘®"],["@@ÆɽƛÛѕƲԬƨ"],["@@ȀMłƑݫŅóŬôǘҪ"],["@@சǧ֑āهʪ"],["@@ī•ƒĀŰ©"],["@@ːڛϠğǧˑ²Ʃ֙ȺdzզշŜ˜Ͼł¢ĬǡhǔDŽzŖƏ"],["@@ĩpžƮÌǝ"],["@@ӹÉƕŜɄɎь˟"],["@@tǽǔŸĦč‡ġȥVďƭmʾɕʃážĆɀʰV"],["@@ȹąZʖɤ­ƒš"],["@@ēD…Ŕƚ¯ç"],["@@˯ƘȍΌØȒɎbˬ֣ēų"],["@@ǿ¼ğʞ̠–ͯ"],["@@є×М̱ǯĵȽŠƙ̘č¹əȘ"],["@@ťh¬ŢúƉ"],["@@Ɖ–ŴÎVģ"],["@@băȏoǮĴ"],["@@@NjDᲗħͥĨƓBᇳࠉޢĪɮƳƫҥóŗǨ̝ɋǖմ˹˰ΰ¼˥°ȵǚɜàΧўţͨàĘƥŠŞŎɃ…uȴٿѨ։ń՛ʎڅäѡ̺xľưbԵOijŲơkʝ˴ƎΦş¡ɷœŸįХŷƍ˫JƇ̔ĬŸıɎٽьɔĞдğϺ̐ђƽ®ƤŶºħĈŊLj߫Ɲս~ʅɄýβ՗ƖʡǐɒÈʺҠŸӸ̈ϴ½ԬʷфeŚđ‘Żǀ̣Ź̝öӳɞѯpɀŨžØͫŢršʧ̪ƅȢp̺̌Ҁ؈ִƘČâ¡ƺֶ̞သܫ۪ćŀƉȎE"],["@@ĮōȑljėǐǼň"],["@@ĬűÝšɴǗij×řİƉ‘LƎƗŤrƒŌÑĤô"],["@@ʼnqNȮƐK“ǯ"],["@@ɳSôŌǀķ"],["@@϶ũÀş˫Ï͏ɲɶɏůċ½ŮśÏˁƂłŘϚÌ"],["@@űAİʲĕȎȆɍíɯ"],["@@ȐęҷĀĄǨȤǍ"],["@@ũP¢ŴĈƃ"],["@@ҋĢ`Țиȕtĥ"],["@@ĝpľší"],["@@ϷƶpĘɲùƖǓ"],["@@Ĭ]×ƧőèþĞ"],["@@ÞƕñǽŗȀƿ‡ĢƔȊˆ"],["@@ŭðo˒ƾƍ_ȳ"],["@@ϚЭģ·ŗ‚ãȦǕĨ˛ДɶĪł×"],["@@PŇЍɸϾů"],["@@ϱѳ֣ƑЧlɥƖဝ©ιð͗ɓƭϵ¦̟ƬˁɶƝŴˣК~ΪіͦĕʼƨԠD¹Ć˼ôǪß°Ň³ȏЋĔշջ͡řǩǝʝb޾ࡻĜʗūΛπϵƄhr˝ŷªԗǙÝʕϗÖďƮŌШ؍Ӓƌ̔CΔơĘȍkͣʁƨُaއšѹŶϏГ\\ȟĭƇêǓʠȠڔ|ШſѬЇqŃŞë֪ʸȨȖҬYѬǘфǠȎŐƱĹٰŦň³ǖĖǦ̚Ѷ˨įɠͰǶÚ˔ëǀƧ܄¥ͶơȔĆܪûԒ͌ΎψƐ\\ļƷ́э"],["@@Vʏǿ³ùʐʤ´"],["@@Ű_ðǮnjĬ¾ȲϺƠ^ϻ͹ȕţ̎Ʒʐ˫ޕɌăƣúҟϔէ͇ǀ̕϶bѼƝ˖ÐȦƯʖǠנ;̘ṷ̋ľŋ@̵̝ˉäƓ"],["@@ȏŢƸa˜Ŀ"],["@@ƃcÝɚ͒ʦòĻÅȿƛƟ"],["@@սʞùƜƮÂѬ̽žŽ"],["@@čiČĨBý"],["@@ËǘŨïÛħ"],["@@CËéĮî¡"],["@@ġŶŐqmŃ"],["@@ūt•ɬǂʟ"],["@@ōƽ¥óƒȢb"],["@@ǹ^ŦĘȭƢȸȠŨșÝʝ"],["@@ğāʾ͗؃ÇʒǑLțɒʼn•œň•·½άяɷʓ৐࢛ϙƗ˵¼ʅȌ¬ǭȁƅȇг·ҹĊϓկϝƣƮ\\ʃБϧŰ@xśřǻɂƅ‰ǯDZ•\\̋ƏƒúLJʧϿਖ਼ӗƗژãėďŒ@Ǯ죯èͅƩāɔɡ§ʹ˂¿ɇdzœƃá˅äΩș‡жŅƘٝƳčÚÎòǑĥŇŊˉÙƇ߸ŗŜpӴǏɜѹǢĨƚɁȺŖΠʿ˚yҴ–ȆƢĴķ[ÆɌʬΪɂĘùōĬɿܐمԄǂתɨŎĜʞʒĶϼPÂŏԮǕɾǖԠdˌѺ™ɪͤɮĉĤŒɖňŌǪRȌ঄ƴžռnӰƒЊƕ"],["@@ĥŒĠǀûðˆǢƐɏĕɍ"],["@@ࢰoלړ¸ˑ஦އږ࠳̪ȭ¹ʜǾ^βӃҘɁ̶ԋբɛqƍϧǗڐʢ˪ȍĪȭ̝ȩoƛĖēÏġʂʻ՞ŷžٿˢɯǍуːȌΨSծ؍Ǜяòǿĉˣ²܅śڷͱɦɣǑωȎœ̻éW٧ۚઙެ·Ҭңδ׃ޚ…˄ҟज՛ܺѕʴӁౚݧдġЦǗňΟԌѱȮܭ܄̹ԺlʀͶšш˃̠Å"]],"encodeOffsets":[[[125900,-11171]],[[124809,-10844]],[[126379,-10549]],[[122893,-9599]],[[128070,-9740]],[[118385,-8980]],[[125929,-8750]],[[122332,-8950]],[[126278,-8555]],[[119441,-8820]],[[127270,-8529]],[[126900,-8471]],[[142229,-8589]],[[120378,-8568]],[[127566,-8336]],[[130892,-8293]],[[125730,-8818]],[[134003,-8518]],[[121081,-8517]],[[118219,-8350]],[[132955,-8145]],[[129845,-7851]],[[130478,-7806]],[[141861,-8472]],[[134478,-8191]],[[135150,-7374]],[[131759,-7355]],[[123674,-7289]],[[116577,-7275]],[[118147,-7138]],[[107779,-6799]],[[137766,-6596]],[[109951,-6151]],[[123421,-6449]],[[115425,-5950]],[[135995,-5991]],[[137981,-5843]],[[136117,-6043]],[[104825,-5610]],[[126594,-5398]],[[124972,-5568]],[[125589,-5395]],[[126137,-4660]],[[136777,-4347]],[[126201,-4211]],[[131649,-3671]],[[131355,-3762]],[[119219,-3547]],[[119095,-3960]],[[129906,-3161]],[[109452,-3077]],[[132869,-2934]],[[102836,-3259]],[[110805,-3069]],[[102609,-2806]],[[102240,-2399]],[[129081,-2510]],[[129049,-1832]],[[133482,-1731]],[[127969,-1746]],[[138726,-1630]],[[111568,-1658]],[[108591,-1709]],[[126564,-1745]],[[131229,-1700]],[[126170,-1199]],[[112344,-1209]],[[138205,-1142]],[[101544,-1820]],[[134146,-1347]],[[138633,-667]],[[130356,-799]],[[133762,-541]],[[124790,-416]],[[144357,-2672]],[[106982,-342]],[[130629,-326]],[[130304,-507]],[[106227,-356]],[[133953,-4]],[[100823,-543]],[[107294,-180]],[[105764,555]],[[105501,765]],[[105907,1074]],[[105643,892]],[[106522,1209]],[[107096,1246]],[[104886,1014]],[[99822,1501]],[[104952,1495]],[[127887,1020]],[[104150,2129]],[[130799,869]],[[99671,2126]],[[131537,2102]],[[98779,2417]],[[111501,2976]],[[108299,2932]],[[108837,3233]],[[120483,3360]],[[128674,3519]],[[120714,4287]],[[110916,3779]],[[120397,4271]],[[129861,4131]],[[98809,5355]]]},"properties":{"name":"Indonesia","childNum":107}},{"geometry":{"type":"Polygon","coordinates":["@@̽ĥ̤ˬZȅ"],"encodeOffsets":[[-4517,55486]]},"properties":{"name":"Isle of Man","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ʬ@ĤмӼþʜόώeլԟ͚ƺ̃͠đUz­ŽƓ’íȘșKąuū¾DžWǫ̑âʀ˵ɶĉɔÛʄǣaīֶɹĦ­rә`·O¹yiŕĿœāŭƛíƃ½ůBėoĻÁϏqėƒĽh‘ƀěĈ³Ā¯¼Mb€n|Î_Ө˃ָϿšP¢r˜^¤YډƨĝƐíƬ`¢[„ÛpßҲůä’^†ÀjĖQǐ»èeɚĪŜÁɂãň¥€£\\Aĥ€¥юɳĐsɴČâWªŸŽš´‰Ǵœ׎ǵ˄ĶɬǏłÂμ\\Ŭ¯€Zzˆ´ƀ¦ŜGèŸĸįƄS¢ƎԬFĀ‘xAÀ‚`ŒjŶ–ŶèȐï±СbûÊɸŸSeķák—Ĵǵʒũƺ„ɈÏp¹ĐI¬YƮnư~êþИͦıҠdŞÞ|@À¹źIƞ¨ĐP°K¨hֶ“Ӡ£ʨҎϬɢࢎƈՎ̰Ϧ×٢˿áƷfÙǞɵC¡ůdſƎԙ‡ࠩԵšƕRʃ’ċjiF{şɫ˗ʽĩȱŴįǭϯĭƍëŷǿϙ͡ŔȗeŁÜ޳aŸũ£Ŀˋê̝ùųęǥ¯]±léĂçv·ĵ±ƒ[ÐÍ՘w¦đǎy˂ñφǝIÅ\\¥K@óRÿƷǻEȟǕ½įǪÝŋǕӼDŽͲ̈́ŨĴ{Ǿǘ®ĴĠɸBĢp\\ŒêĂΙȎ஽Cб¬ɅÖ«XY€pȊC͎ŵɬĉåmŃɕ‚ɩ̼ÉBfƉ{IɏžƑȐůžeåˆW®ďęĥƵƛ™ȷ’}̘ɱɢðƁö—[É̙‡į@ëȏ¹ãƒBùŽKĕǛ]£M‹²ÝÈÃâsĦMƊěŦiæ§V™M›[ĭ[Éō˟ÊĽÀµvȥƢ›€oy˿jǯŊ̛m˳ßBĐʅNjúħƇGΞĉĮµϱś›ƃŦ…ŕǑÒŜϐɇȢǾɅ˯ͧԻƵȷƭĥɓŐͿȋ͗̽ʳŋ †őףȏßHPLjɋŋÉƋɖ€֝с֕۩ำ৑č҉йȗЏPʳӡ˧Ř̓ƹȫ՗łԃÉɟǎؑųȔÿěɾȳħ̵֟כƓ֧Ět¦šUܽѯÇׅ̿äț͢şγÜҷƏȓǵŏэҕʱϝȦљӲȓҤçЎŐ͙êEĥ͖ųƐЅੴٹৠӁྰεӤů˔Ō@Ƈƨ¼òŷ¤ǡ̄ԍᓶĆіřƫĔRȂƦkǗîĵϾȐۼãϐDžɈĤČķSоʐӍ­ƂɴƭH€ƸɌÖՁŒļåċȥɡƢāšǓȩ̿ࠫΕʱDӻ̔ঁ৒æŬȎŵݴʌˀѢųű֥Ʊέöԁ˼ȉ͎̠ɾҕɉÍɔİÒĊnĜbĈAŚCHʨXxh^lNhIz›ˆDŒvìgÈ\\ÌcĬAǬPĬEȸěʘĺLjÌɎÀfQ¯p«äƒ´O¨PŽbææ–h°C¾B~ÙŢL vˆž†wÎÏŔÕƞȍ̢EȲáÁiµGƷtƑǠ¤π…ǜէɌĈ̶ˠʦżȄĂż¤ž¨ƆúîCŠïÀƗĚ¹ÜJʼİ̞Ž˞þfî¸ŊƲƚƐ̎¦°ҾɸВݾάƆÞÌ ¼Qº•ÐbêĢîˤ̼”@ŊÈļÚO†]šýÖbÚºǢY¸ÑDŽ`ª|®æÒĔ¸˨ŠÊ`ĬˆâŜWN"]],"encodeOffsets":[[[77130,33061]]]},"properties":{"name":"India","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@¿µáƠĆŏAƨžƁ"],"encodeOffsets":[[74232,-7554]]},"properties":{"name":"Br. Indian Ocean Ter.","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ˋÄɨt¤÷"],["@@Ňŭˎ࡛λӧŜĉӅñÙøࣽΣ̏¼űϵŽޣġDzǨԃãѬɰدÙδ˖ЗZ„ÒӮšőźɰŦ܊ŎǧÜƹĵحÅϜɆƔɲ̴Ģӫ~ӝƦsŖͬ²Ƴļ˖à@Ø˯_¸Țȣ¼ŠĒౖaßĘЬʚՋ’͘ǪĒɎԜĢRʇ̌ͨ̈Ņɍũ˧˗̡Íƀē̩ƱјɩʂUˊɰ̜̇δ|"]],"encodeOffsets":[[[-10186,55208]],[[-6367,55387]]]},"properties":{"name":"Ireland","childNum":2}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ȝȃեĝϜȂIŖѮHû}"],["@@͂|ొٸ˜ʇǽƃǂȅʝƑԄϋɶrüқǰʑ߬Nj͸ͣӰɫ࣒ķೠʸŮ@ȣÝʔ‡±ѴڈńǚʶКɰݠ|ƚƚنƒƈȱނʵҰdТơźɏԞʑɺ˙ٺLþϝ¹ǵČğTȻhÇEƒ‘³Ƌõ‘iΓŇǝ‰gĥã¿S[uTuvańŽȷYƁDZ@͑ôĻ˾é̙̯bťŒͧĴ̍CçƱCğHǻ|Ƒ„YɎȢ{˄Ăą¸dzEƅwçȋțȑȡЧщLjǏİķب࠷ܺ́j͵}҇ΐY|Q¼‰œ±HwÁŸRǕQ]±wcƟܙƥÓőĩXʃţ»{ƛuŷamÍ©McT·ĝqʡyë¯MĵÿؽƲŹżġĿߍƜ΅ÃȽŘ௳Ȧʣࡒʵ˞ԡ`ଝՙїLjҕ|࡛ԈǹʘϏǪχʻɤǻԂǏŨRNJǙìsɰЗтćɸѡƛѷʰǒŜȅ†é͕̻ƃ˔™†ēȼ˅ưIѲ˥Z@ͰØǚÜnjīŢĻŸáÀƵʰ™fƏOҩ̰ljĄálƻNgfYª@¸¼ôJ²ŁƼԻҲŪȴéɊ”ĤŘO”ȌȲȘĶªü lΗŀşǞÈŲŦŽæ„Vzė¢͡BΏnjķ˺…”©V•D¹¾ʍ֞|ŰȃŨbɴ͇ǔȨΪŵªuϚȽҔ̮œǖ̆Ȗı֎էՔŇ"]],"encodeOffsets":[[[57537,27568]],[[47222,39811]]]},"properties":{"name":"Iran","childNum":2}},{"geometry":{"type":"Polygon","coordinates":["@@ŗP“ģêɉũȳԼұłƻI±»ó@·Z©heɞyNJăҪ̯ƎPœeƶʯâ¿ļŷĬšÛNj×Ǚ@ͯ˦YJѱˆƯǺ˕ûqċfdzìƅ{Gy˭ĪзąȯϳŗDžÙóƋƍƧ൝Ŋ߉վ෗ਚഃۀğž˻²˗¢ҷèŮĴ›Ĝǥɣ࣊ᇴࢴǪ˸ƆܸµزĶŌ̺êӐјĆhưĸĘĦ†TĀ‹ÌSž˜ӪşƊGƪúĐW”gŠƒbŸMųäך‚Ü¢ǢIJÂE¾O†oʎ֝º½–CªU†“ĸ˹ΐNj͢AĘ¡U{åťÇűŠǝ˜ĿkÍûŸķ©ȯȗ“ȋ"],"encodeOffsets":[[46733,35404]]},"properties":{"name":"Iraq","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@ߔźѫɋΜėŇɋκpåDZʴÈҤĻƿƏǦˍϏʙ˹H÷ɃϝƣݽťڵʻধŷŋƫקŇಙŲʝŌäIJȥÉуǨఽį¥ɌLjû˔¢،˸ӷÅĒǜ̢Ĥџỵ̈ɚଏ³ǧŀਦƶݬDĦŞؕR֒ɂࢷŐ࠹ơӛİȒø͢ÛȡȨАćˤÐҟČʶ€ɅŘ̀NeƂθǗ̠ššƃƤ”GƊуŤϴ®ՍÔƠúѦBࡨͻ‚ʅʅeѼϧ˚̶̌ÅȺѼ׾˧ĚʶҌĞעϙŽΤ͠]̚ƭͮȨ˄Ý̔бɂʔÜɜQϊʉ"],"encodeOffsets":[[-15916,67818]]},"properties":{"name":"Iceland","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@ǷÿGkcȋÉNå¤a–çjģlŅ×¯Ĺ¯ƫ†ȹWŸqsPclMÐlØkÜÉɅŭÏȟӐĤБྣÍßփบĒìDÐƨƎ£¸NPǎʮβীʬOϨ̚œЛŁǷ"],"encodeOffsets":[[36647,33521]]},"properties":{"name":"Israel","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@Бٗǒ͹Ƶ̯ԣĢ̝ʲȥEء͆ѽĬǣȎʤ̨ƚů͜Ƃкǯ૤Ơ͊ŚàÏ"],["@@µċ¯ŮĦ¡"],["@@ã•Īľ…ç"],["@@Ƣ͏ƋșåएыÔ÷ɳˉ‹ȗɼňՒŝàẦɿ̠†ɘ̈Áր΂͚ȫbœ"],["@@rŧʍzɜĮ"],["@@ǰ‡Fgeq˙½¥M}PmlYúLÂǁƘģģýûƸΟ@޵˙¡ǡʢɯɳȷŮлঘշϒݍѾϏՆʻ࠸ɛ͑ႮܛьηįͱɟĬdz˾Ͽ¼ǹƌɃ™ͿׯӾ̯º͍ҵǕÑ͡Чϻ˩EߥȜӢˌŪ\\ƴѣࢤدȾEȘƳǘΧÍĶŊΓêʻΤթPϩȎ࠱یзĒvŪϫʹNj€˝࠘டЌٕҝљğŨͮˋuΙǔþа̛ȬόƠÊŢ̗̠ȘƺˆkÖoǖ‚֒ĔöȬŴîÈÀԔôǗ̢ƙP_£ÃƨƕÐ`ư̾ĎɶĂ]zBĐƧ¨SºAۨĆl°KĒĽS¢Teŀy¶‰xMˆnÂv®¦^¸LȠÏi¸W´PΠŊvSĎAĠOЫÎeĊKÈP€j¾ÐÞĢ’ǂNĂ^ȼWͦĆxOJ[‰ƒ‡—p¥Īċ¾Ù¸µú}ׄċƶ]ŜEǮ‡gµ—[׃ƍćlė"]],"encodeOffsets":[[[15951,39138]],[[8683,40006]],[[8485,42025]],[[9864,41864]],[[10645,43887]],[[13744,47322]]]},"properties":{"name":"Italy","childNum":6}},{"geometry":{"type":"Polygon","coordinates":["@@ފʱŞȧ˃¡˟ĞùĿƧ€íƑƁIJͿšɵʞʛĪļƈ˾ØԦÃ"],"encodeOffsets":[[-79115,18901]]},"properties":{"name":"Jamaica","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@ǻ¯`øǜ‡"],"encodeOffsets":[[-2067,50413]]},"properties":{"name":"Jersey","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@ůį…YӱŭɛÇԱŽɹÍɍÃ࡬࠯į³NjāgcacãƗ¿őka׵Ň©…ĥƑīƟNjŝǵŻऱŸnǞВྤĸْiƂdȌHlǸĀӬ̇ϒÏ࿦ࢲɤࣉǦžœěŭij"],"encodeOffsets":[[40085,32896]]},"properties":{"name":"Jordan","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ǩŽúĆƐ«Ÿç"],["@@Ɓƙ©öǾŶQÑ"],["@@ƥS^ŜƈŇ"],["@@͡ǭÁʑų·ɊԌDŽuƂǸHȕ"],["@@ĉNPƜúƩ"],["@@ïåǝĺѴɤȥʷ"],["@@ƩDµļĠÞŪÛiŁ"],["@@õ DŽ͔čγ"],["@@ŝȂ®ãý"],["@@Ĺ\\¤ɺƄh‚Ǜįġ"],["@@ȔōǛŸwƮ"],["@@áĤĦƲÔŝėŷ"],["@@ķŸǘƺßř"],["@@ķQ˜IJàğ"],["@@Ѯ@ƅˡ̠g£ŗżȡ˻Ε˕ࢻɡ‚xƱ΋ȭø׈ķXĉŽ‚͓͙Ĩ­İٖxŴőƘN˒ϐѼţŒ¦Ʀʹ̄ģÓ¤ɇŶD\\ŵʉÎʉǙ¸żŭˮˀǫΉ͔|ĜȠkeĬҐǔĴǚȚĀȦ³Ȇɥ"],["@@Ʈȣ“¶Ô"],["@@ÿlzƨƉ"],["@@ɼ{ĐͿ̣dzǏ̡ȉǜ˛À̅ŵʷѣơ÷ƋTÊŠǷ\\çќ͉÷Ԣ̌ʖ;ɐƋ͜ìlȐ̄ĖΆû"],["@@č»ÍĄƜ‡"],["@@ĝïƁü˲ɀÑɋ"],["@@ıbƸˈÅ˩"],["@@ōqĪö Úŗ"],["@@ijPrȾɈȦ¥ȫĸSȗȳ"],["@@Ȑ‚sֳ̰γưܥÛˋ̇̕á̟̝ÅūǃࢅΫݑʦыΓǷđˡѕɡc͎ɪʐəÔƹȽtɓǛŲȋiƍρȽȁ‡̘ЦƹČѽѹթÌЙçǴdžʽ¾ûďtʬý^ɫ̹̈ȳuġѱū΍ԫȃÙȱÈ˙Ϣwʀˆˢ֧Ůб§ɹƿۛȋС±˿àƕУͽǶۓÛ{ʊĬŌ̌j೎ईࢶGৌȬŸȅ̔mȈĔNJƊẘՊՀŪՠЖŞΡͻİɽȖëɤǖڲɢӆՂДɊςڂɚزÏȘɅÆɨ˸ó˴̜ȼÂ̜ʄOĸ̫ǀĢƶ·ł˖ύÇDĪŔɄʖŏ"],["@@¥ĴńˆÝŻ"],["@@ų†¤ĀĐŅ"],["@@Á¿ǒĐŏ"],["@@ݠǁռͲȕ֑ǚ̡аìމ͕ߝijґϳljΗ୕ӠύΝǣɵǴȓHŻɟۘЧŵÉ˷àɱʟʥí÷ŤĦ˰ɭ̬rʮӔ̼‘̊ظĻȤČ͘ৠƫ֢ìȶɪĞߒ۵߆ҭ"]],"encodeOffsets":[[[126862,24863]],[[127277,25105]],[[128455,25337]],[[131337,27293]],[[132095,28387]],[[132560,28886]],[[133758,30990]],[[134103,31127]],[[133511,33202]],[[133205,33004]],[[131754,33571]],[[132175,33629]],[[132600,34021]],[[132911,34559]],[[134323,34410]],[[135441,34760]],[[132383,34943]],[[137583,35079]],[[137577,35312]],[[138172,35112]],[[132491,35179]],[[136572,37073]],[[141665,38730]],[[144619,42366]],[[142829,43091]],[[144687,46203]],[[144459,46421]],[[147277,45176]]]},"properties":{"name":"Japan","childNum":28}},{"geometry":{"type":"Polygon","coordinates":["@@ķȤ›øÍŖøĤ£Dz»Ǣ™ŸƒłEŶRÚ^́Njɉŋĵ½"],"encodeOffsets":[[78898,35953]]},"properties":{"name":"Siachen Glacier","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ǁèĪŨÑŏŪÿ"],["@@ѝ‰ɑѩڥťȉЁŌ։ƟDžחȝijŢճCࠣǺ׷೹ʠƝ÷ʣɋĀˑ·Ʌǂ൏˽ƿĻԢƙŃԯβ޻ͩıŰƛ˯śNқśĨűĢ㚽vȍƴĀbᅛǔ˹™řUӝTûR§GěđՓØ۳˰˕ĝˣʼnęʥyğÒƹåVă¢ƒŒΫ´ďÞǭ’ɣâџÄȷ¯û`Ɠ£̧ͥ®ûທەӍңWɇɿ„ȳźÆȂƩƘਏcǯۆЩVúࠢʟħʳζӹͼϳƍਡÞ৻ŗࠛݸᏟঊᓡһBᶡҗsӣ֚؝̶ࣃƿҿ̯ĒࠖוĠʁʐˏ`LʶЃװнŐáŖƂƌ॒ý҅͠΀ξຈuΩȮ̤ԴÅ֐ӱŔ́Ƌ߭ʀકѝҏÛīƳׅɦbŶͶdڕ޸ֻĄǃÁȑаͻư–ͤˢ̂ȕǼòˤҒ֊ɶjՊѩΤÐőֺזȪƦȚؼǦҠτ̶çƲƟ݀Ƞ̐ȑ٤@ڪχΒщòЎ࢚έڲξѨžβƧͮǞѨwѲ̳ӎ×ÐŅʐöȸɦ̮ƝѤbϔƒƔ϶ࣹ˜ιʂ߸ͺȃ˶ɰʠ࢈„ΡȈϯº~ƄʲÞұĊɄͮזÓᒂπՄ™͜ʄᖮ̔¨Ƹ٪Ȕ৤ȏҲŤϖץý͗ފMƴĶɖ͑ƨNJԜƩМîͿ˭ĎɓϞƠвōČƆ٦ȺǼǐ୴̒ƵʟȝNÂŇୀهᅂᐳπƞrȦʌĢͤđ±ȇˈWàǻࡸWɤƒԄĐӴȁ͆҉֖ƫȲϏߖĭдɸ£ǵגБ"]],"encodeOffsets":[[[51389,45932]],[[89419,50264]]]},"properties":{"name":"Kazakhstan","childNum":2}},{"geometry":{"type":"Polygon","coordinates":["@@Κi²ƿk§mŽNţɒ˷ݒ³ȾƁڒяŢćŜ}Ȑ[ƀIݘťƎĸŐƪªĆޢΠɌǹǚħŶDĠdɌ`ŬAɩ͙ɭ͛̓͗^ᶻɪ̋ƬȕĂĻVĹɟȿ̓áPȷɇɧΟůęҿɉ˛̵ݵɥǷഩ৐ŠϞḭ႘’নǾδɀɚÒƦˈǞƬЌBŤYǚå̘nÀϩָ“ǎO°˜njGœ›”Ł”ďäj´­hſ˦ǜǘǠǜɔɊȨȠǦǞƸƲ¶Ņ"],"encodeOffsets":[[36174,5494]]},"properties":{"name":"Kenya","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@·ƭ鬿¨•”ɛןŪȓ²\\Ú[zƒl֝ǫʡNJৡ¿«ʪ†úz¨¸kȋšTIÒE~мƴՐȓ͢ɾ˂‚͜œςʌɐWZŴǞ©ѺʬЉ”ʛƤÍGåsuXKþa°£\\ÁmÿnãPiĮÅLJ^³t‰ôwO‡}Hŕ»¹AáˆWǥ_Yʁ|ȿÔŃƨҫƞ֨ϬƦ ǒîHpgjç˜āˆ³ec­ų̈ͦƔ¤ü_ȸ°Ͷ½ĪEɤãǬĒÝά³„‹Ą¡æUÑƺzĠĚʦˤŊ˖Ğ۴˯Ք×ĜǍHüQӞSŘV˼šᅜǓÜġþ»Ôµ¼ÁвÏŲġŜħŒʼnWaeUʳcÍg׹࡯˵Ǘčč•ãa÷ȇǥƕsšJăřԁ á_ë•īƏ¡i‹cã›íćŅë¹Ý»â͗ŅǍFĹˎ…DɽŭʼnuęGśšÃÅ|ċΙLJƙ›Ɓcÿ«Ã¯ďy£iyH‹˜£‚ěOy…›¥›ěuë[ƉXéc§}YϿr","@@ćXÍ`]@LgÐÓ¬Gø‹|","@@nƀů€³ÎeF›ÁìăAaå¬SüC¨R"],"encodeOffsets":[[74384,40332],[72361,40812],[72916,40850]]},"properties":{"name":"Kyrgyzstan","childNum":3}},{"geometry":{"type":"Polygon","coordinates":["@@ұȲʃđŸĮƴȆǃɎƭȍǛOwҠƩ˂]ÉǓ͐f˲ɋȴƍݞǮt̨ҪʒǐೢĄʜǛ¬®˜²\\TFwl¹Ž·ĖùƴžǪÏüĝÖ«ƌE¶ņyàûŖsä|\\Ƃ`t`†ô˜SòWü¼°Â|{„™ˆuȍԫž«ŠiĀ^rC°ÂŒ†‚S BƸƨô‹†PĖŢƿӟɰׁʼn΁€֓ħĕƱšљ˙ʉ}]ɗͣÒŽĻJ˹ʰɍFȱʻÎćł̋ùęɧÈBǭǑƕΣĻ"],"encodeOffsets":[[106933,10662]]},"properties":{"name":"Cambodia","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ƔĭͷƌŤ¯ÒĊÝâͳiĥ"],["@@ÄŃőÞΦ"]],"encodeOffsets":[[[-161118,1901]],[[-163163,4018]]]},"properties":{"name":"Kiribati","childNum":2}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ƉöƠŰӂ°yƣҝı"],["@@ģÖȆĎġƣ"],["@@ƑŘÒ ĀƷ"],["@@UćƳv“ŞȞË"],["@@ÿ½ƁňƮŤÔǭ"],["@@IōýfWǘĠï"],["@@࢚ೃ]ࡍƚCŹҫ˽̿ӅkÉȗ΁Ŷ˓ÉBȝʽĐÚǓŻƋŵêÖǬ̋ˇţÖȇǕɣ̠ɖrÌńơAŇˤ˔ΖĿÜɞȌdzʜ«ѸʳCiä˜Ȣʢ·òĽĘĪȗɊĥӴϦфߖr˰ˆ"]],"encodeOffsets":[[[129359,34021]],[[129264,35196]],[[129201,35565]],[[131140,35642]],[[131831,35634]],[[129558,38643]],[[131456,39551]]]},"properties":{"name":"Korea","childNum":7}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@āYĉǀĔưƎǑÕƃ"],["@@٫SȧϨݵĚƌƎÚôŘdžȰϴиĆĠiȎÿvŭŚəƣšȹȉˢ͢ڿ"]],"encodeOffsets":[[[49434,30336]],[[49606,29228]]]},"properties":{"name":"Kuwait","childNum":2}},{"geometry":{"type":"Polygon","coordinates":["@@ϤЋâȓÞD‚€xödRŒŁĉΑ‚ÁȄʻĚ©Ɇ»ƠéϺȾżýȠƣ§û­sљ‘™rcĖU収J‘`ÁlgŲE”ƒ’ñAÃħĩYÉ·çŽŕ•OʉØǓMEe{ŽçXå‡¿ă¯‰sI‡੊ջA…µĵxù̀Ɂ¼ÝÎÿĒȷˆ˓ɚǕÄÕþšÜ£pÝP±ZƛĢƃꑪŽ”ˆfU–ıŽ™ϸʹGû}Ɵéo‰ĪƷ¸·Ȏƙ¶å€¯gřх½ÙÝrÃj™U­Jĥ­“§ď…OóŒƷƧŸAT…­ÁqDÿ]‰j¬Ó¬Çއvƒš{|ɵđ…ós_Ɓ_{[tãþŕxßµŅƋFÕ¬ûĞǩÐƳĕú¸mºCx¼lĊ¤ä°®¸l¼tɆpöYĠ—ð@ňŀȚpĈDÒe˜ȉŊNƄÙ¦Ƴ²ďÊȓʲËƴMȤ`NJ´ȊÛƊʽȦėİŃƢŭȒĉǧoęlƍÆšŠķJß]‹‡E…€…auÁg§‹µë‘ğȳé÷­•‘JygK™`eĀŽÿhę¾ǡƂŸNǓñóӇ³f™óŧĻËQQšÿȷȁ¿eǑĔȢҺMŦñĶEˆȪ҈õ̎pƆQ¾חJīǠĺΠǝǪċŸßÿsXPºN²°ǼÆŠÜÆèzƂB¶ˆIhËJwŽ^ÐƔɒ͆Ǽ¸Č¶kĩœÅQÃZ­pu†[ƌ ĊFƌëpN²¢bPÝĒrʔGƠM¤DZژnªªªŔŠr€RlIæđƸ¨ÈuŠƒ"],"encodeOffsets":[[104579,22917]]},"properties":{"name":"Lao PDR","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@ϧ̙ʫPҐ঒ˠ͌΄z¯ƃƦÉäǯʳʝòï͇ñ¤ƕƓŹ"],"encodeOffsets":[[36730,34235]]},"properties":{"name":"Lebanon","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@àūìЭɛίʨƟʲƒĀ§òǑÒijĀWƴǰʓƻՑV˿|ȅ׵Ȫܻ϶१ࡰ࡝ԢǹȀȪ˜͞ʲȘȄÞʾ®°ƂÀÜʠ¨Hð€ê÷ʂĜɜLJŰգÿʍ̄ǗȒžȘΨƢʼn"],"encodeOffsets":[[-8690,7740]]},"properties":{"name":"Liberia","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@ʡˏĞտɏБɶࡥ@᳿@᳽Aေ࠽M@нủཤ↏Ⴒࡉϕٛ̓؟Ҽౙ˴ϯڞۑȦʑÅşĘɉخҫؠšɢ͢ʠŕךƘϤġୢе߀ǬĪ͂ƄŒŽņżƀǠďֲƈȆǜ¨ŐnjǾŶƮüƎìDŽöŮÌ~ºCªãİ@ŞLĬP̌ǼŸÁƀsϼȟЊµѾĨཤѯѼ߷ᅀн۶їϢűӸȈͰЌƻܖǐʹо̦ࡠ̚Ҩeݺʥ`ʋƲı۾ǡؾsɮˡ"],"encodeOffsets":[[25755,32415]]},"properties":{"name":"Libya","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@³ĕķŰƒȒZɫ"],"encodeOffsets":[[-62356,14154]]},"properties":{"name":"Saint Lucia","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@|ÙſŊń¯"],["@@ɪaϬίѠܣŪצʃϞܟY͙ȋЍލϑϧ~ƟŦȣ֪ũ଒ŠĦ†ɵŪ݌ƜʾY̰˼ą͏ƚÁƎ"]],"encodeOffsets":[[[81792,9268]],[[81902,10049]]]},"properties":{"name":"Sri Lanka","childNum":2}},{"geometry":{"type":"Polygon","coordinates":["@@ɉkɛ̓Ñęʭ€͝˒ƛ˴ŗˆȦĚψӢȊÈŀĀŰàȪðĤl–Z֨ёîȕ‹Ĺ±Ŀŵő™ǿϛǧ"],"encodeOffsets":[[29335,-30849]]},"properties":{"name":"Lesotho","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@µPǸˤƁ˳"],["@@و~’m¦™xʁßɹÅkƩX™u‰ĵkoϙçåx~Ս×jǠë¶ñ’ĥ”éd›JwšfépÏLµïŖHЊʸɏǀгJ۱ǚDdžƧ̞OǮO ɦIJ˶ńβüڔUþ_Ú³ÜN܊ަđڂŒƖǓԀăްοC›qÛ¡ĉ¥ÛW{ŽqƼWâY`iƥţʹR“]Ùķç“Ň_ėwŗǛTŅMu‘yÃÙ«éiTiŪeÀĥlj‘"]],"encodeOffsets":[[[21461,56606]],[[26187,55440]]]},"properties":{"name":"Lithuania","childNum":2}},{"geometry":{"type":"Polygon","coordinates":["@@ţ̃ƍž½[}¿Q©R}nyZÝ`…„YЃɼš–|¨¦ÐĠîĨYjNEMïz»È·ÊyǸõ"],"encodeOffsets":[[6643,50994]]},"properties":{"name":"Luxembourg","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@ӑ́ѱ‚ϫƍޯπӿĄƕǔځőʵÆԯŒÛ‰ÝMƕÔړV̓åÝU˵Ńɥırوքغۚź؞Փ̢ıؠɼ¹Զ’IĄ–ոžƌ­͘õ՜ˍȠÏθàȄÏŞYŤCÎÿɐħ‚oTO«LJ̋Ɩl–[šĥĬşĄ¯P‡¸ĻnÑT±­į"],"encodeOffsets":[[28824,57491]]},"properties":{"name":"Latvia","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@řŰƒ࢖Ɨ˲ϩ̦Տۄ̥Ęl†Ǩþ®_˞@˒Ěڔ˫êFמƵTЋːǓĮ˟ŮåƄ¯ÆĕOċUïǨī±Ǔc“S͇ĔŹZå÷gFGł]f‘FƿË…F¿\\ÕÀĥ…£qÝĉÑġ•Sí½·ėµÏÏNŭǁg›]«ƒ"],"encodeOffsets":[[28890,46542]]},"properties":{"name":"Moldova","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ĥƷǘ͠ñǧ"],["@@ʼnkkŀIJÀ„Ɠ"],["@@Ͱ՝ʢඇȼչɱәǁƄŃ̂ȓÃƦ߷Ó˟ˉΧzփīο஭₵́గ͋ލϗ̥Ӎãճ˩ʫOছӚ̫אª٪ϧ६tϜǰӜʤƪԖ੎šдǭ̔KˬNjϞ»ݬϊׄ°Тζ˜˄ȊĴïɌšĐƮϪÜȰƽËǰŦǚϼʚƂǷMʆɔ͒Ħ¬\\ʝʞ̺dž‡LJʬȈΆĥź¶ŨĊÈǺĻҔϞļάŏ̲Ū‚ɲ̠˨̑"]],"encodeOffsets":[[[51135,-17308]],[[49503,-13684]],[[50728,-12730]]]},"properties":{"name":"Madagascar","childNum":3}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ōAɼìŭé"],["@@ƾǸöƩɳ"],["@@ĕ¥ŘŘñ"],["@@zĥƉdžŐß"],["@@ȩȴŘи‡ύŚʝ"],["@@Ŀƻ–Ǥêg"],["@@Ƶ†ĴɞÂʣ"],["@@Ûȣȡàú̚ŜŒèȡ"],["@@˹Ɋùɠ͖ɩžȿ"],["@@ѫ೑ƥཉâͻϖҕÿʓtʚ̵Ϯӊહؘ܇Ɣѵјҍţ^ʚŇÿÞҎÉ͒ƽ˶̇ނɜ֘ŽόǨϼ”¼ƿ͊ÓɒƘËɶÿUזϲž͆ǜǼŜࣀ҄ɠଔʜϬ†َƁÀČƱxˬfǰƝªɩŻ̩еұi̳ȷȋ˜éȄ|ȟșFÿż|ɕۻĵƟƣɂr˄ɛ̯ȑuʃЗ˝LyſໝBGӁǟDǵBθ͙ɠƅ¨ÝtÇ@¯¸•Ėy®£@‘÷SĉZ÷ÙCƳ@ɵ@ϡ@ʫAȃ̭ĿǩĕƥĦȹqŸ›s]ÛΗඳ౐ϩȚ©·ΦǧևƶØĪǟyËŎƋšȆË˭࣡Пԁ„̓ƸӍ¶ٟ˴ȯȖޭƺঁКْ࣏ٿĔدɚЃцࡵИҗ֖ƿΆΆnjÇƦƹ²ɲʼz̸ȇņǽ̴H˶ūʨ॥ੈۣӺȨĥ^ňρłˣϼȖ]թˈùżȭ³ŤɆʻšǁŔ‘ʲȎɮê«ƅʀǧƪɫOǃ̈́ηźǷʾÀˎӻĔ࢑ࢪݫൎXѺӝƖŕDzǁÒǛĹڅͦŦɇýЫ˨॓ڜջɌχʚŅĦʉȈóŘԉͼʩϼ܃ƎćăʤȎƟɺޗԖޟxѵʖȭÂȪʀƑ̆љɌƳÙˏѕɟ̙װ૏ߜij[ɩʢF؜ʵբե̴œ̦ĭޞÍȱȶԓɄāǴϡʰ—Ěϼ·ɨöCąȜčõȴě^Ǿаݛިإͼ͙ࢢȟƔ‹Ȝˡ̦¹ƜĐĮȑŬɽҊ፺ƴġǧẘষᛠJFϚ๠WʢˉচگЌ߿ͦʓߊ͙ɶǾɸҊ̄ĴۢāּԁϪܕڔٻ¤Э̊ԡผәȖø"]],"encodeOffsets":[[[-93884,19126]],[[-89026,20791]],[[-109058,22130]],[[-113220,25604]],[[-114746,25135]],[[-113766,26646]],[[-117934,28744]],[[-114895,29702]],[[-115871,29750]],[[-99477,26585]]]},"properties":{"name":"Mexico","childNum":10}},{"geometry":{"type":"Polygon","coordinates":["@@аˏƖɇó͹ōI·Źķġkʹ’DžwǵƱŷ¯©wԣeɉàȃ̂ÞԎƆ@¬ǔʂĎȐÑĒĶƠxB@Ɇ²ѼV"],"encodeOffsets":[[22881,43330]]},"properties":{"name":"Macedonia","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@Nᅫħ՛ɹտ˕ǿ_ŃύÒ·ïෛÍ̑ʑؗÏϟŮѱWʏȑޣ̧ŝʍЉºʋɷÝʫʡV­ͅȍćΛȀǟăƫƿĐ˙ɇķª˭ɩɗӵȻŽϝȫ˩ƒԭ\\řMų™©…W¡ŃĥéNķºEd¤úD~¹ˌțƁçtõÐmoS±KÅnĵo—ɏMÇǗ̱ǔɵòˡɝaƆɓƐÏъˡfɤ̜ΡʴHȾȍЖ̏ÀŒǫͫȍѩƶιˁȉʴ̹DžǓƸĨǦAҌȵάǑ­ȇˊĀȰ·˦ǫɄ«̎ƨÁpjºɘԶìòƤŀ WюЋɄɬي£жîAĮl¢Ú°`ŵ–oẀKŸڊűƆijńyȬyȾyȾyȼíظǙฮ̵᨜íظ³к{ȾuȒʴ@ˠ@ˌBی@ᝀ༷᣾ၭjʅϐəØƩௐѹŀσŕʵȤĭܺƀ"],"encodeOffsets":[[4330,19603]]},"properties":{"name":"Mali","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@ʼníƀǸĿ"],"encodeOffsets":[[14916,36714]]},"properties":{"name":"Malta","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ñƤƤğı"],["@@¾dzDžŬňÈ"],["@@sǥÿz·ȌƬŸ"],["@@¥ưŦŅÿ©"],["@@ÁģÁÊńš"],["@@žĽũřC˼Đã"],["@@KƏ™ɤ¦ē"],["@@ÑHĀĢmĩ"],["@@ÅćoŪǴDzĽɓ"],["@@⬾ǘ„Ƀ"],["@@ǟƸɎC­Ƴ"],["@@Țʼn™ąũKĥƚÐÂ"],["@@lřčǒâ·"],["@@ZăĝɐĄƋ"],["@@·ċͅǻõljŸi}]ÏxÌIJgµ‡ƁAçyÛÅÅş¯ǻM±ijÀ£ŠÃRƛĉɗŒxdzΉ§ƃ˛қë̙¼ǕʏÑܹ̹ÏɒȑØб؜ۑȆթƦò¬ÅÏƝȍŋ‡ֵ̭ƏVȑ̲ԭӊե[ֻʀЛǮ٣Υ֧εύ¯ЃŝŽćբǮʼÈԖŔňȫf¼ФąjàĒđۂ̿ی§˧ÆUϖDžЮĠ@ǧǦďࡢŁŨŢҤ̍ƧӔ̉ʲ¶̵ťˏ˫ǣȯɚŖ˕ҽɳ̽ϑó„ž˺ƛɫȟO¥̬șɹ–ԜɗΗǽß̬ಬΙ঎ÚRƧŸqͨĭ͙ȉńdz˾˨ŋƤǞ͗ˮĄŘϩƂĵDZŅǼÆʬȧǙÀƎŽȈYɣͱиŧфŶŬʨőƊUЈOŽĪź‚B¦wnjďĚǦúŴé̞ŀˌŪ¤b ޴łÛȘf͢œȀϚìŸĮƎǮϰųİĪȲ˘ʾpŤàؐ°E|kjČQʄŢƖࠪԶԚˆƀƍŰcD¢ǝɶeÚâƸò¾ʚȆ“ĖjŎ„ŠÚČĚƀ¾Nϴ˥ȤՕżĚǖëôڋ­ԅķĭüǫ˓ɷDž_ŏɹDž“ç͍Żā©ʃƪəťˋծǚԼVƃǻžɽ€ηҰĹöğ˃۫،ćpɧǨɷϨQЌʄºƿ"]],"encodeOffsets":[[[100539,10172]],[[100567,11216]],[[100920,12027]],[[100881,12191]],[[100420,12688]],[[100776,12901]],[[100675,13414]],[[97081,16199]],[[96745,16329]],[[99917,16644]],[[95940,19133]],[[95964,20028]],[[95736,20370]],[[95243,20403]],[[103567,22086]]]},"properties":{"name":"Myanmar","childNum":15}},{"geometry":{"type":"Polygon","coordinates":["@@Ϡʉ֢˯ʑÉTdzɳÑőŸ̽ϥ¾ʭݿ׈ĠæáŖmLjb|z^Ŕ`CƬĚÚ¬ĐÀìMš­¢NTÄąŞV~p`®Sª]„TªP|Crë"],"encodeOffsets":[[19680,44493]]},"properties":{"name":"Montenegro","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@ܷ˵ԛӉߧˋēcշkџ€୵ƅݷʛҭȇįƒå×Å¡ËiНÂ@ȀNjʵ£ʉ՛ɊлðΗÆƷ¸ˁʆåpé^͹ZӕÆε®đNџğ቙ȆۏÍѳҲ˫֬ǙðrȨՙÖ৑ԀؓúǫqŽCɁvţ„ϏP҅Šơkǹˢ˸іIÎ£Ô‰ĀØВÙŔ“ÒÏ~ëfǿʀÑȂßþa¶clĹtóšÙŎÍR¡•ái­FǻƬçrγuÛ¢­áZſÌę¦QĈ¥ÈēhēÌˣêäŸȓìõøŊĴ³äRŠUžĸD¬n”„òŠÞǐφ†ǖ‹‚âŠXžroŽUĐzÐ~n”‚Ÿ_â¤ĖØdSƼΆdžԐňºŒž ɘĠDzŒÈV’NØC‚®̜ƠʦCôRƎƎÒ»ǚī°I¶x’ÌÞVîWƌƣ॰¡Ĕ˫ɔǕ¼H˜`Dz@ƴĝΊoҘòȾć֞eȈŵŶVȖƜΐĒȺʎ|ȚœˆÇˆ£”ǡ˸ɸоҌˊɆˈࡺ̥ĨeǐMȪGÊY܂ɕDŽ^ɀʔ˚H«c›Tĝ˜µjȃĐģyŏࡠ͓ˢ¿ø`ânɶmરːۮƛŴ\\ǦVŘ_ȖĭČġĒ­ø—ĪEʆGʈ‡¤ʙψɏĬ¯üeԼXǼÚu֞ċȔ¦ʀÝIJp̈́ŚŎªþ[մèΒĞǠsĞbĞœŠ¢ŒÜÔĖżÞńÊņÆ؊ɢϐ‘ɖăɬǃø‹Ä_ƆSňKàtŌžǪºèCŔǚµŎąܥ਷{ĹJğUćū¿ĩ±üɋʀƿĄræàƀÌðD¾_ŔIŜtĞJŠa¨aIJ}ǺŝÆ]Ζ˰ؘGΓļķÎÃĶŘ‘ÄՊчƾʕƻij›“kïCūnţYƛrǡĆħt­[ɯ×TËSƧXă\\ŷïWˣůǍÐĝC_[ƒ‰čBo{Ћvʝĉ̋ͷ`“X¥—³ѡɿѥËȱWƱ”ƭ{şƿɃŷñáǟÙȋŏÅcҍÄ˽Öğ†ćĀó ʣJãfœcзבѾҫ­œ"],"encodeOffsets":[[114564,44729]]},"properties":{"name":"Mongolia","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@èЦÏō"],"encodeOffsets":[[149250,15497]]},"properties":{"name":"N. Mariana Is.","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@MˎÃȨfɜĥ¼Ž఺ƽӌɇΈɏࣤŢĒࡂࡄÛƊŜАр֦ǷԄÔʈųƎʘӦĭఐÒƞࡏʄס;ڡz•̒Əո᠂ࠒκүبŤŌơˆחʛҁʂЩ;χƮśŸƯº£ÞGÒZdlSʐ§ƚ©ÆU\\ÚƺĮǸȬˆĠ| ŽŠČĐࣈuzgNJƁǦǛɞħŢŅƌȝɈͷǤÇȆEĜƹߎȼЌ®ĐƖZŐEȈHȤQðkºFÊhżŊłCƞéþÑ`½Ī‰֤ŞͦťƚˆƸĂǐʊӒijиȸۢɊƠüЌ̚ŰǓĿēĢÅǍуň֟›ЧĀţť̇ŎCvख़ĶûÍ˗ňİÎʟȏͭ„ũ֕ߵNjÍ®šٓҋ߃ɧݳйʱɇ҇ٵş¨wţ͍ōݿۍʣĤĚĵ§յɸ˩ʊ܁¢طʵÖ˶Öŏž׷ǣۭƞu©ȭлӭၽ۷̷ћɒɛĘƺkƙ™ӟEe҃YŹzñK"],"encodeOffsets":[[32884,-27483]]},"properties":{"name":"Mozambique","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ÃćĐŒƀ}Ƈ"],["@@ŷډṿL³Ʀ‡S“™k£Bĭгíً¤ɃɫэЌʯǙËƱ™ȽűDž¹oiʭŦ˛Ȱ̵φʯЦ̅ĨĥqγζׅĆٷljЃ ǝ˝ěmƯƒá@ϖÔ˄ζઌƵबʧ̞ǬŴŝȠيȁΦljeɇϞş¥ȝ_þČβพD६BϪBȖ@Ȗ@Ŷ@QŐOĘQŢSޗՠ·˚ĸưŖöƀĔĴà¾hƾx̌ŲNц@΄@Ҝ@Ŗ@ɮ@΄@Ɍ൞@޴@̼@ƾ@Ǡ@@Ī@Ǝ@ȌAȎ@ǖ@̪ἢኑۋ@ˋA˟@ʳ@ǔก̶ᨛǚอîطzȻzȽ´ЩĴŃŲƅ"]],"encodeOffsets":[[[-16766,20180]],[[-5488,16674]]]},"properties":{"name":"Mauritania","childNum":2}},{"geometry":{"type":"Polygon","coordinates":["@@ӓ~Ė–Á"],"encodeOffsets":[[-63640,17143]]},"properties":{"name":"Montserrat","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@˩¶ĈȲȮǎŔȇşɭ"],"encodeOffsets":[[59035,-20976]]},"properties":{"name":"Mauritius","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@ŏFƕY“YÍȻЋƺߍFěÈȅ͸ǣȞɇņƋĨšǜɝƂǥžȃďࣇ‰ċŸğ{ȫ‡ĭǷÙƹV[ªÅ¨ƙTʏckÑYÝH¹¤ ưƭŜͽψʁЪʜ҂‡טŋƢاţЧՄƕËƷːŃĊʠ̬PѰҌ̔Ɵ’óǐªΠÑɰˆ\\Ĥȸñʲ̴ʤĝƌ_’QĮǻǔtì\\üďĒďžŷeÙǸࠀəĚƦ˚ȣȾёĈҩ¹ʍƔɕĮ« Ínī"],"encodeOffsets":[[35799,-11856]]},"properties":{"name":"Malawi","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ßnnˤ²̑"],["@@ûˆ²ĖŠŝ"],["@@ȡa¸þƪÛ"],["@@ćW°ƺþµ¥ī"],["@@ÐęƥăćžǞ "],["@@ȪÏǎʹӀϡˌҷpྕ̼̑΀ܛ‚˭ŕrŏǰTƙʟIǷĵĻǼՉʺளࡼJ̲ӭ״ä´Ʊ̎ɫഢȋϪŤȮìŏΆ÷ĴǷưEÑЅŎőϊɪĺŇǐ ȒΖ"],["@@ЉƖӯ„ջmƳŽȋঃǩQŇŋ‹ɕĊģͣɭšɩˋѹԟcɽǕԭǖÁŐϻOʑĵěʝɧōשԃǁ܏نīʀúŎȢɛР›ܾ˕ǍƌȪӨ¹ȪȢDÌ̤ఎΚ޾ࣨŞ̊Ӹүƾ̘ÿ˚ɾƴäѓƸ‹ųҠȠ„ưƈœːƺDŽŘÏŘæܺନĎų¿ȃ˺̨Đ{ÄəˆƑìƋ¥̉ţįфƚĦDžƱَå͊ČȰǵՆƯ˜ĕŸůʳŗշ…ÙƇ̈́˛[ĻґŇʽþĹơ"],["@@½«aŨǚüFŋĿ«"]],"encodeOffsets":[[[114063,2474]],[[106723,2798]],[[120714,4287]],[[102696,5422]],[[102245,6621]],[[104552,6393]],[[120397,4271]],[[119954,7341]]]},"properties":{"name":"Malaysia","childNum":8}},{"geometry":{"type":"Polygon","coordinates":["@@ݨƈϪ‹ɦ§Ɏȋ̋yͅșʋ|եν͋ϰስˍJᵥࡃFᙵ@ᲃ@šυĻȏƃÉƙë‹܍¬ܧǂċǒVȜƝŘōĐĻµ·…ù›mŋµŇ‡ŝ폛ؓնͅӤǝ݆Ɵdžʼnઆ˯ۨๆࡗಂʁؚ׭੐ֵި•ɀRфƈnĤ¸ǘ•ĘE’PDŽMՌȬʠËҔ̱ᅌfሼSҺ͹ਨ»Ҫſೠƶࢴǒ"],"encodeOffsets":[[23942,-18064]]},"properties":{"name":"Namibia","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@č_@ĈĎç"],["@@ņ]eƝŹsŷȼƤ²ný"],["@@˟Ǝ‘ÚƂĴőêȰYĒΫ"],["@@Ȟ‰ٌХЄл੾ەxțǑ­ʱĶಓ߼ُںğ˶Ťĕ"]],"encodeOffsets":[[[171566,-23166]],[[172044,-21944]],[[171419,-21668]],[[168144,-20731]]]},"properties":{"name":"New Caledonia","childNum":4}},{"geometry":{"type":"Polygon","coordinates":["@@ǠఉΦӋgȅ͂͗ȓωɕᠵङঃޛଵ¶ȷĎίƭEēϝȅǻĹLJȝ౉ɺЛ“ȷ¥›UӍϫΏVϛðʛŸ̡Țŝ€ƕ^ؙ˱ɅĜщҨīJ̃Đ̅ĜÛ[­mĵáӝqѡɳǙֵʧȵ©۫ڑׂσƋp˙ˇΌźƂķȢґÇӟ΀D˖DzMө̄ǁɦŸɰǿɄ®ΐؘÐ̒ʒොθðώÑ`ń˖ȀɺրĨ՜Mᅬഞ˰൪୨␤ᕨౚ˳ؠһٜ̈́"],"encodeOffsets":[[15339,23549]]},"properties":{"name":"Niger","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ƇoòŎÖĝ"],["@@Ɇěؚ˲Ɩ]Şվ͑ϜïΐUӎϬœVȸ¦М”ొɹLjȞٮ̀ƮF˜ϑŎƯĄϹtƓô÷ȸ·Ďŭ¹փ̛ȋ¹gïGك÷ÑljɡƏɥķηŧœÑЇɧř­ĻÍΕqËʼnųȻÓýƧßŗǻ׋ǧȳ•ÕĂŽǡƑÝ¿{ljͭɑ¡hÕȬßẩʊljƻĵAó^ilc oŒėÙƏı­g“o¯ġÅıƛħЯсʁܷǙˑɿƶº̋ձƒħŊȷěǩƚàǝșĻŽˬþ̏ȑƒ­ŖsœʓPļćŻǟ¼͏ʸŝʤÃƸþrę”CŤƴŘƍÓƽŎɎàŇĄǷÇɃ͔ί˔ࠗâɢƞʋÕāŅՇw|ȎdÈl¦k¼kæUńˆôK˞`xdlB„çݨÔ֪ɨˆɾאɸȎœͼŀRÀDŽßƌ‘ʼk”±´ŵǾFĖÂՔÄÎÆc٤ʨȶǚֶѢɴӞrĶâ®nÜ\\ڶǵъҧ"]],"encodeOffsets":[[[7476,4525]],[[6968,13423]]]},"properties":{"name":"Nigeria","childNum":2}},{"geometry":{"type":"Polygon","coordinates":["@@Ñōǥ§׷ʼɳč֥ȴƇŃྦྷེîàƊĹò¶ɺZ¦`úǺœ˜æ\\ÂJfz«˔OÂX¢tbľXȜgž^ĀŊòĂ¾˜¤Z´íǔķ„PhNLdE²¤¨ЊˢŲɪǖȒǸűĞwݸȲĊĎĸ€ɐ_w‰qÁijÃöÍÛĪÝĤ΃ȋ˿Ż֩²ރĭ¢†ɈƉDZØБñˆ½Ǖľ‰¬Ƶǹ˻Ȏ͏"],"encodeOffsets":[[-85649,11180]]},"properties":{"name":"Nicaragua","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@ũVĪ̀į"],"encodeOffsets":[[-173878,-19541]]},"properties":{"name":"Niue","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@£ħīɪƐƁ"],["@@˗ƭЁŽçŎ݂R"],["@@łù́¼ɀ~"],["@@Ʃ‡ƪŮ@ĥ"],["@@ٷżʜ²ѾĿɧŀƮ\\ȣǚҊоʊՎʖhЄʸѾŚو†͎ƃƑՍ˓ƒŽŹʌëʽʥÜħ܏Ƒɀ̑ËʫɭįdžĿ¯ŻʥrĒ͆ӧłƷdžگé"],["@@ŕLͤžɍ©"]],"encodeOffsets":[[[-69842,12437]],[[4328,52620]],[[4044,52982]],[[5004,54345]],[[4328,52620]],[[5454,54668]]]},"properties":{"name":"Netherlands","childNum":6,"cp":[5.0752777,52.358465]}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@Hıōɒņş"],["@@ƅCÀĤĆğ"],["@@ʣÜɨ¶|ő"],["@@ƷhВİlč˅‰"],["@@ЭJʀĞǮħ"],["@@ů­ȴɂăǓ"],["@@ȌŸܱȇÒƒӔĖ"],["@@^˛ۉ Ր˲Ɯµ"],["@@ӌˆdžȱҙȗ෽DZॾΦÐάӆɒʍح"],["@@тù­ʵϳAͽƷɭ¶Ljʔ̠hŤǸ"],["@@Dž{ÎŜĸğ"],["@@˃Yzńʘ`Mʼn"],["@@̒¡ɯǗҥȭջiȀǮ˚\\Ϫϴļƫ"],["@@Ȫŝ΁DŽƘ¥"],["@@ϥɡǿƌԘƠÎÉ"],["@@ʩIÀƼȪƱ"],["@@ԥɱЁu̩Ţ௒Ɔ"],["@@QȵֱĈýǟחœΟɵĵžЦʞLJǖ୧ͦԵƃԏRϟȉ˗םڳͫࣳǴѽƁލÒۉҮѷ¹@ơϋIы_ȚƟͅбඕǘ͗ӷӻŜғǫտϿɶ̷ࠗӅ¼Ʒ߅ƩÁۣ۟؁άįÂʓƱƅٍ¼ΉÙԯ͹ƧʯʮࡋŭӃ،̳ƣʕ΋µʚҩđ˿گѝİʫŽ̧ƟaéńҭŮȩӤΓى˱§ʇżČšఫۛঋķŃńʋ­ÎƔߟɖŵϜҚĕɞŊɝ£ǭŬÀǜ϶ȼਯ͓ÌͶȘŲʦ«ώƂУœԴЬȌPŸǩЀ̠۽ƓࡍקºϘОˆ͹èůȬіȰͻıŅÈě͸๨ĔɖǃDŜӄĴɑøĆŔɧɧӕľǻŽ޳́ðĕȶ˰¬·ȌDƘࣰù׸è௵ÈĽȊ٠ɎƦÉк¸Ħ¼ҳ»ǼǠદŸĩĞюĊ઻¥ǦǬՌƚѼOѮȵϹˆВƲɱƀǺĒҺOhőҔƒ˘ȝتЇƎժƲǏĀʂĖųžͣŅjŵ݉ɏЧǎ࠾ײߪ˜ĠÎ˱¹njȆ֜Ǡ̊ã΂ȬлŽʃĂҰԼ̀°ȽŦੂǔޓÇþΈؼźʵĦϨǴ઴êࠉÌѪʮՎȏĈƢϋæ²Ǝϗď±ŪˮƐЦqʱĶ׊ƈʮ̇ĝμଌĠ࢏ĚೲԾƄ˂րœʧžӪɎѲ†åָ̛ѪɩԥζǮɆkįͤҔqɨľҖƭԳͰߺ€̨Ģ֚͟sȊࣼдƁŀͨƦԜƃцT؋سലۦÛѽͼĐǎȜ̦¼ʽȚ̌Ũڜĭгʟ̾SáΛ՜Ԭހǻ˞²݈έֱű௫ڠīLjȽʞUŲŨdžŝψ¾"],["@@Ңūҩ‡ɣÖɬĞ"],["@@ߞ˴Aŕߛǝ"],["@@̝ļ˔HŠŃ"],["@@μeɌ̉ॸß˭ƃຈȡጇЩŌʊํÿ،϶஥Ұ୊İ"],["@@ܮͅ࠵ȘӁτ׊ʕ"],["@@ղMີ«ԺĬҊ±"],["@@ࢢęƓΏؔȀʀ˽৺ǥ׼¨ٺ̭෱ŋ᠏ၽይվ̵ɰטbȎƐᄨĞijĎᛗŃ·ɎՄmఐ˒ਂ˜үŒˬƈଫDžƒʢ̱ş˝ú§ʳѷť߯ƒ຅״ߪ‰ȩ̒щb̷ŻЃ͠Èɺ̄åҬĔӮěOĒஎœîũਇũٺJגȗӂϢเۓѷצΰ̰Ҕţ"],["@@࢙UᅮĠओĉ"],["@@ୢǙƊ̒ҶÔĚʋশƤᓂǛ˴Ʌವч෋ǫ࢙ŒƲ၉[؛üϡĐठƂႷXЁƚԎĜ߃Ěபṳ͞঒ȓ"]],"encodeOffsets":[[[5208,61755]],[[5078,62551]],[[8298,64858]],[[8675,65196]],[[11501,66423]],[[13284,69504]],[[14206,69904]],[[15573,70598]],[[16139,70207]],[[17924,71267]],[[30676,71472]],[[21278,71772]],[[19718,71749]],[[20242,71902]],[[24183,72243]],[[24595,72261]],[[24004,72516]],[[31611,71459]],[[26201,72850]],[[-9168,72540]],[[19681,76177]],[[22127,80482]],[[11521,80498]],[[29745,80806]],[[17190,81825]],[[33307,82042]],[[21400,82176]]]},"properties":{"name":"Norway","childNum":27}},{"geometry":{"type":"Polygon","coordinates":["@@R¡IJƃžķJç¥ś³ſy‡Yקmɫǐ˃ĵ׍Ƕdz›µŠõǂáVɵĉčtэɲ¨BĦ[ž¤Ň¦ɁäśÂəĩçfǏ¼ĕR¿i]…ã‘ҳŰmރޡ\\ƫ_ƏîƧĞي£Z—]¡q™OֹЀӥ˄Í`m{a»Nÿ°ĉ´ŽĜg’„ľžĘrÂÐpļCĘÀŰîƄŮƜɪȂzjº‚¸Pǰşà®ƌȴȌ¦Ǵqǂ‰ƪə޼ϛάί̒ĆðuâƒvÁ¢ĵ®Ŀӊ̏¸MǶ´¶M‚UBióƒģ†³øoǖaɤDæµæíæũ‚½”cÎr^۸€æýĢ¿äЈŒĺ¼dÜOzq€£Ƹ­ð‘ĸ÷Ųa˨MȨÒȾ_Łأ"],"encodeOffsets":[[90096,27786]]},"properties":{"name":"Nepal","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@§ÓėØƀC"],["@@lë̓ŒDzɨƔiǝ"],["@@ďÑǔŗ׿ǁɼ̐cǨƠJDŽƕ"],["@@šijʼn¸ð¼"],["@@ǡŁuĘĝoƶȫƳûĩäØƺʗzʂĚ͜o"],["@@őµƸǪ¥ų"],["@@ۦ̖ů̇ǜɺʬsɛȇ˨Śʧ˙\\ȭǘÏࢽਡԇʝĤéǩğƖjĨƩɢ±OǕӁ€mĮƷşɕƔŨǍ߃̱āկūBĪŅ΍էÚƽ̙Ï؛ԡ́Í߭`NjȲ̅GʫǼƝý՗šƺȬɡëÌŸȍÙIŐѠĴǥÈnjĪɍWRÚƪ¼¥ĆʊċØĶǡƖȞ”ÃĴǺŖ²ŋfǀʪƨĺÍ©ƐԎЂ؆İSŘ֐Ȭ΀̼ƀeýØʸ`óêŢ¢ÎËȢʾ–ƕ`DŽʈȢƢ֔ϲɌLjӺтΰʮAǯqyĽʆƱńα"],["@@Ǔ¾˜ŞżǛ"],["@@ƮútđՌǑƁƬ®ɔҏƹW΀їãҁӞŷðdzƂJç؎ʾɑ˰އঔ̉آςѸŗɥܟʕƝÉѣ͕Ɣϑůř˩ƞıɣПܟࢱ֡ͭŧnjʅM_ǜȗÇѸ֘ü˨ĉƦūƎࣙϊƝdžæưҮƪǘƬǢݜńü˽צŰįǐŌŭŠʱDʋϘǴğQ̦ĿÜ]ïǻńĹǶFğȾʹĥաۊǶȊȿƳ¿¶ǓȦØDŽСҼ˴vãęʲͱ"]],"encodeOffsets":[[[173239,-53757]],[[170211,-51979]],[[172181,-47986]],[[170987,-46264]],[[-180405,-44790]],[[178089,-41844]],[[177271,-42269]],[[179757,-37149]],[[177428,-35773]]]},"properties":{"name":"New Zealand","childNum":9}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@åO@ńȲ˾ÈƏȓʡ"],["@@ɄёОЩ൲ϵրܙͦŵmʏέ؅Ѝ͕ΟץɝdˆƦÙSʵ́ŭӇĈ։ࠣɛωٟݻŧȉɏhɝǯʁ࠷ƒϩȵѱĥछጊᠾ࠾֐၌ϣמ\\˦˨چÁĺѢĺ³Ÿƕx†ՀǤðÂǷ˘Ȭ"],["@@Ź’n̚ñ`˨ʎĩי"]],"encodeOffsets":[[[60132,20704]],[[57742,25579]],[[57650,26267]]]},"properties":{"name":"Oman","childNum":3}},{"geometry":{"type":"Polygon","coordinates":["@@MΥ٫֕ۖߕÄ޽ںՓe˂ȕDƳ¦“Ȟ_šd€[iű˜ĩljǖJ̆Ʒáśī‡É_˧şĕ·ãÑ{­_©ÒǃZ·¹ǡaÙüÕ`™N…ĻÙŇǓ@ˣ̻ġíaé–ÏR¹Ÿ»ÝËΫƅГݽһɷ§¯ƍ̍Ʊƙ·ʼneí˟ý̛ʻįÛIęº¿Ƙȍôƅù§¥āŻŹȅ˟ʣć̵ըɋ†Ǜ£οƐǟ¼iľI´HÄjàHȱȎ̡ÖƟÐőv͛…u‡KŸÚšA}½¯D•gååa§O³Pã„o¬R°e‚ɏ¿DžËʗĹõNç¬Ù¢īDǫMīBËdÇ[ëh‹u‡C¡¦kMg_WuGʧȡFěaĉmıÑ£ēɋŲLJų̟̂řӨϿĖG̬̿͂ljĝ˰£ළřıĻԋȀх¥Ãţྥqjbzêrʤ€ĜSºNdΪbnvŸ|Ɯ‚¼ʄŤĪWÔŒܚƦdƠ²xR^Qǖ Gx›²»Š{RΏZ~҈iͶܹ̂ا࠸ıĸDžǐ͌ğٶǿЎĹࣼöҀėʜŸל^ॖʴĮ߀МϮԼyʈĠƅƌӨʠξ@ɬƙΈʬ‹иɔӲٔɦ̹؀ٞ¯ͮÚːʼnƊվո£̨͗и¢âࡢԨ۸Ŋ"],"encodeOffsets":[[74844,37750]]},"properties":{"name":"Pakistan","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@Ƚĸ’Ŝê|łʏ"],["@@¿ƌÞr]ƽ"],["@@ēƇʂѵ˽ͿȉŐśЁѩۨŒ~Ūʜ͎Ʌ˵̨ĽċƧĞUųĕɰӓ̴ΝwƯijŇDZƙ׫͍Bŗϔӛսɱȟ¨ƍԼǡɱȣĄȉΔγ¶ÛĮϋVƽÙ[ƧůɢƔĮbŠUŪ½ĘˆÄżĤ¯ØĉÆ·H@͜^jŠX|~`º˜lƂïäЭŊā€ǿŶc³ƇƖąʢnĩƶҐ̟ѢĚװ˔Ҧ͜శ̥תӝ"]],"encodeOffsets":[[[-83561,7509]],[[-80791,8473]],[[-79231,8867]]]},"properties":{"name":"Panama","childNum":3}},{"geometry":{"type":"Polygon","coordinates":["@@Էσ‡ȕˆ‹ŽŗȳÏLŃo{iij{ˆsª™Öë°] {WýƶЃŶħŒgR‡I«°ñĊÅŐƏĆġHŃĵũijũۤĉǖбۼ^ȊŘØ„ͼ˺|^Èty©m­Mݗଢ଼ž„À~ê߸…¦OªFÐbżÄʬĸEƒkĄFݦಧʙͅāګǠУЩՁ]ƗǞɯȽͻǢя̾ǃǃřXƓԓҷk¡ľşVÑ@›@AÙÉĉÛƕ­¦ʋĽǹЯśޙ֎Ǐ͚޹Ӱ੕юୁڒίњͳɠω٪ݺˆδԝ࡮ˏʐÉͬ΍͂đϜϙغӛఈԫڀԯࣈ७ײmƴȞ†¤Ǧϡߺ¬̆پۜƮĞæǁ¦ˡ‹e‰q‰³őv«i¹b¥Jˆ‘ĎEùћ·T‰°”Cø ĄĘ¸^ÚĎ¿IJ±¢}ðRÖZ¼¾^ŋžă²×ÎóÀ{æÁ˜l޾j†²^Môf´ž¤ƨĔŽ˂ʬܐĖÙ͊Ь঴ΚӸΰѦԐŴӎZŽƄwS̤ƑƴÇƈϤіLˆʊgǞü˰űl›t­Â‹Ú…¾»”‘¤¡¢¿êɩ¨ÝŒ•NJ·ÊͺwÄÑǖ©Ƙύʦř–ϓƒ½¤¯؈MȠتŽÄ¼Ä¾¨\\njÑƌġǚlêÊòh¸hɚŕ¶ÁÔYʀő¦¯äƒÌe՛ऻǤíšEÄh–€’J”}¶ÖƗŴģ¨×KŁu£KÙ ġ]ß°u¬½šŁcDžRß]ƥƩܷŻΉȳą‹ĭīśĝùµŏw±yýљƵʡŸăuÍĊ̱"],"encodeOffsets":[[-74892,-6621]]},"properties":{"name":"Peru","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@έƽ̀ɚîÛ"],["@@ɂŕĭÏΗêʄļ"],["@@őYŃȼȎÞɠśȗƣ"],["@@ōýbĦĬg"],["@@©Û·ôržêfFƻ"],["@@ËoKľØč"],["@@šUWĀźé"],["@@éœķöǢž"],["@@ƾ™Ĥ˙Ƒ̙Ȑģþɿo̵ŔŽXίͧ͝Eҗ̩ࡰŕÏʷӕǪȋâУˑ͉ĩЄʯǍ׷̜œƠýӶȆ͸ғΠơSďͳʛʘɅƝ©NJƧ”Љہƫf‘Țˎض֘DzŜɸ͒ɨΒɩ¥͑ͰƲǨ̶˜‹ŚΆɮēÌƄʐWwخ҈λ"],["@@ÉÔèȄĊɑħ…"],["@@Ѕǁƽrijnj̚ˌƌrȮŏdȩ"],["@@ǏǢƠ˒pѳ"],["@@Ļ}¸ƺƀÏûë"],["@@ģ¡AƶƐŐ©ɣ"],["@@ŗIŅɖʯƎƋ˸ÒŜ͔ŀΖƔ͐ɰĜɈ϶ţͿޓWɑƞ˩ǃǫ"],["@@`Ѥո઴ƒܽʯɫˣ֭"],["@@¸ŏáBjŎ"],["@@ýÓŎ̄༾๜èиȺ˺u̡ƈϟˉơƫɡ·ŧ̅ևऽۇ"],["@@űč´Ŏþ"],["@@̘|ĆƉ[ΧɊБŁıŻƬ˭ȷŖLԨĽƲǻīԦȴlj"],["@@ĿMĻưŴlĈǍ"],["@@˼g´ŻɜÏȽˇʟƒƓۇ͇Ų৖ƿǰĨ”Ͼɽ"],["@@ÿYëɚƦ‰Fǵ"],["@@ņ¬òǩʯGĿʖǸŏ"],["@@șŪƲŒ¨Ƶ"],["@@äǥǺʼn™ԇè̙ƌǁхĄǕǒįǼÞǨң͚ŵΖߐ•"],["@@˘ˑJǵӑ϶ˇʓâքЖʝ"],["@@ãȽùȎàɢŦ°§ʡ"],["@@HñƁʸźȅ"],["@@ðŷ·΀˘ɇ"],["@@мŸːʧdбū˳Ɓå˃ʖɫքʿȲÀĖʮ"],["@@ǚÝġɑƥľîDz"],["@@ƭčŗŎƾΐNJǧÁȧ"],["@@č̋ÿ͐ǎƒ"],["@@شˏnj‚ĞƆIJyħڙ̰ґ͑߃ґɃXɛǷ́ʮӳËŽŜ΍ϐȧÜÈóŶάƜʴʼnƘοǐðnȎиȋSīɍÛɨ̓ƒƃ̜ÙéϿƵļÒȐՙņŭͮӋϺŃkǘЭÉǛȉ˞ԉΖɵăƁNjȽ~ɉǤǟãi͒ʲʰfŸ̛ȤJͯű{ǁ˸Ɨ¶ʹ୼¶ÒˢɻǬÀU౺ȰܶтĜ"],["@@ă«IJƘmī"],["@@TùſîŬL"]],"encodeOffsets":[[[123137,5383]],[[124068,6222]],[[125024,6583]],[[125888,7587]],[[119890,8073]],[[120172,8412]],[[127803,9363]],[[126667,9460]],[[129031,9545]],[[129085,10001]],[[127585,10023]],[[128707,10153]],[[122795,10738]],[[125594,10725]],[[126087,9282]],[[126332,9677]],[[126728,11555]],[[120127,8643]],[[122739,11802]],[[127565,11616]],[[127600,11769]],[[125437,11894]],[[122920,11985]],[[122983,12460]],[[125599,12605]],[[128246,12829]],[[126686,12583]],[[125025,12652]],[[126746,12753]],[[126241,13162]],[[123602,13803]],[[124841,13866]],[[127339,13960]],[[124963,15366]],[[124008,19063]],[[124848,19349]],[[124438,19827]]]},"properties":{"name":"Philippines","childNum":37}},{"geometry":{"type":"Polygon","coordinates":["@@áŦŔƾ±ˣ"],"encodeOffsets":[[137826,7560]]},"properties":{"name":"Palau","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@Ȍġǧ™ɡĨénj˨ŷ"],["@@ƅÁćÞɎ["],["@@]ßĉ’ĨŽ"],["@@ǺÂÅȧɫĒƷ͐ʰʻ"],["@@ɔÑĘȿϩ˜ÔöÑƨü\\"],["@@ȡŎĊžĤµtȕ"],["@@˒ġ^ŝϝǘĮ¨"],["@@dÑijʀĦĘU˅"],["@@ɝĪɔoJù"],["@@ȵǘ\\Ŕɖij{Ƿ"],["@@ȧƧ̿ŢšΎϋ̈́}Ф̬Ƨ̼ѱ̘ȡŔʳ"],["@@ƝŀłĮœȭ"],["@@ę˔üĆĂǡãǷ"],["@@ŕ¸Ħņpƽ"],["@@ǜìʐҝЙ̯ɅƆʁÇďǯę̍Zʉً̯˿ۏwɩDzʃٗϔĂǔުĥЈ¼ŌÜņμä·ćȧĢǷ׼ÞΪФ̂Þßֶ˔ă"],["@@qó𳥬€ù"],["@@AᇴħƔĨͦCᲘ@njྴׯԖġҶ̽ΊiԠѯȺ‰ζοkӣ໒ջȢɏ˜̇؏·ƑħȤҙ޾؍ĶϙǢşŐ̙ԬhÄϹؼDžȿıĨǧࠌȇ͹Ñǜǯ˝ŗʫÞəȌအʄكִ­ˢ˩Ğԇܾࢷɲġƞ̓Ä̯DžЧʠʌНĝí˅zĄǙࣷķƩżşyɦƣ˖r˂ŇɠʍUǗ؁̭ΕƄअ©ƁĒ"],["@@ÕÛŷǒÑш͛Ҧ৳وˑøäƔ২֭ࠠܕĬȷƕͻ"],["@@ɫBǡƾɠøǞïPLJ"],["@@̶ĉșĻևuĠȠΌ\\"],["@@ȁèˆIJƺǙ"]],"encodeOffsets":[[[157221,-11751]],[[157984,-11634]],[[154521,-10818]],[[154707,-10260]],[[154142,-9570]],[[153954,-9721]],[[156295,-9174]],[[154734,-8943]],[[147033,-8685]],[[151579,-5966]],[[159701,-6847]],[[150709,-5562]],[[158359,-5563]],[[149524,-4839]],[[155562,-4399]],[[156335,-3208]],[[144360,-9337]],[[156637,-4870]],[[154048,-2725]],[[150598,-2007]],[[153360,-1590]]]},"properties":{"name":"Papua New Guinea","childNum":21}},{"geometry":{"type":"Polygon","coordinates":["@@βছثНВȷ¡ѭºǩδοċÁĀɹıķɕ֥ГˣʗµÉX¯ºʼnX·uĽŢ÷ʷQÅRϟņ͋ǞҹNǯēыÐʱǡʧpdƘ˧ȎʗǕˇĤɩ̲҅ƀŹÁȹŨÚdžʋ«҇ƢĠDž̍œέ˒ǬŴřèɱ™࡛͸UŅñqñEJZĔ؞òy˸{zƱ¼]jzêŗǤŴȾÓƘÃz•Šgž`Ò¦ĈėİɕŘĿĄV°żĀÚâ–þDdDÊŽϒ˘ùsƸ̅ņဌ˸̾ɜ๜ʆμŻ˕¼ʹ̿٤øԖ࿮»ӂS†N¶ÐKêoŽex™œIêcĦ“ò‘ìµ€ǟ"],"encodeOffsets":[[24049,55235]]},"properties":{"name":"Poland","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ū€ɸGŋw"],["@@тÁPś̍ɥ਍jÉ̶ĘŔࡼ¯"]],"encodeOffsets":[[[-66995,18541]],[[-67716,18888]]]},"properties":{"name":"Puerto Rico","childNum":2}},{"geometry":{"type":"Polygon","coordinates":["@@ƈȝϛijЕЃ¡ܗ̯ŋۣԃߋ̉ơӗ͢ĻӴϯ˯˅ߕqϥуɝĆɅŕ̇ȲΉɕŸIJ˓ôǾŴџ¢̈́άФň͕ĴȮО£ȨӯȚŗťɵ͞ѸϤऌϐوېDzšȎȥࠀťŠȂȳ݆͊῭͒͠†ǚҨ˾ęLŭɾǫ"],"encodeOffsets":[[133660,43557]]},"properties":{"name":"Dem. Rep. Korea","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@мġ˙ăǩˈĐ"],["@@ϼGQÕҙAģŌǔ«"],["@@è‘͝GÿĢͶÇ"],["@@ǛÖŨ’´ħ"],["@@ʻļɒpªū"],["@@ũYlĒľ÷"],["@@έƣٙĮͳõƸͰÉࡠǴmŋĀΏÏ‹ǬȖøȖ˨́˯ȃ›ĻĎĘҒҌٸŸ՘ÏߒōÆĢƪіǒĨ˙ؾlɎŮѺÜɧˤş׹ѭIJ֓ȇƧŘũáȉţĭΗiҎԗ̃ԉȦɵŰNУϭŽң"]],"encodeOffsets":[[[-17603,33658]],[[-26264,38750]],[[-28822,39376]],[[-29328,39450]],[[-27725,39571]],[[-31884,40353]],[[-7583,38072]]]},"properties":{"name":"Portugal","childNum":7,"cp":[-8.7440694,39.9251454]}},{"geometry":{"type":"Polygon","coordinates":["@@lÕ\\±„‘„«‚{p¥pljîʵĥڧYʻলŷ˞ƺ¬_˜ïĚñ²_ǖ@ŤwĄđNđňƃâޅjŸº¹`ė@Õx羅ä[üYĨhĊp̜ƊƼõÎÍňۏɑŽۅ‹ĉřdzIţaߝʭɋͥǝȓʑßq¹ŸË…µFåËåµÙCƋúdzHɭțนɾν‘‹IJpÂͬМ”˾ȨɈ͊Ӣɑ˴ଫӘףЀߕȢȳǜ׵ЌΓӎƃƤƙöíºB|sx̾ঘBцѦޘเ̈ޖVވѿj̅"],"encodeOffsets":[[-59555,-20648]]},"properties":{"name":"Paraguay","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@đëƒì]~ɼɘ —D_ƫȝ"],["@@ÐȠɆŮÛÊ×lÏkkNOdŠÔ…Ⱥ°Ƭ°ĺņØĤkêi`•æ£ÊKjƃķّӏģ"]],"encodeOffsets":[[[35173,32044]],[[35718,32121]]]},"properties":{"name":"Palestine","childNum":2}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ŨŸIĿƅŊȥE³ƞɌ–¶Ɨ"],["@@°£Ə¢ĠB"],["@@ǒŸʳóĢŔ"],["@@ËÈրIć"],["@@ŧemŎƴG]ğ"]],"encodeOffsets":[[[-152905,-18114]],[[-146883,-17018]],[[-142360,-9927]],[[-143437,-9652]],[[-143434,-9124]]]},"properties":{"name":"Fr. Polynesia","childNum":5}},{"geometry":{"type":"Polygon","coordinates":["@@÷iíkÏ@³RlÓì©Ģ€¼XŽýіȾӨɒƠʀȿ·ͅľЅƱ͓Ƈ½"],"encodeOffsets":[[52499,25198]]},"properties":{"name":"Qatar","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@ĘēŒ¯˲©MÎĦiˢĨƲbƐ£ŚġůΕёï Ǿǡ³ʱধ̧~˳Ǹϫ‚˵ŮܷƇ׿˱ᓝƐ§ĨƈŊ˗ƈaVNjƾºĘÆlæM„^YŠáœŧ²ū}ųīěgƷŀɯšħäƍŠCˆvP¶HàNZjƧøĞƲ…l՗ɴgʀ]R[SeUeE³œÑøȇĘįŒrȒ„ĘƒŬĨ̤Š݆ਈ݄ψƮºìæÂEǤāȄLߚÃʹǧТƾȌlȂˆɈtÖҔ¤zúŘvƪ~̦ėՐۃϪ̥Ƙ˱Ƒ࢕Śů"],"encodeOffsets":[[28890,46542]]},"properties":{"name":"Romania","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ýÎɚbƛï"],["@@̢µջ˯˝ɑ}ƱāǦظՄ"],["@@ֻ˝ɋ[ٓӕ̊Ϟ՜̶ƂŎķɤjШȒtŭȧ›"],["@@ȭ£ѠήӺƾܫӇ"],["@@ɻËӆ˂ʉȵ"],["@@ǗcǶ̒]˭"],["@@ѱɕݬqǢϲĒΖ̸ƧЁ"],["@@ȥØǬŊĤeéƻ"],["@@ӂறƙ݉ŦϛѢଋݮൣ֑ԠˇÀՃħѿृa˫ֈߋɦ•Ă͡ů˧űѾףŢсڃȷ҄Ǫׄ×ϔǾΨ˅ئɴیÛࢾŠӼПќ½ҌǐѪҞˌƀ͒¡ưϖ̷͔ΪĨ"],["@@Ļƣ˹~϶Ŧ"],["@@ɠ·С̵ɑǮȕé̂΀̨ĕ"],["@@۲ǙдIɐƿşʷGÏðŕԇFࡹ‚ಉÊ̶ϲҞÖ͊ʖ¶O̥ʟʹánj‚ ˢ"],["@@IũݥԎѲdyū͸˛"],["@@ĵˆǒĚÛš"],["@@ƏÿʒьھǦ˜˯ࠗʁ"],["@@‹ǣȿƤʌ€"],["@@̳ÀűƾӘ±±Nj"],["@@ަƻƲǩԄŔƅɔÖӝȒ܆ɫ¿Ïሴҝ{ˑ̺äŸóÙ؍ΠïĠNjʺňhȱʔǤϩǔŪʼϵŮܶ°ѮÛƓĩÄĩÈź֢“ХĦ৲ŏઊӵāāʬž¶ĿϺu­ŧ׫ŏŁȳىǂˆʣڧ_݃ƼҨȍÛƯ̑w͂—ÔƁܹșʆuċƋоǷ˱AƏĨµǕ˅©ɀͷƥ۹̒ۗîϫǬȩϮ߳ŤεġޣOѵҌNJeȂ͚˹Ƿɳǂƹdz̗lęʃπ͑կϙ@ȶ@ȶ@ȴ@ȶ@ȶ@ȴ@ȶ@ȴ@ȶ@ȶ@ȴ@ȶ@ȶ@ȴ@ȶBȶǜ™"],["@@՛˛׹įЅÀij϶ѴȎ͊b࢒˙"],["@@͓ъ΢Ȟا"],["@@ܑìНȤвĬࡢőƣʩ"],["@@UǫګIœŪҥvεΦѺŤ୸ѳ"],["@@ʐűƛȹٯˈռä"],["@@ƫɼ૆δ@қख़Ɠ"],["@@ȻëխĚن¸Ťå"],["@@ذģԢʣཡȹӫÖ@Ҝ़"],["@@ٗt݆˄Ԯů؛LJ"],["@@ܱňҀȲ˲̹"],["@@ЕĐdŒٚŸʧǁ"],["@@Ͽ™ŷâԸ‡"],["@@ठěʵͧ׿ɍėԩং۟ঞͅЕŝٕŨĪƕڿŀ࣯W৽njʌǶТŽطǸDDŽఉ¯ΩƢÒ΢֜¸ΆǨɊ˨˱ļڒŀıɢಬǢѠá"],["@@Ցµ›˒ߎž־˷ߝá"],["@@঄˝Ğ˳༕ä޹Š݃ąતіऎ~"],["@@ؙh˨¼Ͳã"],["@@ԍßǹˆ܂Lyȱ"],["@@ԕʱ੻ɐ͂VǤƼબů"],["@@ͲDĿŷ֙Àͨô"],["@@ǍƟ˕”¶ƎϠÂNă"],["@@൘˜ƄƩሜãƩDZࢣƟધxᅭͰ͐͜ɐǯ"],["@@йiȺϦЂȩȁǑ"],["@@٤Ǖ֜юসɯࡢ@ඤ˩૷У܋ÔχȄǴ͂ՑkğʣޮΡջűСƞกŧӱİӧʵࡍŠ१Ѻ˼niͶπTūǒծƆײèै̱"],["@@țſࠩþÎØॸU"],["@@®ƝҿƪђK"],["@@فWࡐŒɍĹ"],["@@㎅ޡ࣡ʵȌđ۝ʛιêǗǧыZêɫ܍dzUȵϋÎȖƯӟʕ҅Í஡ƀקđҋΒ݊njזϮڞÞүŌޔˤׁƖȎÎ҈ăɰɆٚSϜ˒ۖNJ୮Ȯ֎qɔǮ๨›రŢᧂՐ۬ÝϦȏ঩Ё"],["@@࡟O੒ƾȱƭ"],["@@̹ŽЊìďĹ"],["@@ƇȞđLjըƦǂАC׌ɯٮϸŞ;˾࣬ʟƬĎÔ̪ɀĢΨդʲࢰӮΎƽʶČȘ̹Ķۙɵ˗RνƃșțౝKȓʺÒ˔ɃɖBɒ̛€דкη]̣ȎסϗȞ’΂ɅŠ}̜͏ͤө੘׉ֲӗƊəÍৡΌᔹɗݡйuŻӴÇĀЃֵеݹ৏ƶŃïDZڷȇӟ˥৅ʼōĆǙ¶ő€éDǩ·ŋŸÝsʼnLƅTÃ`÷ŒɫDŽɕĄϏ”؉ɣŅÅŃÉŻÝÓĕ‹Ûş¡ĝ›ĝaǟtΑĝճçý\\ō©̓řıoɿÞęGŝ֝ČÙvǻŽԻWùfĭ°χɐ£ʚʇˆʅHĩF÷˜đ®ċĢȕĮŗ`ǥUų[ۭƜયˏϏ_ŗvÙnį\\࡟͔zŐďĤiȄ—¶SĞdœG¬™ŏ|ƃȿžǃ]܁ɖÉZȩHǏNħfǝĮۛȸɅˇҋˉɷнńʼnÞǭ¤“ȇÚWºo{șȷʍէɭŵUȇŸ֝dȽĈҗñΉpƳĞijJýI—_»G¥ÄǭŒēˬ९¢ƋƤëXÝU“˵w¯J¡ŒŷàѼ¹[ēű͙M̛Ɵ­×D‘MÇUDZ‹ƷûßcŸ¹‹ԍŇ·DžTƻ×cĕá£ŷ`“mÁÏ}ďyVqp‚‰WáǕŒυ…µÏgĿñ‰“ƒ«mķC©Fȷ—ċÿRבВ¤ǶгɷߕĮȱϐ֕ƬͅҊӳȂԃďɣƑࡷXßǼˇX²ȈͣĒʋġqȥοƝᅁᐴିوÁňȞMƶʠ୳̑ǻǏ٥ȹċƅбŎϝƟčɔ΀ˮЛíԛƪƧljɕ͒ƳĵމNþ͘ϕצұţৣȐ٩ȓ§Ʒᖭ̓͛ʃՃšᒁοוÔɃͭҲĉʱÝ}ƃϰ¹΢ȇࢇƒɯʟȄ˵߷͹κʁࣺ˛ƓϵϓƑѣa̭ƞȷɥʏõÏņӍØѱ̴ѧxͭǝαƨѧڱν࢙ήñЍΑъکψ٣@̏ȒܿȟƱƠ̵èҟσػǥƥșוȩŒֹΣÏՉѪɵiґ։ñˣȖǻˡ́•ͣͼƯȒЯDŽÂּăږ޷͵caŵ׆ɥҡɁžǃȱŽܓ̍ƛĄÈųƭʿե׵ԌͳžҡƺˢƷ܋ठ৅ځէЇêӋѾˍàǽĊӗǺG|þȬkpţŒȁKƵŪõfҊÓviSáʼnáþ¡tř\\Ʃ›ȏñĉkŸyōJÅnknV”žœYšƅ¾ÅŠϿŨõ¼Q–șàয¦ĵ´đ¶ɱ”ššş¾Ź®Ӂh»ËųWॿۆ҉Ōˣɼ̗GʓɸӝƮ˂ŜȃèŪ²̈ŽθʅǀːξæžÆĥĔƈʺIӡˈŭȖؠx½ŲܖʘćƎƟFăą́sǮĤҡƛżѦҀȶ݈‚Ʈ͎ĹɰDž¤ŮǼǰ\\ˉƾ΢Ȳy˚ʥIԗʆɍևȒDZōԽЮګǝхǘѳ‘ɻ֦Ȼƈ܋ªýΤɶĐ֍ӄથʿɍ̟¨IrÉӖ¡nqxPȄiȐ}ûÂ÷Òµ´‹xĚĺpž|Vζ÷ʖ]˞ƮĞ–Èb¼Pɇˈȿņǩ`ƟIÇfÒŀXÆW~…tƍ°ȋîĕĄĩƊġäĴE^}př ƻôOn\\°t®ŰŖ@Œg¦åðÁ²GzVpäÈLƢɿĆ͡ƮLJQėR±Yµ‹ãsħeůÉ͔¹ºlżࣷİŗò®İS²mÒ·ļOˆǯǐUê|—\\ƕkLǰP¬SžpɏĨwà“`ıH¢ŜŤŐȤÒɵ̎Ëӈ׼ӲśĠžʢɶõƸƀΰiǘƞࠎ٦ìϛȦշEΧƸʼnʪ׹şཤࡔ఺޺̆ͼ̑˖ৃѶњʊTƮЇȲ€˔ϿǠȈƪǿĔĞ͂͘Đࢋঔޠٶեͦօņǵʤʪ̝̐ÂҪIJΠɶטŔþǠֲćRȶ֬ñϚĨYŦ࡮șýĵإÔǚǏԺQiđЎ¼ˁ̟ҘȮᆤı༼пט˯ड़ʅɊ[]þӒˍӰıͤчƛ͏࣯ѵௗșᥟ˞ׁǸ˻»Ď઩njȁȰࢇÚ๖׿ʛħلĕӢɯîƷ̵̹Ոߥ٢ĕӀ˩ࣞǃѶŖĀŤĝȔ٧öҹ˼÷ǂ̈Ȟᝂԃʦǎ͘PիӒfȼආѴؠͬ࡮ĕΜƑģŃʪfɖő˚ްիˈΠ࠾ܷΜ׸ĿༀËڤՋঋûՃ˿ֈȑ˖ʛԜù঎ƨȀԞ߬ĆáǸͶsᛶ֘͸ƽ˚Ŏͅľ௪͚ׄE׍íŒЇ֝Ɨ৺x͖ýҴ̮Հæ࣪āࢠ˰ݒĮ˂ɣɫʛՄûƜ̖ӾnώɐٙԖبɌ᪂ʿפʋᄚ̽଴ҹ٦՘ԇbҋњ͋ĖҹĠƗŝ͚঺šĊυeÁɚൊԐ૾તłą๚zાȇȧ֭ץү۲гŅဵ࡞УϝʧÓΏਁٓЙƤɹۃƏ˽êʸŦ΁¹ͿƆևaǡ‘Ʋǭ४ȣࡦdҸħ;ðĄȔୀκʂΚ׎̐ͅռǂ˦౺Ȍ̐DټёÃׅԈǫॴh૫ƌÜςˤÎ˿զ൳˨ӣHԗůࠓ¬ɑֈ٠ٴ੍ܮӮʹૐʦǣ֖̮”ӶҳϽ˳¸ԯആǵֈ’ؚȥԸHŢÌзQ̿ɮ๻ʊͳ̞۶ĺހǑϤĮǻŞѯikĶوƼ৔F૸ʓݲ̻आ¢Ўăމ΃ƅ֋¶ǝծҸƊ̧̽̇ͰĽMƸ֌ɨӭҶ͒Ӥ˫džұ¨ҩ˸੡Ȉ^ϰΕʂƆ˴┰Ÿ්Ɣऍϗݔ˥ا̌঴ƄϚǒ࠿ζӍÔͨŒфĽ˨Ž௃ʀΊƞϚő͞ĆΨȠѹ°ÊĐ֒‘ᑜϲ὞˒হE̴DŽዎŽк±ΟǃܖĨWĩᆒ̐ञǵȕȗʼŎsǦࡧ̂ႌšيï֛IJ¾θശѤ୼Ȇႜ˷༙ʍᘪÉШĝࡡΏસTϮǺ᧮§מǧŵċ֪FŠˣ԰ǖʔ̟ʘ|ʏ̑फɘцɑʌ’ОƉڧλᣭ׋}ŷഡЍޭÕӻʑЫm࢛ѿӄº٨ʬ੮†೤˄Ѳ_࡚ɒউZҰɰڜßÚĪΚq˓»ƢşظijհŒ”Ǽǒ£͒ɟɓǁˬħ̧џҌǑϗƠ֞Ғ́ƆໞǔᲄƑΏÕuǽૐɣᑔĉаvřĸҞÕϲȨōЊࢨîࢴʭրĎʢǵЖǴ׬Åଢ̳уǽΘmȞƕۧƛܨćňɫЍñ्̖ŽŁ࣐ҫʤƊɀƩԯÛޚҙٴȑȂÐɞǻ࡜мԲֶ࢈Я࡜ŸܚȈҀT༌УăĀЂĊͩ¸ˆDzҞ„ΰƹٲ ɕ̩ͦÈۢȪࡗw‡ƔϮƔఔúɫʰ੆ƛ⇈ɻcû௫‚ԙĻŀÇᒌĒ׽̍ĮNJЅöCʇ׉]ŀȗݒĦৄѨሪƍѠɥ߿čãĕൎƝхʙܶżԬÿєɛˣ‘غů↨ɒଐ­ૄȽվЗɷσ঴ɝŀяɲĭϡϋ׮̮{ЌՈȜࢊĒᴴǷࢊȔϒϥࡐljʤʙެ’ϪȂ΍ҎϘ˜КᚔʅƊļᐜ©ᬐՕؐɳ@ᾕకϵ٫Īܱ̪ҏ…ג¡ƼřŻÙࡏƤ౗ɵ౎ȄʜǗǭĵઊƬLˋɈŝ̜ïƺŪŸē̎ӿʓ½ʬǯ¤ŪԄͥŇśʾˑϙ̭ໟɺ ƶ˅IŖǹᕩإݟěЯʹɱÀ¨ƁїŧEėງՃɍЁ̱ĐًѼࣷmއƕߡҧŗļǺь੣͗ŋɉέǾΉƍlð͡š͇ȷûЕ्ܕƱ̷β̟ɚȚӔƃϑεXЛŌŷˬ‡âϣʍǁǧlDZƔΈʒ̯ťȕϋƝ̡ӽ͎سЙȣ܏tו̑șͽƴջρĞ۹ˡɯľŘƅĭЫ͛ӕ੍ڭċ‹ȏΊſैɇ̚ЫှÅОάଆܮԄņƨŭ˂ԸhǺȄԞU޼є՘Ԟྀࡲ˄˄ൢϚſĠϞˌǛİͺۦ͠ƬԢąǬÖ࠽ɐࣱŹˁևȪLJƟŇȕŒϳ—ൃރӽīǦ͚ӵÍѦ߀ٍƥ̧ǮळƧԍž͓Ľ଱࠱صʱ֫җťʯےáDŽɓםvϓşˇŲ˫UҗʍлĖțĵٕ‡ǣǨड़Šދ˴ܩÇƸ¾ࡳǶӝŝŞţ΁œ­ƅȄIȥġЁƀرūࠏǂЧʉеȲጥ™ԣʼnຑ޽˿Щ຅܉ࠃۛᎯ৑IǯԀůߒŒßۇξd]̢ѴĐ˝ƷжŹӥͳה¶Ӟ̘”şˍʛǜZȾ˪—ή֎ė͚ìֱּ࠘ʭljɷ˻ÔΔȹĻͻ̒ɏıɏηʧ΋ۍĔ׽ƋƝ°˅࣓̅೫௻Ƚћշ؋ಗૣɣīر܇षӟ܍ɁϙƮͽPJβωǿÔǨٽ֧ϗ~ŀőŭȃ"],["@@ǵÕࣇè੾Q"],["@@ЅΙ୚˂նɥ׎½ƖˍӑƇ࿏ŵ೽Hෟǹჸା֊ÿźƪЖƭ"],["@@ૺű߃O͵Ƃ"],["@@ળŴŭǐᓘŁवȁ"],["@@ોŒ܂ĨЊų"],["@@٧|ՀŒŨƍ"],["@@mͯߎʖ௸ɳ͉ϟ՝}ݚ˧ౣƣᝋʼѕک̌७ĀྔԐʜÇ፤ņ"],["@@зì˞ÒƚŽ"],["@@ûɻথ`ǴɈࢮT"],["@@ফzіDŽ࠼œ˥é"],["@@Խ†ɏ˰ᆲųܛqχǏ"],["@@ԓFÆňҎō"],["@@ࡈ¡ȨơࠓŎೃˋƟļࣃ”ᒌȲ"],["@@ûǽࡱǕٯÜՅÁµ͖ᓚd"],["@@நȩᝣ˫ƖLJਭåƀƂݷ±̅İ੄ȔৈYƂʲࢄĘ"],["@@ޭ‰ĴŰࣀUɅď"],["@@ࢿ¤ୈˎŹ"],["@@ๆįञȱීŃ৷ĢԻŐ֤ȴ"],["@@ʶǭէÇࣙɄ۶ĐӖÝ"],["@@ٿźᇮ̀ՔɟჁș"],["@@˿Ý૓Ěඔ{"],["@@૾ʿ܁ȑɰəᵥɛᅋ̌ศζ֛UIJüᏘͰՠTؐǣ"],["@@وŅף§õǕႭfȿļጀȢ"],["@@ಛÐഔP·ß"],["@@ƉĦॆvĂāࢽ™"]],"encodeOffsets":[[[150236,44794]],[[149717,45566]],[[152166,46406]],[[153281,46738]],[[155651,48023]],[[158526,50496]],[[159664,51510]],[[160159,51874]],[[146188,55700]],[[140471,56423]],[[141252,56415]],[[21746,56591]],[[170650,56156]],[[154205,60436]],[[167563,60010]],[[36676,66747]],[[71702,68099]],[[-184113,70595]],[[51472,70847]],[[165343,70555]],[[173262,71251]],[[61902,71614]],[[54174,73078]],[[183155,72527]],[[141271,73224]],[[-183169,73295]],[[79496,74027]],[[81410,74468]],[[76453,74623]],[[123148,74844]],[[56648,75068]],[[72371,74850]],[[145598,75670]],[[85555,75850]],[[144395,75776]],[[116109,76187]],[[88733,76781]],[[84145,77230]],[[150319,77180]],[[139212,77220]],[[143410,77649]],[[98850,78109]],[[115178,78460]],[[152730,78500]],[[69392,78068]],[[98597,78876]],[[91663,79042]],[[133824,43318]],[[110281,80007]],[[105354,81157]],[[78079,81563]],[[94908,81598]],[[52644,81863]],[[61122,81875]],[[100019,82083]],[[51254,81997]],[[58449,82280]],[[54806,82110]],[[59348,82047]],[[55722,82405]],[[48581,82795]],[[63660,82775]],[[51485,82870]],[[81948,82789]],[[62609,82894]],[[56033,83063]],[[60030,82987]],[[64895,82637]],[[93765,83089]],[[98844,83022]],[[59198,83504]],[[65179,83568]],[[59695,83677]]]},"properties":{"name":"Russia","childNum":73}},{"geometry":{"type":"Polygon","coordinates":["@@ƒaM¡ŽÝľƅà{ª½¨ĕÂӣkĹuÕǃ¡PµSÁo‘EŧòʓēƿÞ¿̓ƛßʵ]ʍǴóĽĵîcȢɊǤÆЌ͊˨Ⱦ¬Ėœΰͪ¬X¶E’A"],"encodeOffsets":[[31243,-1092]]},"properties":{"name":"Rwanda","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ÔôĈț̙ǪºȊńʋ"],["@@ݶęȨϧ٬T̮իWƟφș¿¯Ȗɍضѥš`Ǧ̵·ǩĽVѶࡱĞϏÿâãľǍŽk´QÐ@îløjЗÖNďȗɒ­pǩߴ३ᒤʽèèϤם֏။ᠽ࠽ុΑܵΥӽשř˱ʣƑƕNȻʾ৉Œ͙ŀਙđлLjȑƁu֛̫ˉыࣂҙϚѧژЃ֭ࣞі̑ľϝӬƵ˰®Ǭƅ̦ØװԇऴқЊ́Ě̥ѺîŠį˦࿿ᘲϩĄćŘ઎लŷǶżnjŞĮƠĤƒª†׶ňlbÀŒäƘbdhdnjĂİ´сѐ̽̈ūŘɎÄɺÎԲžɜÈӲنZŰİȊƒ˰£˖¡˼±ĠഄڿෘਙߊսൠʼnƦ‚"]],"encodeOffsets":[[[42996,17117]],[[47649,29795]]]},"properties":{"name":"Saudi Arabia","childNum":2}},{"geometry":{"type":"Polygon","coordinates":["@@²·˦БAÍęÄSĹªܣɺધड़ۃƿƳs›WwW…u…µmi[ЃŃȡő‹‡µƯ•ŸƋIá_ĝh©C[gŻFÇùƧt˟̇޹ŝȕlljpǟ¬ЗͯఽϣőҷڳƱߝƇıǗŒȑȅƒϽȝؕǥœü̘³ˎٵӄ³ܢłԤБL^ǵ֑EɢʝèԷ৏ઑЁËكҠͯdzōʝбƥŕɥڛFƙɰڳXΑʼnةּ½ȦիÝŧ‰ɿѥɇݙ͓ȅԟŴÍʤżȎpМډआÀΨ˥ȠUΈĝàĵӾΣdđĦ͸ҐĹЂζ̦Ɓ͜ʐƠɘτD̸ƞƜܮfRṴ@о࠾NBဲᢴ@ᢲAƘPŞǚð¯©ŷ⯀B"],"encodeOffsets":[[37757,22525]]},"properties":{"name":"Sudan","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@Iޓijď֡Mʁҋݼ͟ƊʃլӅɰګʆ̫ƷƱǥǝȧȟɓɉǟǛǛǗȟȡơơá³Яŀ֋ƣǗƽ˳ʂɁĿͩĞˁʛåŒƝ@ßǰˁŬѣԖǩtȳȁлĨʥƳȡvͻʜ͓϶ɑԪՉ̄ǥ͘®ưࣩږćŊhɂ̇ˢҽżŧ͔̾ȆɈݚʀѦŨŠլÞ¾ȥتֻΒŊڴWƚɯڜEŖɦвƦŎʞͰǴلҟЂÌ৐઒çԸɡʞ֒F]ǶВKŁԣ´ܡٶӃ´ˍû̗Ǧ›"],"encodeOffsets":[[34896,9689]]},"properties":{"name":"S. Sudan","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@¬̍ǬɃ¸˥ÿȯȈˉǒ®ȶΫBҋࡓÃҁNJʼn—kŦի”˯BʅB܅HƵùǑĉɝ«ʯhć]ƥÙĕgŕb¯S£ƞˊìŽĘũʼngДĪøۄFjƘѸÒŖƈݼˏΜƠųŖέ‘םʸˍíçşࢫBǣˊŲŖƣ‰̓ՖƫöĉÝùĔ͜Ɩʮ̺ɮφˆĔ„ânưĜǞ˞ЄŸٸNJ׆ąδεĦr̆ħʰХ̶υ˜ȯņã"],"encodeOffsets":[[-12575,15165]]},"properties":{"name":"Senegal","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@ˍKƘĸŶī"],"encodeOffsets":[[106465,1364]]},"properties":{"name":"Singapore","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@Ͳ•´ŻːVѺїʋēڧѸصƠZŀͯ†ސµ"],"encodeOffsets":[[-37993,-55363]]},"properties":{"name":"S. Geo. and S. Sandw. Is.","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@ùMÚĊ`û"],"encodeOffsets":[[-5828,-16381]]},"properties":{"name":"Saint Helena","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@őaϧːӺʭ"],["@@ȕÿĥÈȜļĠă"],["@@͞Çɦ̳ӱĘȽŶ§ǢljˆVĺΈƵ"],["@@NŧŧôˢƸɭ"],["@@ȂƇ͔X϶χƛÅ܅ƒDžʘ\\ƆŀŽ"],["@@ȪŧʫºÂî"],["@@ŷ¤þèĊ‹ÿ"],["@@ƛ«yƞǐ|Fŭ"],["@@ƩŰƖŨTʗ"],["@@ȼʡ«ƿǶƋǬձԃծµΤĽƖƆ¸"],["@@ŔɝßėșƔ}ƨɋÁíÐɰʢɮɵ"],["@@dzĀÆŬƌÕ]ƕ"],["@@ƩǺ¦ŒȼűķǙ"],["@@޻дУиɶ¹הΥΌʡŠǩ"],["@@ƋP¾ĮĎĽ"],["@@ā˷ĐկּӠɇƌɥʚƛ"]],"encodeOffsets":[[[164431,-12081]],[[170121,-11015]],[[165597,-10636]],[[165425,-9856]],[[163585,-9495]],[[164013,-9211]],[[163010,-9342]],[[161903,-8892]],[[161167,-8922]],[[164608,-8513]],[[161550,-8439]],[[160944,-8302]],[[160449,-8113]],[[163717,-8739]],[[159580,-7267]],[[161267,-7506]]]},"properties":{"name":"Solomon Is.","childNum":16}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ΧŔ˲Èǝ[ū"],["@@ÚăIy½śFwh[ĤmĬ̷Ʃʋ‡Åt[†R¤UžG¾žĒĴ†^ÞUE{ţ›ĻǯįÝʽȗȃ͝ʱȩ˛ࠓЖL̰ǽ‹ŹĒė˜ljÎĽǺǀKLjǤʍ«qɢَȝƘǸjĴnjǠĢǔ˦ŊnjʊmȚİ՘HÌer«Œśʐ͵"]],"encodeOffsets":[[[-12826,7615]],[[-11016,9611]]]},"properties":{"name":"Sierra Leone","childNum":2}},{"geometry":{"type":"Polygon","coordinates":["@@Ȱ›Ԟ͡P]N¹^§†E’rŐÊŀœƈĝĊ`øIУbyÇʕű˹ىĐƤćક͂ʓƪ Ɩт˴uŰǰt"],"encodeOffsets":[[-91507,14762]]},"properties":{"name":"El Salvador","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@įehɼĈɕ"],"encodeOffsets":[[-57617,47963]]},"properties":{"name":"St. Pierre and Miquelon","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ŝ¯©ƊȀƬÀƉ÷Ļ"],["@@ýˆìĄRŋ"]],"encodeOffsets":[[[6820,124]],[[7602,1606]]]},"properties":{"name":"São Tomé and Principe","childNum":2}},{"geometry":{"type":"Polygon","coordinates":["@@tƱ­ăĿƣ_“„ŧcijO³»ĕũɃőıƒA‰MWQ›B‰‚qèŻR¥ •¨U¤uGś—Q×Pć¡·U“¡̃‡ȏΉmuĕsy•o••Q‘Äm®á¶¿ ±K¿O÷ù›ϳČȅĂбۈėѲ˿b΁תǪӈÑŸǦƜ͌|ĸƨğŞľǴȌώؠě˴ƻWnjɘþۄFټƱuʱͱ֓ňځˈΥ"],"encodeOffsets":[[-55331,3717]]},"properties":{"name":"Suriname","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@]“œƃÿƿŷįWƍ̩É˅Ƕ߱sſș͏ů˙Ü۫ȇÉdz߱cԫȤɿ͌òDzƶȰԼ ˞ƪÚNJ֠Ɉˈģʘǖ˨ȍcƗʨoʲǢьÏǰĔҺM͌ǝϠŅÆQ"],"encodeOffsets":[[23080,50251]]},"properties":{"name":"Slovakia","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@õręVǷŷйǭaJàĿoĹ̿ŇÞÕÏãPˆZ‡ćuŋTſ¤ƉkťĀ·âmLiy“ãíµqЭ«ʧöɢÜYòƗĤÁǂùKkZOnN~¾¦ÌšfrEhǯˆkĘƎĈ؄–\\j¶܌ĵ̀ǦࣄÒŖƼdžKȜ̛"],"encodeOffsets":[[16913,47616]]},"properties":{"name":"Slovenia","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ćŸe˚Ԧٶзࢯ"],["@@əŇĀʷٗБŞƎűЊͶɰ̨îƨã"],["@@ϵ¤Įǒeƥ‘"],["@@ࢭÍכłūɝׁǃ˜ūǕ´Ǝljλˇٍ͎̃ԃᅿ׃ʙƳŴčʗęɛĈŌʋǟćΣLȈɳɑ̭úƵɥ’ÇůĸܿΆƑʜ®ݮӁİɥࡋͯԄˆɱʇવϣٛc׬ťɫ·@޷ʫړѭӭ࢛ŒwŇ̑±ƽŧłʯƗŋઋ^ô˲хҖˤuŧƪǜXtƒϱʐࠅ৲eȆƵzďԶ¤øNJ•êŃƠbž̨įʬڰўḔʙҪΌ¶Ƥʖ؋̴Ůӄʭࡌƨʰ԰ͺΊÚَ»ƲƆÁʔΫİۤ؂Â۠߆ƪ»Ƹ࠘ӆɵ̸րЀҔǬӼś͘ӸඖǗ͆вșƠь`ୀџܚŹڈ΍ƹгɼ‹ýʙ̈ˋʍҷϤϓ"]],"encodeOffsets":[[[16926,57642]],[[19535,59224]],[[19617,59313]],[[24736,67385]]]},"properties":{"name":"Sweden","childNum":4}},{"geometry":{"type":"Polygon","coordinates":["@@Ħ»eɛÄȧNˍóz}MwţkdzZŏǹGɯ^Ǐ´ǯłĿǔ¯ļÛNYlR̎ʈζĴŚņô Z„GьȇvX"],"encodeOffsets":[[32715,-26580]]},"properties":{"name":"Swaziland","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@DýƅƪÔ¦îő"],"encodeOffsets":[[56874,-4805]]},"properties":{"name":"Seychelles","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@ӏї̹éĵŋ¶رƅܷǩ˷ᇳࢳ࿥ࢱϑÐӫ̈łǸ›МƔź£Ɩ͈òñðʴʞãǰƥʰƄ΃yÕڔśŶÚɸ®ÊØMƈßvDnjƜzƘɖÀJ|ēǎR¤¨ǐ€Ü~rIJSƒ…˜±æ¥̶SôˆǒÆƾ¨ʈĜӘǫŠDǜ]ȾBŨlƺŠˤòׄɮ঴¸Ƣ¤ĜêˆRœ_jIœŸžķ"],"encodeOffsets":[[43376,38000]]},"properties":{"name":"Syria","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@ǂ·LJ…Fþ"],"encodeOffsets":[[-74068,22376]]},"properties":{"name":"Turks and Caicos Is.","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@QṳܭeƝƛC̷ɗσʏƟƂ͛ε̥ĺЁͷҏĒĥΤcĶӽĞßV·˦ȟ¿Χ̭Þ؇̓ó̓އݑαɹ୕ǁÏđȈƱқԡޑ½ܩεȩ˄ƕƵΝƧБbÎɜη٨ڃլ̗Шɢʎஊx͇̌ťʖđϸªؚȟւ͕Ѩǻ²ƱBōư˛ϒčΰµȸޜଶच঄ɖᠶȔΐ͘hȆΥӌǟఊࡊϖ←ႱỨལ"],"encodeOffsets":[[24556,19965]]},"properties":{"name":"Chad","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@řԛӈ͝²ՓǸʽrႫÿIȺוŽßλŃϙ̨ǯͰĞцœNJƾڸˁͼĮüŒҢʗÄĠŠß”Įլϻ͎Ą̈ßĂҾƉ΄"],"encodeOffsets":[[923,11258]]},"properties":{"name":"Togo","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ĥŁt͠ĨåuƷ"],["@@ĝƑmŜŌv"],["@@ĿOqƞŲƍ"],["@@O¹tWƬŠǞǩĹΟĬǟזIT½oƅö̍ȩ҇F‡òĵNťȡҹ •Ų½ÀfȸȂŢĀRRļÌôŨš€´eԈòôȔ MǢƁĚ½ĀgÄōš_hL̸Ǥ’Ġ¶ì¨ŒÂhbv†F†Œˆà^ĸIމƎÅĚk¨pĊđŮȑńơĘįʾȥÜƉ³ȉ_ljNȣÎƳȒʱĐÉƴ±Ú¥MƃȊʼnf—CÏoćĿț@ҘïZğoõsɅk»­·ã¯ĉ£»k[S—±«­ʛǜೡăʑǏ̧ҩǭsƎݝɌȳe˱ǔ͏˷и­ÿףҀ޿\\Äٺ̟Ŗ̯éȵȭČǕŁ̗rѧە།öࢯӦpżחŞƉ†äĮȫɠ࢓ę®·ɖąTwȊăƧɚΉԂ˝ЖJԔԻȑΕǏŸĹňωɩōŒÒІƯFijǸ΅øëŐţȭΡκrȖƕĨšŘȧbăȸƻČuƜəƠíǒĽôƃƓĭ¢ÁҖϰ஠°ЄζώΦ֨ǭ٤ɿМ\\ּӉզ̱ԮUȒ̮ƐˆֶȎŌÐƞ«Æƥñȅժ؛ے×вɑȒ̺ÐÒܺǖʐ̚»ҜìƄ˜Ί¨wǴɘ‹ƜĊÄQ¤‰Ĵ¿"]],"encodeOffsets":[[[100771,8092]],[[102473,9817]],[[104886,12277]],[[102526,20805]]]},"properties":{"name":"Thailand","childNum":4}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ĕÃÏÔMh^@Î_ĈW"],["@@̟ɝՏȔлƳF}ånj·ly§…ù¬ʩৢÀʢlj֞Ǭ„k\\yW‹CȔ± ũɜؖ“À§ê«ΈƮЀqłZЎ¨~êdƊWJ©{ƗǖɕğĩĘȹȌÉɄĶ҆ǗèܟȌǹȑŹ_T›šċÒьʻr÷E±—‰—ΗćăPuløÌbž[˜ÁX©`ĽtćQƟ­˅šȧȧ࠯˧œŰćʂŲڂ}pÃAćsÏI“b®ɄÝŘѧĬˋ̅ǟŵ]²ķGč¿ç͏œnƏšǏ_ő“ÑÇkó~ĝ]黵¥ƒQí¨ȁƔ£RuK}Ua[]•Y·T­Sʁķó£]©oo£RŧÓġnĻüÙАÔ`ȰҊ،əɘœϢοʟŘʑîÌȾʘƀشíƨʪȖÎÁŤƖ’˻Þը~Ë̴Ŵǚ̚ġׂ͆̌ʿ͉˳ʀƷʲŽ"]],"encodeOffsets":[[[72361,40812]],[[72662,41205]]]},"properties":{"name":"Tajikistan","childNum":2}},{"geometry":{"type":"Polygon","coordinates":["@@¥GקȌǭˉɃIǵQř™ŕ½ƒÕƯщ‹Ń¯ñ˝LJˑŗ؛ƓƗĥțÝ‰Ĺ¹ƛā͉íǿǬϿ¬ɵǔçSSȼċĠºǶýϞٹKɹ˚ԝʒŹɐСƢүcށʶƇȲم„ƙƙݟ{ЙɯǙʵڇѝചƏɔ̱ŎƯÛầ̰½ŋĸ^Ȯнà¢ǵșɾÏ̂Ǯ՞ǜǵЄKɈƛѐšµŢ̬ŽfǖԝϖʓԊ՝oǍıŽɝˆѕ̙ӤӀ̰ࣄǀ؞̵Ӥ֙Ҙt࢔·ĎòŻю˜ɢѰÈǸʢϐǁ˓ˢ˚†ĦĮٞϣՌĥ—ȧɒƛĿ™\\̟̬ƭڎɈò΀ƵӤय઀ۅҞƷબا̞LՔɏãǛ]ƽAşXġ"],"encodeOffsets":[[68119,38245]]},"properties":{"name":"Turkmenistan","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@΄ŶƋȧȷò"],["@@ěʤŞp¤ŮDZU]ĢɌʜǠÔਨĮ̆Ŧˤĝ͋ʓ౏һ˷ȣ"],["@@ÇƟӌŜŔ"]],"encodeOffsets":[[[127014,-9565]],[[128070,-9740]],[[128662,-8335]]]},"properties":{"name":"Timor-Leste","childNum":3}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ê’ßőǥƀǜ¿"],["@@īAĎÚ^×"]],"encodeOffsets":[[[-179365,-21677]],[[-178128,-19086]]]},"properties":{"name":"Tonga","childNum":2}},{"geometry":{"type":"Polygon","coordinates":["@@ݥÅ΀ǘlˮơĬ؞ĺĭƝl҇"],"encodeOffsets":[[-62476,10378]]},"properties":{"name":"Trinidad and Tobago","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ȡbpŴɮÅ»ď"],["@@ŻÑŎŜnÉ"],["@@ƇȅĐ֯ſǟŅŽ‹́ƃʛ२ÁȼĭϜׯЄȃјȡİ˽Ҟiؚ̦պ€ȶˆĘèĴÛϜ€״šŶͦ˄qĔतͺŴOƣœĴ˒£ĆΣĴ¥բ˺ÔǕձחĪʍΎɅĮͥίҿӓͯÍȉɌ˟΄TƥȢĦʤˉ¯¹ʪÉCu‡DžOËKɇäıD©}¹ŭËǃõƍëƭû¯¹ƍûŏNjǛ§"]],"encodeOffsets":[[[11221,34532]],[[11549,35588]],[[10522,32446]]]},"properties":{"name":"Tunisia","childNum":3}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ʩ@ɀĐªď"],["@@N£ʂ͙ŷȥĆ̗ԼïД˱¤«ȕIJṶ̈̄̅›ȾғvϙŶ©ȧΩ͈ǓaɳȄŧ{ů…p½PÁFǡıÛ¡™‰J™ÎNŴa ‰„“hďXƩùƇHӫŠŽ—Ƌ …SėĥƯķągĸ› iL›^‡Qěéơ£঳·ɉõιƷˣñƹ‰ŧkȽAǛ^şCӗǬʇěƽ§ǑÅó‡ğHŝRķE㦙²Ƒ†ıT}qÛ§ǏQ£Ċȉɕ¿yƗũÅ¡ĕuCƇà×Nçͦ͆̊ŝɄտ˯׃ȰࡑՓݳūΕŰ̗֛̐ɠשÄǕԃٍħϹƘɇ֑͠ĆʇƫÆİՋҪĴȦǔࠕ©ŒŲȠŒϻдƀÊRɈ߉ʢŴ̪ȞʱЂĮȥ~ťȒɂƬǗؐżƟƪǼɎډçWĐäΞҴΈҠ²džŕɆRͬĭĎŤ€Ĭowĵ࢜jȁŦƞĆݠŊءƬ†ʄᄚħǠDz܊Έࣚʎ଴½ɌĚۇŗƦƋɖāв¢̖΁̺öʎƯ૆ɓ࢜ƶ۶ũیʦ˦ƌĄĀLjà}šQĒÂҒ±ĎĴpXbPÚNÔM„]†ÑîsŴĩüng}mXy¬Ȓ—"],["@@ҐnƸΑܠ˗čȅڅÔ֡ěȭʉУǃӍΟ¨ȪҐʾֽ_ÉĮʘȒAʆʚƎ—ǘɕĬîŶtŽÐ~¨Šdɨvꈘ‚ƶd¨b¨[ưŏ"]],"encodeOffsets":[[[26594,41100]],[[44476,42144]],[[28135,42954]]]},"properties":{"name":"Turkey","childNum":3}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ĝ”ʮʌǏ˟"],["@@ÜdzûÇʣʀńϚǀϝ"],["@@īҍđÚvψLjl"],["@@Ḯ႗‰ϝപ৏ΕୃÎɗ֠׉ɏгCɧŢsZǕŗεŮнDŽȿìڵبϵЋ̙ƟûۡɉзȷӑĴǏʉƷāƙ‡ͥŦ֡ŝīŠ_¾ýÒƝêŁDŻʼnÉgũfȡRȉGmĬŸÎĭ¬ƓɖºʎćҪȽђ˙Ȥęƥ߿ɚƏîہɦqĦhËjŧMįĔěŶć ɱIĝ¼ÛÞ½öğʀ˃զÿɎčƔęĺŧĦƍĤõÚijȈ¥ä…ŢuŮVºĘDŽV¬YÔ©ŶǙѢeìDÂà˶A ˆKȔŰϠպ͈͠jƄ}ŎÑPė–õd¹rmfQ¨¤ň£¬dzüǀhv’FÂp¸T OȄvÖlĺWĊÞKͼ§Ė©¾ß|ĽƆÞN¢„bTHŸXΚÊZ^GlG౶@ಀ@"]],"encodeOffsets":[[[40665,-8168]],[[40445,-6322]],[[40822,-5023]],[[34717,-1026]]]},"properties":{"name":"Tanzania","childNum":4}},{"geometry":{"type":"Polygon","coordinates":["@@‘BµF«WίͩĕŔȽ«ŠతǼʹRː઺਎ÛȎϓƼİ͢ûǎŸ̰Ëè˂ʜͪĝɂŀ˴ʁǘƾ֌ƤаĿâ´ƢƢȠȢƀ˥®gk³Ēãł“œ“H›—NjP¯”ǍϪַm¿æ̗ZǙAţƫЋˇǝÑƥȿəǽγ‘ধ౿@౷@iF]JÉY͙ÕeáNSG"],"encodeOffsets":[[31243,-1092]]},"properties":{"name":"Uganda","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@Ś£ӯǝĮцƛ"],["@@֝aؽ̡ȡ¤؛śڿѥɠƤ¥Ɗ͉ɁƢЩκ͓״Řͼ¹Ƴ˟ѭ¹ͯþ͓ʝԯåһ˫ϫƔĖҜ࢟ʲঀҘÏŲƏȑİ؍ûթǖƪŰϟľڲáǼŠ҃vʇӐĨҿ˹^€ĦƇůԙÛӝֻӹŧÞϱřĢƏ¤Ʊaˡħĥj]ol˱ªő°ėĔ¬„œ^DŽh^°mþÐÐʶ¾¸TîĢ–ĊÒrކ¤¿Ħ[ÖEÀ€†ǀ̒E^eHŁhEȠÞ͈ē”Tǔd²žǧĬVðPČq¸“žʱŖĭˠˏǔSЌםƶéEړˬˏę˟@­`ǧýk…Ʃ}ɻȥɇsȁ‡ȋkСƽͳǨߙÄȁKǥĂÁFəŝěƌƽrˡɰķCVƎŸİĀǀŔƄ^”ʸRšø³̰¶Êˤʘ֦Дɖ‚IJĸHðćNJČÂγπ§ǸþĮîGÖ[ðxLŰÖźĢèþத²ࠨŷƮaĸNÌQżŽͦqTāƆĪ֢}Êg¤ï–c”KIJĜàl¨Tˆx¢v”DȴȵۄĄʐǡƶæiªSē¼yĨþìŀôæú¶ŔĀȦHņ°ȒFDŽM̠§ˀɎદŽ֎ӃɵďþΣ܌©ȼƇɼ֥Ѵ’цǗڬǞԾЭDzŎֈȑɎ€ԘʅʦJz˙Ρȱˊƽǯ[ŭǻdž£ĺɯƭ͍݇ѿȵŻѥ"]],"encodeOffsets":[[[32781,47313]],[[39132,48222]]]},"properties":{"name":"Ukraine","childNum":2}},{"geometry":{"type":"Polygon","coordinates":["@@½ɤ”ĄĴĤ¾öJ̌´Õ˴mxfÈĸʎŒΦ˹Ά͝gŻ\\óŌTȸDzrNžs͒͹腲ˆϖǥ̵̰Ϫǝƈ̃А˫õëăęíéó·{‘g¿@ПƊñ£‰«Ï¿Ɨǩț—ŋ͏ʑ؝ə٫ƂӛĿޝϖօqӏӄŠؘʀʎŸŘƒdžĂàŴH֛ÂYÈjÊGÄyÀlªŀĔˆìŸdžjàŠȄrücƖÚà"],"encodeOffsets":[[-59198,-31599]]},"properties":{"name":"Uruguay","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ʥ¸ƕ֮ȔɞWɘՐɿͨЁٷљ"],["@@Ľ_ÝžƜO€ō"],["@@ǬhʎǍΙŷÑǒǽŮĦðĊđ"],["@@т»ŭĉα´ÞĒ"],["@@ƐűЋXƍɢʼĮƎȵ"],["@@ȣmƱŎǮƴȒGiʋ"],["@@ýMǨ¤ĩ•"],["@@Ǖƿ˖ͤĿǣ"],["@@ș֊`͂Ǻࢋ"],["@@b×ɡժɀӑ"],["@@dzĠŌ€èş"],["@@ǫU͊ČƝõ"],["@@ıkƂʏë"],["@@¨ÕůJĽŮȆá"],["@@ǩĄưZzĝ"],["@@˪©ɓ»ÕĦ"],["@@ũeź¶„Ьˏãǫ"],["@@įŵŦǼuÅ"],["@@ÏÃ֬Şઓ΁ۑÓŖǮʲņߖÔ̐Ɗȣƕ"],["@@ɉlLjĢÂō"],["@@ˍcǶĊĘå"],["@@ĕmĪƺSƋ"],["@@ȋĦƌĦĽ"],["@@ĭ‹pŌþÿ"],["@@DŽȝ̝ʪĨƆð÷ŻÅľÓ"],["@@úśüķ٦ŕŨåˤúĴXΠ»˰ŏðƃÈ@˾tԲȳ̀ŖǠN˜ÍૼœࣞʴՔȯҊdz҈DZࡪΓӨȫǎãǮ̙Ȍ›ˊHŪΗ̦‚ŬĹĻƫ֢ʣ̲ƝÈɛ̆ౙ©ą̗܋Ӄ̽ɱϞʧɂ@ϸǶϼǶЖŨپIJࣘ͐ɐƈÅԛŠ‘öę̢Ɯ¼Ƃ´ŀ”ɘNܦEٶ@ՒԪ̰ȎΘʮͼǖȠ|ĊJᥬFDŽʄϴgӌՔʐڬٞيNJ‹ĨǷלŔήɛJଗ̴ĽÈίȰGŚ˻ǡŷկĉǽljāIJʣJçȽɻæ¦Țϵӫʛ÷‰ðÇđ{ĨŽȅƁêǵõҭבăȳǺǝηʕʶđˀЅΦÎȩɞŎYŌį|ʅשţ™ưϽȋhɌĹÃijĪŏΓ୵ÿࢿ҅Ĭʮĉǎ˜˭˱͕ʖŇěԣ^Ǣؕ࠭Ƈ©¶ǐՃ̂Đʦ̊ǎ˝ŷƽDžǐҡʮ˅ĉƽŰƑݩੱ“ȸˆҲLJdO͠ljçǵƀBƐȺtǑŐŅ£ƢŦƉČǎŊčĠêļɸ¼ŅˆŌĎïØˋə­æ÷ƭųšŦţŋ½ƐבʃȲR×˞ϙѵʬmćģŸș‹ǞКȕʏYȻȐJڂϵãǽůNԱОҾзȴć–Ƿř|«ĥʭȚЊϟį»ȗȘԳĜӠſƺɵШ`Ϻࣿ΍۸ƹƢ̣˟ƔCŏ횚×˧čƥǶPɫրZ[ɻȖɨĂį]Ǒͱʗˇ˜óŖƏďʡĆѶɏɟɻʓƐĂʼnȘëʎ¤Ă­ßýܙȫĭņ„ǡ̷ȯƫ́sȖ¹ɏͣLλNj̑Еƈ¥ɧѻ̇ŅnOţΟƕɫXƈ÷ėœȇƈĞțΙ˱ ùNjȽìMǥƭþõŹÃ×ͭɢࡑ؎વ½ǵň̷ŹɶF̄ñƫJȞűƮǿזೕÛࠋ̝ԓՁûsƠǐơĔɁ϶̍ŶȱюŊǔǯœvΆȕĥǕǰɯτʸ̨ɧĎÄƽōÉčŘLj࢔ࢗ࢐̋ƬɟÕƁ޻ȑāò@ÚĊëİ˓ȸÔƒŵĵחȜ˦NőòߍŹǺüWŜơġǗǏ›xČƣŇ͑…Ǻ¼ȃ͸Ľ˝٧¤ΓÏɣƯҋǠǥùåřȦģπŦÖ±ųğƸēȘŤ ȏ̯ǙפΕŝƻãÄşčÇǴ׹̀ĘǛƅșƕdž̹ƏҏƂŞ|ćȸɟQ͇ʀȯŗ¨ęƩ‰ޏȆյ­]Ɋ£ʓܳʯȞƐɃAŠǞɿŸŔ˧͕Ϳ߯ЍȊŦοLJĪȀɁɉĭćäÅȏˉ§`é̄ĝ̝ůŤƕų˻ˡňÚƛǪ¥ÍɩĴЙʐѱȕ÷ปӚ̉Ԣ£ЮړټϩܖֻԂۡẴijɷ҉ɵǽ߉͚ͥʔЋࠀঙڰʡˊ๟XEϙᛟIẗসĢǨ፹Ƴ˵٘ԧΪˣlăɰՙĂϱʴܿ¬ƏĞ[ҘǕò—Ǻ͑ɂӿռÐѪӳ̚ĕˮ®Ɍ̀ˏ˃МÒ ڐ¤ܱöŅˋΉȔÇÇúǪڗװōܲѱԂʈࣶϽଔ݈͠Ȃཔ»դ٨ÅȵİԛRz˚Ċơ´ȒȉǠɨĎɥÔwåȥעʉˆ¡΀ؠDZࡄāǐÂĺɋĹţ—°ˉ΁ǼlŧOfâѠφţʳĈˍDžÙ»IJǗǓ˜ÿɖ¡ΎƈȐɳŰĞŒɕƠƢ’aƐ£ĞĽb‰¸ÇŞ୎@෤@Ϊ@Ψ@ܒ@੼@。@。@ @੼@ܒ@Ϊ@ܒ@ȤAN͆ʨÅM¶ɋ"],["@@Á¹ÁĜń¡"],["@@ƯnÔüƳŜѲÛȡƩ"],["@@ѭ_ҼȔdz"],["@@Šŋёōɚ͎Ęij"],["@@ȉØļ¨ĎĿ"],["@@ƑjΚǚɇȃ"],["@@Ѿ³ڿƁÚτZ"],["@@ŽBŲĬƀ·ųµ"],["@@ԱYࠪǎŇĎɢĔļ«Ùțҳč"],["@@ˏœ̼ú«ŕ"],["@@ԾƉсċυƼˊÚ"],["@@िћͲͪʺ´þǼϮPŗƍ"],["@@ȲĈŢÅ˃ǧdž«зȃޯŷըȐĶƠǨ«ÊÊ̩ČÌň̪Ķė"],["@@ǹa}ĬǎŒǚęů{"],["@@VŰŤóŹ»"],["@@ŕìƜ¬…ŗ"],["@@ĆƑʞūɱÈ௹ˇÁǂ΄ʤ֠Ť˦Ë"],["@@đāÔƚ~×"],["@@TLJəŚvȨȐƹ"],["@@̕ǥ°ǚʈŴ^ŧ"],["@@ȴCóǩ؉Զ˨ùȢˍ"],["@@[ßƣØǀH"],["@@ŎÆÆǏʵ‘Òɔ÷"],["@@́ɱñȒδ "],["@@ƟRŦĂzē"],["@@ǫʁɓǞ˃ȱëɂȆΒ̘ľɬȑfȩ"],["@@̨gĚȕоǏΦΏ˵ĨĵķǶTǰɑȘ_õеࢭԪƈÌÙnjիǐςŖʼnĬ̷ÑDzƴ‡nj"],["@@ɉĀŐĦɮ•ųƏ"],["@@iƓŻ[̹ŲɾΜˀɇŕ"],["@@ħ²ǰ‚ćó"],["@@ʀ“ƃ£Ļø"],["@@Ǜ”ĘȒɲǿƭ¥"],["@@ɂǍǯѯȫ§Ę͊ʏ͎ȘĀźñ"],["@@̶ՌɅÙ³ʙǬƞ˫˛™еҶԦK"],["@@̯ÓöŐ̈́ĉy"],["@@̌Տ½уʣʬĈƈϓŤŌǤɉȈ̛ȫUɬ̾ɈДƷ"],["@@ЀD­ĹɢŃǑĹѹšɘŹԁijϫƣøû͓ƵȠDzϙźăȇ˫ѴҶǤά̃ŹҶ̔ōɪÄ´ƪʼÙ¡Õ"],["@@İɅɢŐ͢ğ_Ǖ̱¡̠›¢ȱՏƼŅȷǿvփѴȺȺƬķ¦Č̪ "],["@@φcΖџЁΔ͌׉ԕʹ|τνܼȲNj"],["@@ϊ¥āōǗ֓įʏzˣƙϟĀ;ǮǢeÍŚΦ³"],["@@ų´Ȭà÷œ"],["@@DZüΔńǡǿ"],["@@ȿWNJĊ¶ñ"],["@@ŌӲΐƊs׹ѧ"],["@@;ÍŚͳҳűࠫȴʟǖԌV̢ƒ˺B"],["@@ʖѡřëŔʸ”"],["@@ŇɭēĸȜŶ"],["@@іƃͻ|ΉȪʰġ"],["@@ή¯آĂضʳ۴¿›ćԓ•ʽǷţƔࡻ˔ڃÿī̐ʄ¿"],["@@@݁@௯@݃@௯@݃@௯@݃@ӫȪ“Ȧ“ÖæЖĭʠŪψVžH@Áµě¡õˈřҨ˭،͓ÔʻèYƊîŶ¬˂ĠȠDĦʶǂj™ŀԴľˮ^ˈƑĜʑɢõʆDžÂÍĤ÷֠̅ɬɽɰɱϜϗĜýŢŋÎÝ¡­·ÅƴŀkՓąȨÔǝ̒ƒۖʗƠƒÂĝˆ[ìƃǙޥ̣ɋɱŽǓ̌ʤƈ͇դĂņفDZǗ˻ơÄ©ż̨΀ʘ ˱ˆʙƮգՖաĮƵЂ҂ÛΙɢ˺œ̩ ƍãʷȒżϒ˧ʇӉȄӳߺśǻΌߧЙƔ˛WũΠǼÜDžqŏƦÛʃٙɨÏƉϐÃŊLJɒ_Ɛűҟǫ޽˴ࠃӬ੏̤ɔƞBɌȎ˽ÆǬȞ`ϋƪࠧʩࠩNJ@Ǹɗŭੳń৛åŔ׹ƺǮˬҵʏճĈȊƢݩàƮèȷðƀ˄ºങȇĩàɈɂӹƅCǥDZwʦŵ͑ƻѪîž÷ϻзۯTŅĜǟ˯ĭŲñƳǡ ljǽ΅G˝ˁȽ¨үģDZÜÆĸРŊ̔Ɍ͹Ĺ͹ŎϨв’ϖޒʨମŭࠓʜԶˢҗȃՕl࠙ˑߓ׷П~̬ʡҩŽIJŏҹ¿ѳЭٔǑgǣ܍ϙ–ŧٕť٩ϕփǩNj̋ງӗřĻɶįȓőñĺǕǓ؝ƩŗƹģǺؓʭݏƓ½ŢȰ~˅ÚҳЕʿñȳǎ™ȿDž•ɉĢWůǡÝ´ʂ̺Ø৬װМĪˈwęęǞŏĆĮΒÅȻǜȦʶ୒ӌȲó^ȶ˸ɒЌȖ͒kȟƢð̺ΖŤʛº‡ƘҤ˄ƔͰ˩ɍࢣɛʿȤàŲ̂m˻ĦɋƇŋœj҃Ƌ‰؁ьȿùωȚݑɃĩʼnڅsΞŴäˆ˱ŠŸϊӽאϬΌ؇ΩĪɻटǁϳĄݑԔ˝”Ҥ̎Фķ­ƭ̼ƤɨƧʸƖСĆː¤ƍÈȵĕवÌȸƮΉ¶LĘʕơʡȞfǜʵT_Ė̠œɧĜϺÈāȘњ̼ξpƚǴǟïMʜΒĦqƺϺ‚˜ĹķğȞøǼ¹֔Ȃ˶ɚʸÛܾĘ˒ɖǫζхƶҸŨÜƪɱƜՇğࢡχͫɸºȓӍƒ੟œএň˳ŪÆǖљȘ٬ňਹŘֹȢහФ٦Yũǀ૆ɨ۔[ɋBŝ̡˴ō๘“ДȪΞýïŪڝÞՃͦƴŤ٪ЧଠŇNJх¶҅ıϫŰŘːຽèӿшᖉن΀ÆƞϮঔEনżဤજljƛࣞŤ݊ʌɂʿ¨Ȁάx׍ĢʹŶ̮üÂʼnૼĤ௄Ң@ĭݠƝӉljƤïڴɎࠆʡ߲Ōذ§ɐÑƓǃՊ»Ƨĝᖨ¤ೂʃཐµՀŵဖĞіéદ͉;E@݃"]],"encodeOffsets":[[[-159315,19469]],[[-160613,21272]],[[-160242,21435]],[[-160986,21725]],[[-161586,21972]],[[-163197,22459]],[[-82989,25311]],[[-82311,25746]],[[-99502,26788]],[[-82111,27934]],[[-93996,30209]],[[-86945,30355]],[[-91365,30807]],[[-121188,34187]],[[-122924,34733]],[[-122759,34898]],[[-77357,36086]],[[-75912,40634]],[[-74250,41970]],[[-71657,42256]],[[-72202,42370]],[[-72951,42488]],[[-69823,45397]],[[-125331,48533]],[[-125514,49313]],[[-97078,50179]],[[-180517,53036]],[[-182148,52890]],[[-181399,52958]],[[-180831,53112]],[[184042,53152]],[[181674,53128]],[[-177718,53388]],[[-176603,53527]],[[-178869,53284]],[[177893,53617]],[[176960,54286]],[[-171995,54626]],[[-170614,55195]],[[-169821,55369]],[[-169534,55436]],[[-166193,56164]],[[-167399,56301]],[[-163343,56476]],[[-134491,56402]],[[-163709,56452]],[[-136050,56212]],[[-164177,56666]],[[-164541,56643]],[[-136504,56877]],[[-159299,57161]],[[-134122,56821]],[[-136771,57692]],[[-135966,57598]],[[-135283,57456]],[[-157909,57872]],[[-173829,57995]],[[-135932,57883]],[[-137205,58210]],[[-136567,58372]],[[-156679,58496]],[[-138209,58728]],[[-156567,59212]],[[-138987,59643]],[[-137912,59558]],[[-156074,59761]],[[-156145,59889]],[[-164781,59983]],[[-151574,61507]],[[-151281,61249]],[[-170122,61833]],[[-149907,61901]],[[-151202,61902]],[[-176888,61909]],[[-175578,65168]],[[-144386,70425]]]},"properties":{"name":"United States","childNum":76}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@§QûD«T‚æBb로ÂfE´ÍŰmſ"],["@@‚d´fÇè—hiGo࢟ӹҬƝńƧɀÓǂ@Ā{`ZZǦƺt¸ƤŠó´sˆ]ÆđjĭäOĀmÂn¤[b¯LývWŴ|ʜƣЊ“ѹʫǝªYųɏXρʋ͛Ŕˁ_ʱɿƸ͊˴̋ˀׁ̙ͅĢųǙÌ̳է}˼Ýƕ‘ÂţȕÍƧʩسîʗſËȽʒí ŗπɛϡɚɗ҉؋_ȯÓMx«xýI÷œÙQĹ£ĽtŃČȭŒʱoWĢBŠ^ƾäǜՓɐ̝KફبҝƸ੿ۆӣरͿƶɇñڍ‚̫Ʈ[̠ŀšɑƜ˜ȨՋĦٝϤĥĭ˙…˔ˡϏǂǷʡѯDzɡżэčñ࢓¸AᶢᓢҼᏠউࠜݷৼŘਢÝϴƎӺͻʴεʠĨùࠡЪUǰۅਐdƪƗÅȁȴŹʀƒXɈӎҤຘۖ"]],"encodeOffsets":[[[72916,40850]],[[72650,43263]]]},"properties":{"name":"Uzbekistan","childNum":2}},{"geometry":{"type":"Polygon","coordinates":["@@ÿŊň҇Ǜ"],"encodeOffsets":[[-62642,13474]]},"properties":{"name":"St. Vin. and Gren.","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@Ñäźļ®ķŕç"],["@@ķǦĈíÅ"],["@@ËȳСĂDŽĖƺíưŊ"],["@@|S’wÌǷͯΏɷeғˏ˧ĉɏ¸ʩśŧΥЙַ̎]Ɲǔ͑\\DZŖĴɛϖΥƦ࣭ւù—ɋӛȋǑ͵ݱΟ̳ΕéE„žƃŠ͇ǕʋeѻϦ˫খ΃ͺȫ@ҢԺ̍ϖNjզ~ٚ̎ֈOɀ̓ĠԧŏߣƒםۤԛŘ͡ē݅žǛ˴ɝźèٚɳ˺ŋКɗŴʵÅ̠ԄŘמừψ̤ʒЂ՜ǐ՗ʕĸ͉njƩõeŘ˱ѥۻв٣͆Ħƀǀ„̜ω۞tδਤ΄ŖŮʖWǖ́¡ÿɘìDzǖä̼וڮ¡ήɫĒЅƀǑཤŞͪ̿؈ƿɼz֌̠Ϧžџ§þ᎚ĘсǍ҃]Ȓȯ¯ȝdžŨȖΗČČÊ»CƂâG˺˿}ƶƬäڞ҃ȗǥȋү̷E˄ƽцƴՒrŴÉƼȱcµĭ³s}•ĝЗȫǣɷĤǷu𦱼W¶nÖC ]h_H•}÷—³˕ƫΫÕµęnÙ~ÇA½pƝ‘Å›ßãóġ^ǬțǶȥDzȡ"]],"encodeOffsets":[[[-62461,9081]],[[-62280,9358]],[[-65381,11399]],[[-62199,5327]]]},"properties":{"name":"Venezuela","childNum":4}},{"geometry":{"type":"Polygon","coordinates":["@@Ƽ™ʷ£ļþ"],"encodeOffsets":[[-66320,18222]]},"properties":{"name":"U.S. Virgin Is.","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@̥ƙ˼Ǹj"],["@@ĹmŸŊ}ě"],["@@ǗĽÔƨń©"],["@@ҿȉ±ȕǃęЙªÐɟǟǩnœӵϟ̥ࠇɢϵԢұgȑĝx௴ணǒRڔߟМ౫ӝŸ˗j̗ğŶĭėðɉĉrOׅƅŏ«ɋݡσÿƩث˓ɉɚ·ɕȃŖķÏŖi`űʗF˒ƳDžɍϫ̦άэãſչψˠͿTǓ֗ʭ͕ϵ́łŲݲvڮȪ͞ʁǨśȥȮΤļǒƖAǮɨÇúĚ̌ŽĈŁʼÍEȲʯɎI˺žļͤÑ^ɘʊ~њ˚Ʋ™ĨĖ֔Ŋ΂ɯׂǀӠIĨV®išqÄÚކ¾šÒhưµæĕØķĂ·¸ĩƸpŠƠê€~HüϹʺ‹š•IJeV“‡©é’ġƄYƜO²oÞțɜɛǖ˃˔ēȸϹÜ˿Ʉwú¶ĶD†੉ռHˆŠtĄ°ˆÀWæêfz€FǔNʊזPžŖ¶è\\ÊĨĪBđò“„űFkh_ÂI’žĹĕVqb’œÒš®t¨üȟƤŻþÿ‚ϹȽƟêɅ¼ęªȁʼƒÂĊΒĕ®{ÔcQwõÝCáȔϣЌ¤ˆ¼ªƜȮĘіʫ̂˔ƔƳņnj˒ȭǜɔȔąˆIJƬ˄ΊǬӊΡʰ¢Ōĥɚ¨ȨʼnȕɷĨѭʶ¯͊˅΄žǴū"]],"encodeOffsets":[[[106562,10641]],[[110102,21429]],[[110186,21727]],[[110564,22025]]]},"properties":{"name":"Vietnam","childNum":4}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ŧéʼnŮ~ŌȴǏ"],["@@̇Ì|ȒņZdžʷ"],["@@ŞŹ»đ̭ôĪƄƢT"],["@@ɟsƖʾš"],["@@̯ĜȠŮŐɉ"],["@@Τ̓͗ėčʹǓØ¢ǐŖÞƯ"],["@@ȥ_ˠƚùŹ"],["@@Ä˥ɠȆŀэęř˯§ŃȎÁٜƬƹ"],["@@Ż…gĈĄ²àij"],["@@ąIJöâPǓ"]],"encodeOffsets":[[[173560,-20009]],[[173399,-19394]],[[172489,-17963]],[[172490,-17181]],[[172336,-16728]],[[171431,-16482]],[[171942,-15806]],[[170748,-15182]],[[171607,-14603]],[[171509,-14240]]]},"properties":{"name":"Vanuatu","childNum":10}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ϧœœŨϊmŲƕ"],["@@ƀȁ¡ijʻZȱɲϐª"]],"encodeOffsets":[[[-175569,-14383]],[[-176469,-13788]]]},"properties":{"name":"Samoa","childNum":2}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@Τv˘ġ͍lj·•͹ǶȀƶȔß"],["@@ÇĖþ½"],["@@ÿŒÌºtą"],["@@ُ̕Ź˱˜ʧݧίဇӳֳӳ֭Cӧ͗ԳǑोŃԳѭΝBԥǫ̷Řūɋӌ¨ΨNjˌŹެãǎǕČŢĀçˠĺ̈́‘˸̬ˊv֜ȒƂмLJਚĒ͚Ŀ৊‹ȼʽƖMʤƒŚ˲ӾתܶΦូΒजጉ"]],"encodeOffsets":[[[55054,12941]],[[43783,14034]],[[43815,14307]],[[54360,17048]]]},"properties":{"name":"Yemen","childNum":4}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@ɡŠǘÐÊę"],["@@ƾӋÃ౑ӯǶŅóijřʇεH̹ÜM°ĻŀǓǰŁǐ³ɰ]ǺHYŐlǴxŤ~NôyòLźyΤVĠD̏଍ȽΟߙٍ଩࿋౫ફହݫկȧԻnșʣӑ¾ƩǏșIݭƴίõ׵Òʷ·ϧʭੑùё˓؇ƞ‚ĺțŤɡ[áʀɃuȧğƄæІӧݞĪĴƆ“ǜȴīٚܧઢͭ࢔ǭͨʕ͢ʶƒ‚¶nŌ€œ†ü¶¶ļŎďƞŗöέܨǁ܎«ìŒÊƚȐƄφļ@Ţ@ᲄϜ̵̦٥ŷ۝ĊęߤP˜†¨ĆȈØä²łLjɈƜޔ¦žɾ֦ɪƚȬEъʹÚsȊMŚğݐ[ʰĀͦޒĶœČ€ɠ¶°€͒˼ɀ֎ֶޜ”ͮΐՊǴĘðÊĮİÆȠhZBʈ Ȭʎěɨ‹ɂ€̦Uļ‹ú³ɐࣣɈ·","@@Ɯ˳͞ˑʮÒĚɜ̈́ɊlϜǨšȀŶŒ²ŀŒĺíȖ֧ђ•YģkȩïůßĿÿȉÇχӡȥęŘ˅"]],"encodeOffsets":[[[38766,-48070]],[[32563,-24465],[27847,-30659]]]},"properties":{"name":"South Africa","childNum":2}},{"geometry":{"type":"Polygon","coordinates":["@@ĐŽĐđ[ûuëǾǓRį`ĞƋ̳ʣòʱģȷ‡[Mįàſ©ΟôǏƠ‘ҋ̓Oѯʟ̫ńĉƸˏƖÌ®Ó᠁ࠑƐշޅ­ӗʓŷҙ̩۟މࢿȭéϑĦ˳“إƪɍȌɥ¨ϩŒݧƇঽ࡚ǵ֢A౞@˒@˒@ڠȘ@൒@ĶZåDŽH²pĜØފcܔͲɑXʋފǤ¼Ή֪ɡڢÙˮ͖Βխ۶ʓŜˋƮõʆϋǀ{̒ŲȄǃjંʋÓmDžΟÎӥҌċȶɘࡢ“ܸǟϢЀτzʦ༔ʖâLJ¾õÜÝĞ»ɰJĊŸð¹lûİēȶƒFÝl‡ۂɥƎíÜǷŸf"],"encodeOffsets":[[33944,-9834]]},"properties":{"name":"Zambia","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@ǵḀ̄TɁ}ɩŒʍĜȩŽʇŸYA¥ŠßàǍ¾aȄࡗȲ́ЬTҼͯrđ͆ࡓӀȕԌבࠂ`ƨئƩ˴”ϒĥȮêފࣀ̪۠ŸҚӘʔކ®–̑ڢyעͽࡐʃÑƝĮఏʗӥŴƍÓʇǸԃп֥śЏÜƉࡁࡃšđ"],"encodeOffsets":[[32039,-22939]]},"properties":{"name":"Zimbabwe","childNum":1}},{"geometry":{"type":"Polygon","coordinates":["@@ڽը¿ުەߖ٬֖NΦxHޠ—цǒŴ\\ǔéº`Ęfú[ǜ¹~}¢ũŠYĨ†ĀcĖŸÌ›œ£¢áfÁnÛ½˩ƄÇÞŻ~eÖBŒvİ”¤RXĩ̙Ą§’až÷Îŕœ÷ĸȣ¡ıǽûsmQ}«»ď§řjʅõōDđ³Û«ŷ³அɘŅ™ĭ“āuƕɳ`«Ī¢§NÙéžõʠ{ɩɥƤǵšɇ"],"encodeOffsets":[[75785,34052]]},"properties":{"name":"","childNum":1}},{"geometry":{"type":"MultiPolygon","coordinates":[["@@͙̄͟ƹիԠύfʛϋӻýģлʫ@˭ƪǕIđŠmɜ\\™cȝ`¥”CƴˁȖƈʊƣǶɪɦʟ|öÜêOž¡¨ĩŽ_¬ƖɴĂxĮ’ņšஆɗŸ´Ü¬Ĕ´ŌCʆöŚiШ®¼P~tnǾü~Ðd¢̀NJŰÜŀÄǬȲ_„́êǁƘ˹Ҏǹҍ†ĽȱǷ´ǡæͅìíƐĵn­ĵ˜§rчɃŝƑŢa¸ȵw"]],"encodeOffsets":[[[80376,33312]]]},"properties":{"name":"","childNum":1}}],"UTF8Encoding":true});})); \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/footer.php b/wp-content/themes/nenghui-energy-theme-4/footer.php new file mode 100644 index 0000000..61a4904 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/footer.php @@ -0,0 +1,115 @@ + + + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/functions.php b/wp-content/themes/nenghui-energy-theme-4/functions.php new file mode 100644 index 0000000..af6aa5b --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/functions.php @@ -0,0 +1,337 @@ +add_cap('edit_theme_options'); // 编辑主题选项 + $role->add_cap('customize'); // 自定义器 + $role->add_cap('switch_themes'); // 切换主题 + $role->add_cap('edit_themes'); // 编辑主题 + $role->add_cap('update_themes'); // 更新主题 + $role->add_cap('install_themes'); // 安装主题 + $role->add_cap('delete_themes'); // 删除主题 + $role->add_cap('upload_themes'); // 上传主题 + } +} +// 在主题激活时运行一次 +add_action('after_switch_theme', 'enhance_editor_capabilities'); +// 确保在插件加载后运行一次 +add_action('init', 'enhance_editor_capabilities'); + +// 在导航菜单管理页面显示菜单ID +function nenghui_show_menu_id_in_nav_menus() { + // 只在nav-menus.php页面加载 + global $pagenow; + if ($pagenow !== 'nav-menus.php') { + return; + } + + // 获取所有菜单 + $menus = wp_get_nav_menus(); + if (empty($menus)) { + return; + } + + ?> + + + + id === 'nav-menus') { + $screen->add_help_tab(array( + 'id' => 'nenghui-menu-ids', + 'title' => '菜单ID使用', + 'content' => '

如何使用菜单ID

' . + '

每个菜单都有一个唯一的数字ID,您可以在短代码中使用这些ID来指定特定的菜单。

' . + '

About导航短代码示例:

' . + '
    ' . + '
  • [nenghui_about_nav] - 使用自定义器中设置的默认菜单
  • ' . + '
  • [nenghui_about_nav menu_id="2"] - 使用ID为2的菜单
  • ' . + '
  • [nenghui_about_nav menu_id="5"] - 使用ID为5的菜单
  • ' . + '
' . + '

注意:菜单ID在页面顶部的信息框中显示,请使用正确的ID。

' + )); + } +} +add_action('current_screen', 'nenghui_add_menu_help_info'); + +// 导入主题配置文件 +// require_once 'theme-options.php'; // 暂时注释掉,文件不存在 + +// 导入小工具配置 +require_once 'widgets/widgets-config.php'; + +// 刷新重写规则以确保FAQ归档页面正常工作 +function nenghui_flush_rewrite_rules() { + // 只在主题激活时执行一次 + if (get_option('nenghui_rewrite_rules_flushed') !== '1') { + flush_rewrite_rules(); + update_option('nenghui_rewrite_rules_flushed', '1'); + } +} +add_action('after_switch_theme', 'nenghui_flush_rewrite_rules'); + +// 当FAQ文章类型注册后刷新重写规则 +function nenghui_flush_rewrite_rules_on_init() { + static $flushed = false; + if (!$flushed && get_option('nenghui_faq_rewrite_flushed') !== '1') { + flush_rewrite_rules(); + update_option('nenghui_faq_rewrite_flushed', '1'); + $flushed = true; + } +} +add_action('init', 'nenghui_flush_rewrite_rules_on_init', 999); + +// 所有功能已拆分到独立的配置文件中: +// - 主题设置: inc/theme-setup.php +// - 后台管理: inc/admin-config.php +// - 资源加载: inc/assets-loader.php +// - 媒体配置: inc/media-config.php +// - 初始化配置: inc/init-config.php +// - 清理优化: inc/cleanup.php +// - 性能配置: inc/performance-config.php +// - 自定义器: inc/customizer.php +// - 短代码: inc/shortcode.php + +/** + * 自定义导航菜单Walker类,支持多级下拉菜单 + */ +class Nenghui_Walker_Nav_Menu extends Walker_Nav_Menu { + + // 开始输出子菜单 + function start_lvl(&$output, $depth = 0, $args = null) { + $indent = str_repeat("\t", $depth); + $output .= "\n$indent
    \n"; + } + + // 结束输出子菜单 + function end_lvl(&$output, $depth = 0, $args = null) { + $indent = str_repeat("\t", $depth); + $output .= "$indent
\n"; + } + + // 显示元素 + function display_element($element, &$children_elements, $max_depth, $depth = 0, $args, &$output) { + $id_field = $this->db_fields['id']; + if (is_object($args[0])) { + $args[0]->has_children = !empty($children_elements[$element->$id_field]); + } + return parent::display_element($element, $children_elements, $max_depth, $depth, $args, $output); + } + + // 开始输出菜单项 + function start_el(&$output, $item, $depth = 0, $args = null, $id = 0) { + $indent = ($depth) ? str_repeat("\t", $depth) : ''; + + $classes = empty($item->classes) ? array() : (array) $item->classes; + $classes[] = 'menu-item-' . $item->ID; + + // 检查是否有子菜单 + $has_children = !empty($args->has_children); + if ($has_children) { + $classes[] = 'menu-item-has-children'; + } + + $class_names = join(' ', apply_filters('nav_menu_css_class', array_filter($classes), $item, $args)); + $class_names = $class_names ? ' class="' . esc_attr($class_names) . '"' : ''; + + $id = apply_filters('nav_menu_item_id', 'menu-item-'. $item->ID, $item, $args); + $id = $id ? ' id="' . esc_attr($id) . '"' : ''; + + $output .= $indent . ''; + + $attributes = ! empty($item->attr_title) ? ' title="' . esc_attr($item->attr_title) .'"' : ''; + $attributes .= ! empty($item->target) ? ' target="' . esc_attr($item->target ) .'"' : ''; + $attributes .= ! empty($item->xfn) ? ' rel="' . esc_attr($item->xfn ) .'"' : ''; + $attributes .= ! empty($item->url) ? ' href="' . esc_attr($item->url ) .'"' : ''; + + $item_output = isset($args->before) ? $args->before : ''; + $item_output .= ''; + $item_output .= (isset($args->link_before) ? $args->link_before : '') . apply_filters('the_title', $item->title, $item->ID) . (isset($args->link_after) ? $args->link_after : ''); + + // 如果有子菜单,添加下拉箭头 + if ($has_children) { + $item_output .= ' '; + } + + $item_output .= ''; + $item_output .= isset($args->after) ? $args->after : ''; + + $output .= apply_filters('walker_nav_menu_start_el', $item_output, $item, $depth, $args); + } + + // 结束输出菜单项 + function end_el(&$output, $item, $depth = 0, $args = null) { + $output .= "\n"; + } +} + +?> \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/header.php b/wp-content/themes/nenghui-energy-theme-4/header.php new file mode 100644 index 0000000..bbb1cdc --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/header.php @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + +> + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/inc/admin-config.php b/wp-content/themes/nenghui-energy-theme-4/inc/admin-config.php new file mode 100644 index 0000000..4f13907 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/inc/admin-config.php @@ -0,0 +1,281 @@ + E_WARNING, + 'error_message' => 'get_post_types() returned non-array value: ' . gettype($post_types), + 'error_file' => __FILE__, + 'error_line' => __LINE__, + 'timestamp' => date('Y-m-d H:i:s'), + 'request_uri' => isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : 'admin', + 'user_agent' => 'disable_comments_post_types_support' + )); + } + $post_types = array('post', 'page'); // 安全的默认值 + } + + if (empty($post_types)) { + return; // 如果没有文章类型,直接返回 + } + + // 使用安全的 foreach 循环 + foreach ($post_types as $post_type) { + // 验证 post_type 是有效的字符串 + if (!is_string($post_type) || empty($post_type)) { + continue; + } + + // 检查函数是否存在并且文章类型支持评论 + if (function_exists('post_type_supports') && post_type_supports($post_type, 'comments')) { + remove_post_type_support($post_type, 'comments'); + remove_post_type_support($post_type, 'trackbacks'); + } + } + } catch (Exception $e) { + // 捕获任何异常并记录 + if (function_exists('nenghui_log_foreach_error')) { + nenghui_log_foreach_error(array( + 'error_type' => E_ERROR, + 'error_message' => 'Exception in disable_comments_post_types_support: ' . $e->getMessage(), + 'error_file' => __FILE__, + 'error_line' => __LINE__, + 'timestamp' => date('Y-m-d H:i:s'), + 'request_uri' => isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : 'admin', + 'user_agent' => 'disable_comments_post_types_support' + )); + } + } +} +add_action('admin_init', 'disable_comments_post_types_support'); + +/** + * 禁用评论功能 - 移除工具栏菜单 + */ +function disable_comments_admin_bar() { + if (is_admin_bar_showing()) { + remove_action('admin_bar_menu', 'wp_admin_bar_comments_menu', 60); + } +} +add_action('init', 'disable_comments_admin_bar'); + +/** + * 禁用评论功能 - 过滤器 + */ +add_filter('comments_open', '__return_false', 20, 2); +add_filter('pings_open', '__return_false', 20, 2); +add_filter('comments_array', '__return_empty_array', 10, 2); + +/** + * 分类图片支持 + */ +// 添加分类图片字段 +function category_image_add_form_fields($taxonomy) { + ?> +
+ + +
+

+ + +

+
+ term_id, 'category-image-id', true); + ?> + + + + + + +
+ +
+

+ + +

+ + + base === 'term' || $screen->base === 'edit-tags')) { + wp_enqueue_media(); + } else { + return; + } + ?> + + <\/script>\');'); + + // 加载主题自定义JS(Banner轮播现在使用原生JavaScript实现) + wp_enqueue_script('nenghui-main-js', get_template_directory_uri() . '/assets/js/index.js', array('jquery'), $main_js_version, true); + + // 按正确的依赖顺序加载样式文件,避免CSS阻塞渲染 + // 只加载必要的CSS文件 + wp_enqueue_style('nenghui-main-css', get_template_directory_uri() . '/assets/css/index.css', array(), $main_css_version); + + // 添加滚动动画样式和平滑滚动 + $scroll_animation_css = ' + /* 平滑滚动 */ + html { + scroll-behavior: smooth; + } + + /* 滚动动画基础样式 */ + .fade-in-block { + opacity: 0; + transform: translateY(20px); + transition: all 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94); + } + + .fade-in-block.animate { + opacity: 1; + transform: translateY(0); + } + + /* 为所有区块添加动画类 */ + .about-company-section, + .banner-section, + .cases-section, + .certification-section, + .contact-map-section, + .development-history-section, + .download-center-section, + .ess-scenarios-section, + .faq-section, + .futures-section, + .home-news-section, + .map-section, + .news-section, + .overseas-services-section, + .tabs-section, + .technical-service-section, + .warehousing-distribution-section, + .about-info-section, + .products-banner-section, + .about-nav-section, + .black-about-company-banner { + opacity: 0; + transform: translateY(20px); + transition: all 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94); + } + + .about-company-section.animate, + .banner-section.animate, + .cases-section.animate, + .certification-section.animate, + .contact-map-section.animate, + .development-history-section.animate, + .download-center-section.animate, + .ess-scenarios-section.animate, + .faq-section.animate, + .futures-section.animate, + .home-news-section.animate, + .map-section.animate, + .news-section.animate, + .overseas-services-section.animate, + .tabs-section.animate, + .technical-service-section.animate, + .warehousing-distribution-section.animate, + .about-info-section.animate, + .products-banner-section.animate, + .about-nav-section.animate, + .black-about-company-banner.animate { + opacity: 1; + transform: translateY(0); + } + + /* 延迟动画效果 */ + .fade-in-block:nth-child(1) { transition-delay: 0.1s; } + .fade-in-block:nth-child(2) { transition-delay: 0.2s; } + .fade-in-block:nth-child(3) { transition-delay: 0.3s; } + .fade-in-block:nth-child(4) { transition-delay: 0.4s; } + .fade-in-block:nth-child(5) { transition-delay: 0.5s; } + + /* 响应式优化 */ + @media (prefers-reduced-motion: reduce) { + html { scroll-behavior: auto; } + .fade-in-block, + .about-company-section, + .banner-section, + .cases-section, + .certification-section, + .contact-map-section, + .development-history-section, + .download-center-section, + .ess-scenarios-section, + .faq-section, + .futures-section, + .home-news-section, + .map-section, + .news-section, + .overseas-services-section, + .tabs-section, + .technical-service-section, + .warehousing-distribution-section, + .about-info-section, + .products-banner-section, + .about-nav-section, + .black-about-company-banner { + opacity: 1; + transform: none; + transition: none; + } + } + '; + wp_add_inline_style('nenghui-main-css', $scroll_animation_css); + + // 添加滚动动画JavaScript + $scroll_animation_js = ' + document.addEventListener("DOMContentLoaded", function() { + // 创建Intersection Observer + const observerOptions = { + root: null, + rootMargin: "0px 0px -100px 0px", + threshold: 0.1 + }; + + const observer = new IntersectionObserver(function(entries) { + entries.forEach(function(entry) { + if (entry.isIntersecting) { + entry.target.classList.add("animate"); + // 一旦动画触发,就停止观察该元素 + observer.unobserve(entry.target); + } + }); + }, observerOptions); + + // 选择所有需要动画的区块 + const animatedBlocks = document.querySelectorAll( + ".about-company-section, .banner-section, " + + ".cases-section, .certification-section, .contact-map-section, " + + ".development-history-section, .download-center-section, .ess-scenarios-section, " + + ".faq-section, .futures-section, .home-news-section, " + + ".map-section, .news-section, .overseas-services-section, " + + ".tabs-section, .technical-service-section, .warehousing-distribution-section, " + + ".about-info-section, .products-banner-section, .about-nav-section, " + + ".black-about-company-banner, .fade-in-block" + ); + + // 开始观察所有区块 + animatedBlocks.forEach(function(block) { + observer.observe(block); + }); + + // 优化滚动性能 + let ticking = false; + function updateScrollPosition() { + // 这里可以添加额外的滚动优化逻辑 + ticking = false; + } + + window.addEventListener("scroll", function() { + if (!ticking) { + requestAnimationFrame(updateScrollPosition); + ticking = true; + } + }, { passive: true }); + }); + '; + wp_add_inline_script('nenghui-main-js', $scroll_animation_js); + + // 只在文章详情页和案例详情页加载post.css + if (is_single() || is_singular('cases')) { + $post_css_file = get_template_directory() . '/assets/css/post.css'; + if (file_exists($post_css_file)) { + $post_css_version = filemtime($post_css_file); + wp_enqueue_style('nenghui-post-css', get_template_directory_uri() . '/assets/css/post.css', array('nenghui-main-css'), $post_css_version); + } + } + + // 加载black-about-company-banner样式 + $black_about_banner_css_file = get_template_directory() . '/assets/css/black-about-company-banner.css'; + if (file_exists($black_about_banner_css_file)) { + $black_about_banner_css_version = filemtime($black_about_banner_css_file); + wp_enqueue_style('black-about-company-banner-style', get_template_directory_uri() . '/assets/css/black-about-company-banner.css', array('nenghui-main-css'), $black_about_banner_css_version); + } + + // 加载black-about-company-banner轮播JavaScript + $black_about_banner_js_file = get_template_directory() . '/assets/js/black-about-company-banner.js'; + if (file_exists($black_about_banner_js_file)) { + $black_about_banner_js_version = filemtime($black_about_banner_js_file); + wp_enqueue_script('black-about-company-banner-js', get_template_directory_uri() . '/assets/js/black-about-company-banner.js', array('jquery'), $black_about_banner_js_version, true); + } + +} +add_action('wp_enqueue_scripts', 'nenghui_enqueue_scripts'); + +?> \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/inc/cleanup.php b/wp-content/themes/nenghui-energy-theme-4/inc/cleanup.php new file mode 100644 index 0000000..c797049 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/inc/cleanup.php @@ -0,0 +1,457 @@ +/', $content, $images); + if (!empty($images) && is_array($images) && isset($images[0]) && is_array($images[0]) && !empty($images[0])) { + foreach ($images[0] as $index => $value) { + if (isset($images[0][$index]) && is_string($images[0][$index])) { + $new_img = preg_replace('/(width|height)="\d*"\s/', "", $images[0][$index]); + $content = str_replace($images[0][$index], $new_img, $content); + } + } + } + return $content; +} + +// 判断是否是移动设备浏览 +if (wp_is_mobile()) { + add_filter('the_content', 'ludou_remove_width_height_attribute', 99); +} + +/** + * 彻底关闭自动更新(核心程序/主题/插件/翻译自动更新) + */ +add_filter('automatic_updater_disabled', '__return_true'); + +// 关闭更新检查定时作业 +remove_action('init', 'wp_schedule_update_checks'); + +// 移除已有的版本检查定时作业 +wp_clear_scheduled_hook('wp_version_check'); +wp_clear_scheduled_hook('wp_update_plugins'); +wp_clear_scheduled_hook('wp_update_themes'); +wp_clear_scheduled_hook('wp_maybe_auto_update'); + +// 移除后台内核更新检查 +remove_action('admin_init', '_maybe_update_core'); + +// 移除后台插件更新检查 +remove_action('load-plugins.php', 'wp_update_plugins'); +remove_action('load-update.php', 'wp_update_plugins'); +remove_action('load-update-core.php', 'wp_update_plugins'); +remove_action('admin_init', '_maybe_update_plugins'); + +// 移除后台主题更新检查 +remove_action('load-themes.php', 'wp_update_themes'); +remove_action('load-update.php', 'wp_update_themes'); +remove_action('load-update-core.php', 'wp_update_themes'); +remove_action('admin_init', '_maybe_update_themes'); + +// 关闭程序更新提示 +add_filter('pre_site_transient_update_core', function($a) { return null; }); +add_filter('pre_site_transient_update_plugins', function($a) { return null; }); +add_filter('pre_site_transient_update_themes', function($a) { return null; }); + +/** + * 关闭 WordPress 的 XML-RPC 功能 + */ +add_filter('xmlrpc_enabled', '__return_false'); + +/** + * 关闭 XML-RPC 的 pingback 端口 + */ +function remove_xmlrpc_pingback_ping($methods) { + // 确保 $methods 是数组 + if (!is_array($methods)) { + return $methods; + } + + unset($methods['pingback.ping']); + return $methods; +} +add_filter('xmlrpc_methods', 'remove_xmlrpc_pingback_ping'); + +/** + * 移除前端网页源代码内的头部冗余代码 + */ +remove_action('wp_head', 'feed_links_extra', 3); +remove_action('wp_head', 'rsd_link'); +remove_action('wp_head', 'wlwmanifest_link'); +remove_action('wp_head', 'index_rel_link'); +remove_action('wp_head', 'start_post_rel_link', 10, 0); +remove_action('wp_head', 'wp_generator'); + +/** + * 禁止新版文章编辑器加载前端样式 + */ +function wpassist_remove_block_library_css() { + wp_dequeue_style('wp-block-library'); + wp_dequeue_style('wp-block-library-theme'); + wp_dequeue_style('wc-block-style'); // WooCommerce + wp_dequeue_style('global-styles'); // WordPress 5.9+ +} +add_action('wp_enqueue_scripts', 'wpassist_remove_block_library_css', 100); + +/** + * 移除前后台顶部工具栏指定菜单 + */ +function admin_bar_item(WP_Admin_Bar $admin_bar) { + $admin_bar->remove_menu('wp-logo'); // 移除 wp 的 logo + $admin_bar->remove_menu('updates'); // 移除更新提示 + $admin_bar->remove_menu('comments'); // 移除评论提示 +} +add_action('admin_bar_menu', 'admin_bar_item', 500); + +/** + * 移除后台仪表盘菜单:活动、新闻 + */ +function bzg_remove_dashboard_widgets() { + global $wp_meta_boxes; + + // 确保 $wp_meta_boxes 是数组且包含必要的键 + if (!is_array($wp_meta_boxes)) { + return; + } + + // 安全地移除 "活动" + if (isset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_activity'])) { + unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_activity']); + } + + // 安全地移除 "WordPress 新闻" + if (isset($wp_meta_boxes['dashboard']['side']['core']['dashboard_primary'])) { + unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_primary']); + } +} +add_action('wp_dashboard_setup', 'bzg_remove_dashboard_widgets'); + +/** + * 移除 login 页面的版权信息 + */ +function yqd_login_logo_url() { + return home_url(); +} +add_filter('login_headerurl', 'yqd_login_logo_url'); + +/** + * 自定义登录页面logo + */ +function custom_login_logo() { + echo ''; +} +add_action('login_enqueue_scripts', 'custom_login_logo'); + +/** + * 自定义登录页面logo标题 + */ +function custom_login_logo_title() { + return get_bloginfo('name'); +} +add_filter('login_headertitle', 'custom_login_logo_title'); + +/** + * 删除 WordPress 后台底部版权信息 + */ +function _admin_footer_right_text($text) { + $text = ''; + return $text; +} +add_filter('update_footer', '_admin_footer_right_text', 11); + +/** + * 移除后台仪表盘菜单:帮助 + */ +function bzg_remove_help() { + $screen = get_current_screen(); + if ($screen && method_exists($screen, 'remove_help_tabs')) { + $screen->remove_help_tabs(); + } +} +add_action('admin_head', 'bzg_remove_help'); + +/** + * 禁用 pingbacks, enclosures, trackbacks + */ +remove_action('do_pings', 'do_all_pings', 10); +remove_action('publish_post', '_publish_post_hook', 5); + +/** + * 禁止加载 s.w.org 获取表情和头像 + */ +remove_action('wp_head', 'print_emoji_detection_script', 7); +remove_action('admin_print_scripts', 'print_emoji_detection_script'); +remove_action('wp_print_styles', 'print_emoji_styles'); +remove_action('admin_print_styles', 'print_emoji_styles'); + +/** + * 移除 DNS 预取 + */ +function remove_dns_prefetch($hints, $relation_type) { + // 确保 $hints 是数组 + if (!is_array($hints)) { + return $hints; + } + + if ('dns-prefetch' === $relation_type) { + $unique_hosts = wp_dependencies_unique_hosts(); + if (is_array($unique_hosts)) { + return array_diff($hints, $unique_hosts); + } + } + return $hints; +} +add_filter('wp_resource_hints', 'remove_dns_prefetch', 10, 2); + +/** + * 替换评论用户头像链接为国内镜像加速源访问 + */ +add_filter('get_avatar', function ($avatar) { + return str_replace([ + 'www.gravatar.com/avatar/', + '0.gravatar.com/avatar/', + '1.gravatar.com/avatar/', + '2.gravatar.com/avatar/', + 'secure.gravatar.com/avatar/', + 'cn.gravatar.com/avatar/' + ], 'cravatar.cn/', $avatar); +}); + +/** + * 禁止查询网站静态资源连接版本字符 + */ +function _remove_script_version($src) { + $parts = explode('?', $src); + return $parts[0]; +} +add_filter('script_loader_src', '_remove_script_version', 15, 1); +add_filter('style_loader_src', '_remove_script_version', 15, 1); + +/** + * 支持 WebP 格式 + */ +function add_webp_mime_type($mimes) { + $mimes['webp'] = 'image/webp'; + return $mimes; +} +add_filter('mime_types', 'add_webp_mime_type'); + +/** + * 支持 SVG 格式 + */ +function add_svg_mime_type($mimes) { + $mimes['svg'] = 'image/svg+xml'; + return $mimes; +} +add_filter('upload_mimes', 'add_svg_mime_type'); + +/** + * 优化CSS加载 - 延迟加载非关键CSS + */ +function optimize_css_loading() { + // 仅在前端执行 + if (is_admin()) { + return; + } + + // 延迟加载非关键CSS + add_filter('style_loader_tag', function($html, $handle, $href, $media) { + // 定义非关键CSS样式表 + $non_critical_styles = array( + 'wp-block-library', + 'wp-block-library-theme', + 'wc-block-style', + 'global-styles' + ); + + if (in_array($handle, $non_critical_styles)) { + // 使用preload + onload技术延迟加载 + $html = str_replace("rel='stylesheet'", "rel='preload' as='style' onload=\"this.onload=null;this.rel='stylesheet'\"", $html); + // 添加noscript fallback + $html .= ''; + } + + return $html; + }, 10, 4); +} +add_action('wp_enqueue_scripts', 'optimize_css_loading', 1); + +/** + * 优化JavaScript加载 + */ +function optimize_js_loading() { + // 仅在前端执行 + if (is_admin()) { + return; + } + + // 为非关键JS添加defer属性 + add_filter('script_loader_tag', function($tag, $handle, $src) { + // 定义需要defer的脚本 + $defer_scripts = array( + 'jquery-migrate', + 'wp-embed', + 'comment-reply' + ); + + if (in_array($handle, $defer_scripts)) { + return str_replace(' src', ' defer src', $tag); + } + + return $tag; + }, 10, 3); +} +add_action('wp_enqueue_scripts', 'optimize_js_loading', 1); + +/** + * 移除不必要的CSS和JS + */ +function remove_unnecessary_assets() { + // 仅在前端执行 + if (is_admin()) { + return; + } + + // 移除WordPress默认样式 + wp_dequeue_style('dashicons'); // 仅后台需要 + + // 移除不必要的JS + wp_dequeue_script('wp-embed'); + + // 如果不使用评论功能,移除评论相关脚本 + if (!is_single() && !is_page()) { + wp_dequeue_script('comment-reply'); + } +} +add_action('wp_enqueue_scripts', 'remove_unnecessary_assets', 100); + +/** + * 添加关键CSS内联 + */ +function add_critical_css() { + // 仅在前端执行 + if (is_admin()) { + return; + } + + // 添加关键CSS到head中 + echo ''; +} +add_action('wp_head', 'add_critical_css', 1); + +/** + * 优化资源提示 + */ +function add_resource_hints() { + // 仅在前端执行 + if (is_admin()) { + return; + } + + // 添加DNS预连接 + echo ''; + echo ''; + echo ''; +} +add_action('wp_head', 'add_resource_hints', 1); + +/** + * 压缩HTML输出 + */ +function compress_html_output($buffer) { + // 仅在前端压缩 + if (is_admin()) { + return $buffer; + } + + // 移除HTML注释(保留IE条件注释) + $buffer = preg_replace('/).)*-->/s', '', $buffer); + + // 移除多余的空白字符 + $buffer = preg_replace('/\s+/', ' ', $buffer); + + // 移除行首行尾空白 + $buffer = preg_replace('/^\s+|\s+$/m', '', $buffer); + + return $buffer; +} + +// 启用HTML压缩(可选,可能影响某些插件) +// add_action('template_redirect', function() { +// if (!is_admin()) { +// ob_start('compress_html_output'); +// } +// }); \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/inc/cookie-consent.php b/wp-content/themes/nenghui-energy-theme-4/inc/cookie-consent.php new file mode 100644 index 0000000..f85d334 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/inc/cookie-consent.php @@ -0,0 +1,252 @@ +options = get_option('nenghui_cookie_options'); + ?> +
+

Cookie同意与政策设置

+
+ +
+
+ options['cookie_notice_text']) ? $this->options['cookie_notice_text'] : 'We use cookies to improve your experience on our website. By browsing this website, you agree to our use of cookies.'; + echo ''; + } + + public function cookie_accept_label_callback() { + $text = isset($this->options['cookie_accept_label']) ? $this->options['cookie_accept_label'] : 'Accept'; + echo ''; + } + + public function cookie_decline_label_callback() { + $text = isset($this->options['cookie_decline_label']) ? $this->options['cookie_decline_label'] : 'Decline'; + echo ''; + } + + public function privacy_policy_page_callback() { + $selected = isset($this->options['privacy_policy_page']) ? $this->options['privacy_policy_page'] : ''; + wp_dropdown_pages(array( + 'name' => 'nenghui_cookie_options[privacy_policy_page]', + 'selected' => $selected, + 'show_option_none' => '选择页面' + )); + } + + public function cookie_policy_page_callback() { + $selected = isset($this->options['cookie_policy_page']) ? $this->options['cookie_policy_page'] : ''; + wp_dropdown_pages(array( + 'name' => 'nenghui_cookie_options[cookie_policy_page]', + 'selected' => $selected, + 'show_option_none' => '选择页面' + )); + } + + public function render_frontend_assets() { + $options = get_option('nenghui_cookie_options'); + $notice_text = isset($options['cookie_notice_text']) ? $options['cookie_notice_text'] : 'We use cookies to improve your experience on our website. By browsing this website, you agree to our use of cookies.'; + $accept_label = isset($options['cookie_accept_label']) ? $options['cookie_accept_label'] : 'Accept'; + $decline_label = isset($options['cookie_decline_label']) ? $options['cookie_decline_label'] : 'Decline'; + + $cookie_url = isset($options['cookie_policy_page']) && !empty($options['cookie_policy_page']) ? get_permalink($options['cookie_policy_page']) : '#'; + ?> + + + + + + + + _x('FAQs', 'Post Type General Name', 'nenghui'), + 'singular_name' => _x('FAQ', 'Post Type Singular Name', 'nenghui'), + 'menu_name' => __('FAQs', 'nenghui'), + 'name_admin_bar' => __('FAQ', 'nenghui'), + 'archives' => __('FAQ Archives', 'nenghui'), + 'attributes' => __('FAQ Attributes', 'nenghui'), + 'parent_item_colon' => __('Parent FAQ:', 'nenghui'), + 'all_items' => __('All FAQs', 'nenghui'), + 'add_new_item' => __('Add New FAQ', 'nenghui'), + 'add_new' => __('Add New', 'nenghui'), + 'new_item' => __('New FAQ', 'nenghui'), + 'edit_item' => __('Edit FAQ', 'nenghui'), + 'update_item' => __('Update FAQ', 'nenghui'), + 'view_item' => __('View FAQ', 'nenghui'), + 'view_items' => __('View FAQs', 'nenghui'), + 'search_items' => __('Search FAQ', 'nenghui'), + 'not_found' => __('Not found', 'nenghui'), + 'not_found_in_trash' => __('Not found in Trash', 'nenghui'), + 'featured_image' => __('Featured Image', 'nenghui'), + 'set_featured_image' => __('Set featured image', 'nenghui'), + 'remove_featured_image' => __('Remove featured image', 'nenghui'), + 'use_featured_image' => __('Use as featured image', 'nenghui'), + 'insert_into_item' => __('Insert into FAQ', 'nenghui'), + 'uploaded_to_this_item' => __('Uploaded to this FAQ', 'nenghui'), + 'items_list' => __('FAQs list', 'nenghui'), + 'items_list_navigation' => __('FAQs list navigation', 'nenghui'), + 'filter_items_list' => __('Filter FAQs list', 'nenghui'), + ); + $args = array( + 'label' => __('FAQ', 'nenghui'), + 'description' => __('Frequently Asked Questions', 'nenghui'), + 'labels' => $labels, + 'supports' => array('title', 'editor', 'page-attributes'), // page-attributes for menu_order + 'hierarchical' => false, + 'public' => true, + 'show_ui' => true, + 'show_in_menu' => true, + 'menu_position' => 20, + 'menu_icon' => 'dashicons-format-chat', + 'show_in_admin_bar' => true, + 'show_in_nav_menus' => true, + 'can_export' => true, + 'has_archive' => true, + 'exclude_from_search' => false, + 'publicly_queryable' => true, + 'capability_type' => 'post', + 'show_in_rest' => true, // Enable Gutenberg editor + ); + register_post_type('faq', $args); +} +add_action('init', 'nenghui_register_faq_cpt'); diff --git a/wp-content/themes/nenghui-energy-theme-4/inc/custom-code-config.php b/wp-content/themes/nenghui-energy-theme-4/inc/custom-code-config.php new file mode 100644 index 0000000..14c0e53 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/inc/custom-code-config.php @@ -0,0 +1,530 @@ +

设置已保存!

'; + } + + // 获取当前设置 + $custom_css = get_option('nenghui_custom_css', ''); + $custom_html = get_option('nenghui_custom_html', ''); + $css_enabled = get_option('nenghui_custom_css_enabled', '1'); + $html_enabled = get_option('nenghui_custom_html_enabled', '1'); + + ?> +
+

自定义代码管理

+

在这里可以添加自定义的CSS和JavaScript代码,这些代码将在网站前端加载。

+ +
+ + +
+

自定义CSS

+

添加自定义CSS样式代码,无需包含 <style> 标签。

+ + + +
+ +
+
+ +
+

自定义HTML/JavaScript

+

添加自定义HTML和JavaScript代码,支持完整的HTML标签。代码将在页面底部加载。

+ + + +
+ +
+
+ +
+

💡 使用提示

+
    +
  • CSS代码:直接输入CSS规则,系统会自动包装在 <style> 标签中
  • +
  • HTML/JavaScript代码:支持完整的HTML标签,包括script、div、span等
  • +
  • jQuery支持:主题已加载jQuery,可以直接使用 $ 或 jQuery
  • +
  • HTML元素:可以添加自定义的HTML元素和内联样式
  • +
  • 代码安全:请确保代码来源可靠,避免添加恶意代码
  • +
  • 测试建议:添加代码后请在前端测试效果,确保没有错误
  • +
+
+ + +
+
+ + + \n"; + echo '\n"; + echo "\n"; + } +} +add_action('wp_head', 'nenghui_output_custom_css', 999); + +/** + * 在前端输出自定义HTML/JavaScript + */ +function nenghui_output_custom_html() { + $html_enabled = get_option('nenghui_custom_html_enabled', '1'); + $custom_html = get_option('nenghui_custom_html', ''); + + if ($html_enabled === '1' && !empty($custom_html)) { + echo "\n\n"; + echo '
' . "\n"; + + // 检查用户权限,只有管理员或编辑者才能使用此功能 + if (current_user_can('edit_theme_options')) { + // 对于有权限的用户,直接输出HTML内容(已在后台进行基本验证) + echo wp_unslash($custom_html); + } else { + // 对于其他情况,进行严格的安全过滤 + echo wp_kses($custom_html, array( + 'script' => array( + 'type' => array(), + 'src' => array(), + 'async' => array(), + 'defer' => array() + ), + 'div' => array( + 'id' => array(), + 'class' => array(), + 'style' => array() + ), + 'span' => array( + 'id' => array(), + 'class' => array(), + 'style' => array() + ), + 'p' => array( + 'id' => array(), + 'class' => array(), + 'style' => array() + ), + 'a' => array( + 'href' => array(), + 'target' => array(), + 'id' => array(), + 'class' => array(), + 'style' => array() + ), + 'img' => array( + 'src' => array(), + 'alt' => array(), + 'width' => array(), + 'height' => array(), + 'id' => array(), + 'class' => array(), + 'style' => array() + ), + 'h1' => array('id' => array(), 'class' => array(), 'style' => array()), + 'h2' => array('id' => array(), 'class' => array(), 'style' => array()), + 'h3' => array('id' => array(), 'class' => array(), 'style' => array()), + 'h4' => array('id' => array(), 'class' => array(), 'style' => array()), + 'h5' => array('id' => array(), 'class' => array(), 'style' => array()), + 'h6' => array('id' => array(), 'class' => array(), 'style' => array()), + 'ul' => array('id' => array(), 'class' => array(), 'style' => array()), + 'ol' => array('id' => array(), 'class' => array(), 'style' => array()), + 'li' => array('id' => array(), 'class' => array(), 'style' => array()), + 'br' => array(), + 'strong' => array('id' => array(), 'class' => array(), 'style' => array()), + 'em' => array('id' => array(), 'class' => array(), 'style' => array()), + 'b' => array('id' => array(), 'class' => array(), 'style' => array()), + 'i' => array('id' => array(), 'class' => array(), 'style' => array()) + )); + } + + echo "\n
\n"; + echo "\n"; + } +} +add_action('wp_footer', 'nenghui_output_custom_html', 999); + +/** + * 为自定义代码管理页面添加帮助信息 + */ +function nenghui_add_custom_code_help() { + $screen = get_current_screen(); + if ($screen && $screen->id === 'appearance_page_nenghui-custom-code') { + $screen->add_help_tab(array( + 'id' => 'nenghui-custom-code-help', + 'title' => '使用帮助', + 'content' => '

自定义代码管理帮助

' . + '

CSS代码示例:

' . + '
/* 修改标题颜色 */\n' .
+                        'h1, h2, h3 {\n' .
+                        '    color: #333;\n' .
+                        '}\n\n' .
+                        '/* 自定义按钮样式 */\n' .
+                        '.custom-button {\n' .
+                        '    background: #007cba;\n' .
+                        '    color: white;\n' .
+                        '    padding: 10px 20px;\n' .
+                        '    border-radius: 4px;\n' .
+                        '}
' . + '

JavaScript代码示例:

' . + '
// 页面加载完成后执行\n' .
+                        'jQuery(document).ready(function($) {\n' .
+                        '    // 添加点击事件\n' .
+                        '    $(".custom-button").click(function() {\n' .
+                        '        alert("按钮被点击了!");\n' .
+                        '    });\n' .
+                        '});\n\n' .
+                        '// 原生JavaScript示例\n' .
+                        'document.addEventListener("DOMContentLoaded", function() {\n' .
+                        '    console.log("页面加载完成");\n' .
+                        '});
' . + '

注意事项:

' . + '
    ' . + '
  • CSS代码会在页面头部加载
  • ' . + '
  • JavaScript代码会在页面底部加载
  • ' . + '
  • 可以随时启用或禁用代码而不删除内容
  • ' . + '
  • 建议在测试环境中先测试代码效果
  • ' . + '
' + )); + + $screen->set_help_sidebar( + '

相关链接:

' . + '

CSS文档

' . + '

JavaScript文档

' . + '

jQuery官网

' + ); + } +} +add_action('current_screen', 'nenghui_add_custom_code_help'); + +/** + * Header/Footer代码管理页面 + */ +function nenghui_header_footer_admin_page() { + // 处理表单提交 + if (isset($_POST['submit']) && wp_verify_nonce($_POST['nenghui_header_footer_nonce'], 'nenghui_header_footer_action')) { + // 保存Header代码 + if (isset($_POST['header_code'])) { + update_option('nenghui_header_code_content', wp_unslash($_POST['header_code'])); + } + + // 保存Footer代码 + if (isset($_POST['footer_code'])) { + update_option('nenghui_footer_code_content', wp_unslash($_POST['footer_code'])); + } + + // 保存启用状态 + update_option('nenghui_header_code_enabled', isset($_POST['header_enabled']) ? '1' : '0'); + update_option('nenghui_footer_code_enabled', isset($_POST['footer_enabled']) ? '1' : '0'); + + echo '

Header/Footer代码设置已保存!

'; + } + + // 获取当前设置 + $header_code = get_option('nenghui_header_code_content', ''); + $footer_code = get_option('nenghui_footer_code_content', ''); + $header_enabled = get_option('nenghui_header_code_enabled', '0'); + $footer_enabled = get_option('nenghui_footer_code_enabled', '0'); + + ?> +
+

Header/Footer自定义代码管理

+

在这里可以管理网站头部和底部的自定义HTML代码,如统计代码、验证代码、客服代码等。

+ +
+ + +
+

🔝 Header自定义代码

+

这些代码将在网站头部(<head>标签内)加载,适合放置统计代码、验证代码、meta标签等。

+ + + +
+ +
+
+ +
+

🔻 Footer自定义代码

+

这些代码将在网站底部(</body>标签前)加载,适合放置客服代码、统计代码、自定义JavaScript等。

+ + + +
+ +
+
+ + +
+
+ + + \n"; + echo wp_unslash($header_code); + echo "\n\n"; + } +} +add_action('wp_head', 'nenghui_output_header_code', 998); + +/** + * 在网站底部输出自定义Footer代码 + */ +function nenghui_output_footer_code() { + $footer_enabled = get_option('nenghui_footer_code_enabled', '0'); + $footer_code = get_option('nenghui_footer_code_content', ''); + + if ($footer_enabled && !empty($footer_code)) { + echo "\n\n"; + echo wp_unslash($footer_code); + echo "\n\n"; + } +} +add_action('wp_footer', 'nenghui_output_footer_code', 998); + +?> \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/inc/customizer.php b/wp-content/themes/nenghui-energy-theme-4/inc/customizer.php new file mode 100644 index 0000000..455de5f --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/inc/customizer.php @@ -0,0 +1,2299 @@ + + + add_panel('nenghui_banner_panel', array( + 'title' => '首页Banner设置', + 'description' => '配置首页Banner轮播图片和内容', + 'priority' => 30, + )); + + // 为每个Banner添加设置区域 + for ($i = 1; $i <= 5; $i++) { + // 添加Banner区域 + $wp_customize->add_section('nenghui_banner_section_' . $i, array( + 'title' => 'Banner ' . $i, + 'panel' => 'nenghui_banner_panel', + 'priority' => $i * 10, + )); + + // Banner图片设置 + $wp_customize->add_setting('banner_image_' . $i, array( + 'default' => '', + 'sanitize_callback' => 'esc_url_raw', + )); + $wp_customize->add_control(new WP_Customize_Image_Control($wp_customize, 'banner_image_' . $i, array( + 'label' => 'Banner图片', + 'description' => '上传Banner背景图片(如果同时设置了视频,图片将作为视频加载失败时的备用显示)', + 'section' => 'nenghui_banner_section_' . $i, + 'settings' => 'banner_image_' . $i, + ))); + + // Banner视频设置 + $wp_customize->add_setting('banner_video_' . $i, array( + 'default' => '', + 'sanitize_callback' => 'esc_url_raw', + )); + $wp_customize->add_control('banner_video_' . $i, array( + 'label' => 'Banner视频URL', + 'description' => '输入视频文件的完整URL地址(支持MP4格式)。视频将自动循环播放且静音,用户无法控制播放。', + 'section' => 'nenghui_banner_section_' . $i, + 'type' => 'url', + 'input_attrs' => array( + 'placeholder' => 'https://example.com/video.mp4', + ), + )); + + // Banner内容设置(富文本编辑器) + $wp_customize->add_setting('banner_content_' . $i, array( + 'default' => '

Banner标题 ' . $i . '

这里是Banner描述文字,可以介绍您的产品或服务。

', + 'sanitize_callback' => 'wp_kses_post', + )); + $wp_customize->add_control('banner_content_' . $i, array( + 'label' => 'Banner内容', + 'description' => '支持HTML标签的富文本内容,可以使用完整的HTML标签来自定义样式和布局', + 'section' => 'nenghui_banner_section_' . $i, + 'type' => 'textarea', + 'input_attrs' => array( + 'placeholder' => '输入HTML内容,例如:

标题

描述文字

', + 'rows' => 8, + ), + )); + + // Banner按钮文字设置 + $wp_customize->add_setting('banner_button_text_' . $i, array( + 'default' => '了解更多', + 'sanitize_callback' => 'sanitize_text_field', + )); + $wp_customize->add_control('banner_button_text_' . $i, array( + 'label' => '按钮文字', + 'section' => 'nenghui_banner_section_' . $i, + 'type' => 'text', + )); + + // Banner按钮链接设置 + $wp_customize->add_setting('banner_button_url_' . $i, array( + 'default' => '#', + 'sanitize_callback' => 'esc_url_raw', + )); + $wp_customize->add_control('banner_button_url_' . $i, array( + 'label' => '按钮链接', + 'section' => 'nenghui_banner_section_' . $i, + 'type' => 'url', + )); + } + + // 添加Banner全局设置区域 + $wp_customize->add_section('nenghui_banner_global_settings', array( + 'title' => 'Banner全局设置', + 'panel' => 'nenghui_banner_panel', + 'priority' => 100, + )); + + // Banner数量设置 + $wp_customize->add_setting('banner_count', array( + 'default' => 3, + 'sanitize_callback' => 'absint', + 'transport' => 'postMessage' + )); + $wp_customize->add_control('banner_count', array( + 'label' => 'Banner数量', + 'description' => '设置要显示的Banner数量(1-5个)。只有上传了图片的Banner才会显示。', + 'section' => 'nenghui_banner_global_settings', + 'type' => 'range', + 'input_attrs' => array( + 'min' => 1, + 'max' => 5, + 'step' => 1 + ) + )); + // Banner高度设置 + $wp_customize->add_setting('banner_height', array( + 'default' => '500px', + 'sanitize_callback' => 'sanitize_text_field', + )); + $wp_customize->add_control('banner_height', array( + 'label' => 'Banner高度', + 'description' => '支持px和vh单位,例如:500px 或 50vh', + 'section' => 'nenghui_banner_global_settings', + 'type' => 'text', + 'input_attrs' => array( + 'placeholder' => '500px 或 50vh', + ), + )); + + // 自动播放设置 + $wp_customize->add_setting('banner_autoplay', array( + 'default' => true, + 'sanitize_callback' => 'wp_validate_boolean', + )); + $wp_customize->add_control('banner_autoplay', array( + 'label' => '启用自动播放', + 'section' => 'nenghui_banner_global_settings', + 'type' => 'checkbox', + )); + + // 播放间隔设置 + $wp_customize->add_setting('banner_autoplay_delay', array( + 'default' => '5000', + 'sanitize_callback' => 'absint', + )); + $wp_customize->add_control('banner_autoplay_delay', array( + 'label' => '自动播放间隔 (毫秒)', + 'section' => 'nenghui_banner_global_settings', + 'type' => 'number', + 'input_attrs' => array( + 'min' => 1000, + 'max' => 10000, + 'step' => 500, + ), + )); + + // Banner遮罩开关设置 + $wp_customize->add_setting('banner_overlay_enabled', array( + 'default' => true, + 'sanitize_callback' => 'wp_validate_boolean', + )); + $wp_customize->add_control('banner_overlay_enabled', array( + 'label' => '启用Banner遮罩', + 'description' => '开启后会在Banner图片上添加半透明黑色遮罩,提高文字可读性', + 'section' => 'nenghui_banner_global_settings', + 'type' => 'checkbox', + )); + + // Banner纯图模式开关设置 + $wp_customize->add_setting('banner_image_only_mode', array( + 'default' => false, + 'sanitize_callback' => 'wp_validate_boolean', + )); + $wp_customize->add_control('banner_image_only_mode', array( + 'label' => '启用纯图模式', + 'description' => '开启后只显示背景图片,隐藏标题、描述和按钮', + 'section' => 'nenghui_banner_global_settings', + 'type' => 'checkbox', + )); + + // Banner移动端显示控制设置 + $wp_customize->add_setting('banner_show_on_mobile', array( + 'default' => true, + 'sanitize_callback' => 'wp_validate_boolean', + 'transport' => 'postMessage', + )); + $wp_customize->add_control('banner_show_on_mobile', array( + 'label' => '在移动端显示Banner', + 'description' => '关闭此开关后,Banner区块将在移动设备(屏幕宽度小于768px)上隐藏', + 'section' => 'nenghui_banner_global_settings', + 'type' => 'checkbox', + )); + + // 添加Banner Title设置面板 + $wp_customize->add_panel('nenghui_banner_title_panel', array( + 'title' => '页面标题横幅设置', + 'description' => '配置页面标题横幅区块的内容和样式', + 'priority' => 34, + )); + + // 添加Banner Title基本设置区域 + $wp_customize->add_section('nenghui_banner_title_basic_settings', array( + 'title' => '页面标题横幅基本设置', + 'panel' => 'nenghui_banner_title_panel', + 'priority' => 10, + )); + + // Banner Title标题设置 + $wp_customize->add_setting('banner_title_main_title', array( + 'default' => 'ABOUT US', + 'sanitize_callback' => 'sanitize_text_field', + )); + $wp_customize->add_control('banner_title_main_title', array( + 'label' => '主标题', + 'section' => 'nenghui_banner_title_basic_settings', + 'type' => 'text', + )); + + // Banner Title描述设置 + $wp_customize->add_setting('banner_title_description', array( + 'default' => 'Powering Sustainable Futures with Advanced Energy Storage Solutions', + 'sanitize_callback' => 'sanitize_textarea_field', + )); + $wp_customize->add_control('banner_title_description', array( + 'label' => '描述文字', + 'section' => 'nenghui_banner_title_basic_settings', + 'type' => 'textarea', + 'input_attrs' => array( + 'rows' => 3, + ), + )); + + // Banner Title背景图片设置 + $wp_customize->add_setting('banner_title_bg_image', array( + 'default' => get_template_directory_uri() . '/assets/images/about-bg.webp', + 'sanitize_callback' => 'esc_url_raw', + )); + $wp_customize->add_control(new WP_Customize_Image_Control($wp_customize, 'banner_title_bg_image', array( + 'label' => '背景图片', + 'section' => 'nenghui_banner_title_basic_settings', + 'settings' => 'banner_title_bg_image', + ))); + + // Banner Title遮罩透明度设置 + $wp_customize->add_setting('banner_title_overlay_opacity', array( + 'default' => '0.4', + 'sanitize_callback' => 'sanitize_text_field', + )); + $wp_customize->add_control('banner_title_overlay_opacity', array( + 'label' => '遮罩透明度', + 'description' => '设置背景遮罩的透明度(0-1之间的数值)', + 'section' => 'nenghui_banner_title_basic_settings', + 'type' => 'range', + 'input_attrs' => array( + 'min' => 0, + 'max' => 1, + 'step' => 0.1, + ), + )); + + // Banner Title高度设置 + $wp_customize->add_setting('banner_title_height', array( + 'default' => '60vh', + 'sanitize_callback' => 'sanitize_text_field', + )); + $wp_customize->add_control('banner_title_height', array( + 'label' => 'Banner高度', + 'description' => '支持px、vh、%单位,例如:60vh、500px、100%', + 'section' => 'nenghui_banner_title_basic_settings', + 'type' => 'text', + 'input_attrs' => array( + 'placeholder' => '60vh', + ), + )); + + // 添加选项卡设置面板 + $wp_customize->add_panel('nenghui_tabs_panel', array( + 'title' => '选项卡设置', + 'description' => '配置首页选项卡内容和样式', + 'priority' => 35, + )); + + // 选项卡数量设置 + $wp_customize->add_section('nenghui_tabs_global_settings', array( + 'title' => '选项卡全局设置', + 'panel' => 'nenghui_tabs_panel', + 'priority' => 10, + )); + + $wp_customize->add_setting('tabs_count', array( + 'default' => 3, + 'sanitize_callback' => 'absint', + 'transport' => 'postMessage' + )); + $wp_customize->add_control('tabs_count', array( + 'label' => '选项卡数量', + 'description' => '设置要显示的选项卡数量(1-5个)。只有设置了标题的选项卡才会显示。', + 'section' => 'nenghui_tabs_global_settings', + 'type' => 'range', + 'input_attrs' => array( + 'min' => 1, + 'max' => 5, + 'step' => 1 + ) + )); + // 为每个选项卡添加设置(最多5个) + for ($i = 1; $i <= 5; $i++) { + // 添加选项卡区域 + $wp_customize->add_section('nenghui_tab_section_' . $i, array( + 'title' => '选项卡 ' . $i, + 'panel' => 'nenghui_tabs_panel', + 'priority' => $i * 10 + 10, + )); + + // 选项卡标题设置 + $wp_customize->add_setting('tab_title_' . $i, array( + 'default' => "选项卡 {$i}", + 'sanitize_callback' => 'sanitize_text_field', + )); + $wp_customize->add_control('tab_title_' . $i, array( + 'label' => '选项卡标题', + 'section' => 'nenghui_tab_section_' . $i, + 'type' => 'text', + )); + + // 选项卡标识符设置 + $wp_customize->add_setting('tab_id_' . $i, array( + 'default' => "tab-{$i}", + 'sanitize_callback' => 'sanitize_key', + )); + $wp_customize->add_control('tab_id_' . $i, array( + 'label' => '选项卡标识符', + 'description' => '用于内部识别,只能包含字母、数字和下划线', + 'section' => 'nenghui_tab_section_' . $i, + 'type' => 'text', + )); + + // 主标题设置 + $wp_customize->add_setting('tab_main_title_' . $i, array( + 'default' => "这是选项卡 {$i} 的主要内容标题", + 'sanitize_callback' => 'wp_kses_post', + )); + $wp_customize->add_control('tab_main_title_' . $i, array( + 'label' => '主标题', + 'description' => '支持HTML标签,可以使用文字来高亮显示', + 'section' => 'nenghui_tab_section_' . $i, + 'type' => 'textarea', + 'input_attrs' => array( + 'rows' => 3, + ), + )); + + // 按钮文字设置 + $wp_customize->add_setting('tab_button_text_' . $i, array( + 'default' => "了解更多", + 'sanitize_callback' => 'sanitize_text_field', + )); + $wp_customize->add_control('tab_button_text_' . $i, array( + 'label' => '按钮文字', + 'section' => 'nenghui_tab_section_' . $i, + 'type' => 'text', + )); + + // 按钮链接设置 + $wp_customize->add_setting('tab_button_url_' . $i, array( + 'default' => '#', + 'sanitize_callback' => 'esc_url_raw', + )); + $wp_customize->add_control('tab_button_url_' . $i, array( + 'label' => '按钮链接', + 'section' => 'nenghui_tab_section_' . $i, + 'type' => 'url', + )); + + // 图片设置 + $wp_customize->add_setting('tab_image_' . $i, array( + 'default' => get_template_directory_uri() . '/assets/images/NaN-img.png', + 'sanitize_callback' => 'esc_url_raw', + )); + $wp_customize->add_control(new WP_Customize_Image_Control($wp_customize, 'tab_image_' . $i, array( + 'label' => '选项卡图片', + 'section' => 'nenghui_tab_section_' . $i, + 'settings' => 'tab_image_' . $i, + ))); + + // 图片替代文字设置 + $wp_customize->add_setting('tab_image_alt_' . $i, array( + 'default' => "选项卡 {$i} 图片", + 'sanitize_callback' => 'sanitize_text_field', + )); + $wp_customize->add_control('tab_image_alt_' . $i, array( + 'label' => '图片替代文字', + 'description' => '用于SEO和无障碍访问', + 'section' => 'nenghui_tab_section_' . $i, + 'type' => 'text', + )); + } + $wp_customize->add_control('banner_image_only_mode', array( + 'label' => '启用纯图模式', + 'description' => '开启后将隐藏所有文字和按钮,只显示Banner图片', + 'section' => 'nenghui_banner_global_settings', + 'type' => 'checkbox', + )); + + // Banner左右切换按钮开关设置 + $wp_customize->add_setting('banner_navigation_enabled', array( + 'default' => true, + 'sanitize_callback' => 'wp_validate_boolean', + )); + $wp_customize->add_control('banner_navigation_enabled', array( + 'label' => '显示左右切换按钮', + 'description' => '开启后将显示Banner的左右切换箭头按钮', + 'section' => 'nenghui_banner_global_settings', + 'type' => 'checkbox', + )); + + // Banner背景图片缩放动画开关设置 + $wp_customize->add_setting('banner_zoom_animation_enabled', array( + 'default' => true, + 'sanitize_callback' => 'wp_validate_boolean', + )); + $wp_customize->add_control('banner_zoom_animation_enabled', array( + 'label' => '启用背景图片缩放动画', + 'description' => '开启后Banner背景图片会缓慢平滑放大,营造动态视觉效果', + 'section' => 'nenghui_banner_global_settings', + 'type' => 'checkbox', + )); + + // Banner背景图片缩放动画速度设置 + $wp_customize->add_setting('banner_zoom_animation_duration', array( + 'default' => 20, + 'sanitize_callback' => 'absint', + )); + $wp_customize->add_control('banner_zoom_animation_duration', array( + 'label' => '缩放动画持续时间(秒)', + 'description' => '设置背景图片从原始大小放大到最终大小所需的时间', + 'section' => 'nenghui_banner_global_settings', + 'type' => 'range', + 'input_attrs' => array( + 'min' => 5, + 'max' => 60, + 'step' => 1, + ), + )); + + // Banner背景图片缩放比例设置 + $wp_customize->add_setting('banner_zoom_animation_scale', array( + 'default' => 1.08, + 'sanitize_callback' => 'nenghui_sanitize_float', + )); + $wp_customize->add_control('banner_zoom_animation_scale', array( + 'label' => '缩放比例', + 'description' => '设置背景图片最终放大的倍数(1.0-1.5倍)', + 'section' => 'nenghui_banner_global_settings', + 'type' => 'range', + 'input_attrs' => array( + 'min' => 1.0, + 'max' => 1.5, + 'step' => 0.01, + ), + )); + + // Banner显示顺序设置 + $wp_customize->add_setting('banner_display_order', array( + 'default' => '1,2,3,4,5', + 'sanitize_callback' => 'sanitize_text_field', + )); + $wp_customize->add_control('banner_display_order', array( + 'label' => 'Banner显示顺序', + 'description' => '设置Banner的显示顺序,用逗号分隔,例如:3,1,4,2,5 表示先显示Banner3,再显示Banner1,以此类推', + 'section' => 'nenghui_banner_global_settings', + 'type' => 'text', + 'input_attrs' => array( + 'placeholder' => '1,2,3,4,5', + ), + )); + + // 添加Futures设置面板 + $wp_customize->add_panel('nenghui_futures_panel', array( + 'title' => '特色功能设置', + 'description' => '配置特色功能区块的内容和样式', + 'priority' => 35, + )); + + // 添加About导航设置面板 + $wp_customize->add_panel('nenghui_about_nav_panel', array( + 'title' => '关于我们导航设置', + 'description' => '配置关于我们页面导航菜单的显示和样式', + 'priority' => 36, + )); + + // 添加About导航基本设置区域 + $wp_customize->add_section('nenghui_about_nav_settings', array( + 'title' => '关于我们导航基本设置', + 'panel' => 'nenghui_about_nav_panel', + 'priority' => 10, + )); + + // About导航菜单选择设置 + $wp_customize->add_setting('about_nav_menu_id', array( + 'default' => '', + 'sanitize_callback' => 'nenghui_sanitize_menu_id', + )); + $wp_customize->add_control('about_nav_menu_id', array( + 'label' => '选择导航菜单', + 'description' => '选择要在About页面显示的导航菜单', + 'section' => 'nenghui_about_nav_settings', + 'type' => 'select', + 'choices' => nenghui_get_nav_menu_choices(), + )); + + // About导航显示位置设置 + $wp_customize->add_setting('about_nav_position', array( + 'default' => 'top', + 'sanitize_callback' => 'sanitize_text_field', + )); + $wp_customize->add_control('about_nav_position', array( + 'label' => '导航显示位置', + 'section' => 'nenghui_about_nav_settings', + 'type' => 'select', + 'choices' => array( + 'top' => '页面顶部', + 'sidebar' => '侧边栏', + 'bottom' => '页面底部', + ), + )); + + // About导航样式设置 + $wp_customize->add_setting('about_nav_style', array( + 'default' => 'horizontal', + 'sanitize_callback' => 'sanitize_text_field', + )); + $wp_customize->add_control('about_nav_style', array( + 'label' => '导航样式', + 'section' => 'nenghui_about_nav_settings', + 'type' => 'select', + 'choices' => array( + 'horizontal' => '水平排列', + 'vertical' => '垂直排列', + 'dropdown' => '下拉菜单', + ), + )); + + // About导航背景色设置 + $wp_customize->add_setting('about_nav_bg_color', array( + 'default' => '#ffffff', + 'sanitize_callback' => 'sanitize_hex_color', + )); + $wp_customize->add_control(new WP_Customize_Color_Control($wp_customize, 'about_nav_bg_color', array( + 'label' => '导航背景色', + 'section' => 'nenghui_about_nav_settings', + 'settings' => 'about_nav_bg_color', + ))); + + // About导航文字颜色设置 + $wp_customize->add_setting('about_nav_text_color', array( + 'default' => '#333333', + 'sanitize_callback' => 'sanitize_hex_color', + )); + $wp_customize->add_control(new WP_Customize_Color_Control($wp_customize, 'about_nav_text_color', array( + 'label' => '导航文字颜色', + 'section' => 'nenghui_about_nav_settings', + 'settings' => 'about_nav_text_color', + ))); + + // About导航激活状态颜色设置 + $wp_customize->add_setting('about_nav_active_color', array( + 'default' => '#007cba', + 'sanitize_callback' => 'sanitize_hex_color', + )); + $wp_customize->add_control(new WP_Customize_Color_Control($wp_customize, 'about_nav_active_color', array( + 'label' => '激活状态颜色', + 'section' => 'nenghui_about_nav_settings', + 'settings' => 'about_nav_active_color', + ))); + + // 添加新闻区块设置面板 + $wp_customize->add_panel('nenghui_news_panel', array( + 'title' => '首页新闻设置', + 'description' => '配置首页新闻区块的显示内容和样式', + 'priority' => 40, + )); + + // 添加新闻基本设置区域 + $wp_customize->add_section('nenghui_news_basic_settings', array( + 'title' => '新闻基本设置', + 'panel' => 'nenghui_news_panel', + 'priority' => 10, + )); + + // 新闻区块标题设置 + $wp_customize->add_setting('news_title', array( + 'default' => 'NEWS', + 'sanitize_callback' => 'sanitize_text_field', + )); + $wp_customize->add_control('news_title', array( + 'label' => '新闻区块标题', + 'section' => 'nenghui_news_basic_settings', + 'type' => 'text', + )); + + + + // 文章分类ID设置 + $wp_customize->add_setting('news_category_id', array( + 'default' => '', + 'sanitize_callback' => 'absint', + )); + $wp_customize->add_control('news_category_id', array( + 'label' => '文章分类ID', + 'description' => '指定要显示的文章分类ID,留空则显示所有分类的文章。注意:在分类页面使用短代码时会自动使用当前分类,短代码参数优先级最高。', + 'section' => 'nenghui_news_basic_settings', + 'type' => 'number', + 'input_attrs' => array( + 'min' => 0, + 'step' => 1, + ), + )); + + // 文章排序方式设置 + $wp_customize->add_setting('news_order_by', array( + 'default' => 'date', + 'sanitize_callback' => 'sanitize_text_field', + )); + $wp_customize->add_control('news_order_by', array( + 'label' => '文章排序方式', + 'section' => 'nenghui_news_basic_settings', + 'type' => 'select', + 'choices' => array( + 'date' => '按发布日期', + 'modified' => '按修改日期', + 'title' => '按标题', + 'menu_order' => '按菜单顺序', + 'rand' => '随机排序', + ), + )); + + // 文章排序顺序设置 + $wp_customize->add_setting('news_order', array( + 'default' => 'DESC', + 'sanitize_callback' => 'sanitize_text_field', + )); + $wp_customize->add_control('news_order', array( + 'label' => '排序顺序', + 'section' => 'nenghui_news_basic_settings', + 'type' => 'select', + 'choices' => array( + 'DESC' => '降序(新到旧)', + 'ASC' => '升序(旧到新)', + ), + )); + + // 显示文章数量设置 + $wp_customize->add_setting('news_posts_count', array( + 'default' => 3, + 'sanitize_callback' => 'absint', + )); + $wp_customize->add_control('news_posts_count', array( + 'label' => '显示文章数量', + 'description' => '设置在没有分页时显示的文章数量', + 'section' => 'nenghui_news_basic_settings', + 'type' => 'number', + 'input_attrs' => array( + 'min' => 1, + 'max' => 10, + 'step' => 1, + ), + )); + + // 每页显示文章数量设置(用于分页) + $wp_customize->add_setting('news_posts_per_page', array( + 'default' => 6, + 'sanitize_callback' => 'absint', + )); + $wp_customize->add_control('news_posts_per_page', array( + 'label' => '每页显示文章数量', + 'description' => '设置启用分页时每页显示的文章数量', + 'section' => 'nenghui_news_basic_settings', + 'type' => 'number', + 'input_attrs' => array( + 'min' => 1, + 'max' => 20, + 'step' => 1, + ), + )); + + // 是否启用分页设置 + $wp_customize->add_setting('news_enable_pagination', array( + 'default' => false, + 'sanitize_callback' => 'wp_validate_boolean', + )); + $wp_customize->add_control('news_enable_pagination', array( + 'label' => '启用分页', + 'description' => '启用后将显示数字分页组件,否则只显示指定数量的文章', + 'section' => 'nenghui_news_basic_settings', + 'type' => 'checkbox', + )); + + // 添加Futures基本设置区域 + $wp_customize->add_section('nenghui_futures_basic_settings', array( + 'title' => '特色功能基本设置', + 'panel' => 'nenghui_futures_panel', + 'priority' => 10, + )); + + // Futures标题设置 + $wp_customize->add_setting('futures_title', array( + 'default' => 'Powering Sustainble Futures', + 'sanitize_callback' => 'sanitize_text_field', + )); + $wp_customize->add_control('futures_title', array( + 'label' => '特色功能主标题', + 'section' => 'nenghui_futures_basic_settings', + 'type' => 'text', + )); + + // Futures背景图片设置 + $wp_customize->add_setting('futures_bg_image', array( + 'default' => get_template_directory_uri() . '/assets/images/futures-bg.webp', + 'sanitize_callback' => 'esc_url_raw', + )); + $wp_customize->add_control(new WP_Customize_Image_Control($wp_customize, 'futures_bg_image', array( + 'label' => '特色功能背景图片', + 'section' => 'nenghui_futures_basic_settings', + 'settings' => 'futures_bg_image', + ))); + + // Futures按钮文字设置 + $wp_customize->add_setting('futures_button_text', array( + 'default' => 'About us', + 'sanitize_callback' => 'sanitize_text_field', + )); + $wp_customize->add_control('futures_button_text', array( + 'label' => '按钮文字', + 'section' => 'nenghui_futures_basic_settings', + 'type' => 'text', + )); + + // Futures按钮链接设置 + $wp_customize->add_setting('futures_button_link', array( + 'default' => 'about.html', + 'sanitize_callback' => 'esc_url_raw', + )); + $wp_customize->add_control('futures_button_link', array( + 'label' => '按钮链接', + 'section' => 'nenghui_futures_basic_settings', + 'type' => 'url', + )); + + // 为每个Futures项目添加设置区域 + $default_items = array( + 1 => array('title' => 'High-Performance', 'icon' => './images/2_03.png'), + 2 => array('title' => 'Advanced Safety', 'icon' => './images/2_05.png'), + 3 => array('title' => 'Smart Energy', 'icon' => './images/4_05.png'), + 4 => array('title' => 'Fast Deployment', 'icon' => './images/5_05.png'), + 5 => array('title' => 'Global Compliance', 'icon' => './images/7_05.png'), + ); + + for ($i = 1; $i <= 5; $i++) { + // 添加Futures项目区域 + $wp_customize->add_section('nenghui_futures_item_' . $i, array( + 'title' => '特色功能项目 ' . $i, + 'panel' => 'nenghui_futures_panel', + 'priority' => 10 + $i * 10, + )); + + // 项目图标设置 + $wp_customize->add_setting('futures_item_' . $i . '_icon', array( + 'default' => get_template_directory_uri() . '/assets/images/NaN-img.png', + 'sanitize_callback' => 'esc_url_raw', + )); + $wp_customize->add_control(new WP_Customize_Image_Control($wp_customize, 'futures_item_' . $i . '_icon', array( + 'label' => '项目图标', + 'section' => 'nenghui_futures_item_' . $i, + 'settings' => 'futures_item_' . $i . '_icon', + ))); + + // 项目标题设置 + $wp_customize->add_setting('futures_item_' . $i . '_title', array( + 'default' => $default_items[$i]['title'], + 'sanitize_callback' => 'sanitize_text_field', + )); + $wp_customize->add_control('futures_item_' . $i . '_title', array( + 'label' => '项目标题', + 'section' => 'nenghui_futures_item_' . $i, + 'type' => 'text', + )); + + + } + + // 添加About Company设置面板 + $wp_customize->add_panel('nenghui_about_company_panel', array( + 'title' => '关于公司设置', + 'description' => '配置关于公司区块的内容和样式', + 'priority' => 37, + )); + + // 添加About Company基本设置区域 + $wp_customize->add_section('nenghui_about_company_basic_settings', array( + 'title' => '关于公司基本设置', + 'panel' => 'nenghui_about_company_panel', + 'priority' => 10, + )); + + // About Company主标题设置 + $wp_customize->add_setting('about_company_title', array( + 'default' => 'ABOUT NENGHUI', + 'sanitize_callback' => 'sanitize_text_field', + )); + $wp_customize->add_control('about_company_title', array( + 'label' => '主标题', + 'section' => 'nenghui_about_company_basic_settings', + 'type' => 'text', + )); + + // About Company描述设置 + $wp_customize->add_setting('about_company_description', array( + 'default' => 'Nenghui Technology (Shanghai Nenghui Technology Co., Ltd., SZ stock: 301046), established in 2018, is a listed public company with business ranging from solar power plant EPC, operation and maintenance, renewable energy services, microgrid solutions, energy storage and refuse pyrolysis, etc. With years of continuous innovation in the renewable energy industry, Nenghui has formed a comprehensive technology system and industrial layout in smart energy development and applications.', + 'sanitize_callback' => 'wp_kses_post', + )); + $wp_customize->add_control('about_company_description', array( + 'label' => '公司描述', + 'section' => 'nenghui_about_company_basic_settings', + 'type' => 'textarea', + 'input_attrs' => array( + 'rows' => 6, + ), + )); + + // About Company右侧图片设置 + $wp_customize->add_setting('about_company_image', array( + 'default' => get_template_directory_uri() . '/assets/images/about-img.webp', + 'sanitize_callback' => 'esc_url_raw', + )); + $wp_customize->add_control(new WP_Customize_Image_Control($wp_customize, 'about_company_image', array( + 'label' => '右侧图片', + 'section' => 'nenghui_about_company_basic_settings', + 'settings' => 'about_company_image', + ))); + + // About Company第二段描述设置 + $wp_customize->add_setting('about_company_description_2', array( + 'default' => 'Nenghui Energy, established in 2018, is a subsidiary entity of Nenghui Technology that focuses on lithium battery storage. Since 2018, Nenghui Energy has developed advanced and highly safe LFP battery storage systems (BESS) for homes and businesses. Ranging from low to high voltage and from single to multiple operations, as well as from cabinets to containers, with continuous technological innovations, Nenghui has been awarded excellent recognition in the industry and is committed to providing prompt service for all of our current and potential customers.', + 'sanitize_callback' => 'wp_kses_post', + )); + $wp_customize->add_control('about_company_description_2', array( + 'label' => '第二段描述', + 'section' => 'nenghui_about_company_basic_settings', + 'type' => 'textarea', + 'input_attrs' => array( + 'rows' => 6, + ), + )); + + // 为每个统计项目添加设置区域 + $default_stats = array( + 1 => array('number' => '130+', 'label' => 'Patents', 'icon' => get_template_directory_uri() . '/assets/images/about-icon-1.svg'), + 2 => array('number' => '70%', 'label' => 'R&D employees', 'icon' => get_template_directory_uri() . '/assets/images/about-icon-2.svg'), + 3 => array('number' => '100+', 'label' => 'Solar power stations', 'icon' => get_template_directory_uri() . '/assets/images/about-icon-3.svg'), + 4 => array('number' => '200+', 'label' => 'Grid engineering projects', 'icon' => get_template_directory_uri() . '/assets/images/about-icon-4.svg'), + ); + + for ($i = 1; $i <= 4; $i++) { + // 添加统计项目区域 + $wp_customize->add_section('nenghui_about_company_stat_' . $i, array( + 'title' => '统计项目 ' . $i, + 'panel' => 'nenghui_about_company_panel', + 'priority' => 10 + $i * 10, + )); + + // 统计数字设置 + $wp_customize->add_setting('about_company_stat_' . $i . '_number', array( + 'default' => $default_stats[$i]['number'], + 'sanitize_callback' => 'sanitize_text_field', + )); + $wp_customize->add_control('about_company_stat_' . $i . '_number', array( + 'label' => '统计数字', + 'section' => 'nenghui_about_company_stat_' . $i, + 'type' => 'text', + )); + + // 统计标签设置 + $wp_customize->add_setting('about_company_stat_' . $i . '_label', array( + 'default' => $default_stats[$i]['label'], + 'sanitize_callback' => 'sanitize_text_field', + )); + $wp_customize->add_control('about_company_stat_' . $i . '_label', array( + 'label' => '统计标签', + 'section' => 'nenghui_about_company_stat_' . $i, + 'type' => 'text', + )); + + // 统计图标设置 + $wp_customize->add_setting('about_company_stat_' . $i . '_icon', array( + 'default' => $default_stats[$i]['icon'], + 'sanitize_callback' => 'esc_url_raw', + )); + $wp_customize->add_control(new WP_Customize_Image_Control($wp_customize, 'about_company_stat_' . $i . '_icon', array( + 'label' => '统计图标', + 'section' => 'nenghui_about_company_stat_' . $i, + 'settings' => 'about_company_stat_' . $i . '_icon', + ))); + } + + // 添加Development History设置面板 + $wp_customize->add_panel('nenghui_development_history_panel', array( + 'title' => '发展历程设置', + 'description' => '配置发展历程区块的内容和样式', + 'priority' => 38, + )); + + // 添加Development History基本设置区域 + $wp_customize->add_section('nenghui_development_history_basic_settings', array( + 'title' => '发展历程基本设置', + 'panel' => 'nenghui_development_history_panel', + 'priority' => 10, + )); + + // Development History主标题设置 + $wp_customize->add_setting('development_history_title', array( + 'default' => 'DEVELOPMENT HISTORY', + 'sanitize_callback' => 'sanitize_text_field', + )); + $wp_customize->add_control('development_history_title', array( + 'label' => '主标题', + 'section' => 'nenghui_development_history_basic_settings', + 'type' => 'text', + )); + + // Development History背景图片设置 + $wp_customize->add_setting('development_history_bg_image', array( + 'default' => get_template_directory_uri() . '/assets/images/Development History.webp', + 'sanitize_callback' => 'esc_url_raw', + )); + $wp_customize->add_control(new WP_Customize_Image_Control($wp_customize, 'development_history_bg_image', array( + 'label' => '背景图片', + 'section' => 'nenghui_development_history_basic_settings', + 'settings' => 'development_history_bg_image', + ))); + + // Development History年份数量设置 + $wp_customize->add_setting('development_history_items_count', array( + 'default' => 5, + 'sanitize_callback' => 'absint', + )); + $wp_customize->add_control('development_history_items_count', array( + 'label' => '年份项目数量', + 'description' => '设置要显示的历史年份数量(1-20)', + 'section' => 'nenghui_development_history_basic_settings', + 'type' => 'number', + 'input_attrs' => array( + 'min' => 1, + 'max' => 20, + 'step' => 1, + ), + )); + + // 为每个历史年份添加设置区域 + $default_history = array( + 1 => array('year' => '2009', 'description' => '', 'active' => false), + 2 => array('year' => '2012', 'description' => '', 'active' => false), + 3 => array('year' => '2015', 'description' => 'Over 800 MW solar power plants on hand in operation.', 'active' => true), + 4 => array('year' => '2021', 'description' => '', 'active' => false), + 5 => array('year' => '2022', 'description' => '', 'active' => false), + ); + + // 获取年份数量设置,默认为5,最大为20 + $items_count = get_theme_mod('development_history_items_count', 5); + $items_count = min(max(1, intval($items_count)), 20); // 限制在1-20之间 + + for ($i = 1; $i <= $items_count; $i++) { + // 添加历史年份区域 + $wp_customize->add_section('nenghui_development_history_item_' . $i, array( + 'title' => '历史年份 ' . $i, + 'panel' => 'nenghui_development_history_panel', + 'priority' => 10 + $i * 10, + )); + + // 年份设置 + $wp_customize->add_setting('development_history_item_' . $i . '_year', array( + 'default' => $default_history[$i]['year'], + 'sanitize_callback' => 'sanitize_text_field', + )); + $wp_customize->add_control('development_history_item_' . $i . '_year', array( + 'label' => '年份', + 'section' => 'nenghui_development_history_item_' . $i, + 'type' => 'text', + )); + + // 描述设置 + $wp_customize->add_setting('development_history_item_' . $i . '_description', array( + 'default' => $default_history[$i]['description'], + 'sanitize_callback' => 'wp_kses_post', + )); + $wp_customize->add_control('development_history_item_' . $i . '_description', array( + 'label' => '描述', + 'section' => 'nenghui_development_history_item_' . $i, + 'type' => 'textarea', + 'input_attrs' => array( + 'rows' => 3, + ), + )); + + // 是否为默认激活状态 + $wp_customize->add_setting('development_history_item_' . $i . '_active', array( + 'default' => $default_history[$i]['active'], + 'sanitize_callback' => 'wp_validate_boolean', + )); + $wp_customize->add_control('development_history_item_' . $i . '_active', array( + 'label' => '默认激活状态', + 'section' => 'nenghui_development_history_item_' . $i, + 'type' => 'checkbox', + )); + } + + // 添加证书画廊设置面板 + $wp_customize->add_panel('nenghui_certification_gallery_panel', array( + 'title' => '资质证书设置', + 'description' => '配置资质证书区块的内容和样式', + 'priority' => 39, + )); + + // 添加证书画廊基本设置区域 + $wp_customize->add_section('nenghui_certification_gallery_basic_settings', array( + 'title' => '资质证书基本设置', + 'panel' => 'nenghui_certification_gallery_panel', + 'priority' => 10, + )); + + // 证书画廊图片设置 + $wp_customize->add_setting('certification_gallery_images', array( + 'default' => '', + 'sanitize_callback' => 'sanitize_text_field', + )); + $wp_customize->add_control(new Nenghui_Gallery_Control($wp_customize, 'certification_gallery_images', array( + 'label' => '资质证书图片', + 'description' => '点击按钮选择多张资质证书图片', + 'section' => 'nenghui_certification_gallery_basic_settings', + 'settings' => 'certification_gallery_images', + ))); + + // 证书画廊列数设置 + $wp_customize->add_setting('certification_gallery_columns', array( + 'default' => 5, + 'sanitize_callback' => 'absint', + )); + $wp_customize->add_control('certification_gallery_columns', array( + 'label' => '每行显示列数', + 'description' => '设置每行显示的资质证书数量(1-6)', + 'section' => 'nenghui_certification_gallery_basic_settings', + 'type' => 'number', + 'input_attrs' => array( + 'min' => 1, + 'max' => 6, + 'step' => 1, + ), + )); + + // 是否启用灯箱效果 + $wp_customize->add_setting('certification_gallery_lightbox', array( + 'default' => true, + 'sanitize_callback' => 'wp_validate_boolean', + )); + $wp_customize->add_control('certification_gallery_lightbox', array( + 'label' => '启用灯箱效果', + 'description' => '点击证书图片时显示大图', + 'section' => 'nenghui_certification_gallery_basic_settings', + 'type' => 'checkbox', + )); + + // 是否启用动画效果 + $wp_customize->add_setting('certification_gallery_animation', array( + 'default' => true, + 'sanitize_callback' => 'wp_validate_boolean', + )); + $wp_customize->add_control('certification_gallery_animation', array( + 'label' => '启用动画效果', + 'description' => '滚动时显示动画', + 'section' => 'nenghui_certification_gallery_basic_settings', + 'type' => 'checkbox', + )); + + + + // 添加联系地图设置面板 + $wp_customize->add_panel('nenghui_contact_map_panel', array( + 'title' => '联系地图设置', + 'description' => '配置联系方式和地图显示', + 'priority' => 45, + )); + + // 添加联系方式基本设置区域 + $wp_customize->add_section('nenghui_contact_basic_settings', array( + 'title' => '联系方式基本设置', + 'panel' => 'nenghui_contact_map_panel', + 'priority' => 10, + )); + + // 联系地图区块标题设置 + $wp_customize->add_setting('contact_map_title', array( + 'default' => '联系我们', + 'sanitize_callback' => 'sanitize_text_field', + )); + $wp_customize->add_control('contact_map_title', array( + 'label' => '区块标题', + 'section' => 'nenghui_contact_basic_settings', + 'type' => 'text', + )); + + // 办公地址设置 + $wp_customize->add_setting('contact_office_address', array( + 'default' => 'i288 Tongxie Road Shanghai China 200335', + 'sanitize_callback' => 'sanitize_textarea_field', + )); + $wp_customize->add_control('contact_office_address', array( + 'label' => '办公地址', + 'section' => 'nenghui_contact_basic_settings', + 'type' => 'textarea', + 'input_attrs' => array( + 'rows' => 3, + ), + )); + + // 电话/手机设置 + $wp_customize->add_setting('contact_phone', array( + 'default' => '+86-21-50896255', + 'sanitize_callback' => 'sanitize_text_field', + )); + $wp_customize->add_control('contact_phone', array( + 'label' => '电话/手机', + 'section' => 'nenghui_contact_basic_settings', + 'type' => 'text', + )); + + // 邮箱设置 + $wp_customize->add_setting('contact_email', array( + 'default' => 'info@nhet.energy', + 'sanitize_callback' => 'sanitize_email', + )); + $wp_customize->add_control('contact_email', array( + 'label' => '邮箱地址', + 'section' => 'nenghui_contact_basic_settings', + 'type' => 'email', + )); + + // 添加地图设置区域 + $wp_customize->add_section('nenghui_contact_map_settings', array( + 'title' => '地图设置', + 'panel' => 'nenghui_contact_map_panel', + 'priority' => 20, + )); + + // 地图嵌入代码设置 + $default_map_file = get_template_directory() . '/docs/Google-maps.txt'; + $default_map_code = ''; + if (file_exists($default_map_file)) { + $default_map_code = file_get_contents($default_map_file); + } + + $wp_customize->add_setting('contact_map_embed_code', array( + 'default' => $default_map_code, + 'sanitize_callback' => 'wp_unslash', + )); + $wp_customize->add_control('contact_map_embed_code', array( + 'label' => '地图嵌入代码', + 'description' => '粘贴Google地图或其他地图服务的嵌入代码', + 'section' => 'nenghui_contact_map_settings', + 'type' => 'textarea', + 'input_attrs' => array( + 'rows' => 8, + 'placeholder' => '粘贴地图嵌入代码...', + ), + )); + + // 地图高度设置 + $wp_customize->add_setting('contact_map_height', array( + 'default' => '400px', + 'sanitize_callback' => 'sanitize_text_field', + )); + $wp_customize->add_control('contact_map_height', array( + 'label' => '地图高度', + 'description' => '支持px、vh单位,例如:400px 或 50vh', + 'section' => 'nenghui_contact_map_settings', + 'type' => 'text', + 'input_attrs' => array( + 'placeholder' => '400px', + ), + )); + + // 添加样式设置区域 + $wp_customize->add_section('nenghui_contact_style_settings', array( + 'title' => '样式设置', + 'panel' => 'nenghui_contact_map_panel', + 'priority' => 30, + )); + + // 背景颜色设置 + $wp_customize->add_setting('contact_bg_color', array( + 'default' => '#f8f9fa', + 'sanitize_callback' => 'sanitize_hex_color', + )); + $wp_customize->add_control(new WP_Customize_Color_Control($wp_customize, 'contact_bg_color', array( + 'label' => '背景颜色', + 'section' => 'nenghui_contact_style_settings', + 'settings' => 'contact_bg_color', + ))); + + // 文字颜色设置 + $wp_customize->add_setting('contact_text_color', array( + 'default' => '#333333', + 'sanitize_callback' => 'sanitize_hex_color', + )); + $wp_customize->add_control(new WP_Customize_Color_Control($wp_customize, 'contact_text_color', array( + 'label' => '文字颜色', + 'section' => 'nenghui_contact_style_settings', + 'settings' => 'contact_text_color', + ))); + + // 图标颜色设置 + $wp_customize->add_setting('contact_icon_color', array( + 'default' => '#007cba', + 'sanitize_callback' => 'sanitize_hex_color', + )); + $wp_customize->add_control(new WP_Customize_Color_Control($wp_customize, 'contact_icon_color', array( + 'label' => '图标颜色', + 'section' => 'nenghui_contact_style_settings', + 'settings' => 'contact_icon_color', + ))); + + // 添加案例展示设置面板 + $wp_customize->add_panel('nenghui_cases_panel', array( + 'title' => '案例展示设置', + 'description' => '配置案例展示区块的背景和样式', + 'priority' => 46, + )); + + // 添加案例展示基本设置区域 + $wp_customize->add_section('nenghui_cases_basic_settings', array( + 'title' => '案例展示基本设置', + 'panel' => 'nenghui_cases_panel', + 'priority' => 10, + )); + + // 案例展示区块标题设置 + $wp_customize->add_setting('cases_section_title', array( + 'default' => 'Cases', + 'sanitize_callback' => 'sanitize_text_field', + )); + $wp_customize->add_control('cases_section_title', array( + 'label' => '区块标题', + 'section' => 'nenghui_cases_basic_settings', + 'type' => 'text', + )); + + // 添加案例展示背景设置区域 + $wp_customize->add_section('nenghui_cases_background_settings', array( + 'title' => '背景设置', + 'panel' => 'nenghui_cases_panel', + 'priority' => 20, + )); + + // 背景类型选择 + $wp_customize->add_setting('cases_background_type', array( + 'default' => 'color', + 'sanitize_callback' => 'sanitize_text_field', + )); + $wp_customize->add_control('cases_background_type', array( + 'label' => '背景类型', + 'section' => 'nenghui_cases_background_settings', + 'type' => 'select', + 'choices' => array( + 'color' => '纯色背景', + 'image' => '图片背景', + 'video' => '视频背景', + ), + )); + + // 背景颜色设置 + $wp_customize->add_setting('cases_background_color', array( + 'default' => '#f8f9fa', + 'sanitize_callback' => 'sanitize_hex_color', + )); + $wp_customize->add_control(new WP_Customize_Color_Control($wp_customize, 'cases_background_color', array( + 'label' => '背景颜色', + 'section' => 'nenghui_cases_background_settings', + 'settings' => 'cases_background_color', + ))); + + // 背景图片设置 + $wp_customize->add_setting('cases_background_image', array( + 'default' => '', + 'sanitize_callback' => 'esc_url_raw', + )); + $wp_customize->add_control(new WP_Customize_Image_Control($wp_customize, 'cases_background_image', array( + 'label' => '背景图片', + 'description' => '选择作为背景的图片文件', + 'section' => 'nenghui_cases_background_settings', + 'settings' => 'cases_background_image', + ))); + + // 背景视频URL设置 + $wp_customize->add_setting('cases_background_video', array( + 'default' => '', + 'sanitize_callback' => 'esc_url_raw', + )); + $wp_customize->add_control('cases_background_video', array( + 'label' => '背景视频URL', + 'description' => '输入MP4格式视频文件的完整URL地址', + 'section' => 'nenghui_cases_background_settings', + 'type' => 'url', + 'input_attrs' => array( + 'placeholder' => 'https://example.com/video.mp4', + ), + )); + + // 背景图片位置设置 + $wp_customize->add_setting('cases_background_position', array( + 'default' => 'center center', + 'sanitize_callback' => 'sanitize_text_field', + )); + $wp_customize->add_control('cases_background_position', array( + 'label' => '背景图片位置', + 'section' => 'nenghui_cases_background_settings', + 'type' => 'select', + 'choices' => array( + 'left top' => '左上', + 'center top' => '居中上', + 'right top' => '右上', + 'left center' => '左中', + 'center center' => '居中', + 'right center' => '右中', + 'left bottom' => '左下', + 'center bottom' => '居中下', + 'right bottom' => '右下', + ), + )); + + // 背景图片尺寸设置 + $wp_customize->add_setting('cases_background_size', array( + 'default' => 'cover', + 'sanitize_callback' => 'sanitize_text_field', + )); + $wp_customize->add_control('cases_background_size', array( + 'label' => '背景图片尺寸', + 'section' => 'nenghui_cases_background_settings', + 'type' => 'select', + 'choices' => array( + 'auto' => '原始尺寸', + 'cover' => '覆盖容器', + 'contain' => '完整显示', + ), + )); + + // 背景重复设置 + $wp_customize->add_setting('cases_background_repeat', array( + 'default' => 'no-repeat', + 'sanitize_callback' => 'sanitize_text_field', + )); + $wp_customize->add_control('cases_background_repeat', array( + 'label' => '背景重复', + 'section' => 'nenghui_cases_background_settings', + 'type' => 'select', + 'choices' => array( + 'no-repeat' => '不重复', + 'repeat' => '重复', + 'repeat-x' => '水平重复', + 'repeat-y' => '垂直重复', + ), + )); + + // 背景遮罩设置 + $wp_customize->add_setting('cases_background_overlay', array( + 'default' => true, + 'sanitize_callback' => 'wp_validate_boolean', + )); + $wp_customize->add_control('cases_background_overlay', array( + 'label' => '启用背景遮罩', + 'description' => '在背景上添加半透明遮罩以提高文字可读性', + 'section' => 'nenghui_cases_background_settings', + 'type' => 'checkbox', + )); + + // 背景遮罩颜色设置 + $wp_customize->add_setting('cases_background_overlay_color', array( + 'default' => '#000000', + 'sanitize_callback' => 'sanitize_hex_color', + )); + $wp_customize->add_control(new WP_Customize_Color_Control($wp_customize, 'cases_background_overlay_color', array( + 'label' => '遮罩颜色', + 'section' => 'nenghui_cases_background_settings', + 'settings' => 'cases_background_overlay_color', + ))); + + // 背景遮罩透明度设置 + $wp_customize->add_setting('cases_background_overlay_opacity', array( + 'default' => '0.4', + 'sanitize_callback' => 'sanitize_text_field', + )); + $wp_customize->add_control('cases_background_overlay_opacity', array( + 'label' => '遮罩透明度', + 'description' => '设置背景遮罩的透明度(0-1之间的数值)', + 'section' => 'nenghui_cases_background_settings', + 'type' => 'range', + 'input_attrs' => array( + 'min' => 0, + 'max' => 1, + 'step' => 0.1, + ), + )); + + // 添加产品Banner设置面板 + $wp_customize->add_panel('nenghui_products_banner_panel', array( + 'title' => '产品Banner轮播设置', + 'description' => '配置产品Banner卡片轮播的图片、标题、描述和链接', + 'priority' => 35, + )); + + // 产品Banner基本设置 + $wp_customize->add_section('nenghui_products_banner_basic_settings', array( + 'title' => '基本设置', + 'panel' => 'nenghui_products_banner_panel', + 'priority' => 10, + )); + + // 产品数量设置 + $wp_customize->add_setting('products_banner_count', array( + 'default' => 3, + 'sanitize_callback' => 'absint', + 'transport' => 'postMessage', + )); + $wp_customize->add_control('products_banner_count', array( + 'label' => '显示产品数量', + 'description' => '设置要显示的产品数量(最多7个)', + 'section' => 'nenghui_products_banner_basic_settings', + 'type' => 'number', + 'input_attrs' => array( + 'min' => 1, + 'max' => 7, + 'step' => 1, + ), + )); + + // 自动播放设置 + $wp_customize->add_setting('products_banner_autoplay', array( + 'default' => true, + 'sanitize_callback' => 'wp_validate_boolean', + 'transport' => 'postMessage', + )); + $wp_customize->add_control('products_banner_autoplay', array( + 'label' => '启用自动播放', + 'description' => '是否自动切换产品卡片', + 'section' => 'nenghui_products_banner_basic_settings', + 'type' => 'checkbox', + )); + + // 自动播放延迟设置 + $wp_customize->add_setting('products_banner_autoplay_delay', array( + 'default' => 5000, + 'sanitize_callback' => 'absint', + 'transport' => 'postMessage', + )); + $wp_customize->add_control('products_banner_autoplay_delay', array( + 'label' => '自动播放延迟(毫秒)', + 'description' => '设置自动切换的时间间隔', + 'section' => 'nenghui_products_banner_basic_settings', + 'type' => 'number', + 'input_attrs' => array( + 'min' => 1000, + 'max' => 10000, + 'step' => 500, + ), + )); + + // 为每个产品添加设置区域 + for ($i = 1; $i <= 7; $i++) { + // 产品设置区域 + $wp_customize->add_section('nenghui_products_banner_product_' . $i, array( + 'title' => '产品 ' . $i, + 'panel' => 'nenghui_products_banner_panel', + 'priority' => 10 + $i, + )); + + // 产品图片 + $wp_customize->add_setting('products_banner_image_' . $i, array( + 'default' => '', + 'sanitize_callback' => 'esc_url_raw', + 'transport' => 'postMessage', + )); + $wp_customize->add_control(new WP_Customize_Image_Control($wp_customize, 'products_banner_image_' . $i, array( + 'label' => '产品图片', + 'description' => '上传产品图片(建议尺寸:600x400px)', + 'section' => 'nenghui_products_banner_product_' . $i, + ))); + + // 产品标题 + $wp_customize->add_setting('products_banner_title_' . $i, array( + 'default' => '', + 'sanitize_callback' => 'sanitize_text_field', + 'transport' => 'postMessage', + )); + $wp_customize->add_control('products_banner_title_' . $i, array( + 'label' => '产品标题', + 'description' => '输入产品标题', + 'section' => 'nenghui_products_banner_product_' . $i, + 'type' => 'text', + )); + + // 产品描述 + $wp_customize->add_setting('products_banner_description_' . $i, array( + 'default' => '', + 'sanitize_callback' => 'sanitize_textarea_field', + 'transport' => 'postMessage', + )); + $wp_customize->add_control('products_banner_description_' . $i, array( + 'label' => '产品描述', + 'description' => '输入产品描述信息', + 'section' => 'nenghui_products_banner_product_' . $i, + 'type' => 'textarea', + )); + + // 产品链接 + $wp_customize->add_setting('products_banner_link_' . $i, array( + 'default' => '#', + 'sanitize_callback' => 'esc_url_raw', + 'transport' => 'postMessage', + )); + $wp_customize->add_control('products_banner_link_' . $i, array( + 'label' => '产品链接', + 'description' => '输入产品详情页链接', + 'section' => 'nenghui_products_banner_product_' . $i, + 'type' => 'url', + )); + } + + // 添加流程图Tab设置面板 + $wp_customize->add_panel('nenghui_flowchart_tabs_panel', array( + 'title' => '流程图Tab设置', + 'description' => '配置流程图Tab切换组件的标题、图片和说明文字', + 'priority' => 36, + )); + + // 为每个流程图Tab添加设置区域 + $flowchart_tab_names = array( + 1 => 'PACK Process Flowchart', + 2 => 'Enclosure Manufacturing Process Flow Diagram', + 3 => 'Module Manufacturing Process Flow Diagram' + ); + + foreach ($flowchart_tab_names as $i => $default_name) { + // 添加Tab设置区域 + $wp_customize->add_section('nenghui_flowchart_tab_section_' . $i, array( + 'title' => '流程图Tab ' . $i, + 'panel' => 'nenghui_flowchart_tabs_panel', + 'priority' => $i * 10, + )); + + // Tab标题设置 + $wp_customize->add_setting('flowchart_tab_' . $i . '_title', array( + 'default' => $default_name, + 'sanitize_callback' => 'sanitize_text_field', + 'transport' => 'postMessage', + )); + $wp_customize->add_control('flowchart_tab_' . $i . '_title', array( + 'label' => 'Tab标题', + 'description' => '设置Tab按钮显示的标题', + 'section' => 'nenghui_flowchart_tab_section_' . $i, + 'type' => 'text', + )); + + // Tab图片设置 + $default_images = array( + 1 => get_template_directory_uri() . '/assets/images/pack-process flow-chart.png', + 2 => get_template_directory_uri() . '/assets/images/cabinet-process flow-chart.png', + 3 => get_template_directory_uri() . '/assets/images/module-process flow.png' + ); + + $wp_customize->add_setting('flowchart_tab_' . $i . '_image', array( + 'default' => $default_images[$i], + 'sanitize_callback' => 'esc_url_raw', + 'transport' => 'postMessage', + )); + $wp_customize->add_control(new WP_Customize_Image_Control($wp_customize, 'flowchart_tab_' . $i . '_image', array( + 'label' => '流程图图片', + 'description' => '上传或选择流程图图片', + 'section' => 'nenghui_flowchart_tab_section_' . $i, + ))); + + // Tab说明文字设置 + $default_notes = array( + 1 => 'Note 1: Blue procedures denote liquid-cooled project operations; Turquoise procedures indicate universal processes (Air-cooled PACK units require turquoise procedures only). 2.Operations marked with [★] denote critical processes; those marked with [▲] indicate inspection operations.', + 2 => '', // 第二个tab没有说明文字 + 3 => 'Note: [★] denotes Critical Processes; [▲] denotes Inspection Processes.' + ); + + $wp_customize->add_setting('flowchart_tab_' . $i . '_note', array( + 'default' => $default_notes[$i], + 'sanitize_callback' => 'wp_kses_post', + 'transport' => 'postMessage', + )); + $wp_customize->add_control('flowchart_tab_' . $i . '_note', array( + 'label' => '说明文字', + 'description' => '设置图片下方的说明文字(支持HTML标签,留空则不显示)', + 'section' => 'nenghui_flowchart_tab_section_' . $i, + 'type' => 'textarea', + )); + } + + + +} +add_action('customize_register', 'nenghui_customize_register'); + +/** + * 验证国家JSON数据 + */ +function nenghui_sanitize_countries_json($input) { + if (empty($input)) { + return ''; + } + + $decoded = json_decode($input, true); + if (json_last_error() !== JSON_ERROR_NONE) { + return ''; + } + + // 验证数据结构 + if (!is_array($decoded)) { + return ''; + } + + $sanitized = array(); + foreach ($decoded as $country) { + if (is_array($country) && + isset($country['code']) && + isset($country['lat']) && + isset($country['lng'])) { + + $sanitized[] = array( + 'code' => sanitize_text_field($country['code']), + 'name' => isset($country['name']) ? sanitize_text_field($country['name']) : '', + 'lat' => floatval($country['lat']), + 'lng' => floatval($country['lng']), + 'value' => isset($country['value']) ? intval($country['value']) : 30, + ); + } + } + + return json_encode($sanitized); +} + + + +/** + * 自定义菜单ID验证函数 + */ +function nenghui_sanitize_menu_id($input) { + // 如果输入为空,返回空字符串 + if (empty($input)) { + return ''; + } + + // 转换为整数 + $menu_id = intval($input); + + // 如果菜单ID无效,返回空字符串 + if ($menu_id <= 0) { + return ''; + } + + // 检查菜单是否存在 + $menu = wp_get_nav_menu_object($menu_id); + if (!$menu || is_wp_error($menu)) { + return ''; + } + + // 返回有效的菜单ID + return strval($menu_id); +} + +/** + * 获取导航菜单选项 + */ +function nenghui_get_nav_menu_choices() { + $menus = wp_get_nav_menus(); + $choices = array('' => '请选择菜单'); + + if (is_array($menus) && !empty($menus)) { + foreach ($menus as $menu) { + // 确保菜单对象有效且有term_id + if (isset($menu->term_id) && isset($menu->name)) { + $choices[strval($menu->term_id)] = $menu->name . ' (ID: ' . $menu->term_id . ')'; + } + } + } + + return $choices; +} + +/** + * 添加自定义器预览脚本 + */ +function nenghui_customize_preview_js() { + wp_enqueue_script('nenghui-customizer-preview', get_template_directory_uri() . '/assets/js/customizer-preview.js', array('customize-preview'), '1.0.0', true); +} +add_action('customize_preview_init', 'nenghui_customize_preview_js'); + +/** + * 添加地图设置到自定义器 + */ +function nenghui_add_black_maps_customizer($wp_customize) { + // 添加地图设置面板 + $wp_customize->add_panel('black_maps_panel', array( + 'title' => '全球地图设置', + 'description' => '配置全球地图的显示样式和国家数据', + 'priority' => 35, + )); + + // 基础设置区域 + $wp_customize->add_section('black_maps_basic_section', array( + 'title' => '基础设置', + 'panel' => 'black_maps_panel', + 'priority' => 10, + )); + + // 地图标题 + $wp_customize->add_setting('black_maps_title', array( + 'default' => 'Global Layout', + 'sanitize_callback' => 'sanitize_text_field', + 'transport' => 'postMessage' + )); + $wp_customize->add_control('black_maps_title', array( + 'label' => '地图标题', + 'section' => 'black_maps_basic_section', + 'type' => 'text', + )); + + // 地图副标题 + $wp_customize->add_setting('black_maps_subtitle', array( + 'default' => 'Global Service Operations: Remote diagnostics with 2-hour onsite response in key markets', + 'sanitize_callback' => 'sanitize_textarea_field', + 'transport' => 'postMessage' + )); + $wp_customize->add_control('black_maps_subtitle', array( + 'label' => '地图副标题', + 'section' => 'black_maps_basic_section', + 'type' => 'textarea', + )); + + // 地图高度 + $wp_customize->add_setting('black_maps_height', array( + 'default' => '100vh', + 'sanitize_callback' => 'sanitize_text_field', + 'transport' => 'postMessage' + )); + $wp_customize->add_control('black_maps_height', array( + 'label' => '地图高度', + 'description' => '支持px、vh、%等单位,例如:100vh、600px', + 'section' => 'black_maps_basic_section', + 'type' => 'text', + )); + + // 样式设置区域 + $wp_customize->add_section('black_maps_style_section', array( + 'title' => '样式设置', + 'panel' => 'black_maps_panel', + 'priority' => 20, + )); + + // 背景颜色 + $wp_customize->add_setting('black_maps_bg_color', array( + 'default' => '#f5f5f5', + 'sanitize_callback' => 'sanitize_hex_color', + 'transport' => 'postMessage' + )); + $wp_customize->add_control(new WP_Customize_Color_Control($wp_customize, 'black_maps_bg_color', array( + 'label' => '背景颜色', + 'section' => 'black_maps_style_section', + ))); + + // 图表背景颜色 + $wp_customize->add_setting('black_maps_chart_bg', array( + 'default' => '#f8f9fa', + 'sanitize_callback' => 'sanitize_hex_color', + 'transport' => 'postMessage' + )); + $wp_customize->add_control(new WP_Customize_Color_Control($wp_customize, 'black_maps_chart_bg', array( + 'label' => '图表背景颜色', + 'section' => 'black_maps_style_section', + ))); + + // 标题颜色 + $wp_customize->add_setting('black_maps_title_color', array( + 'default' => '#333333', + 'sanitize_callback' => 'sanitize_hex_color', + 'transport' => 'postMessage' + )); + $wp_customize->add_control(new WP_Customize_Color_Control($wp_customize, 'black_maps_title_color', array( + 'label' => '标题颜色', + 'section' => 'black_maps_style_section', + ))); + + // 标题字体大小 + $wp_customize->add_setting('black_maps_title_size', array( + 'default' => 20, + 'sanitize_callback' => 'absint', + 'transport' => 'postMessage' + )); + $wp_customize->add_control('black_maps_title_size', array( + 'label' => '标题字体大小 (px)', + 'section' => 'black_maps_style_section', + 'type' => 'range', + 'input_attrs' => array( + 'min' => 12, + 'max' => 36, + 'step' => 1 + ) + )); + + // 中国颜色 + $wp_customize->add_setting('black_maps_china_color', array( + 'default' => '#e74c3c', + 'sanitize_callback' => 'sanitize_hex_color', + 'transport' => 'postMessage' + )); + $wp_customize->add_control(new WP_Customize_Color_Control($wp_customize, 'black_maps_china_color', array( + 'label' => '中国区域颜色', + 'section' => 'black_maps_style_section', + ))); + + // 目标国家颜色 + $wp_customize->add_setting('black_maps_target_color', array( + 'default' => '#2eb6aa', + 'sanitize_callback' => 'sanitize_hex_color', + 'transport' => 'postMessage' + )); + $wp_customize->add_control(new WP_Customize_Color_Control($wp_customize, 'black_maps_target_color', array( + 'label' => '目标国家颜色', + 'section' => 'black_maps_style_section', + ))); + + // 连线颜色 + $wp_customize->add_setting('black_maps_line_color', array( + 'default' => '#FFFFFF', + 'sanitize_callback' => 'sanitize_hex_color', + 'transport' => 'postMessage' + )); + $wp_customize->add_control(new WP_Customize_Color_Control($wp_customize, 'black_maps_line_color', array( + 'label' => '连线颜色', + 'section' => 'black_maps_style_section', + ))); + + // 特效颜色 + $wp_customize->add_setting('black_maps_effect_color', array( + 'default' => '#0080ff', + 'sanitize_callback' => 'sanitize_hex_color', + 'transport' => 'postMessage' + )); + $wp_customize->add_control(new WP_Customize_Color_Control($wp_customize, 'black_maps_effect_color', array( + 'label' => '特效颜色', + 'section' => 'black_maps_style_section', + ))); + + // 国家管理区域 + $wp_customize->add_section('black_maps_countries_section', array( + 'title' => '国家管理', + 'panel' => 'black_maps_panel', + 'priority' => 30, + )); + + // 自定义国家数据(JSON格式) + $wp_customize->add_setting('black_maps_countries_json', array( + 'default' => '', + 'sanitize_callback' => 'nenghui_sanitize_json', + 'transport' => 'postMessage' + )); + $wp_customize->add_control('black_maps_countries_json', array( + 'label' => '自定义国家数据 (JSON)', + 'description' => '格式:[{"name":"国家名","code":"国家代码","lat":纬度,"lng":经度,"value":数值}]', + 'section' => 'black_maps_countries_section', + 'type' => 'textarea', + 'input_attrs' => array( + 'rows' => 8, + 'placeholder' => '[{"name":"Japan","code":"JP","lat":36.2048,"lng":138.2529,"value":25}]' + ) + )); + + // 显示参数区域 + $wp_customize->add_section('black_maps_display_section', array( + 'title' => '显示参数', + 'panel' => 'black_maps_panel', + 'priority' => 40, + )); + + // 启用缩放 + $wp_customize->add_setting('black_maps_enable_zoom', array( + 'default' => false, + 'sanitize_callback' => 'wp_validate_boolean', + 'transport' => 'postMessage' + )); + $wp_customize->add_control('black_maps_enable_zoom', array( + 'label' => '启用地图缩放', + 'section' => 'black_maps_display_section', + 'type' => 'checkbox', + )); + + // 启用拖拽 + $wp_customize->add_setting('black_maps_enable_drag', array( + 'default' => false, + 'sanitize_callback' => 'wp_validate_boolean', + 'transport' => 'postMessage' + )); + $wp_customize->add_control('black_maps_enable_drag', array( + 'label' => '启用地图拖拽', + 'section' => 'black_maps_display_section', + 'type' => 'checkbox', + )); + + // 动画速度 + $wp_customize->add_setting('black_maps_animation_speed', array( + 'default' => 6, + 'sanitize_callback' => 'absint', + 'transport' => 'postMessage' + )); + $wp_customize->add_control('black_maps_animation_speed', array( + 'label' => '动画速度 (秒)', + 'section' => 'black_maps_display_section', + 'type' => 'range', + 'input_attrs' => array( + 'min' => 1, + 'max' => 10, + 'step' => 1 + ) + )); +} +add_action('customize_register', 'nenghui_add_black_maps_customizer'); + +/** + * JSON数据验证函数 + */ +function nenghui_sanitize_json($input) { + if (empty($input)) { + return ''; + } + + $decoded = json_decode($input, true); + if (json_last_error() !== JSON_ERROR_NONE) { + return ''; + } + + return $input; +} + +/** + * 添加自定义器控制脚本 + */ +function nenghui_customize_controls_js() { + // 确保媒体库已加载 + wp_enqueue_media(); + wp_enqueue_script('nenghui-customizer-controls', get_template_directory_uri() . '/assets/js/customizer-controls.js', array('customize-controls'), '1.0.0', true); +} +add_action('customize_controls_enqueue_scripts', 'nenghui_customize_controls_js'); + +// 添加业务流程设计区块自定义选项 +function nenghui_business_process_customizer($wp_customize) { + // 添加业务流程面板 + $wp_customize->add_panel('business_process_panel', array( + 'title' => '业务流程设计', + 'description' => '配置业务流程设计区块的显示选项和内容', + 'priority' => 70, + )); + + // 添加基础设置部分 + $wp_customize->add_section('business_process_basic_section', array( + 'title' => '基础设置', + 'panel' => 'business_process_panel', + 'priority' => 10, + )); + + // 是否显示业务流程区块 + $wp_customize->add_setting('business_process_show', array( + 'default' => true, + 'sanitize_callback' => 'wp_validate_boolean', + 'transport' => 'postMessage', + )); + + $wp_customize->add_control('business_process_show', array( + 'label' => '显示业务流程区块', + 'section' => 'business_process_basic_section', + 'type' => 'checkbox', + 'description' => '是否在页面中显示业务流程设计区块', + )); + + // 区块标题设置 + $wp_customize->add_setting('business_process_title', array( + 'default' => '设计业务流程', + 'sanitize_callback' => 'sanitize_text_field', + 'transport' => 'postMessage', + )); + + $wp_customize->add_control('business_process_title', array( + 'label' => '区块标题', + 'section' => 'business_process_basic_section', + 'type' => 'text', + 'description' => '业务流程设计区块的主标题', + )); + + // 区块副标题设置 + $wp_customize->add_setting('business_process_subtitle', array( + 'default' => '专业的设计流程,确保项目高质量完成', + 'sanitize_callback' => 'sanitize_text_field', + 'transport' => 'postMessage', + )); + + $wp_customize->add_control('business_process_subtitle', array( + 'label' => '区块副标题', + 'section' => 'business_process_basic_section', + 'type' => 'text', + 'description' => '业务流程设计区块的副标题', + )); + + // Tab 01 设置部分 + $wp_customize->add_section('business_process_tab1_section', array( + 'title' => 'Tab 01 - 可行性研究', + 'panel' => 'business_process_panel', + 'priority' => 20, + )); + + // Tab 01 标题 + $wp_customize->add_setting('business_process_tab1_title', array( + 'default' => '可行性研究', + 'sanitize_callback' => 'sanitize_text_field', + 'transport' => 'postMessage', + )); + + $wp_customize->add_control('business_process_tab1_title', array( + 'label' => 'Tab 01 标题', + 'section' => 'business_process_tab1_section', + 'type' => 'text', + )); + + // Tab 01 描述 + $wp_customize->add_setting('business_process_tab1_description', array( + 'default' => '前期调研并综合考虑"可行性、经济性、安全性"三个方面,多方案比较,确定最优设计方案和实施策略。', + 'sanitize_callback' => 'sanitize_textarea_field', + 'transport' => 'postMessage', + )); + + $wp_customize->add_control('business_process_tab1_description', array( + 'label' => 'Tab 01 描述', + 'section' => 'business_process_tab1_section', + 'type' => 'textarea', + )); + + // Tab 01 图片 + $wp_customize->add_setting('business_process_tab1_image', array( + 'default' => get_template_directory_uri() . '/assets/images/FWas.jpg', + 'sanitize_callback' => 'esc_url_raw', + 'transport' => 'postMessage', + )); + + $wp_customize->add_control(new WP_Customize_Image_Control($wp_customize, 'business_process_tab1_image', array( + 'label' => 'Tab 01 图片', + 'section' => 'business_process_tab1_section', + 'settings' => 'business_process_tab1_image', + 'description' => '选择Tab 01对应的图片', + ))); + + // Tab 02 设置部分 + $wp_customize->add_section('business_process_tab2_section', array( + 'title' => 'Tab 02 - 初步设计', + 'panel' => 'business_process_panel', + 'priority' => 30, + )); + + // Tab 02 标题 + $wp_customize->add_setting('business_process_tab2_title', array( + 'default' => '初步设计', + 'sanitize_callback' => 'sanitize_text_field', + 'transport' => 'postMessage', + )); + + $wp_customize->add_control('business_process_tab2_title', array( + 'label' => 'Tab 02 标题', + 'section' => 'business_process_tab2_section', + 'type' => 'text', + )); + + // Tab 02 描述 + $wp_customize->add_setting('business_process_tab2_description', array( + 'default' => '在基本方案确定的基础上,进行"精细设计",确定主要设备的选型和布置,形成初步设计方案。', + 'sanitize_callback' => 'sanitize_textarea_field', + 'transport' => 'postMessage', + )); + + $wp_customize->add_control('business_process_tab2_description', array( + 'label' => 'Tab 02 描述', + 'section' => 'business_process_tab2_section', + 'type' => 'textarea', + )); + + // Tab 02 图片 + $wp_customize->add_setting('business_process_tab2_image', array( + 'default' => get_template_directory_uri() . '/assets/images/FWas.jpg', + 'sanitize_callback' => 'esc_url_raw', + 'transport' => 'postMessage', + )); + + $wp_customize->add_control(new WP_Customize_Image_Control($wp_customize, 'business_process_tab2_image', array( + 'label' => 'Tab 02 图片', + 'section' => 'business_process_tab2_section', + 'settings' => 'business_process_tab2_image', + 'description' => '选择Tab 02对应的图片', + ))); + + // Tab 03 设置部分 + $wp_customize->add_section('business_process_tab3_section', array( + 'title' => 'Tab 03 - 施工图设计', + 'panel' => 'business_process_panel', + 'priority' => 40, + )); + + // Tab 03 标题 + $wp_customize->add_setting('business_process_tab3_title', array( + 'default' => '施工图设计', + 'sanitize_callback' => 'sanitize_text_field', + 'transport' => 'postMessage', + )); + + $wp_customize->add_control('business_process_tab3_title', array( + 'label' => 'Tab 03 标题', + 'section' => 'business_process_tab3_section', + 'type' => 'text', + )); + + // Tab 03 描述 + $wp_customize->add_setting('business_process_tab3_description', array( + 'default' => '基于初步设计方案,进行详细的施工图设计,确保设计方案的可实施性和工程质量。', + 'sanitize_callback' => 'sanitize_textarea_field', + 'transport' => 'postMessage', + )); + + $wp_customize->add_control('business_process_tab3_description', array( + 'label' => 'Tab 03 描述', + 'section' => 'business_process_tab3_section', + 'type' => 'textarea', + )); + + // Tab 03 图片 + $wp_customize->add_setting('business_process_tab3_image', array( + 'default' => get_template_directory_uri() . '/assets/images/FWas.jpg', + 'sanitize_callback' => 'esc_url_raw', + 'transport' => 'postMessage', + )); + + $wp_customize->add_control(new WP_Customize_Image_Control($wp_customize, 'business_process_tab3_image', array( + 'label' => 'Tab 03 图片', + 'section' => 'business_process_tab3_section', + 'settings' => 'business_process_tab3_image', + 'description' => '选择Tab 03对应的图片', + ))); + + // Tab 04 设置部分 + $wp_customize->add_section('business_process_tab4_section', array( + 'title' => 'Tab 04 - 竣工图设计', + 'panel' => 'business_process_panel', + 'priority' => 50, + )); + + // Tab 04 标题 + $wp_customize->add_setting('business_process_tab4_title', array( + 'default' => '竣工图设计', + 'sanitize_callback' => 'sanitize_text_field', + 'transport' => 'postMessage', + )); + + $wp_customize->add_control('business_process_tab4_title', array( + 'label' => 'Tab 04 标题', + 'section' => 'business_process_tab4_section', + 'type' => 'text', + )); + + // Tab 04 描述 + $wp_customize->add_setting('business_process_tab4_description', array( + 'default' => '项目完工后的竣工图设计,真实反映工程实际建设情况,为后续运维提供准确的技术资料。', + 'sanitize_callback' => 'sanitize_textarea_field', + 'transport' => 'postMessage', + )); + + $wp_customize->add_control('business_process_tab4_description', array( + 'label' => 'Tab 04 描述', + 'section' => 'business_process_tab4_section', + 'type' => 'textarea', + )); + + // Tab 04 图片 + $wp_customize->add_setting('business_process_tab4_image', array( + 'default' => get_template_directory_uri() . '/assets/images/FWas.jpg', + 'sanitize_callback' => 'esc_url_raw', + 'transport' => 'postMessage', + )); + + $wp_customize->add_control(new WP_Customize_Image_Control($wp_customize, 'business_process_tab4_image', array( + 'label' => 'Tab 04 图片', + 'section' => 'business_process_tab4_section', + 'settings' => 'business_process_tab4_image', + 'description' => '选择Tab 04对应的图片', + ))); +} + +// 获取业务流程配置的辅助函数 +function get_business_process_show() { + return get_theme_mod('business_process_show', true); +} + +function get_business_process_title() { + return get_theme_mod('business_process_title', '设计业务流程'); +} + +function get_business_process_subtitle() { + return get_theme_mod('business_process_subtitle', '专业的设计流程,确保项目高质量完成'); +} + +function get_business_process_tab_data($tab_number) { + $defaults = array( + 1 => array( + 'title' => '可行性研究', + 'description' => '前期调研并综合考虑"可行性、经济性、安全性"三个方面,多方案比较,确定最优设计方案和实施策略。', + 'image' => get_template_directory_uri() . '/assets/images/FWas.jpg' + ), + 2 => array( + 'title' => '初步设计', + 'description' => '在基本方案确定的基础上,进行"精细设计",确定主要设备的选型和布置,形成初步设计方案。', + 'image' => get_template_directory_uri() . '/assets/images/FWas.jpg' + ), + 3 => array( + 'title' => '施工图设计', + 'description' => '基于初步设计方案,进行详细的施工图设计,确保设计方案的可实施性和工程质量。', + 'image' => get_template_directory_uri() . '/assets/images/FWas.jpg' + ), + 4 => array( + 'title' => '竣工图设计', + 'description' => '项目完工后的竣工图设计,真实反映工程实际建设情况,为后续运维提供准确的技术资料。', + 'image' => get_template_directory_uri() . '/assets/images/FWas.jpg' + ) + ); + + if (!isset($defaults[$tab_number])) { + return null; + } + + return array( + 'title' => get_theme_mod("business_process_tab{$tab_number}_title", $defaults[$tab_number]['title']), + 'description' => get_theme_mod("business_process_tab{$tab_number}_description", $defaults[$tab_number]['description']), + 'image' => get_theme_mod("business_process_tab{$tab_number}_image", $defaults[$tab_number]['image']) + ); +} +add_action('customize_register', 'nenghui_business_process_customizer'); \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/inc/error-handler.php b/wp-content/themes/nenghui-energy-theme-4/inc/error-handler.php new file mode 100644 index 0000000..40a2669 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/inc/error-handler.php @@ -0,0 +1,321 @@ + $errno, + 'error_message' => $errstr, + 'error_file' => $errfile, + 'error_line' => $errline, + 'timestamp' => date('Y-m-d H:i:s'), + 'request_uri' => isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : 'unknown', + 'user_agent' => isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'unknown' + ); + + // 记录错误日志 + nenghui_log_foreach_error($error_info); + + // 如果是调试模式,显示详细信息 + if (WP_DEBUG && WP_DEBUG_DISPLAY) { + echo '
'; + echo 'Foreach Error Detected:
'; + echo 'File: ' . esc_html($errfile) . '
'; + echo 'Line: ' . esc_html($errline) . '
'; + echo 'Message: ' . esc_html($errstr) . '
'; + echo '
'; + } + } + + // 返回 false 让 PHP 继续处理错误 + return false; +} + +/** + * 记录 foreach 错误到日志文件 + */ +function nenghui_log_foreach_error($error_info) { + $upload_dir = wp_upload_dir(); + + // 确保 $upload_dir 是数组且包含 basedir + if (!is_array($upload_dir) || !isset($upload_dir['basedir'])) { + return; + } + + $log_file = $upload_dir['basedir'] . '/foreach_errors.log'; + + $log_entry = sprintf( + "[%s] FOREACH ERROR: %s in %s on line %d (URI: %s)\n", + $error_info['timestamp'], + $error_info['error_message'], + $error_info['error_file'], + $error_info['error_line'], + $error_info['request_uri'] + ); + + // 确保日志文件安全 + if (!file_exists($log_file)) { + file_put_contents($log_file, "# Foreach Errors Log\n"); + chmod($log_file, 0600); + } + + file_put_contents($log_file, $log_entry, FILE_APPEND | LOCK_EX); +} + +/** + * 安全的 foreach 包装函数 + * 确保传入的变量是可迭代的数组 + */ +function nenghui_safe_foreach($array, $callback) { + if (!is_array($array) && !($array instanceof Traversable)) { + nenghui_log_foreach_error(array( + 'error_type' => E_WARNING, + 'error_message' => 'nenghui_safe_foreach: Invalid argument supplied, expected array or Traversable', + 'error_file' => __FILE__, + 'error_line' => __LINE__, + 'timestamp' => date('Y-m-d H:i:s'), + 'request_uri' => isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : 'unknown', + 'user_agent' => 'nenghui_safe_foreach' + )); + return false; + } + + if (is_callable($callback)) { + foreach ($array as $key => $value) { + call_user_func($callback, $value, $key); + } + return true; + } + + return false; +} + +/** + * 修复常见的 WordPress 全局变量问题 + * 确保关键的全局变量是正确的数组格式 + */ +function nenghui_fix_wp_globals() { + global $wp_filter, $wp_actions, $wp_current_filter, $wp_meta_boxes, $wp_settings_sections, $wp_settings_fields; + + // 确保 $wp_filter 是数组 + if (!is_array($wp_filter)) { + $wp_filter = array(); + nenghui_log_foreach_error(array( + 'error_type' => E_WARNING, + 'error_message' => 'Fixed $wp_filter global variable - was not array', + 'error_file' => __FILE__, + 'error_line' => __LINE__, + 'timestamp' => date('Y-m-d H:i:s'), + 'request_uri' => isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : 'unknown', + 'user_agent' => 'nenghui_fix_wp_globals' + )); + } + + // 确保 $wp_actions 是数组 + if (!is_array($wp_actions)) { + $wp_actions = array(); + nenghui_log_foreach_error(array( + 'error_type' => E_WARNING, + 'error_message' => 'Fixed $wp_actions global variable - was not array', + 'error_file' => __FILE__, + 'error_line' => __LINE__, + 'timestamp' => date('Y-m-d H:i:s'), + 'request_uri' => isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : 'unknown', + 'user_agent' => 'nenghui_fix_wp_globals' + )); + } + + // 确保 $wp_current_filter 是数组 + if (!is_array($wp_current_filter)) { + $wp_current_filter = array(); + nenghui_log_foreach_error(array( + 'error_type' => E_WARNING, + 'error_message' => 'Fixed $wp_current_filter global variable - was not array', + 'error_file' => __FILE__, + 'error_line' => __LINE__, + 'timestamp' => date('Y-m-d H:i:s'), + 'request_uri' => isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : 'unknown', + 'user_agent' => 'nenghui_fix_wp_globals' + )); + } + + // 确保 $wp_meta_boxes 是数组 + if (!is_array($wp_meta_boxes)) { + $wp_meta_boxes = array(); + nenghui_log_foreach_error(array( + 'error_type' => E_WARNING, + 'error_message' => 'Fixed $wp_meta_boxes global variable - was not array', + 'error_file' => __FILE__, + 'error_line' => __LINE__, + 'timestamp' => date('Y-m-d H:i:s'), + 'request_uri' => isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : 'unknown', + 'user_agent' => 'nenghui_fix_wp_globals' + )); + } + + // 确保 $wp_settings_sections 是数组 + if (!is_array($wp_settings_sections)) { + $wp_settings_sections = array(); + nenghui_log_foreach_error(array( + 'error_type' => E_WARNING, + 'error_message' => 'Fixed $wp_settings_sections global variable - was not array', + 'error_file' => __FILE__, + 'error_line' => __LINE__, + 'timestamp' => date('Y-m-d H:i:s'), + 'request_uri' => isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : 'unknown', + 'user_agent' => 'nenghui_fix_wp_globals' + )); + } + + // 确保 $wp_settings_fields 是数组 + if (!is_array($wp_settings_fields)) { + $wp_settings_fields = array(); + nenghui_log_foreach_error(array( + 'error_type' => E_WARNING, + 'error_message' => 'Fixed $wp_settings_fields global variable - was not array', + 'error_file' => __FILE__, + 'error_line' => __LINE__, + 'timestamp' => date('Y-m-d H:i:s'), + 'request_uri' => isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : 'unknown', + 'user_agent' => 'nenghui_fix_wp_globals' + )); + } +} + +/** + * 在插件加载前修复全局变量 + */ +function nenghui_pre_plugin_fix() { + nenghui_fix_wp_globals(); +} + +/** + * 检查和修复主题选项中的数组 + */ +function nenghui_fix_theme_options() { + // 检查常用的主题选项 + $options_to_check = array( + 'banner_images', + 'futures_items', + 'news_posts', + 'menu_items', + 'tab_items' + ); + + foreach ($options_to_check as $option) { + $value = get_theme_mod($option); + if ($value !== false && !is_array($value)) { + // 尝试将非数组值转换为数组 + if (is_string($value) && !empty($value)) { + // 如果是 JSON 字符串,尝试解码 + $decoded = json_decode($value, true); + if (json_last_error() === JSON_ERROR_NONE && is_array($decoded)) { + set_theme_mod($option, $decoded); + } else { + // 否则包装为数组 + set_theme_mod($option, array($value)); + } + } else { + // 设置为空数组 + set_theme_mod($option, array()); + } + } + } +} + +/** + * 专门修复 plugin.php 第 1853 行的 foreach 错误 + * 这个错误通常发生在钩子系统中的数组操作 + */ +function nenghui_fix_plugin_foreach_error() { + global $wp_filter; + + // 确保 $wp_filter 的每个钩子都是正确的数组结构 + if (is_array($wp_filter)) { + foreach ($wp_filter as $hook_name => $hook_callbacks) { + if (!is_object($hook_callbacks) && !is_array($hook_callbacks)) { + // 如果钩子回调不是对象或数组,重置为空的 WP_Hook 对象 + $wp_filter[$hook_name] = new WP_Hook(); + nenghui_log_foreach_error(array( + 'error_type' => E_WARNING, + 'error_message' => "Fixed invalid hook callbacks for '$hook_name' - was " . gettype($hook_callbacks), + 'error_file' => __FILE__, + 'error_line' => __LINE__, + 'timestamp' => date('Y-m-d H:i:s'), + 'request_uri' => isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : 'unknown', + 'user_agent' => 'nenghui_fix_plugin_foreach_error' + )); + } + } + } +} + +/** + * 在最早期修复全局变量 + * 确保在任何插件或主题代码执行前修复问题 + */ +function nenghui_early_fix() { + nenghui_fix_wp_globals(); + nenghui_fix_plugin_foreach_error(); +} + +/** + * 立即修复全局变量 - 在文件加载时就执行 + * 这确保在任何WordPress函数调用前就修复了全局变量 + */ +function nenghui_immediate_fix() { + global $menu, $submenu, $wp_filter, $wp_actions, $wp_current_filter; + + // 立即确保关键全局变量是数组 + if (!is_array($menu)) { + $menu = array(); + } + if (!is_array($submenu)) { + $submenu = array(); + } + if (!is_array($wp_filter)) { + $wp_filter = array(); + } + if (!is_array($wp_actions)) { + $wp_actions = array(); + } + if (!is_array($wp_current_filter)) { + $wp_current_filter = array(); + } +} + +// 立即执行修复 +nenghui_immediate_fix(); + +// 注册错误处理器(仅在调试模式下) +if (WP_DEBUG) { + set_error_handler('nenghui_error_handler', E_WARNING | E_NOTICE); +} + +// 在最早期修复全局变量 - 在 muplugins_loaded 之前 +add_action('muplugins_loaded', 'nenghui_early_fix', 1); +// 在插件加载前再次修复 +add_action('plugins_loaded', 'nenghui_pre_plugin_fix', 1); +// 在主题设置后修复主题选项 +add_action('after_setup_theme', 'nenghui_fix_theme_options', 1); +// 在管理页面初始化前修复 +add_action('admin_init', 'nenghui_early_fix', 1); +// 在前端初始化前修复 +add_action('init', 'nenghui_early_fix', 1); +// 在admin_menu动作前确保菜单变量正确 +add_action('admin_menu', 'nenghui_immediate_fix', 1); + +?> \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/inc/init-config.php b/wp-content/themes/nenghui-energy-theme-4/inc/init-config.php new file mode 100644 index 0000000..66b33a1 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/inc/init-config.php @@ -0,0 +1,168 @@ + 3600) { // 删除1小时前的临时文件 + unlink($file); + } + } + } + } +} + +// 每小时清理一次临时文件 +if (!wp_next_scheduled('nenghui_cleanup_temp_files')) { + wp_schedule_event(time(), 'hourly', 'nenghui_cleanup_temp_files'); +} +add_action('nenghui_cleanup_temp_files', 'nenghui_cleanup_temp_files'); + +// 初始化性能优化 +add_action('init', 'nenghui_performance_init'); +add_action('init', 'nenghui_enable_image_compression'); + +?> \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/inc/maintenance-mode.php b/wp-content/themes/nenghui-energy-theme-4/inc/maintenance-mode.php new file mode 100644 index 0000000..2edccc4 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/inc/maintenance-mode.php @@ -0,0 +1,237 @@ + +
+

+
+ + + + + + + + + + + + + + +
启用维护模式 + +

开启后,只有管理员可以访问前台,普通访客将看到维护页面。

+
维护标题 + +
维护内容 + 'nenghui_maintenance_mode_content', + 'media_buttons' => false, + 'textarea_rows' => 10, + 'teeny' => true + )); + ?> +
+ +
+
+ + + + + + + <?php echo esc_html($title); ?> - <?php echo get_bloginfo('name'); ?> + + + +
+ + + +
⚙️
+ + +

+ +
+ +
+ + +
+ + + + .attachment-266x266, .thumbnail img { + width: 100% !important; + height: auto !important; + } + '; +} +add_action('admin_head', 'fix_svg_display'); + +/** + * 为SVG添加安全检查 + * 检查SVG文件是否包含恶意脚本代码 + * @param array $file 上传的文件信息数组 + * @return array 处理后的文件信息数组 + */ +function check_svg_file($file) { + if ($file['type'] === 'image/svg+xml') { + $svg_content = file_get_contents($file['tmp_name']); + + // 检查是否包含危险的脚本标签 + if (strpos($svg_content, ' $response['url'], + 'width' => 150, + 'height' => 150, + ); + $response['thumb'] = array( + 'src' => $response['url'], + 'width' => 150, + 'height' => 150, + ); + $response['sizes'] = array( + 'full' => array( + 'url' => $response['url'], + 'width' => 150, + 'height' => 150, + 'orientation' => 'landscape' + ) + ); + } + return $response; +} +add_filter('wp_prepare_attachment_for_js', 'svg_media_thumbnails', 10, 3); + +?> \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/inc/performance-config.php b/wp-content/themes/nenghui-energy-theme-4/inc/performance-config.php new file mode 100644 index 0000000..3192fc7 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/inc/performance-config.php @@ -0,0 +1,308 @@ + $max_size) { + $file['error'] = '文件大小不能超过50MB'; + return $file; + } + + // 允许的文件类型:图片格式和PDF + $allowed_types = array( + 'image/jpeg', + 'image/png', + 'image/gif', + 'image/webp', + 'image/svg+xml', + 'application/pdf' + ); + + // 明确禁止的文件类型(包含PHP木马常用类型) + $forbidden_types = array( + 'application/zip', + 'application/x-zip-compressed', + 'application/x-rar-compressed', + 'application/x-7z-compressed', + 'application/x-tar', + 'application/gzip', + 'application/x-executable', + 'application/x-msdownload', + 'text/x-php', + 'application/x-php', + 'text/php', + 'application/php', + 'text/x-script.php', + 'application/x-httpd-php', + 'application/x-httpd-php-source', + 'text/html', + 'text/javascript', + 'application/javascript', + 'text/x-shellscript' + ); + + // 检查是否为禁止的文件类型 + if (in_array($file['type'], $forbidden_types)) { + $file['error'] = '出于安全考虑,不允许上传此类型的文件'; + return $file; + } + + // 获取文件信息 + $file_info = pathinfo($file['name']); + $filename = strtolower($file['name']); + $extension = isset($file_info['extension']) ? strtolower($file_info['extension']) : ''; + + // PHP木马防护:检查双重扩展名 + if (preg_match('/\.(php|phtml|php3|php4|php5|php7|phps|pht|phar)\./i', $filename)) { + $file['error'] = '检测到可疑的双重扩展名,上传被拒绝'; + return $file; + } + + // 扩展的危险扩展名列表(包含PHP木马常用扩展名) + $forbidden_extensions = array( + 'zip', 'rar', '7z', 'tar', 'gz', 'exe', 'bat', 'cmd', 'com', 'scr', 'msi', + 'php', 'php3', 'php4', 'php5', 'php7', 'phtml', 'phps', 'pht', 'phar', + 'js', 'html', 'htm', 'xhtml', 'shtml', 'jsp', 'asp', 'aspx', + 'pl', 'py', 'rb', 'sh', 'bash', 'cgi', 'htaccess', 'htpasswd' + ); + + if (in_array($extension, $forbidden_extensions)) { + $file['error'] = '不允许上传 .' . $extension . ' 格式的文件'; + return $file; + } + + // PHP木马防护:检查可疑文件名模式 + $suspicious_patterns = array( + '/shell/i', '/webshell/i', '/backdoor/i', '/trojan/i', '/hack/i', + '/exploit/i', '/bypass/i', '/upload/i', '/cmd/i', '/eval/i', + '/base64/i', '/decode/i', '/phpinfo/i', '/system/i', '/exec/i' + ); + + if (is_array($suspicious_patterns) && !empty($suspicious_patterns)) { + foreach ($suspicious_patterns as $pattern) { + if (preg_match($pattern, $filename)) { + $file['error'] = '检测到可疑文件名,上传被拒绝'; + return $file; + } + } + } + + // 检查是否为允许的文件类型 + if (!in_array($file['type'], $allowed_types)) { + $file['error'] = '只允许上传图片文件(JPEG, PNG, GIF, WebP, SVG)和PDF文档'; + return $file; + } + + // PHP木马防护:文件内容检查(针对图片文件) + if (strpos($file['type'], 'image/') === 0 && $file['tmp_name']) { + $content_check = nenghui_check_file_content($file['tmp_name']); + if (!$content_check['safe']) { + $file['error'] = $content_check['message']; + return $file; + } + } + + return $file; +} + +/** + * PHP木马防护:检查文件内容是否包含恶意代码 + */ +function nenghui_check_file_content($file_path) { + if (!file_exists($file_path)) { + return array('safe' => false, 'message' => '文件不存在'); + } + + // 读取文件前1KB内容进行检查 + $content = file_get_contents($file_path, false, null, 0, 1024); + + if ($content === false) { + return array('safe' => false, 'message' => '无法读取文件内容'); + } + + // PHP木马常用的危险函数和关键词 + $dangerous_patterns = array( + '/<\?php/i', '/<\?=/i', '/<\?\s/i', '/ + get_seo_title(); + $description = $this->get_seo_description(); + $keywords = $this->get_seo_keywords(); + + // 输出标题 + echo '' . esc_html($title) . '' . "\n"; + + // 输出描述 + if ($description) { + echo '' . "\n"; + } + + // 输出关键词 + if ($keywords) { + echo '' . "\n"; + } + + // Open Graph 标签 + echo '' . "\n"; + if ($description) { + echo '' . "\n"; + } + echo '' . "\n"; + echo '' . "\n"; + + // Twitter Card 标签 + echo '' . "\n"; + echo '' . "\n"; + if ($description) { + echo '' . "\n"; + } + } + + /** + * 获取SEO标题 + */ + private function get_seo_title() { + $separator = get_option('nenghui_seo_separator', '-'); + $global_title = get_option('nenghui_seo_global_title', get_bloginfo('name')); + + if (is_home() || is_front_page()) { + $home_title = get_option('nenghui_seo_home_title'); + return $home_title ?: $global_title; + } + + if (is_singular()) { + global $post; + $custom_title = get_post_meta($post->ID, '_nenghui_seo_title', true); + if ($custom_title) { + return $custom_title; + } + return $post->post_title . ' ' . $separator . ' ' . $global_title; + } + + if (is_category()) { + $category = get_queried_object(); + return $category->name . ' ' . $separator . ' ' . $global_title; + } + + if (is_tag()) { + $tag = get_queried_object(); + return $tag->name . ' ' . $separator . ' ' . $global_title; + } + + if (is_archive()) { + return get_the_archive_title() . ' ' . $separator . ' ' . $global_title; + } + + if (is_search()) { + return '搜索: ' . get_search_query() . ' ' . $separator . ' ' . $global_title; + } + + if (is_404()) { + return '页面未找到 ' . $separator . ' ' . $global_title; + } + + return $global_title; + } + + /** + * 获取SEO描述 + */ + private function get_seo_description() { + $global_description = get_option('nenghui_seo_global_description', get_bloginfo('description')); + + if (is_home() || is_front_page()) { + $home_description = get_option('nenghui_seo_home_description'); + return $home_description ?: $global_description; + } + + if (is_singular()) { + global $post; + $custom_description = get_post_meta($post->ID, '_nenghui_seo_description', true); + if ($custom_description) { + return $custom_description; + } + + // 自动提取摘要 + if ($post->post_excerpt) { + return wp_trim_words($post->post_excerpt, 25); + } + + return wp_trim_words(strip_tags($post->post_content), 25); + } + + if (is_category()) { + $category = get_queried_object(); + return $category->description ?: $global_description; + } + + if (is_tag()) { + $tag = get_queried_object(); + return $tag->description ?: $global_description; + } + + return $global_description; + } + + /** + * 获取SEO关键词 + */ + private function get_seo_keywords() { + $global_keywords = get_option('nenghui_seo_global_keywords'); + + if (is_home() || is_front_page()) { + $home_keywords = get_option('nenghui_seo_home_keywords'); + return $home_keywords ?: $global_keywords; + } + + if (is_singular()) { + global $post; + $custom_keywords = get_post_meta($post->ID, '_nenghui_seo_keywords', true); + if ($custom_keywords) { + return $custom_keywords; + } + + // 自动提取标签作为关键词 + $tags = get_the_tags($post->ID); + if ($tags) { + $tag_names = array(); + foreach ($tags as $tag) { + $tag_names[] = $tag->name; + } + return implode(', ', $tag_names); + } + } + + return $global_keywords; + } + + /** + * 获取当前页面URL + */ + private function get_current_url() { + global $wp; + return home_url(add_query_arg(array(), $wp->request)); + } +} + +// 初始化SEO功能 +new NenghuiSEO(); \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/inc/shortcode.php b/wp-content/themes/nenghui-energy-theme-4/inc/shortcode.php new file mode 100644 index 0000000..7fd5b6b --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/inc/shortcode.php @@ -0,0 +1,1696 @@ + 'nenghui-banner-shortcode', + 'class' => '', + 'autoplay' => 'true' + ), $atts); + + // 开始输出缓冲 + ob_start(); + + // 设置全局变量供模板使用 + global $banner_shortcode_atts; + $banner_shortcode_atts = $atts; + + // 包含banner模板 + include get_template_directory() . '/template-parts/blocks/block-banner.php'; + + // 返回缓冲的内容 + return ob_get_clean(); +} +add_shortcode('nenghui_banner', 'nenghui_banner_shortcode'); + +// 注册nenghui_futures短代码 +function nenghui_futures_shortcode($atts) { + // 确保 $atts 是数组 + if (!is_array($atts)) { + $atts = array(); + } + + // 设置默认参数 + $atts = shortcode_atts(array( + 'id' => 'nenghui-futures-shortcode', + 'class' => '', + 'title' => '', + 'show_animation' => 'true' + ), $atts); + + // 开始输出缓冲 + ob_start(); + + // 设置全局变量供模板使用 + global $futures_shortcode_atts; + $futures_shortcode_atts = $atts; + + // 包含futures模板 + include get_template_directory() . '/template-parts/blocks/block-futures.php'; + + // 返回缓冲的内容 + return ob_get_clean(); +} +add_shortcode('nenghui_futures', 'nenghui_futures_shortcode'); + +// 注册nenghui_news短代码 +function nenghui_news_shortcode($atts) { + // 确保 $atts 是数组 + if (!is_array($atts)) { + $atts = array(); + } + + // 设置默认参数 + $atts = shortcode_atts(array( + 'id' => 'nenghui-news-shortcode', + 'class' => '', + 'title' => '', + 'category_id' => '', + 'posts_count' => '', + 'order_by' => '', + 'order' => '' + ), $atts); + + // 开始输出缓冲 + ob_start(); + + // 设置全局变量供模板使用 + global $news_shortcode_atts; + $news_shortcode_atts = $atts; + + // 包含news模板 + include get_template_directory() . '/template-parts/blocks/block-home-news.php'; + + // 返回缓冲的内容 + return ob_get_clean(); +} +add_shortcode('nenghui_news', 'nenghui_news_shortcode'); + +function nenghui_epc_shortcode($atts) { + if (!is_array($atts)) { + $atts = array(); + } + $atts = shortcode_atts(array( + 'id' => 'nenghui-epc', + 'class' => '', + 'title' => 'EPC Solutions', + 'subtitle' => 'Beyond Hardware: Total EPC Solutions from NengHui Design Institute', + 'bg_image' => get_template_directory_uri() . '/assets/images/epc-bg.jpg' + ), $atts); + wp_enqueue_style('epc-style', get_template_directory_uri() . '/assets/css/epc.css', array(), '1.0.0'); + ob_start(); + global $epc_shortcode_atts; + $epc_shortcode_atts = $atts; + include get_template_directory() . '/template-parts/blocks/block-epc.php'; + return ob_get_clean(); +} +add_shortcode('nenghui_epc', 'nenghui_epc_shortcode'); +// feature-module 模块 +function nenghui_epc_banner_shortcode($atts) { + if (!is_array($atts)) { + $atts = array(); + } + $atts = shortcode_atts(array( + 'id' => 'nenghui-epc-banner', + 'class' => '' + ), $atts); + wp_enqueue_style('feature-module', get_template_directory_uri() . '/assets/css/feature-module.css', array(), '1.0.0'); + ob_start(); + global $epc_banner_shortcode_atts; + $epc_banner_shortcode_atts = $atts; + include get_template_directory() . '/template-parts/blocks/block-epc-banner.php'; + return ob_get_clean(); +} +add_shortcode('nenghui_epc_banner', 'nenghui_epc_banner_shortcode'); + +// 注册black_maps短代码 +function nenghui_black_maps_shortcode($atts) { + // 确保 $atts 是数组 + if (!is_array($atts)) { + $atts = array(); + } + + // 设置默认参数 + $atts = shortcode_atts(array( + 'id' => 'nenghui-black-maps-shortcode', + 'class' => '', + 'height' => '100vh' + ), $atts); + + // 加载必要的脚本和样式 + // 确保jQuery先加载 + wp_enqueue_script('jquery'); + + // 加载ECharts库 - 在header中加载以避免时序问题 + wp_enqueue_script('echarts', get_template_directory_uri() . '/assets/js/echarts.min.js', array('jquery'), '5.4.0', false); + wp_enqueue_script('echarts-world', get_template_directory_uri() . '/assets/js/world.js', array('echarts'), '1.0.0', false); + + // 加载地图样式 + wp_enqueue_style('black-maps-style', get_template_directory_uri() . '/assets/css/black-maps.css', array(), '1.0.0'); + + // 开始输出缓冲 + ob_start(); + + // 设置全局变量供模板使用 + global $black_maps_shortcode_atts; + $black_maps_shortcode_atts = $atts; + + // 包含地图模板 + include get_template_directory() . '/template-parts/blocks/black-maps.php'; + + // 返回缓冲的内容 + return ob_get_clean(); +} +add_shortcode('black_maps', 'nenghui_black_maps_shortcode'); + +// 注册nenghui_tabs短代码 +function nenghui_tabs_shortcode($atts) { + // 确保 $atts 是数组 + if (!is_array($atts)) { + $atts = array(); + } + + // 设置默认参数 + $atts = shortcode_atts(array( + 'id' => 'nenghui-tabs-shortcode', + 'class' => '', + 'tabs_count' => '', // 可以覆盖自定义器设置的选项卡数量 + 'show_animation' => 'true' + ), $atts); + + // 开始输出缓冲 + ob_start(); + + // 设置全局变量供模板使用 + global $tabs_shortcode_atts; + $tabs_shortcode_atts = $atts; + + // 包含tabs模板 + include get_template_directory() . '/template-parts/blocks/block-tabs.php'; + + // 返回缓冲的内容 + return ob_get_clean(); +} +add_shortcode('nenghui_tabs', 'nenghui_tabs_shortcode'); + +// 注册nenghui_flowchart_tabs短代码 +function nenghui_flowchart_tabs_shortcode($atts) { + // 确保 $atts 是数组 + if (!is_array($atts)) { + $atts = array(); + } + + // 设置默认参数 + $atts = shortcode_atts(array( + 'id' => 'nenghui-flowchart-tabs-shortcode', + 'class' => '' + ), $atts); + + // 开始输出缓冲 + ob_start(); + + // 设置全局变量供模板使用 + global $flowchart_tabs_shortcode_atts; + $flowchart_tabs_shortcode_atts = $atts; + + // 包含flowchart-tabs模板 + include get_template_directory() . '/template-parts/blocks/block-flowchart-tab.php'; + + // 返回缓冲的内容 + return ob_get_clean(); +} +add_shortcode('nenghui_flowchart_tabs', 'nenghui_flowchart_tabs_shortcode'); + +// 注册nenghui_banner_title短代码 (重构版本) +function nenghui_banner_title_shortcode($atts) { + // 确保 $atts 是数组 + if (!is_array($atts)) { + $atts = array(); + } + + // 设置默认参数 + $atts = shortcode_atts(array( + 'id' => '', // 如果为空,将自动生成唯一ID + 'class' => '', + 'title' => '', + 'description' => '', + 'bg_image' => '', + 'height' => '', + 'overlay_opacity' => '', + 'show_animation' => 'true' + ), $atts); + + // 验证和清理参数 + if (!empty($atts['height'])) { + // 验证高度格式 + if (!preg_match('/^\d+(\.\d+)?(px|vh|%)$/', $atts['height'])) { + $atts['height'] = '60vh'; // 默认值 + } + } + + if (!empty($atts['overlay_opacity'])) { + // 验证透明度值 + $opacity = floatval($atts['overlay_opacity']); + if ($opacity < 0 || $opacity > 1) { + $atts['overlay_opacity'] = '0.4'; // 默认值 + } + } + + // 开始输出缓冲 + ob_start(); + + // 设置全局变量供模板使用 + global $banner_title_shortcode_atts; + $banner_title_shortcode_atts = $atts; + + // 包含banner-title模板 + include get_template_directory() . '/template-parts/blocks/block-banner-title.php'; + + // 返回缓冲的内容 + return ob_get_clean(); +} +add_shortcode('nenghui_banner_title', 'nenghui_banner_title_shortcode'); + +// 注册black_maps短代码 +function black_maps_shortcode($atts) { + // 确保 $atts 是数组 + if (!is_array($atts)) { + $atts = array(); + } + + // 设置默认参数 + $atts = shortcode_atts(array( + 'id' => 'echartsMap-' . uniqid(), + 'class' => '', + 'height' => '100vh', + 'show_loading' => 'true' + ), $atts); + + // 引入必要的资源文件 + wp_enqueue_script('echarts', get_template_directory_uri() . '/assets/js/echarts.min.js', array('jquery'), '5.4.0', true); + wp_enqueue_script('echarts-world', get_template_directory_uri() . '/assets/js/world.js', array('echarts'), '1.0.0', true); + wp_enqueue_style('black-maps', get_template_directory_uri() . '/assets/css/black-maps.css', array(), '1.0.0'); + + // 开始输出缓冲 + ob_start(); + + // 设置全局变量供模板使用 + global $black_maps_shortcode_atts; + $black_maps_shortcode_atts = $atts; + + // 包含地图模板 + include get_template_directory() . '/template-parts/blocks/black-maps.php'; + + // 返回缓冲的内容 + return ob_get_clean(); +} +add_shortcode('black_maps', 'black_maps_shortcode'); + +/** + * Banner Title 短代码使用示例: + * + * 基本用法: + * [nenghui_banner_title title="关于我们" description="我们致力于提供最优质的服务"] + * + * 完整参数: + * [nenghui_banner_title + * id="custom-banner" + * class="custom-class" + * title="关于我们" + * description="我们致力于提供最优质的服务" + * bg_image="https://example.com/image.jpg" + * height="70vh" + * overlay_opacity="0.6" + * show_animation="true"] + */ + +// Banner轮播现在使用原生JavaScript实现,无需额外加载库 + +// 注册nenghui_about_nav短代码 +function nenghui_about_nav_shortcode($atts) { + // 确保 $atts 是数组 + if (!is_array($atts)) { + $atts = array(); + } + + // 设置默认参数 + $atts = shortcode_atts(array( + 'id' => 'nenghui-about-nav-shortcode', + 'class' => '', + 'menu_id' => '' + ), $atts); + + // 开始输出缓冲 + ob_start(); + + // 设置全局变量供模板使用 + global $about_nav_shortcode_atts; + $about_nav_shortcode_atts = $atts; + + // 包含about-nav模板 + include get_template_directory() . '/template-parts/blocks/block-about-nav.php'; + + // 返回缓冲的内容 + return ob_get_clean(); +} +add_shortcode('nenghui_about_nav', 'nenghui_about_nav_shortcode'); + +/** + * About 导航短代码使用示例: + * + * 基本用法: + * [nenghui_about_nav] + * + * 自定义参数: + * [nenghui_about_nav + * id="custom-about-nav" + * class="custom-class" + * menu_id="123"] + */ + +// 注册nenghui_about_company短代码 +function nenghui_about_company_shortcode($atts) { + // 确保 $atts 是数组 + if (!is_array($atts)) { + $atts = array(); + } + + // 设置默认参数 + $atts = shortcode_atts(array( + 'id' => 'nenghui-about-company-shortcode', + 'class' => '', + 'show_animation' => 'true' + ), $atts); + + // 开始输出缓冲 + ob_start(); + + // 设置全局变量供模板使用 + global $about_company_shortcode_atts; + $about_company_shortcode_atts = $atts; + + // 包含about-company模板 + include get_template_directory() . '/template-parts/blocks/block-about-company.php'; + + // 返回缓冲的内容 + return ob_get_clean(); +} +add_shortcode('nenghui_about_company', 'nenghui_about_company_shortcode'); + +/** + * About Company 短代码使用示例: + * + * 基本用法: + * [nenghui_about_company] + * + * 自定义参数: + * [nenghui_about_company + * id="custom-about-company" + * class="custom-class" + * show_animation="true"] + */ + +// 注册nenghui_development_history短代码 +function nenghui_development_history_shortcode($atts) { + // 确保 $atts 是数组 + if (!is_array($atts)) { + $atts = array(); + } + + // 设置默认参数 + $atts = shortcode_atts(array( + 'id' => 'nenghui-development-history-shortcode', + 'class' => '', + 'show_animation' => 'true' + ), $atts); + + // 开始输出缓冲 + ob_start(); + + // 设置全局变量供模板使用 + global $development_history_shortcode_atts; + $development_history_shortcode_atts = $atts; + + // 包含development-history模板 + include get_template_directory() . '/template-parts/blocks/block-development-history.php'; + + // 返回缓冲的内容 + return ob_get_clean(); +} +add_shortcode('nenghui_development_history', 'nenghui_development_history_shortcode'); + +/** + * Development History 短代码使用示例: + * + * 基本用法: + * [nenghui_development_history] + * + * 自定义参数: + * [nenghui_development_history + * id="custom-development-history" + * class="custom-class" + * show_animation="true"] + */ + +// 注册nenghui_certification_gallery短代码 +function nenghui_certification_gallery_shortcode($atts) { + // 确保 $atts 是数组 + if (!is_array($atts)) { + $atts = array(); + } + + // 设置默认参数 + $atts = shortcode_atts(array( + 'id' => 'nenghui-certification-gallery-shortcode', + 'class' => '', + 'images' => '', // 图片ID列表,逗号分隔 + 'columns' => '', // 每行显示列数 + 'lightbox' => '', // 是否启用灯箱效果 + 'animation' => '' // 是否启用动画效果 + ), $atts); + + // 验证和清理参数 + if (!empty($atts['columns'])) { + $columns = intval($atts['columns']); + if ($columns < 1 || $columns > 6) { + $atts['columns'] = '5'; // 默认值 + } + } + + if (!empty($atts['lightbox'])) { + $atts['lightbox'] = filter_var($atts['lightbox'], FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE); + if ($atts['lightbox'] === null) { + $atts['lightbox'] = 'true'; // 默认值 + } else { + $atts['lightbox'] = $atts['lightbox'] ? 'true' : 'false'; + } + } + + if (!empty($atts['animation'])) { + $atts['animation'] = filter_var($atts['animation'], FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE); + if ($atts['animation'] === null) { + $atts['animation'] = 'true'; // 默认值 + } else { + $atts['animation'] = $atts['animation'] ? 'true' : 'false'; + } + } + + // 开始输出缓冲 + ob_start(); + + // 设置全局变量供模板使用 + global $certification_shortcode_atts; + $certification_shortcode_atts = $atts; + + // 包含certification模板 + include get_template_directory() . '/template-parts/blocks/block-certification.php'; + + // 返回缓冲的内容 + return ob_get_clean(); +} +add_shortcode('nenghui_certification_gallery', 'nenghui_certification_gallery_shortcode'); + +/** + * Certification Gallery 短代码使用示例: + * + * 基本用法: + * [nenghui_certification_gallery] + * + * 常用参数: + * [nenghui_certification_gallery columns="4" lightbox="true"] + */ + +// 注册nenghui_technical_service短代码 +function nenghui_technical_service_shortcode($atts) { + // 确保 $atts 是数组 + if (!is_array($atts)) { + $atts = array(); + } + + // 设置默认参数 + $atts = shortcode_atts(array( + 'id' => 'nenghui-technical-service-shortcode', + 'class' => '', + 'title' => 'Reliable Technical Service', + 'subtitle' => 'Enhance Experience for Customers', + 'show_animation' => 'true' + ), $atts); + + // 开始输出缓冲 + ob_start(); + + // 设置全局变量供模板使用 + global $technical_service_shortcode_atts; + $technical_service_shortcode_atts = $atts; + + // 包含technical-service模板 + include get_template_directory() . '/template-parts/blocks/block-technical-service.php'; + + // 返回缓冲的内容 + return ob_get_clean(); +} +add_shortcode('nenghui_technical_service', 'nenghui_technical_service_shortcode'); + +/** + * Technical Service 短代码使用示例: + * + * 基本用法: + * [nenghui_technical_service] + * + * 自定义参数: + * [nenghui_technical_service + * id="custom-technical-service" + * class="custom-class" + * title="可靠的技术服务" + * subtitle="提升客户体验" + * show_animation="true"] + */ + +// 注册nenghui_video短代码 +function nenghui_video_shortcode($atts) { + // 确保 $atts 是数组 + if (!is_array($atts)) { + $atts = array(); + } + + // 只处理实际传递的参数,空值将在模板中使用自定义器默认值 + $processed_atts = array(); + + // 处理传递的参数 + if (isset($atts['id']) && !empty($atts['id'])) { + $processed_atts['id'] = $atts['id']; + } + if (isset($atts['class']) && !empty($atts['class'])) { + $processed_atts['class'] = $atts['class']; + } + if (isset($atts['video_url']) && !empty($atts['video_url'])) { + $processed_atts['video_url'] = $atts['video_url']; + } + if (isset($atts['cover_image']) && !empty($atts['cover_image'])) { + $processed_atts['cover_image'] = $atts['cover_image']; + } + if (isset($atts['title']) && !empty($atts['title'])) { + $processed_atts['title'] = $atts['title']; + } + if (isset($atts['description']) && !empty($atts['description'])) { + $processed_atts['description'] = $atts['description']; + } + if (isset($atts['play_button_text']) && !empty($atts['play_button_text'])) { + $processed_atts['play_button_text'] = $atts['play_button_text']; + } + if (isset($atts['height']) && !empty($atts['height'])) { + $processed_atts['height'] = $atts['height']; + } + if (isset($atts['show_overlay']) && $atts['show_overlay'] !== '') { + $processed_atts['show_overlay'] = $atts['show_overlay']; + } + if (isset($atts['overlay_opacity']) && $atts['overlay_opacity'] !== '') { + $processed_atts['overlay_opacity'] = $atts['overlay_opacity']; + } + if (isset($atts['autoplay']) && $atts['autoplay'] !== '') { + $processed_atts['autoplay'] = $atts['autoplay']; + } + if (isset($atts['muted']) && $atts['muted'] !== '') { + $processed_atts['muted'] = $atts['muted']; + } + if (isset($atts['controls']) && $atts['controls'] !== '') { + $processed_atts['controls'] = $atts['controls']; + } + + $atts = $processed_atts; + + // 开始输出缓冲 + ob_start(); + + // 设置全局变量供模板使用 + global $video_shortcode_atts; + $video_shortcode_atts = $atts; + + // 包含video模板 + include get_template_directory() . '/template-parts/blocks/block-video.php'; + + // 返回缓冲的内容 + return ob_get_clean(); +} +add_shortcode('nenghui_video', 'nenghui_video_shortcode'); + +/** + * Video 短代码使用示例: + * + * 基本用法: + * [nenghui_video video_url="https://example.com/video.mp4"] + * + * 完整参数: + * [nenghui_video + * id="custom-video" + * class="custom-class" + * video_url="https://example.com/video.mp4" + * cover_image="https://example.com/cover.jpg" + * title="我们的企业视频" + * description="了解我们的产品和服务" + * play_button_text="立即播放" + * show_overlay="true" + * overlay_opacity="0.5" + * height="80vh" + * autoplay="false" + * muted="true" + * controls="true"] + * + * 常用参数: + * [nenghui_video video_url="video.mp4" title="企业介绍" height="60vh"] + */ + +// 注册nenghui_contact_form短代码 +function nenghui_contact_form_shortcode($atts) { + // 确保 $atts 是数组 + if (!is_array($atts)) { + $atts = array(); + } + + // 设置默认参数 + $atts = shortcode_atts(array( + 'id' => 'nenghui-contact-form-shortcode', + 'class' => '', + 'form_id' => '1', + 'show_animation' => 'true' + ), $atts); + + // 开始输出缓冲 + ob_start(); + + // 设置全局变量供模板使用 + global $contact_form_shortcode_atts; + $contact_form_shortcode_atts = $atts; + + // 包含contact-form模板 + include get_template_directory() . '/template-parts/blocks/block-contact-form.php'; + + // 返回缓冲的内容 + return ob_get_clean(); +} +add_shortcode('nenghui_contact_form', 'nenghui_contact_form_shortcode'); + +/** + * Contact Form 短代码使用示例: + * + * 基本用法: + * [nenghui_contact_form] + * + * 自定义参数: + * [nenghui_contact_form + * id="custom-contact-form" + * class="custom-class" + * form_id="2" + * show_animation="true"] + */ + +// 注册black_about_company_banner短代码 +function black_about_company_banner_shortcode($atts) { + // 确保 $atts 是数组 + if (!is_array($atts)) { + $atts = array(); + } + + // 设置默认参数 + $atts = shortcode_atts(array( + 'id' => 'black-about-company-banner-shortcode', + 'class' => '', + 'show_animation' => 'true' + ), $atts); + + // 开始输出缓冲 + ob_start(); + + // 设置全局变量供模板使用 + global $black_about_company_banner_shortcode_atts; + $black_about_company_banner_shortcode_atts = $atts; + + // 包含black-about-company-banner模板 + include get_template_directory() . '/template-parts/blocks/black-about-company-banner.php'; + + // 返回缓冲的内容 + return ob_get_clean(); +} +add_shortcode('black_about_company_banner', 'black_about_company_banner_shortcode'); + +/** + * Black About Company Banner 短代码使用示例: + * + * 基本用法: + * [black_about_company_banner] + * + * 自定义参数: + * [black_about_company_banner + * id="custom-black-about-company-banner" + * class="custom-class" + * show_animation="true"] + */ + +// 在小工具中也支持短代码 +add_filter('widget_text', 'do_shortcode'); + +// 注册nenghui_download_center短代码 +function nenghui_download_center_shortcode($atts) { + // 确保 $atts 是数组 + if (!is_array($atts)) { + $atts = array(); + } + + // 设置默认参数 + $atts = shortcode_atts(array( + 'id' => 'nenghui-download-center-shortcode', + 'class' => '', + 'title' => 'Download Center', + 'show_all_tab' => 'true', + 'posts_per_category' => '-1', + 'enable_pagination' => 'false', + 'posts_per_page' => '6', + 'order_by' => 'date', + 'order' => 'DESC' + ), $atts); + + // 验证和清理参数 + if (!empty($atts['posts_per_category'])) { + $posts_count = intval($atts['posts_per_category']); + if ($posts_count < -1) { + $atts['posts_per_category'] = '-1'; // 默认显示所有 + } + } + + if (!empty($atts['show_all_tab'])) { + $atts['show_all_tab'] = filter_var($atts['show_all_tab'], FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE); + if ($atts['show_all_tab'] === null) { + $atts['show_all_tab'] = 'true'; // 默认值 + } else { + $atts['show_all_tab'] = $atts['show_all_tab'] ? 'true' : 'false'; + } + } + + if (!empty($atts['enable_pagination'])) { + $atts['enable_pagination'] = filter_var($atts['enable_pagination'], FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE); + if ($atts['enable_pagination'] === null) { + $atts['enable_pagination'] = 'false'; // 默认值 + } else { + $atts['enable_pagination'] = $atts['enable_pagination'] ? 'true' : 'false'; + } + } + + if (!empty($atts['posts_per_page'])) { + $posts_per_page = intval($atts['posts_per_page']); + if ($posts_per_page < 1) { + $atts['posts_per_page'] = '6'; // 默认值 + } + } + + if (!empty($atts['order_by'])) { + $valid_orderby = array('date', 'modified', 'title', 'menu_order', 'rand'); + if (!in_array($atts['order_by'], $valid_orderby)) { + $atts['order_by'] = 'date'; // 默认值 + } + } + + if (!empty($atts['order'])) { + $atts['order'] = strtoupper($atts['order']); + if (!in_array($atts['order'], array('ASC', 'DESC'))) { + $atts['order'] = 'DESC'; // 默认值 + } + } + + // 开始输出缓冲 + ob_start(); + + // 设置全局变量供模板使用 + global $download_center_shortcode_atts; + $download_center_shortcode_atts = $atts; + + // 包含download-center模板 + include get_template_directory() . '/template-parts/blocks/block-download-center.php'; + + // 返回缓冲的内容 + return ob_get_clean(); +} +add_shortcode('nenghui_download_center', 'nenghui_download_center_shortcode'); + +/** + * Download Center 短代码使用示例: + * + * 基本用法: + * [nenghui_download_center] + * + * 自定义标题: + * [nenghui_download_center title="资源下载"] + * + * 不显示"全部"选项卡: + * [nenghui_download_center show_all_tab="false"] + * + * 限制每个分类显示的文章数量: + * [nenghui_download_center posts_per_category="6"] + * + * 启用分页功能: + * [nenghui_download_center enable_pagination="true" posts_per_page="6"] + * + * 完整参数: + * [nenghui_download_center + * id="custom-download-center" + * class="custom-class" + * title="资源下载中心" + * show_all_tab="true" + * posts_per_category="8" + * enable_pagination="true" + * posts_per_page="6" + * order_by="title" + * order="ASC"] + * + * 参数说明: + * - id: 容器ID,默认为 'nenghui-download-center-shortcode' + * - class: 额外CSS类 + * - title: 区块标题,默认为 'Download Center' + * - show_all_tab: 是否显示"全部"选项卡(true/false),默认为 true + * - posts_per_category: 每个分类显示的文章数量,-1表示显示所有,默认为 -1(仅在未启用分页时使用) + * - enable_pagination: 是否启用分页功能(true/false),默认为 false + * - posts_per_page: 每页显示的文章数量,默认为 6(仅在启用分页时使用) + * - order_by: 排序字段(date/modified/title/menu_order/rand),默认为 date + * - order: 排序方向(ASC/DESC),默认为 DESC + * + * 注意事项: + * - 下载文件通过自定义字段 '_download_url' 设置 + * - 如果没有设置下载链接,将使用特色图像作为下载文件 + * - 如果没有特色图像,将显示默认的PDF图像 + * - 分类通过 'download_category' 分类法管理 + * - 支持文件大小和文件类型的显示 + * - 自动创建 'Company profile' 和 'Product series' 两个默认分类 + * - 启用分页后,每个分类都有独立的分页导航 + * - 分页功能支持Tab选项卡切换,每个选项卡显示对应的分页组件 + * - 分页参数优先级:enable_pagination=true时使用posts_per_page,否则使用posts_per_category + * + * 后台使用说明: + * 1. 在WordPress后台可以看到"下载中心"菜单 + * 2. 点击"添加新下载"创建下载项目 + * 3. 设置标题、内容摘要和特色图像 + * 4. 在"下载文件信息"元框中设置下载链接、文件大小和文件类型 + * 5. 选择对应的下载分类(Company profile 或 Product series) + * 6. 发布后即可在前台显示 + */ + +// 注册nenghui_news_grid短代码 - 3行4列卡片布局 +function nenghui_news_grid_shortcode($atts) { + // 确保 $atts 是数组 + if (!is_array($atts)) { + $atts = array(); + } + + // 设置默认参数 + $atts = shortcode_atts(array( + 'id' => 'nenghui-news-grid-shortcode', + 'class' => '', + 'title' => '', + 'category_id' => '', + 'posts_count' => '12', + 'posts_per_page' => '', + 'enable_pagination' => '', + 'order_by' => 'date', + 'order' => 'DESC' + ), $atts); + + // 开始输出缓冲 + ob_start(); + + // 设置全局变量供模板使用 + global $news_shortcode_atts; + $news_shortcode_atts = $atts; + + // 包含3行4列卡片布局模板 + include get_template_directory() . '/template-parts/blocks/block-news.php'; + + // 返回缓冲的内容 + return ob_get_clean(); +} +add_shortcode('nenghui_news_grid', 'nenghui_news_grid_shortcode'); + +/** + * News Grid 短代码使用示例: + * + * 基本用法: + * [nenghui_news_grid] + * + * 在分类页面使用(自动显示当前分类文章): + * [nenghui_news_grid] + * + * 指定分类使用: + * [nenghui_news_grid category_id="5"] + * + * 在分类页面显示所有文章(覆盖当前分类): + * [nenghui_news_grid category_id=""] + * + * 启用分页功能: + * [nenghui_news_grid enable_pagination="true" posts_per_page="6"] + * + * 完整参数: + * [nenghui_news_grid + * id="custom-news-grid" + * class="custom-class" + * title="最新资讯" + * category_id="5" + * posts_count="12" + * posts_per_page="6" + * enable_pagination="true" + * order_by="date" + * order="DESC"] + * + * 参数说明: + * - id: 容器ID + * - class: 额外CSS类 + * - title: 区块标题 + * - category_id: 分类ID,支持以下情况: + * * 不设置:在分类页面自动使用当前分类,其他页面显示所有文章 + * * 设置数字:显示指定分类的文章 + * * 设置多个数字(逗号分隔):显示多个分类的文章(如 "5,6,7") + * * 设置空值:强制显示所有文章(即使在分类页面) + * - posts_count: 文章数量,默认为12(3行4列),仅在未启用分页时使用 + * - posts_per_page: 每页显示文章数量,仅在启用分页时使用 + * - enable_pagination: 是否启用分页(true/false) + * - order_by: 排序字段(date/modified/title/rand) + * - order: 排序方向(ASC/DESC) + * + * 分类ID优先级:短代码参数 > 当前分类页面 > 自定义器设置 + * + * 分页功能说明: + * - 启用分页后,将显示数字分页组件 + * - 分页时网格布局会自动调整为响应式布局 + * - 可在自定义器中设置默认的分页参数 + */ + +// 注册nenghui_contact_map短代码 +function nenghui_contact_map_shortcode($atts) { + // 确保 $atts 是数组 + if (!is_array($atts)) { + $atts = array(); + } + + // 只处理实际传递的参数,空值将在模板中使用自定义器默认值 + $processed_atts = array(); + + // 处理传递的参数 + if (isset($atts['id']) && !empty($atts['id'])) { + $processed_atts['id'] = $atts['id']; + } + if (isset($atts['class']) && !empty($atts['class'])) { + $processed_atts['class'] = $atts['class']; + } + if (isset($atts['title']) && !empty($atts['title'])) { + $processed_atts['title'] = $atts['title']; + } + if (isset($atts['office_address']) && !empty($atts['office_address'])) { + $processed_atts['office_address'] = $atts['office_address']; + } + if (isset($atts['phone']) && !empty($atts['phone'])) { + $processed_atts['phone'] = $atts['phone']; + } + if (isset($atts['email']) && !empty($atts['email'])) { + $processed_atts['email'] = $atts['email']; + } + if (isset($atts['map_embed_code']) && !empty($atts['map_embed_code'])) { + $processed_atts['map_embed_code'] = $atts['map_embed_code']; + } + if (isset($atts['map_height']) && !empty($atts['map_height'])) { + // 验证地图高度格式 + if (preg_match('/^\d+(\.\d+)?(px|vh|%)$/', $atts['map_height'])) { + $processed_atts['map_height'] = $atts['map_height']; + } + } + + $atts = $processed_atts; + + // 开始输出缓冲 + ob_start(); + + // 设置全局变量供模板使用 + global $contact_map_shortcode_atts; + $contact_map_shortcode_atts = $atts; + + // 包含contact-map模板 + include get_template_directory() . '/template-parts/blocks/block-contact-map.php'; + + // 返回缓冲的内容 + return ob_get_clean(); +} +add_shortcode('nenghui_contact_map', 'nenghui_contact_map_shortcode'); + +/** + * Contact Map 短代码使用示例: + * + * 基本用法: + * [nenghui_contact_map] + * + * 自定义标题: + * [nenghui_contact_map title="联系我们"] + * + * 自定义联系信息: + * [nenghui_contact_map + * title="联系我们" + * office_address="上海市长宁区同协路288号" + * phone="+86-21-50896255" + * email="info@nhet.energy"] + * + * 完整参数: + * [nenghui_contact_map + * id="custom-contact-map" + * class="custom-class" + * title="联系我们" + * office_address="上海市长宁区同协路288号" + * phone="+86-21-50896255" + * email="info@nhet.energy" + * map_embed_code="" + * map_height="500px"] + * + * 参数说明: + * - id: 容器ID,默认为 'nenghui-contact-map' + * - class: 额外CSS类 + * - title: 区块标题,默认使用自定义器设置 + * - office_address: 办公地址,默认使用自定义器设置 + * - phone: 电话/手机,默认使用自定义器设置 + * - email: 邮箱地址,默认使用自定义器设置 + * - map_embed_code: 地图嵌入代码,默认使用自定义器设置或Google-maps.txt文件 + * - map_height: 地图高度,支持px、vh、%单位,默认400px + * + * 注意事项: + * - 如果未设置地图嵌入代码,将自动读取 /docs/Google-maps.txt 文件中的默认地图代码 + * - 样式设置(背景色、文字色、图标色)只能通过自定义器设置,短代码不支持覆盖 + * - 地图高度必须包含有效的CSS单位(px、vh、%),否则将使用默认值400px + * - 联系信息支持换行,在office_address中使用\n表示换行 + */ + + + +// 注册nenghui_overseas_services短代码 +function nenghui_overseas_services_shortcode($atts) { + // 确保 $atts 是数组 + if (!is_array($atts)) { + $atts = array(); + } + + // 设置默认参数 + $atts = shortcode_atts(array( + 'id' => 'nenghui-overseas-services', + 'class' => '', + 'title' => 'Overseas Services', + 'description' => 'Our service team delivers diversified solutions tailored to client requirements, including product training, installation guidance, and after-sales support. NengHui ESS\'s specialized expert team provides comprehensive on-site services covering Uninterruptible Power Supplies (UPS), modular data centers, solar energy, and Energy Storage Systems (ESS), ensuring your power systems operate at peak performance.', + 'height' => '400px', + 'show_animation' => 'true' + ), $atts); + + // 开始输出缓冲 + ob_start(); + + // 设置全局变量供模板使用 + global $overseas_services_shortcode_atts; + $overseas_services_shortcode_atts = $atts; + + // 包含overseas-services模板 + include get_template_directory() . '/template-parts/blocks/block-overseas-services.php'; + + // 返回缓冲的内容 + return ob_get_clean(); +} +add_shortcode('nenghui_overseas_services', 'nenghui_overseas_services_shortcode'); + +/** + * Overseas Services 短代码使用示例: + * + * 基本用法: + * [nenghui_overseas_services] + * + * 自定义标题和描述: + * [nenghui_overseas_services title="海外服务" description="我们的服务团队..."] + * + * 完整参数: + * [nenghui_overseas_services + * id="custom-overseas-services" + * class="custom-class" + * title="Overseas Services" + * description="Our service team delivers..." + * height="500px" + * show_animation="true"] + * + * 参数说明: + * - id: 容器ID,默认为 'nenghui-overseas-services' + * - class: 额外CSS类 + * - title: 区块标题,默认为 'Overseas Services' + * - description: 服务描述文本 + * - height: 区块高度,支持px、vh、%等单位,默认为 '400px' + * - show_animation: 是否显示动画效果,默认为 'true' + * + * 注意事项: + * - 背景图片固定使用 Overseas-Services-bg.webp + * - 父容器宽度100%,内容容器宽度80% + * - 支持响应式布局和动画效果 + */ + +// 注册nenghui_faq短代码 +function nenghui_faq_shortcode($atts) { + // 确保 $atts 是数组 + if (!is_array($atts)) { + $atts = array(); + } + + // 设置默认参数 + $atts = shortcode_atts(array( + 'id' => 'nenghui-faq', + 'class' => '', + 'title' => 'Frequently Asked Questions', + 'posts_per_page' => '-1', // 显示数量,-1表示显示所有 + 'order_by' => 'menu_order', // 排序字段 + 'order' => 'ASC', // 排序方向 + 'show_animation' => 'true' + ), $atts); + + // 验证和清理参数 + if (!empty($atts['posts_per_page'])) { + $posts_count = intval($atts['posts_per_page']); + if ($posts_count < -1) { + $atts['posts_per_page'] = '-1'; // 默认显示所有 + } + } + + if (!empty($atts['order_by'])) { + $valid_orderby = array('date', 'modified', 'title', 'menu_order', 'rand'); + if (!in_array($atts['order_by'], $valid_orderby)) { + $atts['order_by'] = 'menu_order'; // 默认值 + } + } + + if (!empty($atts['order'])) { + $atts['order'] = strtoupper($atts['order']); + if (!in_array($atts['order'], array('ASC', 'DESC'))) { + $atts['order'] = 'ASC'; // 默认值 + } + } + + // 开始输出缓冲 + ob_start(); + + // 设置全局变量供模板使用 + global $faq_shortcode_atts; + $faq_shortcode_atts = $atts; + + // 包含faq模板 + include get_template_directory() . '/template-parts/blocks/block-faq.php'; + + // 返回缓冲的内容 + return ob_get_clean(); +} +add_shortcode('nenghui_faq', 'nenghui_faq_shortcode'); + +/** + * FAQ 短代码使用示例: + * + * 基本用法: + * [nenghui_faq] + * + * 限制显示数量: + * [nenghui_faq posts_per_page="5"] + * + * 完整参数: + * [nenghui_faq + * id="custom-faq" + * class="custom-class" + * title="常见问题" + * posts_per_page="10" + * order_by="date" + * order="DESC" + * show_animation="true"] + * + * 参数说明: + * - id: 容器ID,默认为 'nenghui-faq' + * - class: 额外CSS类 + * - title: 区块标题,默认为 'Frequently Asked Questions' + * - posts_per_page: 显示数量,-1表示显示所有,默认为 -1 + * - order_by: 排序字段(date/modified/title/menu_order/rand),默认为 menu_order + * - order: 排序方向(ASC/DESC),默认为 ASC + * - show_animation: 是否显示动画效果,默认为 'true' + * + * 注意事项: + * - FAQ内容通过后台"FAQ管理"菜单添加和管理 + * - 支持手风琴折叠效果 + * - 问题标题背景使用 faq-title-bg.webp 图片 + * - 支持排序功能 + * - 答案内容支持富文本编辑 + * - 可通过menu_order字段自定义排序 + * + * 后台使用说明: + * 1. 在WordPress后台可以看到"FAQ管理"菜单 + * 2. 点击"添加新FAQ"创建FAQ项目 + * 3. 设置问题标题(title)和答案内容(content) + * 4. 设置排序值(页面属性中的排序字段) + * 5. 发布后即可在前台显示 + */ + +// 注册nenghui_cases短代码 +function nenghui_cases_shortcode($atts) { + // 确保 $atts 是数组 + if (!is_array($atts)) { + $atts = array(); + } + + // 设置默认参数 + $atts = shortcode_atts(array( + 'id' => 'nenghui-cases', + 'class' => '', + 'title' => 'Cases', + 'posts_per_page' => '6', // 每页显示数量 + 'columns' => '3', // 每行显示列数 + 'show_pagination' => 'true', // 是否显示分页 + 'show_tabs' => 'true', // 是否显示选项卡 + 'default_category' => 'power-station', // 默认显示的分类 + 'show_animation' => 'true' + ), $atts); + + // 验证和清理参数 + if (!empty($atts['posts_per_page'])) { + $posts_count = intval($atts['posts_per_page']); + if ($posts_count < 1) { + $atts['posts_per_page'] = '6'; // 默认值 + } + } + + if (!empty($atts['columns'])) { + $columns = intval($atts['columns']); + if ($columns < 1 || $columns > 4) { + $atts['columns'] = '3'; // 默认值 + } + } + + // 开始输出缓冲 + ob_start(); + + // 设置全局变量供模板使用 + global $cases_shortcode_atts; + $cases_shortcode_atts = $atts; + + // 包含cases模板 + include get_template_directory() . '/template-parts/blocks/block-cases.php'; + + // 返回缓冲的内容 + return ob_get_clean(); +} +add_shortcode('nenghui_cases', 'nenghui_cases_shortcode'); + +/** + * Cases 短代码使用示例: + * + * 基本用法: + * [nenghui_cases] + * + * 自定义参数: + * [nenghui_cases posts_per_page="9" columns="3"] + * + * 完整参数: + * [nenghui_cases + * id="custom-cases" + * class="custom-class" + * title="项目案例" + * posts_per_page="6" + * columns="3" + * show_pagination="true" + * show_tabs="true" + * default_category="power-station" + * show_animation="true"] + * + * 参数说明: + * - id: 容器ID,默认为 'nenghui-cases' + * - class: 额外CSS类 + * - title: 区块标题,默认为 'Cases' + * - posts_per_page: 每页显示数量,默认为 6 + * - columns: 每行显示列数(1-4),默认为 3 + * - show_pagination: 是否显示分页,默认为 'true' + * - show_tabs: 是否显示选项卡,默认为 'true' + * - default_category: 默认显示的分类slug,默认为 'power-station' + * - show_animation: 是否显示动画效果,默认为 'true' + * + * 注意事项: + * - 案例内容通过后台"案例展示"菜单添加和管理 + * - 支持三个默认分类:Power Station、PV Project、Agricultural Solar + * - 每个案例需要设置特色图像、标题、摘要 + * - 案例详情页使用 cases-content.php 模板 + * - 支持响应式布局,自动适应不同屏幕宽度 + * - 使用CSS Grid布局,支持auto-fill和auto-fit + * + * 后台使用说明: + * 1. 在WordPress后台可以看到"案例展示"菜单 + * 2. 点击"添加新案例"创建案例项目 + * 3. 设置案例标题、内容、摘要和特色图像 + * 4. 选择案例分类(Power Station/PV Project/Agricultural Solar) + * 5. 发布后即可在前台显示 + * 6. 案例详情页会自动使用 cases-content.php 模板 + */ + +// AJAX处理函数:加载案例数据 +function load_cases_ajax() { + // 验证nonce + if (!isset($_POST['nonce']) || !wp_verify_nonce($_POST['nonce'], 'load_cases_nonce')) { + wp_die('Security check failed'); + } + + $category = sanitize_text_field($_POST['category']); + $page = intval($_POST['page']); + $posts_per_page = intval($_POST['posts_per_page']); + $columns = intval($_POST['columns']); + $show_pagination = $_POST['show_pagination'] === 'true'; + + // 构建查询参数 + $args = array( + 'post_type' => 'cases', + 'post_status' => 'publish', + 'posts_per_page' => $posts_per_page, + 'paged' => $page, + 'orderby' => 'date', + 'order' => 'DESC' + ); + + // 如果指定了分类且不是'all' + if ($category !== 'all') { + $args['tax_query'] = array( + array( + 'taxonomy' => 'case_category', + 'field' => 'slug', + 'terms' => $category + ) + ); + } + + $query = new WP_Query($args); + + if ($query->have_posts()) { + ob_start(); + ?> +
+ have_posts()) : $query->the_post(); ?> + + +
+ max_num_pages > 1) { + ob_start(); + ?> +
+ str_replace($big, '%#%', esc_url(get_pagenum_link($big))), + 'format' => '?paged=%#%', + 'current' => $page, + 'total' => $query->max_num_pages, + 'prev_text' => '‹', + 'next_text' => '›', + 'type' => 'array', + 'end_size' => 1, + 'mid_size' => 2 + )); + + if ($pagination_links) { + foreach ($pagination_links as $link) { + // 替换class以匹配我们的样式 + $link = str_replace('page-numbers', 'page-numbers', $link); + echo $link; + } + } + ?> +
+ $html, + 'pagination' => $pagination, + 'found_posts' => $query->found_posts, + 'max_pages' => $query->max_num_pages + )); + } else { + wp_send_json_success(array( + 'html' => '

暂无案例数据

', + 'pagination' => '', + 'found_posts' => 0, + 'max_pages' => 0 + )); + } +} +add_action('wp_ajax_load_cases', 'load_cases_ajax'); +add_action('wp_ajax_nopriv_load_cases', 'load_cases_ajax'); + +// 注册nenghui_products_banner短代码 +function nenghui_products_banner_shortcode($atts) { + // 确保 $atts 是数组 + if (!is_array($atts)) { + $atts = array(); + } + + // 设置默认参数 + $atts = shortcode_atts(array( + 'id' => 'nenghui-products-banner-shortcode', + 'class' => '', + 'show_animation' => 'true', + 'autoplay' => '', // 空值表示使用自定义器设置 + 'autoplay_delay' => '' // 空值表示使用自定义器设置 + ), $atts); + + // 开始输出缓冲 + ob_start(); + + // 设置全局变量供模板使用 + global $products_banner_shortcode_atts; + $products_banner_shortcode_atts = $atts; + + // 包含产品Banner模板 + include get_template_directory() . '/template-parts/blocks/black-products-banner.php'; + + // 返回缓冲的内容 + return ob_get_clean(); +} +add_shortcode('nenghui_products_banner', 'nenghui_products_banner_shortcode'); +add_shortcode('products_banner', 'nenghui_products_banner_shortcode'); // 简化版本 + +/** + * Global Map 短代码使用示例: + * + * 基本用法: + * [nenghui_global_map] + * [global_map] + * + * 自定义参数: + * [nenghui_global_map + * id="custom-global-map" + * class="custom-class" + * width="90%" + * max_width="1400px"] + * + * 参数说明: + * - id: 容器ID,默认为 'nenghui-global-map' + * - class: 额外CSS类 + * - width: 地图容器宽度,默认为 '80%' + * - max_width: 地图容器最大宽度,默认为 '1200px' + * + * 功能特点: + * - 响应式设计,适配移动端 + * - 鼠标悬停显示项目信息卡片 + * - 智能定位,卡片自动调整显示位置 + * - 包含7个全球项目标记点 + * - 支持自定义样式和尺寸 + */ + +/** + * 仓储和配送项目短代码 + * Warehousing and Distribution Project Shortcode + */ +function nenghui_warehousing_distribution_shortcode($atts) { + // 解析短代码属性 + $atts = shortcode_atts(array( + 'id' => '', + 'class' => '', + 'show_animation' => 'true' + ), $atts, 'warehousing_distribution'); + + // 设置全局变量供模板使用 + global $warehousing_distribution_shortcode_atts; + $warehousing_distribution_shortcode_atts = $atts; + + // 开始输出缓冲 + ob_start(); + + // 包含模板文件 + get_template_part('template-parts/blocks/block-warehousing-distribution'); + + // 获取输出内容 + $output = ob_get_clean(); + + // 清理全局变量 + unset($warehousing_distribution_shortcode_atts); + + return $output; +} + +// 注册短代码 +add_shortcode('warehousing_distribution', 'nenghui_warehousing_distribution_shortcode'); +add_shortcode('nenghui_warehousing_distribution', 'nenghui_warehousing_distribution_shortcode'); + +/** + * Black About Info - Warehousing and Distribution Project 短代码 + */ +function nenghui_black_about_info_shortcode($atts) { + // 确保 $atts 是数组 + if (!is_array($atts)) { + $atts = array(); + } + + // 设置默认参数 + $atts = shortcode_atts(array( + 'id' => '', + 'class' => '', + 'show_animation' => 'true' + ), $atts, 'black_about_info'); + + // 设置全局变量供模板使用 + global $black_about_info_shortcode_atts; + $black_about_info_shortcode_atts = $atts; + + // 开始输出缓冲 + ob_start(); + + // 包含模板文件 + include get_template_directory() . '/template-parts/blocks/black-about-info.php'; + + // 获取输出内容 + $output = ob_get_clean(); + + // 清理全局变量 + unset($black_about_info_shortcode_atts); + + return $output; +} + +// 注册短代码 +add_shortcode('black_about_info', 'nenghui_black_about_info_shortcode'); +add_shortcode('nenghui_black_about_info', 'nenghui_black_about_info_shortcode'); + +// 业务流程区块简码 +function nenghui_business_process_shortcode($atts) { + // 设置默认属性 + $atts = shortcode_atts(array( + 'class' => '', + 'id' => '', + 'title' => '', + 'subtitle' => '', + 'tab_01_title' => '', + 'tab_01_description' => '', + 'tab_01_image' => '', + 'tab_02_title' => '', + 'tab_02_description' => '', + 'tab_02_image' => '', + 'tab_03_title' => '', + 'tab_03_description' => '', + 'tab_03_image' => '', + 'tab_04_title' => '', + 'tab_04_description' => '', + 'tab_04_image' => '', + ), $atts, 'business_process'); + + // 模拟区块数据 + $block = array( + 'id' => !empty($atts['id']) ? $atts['id'] : 'business-process-' . uniqid(), + 'className' => $atts['class'] + ); + + // 设置自定义器值(模拟) + $customizer_values = array( + 'business_process_show' => true, + 'business_process_title' => !empty($atts['title']) ? $atts['title'] : get_theme_mod('business_process_title', '设计业务流程'), + 'business_process_subtitle' => !empty($atts['subtitle']) ? $atts['subtitle'] : get_theme_mod('business_process_subtitle', 'DESIGN BUSINESS PROCESS'), + 'business_process_tab_01_title' => !empty($atts['tab_01_title']) ? $atts['tab_01_title'] : get_theme_mod('business_process_tab1_title', '可行性研究'), + 'business_process_tab_01_description' => !empty($atts['tab_01_description']) ? $atts['tab_01_description'] : get_theme_mod('business_process_tab1_description', '前期规划及可行性分析'), + 'business_process_tab_01_image' => !empty($atts['tab_01_image']) ? $atts['tab_01_image'] : get_theme_mod('business_process_tab1_image', get_template_directory_uri() . '/assets/images/FWas.jpg'), + 'business_process_tab_02_title' => !empty($atts['tab_02_title']) ? $atts['tab_02_title'] : get_theme_mod('business_process_tab2_title', '初步设计'), + 'business_process_tab_02_description' => !empty($atts['tab_02_description']) ? $atts['tab_02_description'] : get_theme_mod('business_process_tab2_description', '方案设计及技术论证'), + 'business_process_tab_02_image' => !empty($atts['tab_02_image']) ? $atts['tab_02_image'] : get_theme_mod('business_process_tab2_image', get_template_directory_uri() . '/assets/images/FWas.jpg'), + 'business_process_tab_03_title' => !empty($atts['tab_03_title']) ? $atts['tab_03_title'] : get_theme_mod('business_process_tab3_title', '施工图设计'), + 'business_process_tab_03_description' => !empty($atts['tab_03_description']) ? $atts['tab_03_description'] : get_theme_mod('business_process_tab3_description', '详细设计及施工图纸'), + 'business_process_tab_03_image' => !empty($atts['tab_03_image']) ? $atts['tab_03_image'] : get_theme_mod('business_process_tab3_image', get_template_directory_uri() . '/assets/images/FWas.jpg'), + 'business_process_tab_04_title' => !empty($atts['tab_04_title']) ? $atts['tab_04_title'] : get_theme_mod('business_process_tab4_title', '竣工图设计'), + 'business_process_tab_04_description' => !empty($atts['tab_04_description']) ? $atts['tab_04_description'] : get_theme_mod('business_process_tab4_description', '竣工验收及图纸归档'), + 'business_process_tab_04_image' => !empty($atts['tab_04_image']) ? $atts['tab_04_image'] : get_theme_mod('business_process_tab4_image', get_template_directory_uri() . '/assets/images/FWas.jpg'), + ); + + // 临时设置全局变量以供模板使用 + global $business_process_shortcode_values; + $business_process_shortcode_values = $customizer_values; + + // 确保样式和脚本已加载 + if (!wp_style_is('business-process-css', 'enqueued')) { + wp_enqueue_style('business-process-css', get_template_directory_uri() . '/assets/css/business-process.css', array(), '1.0.0'); + } + + if (!wp_script_is('business-process-js', 'enqueued')) { + wp_enqueue_script('business-process-js', get_template_directory_uri() . '/assets/js/business-process.js', array('jquery'), '1.0.0', true); + } + + ob_start(); + include get_template_directory() . '/template-parts/blocks/block-process.php'; + $output = ob_get_clean(); + + // 清理全局变量 + unset($business_process_shortcode_values); + + return $output; +} +add_shortcode('business_process', 'nenghui_business_process_shortcode'); \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/inc/smtp/README.md b/wp-content/themes/nenghui-energy-theme-4/inc/smtp/README.md new file mode 100644 index 0000000..9598ea2 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/inc/smtp/README.md @@ -0,0 +1,302 @@ +# SMTP邮件配置系统 + +这是一个为WordPress主题开发的SMTP邮件配置系统,提供完整的邮件发送功能。 + +## 功能特性 + +### 1. SMTP邮件配置 +- 支持主流邮件服务商(Gmail、QQ邮箱、163邮箱、阿里云邮箱等) +- 灵活的加密方式配置(TLS/SSL/无加密) +- 系统诊断工具:检查服务器环境和PHP扩展支持 +- 连接测试功能:验证SMTP服务器连接状态 +- 测试邮件发送功能 +- 详细的错误提示和调试信息 + +### 2. 安全特性 +- 配置验证和错误提示 +- 数据清理和验证 +- 安全的密码存储 + +## 文件结构 + +``` +inc/smtp/ +├── smtp-config.php # SMTP核心配置文件 +├── smtp-admin.php # 后台管理页面 +├── smtp-diagnostic.php # SMTP诊断工具 +└── README.md # 使用说明文档 +``` + +## 配置步骤 + +### 1. 访问SMTP设置页面 + +1. 登录WordPress后台 +2. 进入 **设置** → **SMTP邮件设置** +3. 配置相关参数 + +### 2. SMTP服务器设置 + +- **SMTP主机**:邮件服务商的SMTP服务器地址 +- **SMTP端口**:通常为587(TLS)或465(SSL) +- **加密方式**:推荐使用TLS或SSL +- **SMTP用户名**:通常是您的邮箱地址 +- **SMTP密码**:邮箱密码或应用专用密码 +- **发件人邮箱**:邮件的发件人地址 +- **发件人姓名**:邮件的发件人显示名称 + +### 3. 常用邮件服务商配置 + +#### Gmail配置 +``` +SMTP主机: smtp.gmail.com +SMTP端口: 587 +加密方式: TLS +用户名: your-email@gmail.com +密码: 应用专用密码(需开启两步验证) +``` + +#### QQ邮箱配置 +``` +SMTP主机: smtp.qq.com +SMTP端口: 587 或 465 +加密方式: TLS 或 SSL +用户名: your-email@qq.com +密码: 授权码(需在QQ邮箱设置中获取) +``` + +#### 163邮箱配置 +``` +SMTP主机: smtp.163.com +SMTP端口: 587 或 465 +加密方式: TLS 或 SSL +用户名: your-email@163.com +密码: 授权码(需在163邮箱设置中获取) +``` + +#### 阿里云邮箱配置 +``` +SMTP主机: smtp.mxhichina.com +SMTP端口: 587 或 465 +加密方式: TLS 或 SSL +用户名: your-email@yourdomain.com +密码: 授权码(必须使用授权码,不能使用登录密码) +``` + +#### hMailServer 自建邮箱配置 +``` +SMTP主机: 您的邮件服务器域名或IP地址 +SMTP端口: 25 (无加密) / 587 (TLS) / 465 (SSL) +加密方式: None / TLS / SSL(根据服务器配置选择) +用户名: 完整邮箱地址或用户名(取决于hMailServer配置) +密码: 邮箱账户密码 +``` + +**hMailServer 配置注意事项:** +- 确保hMailServer服务已启动并正常运行 +- 检查SMTP服务是否已在hMailServer中启用 +- 确认防火墙允许相应端口的连接 +- 如果使用域名,确保DNS解析正确 +- 建议使用TLS加密(端口587)以提高安全性 + +### 3. 测试SMTP连接 + +配置完成后,点击 **发送测试邮件** 按钮验证配置是否正确。 + +系统会发送一封测试邮件到管理员邮箱,如果配置正确,您将收到测试邮件。如果发送失败,系统会显示详细的错误信息帮助您排查问题。 + +## 使用说明 + +### 系统诊断 + +在SMTP设置页面点击"系统诊断"按钮,系统会检查: +- PHP版本和必要扩展 +- OpenSSL支持情况 +- 网络连接能力 +- SSL/TLS证书信息 + +### 测试SMTP连接 + +点击"测试连接"按钮,系统会尝试连接到SMTP服务器,验证: +- 服务器地址和端口是否可达 +- SSL/TLS加密是否正常 +- 连接响应时间 + +### 发送测试邮件 + +点击"发送测试邮件"按钮,系统会向管理员邮箱发送一封测试邮件。如果配置正确,您将收到测试邮件。 + +### 在代码中发送邮件 + +配置完SMTP后,您可以在WordPress中正常使用 `wp_mail()` 函数发送邮件: + +```php + +``` + +## 安全特性 + +- **配置验证**:系统会验证SMTP配置的完整性 +- **数据清理**:所有配置数据都经过WordPress安全函数处理 +- **密码保护**:SMTP密码安全存储在WordPress数据库中 + +## 故障排除 + +### 推荐的诊断步骤 + +遇到SMTP问题时,建议按以下顺序进行诊断: + +1. **运行系统诊断** + - 点击"系统诊断"按钮 + - 检查PHP版本和扩展支持 + - 确认OpenSSL和网络功能正常 + +2. **测试服务器连接** + - 点击"测试连接"按钮 + - 验证能否连接到SMTP服务器 + - 检查SSL/TLS握手是否成功 + +3. **发送测试邮件** + - 在连接测试成功后,点击"发送测试邮件" + - 查看详细的错误信息和调试输出 + +### 常见问题解决方案 + +#### 连接超时或拒绝连接 +- 检查SMTP服务器地址和端口 +- 确认服务器防火墙设置 +- 验证网络连接是否正常 + +#### SSL/TLS握手失败 +- 确认加密方式设置正确(TLS/SSL) +- 检查OpenSSL版本和支持的协议 +- 尝试不同的端口(587用于TLS,465用于SSL) + +#### 认证失败 (526 Authentication failure) +**⚠️ 重要:大多数邮箱服务需要使用授权码而不是登录密码!** + +**阿里云邮箱:** +- 必须使用授权码,不能使用登录密码 +- 获取方式:登录阿里云邮箱 → 设置 → 账户安全 → 生成授权码 +- 用户名:完整邮箱地址 + +**QQ邮箱:** +- 需要开启SMTP服务并使用授权码 +- 获取方式:QQ邮箱设置 → 账户 → POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 +- 生成授权码后使用授权码作为密码 + +**163邮箱:** +- 需要开启客户端授权密码 +- 获取方式:163邮箱设置 → POP3/SMTP/IMAP → 开启服务并获取授权码 + +**Gmail:** +- 需要开启两步验证并使用应用专用密码 +- 获取方式:Google账户设置 → 安全性 → 应用专用密码 + +**通用检查项:** +- 确认用户名格式正确(通常是完整邮箱地址) +- 检查是否已在邮箱设置中开启SMTP服务 +- 验证授权码/应用密码是否正确输入 + +#### 邮件发送失败但连接正常 +- 检查发件人邮箱设置 +- 确认邮箱配额未超限 +- 验证收件人邮箱地址有效性 + +#### hMailServer 自建邮箱常见问题 +**连接问题:** +- 确认hMailServer服务状态:检查Windows服务中的hMailServer是否正在运行 +- 验证SMTP服务启用:在hMailServer管理器中确认SMTP已启用 +- 检查端口配置:确认hMailServer中配置的SMTP端口与WordPress设置一致 +- 防火墙设置:确保Windows防火墙允许SMTP端口通信 + +**认证问题:** +- 用户名格式:可能需要使用完整邮箱地址或仅用户名部分 +- 域名配置:确认邮箱域名在hMailServer中已正确配置 +- 账户状态:检查邮箱账户是否已启用且未被锁定 + +**SSL/TLS问题:** +- 证书配置:如使用SSL/TLS,确保hMailServer中已正确配置SSL证书 +- 端口匹配:SSL通常使用465端口,TLS使用587端口 +- 加密设置:确认hMailServer的加密设置与WordPress配置匹配 + +**网络问题:** +- DNS解析:如使用域名,确保DNS解析正确指向邮件服务器 +- 网络连通性:测试从WordPress服务器到hMailServer的网络连接 +- 路由配置:检查网络路由是否正确配置 + +### 常见问题 + +#### 1. 邮件发送失败 +- 检查SMTP配置是否正确 +- 确认邮箱密码或授权码是否有效 +- 检查服务器是否允许SMTP连接 +- 查看WordPress调试日志 +- 确认防火墙没有阻止SMTP端口 +- 验证邮件服务商是否支持SMTP发送 + +### 调试模式 + +在`wp-config.php`中启用调试模式: + +```php +define('WP_DEBUG', true); +define('WP_DEBUG_LOG', true); +``` + +然后查看`/wp-content/debug.log`文件获取详细错误信息。 + +## 更新日志 + +### v1.1.2 +- 新增hMailServer自建邮箱SMTP配置支持 +- 添加hMailServer配置说明和注意事项 +- 完善hMailServer常见问题的故障排除指南 +- 包含连接、认证、SSL/TLS和网络问题的解决方案 + +### v1.1.1 +- 修复open_basedir限制导致的错误日志写入问题 +- 增强526认证失败错误的诊断和解决方案提示 +- 在管理界面添加授权码使用的重要提示 +- 完善各大邮箱服务商的授权码获取指南 +- 优化错误信息显示,突出显示认证失败的解决方案 + +### v1.1.0 +- 新增系统诊断工具,检查PHP环境和扩展支持 +- 新增SMTP连接测试功能,验证服务器连接状态 +- 增强错误报告,提供详细的调试信息和日志 +- 改进测试界面,提供三级诊断步骤 +- 优化SSL/TLS连接处理和证书信息显示 +- 增加连接超时设置和性能优化 + +### v1.0.0 +- 初始版本发布 +- 支持基础SMTP配置 +- 提供测试邮件发送功能 +- 包含详细的错误提示和调试信息 + +## 技术支持 + +如果您在使用过程中遇到问题,请: + +1. 查看本文档的故障排除部分 +2. 检查WordPress调试日志 +3. 联系主题开发者获取技术支持 + +--- + +**注意**:请妥善保管您的邮箱密码和授权码,不要在不安全的环境中暴露这些信息。 \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/inc/smtp/smtp-admin.php b/wp-content/themes/nenghui-energy-theme-4/inc/smtp/smtp-admin.php new file mode 100644 index 0000000..50bb638 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/inc/smtp/smtp-admin.php @@ -0,0 +1,313 @@ +

设置已保存!

'; + } + + // 获取当前设置 + $smtp_host = get_option('nenghui_smtp_host', ''); + $smtp_port = get_option('nenghui_smtp_port', '587'); + $smtp_username = get_option('nenghui_smtp_username', ''); + $smtp_password = get_option('nenghui_smtp_password', ''); + $smtp_secure = get_option('nenghui_smtp_secure', 'tls'); + $smtp_from_email = get_option('nenghui_smtp_from_email', get_option('admin_email')); + $smtp_from_name = get_option('nenghui_smtp_from_name', get_bloginfo('name')); + + ?> +
+

SMTP邮件设置

+ +
+
+ + +

SMTP服务器设置

+

配置SMTP服务器以确保邮件能够正常发送。如果不配置SMTP,将使用服务器默认的邮件发送方式。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SMTP主机 + +

SMTP服务器地址,例如:smtp.gmail.com, smtp.qq.com

+
SMTP端口 + +

通常为 587 (TLS) 或 465 (SSL)

+ + +
加密方式 + +

推荐使用 TLS 或 SSL

+
SMTP用户名 + +

通常是您的邮箱地址

+
SMTP密码 + +

重要提示:大多数邮箱服务需要使用授权码而不是登录密码!
+ • 阿里云邮箱:必须使用授权码
+ • QQ邮箱:需要开启SMTP并使用授权码
+ • Gmail:需要使用应用专用密码

+
发件人邮箱 + +

邮件的发件人邮箱地址

+
发件人姓名 + +

邮件的发件人显示名称

+
+ + +
+ +
+

测试SMTP连接

+

点击下面的按钮发送测试邮件,验证SMTP配置是否正确。

+

测试邮件将发送到:

+

+ 系统诊断 + 测试连接 + 发送测试邮件 +

+

+ 系统诊断:检查服务器环境和PHP扩展支持
+ 测试连接:验证能否连接到SMTP服务器
+ 发送测试邮件:实际发送一封测试邮件 +

+ +
+

测试前请确认:

+
    +
  • 所有SMTP配置项都已正确填写
  • +
  • 邮箱服务商已开启SMTP服务
  • +
  • 使用的是正确的密码(Gmail等需要应用专用密码)
  • +
  • 服务器网络可以访问SMTP服务器
  • +
+
+
+ +
+

常用SMTP配置

+
+
+

Gmail

+
    +
  • 主机: smtp.gmail.com
  • +
  • 端口: 587
  • +
  • 加密: TLS
  • +
  • 注意: 需要开启两步验证并使用应用专用密码
  • +
+
+ +
+

QQ邮箱

+
    +
  • 主机: smtp.qq.com
  • +
  • 端口: 587 或 465
  • +
  • 加密: TLS 或 SSL
  • +
  • 注意: 需要开启SMTP服务并获取授权码
  • +
+
+ +
+

163邮箱

+
    +
  • 主机: smtp.163.com
  • +
  • 端口: 587 或 465
  • +
  • 加密: TLS 或 SSL
  • +
  • 注意: 需要开启SMTP服务并使用授权码
  • +
+
+ +
+

阿里云邮箱

+
    +
  • 主机: smtp.mxhichina.com
  • +
  • 端口: 587 或 465
  • +
  • 加密: TLS 或 SSL
  • +
  • 重要: 必须使用授权码,不能使用登录密码!
  • +
  • 获取授权码: 登录阿里云邮箱 → 设置 → 账户安全 → 生成授权码
  • +
+
+ +
+

hMailServer 自建邮箱

+
    +
  • 主机: 您的邮件服务器域名或IP
  • +
  • 端口: 25 (无加密) / 587 (TLS) / 465 (SSL)
  • +
  • 加密: 根据服务器配置选择 None/TLS/SSL
  • +
  • 用户名: 完整邮箱地址或用户名
  • +
  • 密码: 邮箱账户密码
  • +
  • 提示: 确保hMailServer已启用SMTP服务
  • +
  • 常见端口: 25(标准), 587(提交), 465(SSL)
  • +
+
+
+
+
+
+ + + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/inc/smtp/smtp-config.php b/wp-content/themes/nenghui-energy-theme-4/inc/smtp/smtp-config.php new file mode 100644 index 0000000..19ec0ac --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/inc/smtp/smtp-config.php @@ -0,0 +1,282 @@ +isSMTP(); + $phpmailer->Host = $smtp_host; + $phpmailer->SMTPAuth = true; + $phpmailer->Port = $smtp_port; + $phpmailer->Username = $smtp_username; + $phpmailer->Password = $smtp_password; + + // 设置加密方式 + if ($smtp_secure === 'ssl') { + $phpmailer->SMTPSecure = PHPMailer\PHPMailer\PHPMailer::ENCRYPTION_SMTPS; + } elseif ($smtp_secure === 'tls') { + $phpmailer->SMTPSecure = PHPMailer\PHPMailer\PHPMailer::ENCRYPTION_STARTTLS; + } + + // 设置发件人信息 + if (!empty($smtp_from_email)) { + $phpmailer->setFrom($smtp_from_email, $smtp_from_name ?: get_bloginfo('name')); + } + + // 设置超时时间 + $phpmailer->Timeout = 30; + $phpmailer->SMTPKeepAlive = false; + + // 启用调试(测试时总是启用) + if (defined('WP_DEBUG') && WP_DEBUG || isset($_GET['nenghui_test_smtp'])) { + $phpmailer->SMTPDebug = 2; + $phpmailer->Debugoutput = function($str, $level) { + error_log('SMTP Debug: ' . $str); + }; + } +} + +// 挂载SMTP配置 +add_action('phpmailer_init', 'nenghui_configure_smtp'); + + + +/** + * 测试SMTP连接 + */ +function nenghui_test_smtp_connection() { + if (!current_user_can('manage_options')) { + wp_die('权限不足'); + } + + // 检查SMTP配置是否完整 + $smtp_host = get_option('nenghui_smtp_host'); + $smtp_username = get_option('nenghui_smtp_username'); + $smtp_password = get_option('nenghui_smtp_password'); + $smtp_from_email = get_option('nenghui_smtp_from_email'); + + $config_errors = []; + if (empty($smtp_host)) { + $config_errors[] = 'SMTP服务器地址未配置'; + } + if (empty($smtp_username)) { + $config_errors[] = 'SMTP用户名未配置'; + } + if (empty($smtp_password)) { + $config_errors[] = 'SMTP密码未配置'; + } + if (empty($smtp_from_email)) { + $config_errors[] = '发件人邮箱未配置'; + } + + if (!empty($config_errors)) { + add_action('admin_notices', function() use ($config_errors) { + $error_list = implode('、', $config_errors); + echo '

SMTP配置不完整:' . esc_html($error_list) . '

'; + }); + return; + } + + $test_email = get_option('admin_email'); + $subject = '[' . get_bloginfo('name') . '] SMTP测试邮件'; + $message = '这是一封SMTP配置测试邮件。如果您收到此邮件,说明SMTP配置正确。\n\n发送时间:' . current_time('Y-m-d H:i:s'); + + // 启用错误捕获 + $original_error_reporting = error_reporting(E_ALL); + $original_display_errors = ini_get('display_errors'); + ini_set('display_errors', 1); + + // 捕获PHPMailer错误 + global $phpmailer; + $error_message = ''; + $debug_output = ''; + + // 捕获调试输出 + ob_start(); + + add_action('wp_mail_failed', function($wp_error) use (&$error_message) { + $error_message = $wp_error->get_error_message(); + }); + + // 临时启用错误日志记录(使用允许的路径) + $log_file = '/tmp/smtp_debug.log'; + $original_log_errors = ini_get('log_errors'); + $original_error_log = ini_get('error_log'); + ini_set('log_errors', 1); + ini_set('error_log', $log_file); + + $sent = wp_mail($test_email, $subject, $message); + + // 获取调试输出 + $debug_output = ob_get_clean(); + + // 恢复设置 + error_reporting($original_error_reporting); + ini_set('display_errors', $original_display_errors); + ini_set('log_errors', $original_log_errors); + ini_set('error_log', $original_error_log); + + // 读取最新的错误日志 + $recent_errors = ''; + if (file_exists($log_file)) { + $log_content = file_get_contents($log_file); + $log_lines = explode("\n", $log_content); + $recent_lines = array_slice($log_lines, -10); // 获取最后10行 + $recent_errors = implode("\n", array_filter($recent_lines)); + } + + if ($sent) { + add_action('admin_notices', function() use ($test_email) { + echo '

测试邮件发送成功!
测试邮件已发送到:' . esc_html($test_email) . '
请检查您的邮箱(包括垃圾邮件文件夹)。

'; + }); + } else { + add_action('admin_notices', function() use ($error_message, $smtp_host, $smtp_username, $debug_output, $recent_errors) { + $smtp_port = get_option('nenghui_smtp_port', '587'); + $smtp_secure = get_option('nenghui_smtp_secure', 'tls'); + + $error_info = '测试邮件发送失败!
'; + $error_info .= '
当前SMTP配置:
'; + $error_info .= '• 服务器:' . esc_html($smtp_host) . '
'; + $error_info .= '• 端口:' . esc_html($smtp_port) . '
'; + $error_info .= '• 加密:' . esc_html($smtp_secure) . '
'; + $error_info .= '• 用户名:' . esc_html($smtp_username) . '
'; + + if (!empty($error_message)) { + $error_info .= '
WordPress错误信息:
' . esc_html($error_message) . '
'; + } + + if (!empty($debug_output)) { + $error_info .= '
SMTP调试输出:
' . esc_html($debug_output) . '
'; + } + + if (!empty($recent_errors)) { + $error_info .= '
最近的错误日志:
' . esc_html($recent_errors) . '
'; + } + + $error_info .= '
常见问题排查:
'; + + // 检查是否是认证失败错误 + if (strpos($debug_output, '526 Authentication failure') !== false || strpos($debug_output, 'Authentication failure') !== false) { + $error_info .= '⚠️ 认证失败 (526错误) 解决方案:
'; + $error_info .= '• 阿里云邮箱:必须使用授权码,不能使用登录密码
'; + $error_info .= '• QQ邮箱:需要开启SMTP服务并使用授权码
'; + $error_info .= '• 163邮箱:需要开启客户端授权密码
'; + $error_info .= '• Gmail:需要开启两步验证并使用应用专用密码
'; + $error_info .= '• 确认用户名格式正确(通常是完整邮箱地址)
'; + $error_info .= '• 检查是否已在邮箱设置中开启SMTP服务

'; + } + + $error_info .= '• 检查SMTP服务器地址和端口是否正确
'; + $error_info .= '• 验证用户名和密码是否正确
'; + $error_info .= '• 确认加密方式(SSL/TLS)设置正确
'; + $error_info .= '• 检查邮箱服务商是否允许SMTP发送
'; + $error_info .= '• 确认服务器防火墙没有阻止SMTP端口
'; + $error_info .= '• 检查服务器的PHP扩展是否支持SSL/TLS'; + + echo '

' . $error_info . '

'; + }); + } +} + +/** + * 测试SMTP连接(不发送邮件) + */ +function nenghui_test_smtp_connection_only() { + if (!current_user_can('manage_options')) { + wp_die('权限不足'); + } + + // 检查SMTP配置 + $smtp_host = get_option('nenghui_smtp_host'); + $smtp_port = get_option('nenghui_smtp_port', '587'); + $smtp_username = get_option('nenghui_smtp_username'); + $smtp_password = get_option('nenghui_smtp_password'); + $smtp_secure = get_option('nenghui_smtp_secure', 'tls'); + + if (empty($smtp_host) || empty($smtp_username) || empty($smtp_password)) { + add_action('admin_notices', function() { + echo '

SMTP配置不完整!请先完成所有必要的SMTP配置。

'; + }); + return; + } + + // 尝试连接SMTP服务器 + $connection_result = ''; + $error_message = ''; + + try { + // 创建socket连接测试 + $context = stream_context_create(); + if ($smtp_secure === 'ssl') { + $host_with_ssl = 'ssl://' . $smtp_host; + } else { + $host_with_ssl = $smtp_host; + } + + $socket = @stream_socket_client( + $host_with_ssl . ':' . $smtp_port, + $errno, + $errstr, + 10, + STREAM_CLIENT_CONNECT, + $context + ); + + if ($socket) { + $connection_result = 'success'; + fclose($socket); + } else { + $connection_result = 'failed'; + $error_message = "连接失败: $errstr ($errno)"; + } + } catch (Exception $e) { + $connection_result = 'failed'; + $error_message = $e->getMessage(); + } + + if ($connection_result === 'success') { + add_action('admin_notices', function() use ($smtp_host, $smtp_port) { + echo '

SMTP连接测试成功!
成功连接到 ' . esc_html($smtp_host) . ':' . esc_html($smtp_port) . '
现在可以尝试发送测试邮件。

'; + }); + } else { + add_action('admin_notices', function() use ($smtp_host, $smtp_port, $error_message) { + echo '

SMTP连接测试失败!
无法连接到 ' . esc_html($smtp_host) . ':' . esc_html($smtp_port) . '
错误信息:' . esc_html($error_message) . '

'; + }); + } +} + +// 处理SMTP测试请求 +if (isset($_GET['nenghui_test_smtp']) && $_GET['nenghui_test_smtp'] === '1') { + add_action('admin_init', 'nenghui_test_smtp_connection'); +} + +// 处理SMTP连接测试请求 +if (isset($_GET['nenghui_test_smtp_connection']) && $_GET['nenghui_test_smtp_connection'] === '1') { + add_action('admin_init', 'nenghui_test_smtp_connection_only'); +} + + + +?> \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/inc/smtp/smtp-diagnostic.php b/wp-content/themes/nenghui-energy-theme-4/inc/smtp/smtp-diagnostic.php new file mode 100644 index 0000000..cf7b810 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/inc/smtp/smtp-diagnostic.php @@ -0,0 +1,418 @@ + extension_loaded('openssl'), + 'sockets' => extension_loaded('sockets'), + 'curl' => extension_loaded('curl'), + 'mbstring' => extension_loaded('mbstring') + ]; + + // 检查OpenSSL支持的协议 + if (extension_loaded('openssl')) { + $info['openssl_version'] = OPENSSL_VERSION_TEXT; + $info['stream_crypto_methods'] = stream_get_transports(); + } + + // 检查allow_url_fopen + $info['allow_url_fopen'] = ini_get('allow_url_fopen') ? 'Yes' : 'No'; + + // 检查用户代理 + $info['user_agent'] = ini_get('user_agent'); + + // 检查默认socket超时 + $info['default_socket_timeout'] = ini_get('default_socket_timeout'); + + return $info; +} + +/** + * 测试端口连接 + */ +function nenghui_test_port_connection($host, $port, $timeout = 10) { + $result = [ + 'success' => false, + 'message' => '', + 'time' => 0, + 'methods_tried' => [] + ]; + + // 方法1: 使用fsockopen + $start_time = microtime(true); + $socket = @fsockopen($host, $port, $errno, $errstr, $timeout); + $end_time = microtime(true); + $result['time'] = round(($end_time - $start_time) * 1000, 2); + + if ($socket) { + $result['success'] = true; + $result['message'] = "✅ 成功连接到 {$host}:{$port} (fsockopen, 耗时: {$result['time']}ms)"; + $result['methods_tried'][] = 'fsockopen: 成功'; + fclose($socket); + return $result; + } else { + $result['methods_tried'][] = "fsockopen: 失败 - {$errstr} ({$errno})"; + } + + // 方法2: 使用stream_socket_client + $start_time = microtime(true); + $context = stream_context_create([ + 'socket' => [ + 'bindto' => '0:0', + ] + ]); + $socket = @stream_socket_client( + "tcp://{$host}:{$port}", + $errno2, + $errstr2, + $timeout, + STREAM_CLIENT_CONNECT, + $context + ); + $end_time = microtime(true); + $time2 = round(($end_time - $start_time) * 1000, 2); + + if ($socket) { + $result['success'] = true; + $result['message'] = "✅ 成功连接到 {$host}:{$port} (stream_socket_client, 耗时: {$time2}ms)"; + $result['methods_tried'][] = 'stream_socket_client: 成功'; + $result['time'] = $time2; + fclose($socket); + return $result; + } else { + $result['methods_tried'][] = "stream_socket_client: 失败 - {$errstr2} ({$errno2})"; + } + + // 方法3: 使用curl (如果可用) + if (function_exists('curl_init')) { + $start_time = microtime(true); + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, "http://{$host}:{$port}"); + curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_NOBODY, true); + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); + + $response = curl_exec($ch); + $curl_error = curl_error($ch); + $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); + $connect_time = curl_getinfo($ch, CURLINFO_CONNECT_TIME) * 1000; + curl_close($ch); + + $end_time = microtime(true); + $time3 = round(($end_time - $start_time) * 1000, 2); + + if ($response !== false || $http_code > 0) { + $result['success'] = true; + $result['message'] = "✅ 成功连接到 {$host}:{$port} (curl, 耗时: {$time3}ms, HTTP状态: {$http_code})"; + $result['methods_tried'][] = 'curl: 成功'; + $result['time'] = $time3; + return $result; + } else { + $result['methods_tried'][] = "curl: 失败 - {$curl_error}"; + } + } + + // 所有方法都失败 + $result['message'] = "❌ 无法连接到 {$host}:{$port}\n"; + $result['message'] .= "尝试的连接方法:\n"; + foreach ($result['methods_tried'] as $method) { + $result['message'] .= "• {$method}\n"; + } + + // 添加诊断建议 + $result['message'] .= "\n🔍 可能的原因:\n"; + + // 针对端口25的特殊提示 + if ($port == 25) { + $result['message'] .= "• ⚠️ 端口25被封禁:大多数云服务商(阿里云、腾讯云等)默认封禁端口25\n"; + $result['message'] .= "• 🔧 解决方案:改用端口587(TLS)或465(SSL)\n"; + $result['message'] .= "• 📧 建议配置:使用STARTTLS加密方式,端口587\n"; + } else { + $result['message'] .= "• 服务器防火墙阻止了端口 {$port}\n"; + } + + $result['message'] .= "• SMTP服务未启动或未监听此端口\n"; + $result['message'] .= "• 网络连接问题或DNS解析失败\n"; + $result['message'] .= "• 服务器IP地址或域名不正确\n"; + + // 添加云服务商特殊说明 + if ($port == 25) { + $result['message'] .= "\n💡 云服务商端口限制说明:\n"; + $result['message'] .= "• 阿里云ECS:默认封禁25端口,无法申请解封\n"; + $result['message'] .= "• 腾讯云CVM:默认封禁25端口,企业用户可申请解封\n"; + $result['message'] .= "• 建议使用端口587或465,配合TLS/SSL加密\n"; + } + + return $result; +} + +/** + * 测试SSL/TLS连接 + */ +function nenghui_test_ssl_connection($host, $port, $crypto_method = 'tls') { + $result = [ + 'success' => false, + 'message' => '', + 'certificate_info' => null + ]; + + $context = stream_context_create([ + 'ssl' => [ + 'verify_peer' => false, + 'verify_peer_name' => false, + 'allow_self_signed' => true + ] + ]); + + $protocol = ($crypto_method === 'ssl') ? 'ssl' : 'tls'; + $connection_string = "{$protocol}://{$host}:{$port}"; + + $socket = @stream_socket_client( + $connection_string, + $errno, + $errstr, + 10, + STREAM_CLIENT_CONNECT, + $context + ); + + if ($socket) { + $result['success'] = true; + $result['message'] = "成功建立 {$crypto_method} 连接到 {$host}:{$port}"; + + // 获取证书信息 + $cert = stream_context_get_params($socket); + if (isset($cert['options']['ssl']['peer_certificate'])) { + $cert_info = openssl_x509_parse($cert['options']['ssl']['peer_certificate']); + $result['certificate_info'] = [ + 'subject' => $cert_info['subject']['CN'] ?? 'Unknown', + 'issuer' => $cert_info['issuer']['CN'] ?? 'Unknown', + 'valid_from' => date('Y-m-d H:i:s', $cert_info['validFrom_time_t']), + 'valid_to' => date('Y-m-d H:i:s', $cert_info['validTo_time_t']) + ]; + } + + fclose($socket); + } else { + $result['message'] = "无法建立 {$crypto_method} 连接到 {$host}:{$port} - {$errstr} ({$errno})"; + } + + return $result; +} + +/** + * DNS解析测试 + */ +function nenghui_test_dns_resolution($host) { + $result = [ + 'success' => false, + 'message' => '', + 'ip_addresses' => [] + ]; + + // 测试DNS解析 + $ip_addresses = @gethostbynamel($host); + + if ($ip_addresses && !empty($ip_addresses)) { + $result['success'] = true; + $result['ip_addresses'] = $ip_addresses; + $result['message'] = "✅ DNS解析成功: {$host} → " . implode(', ', $ip_addresses); + } else { + $result['message'] = "❌ DNS解析失败: 无法解析域名 {$host}"; + $result['message'] .= "\n🔍 可能的原因:\n"; + $result['message'] .= "• DNS服务器配置问题\n"; + $result['message'] .= "• 域名不存在或已过期\n"; + $result['message'] .= "• 网络连接问题\n"; + } + + return $result; +} + +/** + * 网络连通性测试 + */ +function nenghui_test_network_connectivity() { + $result = [ + 'success' => false, + 'message' => '', + 'tests' => [] + ]; + + // 测试常见的公共DNS服务器 + $test_hosts = [ + '8.8.8.8' => 'Google DNS', + '114.114.114.114' => '114 DNS', + '223.5.5.5' => '阿里DNS' + ]; + + $successful_tests = 0; + + foreach ($test_hosts as $ip => $name) { + $start_time = microtime(true); + $socket = @fsockopen($ip, 53, $errno, $errstr, 5); + $end_time = microtime(true); + $time = round(($end_time - $start_time) * 1000, 2); + + if ($socket) { + $result['tests'][] = "✅ {$name} ({$ip}): 连接成功 ({$time}ms)"; + $successful_tests++; + fclose($socket); + } else { + $result['tests'][] = "❌ {$name} ({$ip}): 连接失败 - {$errstr}"; + } + } + + if ($successful_tests > 0) { + $result['success'] = true; + $result['message'] = "✅ 网络连通性正常 ({$successful_tests}/" . count($test_hosts) . " 测试通过)"; + } else { + $result['message'] = "❌ 网络连通性异常 (所有测试都失败)"; + $result['message'] .= "\n🔍 可能的原因:\n"; + $result['message'] .= "• 服务器网络连接问题\n"; + $result['message'] .= "• 防火墙阻止了出站连接\n"; + $result['message'] .= "• DNS服务配置问题\n"; + } + + return $result; +} + +/** + * 运行完整的SMTP诊断 + */ +function nenghui_run_smtp_diagnostic() { + if (!current_user_can('manage_options')) { + wp_die('权限不足'); + } + + $smtp_host = get_option('nenghui_smtp_host'); + $smtp_port = get_option('nenghui_smtp_port', '587'); + $smtp_secure = get_option('nenghui_smtp_secure', 'tls'); + + $diagnostic_results = []; + + // 1. 系统环境检查 + $diagnostic_results['system'] = nenghui_get_smtp_diagnostic_info(); + + // 2. 网络连通性测试 + $diagnostic_results['network'] = nenghui_test_network_connectivity(); + + // 3. DNS解析测试 + if (!empty($smtp_host)) { + $diagnostic_results['dns'] = nenghui_test_dns_resolution($smtp_host); + + // 4. 端口连接测试 + $diagnostic_results['port_test'] = nenghui_test_port_connection($smtp_host, $smtp_port); + + // 5. SSL/TLS连接测试 + if ($smtp_secure !== 'none') { + $diagnostic_results['ssl_test'] = nenghui_test_ssl_connection($smtp_host, $smtp_port, $smtp_secure); + } + } + + // 显示诊断结果 + add_action('admin_notices', function() use ($diagnostic_results) { + $output = '
'; + $output .= '

SMTP诊断报告

'; + + // 系统环境 + $output .= '

系统环境

'; + $output .= '
    '; + $output .= '
  • PHP版本: ' . esc_html($diagnostic_results['system']['php_version']) . '
  • '; + + foreach ($diagnostic_results['system']['extensions'] as $ext => $loaded) { + $status = $loaded ? '✓' : '✗'; + $color = $loaded ? 'green' : 'red'; + $output .= '
  • 扩展 ' . $ext . ': ' . $status . '
  • '; + } + + if (isset($diagnostic_results['system']['openssl_version'])) { + $output .= '
  • OpenSSL版本: ' . esc_html($diagnostic_results['system']['openssl_version']) . '
  • '; + } + + $output .= '
'; + + // 网络连通性测试 + if (isset($diagnostic_results['network'])) { + $output .= '

网络连通性测试

'; + $color = $diagnostic_results['network']['success'] ? 'green' : 'red'; + $output .= '

' . nl2br(esc_html($diagnostic_results['network']['message'])) . '

'; + + if (!empty($diagnostic_results['network']['tests'])) { + $output .= '
    '; + foreach ($diagnostic_results['network']['tests'] as $test) { + $output .= '
  • ' . esc_html($test) . '
  • '; + } + $output .= '
'; + } + } + + // DNS解析测试 + if (isset($diagnostic_results['dns'])) { + $output .= '

DNS解析测试

'; + $color = $diagnostic_results['dns']['success'] ? 'green' : 'red'; + $output .= '

' . nl2br(esc_html($diagnostic_results['dns']['message'])) . '

'; + + if (!empty($diagnostic_results['dns']['ip_addresses'])) { + $output .= '

解析到的IP地址:

'; + $output .= '
    '; + foreach ($diagnostic_results['dns']['ip_addresses'] as $ip) { + $output .= '
  • ' . esc_html($ip) . '
  • '; + } + $output .= '
'; + } + } + + // 端口连接测试 + if (isset($diagnostic_results['port_test'])) { + $output .= '

端口连接测试

'; + $color = $diagnostic_results['port_test']['success'] ? 'green' : 'red'; + $output .= '

' . nl2br(esc_html($diagnostic_results['port_test']['message'])) . '

'; + } + + // SSL/TLS连接测试 + if (isset($diagnostic_results['ssl_test'])) { + $output .= '

SSL/TLS连接测试

'; + $color = $diagnostic_results['ssl_test']['success'] ? 'green' : 'red'; + $output .= '

' . esc_html($diagnostic_results['ssl_test']['message']) . '

'; + + if ($diagnostic_results['ssl_test']['certificate_info']) { + $cert = $diagnostic_results['ssl_test']['certificate_info']; + $output .= '

证书信息:

'; + $output .= '
    '; + $output .= '
  • 主题: ' . esc_html($cert['subject']) . '
  • '; + $output .= '
  • 颁发者: ' . esc_html($cert['issuer']) . '
  • '; + $output .= '
  • 有效期: ' . esc_html($cert['valid_from']) . ' 至 ' . esc_html($cert['valid_to']) . '
  • '; + $output .= '
'; + } + } + + $output .= '
'; + echo $output; + }); +} + +// 处理诊断请求 +if (isset($_GET['nenghui_smtp_diagnostic']) && $_GET['nenghui_smtp_diagnostic'] === '1') { + add_action('admin_init', 'nenghui_run_smtp_diagnostic'); +} + +?> \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/inc/theme-setup.php b/wp-content/themes/nenghui-energy-theme-4/inc/theme-setup.php new file mode 100644 index 0000000..8af5c95 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/inc/theme-setup.php @@ -0,0 +1,1991 @@ + '主导航菜单' + )); +} +add_action('init', 'register_theme_menus'); + +/** + * 自定义网站底部版权信息和加载时间 + * 使用方法: + * 1. 此函数会自动在后台底部显示 + * 2. 在前台footer.php中显示,需添加以下代码: + * + */ +function footerText() { + $year = date('Y'); + return '

' . $year . ' © Shang hai Nenghui Energy | 版权所有 | 优化后加载耗时:' . timer_stop(0, 3) . '秒

'; +} + +// 在后台底部显示 +add_action('admin_footer_text', 'footerText', 9999); +// 在前台底部显示 +add_action('wp_footer', 'footerText', 9999); + +/** + * 启用图片懒加载机制 + * 为图片添加懒加载属性以提升页面性能 + */ +add_filter('wp_lazy_loading_enabled', '__return_true'); + +/** + * 为内容中的图片添加懒加载属性 + * @param string $content 文章内容 + * @return string 处理后的内容 + */ +function add_lazy_loading_to_images($content) { + if (is_feed() || is_preview()) { + return $content; + } + $content = preg_replace('/]*)(?/i', '', $content); + return $content; +} +add_filter('the_content', 'add_lazy_loading_to_images'); +add_filter('post_thumbnail_html', 'add_lazy_loading_to_images'); + +/** + * 禁用评论功能 + * 完全禁用WordPress的评论系统以避免comments.php弃用警告 + */ +function disable_comments_functionality() { + // 移除评论支持 + remove_post_type_support('post', 'comments'); + remove_post_type_support('page', 'comments'); + + // 移除评论相关的菜单项 + remove_menu_page('edit-comments.php'); + + // 移除评论相关的管理栏项目 + remove_action('admin_bar_menu', 'wp_admin_bar_comments_menu', 60); + + // 禁用评论feed + remove_action('wp_head', 'feed_links_extra', 3); + + // 重定向评论页面 + if (is_admin() && isset($_GET['page']) && $_GET['page'] === 'edit-comments.php') { + wp_redirect(admin_url()); + exit; + } +} +add_action('init', 'disable_comments_functionality'); +add_action('admin_init', 'disable_comments_functionality'); + +/** + * 关闭所有现有文章和页面的评论 + */ +function close_existing_comments() { + // 关闭新文章的评论 + update_option('default_comment_status', 'closed'); + + // 关闭新页面的评论 + update_option('default_ping_status', 'closed'); +} +add_action('admin_init', 'close_existing_comments'); + +/** + * 移除评论相关的元框 + */ +function remove_comment_metaboxes() { + remove_meta_box('commentsdiv', 'post', 'normal'); + remove_meta_box('commentstatusdiv', 'post', 'normal'); + remove_meta_box('trackbacksdiv', 'post', 'normal'); + remove_meta_box('commentsdiv', 'page', 'normal'); + remove_meta_box('commentstatusdiv', 'page', 'normal'); + remove_meta_box('trackbacksdiv', 'page', 'normal'); +} +add_action('admin_menu', 'remove_comment_metaboxes'); + +/** + * 隐藏评论相关的设置选项 + */ +function hide_comment_settings() { + echo ''; +} +add_action('admin_head-options-discussion.php', 'hide_comment_settings'); + +/** + * 移除评论相关的REST API端点 + */ +function disable_comments_rest_api($endpoints) { + // 确保 $endpoints 是数组且不为空 + if (!is_array($endpoints) || empty($endpoints)) { + return is_array($endpoints) ? $endpoints : array(); + } + + // 安全地移除评论相关的端点 + if (isset($endpoints['/wp/v2/comments'])) { + unset($endpoints['/wp/v2/comments']); + } + if (isset($endpoints['/wp/v2/comments/(?P[\d]+)'])) { + unset($endpoints['/wp/v2/comments/(?P[\d]+)']); + } + return $endpoints; +} +add_filter('rest_endpoints', 'disable_comments_rest_api'); + +/** + * 移除评论相关的小工具 + */ +function remove_comment_widgets() { + unregister_widget('WP_Widget_Recent_Comments'); +} +add_action('widgets_init', 'remove_comment_widgets'); + +/** + * 注册下载中心自定义文章类型 + */ +function register_download_center_post_type() { + $labels = array( + 'name' => '下载中心', + 'singular_name' => '下载项目', + 'menu_name' => '下载中心', + 'name_admin_bar' => '下载项目', + 'archives' => '下载归档', + 'attributes' => '下载属性', + 'parent_item_colon' => '父级下载项目:', + 'all_items' => '所有下载', + 'add_new_item' => '添加新下载', + 'add_new' => '添加新下载', + 'new_item' => '新下载项目', + 'edit_item' => '编辑下载', + 'update_item' => '更新下载', + 'view_item' => '查看下载', + 'view_items' => '查看下载', + 'search_items' => '搜索下载', + 'not_found' => '未找到下载项目', + 'not_found_in_trash' => '回收站中未找到下载项目', + 'featured_image' => '特色图像', + 'set_featured_image' => '设置特色图像', + 'remove_featured_image' => '移除特色图像', + 'use_featured_image' => '使用特色图像', + 'insert_into_item' => '插入到下载项目', + 'uploaded_to_this_item' => '上传到此下载项目', + 'items_list' => '下载列表', + 'items_list_navigation' => '下载列表导航', + 'filter_items_list' => '筛选下载列表', + ); + + $args = array( + 'label' => '下载中心', + 'description' => '管理下载中心的文件和资源', + 'labels' => $labels, + 'supports' => array('title', 'editor', 'thumbnail', 'custom-fields'), + 'taxonomies' => array('download_category'), + 'hierarchical' => false, + 'public' => true, + 'show_ui' => true, + 'show_in_menu' => true, + 'menu_position' => 20, + 'menu_icon' => 'dashicons-download', + 'show_in_admin_bar' => true, + 'show_in_nav_menus' => true, + 'can_export' => true, + 'has_archive' => true, + 'exclude_from_search' => false, + 'publicly_queryable' => true, + 'capability_type' => 'post', + 'show_in_rest' => true, + ); + + register_post_type('download_center', $args); +} +add_action('init', 'register_download_center_post_type', 0); + +/** + * 注册下载分类法 + */ +function register_download_category_taxonomy() { + $labels = array( + 'name' => '下载分类', + 'singular_name' => '下载分类', + 'menu_name' => '下载分类', + 'all_items' => '所有分类', + 'parent_item' => '父级分类', + 'parent_item_colon' => '父级分类:', + 'new_item_name' => '新分类名称', + 'add_new_item' => '添加新分类', + 'edit_item' => '编辑分类', + 'update_item' => '更新分类', + 'view_item' => '查看分类', + 'separate_items_with_commas' => '用逗号分隔分类', + 'add_or_remove_items' => '添加或移除分类', + 'choose_from_most_used' => '从常用分类中选择', + 'popular_items' => '热门分类', + 'search_items' => '搜索分类', + 'not_found' => '未找到分类', + 'no_terms' => '无分类', + 'items_list' => '分类列表', + 'items_list_navigation' => '分类列表导航', + ); + + $args = array( + 'labels' => $labels, + 'hierarchical' => true, + 'public' => true, + 'show_ui' => true, + 'show_admin_column' => true, + 'show_in_nav_menus' => true, + 'show_tagcloud' => true, + 'show_in_rest' => true, + ); + + register_taxonomy('download_category', array('download_center'), $args); +} +add_action('init', 'register_download_category_taxonomy', 0); + +/** + * 创建默认下载分类 + */ +function create_default_download_categories() { + // 检查是否已经创建过默认分类 + if (get_option('nenghui_download_categories_created')) { + return; + } + + // 创建 Company profile 分类 + if (!term_exists('Company profile', 'download_category')) { + wp_insert_term( + 'Company profile', + 'download_category', + array( + 'description' => '公司简介相关下载文件', + 'slug' => 'company-profile', + ) + ); + } + + // 创建 Product series 分类 + if (!term_exists('Product series', 'download_category')) { + wp_insert_term( + 'Product series', + 'download_category', + array( + 'description' => '产品系列相关下载文件', + 'slug' => 'product-series', + ) + ); + } + + // 标记已创建默认分类 + update_option('nenghui_download_categories_created', true); +} +add_action('init', 'create_default_download_categories'); + +/** + * 为下载中心添加自定义字段 + */ +function add_download_center_meta_boxes() { + add_meta_box( + 'download_file_info', + '下载文件信息', + 'download_file_info_callback', + 'download_center', + 'normal', + 'high' + ); +} +add_action('add_meta_boxes', 'add_download_center_meta_boxes'); + +/** + * 为下载中心编辑页面加载媒体库脚本 + */ +function enqueue_download_center_admin_scripts($hook) { + global $post; + + // 在下载中心和产品的编辑页面加载 + if ($hook == 'post-new.php' || $hook == 'post.php') { + if ('download_center' === $post->post_type || 'products' === $post->post_type) { + // 加载媒体库脚本 + wp_enqueue_media(); + } + } +} +add_action('admin_enqueue_scripts', 'enqueue_download_center_admin_scripts'); + +/** + * 下载文件信息元框回调函数 + */ +function download_file_info_callback($post) { + // 添加nonce字段用于安全验证 + wp_nonce_field('download_file_info_nonce', 'download_file_info_nonce'); + + // 获取现有值 + $download_url = get_post_meta($post->ID, '_download_url', true); + $file_size = get_post_meta($post->ID, '_file_size', true); + $file_type = get_post_meta($post->ID, '_file_type', true); + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo '
'; + echo ''; + echo ''; + echo '
可以直接输入链接,或点击"选择文件"从媒体库选择'; + echo '
'; + + echo '

请填写下载文件的相关信息。如果不填写下载链接,将使用特色图像作为下载文件。

'; + + // 添加JavaScript代码用于媒体库选择 + echo ''; +} + +/** + * 保存下载文件信息 + */ +function save_download_file_info($post_id) { + // 验证nonce + if (!isset($_POST['download_file_info_nonce']) || !wp_verify_nonce($_POST['download_file_info_nonce'], 'download_file_info_nonce')) { + return; + } + + // 检查用户权限 + if (!current_user_can('edit_post', $post_id)) { + return; + } + + // 检查是否为自动保存 + if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { + return; + } + + // 保存字段 + if (isset($_POST['download_url'])) { + update_post_meta($post_id, '_download_url', sanitize_url($_POST['download_url'])); + } + + if (isset($_POST['file_size'])) { + update_post_meta($post_id, '_file_size', sanitize_text_field($_POST['file_size'])); + } + + if (isset($_POST['file_type'])) { + update_post_meta($post_id, '_file_type', sanitize_text_field($_POST['file_type'])); + } +} +add_action('save_post', 'save_download_file_info'); + +/** + * 注册案例展示自定义文章类型 + */ +function register_cases_post_type() { + $labels = array( + 'name' => '案例展示', + 'singular_name' => '案例', + 'menu_name' => '案例展示', + 'name_admin_bar' => '案例', + 'archives' => '案例归档', + 'attributes' => '案例属性', + 'parent_item_colon' => '父级案例:', + 'all_items' => '所有案例', + 'add_new_item' => '添加新案例', + 'add_new' => '添加新案例', + 'new_item' => '新案例', + 'edit_item' => '编辑案例', + 'update_item' => '更新案例', + 'view_item' => '查看案例', + 'view_items' => '查看案例', + 'search_items' => '搜索案例', + 'not_found' => '未找到案例', + 'not_found_in_trash' => '回收站中未找到案例', + 'featured_image' => '案例特色图像', + 'set_featured_image' => '设置案例特色图像', + 'remove_featured_image' => '移除案例特色图像', + 'use_featured_image' => '使用案例特色图像', + 'insert_into_item' => '插入到案例', + 'uploaded_to_this_item' => '上传到此案例', + 'items_list' => '案例列表', + 'items_list_navigation' => '案例列表导航', + 'filter_items_list' => '筛选案例列表', + ); + + $args = array( + 'label' => '案例展示', + 'description' => '案例展示文章类型', + 'labels' => $labels, + 'supports' => array('title', 'editor', 'thumbnail', 'excerpt'), + 'taxonomies' => array('case_category'), + 'hierarchical' => false, + 'public' => true, + 'show_ui' => true, + 'show_in_menu' => true, + 'menu_position' => 6, + 'menu_icon' => 'dashicons-portfolio', + 'show_in_admin_bar' => true, + 'show_in_nav_menus' => true, + 'can_export' => true, + 'has_archive' => true, + 'exclude_from_search' => false, + 'publicly_queryable' => true, + 'capability_type' => 'post', + 'show_in_rest' => true, + 'rewrite' => array('slug' => 'cases'), + ); + + register_post_type('cases', $args); +} +add_action('init', 'register_cases_post_type', 0); + +/** + * 注册案例分类法 + */ +function register_case_category_taxonomy() { + $labels = array( + 'name' => '案例分类', + 'singular_name' => '案例分类', + 'menu_name' => '案例分类', + 'all_items' => '所有分类', + 'parent_item' => '父级分类', + 'parent_item_colon' => '父级分类:', + 'new_item_name' => '新分类名称', + 'add_new_item' => '添加新分类', + 'edit_item' => '编辑分类', + 'update_item' => '更新分类', + 'view_item' => '查看分类', + 'separate_items_with_commas' => '用逗号分隔分类', + 'add_or_remove_items' => '添加或移除分类', + 'choose_from_most_used' => '从最常用的分类中选择', + 'popular_items' => '热门分类', + 'search_items' => '搜索分类', + 'not_found' => '未找到分类', + 'no_terms' => '没有分类', + 'items_list' => '分类列表', + 'items_list_navigation' => '分类列表导航', + ); + + $args = array( + 'labels' => $labels, + 'hierarchical' => true, + 'public' => true, + 'show_ui' => true, + 'show_admin_column' => true, + 'show_in_nav_menus' => true, + 'show_tagcloud' => true, + 'show_in_rest' => true, + 'rewrite' => array('slug' => 'case-category'), + ); + + register_taxonomy('case_category', array('cases'), $args); +} +add_action('init', 'register_case_category_taxonomy', 0); + +/** + * 创建默认案例分类 + */ +function create_default_case_categories() { + // 检查是否已经创建过默认分类 + if (get_option('nenghui_case_categories_created')) { + return; + } + + // 创建 Power Station 分类 + if (!term_exists('Power Station', 'case_category')) { + wp_insert_term( + 'Power Station', + 'case_category', + array( + 'description' => '电站项目案例', + 'slug' => 'power-station', + ) + ); + } + + // 创建 PV Project 分类 + if (!term_exists('PV Project', 'case_category')) { + wp_insert_term( + 'PV Project', + 'case_category', + array( + 'description' => '光伏项目案例', + 'slug' => 'pv-project', + ) + ); + } + + // 创建 Agricultural Solar 分类 + if (!term_exists('Agricultural Solar', 'case_category')) { + wp_insert_term( + 'Agricultural Solar', + 'case_category', + array( + 'description' => '农业太阳能项目案例', + 'slug' => 'agricultural-solar', + ) + ); + } + + // 标记已创建默认分类 + update_option('nenghui_case_categories_created', true); +} +add_action('init', 'create_default_case_categories'); + +/** + * 注册产品自定义文章类型 + */ +function register_products_post_type() { + $labels = array( + 'name' => '产品管理', + 'singular_name' => '产品', + 'menu_name' => '产品管理', + 'name_admin_bar' => '产品', + 'archives' => '产品归档', + 'attributes' => '产品属性', + 'parent_item_colon' => '父级产品:', + 'all_items' => '所有产品', + 'add_new_item' => '添加新产品', + 'add_new' => '添加新产品', + 'new_item' => '新产品', + 'edit_item' => '编辑产品', + 'update_item' => '更新产品', + 'view_item' => '查看产品', + 'view_items' => '查看产品', + 'search_items' => '搜索产品', + 'not_found' => '未找到产品', + 'not_found_in_trash' => '回收站中未找到产品', + 'featured_image' => '产品特色图像', + 'set_featured_image' => '设置产品特色图像', + 'remove_featured_image' => '移除产品特色图像', + 'use_featured_image' => '使用产品特色图像', + 'insert_into_item' => '插入到产品', + 'uploaded_to_this_item' => '上传到此产品', + 'items_list' => '产品列表', + 'items_list_navigation' => '产品列表导航', + 'filter_items_list' => '筛选产品列表', + ); + + $args = array( + 'label' => '产品管理', + 'description' => '产品展示和管理', + 'labels' => $labels, + 'supports' => array('title', 'custom-fields'), + 'hierarchical' => false, + 'public' => true, + 'show_ui' => true, + 'show_in_menu' => true, + 'menu_position' => 5, + 'menu_icon' => 'dashicons-products', + 'show_in_admin_bar' => true, + 'show_in_nav_menus' => true, + 'can_export' => true, + 'has_archive' => true, + 'exclude_from_search' => false, + 'publicly_queryable' => true, + 'capability_type' => 'post', + 'show_in_rest' => true, + 'rewrite' => array('slug' => 'products'), + ); + + register_post_type('products', $args); +} +add_action('init', 'register_products_post_type', 0); + +/** + * 添加产品Banner图片meta box + */ +function add_products_banner_meta_box() { + add_meta_box( + 'product_banner_meta_box', + '产品Banner图片', + 'product_banner_meta_box_callback', + 'products', + 'normal', + 'high' + ); +} +add_action('add_meta_boxes', 'add_products_banner_meta_box'); + +/** + * 添加产品特性meta box + */ +function add_products_features_meta_box() { + add_meta_box( + 'product_features_meta_box', + '产品特性设置', + 'product_features_meta_box_callback', + 'products', + 'normal', + 'high' + ); +} +add_action('add_meta_boxes', 'add_products_features_meta_box'); + +/** + * 添加使用场景meta box + */ +function add_products_usage_scenario_meta_box() { + add_meta_box( + 'product_usage_scenario_meta_box', + '使用场景设置', + 'product_usage_scenario_meta_box_callback', + 'products', + 'normal', + 'high' + ); +} +add_action('add_meta_boxes', 'add_products_usage_scenario_meta_box'); + +/** + * 添加技术规格meta box + */ +function add_products_technical_specs_meta_box() { + add_meta_box( + 'product_technical_specs_meta_box', + '技术规格设置', + 'product_technical_specs_meta_box_callback', + 'products', + 'normal', + 'high' + ); +} +add_action('add_meta_boxes', 'add_products_technical_specs_meta_box'); + +/** + * 添加产品PDF下载meta box + */ +function add_products_pdf_downloads_meta_box() { + add_meta_box( + 'product_pdf_downloads_meta_box', + 'PDF下载设置', + 'product_pdf_downloads_meta_box_callback', + 'products', + 'normal', + 'high' + ); +} +add_action('add_meta_boxes', 'add_products_pdf_downloads_meta_box'); + +/** + * 添加产品描述meta box + */ +function add_products_description_meta_box() { + add_meta_box( + 'product_description_meta_box', + '产品描述', + 'product_description_meta_box_callback', + 'products', + 'normal', + 'high' + ); +} +add_action('add_meta_boxes', 'add_products_description_meta_box'); + +/** + * 产品Banner图片meta box回调函数 + */ +function product_banner_meta_box_callback($post) { + wp_nonce_field('save_product_banner', 'product_banner_nonce'); + + $banner_url = get_post_meta($post->ID, '_product_banner_url', true); + ?> + + + + + +
+ + +
建议尺寸:1920x600像素 + +
+ +
+ +
+ + + ID, '_product_description', true); + ?> +
+ + 'product_description', + 'textarea_rows' => 8, + 'media_buttons' => true, + 'teeny' => false, + 'dfw' => false, + 'tinymce' => array( + 'resize' => false, + 'wp_autoresize_on' => true, + 'add_unload_trigger' => false, + 'toolbar1' => 'bold,italic,underline,strikethrough,|,bullist,numlist,blockquote,|,link,unlink,|,spellchecker,fullscreen,wp_adv', + 'toolbar2' => 'formatselect,forecolor,backcolor,|,pastetext,removeformat,charmap,|,outdent,indent,|,undo,redo' + ), + 'quicktags' => array( + 'buttons' => 'strong,em,ul,ol,li,link,close' + ) + ); + + // 输出富文本编辑器 + wp_editor($product_description, 'product_description', $editor_settings); + ?> +

此描述将显示在产品页面的标题下方,用于简要介绍产品特点和用途。支持富文本格式。

+
+ ID, '_show_product_features', true); + if ($show_features === '') { + $show_features = '1'; // 默认显示 + } + + $features = get_post_meta($post->ID, '_product_features', true); + if (!is_array($features)) { + $features = array(); + } + + // 默认特性数据(与前端硬编码内容保持一致) + $default_features = array( + array( + 'title' => 'COMPACT
DESIGN', + 'description' => 'Light footprint, easy frame
installation and field installation.', + 'icon' => 'product-icon-1.webp', + 'alt' => 'Compact Design' + ), + array( + 'title' => 'HIGH
INTEGRATION', + 'description' => '20kWh+ energy in one cabinet
with DC/AC power conversion
& thermal cooling.', + 'icon' => 'product-icon-2.webp', + 'alt' => 'High Integration' + ), + array( + 'title' => 'EFFICIENT
COOLING', + 'description' => 'Optimal air-duct design optimizes
airflow for improved cooling with low
energy consumption.', + 'icon' => 'product-icon-3.webp', + 'alt' => 'Efficient Cooling' + ), + array( + 'title' => 'LONG
CYCLE LIFE', + 'description' => 'Over 6,000 times cycle life, excellent
performance of battery system.', + 'icon' => 'product-icon-4.webp', + 'alt' => 'Long Cycle Life' + ), + array( + 'title' => 'FLEXIBLE
EXPANSION', + 'description' => 'Modular design, simplified panel
for expansion.', + 'icon' => 'product-icon-5.webp', + 'alt' => 'Flexible Expansion' + ), + array( + 'title' => 'ULTIMATE
SAFETY', + 'description' => 'Comprehensive safety protection
with NOVEC1230 thermal prevent
heat diffusion and spreading.', + 'icon' => 'product-icon-6.webp', + 'alt' => 'Ultimate Safety' + ) + ); + + // 如果没有保存的数据,使用默认数据 + if (empty($features)) { + $features = $default_features; + } + + ?> +
+

产品特性板块设置:

+ +
+ +

勾选此选项将在前端显示产品特性卡片,取消勾选将隐藏整个板块。

+
+ +
+
+

产品特性卡片管理

+ +
+ +
+ $feature): ?> +
+
+

特性

+
+ + + +
+
+ + + + + + + + + + + + + + + + + +
+ + 可以使用 <br> 标签换行 +
+ + 可以使用 <br> 标签换行 +
+
+ + +
+ 图标文件名或完整URL + +
+ + +
+ +
+ + 图片的Alt属性,用于无障碍访问和SEO +
+
+ +
+
+ +

注意:修改后需要点击"更新"按钮保存设置。

+
+ + + + + sanitize_text_field($feature['title']), + 'description' => sanitize_textarea_field($feature['description']), + 'icon' => sanitize_text_field($feature['icon']), + 'alt' => sanitize_text_field($feature['alt']) + ); + } + update_post_meta($post_id, '_product_features', $features); + } +} +add_action('save_post', 'save_product_features'); + +/** + * 使用场景meta box回调函数 + */ +function product_usage_scenario_meta_box_callback($post) { + wp_nonce_field('save_product_usage_scenario', 'product_usage_scenario_nonce'); + + // 获取使用场景显示开关和数据 + $show_usage_scenario = get_post_meta($post->ID, '_show_usage_scenario', true); + if ($show_usage_scenario === '') { + $show_usage_scenario = '1'; // 默认显示 + } + + $usage_scenario_data = get_post_meta($post->ID, '_usage_scenario_data', true); + if (!is_array($usage_scenario_data)) { + $usage_scenario_data = array(); + } + + // 默认使用场景数据 + $default_data = array( + 'title' => 'USAGE SCENARIO', + 'description' => 'Off-grid PV, energy storage, diesel generation, and charging post', + 'image' => 'Usage scenario.webp', + 'bottom_text' => 'Nenghui all-in-one liquid-cooled ESS cabinet adopts advanced cabinet-level liquid cooling and temperature balancing strategy. The cell temperature difference is less than 3°C, which further improves the consistency of cell temperature and extends the battery life. The modular design makes the parallel solution more flexible and has a higher energy density, which significantly improves the economy, safety and construction convenience of ESS projects.' + ); + + // 如果没有保存的数据,使用默认数据 + if (empty($usage_scenario_data)) { + $usage_scenario_data = $default_data; + } + + ?> +
+

使用场景板块设置:

+ +
+ +

勾选此选项将在前端显示使用场景板块,取消勾选将隐藏整个板块。

+
+ + + + + + + + + + + + + + + + + + +
+ + 使用场景板块的主标题 +
+ + 使用场景的简短描述 +
+ + +
图片URL或文件名(如:Usage scenario.webp),如果是文件名,文件应放在 /assets/images/ 目录下 + +
+ + +
+ +
+ + 使用场景图片下方的详细说明文字 +
+ +

注意:修改后需要点击"更新"按钮保存设置。图片文件需要手动上传到主题的 assets/images 目录。

+
+ + + + + ID, '_show_technical_specs', true); + if ($show_technical_specs === '') { + $show_technical_specs = '1'; // 默认显示 + } + + $technical_specs_data = get_post_meta($post->ID, '_technical_specs_data', true); + if (!is_array($technical_specs_data)) { + $technical_specs_data = array(); + } + + // 默认技术规格数据 + $default_specs = array( + array( + 'title' => 'DC Side', + 'content' => '
Cell TypeLFP280Ah
PACK46.592kWh/IP25S
Battery System232.96kWh/IP260S
Rated Voltage832Vdc
Voltage Range728-936Vdc
Pack Ingress RatingIP65
', + 'expanded' => true + ), + array( + 'title' => 'AC Side', + 'content' => '
Rated Power100kW
Max. Power110kW
THDi≤3%
DC Ratio≤0.5%lon
Nominal Voltage400Vac/3P+N+PE
Power Factor-1lagging~1leading
Nominal Frequency50Hz/60Hz
', + 'expanded' => false + ) + ); + + // 如果没有保存的数据,使用默认数据 + if (empty($technical_specs_data)) { + $technical_specs_data = $default_specs; + } + + ?> +
+

技术规格板块设置:

+ +
+ +

勾选此选项将在前端显示技术规格折叠面板,取消勾选将隐藏整个板块。

+
+ +
+

技术规格面板:

+
+ $spec): ?> +
+
+

面板

+ +
+ + + + + + + + + + + + + +
+ +
+ /> + 勾选此项,该面板将默认展开显示 +
+ 'technical_specs_data[' . $index . '][content]', + 'media_buttons' => true, + 'textarea_rows' => 10, + 'teeny' => false, + 'tinymce' => array( + 'toolbar1' => 'bold,italic,underline,strikethrough,|,bullist,numlist,|,link,unlink,|,undo,redo', + 'toolbar2' => '', + 'plugins' => 'link,lists' + ) + ); + wp_editor($spec['content'], $editor_id, $settings); + ?> + 可以使用富文本编辑器编辑内容,支持文本格式化、列表和链接 +
+
+ +
+ +
+ +
+
+ +

注意:修改后需要点击"更新"按钮保存设置。第一个面板默认展开,其他面板默认折叠。

+
+ + + + + $spec) { + if (!empty($spec['title'])) { + $technical_specs_data[] = array( + 'title' => sanitize_text_field($spec['title']), + 'content' => wp_kses_post($spec['content']), + 'expanded' => !empty($spec['expanded']) + ); + } + } + + update_post_meta($post_id, '_technical_specs_data', $technical_specs_data); + } +} +add_action('save_post', 'save_product_technical_specs'); + +/** + * 产品PDF下载meta box回调函数 + */ +function product_pdf_downloads_meta_box_callback($post) { + wp_nonce_field('save_product_pdf_downloads', 'product_pdf_downloads_nonce'); + + // 获取显示开关 + $show_pdf_downloads = get_post_meta($post->ID, '_show_pdf_downloads', true); + if ($show_pdf_downloads === '') { + $show_pdf_downloads = '1'; // 默认显示 + } + + // 获取PDF下载数据 + $pdf_downloads_data = get_post_meta($post->ID, '_pdf_downloads_data', true); + if (empty($pdf_downloads_data)) { + $pdf_downloads_data = array( + array( + 'title' => 'Nenghui\'s innovative 40', + 'file_url' => '', + 'file_size' => '', + 'description' => '' + ) + ); + } + ?> + + + + + +
+ /> + 勾选此项将在产品页面显示PDF下载板块 +
+ +
+

PDF文件列表

+ $pdf): ?> +
+
+

PDF文件

+ +
+ + + + + + + + + + + + + + + + + +
+ + + 仅支持PDF格式文件 +
+
+ +
+ +

+ +

+ + + $pdf) { + if (!empty($pdf['title']) || !empty($pdf['file_url'])) { + $pdf_downloads_data[] = array( + 'title' => sanitize_text_field($pdf['title']), + 'file_url' => esc_url_raw($pdf['file_url']), + 'file_size' => sanitize_text_field($pdf['file_size']), + 'description' => sanitize_textarea_field($pdf['description']) + ); + } + } + + update_post_meta($post_id, '_pdf_downloads_data', $pdf_downloads_data); + } +} +add_action('save_post', 'save_product_pdf_downloads'); + +?> \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/index.php b/wp-content/themes/nenghui-energy-theme-4/index.php new file mode 100644 index 0000000..0b7af22 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/index.php @@ -0,0 +1,39 @@ + + + +
+
+
+ + + + + '上一页', + 'next_text' => '下一页', + )); ?> + +

暂无文章。

+ +
+
+ +
+
+
+ + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/page-full-width.php b/wp-content/themes/nenghui-energy-theme-4/page-full-width.php new file mode 100644 index 0000000..d3088da --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/page-full-width.php @@ -0,0 +1,16 @@ + + + +
+
+
+ +
+
+
+ + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/page-polocy-cookie.php b/wp-content/themes/nenghui-energy-theme-4/page-polocy-cookie.php new file mode 100644 index 0000000..50abe9f --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/page-polocy-cookie.php @@ -0,0 +1,104 @@ + + + +
+ + +
+
+
+ +
+
+
+
+
+ + + +
+
+ +
+
+
+
+
+
+
+ + + + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/page-prompt.php b/wp-content/themes/nenghui-energy-theme-4/page-prompt.php new file mode 100644 index 0000000..985ea48 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/page-prompt.php @@ -0,0 +1,112 @@ + + + +
+ +
+
+ +
+
+ + + + +
+ + diff --git a/wp-content/themes/nenghui-energy-theme-4/page.php b/wp-content/themes/nenghui-energy-theme-4/page.php new file mode 100644 index 0000000..d029faa --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/page.php @@ -0,0 +1,28 @@ + + + +
+
+
+
> +
+

+
+
+ + +
+
+ +
+
+ +
+
+
+ + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/screenshot.png b/wp-content/themes/nenghui-energy-theme-4/screenshot.png new file mode 100644 index 0000000..96b2f74 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-4/screenshot.png differ diff --git a/wp-content/themes/nenghui-energy-theme-4/search.php b/wp-content/themes/nenghui-energy-theme-4/search.php new file mode 100644 index 0000000..700a86d --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/search.php @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/sidebar.php b/wp-content/themes/nenghui-energy-theme-4/sidebar.php new file mode 100644 index 0000000..df7b966 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/sidebar.php @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/single-cases.php b/wp-content/themes/nenghui-energy-theme-4/single-cases.php new file mode 100644 index 0000000..efde858 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/single-cases.php @@ -0,0 +1,13 @@ + + + +
+
+
+ +
+

+ + +
+
+
+
+ + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/style.css b/wp-content/themes/nenghui-energy-theme-4/style.css new file mode 100644 index 0000000..8b373c0 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/style.css @@ -0,0 +1,572 @@ +@charset "UTF-8"; + /* + Theme Name: 上海能辉科技定制前端 + Theme URI: https://www.nhet.energy/ + Author: 上海能辉科技 + Description: 上海能辉科技,基于 WordPress 定制的专用前端主题(已修复安全问题版本) + Version: 1.5.0 + */ + + /* CSS文件已通过functions.php中的wp_enqueue_style正确加载,移除@import以提升性能 */ +/* 字体声明 - 优先使用主题文件夹中的字体 */ + + /* 你可以在这里写一些自定义的全局CSS样式 */ + * { + margin:0; + padding:0; + font-family: "PingFang SC", "Helvetica Neue", Helvetica, Arial, sans-serif; + box-sizing: border-box; + } + table{ + width: 100%!important; + max-width: 100%!important; + } + /* 防止横向滚动条 */ + html, body { + overflow-x: hidden; + max-width: 100%; + } + body { + background: #f7f7f7; + background-repeat: no-repeat; + background-attachment: fixed; + background-position: 50% 50%; + padding-top: 80px; + } + .page-full-width{ + max-width: 100%; + width: 100%; + height: auto; + margin-top: -5rem; + background: #fff; + } + .page-full-width .row { + margin-left: 0; + margin-right: 0; + } + h1, h2, h3, h4, h5, h6 { + font-weight: bold; + color: #333; + margin-bottom: 1rem; + transition: all 0.3s ease; + } + h2{ + font-size: 20px; + } + strong, b { + font-weight: bold; + color: #2c3e50; + transition: all 0.3s ease; + } + .tinytyper { + font-size:3rem; + margin-top:10px; + text-align:center; + } + #footer { + font-size: 16px; + display: flex; + justify-content: center; + padding: 10px; + } + .article-c, .box-b { + width: 70%; + text-align: center; + padding: 20px; + height: auto; + margin: 0 auto; + } + .box-b { + text-align: center; + margin-bottom: 10px; + } + .box-c { + background: white; + border-color: #EEEEEE; + box-shadow: 0 0 10px 0 rgb(0 0 0 / 6%); + margin: 0 auto; + border: 1px solid #eee; + border-radius: 0 0 10px 10px; + padding: 20px; + } + + /* 导航菜单样式 */ + .main-nav { + position: fixed; + top: 0; + left: 0; + right: 0; + height: 80px; + z-index: 1000; + transition: transform 0.3s ease; + background-color: #fff;; + + } + + .nav-container { + max-width: 80%; + margin: 0 auto; + padding: 0 20px; + height: 100%; + display: flex; + align-items: center; + justify-content: space-between; + } + + .nav-logo { + display: flex; + align-items: center; + height: 100%; + padding: 10px; + border-radius: 0 0 10px 10px; + } + + .nav-logo a { + display: flex; + align-items: center; + text-decoration: none; + } + + .nav-logo img { + height: 30px; + width: auto; + } + + .nav-logo span { + font-size: 1.2rem; + font-weight: 500; + color: #333; + margin-left: 10px; + } + + .nav-menu { + height: 100%; + } + + .menu-items { + height: 100%; + display: flex; + align-items: center; + margin: 0; + padding: 0; + list-style: none; + } + + .menu-items li { + margin: 0 15px; + height: 100%; + display: flex; + align-items: center; + position: relative; + } + + .menu-items li a { + color: #333; + text-decoration: none; + font-size: 1rem; + font-weight: 500; + padding: 8px 0; + border-radius: 4px; + transition: all 0.3s ease; + } + + .menu-items li a:hover { + background: rgba(0, 0, 0, 0.05); + color: #000; + } + + /* 下拉菜单样式 */ + + .menu-items li.menu-item-has-children > a { + position: relative; + } + + .menu-items li.menu-item-has-children > a .dropdown-arrow { + font-size: 0.7rem; + margin-left: 8px; + transition: transform 0.3s ease; + display: inline-block; + color: inherit; + } + + .menu-items li.menu-item-has-children:hover > a .dropdown-arrow { + transform: rotate(180deg); + } + + .sub-menu { + position: absolute; + top: 100%; + left: 0; + min-width: 220px; + background: #fff; + box-shadow: 0 8px 25px rgba(0, 0, 0, 0.15); + border-radius: 8px; + padding: 8px 0; + margin: 0; + list-style: none; + opacity: 0; + visibility: hidden; + transform: translateY(-15px); + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + z-index: 1000; + border: 1px solid rgba(0, 0, 0, 0.08); + } + + .menu-items li:hover > .sub-menu { + opacity: 1; + visibility: visible; + transform: translateY(0); + } + + .sub-menu li { + width: 100%; + margin: 0; + height: auto; + display: block; + position: relative; + } + + .sub-menu li a { + display: block; + padding: 12px 20px; + color: #333 !important; + font-size: 0.9rem; + border-radius: 0; + transition: all 0.3s ease; + white-space: nowrap; + border-bottom: 1px solid rgba(0, 0, 0, 0.05); + } + + .sub-menu li:last-child a { + border-bottom: none; + } + + .sub-menu li a:hover { + background: #f8f9fa; + color: #007cba !important; + padding-left: 25px; + } + + /* 三级菜单样式 */ + .sub-menu .menu-item-has-children { + position: relative; + } + + .sub-menu .menu-item-has-children > a .dropdown-arrow { + float: right; + transform: rotate(-90deg); + } + + .sub-menu .menu-item-has-children:hover > a .dropdown-arrow { + transform: rotate(90deg); + } + + /* 多级下拉菜单 */ + .sub-menu .sub-menu { + top: 0; + left: 100%; + margin-left: 2px; + margin-top: -8px; + } + + .sub-menu li:hover > .sub-menu { + opacity: 1; + visibility: visible; + transform: translateY(0); + } + + /* 为有子菜单的项目添加箭头 */ + .sub-menu li.menu-item-has-children > a::after { + content: '▶'; + float: right; + font-size: 0.7rem; + color: #999; + transition: color 0.3s ease; + } + + .sub-menu li.menu-item-has-children:hover > a::after { + color: #007cba; + } + + .sub-menu .menu-item-has-children:hover > .sub-menu { + opacity: 1; + visibility: visible; + transform: translateY(0); + } + + .menu-toggle { + display: none; + background: none; + border: none; + cursor: pointer; + padding: 10px; + } + + .menu-toggle span { + display: block; + width: 25px; + height: 2px; + background: #fff; + margin: 5px 0; + transition: all 0.3s ease; + } + + .main-nav.scrolled .menu-toggle span { + background: #888; + } + + /* 响应式设计 */ + @media screen and (max-width: 768px) { + .menu-toggle { + display: block; + } + + .nav-menu { + position: fixed; + top: 80px; + left: 0; + right: 0; + background: rgba(255, 255, 255, 0.95); + backdrop-filter: blur(10px); + -webkit-backdrop-filter: blur(10px); + padding: 20px; + transform: translateY(-100%); + opacity: 0; + visibility: hidden; + transition: all 0.3s ease; + max-height: calc(100vh - 80px); + overflow-y: auto; + } + + .nav-menu.active { + transform: translateY(0); + opacity: 1; + visibility: visible; + height: auto; + } + + .menu-items { + flex-direction: column; + align-items: flex-start; + height: auto; + } + + .menu-items li { + width: 100%; + margin: 0; + height: auto; + display: block; + } + + .menu-items li a { + display: block; + padding: 15px 0; + color: #333 !important; + border-bottom: 1px solid #eee; + position: relative; + } + + /* 移动端下拉箭头 */ + .menu-items li.menu-item-has-children > a .dropdown-arrow { + position: absolute; + right: 0; + top: 50%; + transform: translateY(-50%); + font-size: 0.8rem; + float: none; + } + + /* 移动端下拉菜单样式 */ + .sub-menu { + position: static; + background: #f8f9fa; + box-shadow: none; + border-radius: 0; + padding: 0; + opacity: 1; + visibility: visible; + transform: none; + max-height: 0; + overflow: hidden; + transition: max-height 0.3s ease; + border: none; + min-width: auto; + } + + .menu-items li.menu-item-has-children.mobile-open > .sub-menu { + max-height: 500px; + } + + .sub-menu li { + border-bottom: 1px solid #e0e0e0; + } + + .sub-menu li:last-child { + border-bottom: none; + } + + .sub-menu li a { + padding: 12px 0 12px 20px; + border-bottom: none; + font-size: 0.9rem; + background: #f8f9fa; + color: #333 !important; + } + + .sub-menu .sub-menu li a { + padding-left: 40px; + background: #f0f0f0; + } + + .sub-menu .sub-menu { + margin: 0; + left: 0; + top: 0; + } + + .sub-menu .sub-menu .sub-menu li a { + padding-left: 60px; + background: #e8e8e8; + } + + .menu-items li.menu-item-has-children > a .dropdown-arrow { + transform: rotate(0deg); + } + + .menu-items li.menu-item-has-children.mobile-open > a .dropdown-arrow { + transform: rotate(180deg); + } + + .sub-menu .menu-item-has-children > a .dropdown-arrow { + transform: rotate(0deg); + } + + .sub-menu .menu-item-has-children.mobile-open > a .dropdown-arrow { + transform: rotate(180deg); + } + + /* 移动端子菜单箭头 */ + .sub-menu li.menu-item-has-children > a::after { + position: absolute; + right: 0; + top: 50%; + transform: translateY(-50%); + float: none; + } + + /* Fluent Form 移动端宽度调整 */ + .fluentform.ff-default.fluentform_wrapper_3.ffs_default_wrap { + width: 80% !important; + margin-left: auto; + margin-right: auto; + } + form.fluent_form_3 .ff-btn-submit:not(.ff_btn_no_style) { + width: 100% !important; + } + form.fluent_form_1 .ff-btn-submit:not(.ff_btn_no_style){ + width: 100%; + } + } + + /* 文章卡片网格布局 */ + .content-area { + max-width: 1200px; + margin: 0 auto; + padding: 20px; + } + + .posts-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 30px; + margin-bottom: 40px; + } + + /* 文章卡片样式 */ + .post-card { + background: white; + border-radius: 12px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05); + transition: transform 0.3s ease, box-shadow 0.3s ease; + overflow: hidden; + } + + .post-card:hover { + transform: translateY(-5px); + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1); + transition: all 0.3s ease; + } + + .post-content { + padding: 20px; + } + + .post-title { + margin: 0 0 15px 0; + font-size: 1.25rem; + line-height: 1.4; + } + + .post-title a { + color: #333; + text-decoration: none; + transition: color 0.2s ease; + } + + .post-title a:hover { + color: #007bff; + transition: all 0.3s ease; + } + + .post-meta { + font-size: 0.875rem; + color: #666; + margin-bottom: 15px; + display: flex; + gap: 15px; + } + + .post-date, .post-category { + display: flex; + align-items: center; + } + + .post-category a { + color: #666; + text-decoration: none; + } + + .post-category a:hover { + color: #007bff; + transition: all 0.3s ease; + } + + .post-excerpt { + color: #666; + font-size: 0.95rem; + line-height: 1.6; + margin: 0; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 3; + line-clamp: 3; + -webkit-box-orient: vertical; + } + + /* 无文章提示 */ + .no-posts { + text-align: center; + padding: 40px; + background: white; + border-radius: 12px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05); + } + + .no-posts h2 { + color: #666; + font-size: 1.5rem; + margin: 0; + } + .accordion-body{ + color: #000000!important; + } \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/black-about-company-banner.php b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/black-about-company-banner.php new file mode 100644 index 0000000..0672c38 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/black-about-company-banner.php @@ -0,0 +1,154 @@ + +
data-animation="true"> +
+ +
+
\ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/black-about-info.php b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/black-about-info.php new file mode 100644 index 0000000..306f326 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/black-about-info.php @@ -0,0 +1,138 @@ + + + + +
+
+ +
+

Our Warehousing and Distribution Project

+
+ + +
+ +
+

Key Details and Features

+ +
    +
  • + · + Address: Koning Leopoldlaan 5, 2870 Puurs +
  • +
  • + · + CO2 Neutral Warehouse +
  • +
  • + · + 22 loading docks +
  • +
  • + · + Immediately available +
  • +
  • + · + Next to major road connection +
  • +
  • + · + Existing battery and ESS flows +
  • +
  • + · + Bonded warehouse +
  • +
  • + · + 22500 sqm +
  • +
  • + · + Heavy material handling equipment available up to 3 tons payload +
  • +
+
+ + +
+
+ Warehousing Facility +
+
+
+ + +
+
+ Warehousing Distribution Center +
+
+
+
+ + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/black-maps.php b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/black-maps.php new file mode 100644 index 0000000..62ce6bb --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/black-maps.php @@ -0,0 +1,465 @@ + + +
+
+
+
+
+ + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/black-products-banner.php b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/black-products-banner.php new file mode 100644 index 0000000..b771408 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/black-products-banner.php @@ -0,0 +1,582 @@ + $image, + 'title' => $title, + 'description' => $description, + 'link' => $link + ); + } + + // 限制显示数量 + if (count($products) >= $products_count) { + break; + } +} + +// 如果没有产品数据,不显示区块 +if (empty($products)) { + return; +} +?> + + + + +
data-aos="fade-up"> +
+
+ +
+

What We Offer

+
+ + +
+
+ $product): ?> +
+
+
+

+ +

+ + + + + + +
+
+ <?php echo esc_attr($product['title']); ?> +
+
+
+ +
+ + +
+ + +
+
+
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-about-company.php b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-about-company.php new file mode 100644 index 0000000..e6eba98 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-about-company.php @@ -0,0 +1,375 @@ + get_theme_mod('about_company_stat_' . $i . '_number', ''), + 'label' => get_theme_mod('about_company_stat_' . $i . '_label', ''), + 'icon' => get_theme_mod('about_company_stat_' . $i . '_icon', get_template_directory_uri() . '/assets/images/about-icon-' . $i . '.svg') + ); +} + +// 设置默认统计数据 +$default_stats = array( + array('number' => '130+', 'label' => 'Patents', 'icon' => get_template_directory_uri() . '/assets/images/about-icon-1-1.svg'), + array('number' => '70%', 'label' => 'R&D employees', 'icon' => get_template_directory_uri() . '/assets/images/about-icon-2-2.svg'), + array('number' => '100+', 'label' => 'Solar power stations', 'icon' => get_template_directory_uri() . '/assets/images/about-icon-3-3.svg'), + array('number' => '200+', 'label' => 'Grid engineering projects', 'icon' => get_template_directory_uri() . '/assets/images/about-icon-4-4.svg'), +); + +// 如果自定义器中没有设置,使用默认值 +for ($i = 0; $i < 4; $i++) { + if (empty($stats[$i]['number'])) { + $stats[$i] = $default_stats[$i]; + } +} +?> + +
+
+
+ +
+
+

+
+

+
+ + +
+ $stat): ?> +
+
+ <?php echo esc_attr($stat['label']); ?> +
+
+
+
+
+
+ +
+
+
+ + +
+
+ <?php echo esc_attr($title); ?> +
+
+
+
+
+

+
+
+ + + + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-about-nav.php b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-about-nav.php new file mode 100644 index 0000000..6c031b7 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-about-nav.php @@ -0,0 +1,527 @@ +menu_id = !empty($atts['menu_id']) ? $atts['menu_id'] : get_theme_mod('about_nav_menu_id', ''); + $this->element_id = !empty($atts['id']) ? $atts['id'] : 'nenghui-about-nav'; + $this->css_class = !empty($atts['class']) ? $atts['class'] : ''; + } + + public function get_menu_items() { + if (empty($this->menu_id)) { + return array(); + } + + // 验证菜单ID是否为有效的数字 + $menu_id = intval($this->menu_id); + if ($menu_id <= 0) { + return array(); + } + + // 检查菜单是否存在 + $menu = wp_get_nav_menu_object($menu_id); + if (!$menu || is_wp_error($menu)) { + return array(); + } + + // 获取菜单项 + $menu_items = wp_get_nav_menu_items($menu_id); + + if (!$menu_items || is_wp_error($menu_items) || !is_array($menu_items)) { + return array(); + } + + // 过滤掉无效的菜单项 + $menu_items = array_filter($menu_items, function($item) { + return $item && !empty($item->title); + }); + + // 处理菜单项数据 + $processed_items = array(); + foreach ($menu_items as $item) { + $processed_items[] = array( + 'id' => $item->ID, + 'title' => $item->title, + 'url' => $item->url, + 'target' => $item->target, + 'classes' => implode(' ', $item->classes), + 'is_current' => $this->is_current_page($item->url) + ); + } + + return $processed_items; + } + + private function is_current_page($url) { + // 安全地获取当前URL + $request_uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : ''; + if (empty($request_uri)) { + return false; + } + + $current_url = home_url($request_uri); + $parsed_url = parse_url($url); + $parsed_current = parse_url($current_url); + + // 确保解析结果是数组 + if (!is_array($parsed_url) || !is_array($parsed_current)) { + return false; + } + + // 比较路径 + if (isset($parsed_url['path']) && isset($parsed_current['path'])) { + return rtrim($parsed_url['path'], '/') === rtrim($parsed_current['path'], '/'); + } + + return false; + } +} +} + +// 初始化配置 +$config = new AboutNavConfig($shortcode_atts); +$menu_items = $config->get_menu_items(); + +// 获取自定义器设置 +$nav_bg_color = get_theme_mod('about_nav_bg_color', '#ffffff'); +$nav_text_color = get_theme_mod('about_nav_text_color', '#333333'); +$nav_active_color = get_theme_mod('about_nav_active_color', '#007cba'); +$nav_style = get_theme_mod('about_nav_style', 'horizontal'); +$nav_position = get_theme_mod('about_nav_position', 'top'); + +// 如果没有菜单项,显示提示信息 +if (!is_array($menu_items) || empty($menu_items)) { + $debug_info = ''; + if (defined('WP_DEBUG') && WP_DEBUG) { + // 获取所有可用菜单进行调试 + $all_menus = wp_get_nav_menus(); + $available_menus = array(); + if (is_array($all_menus)) { + foreach ($all_menus as $menu) { + $available_menus[] = $menu->term_id . ':' . $menu->name; + } + } + $debug_info = '
调试信息: 当前菜单ID = ' . esc_html($config->menu_id) . + '
可用菜单: ' . esc_html(implode(', ', $available_menus)) . '
'; + } + echo '
请在自定义器中设置 About 导航菜单' . $debug_info . '
'; + return; +} +?> + + + + + + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-banner-title.php b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-banner-title.php new file mode 100644 index 0000000..a1254ef --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-banner-title.php @@ -0,0 +1,496 @@ +shortcode_atts = $banner_title_shortcode_atts; + } + + /** + * 获取标题 + */ + public function getTitle() { + $title = !empty($this->shortcode_atts['title']) + ? $this->shortcode_atts['title'] + : get_theme_mod('banner_title_main_title', 'ABOUT US'); + + // 根据title参数返回合适的显示文本 + switch (strtolower($title)) { + case 'cases': + return 'CASES'; + case 'news': + return 'NEWS'; + case 'about': + return 'ABOUT US'; + case 'contact': + return 'CONTACT US'; + default: + return strtoupper($title); + } + } + + /** + * 获取描述 + */ + public function getDescription() { + return !empty($this->shortcode_atts['description']) + ? $this->shortcode_atts['description'] + : get_theme_mod('banner_title_description', 'Powering Sustainable Futures with Advanced Energy Storage Solutions'); + } + + /** + * 获取背景图片 + */ + public function getBackgroundImage() { + $bg_image = !empty($this->shortcode_atts['bg_image']) + ? $this->shortcode_atts['bg_image'] + : get_theme_mod('banner_title_bg_image', ''); + + // 如果没有设置背景图片或图片无效,使用默认图片 + if (empty($bg_image)) { + $bg_image = get_template_directory_uri() . '/assets/images/about-bg.webp'; + } else { + // 验证图片路径 + $is_valid_url = filter_var($bg_image, FILTER_VALIDATE_URL); + $is_valid_file = false; + + // 只对本地路径进行文件存在性检查 + if (!$is_valid_url && is_string($bg_image)) { + $file_path = str_replace(get_site_url(), ABSPATH, $bg_image); + $is_valid_file = file_exists($file_path); + } + + // 如果既不是有效URL也不是有效文件,使用默认图片 + if (!$is_valid_url && !$is_valid_file) { + $bg_image = get_template_directory_uri() . '/assets/images/about-bg.webp'; + } + } + + return $bg_image; + } + + /** + * 获取元素ID + */ + public function getElementId() { + return !empty($this->shortcode_atts['id']) + ? $this->shortcode_atts['id'] + : 'banner-title-' . uniqid(); + } + + /** + * 获取CSS类 + */ + public function getCssClasses() { + $classes = array('nenghui-banner-title', 'banner-title-modern'); + + if (!empty($this->shortcode_atts['class']) && is_string($this->shortcode_atts['class'])) { + // 清理CSS类名,移除潜在的危险字符 + $custom_class = preg_replace('/[^a-zA-Z0-9\-_\s]/', '', $this->shortcode_atts['class']); + if (!empty($custom_class)) { + $classes[] = $custom_class; + } + } + + // 动画类 + $show_animation = isset($this->shortcode_atts['show_animation']) + ? $this->shortcode_atts['show_animation'] + : 'true'; + + if ($show_animation === 'true' || $show_animation === true) { + $classes[] = 'has-animation'; + } + + return implode(' ', array_filter($classes)); + } + + /** + * 获取高度设置 + */ + public function getHeight() { + $height = !empty($this->shortcode_atts['height']) + ? $this->shortcode_atts['height'] + : get_theme_mod('banner_title_height', '60vh'); + + // 验证高度值格式 + if (!preg_match('/^\d+(\.\d+)?(px|vh|vw|%|em|rem)$/', $height)) { + $height = '70vh'; // 默认值 + } + + return $height; + } + + /** + * 获取遮罩透明度 + */ + public function getOverlayOpacity() { + $opacity = !empty($this->shortcode_atts['overlay_opacity']) + ? $this->shortcode_atts['overlay_opacity'] + : get_theme_mod('banner_title_overlay_opacity', '0.4'); + + // 验证透明度值(0-1之间的数字) + $opacity = floatval($opacity); + if ($opacity < 0 || $opacity > 1) { + $opacity = 0.4; // 默认值 + } + + return $opacity; + } +} +} + +// 初始化配置 +try { + $config = new BannerTitleConfig(); + $element_id = $config->getElementId(); + $title = $config->getTitle(); + $description = $config->getDescription(); + $bg_image = $config->getBackgroundImage(); + $css_classes = $config->getCssClasses(); + $height = $config->getHeight(); + $overlay_opacity = $config->getOverlayOpacity(); +} catch (Exception $e) { + // 错误处理:使用默认值 + $element_id = 'banner-title-' . uniqid(); + $title = 'ABOUT US'; + $description = 'Powering Sustainable Futures with Advanced Energy Storage Solutions'; + $bg_image = get_template_directory_uri() . '/assets/images/about-bg.webp'; + $css_classes = 'nenghui-banner-title banner-title-modern'; + $height = '60vh'; + $overlay_opacity = '0.4'; + + // 记录错误(如果错误处理器可用) + if (function_exists('nenghui_log_foreach_error')) { + nenghui_log_foreach_error('BannerTitleConfig initialization error: ' . $e->getMessage(), __FILE__, __LINE__); + } +} + +// 验证输出变量 +$element_id = !empty($element_id) ? $element_id : 'banner-title-' . uniqid(); +$title = !empty($title) ? $title : 'ABOUT US'; +$description = is_string($description) ? $description : ''; +$bg_image = !empty($bg_image) ? $bg_image : get_template_directory_uri() . '/assets/images/about-bg.webp'; +$css_classes = !empty($css_classes) ? $css_classes : 'nenghui-banner-title banner-title-modern'; +$height = !empty($height) ? $height : '60vh'; +$overlay_opacity = is_numeric($overlay_opacity) ? $overlay_opacity : '0.4'; + +?> + +
+ + + + + +
+ + + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-banner.php b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-banner.php new file mode 100644 index 0000000..76bceac --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-banner.php @@ -0,0 +1,936 @@ += 1 && $value <= 5; +}); + +// 如果顺序设置无效,使用默认顺序 +if (empty($order_array)) { + $order_array = range(1, $banner_count); +} + +// 从自定义器获取Banner数据 +$banner_images = array(); +$default_placeholder = get_template_directory_uri() . '/assets/images/NaN-img.png'; + +// 按照设置的顺序处理Banner +foreach ($order_array as $i) { + // 确保不超过设置的Banner数量 + if (count($banner_images) >= $banner_count) { + break; + } + + $image_url = get_theme_mod('banner_image_' . $i, ''); + $video_url = get_theme_mod('banner_video_' . $i, ''); + + // 增加视频格式验证 + if (!empty($video_url)) { + $video_ext = pathinfo(parse_url($video_url, PHP_URL_PATH), PATHINFO_EXTENSION); + if (!in_array(strtolower($video_ext), ['mp4', 'webm', 'ogg'])) { + $video_url = ''; // 过滤非允许格式的视频 + } + } + + // 只有上传了图片或视频的Banner才会被添加到数组中 + if (!empty($image_url) || !empty($video_url)) { + $content = get_theme_mod('banner_content_' . $i, '

Banner标题 ' . $i . '

这里是Banner描述文字,可以介绍您的产品或服务。

'); + $button_text = get_theme_mod('banner_button_text_' . $i, '了解更多'); + $button_url = get_theme_mod('banner_button_url_' . $i, '#'); + + $banner_images[] = array( + 'image' => $image_url, + 'video' => $video_url, + 'content' => $content, + 'button_text' => $button_text, + 'button_url' => $button_url, + 'original_index' => $i + ); + } +} + +// 如果没有有效的Banner图片或视频,显示默认占位图片 +if (empty($banner_images)) { + $banner_images[] = array( + 'image' => $default_placeholder, + 'video' => '', + 'content' => '

欢迎使用Banner

请在WordPress自定义器中上传Banner图片或视频。

', + 'button_text' => '了解更多', + 'button_url' => '#' + ); +} + +?> + + + + + + + + + + + + + + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-cases.php b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-cases.php new file mode 100644 index 0000000..cba9d03 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-cases.php @@ -0,0 +1,925 @@ + 'case_category', + 'hide_empty' => false, + 'orderby' => 'term_order', + 'order' => 'ASC' +)); + +// 如果没有分类,创建默认分类 +if (empty($categories) || is_wp_error($categories)) { + $categories = array( + (object) array( + 'term_id' => 1, + 'name' => 'Power Station', + 'slug' => 'power-station', + 'description' => '电站项目案例' + ), + (object) array( + 'term_id' => 2, + 'name' => 'PV Project', + 'slug' => 'pv-project', + 'description' => '光伏项目案例' + ), + (object) array( + 'term_id' => 3, + 'name' => 'Agricultural Solar', + 'slug' => 'agricultural-solar', + 'description' => '农业太阳能项目案例' + ) + ); +} + +// 获取当前页码 +$paged = get_query_var('paged') ? get_query_var('paged') : 1; + +// 生成唯一ID +$unique_id = $block_id . '-' . uniqid(); + +// 获取背景设置 +$background_type = get_theme_mod('cases_background_type', 'color'); +$background_color = get_theme_mod('cases_background_color', '#f8f9fa'); +$background_image = get_theme_mod('cases_background_image', ''); +$background_video = get_theme_mod('cases_background_video', ''); +$background_position = get_theme_mod('cases_background_position', 'center center'); +$background_size = get_theme_mod('cases_background_size', 'cover'); +$background_repeat = get_theme_mod('cases_background_repeat', 'no-repeat'); +$background_overlay = get_theme_mod('cases_background_overlay', true); +$background_overlay_color = get_theme_mod('cases_background_overlay_color', '#000000'); +$background_overlay_opacity = get_theme_mod('cases_background_overlay_opacity', '0.4'); +$section_title = get_theme_mod('cases_section_title', 'Cases'); + +// 如果title参数为空,使用自定义器中的标题 +if (empty($title)) { + $title = $section_title; +} +?> + +
+ + + + + +
+ + +
+ +
+

+ +

+
+ + + + +
+
    + $category): ?> + + +
+
+ + + +
+ +
+ $category): ?> +
+ +
+ +
+
+ Loading... +
+
+
+ + +
+ +
+ +
+ +
+ + +
+
+
+ Loading... +
+
+
+ + +
+ +
+ + +
+
+
+ + + + + + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-certification.php b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-certification.php new file mode 100644 index 0000000..f0f9da1 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-certification.php @@ -0,0 +1,452 @@ + 0) { + $image_url = wp_get_attachment_image_url($image_id, 'full'); + $image_full_url = wp_get_attachment_image_url($image_id, 'full'); + $image_alt = get_post_meta($image_id, '_wp_attachment_image_alt', true); + $image_title = get_the_title($image_id); + + if ($image_url) { + $gallery_images[] = array( + 'id' => $image_id, + 'url' => $image_url, + 'full_url' => $image_full_url, + 'alt' => $image_alt ?: $image_title, + 'title' => $image_title + ); + } + } + } +} +// 设置容器ID和类 +$container_id = !empty($shortcode_atts['id']) ? $shortcode_atts['id'] : 'nenghui-certification'; +$container_class = 'nenghui-certification'; +if (!empty($shortcode_atts['class'])) { + $container_class .= ' ' . $shortcode_atts['class']; +} +// 动画属性 +$animation_attrs = ''; +if ($certification_show_animation) { + $animation_attrs = 'data-aos="fade-up" data-aos-duration="800"'; +} +// 如果没有图片,显示默认提示 +if (empty($gallery_images)) { + $gallery_images = array( + array( + 'id' => 0, + 'url' => get_template_directory_uri() . '/assets/images/certification-placeholder.svg', + 'full_url' => get_template_directory_uri() . '/assets/images/certification-placeholder.svg', + 'alt' => '证书占位图', + 'title' => '暂无证书' + ) + ); +} +?> +
> +
+ + +
+
+ + + + + + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-contact-form.php b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-contact-form.php new file mode 100644 index 0000000..c059f98 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-contact-form.php @@ -0,0 +1,66 @@ + +
data-aos="fade-up"> +
+
+ + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-contact-map.php b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-contact-map.php new file mode 100644 index 0000000..7620ed3 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-contact-map.php @@ -0,0 +1,420 @@ + + +
+
+ +
+

+
+ + +
+ +
+
+ +
+
+ + + +
+
+

OFFICE ADDRESS:

+

+
+
+ + + +
+
+ + + +
+
+

PHONE / MOBILE:

+

+ + + +

+
+
+ + + +
+
+ + + +
+
+

MAILBOX:

+

+ + + +

+
+
+ +
+
+ + +
+
+ + + +
+

+ 请在自定义器中设置地图嵌入代码
+ 联系地图设置 → 地图设置 → 地图嵌入代码 +

+
+ +
+
+
+
+
+ + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-development-history.php b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-development-history.php new file mode 100644 index 0000000..3b4a539 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-development-history.php @@ -0,0 +1,429 @@ + '', + 2 => '', + 3 => 'Over 800 MW solar power plants on hand in operation.', + 4 => '', + 5 => '' +); +for ($i = 1; $i <= $items_count; $i++) { + $default_year = isset($default_years[$i-1]) ? $default_years[$i-1] : (2008 + $i); + $default_desc = isset($default_descriptions[$i]) ? $default_descriptions[$i] : ''; + $year = get_theme_mod('development_history_item_' . $i . '_year', $default_year); + $description = get_theme_mod('development_history_item_' . $i . '_description', $default_desc); + + $history_items[] = array( + 'year' => $year, + 'description' => $description, + 'active' => get_theme_mod('development_history_item_' . $i . '_active', $i == 3) // 默认第3个激活 + ); +} + +// 如果没有设置任何历史项目,使用默认数据 +if (empty($history_items)) { + $history_items = array( + array('year' => '2009', 'description' => '', 'active' => false), + array('year' => '2012', 'description' => '', 'active' => false), + array('year' => '2015', 'description' => 'Over 800 MW solar power plants on hand in operation.', 'active' => true), + array('year' => '2021', 'description' => '', 'active' => false), + array('year' => '2022', 'description' => '', 'active' => false), + ); +} + +// 找到默认激活的项目 +$default_active_index = 0; +foreach ($history_items as $index => $item) { + if ($item['active']) { + $default_active_index = $index; + break; + } +} +?> +
+
+ +
+
+

+
+ +
+ $item): ?> +
+
+
+
+
+
+ +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-download-center.php b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-download-center.php new file mode 100644 index 0000000..c979984 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-download-center.php @@ -0,0 +1,769 @@ + 'download_category', + 'hide_empty' => false, +)); + +// 如果没有分类,创建默认分类 +if (empty($categories) || is_wp_error($categories)) { + $categories = array(); +} + +// 获取当前页码 +$current_page = max(1, get_query_var('paged', 1)); + +// 根据是否启用分页决定获取数据的方式 +if ($enable_pagination) { + // 启用分页时的数据获取 + $all_downloads_args = array( + 'post_type' => 'download_center', + 'post_status' => 'publish', + 'posts_per_page' => $posts_per_page, + 'paged' => $current_page, + 'orderby' => $order_by, + 'order' => $order, + ); + $all_downloads_query = new WP_Query($all_downloads_args); + $all_downloads = $all_downloads_query->posts; + + // 按分类获取下载项目(分页) + $downloads_by_category = array(); + $category_queries = array(); + foreach ($categories as $category) { + $category_downloads_args = array( + 'post_type' => 'download_center', + 'post_status' => 'publish', + 'posts_per_page' => $posts_per_page, + 'paged' => $current_page, + 'orderby' => $order_by, + 'order' => $order, + 'tax_query' => array( + array( + 'taxonomy' => 'download_category', + 'field' => 'term_id', + 'terms' => $category->term_id, + ), + ), + ); + $category_query = new WP_Query($category_downloads_args); + $downloads_by_category[$category->term_id] = $category_query->posts; + $category_queries[$category->term_id] = $category_query; + } +} else { + // 未启用分页时的数据获取(原有逻辑) + $all_downloads_args = array( + 'post_type' => 'download_center', + 'post_status' => 'publish', + 'posts_per_page' => $posts_per_category, + 'orderby' => $order_by, + 'order' => $order, + ); + $all_downloads = get_posts($all_downloads_args); + + // 按分类获取下载项目 + $downloads_by_category = array(); + foreach ($categories as $category) { + $category_downloads_args = array( + 'post_type' => 'download_center', + 'post_status' => 'publish', + 'posts_per_page' => $posts_per_category, + 'orderby' => $order_by, + 'order' => $order, + 'tax_query' => array( + array( + 'taxonomy' => 'download_category', + 'field' => 'term_id', + 'terms' => $category->term_id, + ), + ), + ); + $downloads_by_category[$category->term_id] = get_posts($category_downloads_args); + } +} + +// 默认图片路径 +$default_image = get_template_directory_uri() . '/assets/images/PDF-IMG.webp'; +$download_icon = get_template_directory_uri() . '/assets/images/PDF-ICON.svg'; +?> + +
+
+ +
+

+
+ + +
+ +
+ + + + + + term_id])): ?> + + + +
+ + +
+ + +
+ + ID, '_download_url', true); + $file_size = get_post_meta($download->ID, '_file_size', true); + $file_type = get_post_meta($download->ID, '_file_type', true); + $featured_image = get_the_post_thumbnail_url($download->ID, 'full'); + $image_url = $featured_image ? $featured_image : $default_image; + + // 如果没有设置下载链接,使用特色图像作为下载链接 + if (empty($download_url) && $featured_image) { + $download_url = $featured_image; + } + ?> +
+
+ <?php echo esc_attr($download->post_title); ?> +
+
+

post_title); ?>

+ post_excerpt)): ?> +

post_excerpt); ?>

+ + +
+ + + + + + +
+ + + + Download + Download + + +
+
+ +
+ + + + + term_id])): ?> +
+ term_id] as $download): ?> + ID, '_download_url', true); + $file_size = get_post_meta($download->ID, '_file_size', true); + $file_type = get_post_meta($download->ID, '_file_type', true); + $featured_image = get_the_post_thumbnail_url($download->ID, 'full'); + $image_url = $featured_image ? $featured_image : $default_image; + + // 如果没有设置下载链接,使用特色图像作为下载链接 + if (empty($download_url) && $featured_image) { + $download_url = $featured_image; + } + ?> +
+
+ <?php echo esc_attr($download->post_title); ?> +
+
+

post_title); ?>

+ post_excerpt)): ?> +

post_excerpt); ?>

+ + +
+ + + + + + +
+ + + + Download + Download + + +
+
+ +
+ + +
+ + + +
+ + +
+ $all_downloads_query->max_num_pages, + 'current' => $current_page, + 'format' => '?paged=%#%', + 'show_all' => false, + 'end_size' => 1, + 'mid_size' => 2, + 'prev_next' => true, + 'prev_text' => '« Previous', + 'next_text' => 'Next »', + 'type' => 'array' + ); + $pagination_links = paginate_links($pagination_args); + if ($pagination_links) { + echo ''; + } + ?> +
+ + + + + term_id]) && isset($category_queries[$category->term_id])): ?> +
+ term_id]; + $pagination_args = array( + 'total' => $category_query->max_num_pages, + 'current' => $current_page, + 'format' => '?paged=%#%', + 'show_all' => false, + 'end_size' => 1, + 'mid_size' => 2, + 'prev_next' => true, + 'prev_text' => '« Previous', + 'next_text' => 'Next »', + 'type' => 'array' + ); + $pagination_links = paginate_links($pagination_args); + if ($pagination_links) { + echo ''; + } + ?> +
+ + +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-epc-banner.php b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-epc-banner.php new file mode 100644 index 0000000..98e1617 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-epc-banner.php @@ -0,0 +1,33 @@ + + + + + +
+
+
+
+

NENGHUI DESIGN & ENGINEERING INSTITUTE:

+

POWERING YOUR PROJECT FROM CONCEPT TO COMPLETION

+
+

+ Leveraging decades of EPC expertise from our Shanghai headquarters, we deliver fully + customized, bankable, and compliant energy storage solutions for the global market. +

+
+
+
+
+
\ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-epc.php b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-epc.php new file mode 100644 index 0000000..3bb70ff --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-epc.php @@ -0,0 +1,38 @@ + + + + +
+ +
\ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-ess-scenarios.php b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-ess-scenarios.php new file mode 100644 index 0000000..e69de29 diff --git a/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-faq.php b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-faq.php new file mode 100644 index 0000000..c73e6b6 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-faq.php @@ -0,0 +1,419 @@ + 'faq', + 'post_status' => 'publish', + 'posts_per_page' => intval($posts_per_page), + 'orderby' => $order_by, + 'order' => $order +); + +// 执行查询 +$faq_query = new WP_Query($query_args); + +// 生成唯一ID +$unique_id = $id . '-' . uniqid(); +?> + +
+
+ +
+

+
+ + + have_posts()): ?> +
+ have_posts()): + $faq_query->the_post(); + $item_index++; + $item_id = $unique_id . '-item-' . $item_index; + ?> +
+
+

+ + + + + + +
+
+
+ ' . get_the_excerpt() . '

'; + } + ?> +
+
+
+ +
+ +
+

暂无FAQ内容。

+
+ +
+
+ + + + + + + + + + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-flowchart-tab.php b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-flowchart-tab.php new file mode 100644 index 0000000..7edaa45 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-flowchart-tab.php @@ -0,0 +1,277 @@ + array( + 'id' => 'pack-process', + 'title' => get_theme_mod('flowchart_tab_1_title', 'PACK Process Flowchart'), + 'image' => get_theme_mod('flowchart_tab_1_image', get_template_directory_uri() . '/assets/images/pack-process flow-chart.png'), + 'note' => get_theme_mod('flowchart_tab_1_note', 'Note 1: Blue procedures denote liquid-cooled project operations; Turquoise procedures indicate universal processes (Air-cooled PACK units require turquoise procedures only). 2.Operations marked with [★] denote critical processes; those marked with [▲] indicate inspection operations.') + ), + 2 => array( + 'id' => 'enclosure-manufacturing', + 'title' => get_theme_mod('flowchart_tab_2_title', 'Enclosure Manufacturing Process Flow Diagram'), + 'image' => get_theme_mod('flowchart_tab_2_image', get_template_directory_uri() . '/assets/images/cabinet-process flow-chart.png'), + 'note' => get_theme_mod('flowchart_tab_2_note', '') // 第二个tab没有文案 + ), + 3 => array( + 'id' => 'module-manufacturing', + 'title' => get_theme_mod('flowchart_tab_3_title', 'Module Manufacturing Process Flow Diagram'), + 'image' => get_theme_mod('flowchart_tab_3_image', get_template_directory_uri() . '/assets/images/module-process flow.png'), + 'note' => get_theme_mod('flowchart_tab_3_note', 'Note: [★] denotes Critical Processes; [▲] denotes Inspection Processes.') + ) +); + +// 获取第一个tab作为默认显示 +$first_tab = $flowchart_tabs[1]; +?> + + + +
+ +
+ $tab) : ?> + + +
+ + +
+
+ <?php echo esc_attr($first_tab['title']); ?> +
+ +
+ +
+ +
+
+ + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-futures.php b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-futures.php new file mode 100644 index 0000000..b209005 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-futures.php @@ -0,0 +1,246 @@ + 'nenghui-futures-block', + 'class' => '', + 'title' => get_theme_mod('futures_title', 'Powering Sustainble Futures'), + 'show_animation' => 'true' +)); + +// 获取自定义器设置 +$futures_title = !empty($atts['title']) ? $atts['title'] : get_theme_mod('futures_title', 'Powering Sustainble Futures'); +$futures_bg_image = get_theme_mod('futures_bg_image', get_template_directory_uri() . '/assets/images/futures-bg.webp'); +$futures_button_text = get_theme_mod('futures_button_text', 'About us'); +$futures_button_link = get_theme_mod('futures_button_link', 'about.html'); + +// 获取特性项目数据 +$futures_items = array(); +$default_placeholder = get_template_directory_uri() . '/assets/images/NaN-img.png'; + +// 定义默认项目数据 +$default_items = array( + 1 => array('title' => 'High-Performance', 'icon' => './images/2_03.png'), + 2 => array('title' => 'Advanced Safety', 'icon' => './images/2_05.png'), + 3 => array('title' => 'Smart Energy', 'icon' => './images/4_05.png'), + 4 => array('title' => 'Fast Deployment', 'icon' => './images/5_05.png'), + 5 => array('title' => 'Global Compliance', 'icon' => './images/7_05.png'), +); + +for ($i = 1; $i <= 5; $i++) { + // 获取自定义器设置,如果为空则使用默认值 + $title = get_theme_mod('futures_item_' . $i . '_title', $default_items[$i]['title']); + $icon_url = get_theme_mod('futures_item_' . $i . '_icon', $default_placeholder); + + // 如果标题为空,使用默认值 + if (empty($title)) { + $title = $default_items[$i]['title']; + } + + // 如果没有设置图标或图标路径无效,使用默认占位图片 + if (empty($icon_url) || strpos($icon_url, './images/') === 0) { + $icon_url = $default_placeholder; + } + + $item = array( + 'icon' => $icon_url, + 'title' => $title + ); + $futures_items[] = $item; +} + +// 构建CSS类 +$css_classes = array('ilist4'); +if (!empty($atts['class'])) { + $css_classes[] = $atts['class']; +} +$css_class = implode(' ', $css_classes); + +// 动画类 +$animation_class = ($atts['show_animation'] === 'true') ? 'wow fadeInUp' : ''; + +?> + + + +
+
+
+
+

+
+ $item): ?> +
+ <?php echo esc_attr($item['title']); ?> +
+ +
+ +
+ + + +
+
+
\ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-home-news.php b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-home-news.php new file mode 100644 index 0000000..597e7be --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-home-news.php @@ -0,0 +1,174 @@ + 'post', + 'posts_per_page' => $news_posts_count, + 'orderby' => $news_order_by, + 'order' => $news_order, + 'post_status' => 'publish', + 'meta_query' => array( + array( + 'key' => '_thumbnail_id', + 'compare' => 'EXISTS' + ) + ) +); + +// 如果指定了分类ID,添加分类过滤 +if (!empty($news_category_id)) { + $query_args['cat'] = $news_category_id; +} + +// 查询文章 +$news_query = new WP_Query($query_args); + +// 获取随机特色图像和对应的文章链接 +$featured_image_url = ''; +$featured_image_link = ''; +if ($news_query->have_posts()) { + // 获取所有文章的特色图像和链接 + $featured_data = array(); + while ($news_query->have_posts()) { + $news_query->the_post(); + if (has_post_thumbnail()) { + $featured_data[] = array( + 'image' => get_the_post_thumbnail_url(get_the_ID(), 'full'), + 'link' => get_permalink() + ); + } + } + // 随机选择一张图片和对应链接 + if (!empty($featured_data)) { + $random_item = $featured_data[array_rand($featured_data)]; + $featured_image_url = $random_item['image']; + $featured_image_link = $random_item['link']; + } + // 重置查询 + wp_reset_postdata(); +} + +// 如果没有找到特色图像,使用默认图片 +if (empty($featured_image_url)) { + $featured_image_url = 'http://nh.matepress.cn/wp-content/uploads/2025/06/logo.svg'; +} +?> + + + +
+
+

+ +
+ + +
+ +
+ + + <?php echo esc_attr($news_title); ?> + + + <?php echo esc_attr($news_title); ?> + +
+ + +
+ have_posts()) : + while ($news_query->have_posts()) : $news_query->the_post(); + // 获取文章分类 + $categories = get_the_category(); + $category_name = !empty($categories) ? $categories[0]->name : 'News'; + ?> + + +
+
暂无文章
+
+ 提示 + +
+
+ +
+
+
\ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-news.php b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-news.php new file mode 100644 index 0000000..3bc97d0 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-news.php @@ -0,0 +1,492 @@ + 当前分类页面 > 自定义器设置 + * + * 使用方法: + * - 在分类页面使用:[nenghui_news_grid] (自动显示当前分类文章) + * - 指定分类使用:[nenghui_news_grid category_id="5"] (显示分类ID为5的文章) + * - 指定多个分类:[nenghui_news_grid category_id="5,6,7"] (显示分类ID为5、6、7的文章) + * - 显示所有文章:[nenghui_news_grid category_id=""] (覆盖当前分类,显示所有文章) + */ + + // 防止直接访问 +if (!defined('ABSPATH')) { + exit; +} + +// 检查是否通过短代码调用 +global $news_shortcode_atts; + +// 确保 $news_shortcode_atts 是数组 +if (!is_array($news_shortcode_atts)) { + $news_shortcode_atts = array(); +} + +// 获取自定义器设置,如果有短代码参数则优先使用短代码参数 +$news_title = !empty($news_shortcode_atts['title']) ? $news_shortcode_atts['title'] : get_theme_mod('news_title', 'NEWS'); + +// 分类ID优先级:短代码参数 > 当前分类页面 > 自定义器设置 +$news_category_id = ''; +$news_tag_id = ''; +$news_author_id = ''; + +if (!empty($news_shortcode_atts['category_id'])) { + // 优先使用短代码指定的分类ID + $news_category_id = $news_shortcode_atts['category_id']; +} elseif (is_category()) { + // 如果是分类页面,使用当前分类ID + $news_category_id = get_queried_object_id(); +} elseif (is_tag()) { + // 如果是标签页面 + $news_tag_id = get_queried_object_id(); +} elseif (is_author()) { + // 如果是作者页面 + $news_author_id = get_queried_object_id(); +} else { + // 否则使用自定义器设置的分类ID + $news_category_id = get_theme_mod('news_category_id', ''); +} + +$news_order_by = !empty($news_shortcode_atts['order_by']) ? $news_shortcode_atts['order_by'] : get_theme_mod('news_order_by', 'date'); +$news_order = !empty($news_shortcode_atts['order']) ? $news_shortcode_atts['order'] : get_theme_mod('news_order', 'DESC'); + +// 检查是否启用分页 +$enable_pagination = !empty($news_shortcode_atts['enable_pagination']) ? wp_validate_boolean($news_shortcode_atts['enable_pagination']) : get_theme_mod('news_enable_pagination', false); + +// 根据是否启用分页设置文章数量 +if ($enable_pagination) { + $news_posts_count = !empty($news_shortcode_atts['posts_per_page']) ? intval($news_shortcode_atts['posts_per_page']) : get_theme_mod('news_posts_per_page', 6); +} else { + $news_posts_count = !empty($news_shortcode_atts['posts_count']) ? intval($news_shortcode_atts['posts_count']) : get_theme_mod('news_posts_count', 12); + // 确保文章数量为12(3行4列) + if ($news_posts_count < 12) { + $news_posts_count = 12; + } +} + +// 设置容器ID和CSS类 +$container_id = !empty($news_shortcode_atts['id']) ? $news_shortcode_atts['id'] : 'nenghui-news-block'; +$container_class = !empty($news_shortcode_atts['class']) ? $news_shortcode_atts['class'] : ''; + +// 获取当前页码 +$current_page = max(1, get_query_var('paged', 1)); +if (!$current_page) { + $current_page = max(1, get_query_var('page', 1)); +} + +// 构建查询参数 +$query_args = array( + 'post_type' => 'post', + 'posts_per_page' => $news_posts_count, + 'orderby' => $news_order_by, + 'order' => $news_order, + 'post_status' => 'publish' +); + +// 如果启用分页,添加分页参数 +if ($enable_pagination) { + $query_args['paged'] = $current_page; +} + +// 如果指定了分类ID,添加分类过滤 +if (!empty($news_category_id)) { + // 支持多分类(逗号分隔),清理可能存在的空格 + if (strpos($news_category_id, ',') !== false) { + $news_category_id = implode(',', array_map('trim', explode(',', $news_category_id))); + } + $query_args['cat'] = $news_category_id; +} + +// 如果是标签页面 +if (!empty($news_tag_id)) { + $query_args['tag_id'] = $news_tag_id; +} + +// 如果是作者页面 +if (!empty($news_author_id)) { + $query_args['author'] = $news_author_id; +} + +if (is_archive() && !is_category() && !is_tag() && !is_author()) { + // 处理其他类型的存档页面(如日期存档) + // 通常 WP_Query 会自动处理,但在自定义查询中我们需要显式处理或者不限制分类 +} + +// 查询文章 +$news_query = new WP_Query($query_args); +?> + + + +
+
+

+
+ +
+ have_posts()) : + while ($news_query->have_posts()) : $news_query->the_post(); + // 获取文章分类 + $categories = get_the_category(); + $category_name = !empty($categories) ? $categories[0]->name : 'News'; + + // 获取文章摘要 + $excerpt = get_the_excerpt(); + if (empty($excerpt)) { + $excerpt = wp_trim_words(get_the_content(), 30); + } + + // 获取特色图像 + $thumbnail_url = get_the_post_thumbnail_url(get_the_ID(), 'full'); + if (empty($thumbnail_url)) { + $thumbnail_url = get_template_directory_uri() . '/assets/images/NaN-img.png'; + } + ?> + + +
+ + max_num_pages > 1) : + $total_pages = $news_query->max_num_pages; + $current_page = max(1, get_query_var('paged', 1)); + if (!$current_page) { + $current_page = max(1, get_query_var('page', 1)); + } + + echo '
'; + + // 上一页链接 + if ($current_page > 1) { + $prev_link = get_pagenum_link($current_page - 1); + echo ''; + } + + echo '
'; + + // 页码链接 + $start_page = max(1, $current_page - 2); + $end_page = min($total_pages, $current_page + 2); + + // 如果不是从第1页开始,显示第1页和省略号 + if ($start_page > 1) { + echo '1'; + if ($start_page > 2) { + echo '...'; + } + } + + // 显示页码 + for ($i = $start_page; $i <= $end_page; $i++) { + $class = 'page-num'; + if ($i == $current_page) { + $class .= ' current'; + echo '' . $i . ''; + } else { + if ($i == $current_page - 1 || $i == $current_page + 1) { + $class .= ' current-neighbor'; + } + echo '' . $i . ''; + } + } + + // 如果不是到最后一页,显示省略号和最后一页 + if ($end_page < $total_pages) { + if ($end_page < $total_pages - 1) { + echo '...'; + } + echo '' . $total_pages . ''; + } + + echo '
'; + + // 下一页链接 + if ($current_page < $total_pages) { + $next_link = get_pagenum_link($current_page + 1); + echo ''; + } + + echo '
'; + endif; + + wp_reset_postdata(); + else : + ?> +
+

No Posts Found

+

Please add some posts to display in this block.

+
+ +
\ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-overseas-services.php b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-overseas-services.php new file mode 100644 index 0000000..8b8fecf --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-overseas-services.php @@ -0,0 +1,187 @@ + + +
+
+
+

+

+
+
+
+ + + + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-process.php b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-process.php new file mode 100644 index 0000000..0182e11 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-process.php @@ -0,0 +1,77 @@ + sprintf('%02d', $i), + 'title' => get_theme_mod("business_process_tab{$i}_title", "步骤{$i}"), + 'description' => get_theme_mod("business_process_tab{$i}_description", "步骤{$i}的详细描述"), + 'image' => get_theme_mod("business_process_tab{$i}_image", get_template_directory_uri() . '/assets/images/FWas.jpg') + ]; +} + +// 如果不显示区块,直接返回 +if (!$show_process) { + return; +} +?> + +
+
+ +
+ +

+ + +

+ +
+ + +
+ +
+ $item): ?> +
+
+
+

+

+
+
+ + + +
+
+ +
+ + +
+ $item): ?> +
+ <?php echo esc_attr($item['title']); ?> +
+ +
+
+
+
\ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-tabs.php b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-tabs.php new file mode 100644 index 0000000..2677b9d --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-tabs.php @@ -0,0 +1,545 @@ + + + +
+ +
+ $i) { + $tab_title = get_theme_mod('tab_title_' . $i, "选项卡 {$i}"); + $tab_id = get_theme_mod('tab_id_' . $i, "tab-{$i}"); + + if (!empty($tab_title)) { + $active_class = ($index == 0) ? ' active' : ''; + echo ''; + } + } + } else { + // 如果没有有效选项卡,显示提示信息 + echo '
请在自定义器中设置选项卡内容
'; + } + ?> +
+ +
+
+

+ +

+ + + + + +
+
+
+ <?php echo esc_attr($first_tab_image_alt); ?> +
+
+
+
+ + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-technical-service.php b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-technical-service.php new file mode 100644 index 0000000..81bbc34 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-technical-service.php @@ -0,0 +1,324 @@ + get_template_directory_uri() . '/assets/images/24-h.webp', + 'title' => '7x24h Respond', + 'description' => 'We provide in-time response support to our customers' + ), + array( + 'icon' => get_template_directory_uri() . '/assets/images/Certified Pre-sales.webp', + 'title' => 'Certified Pre-sales & Post-sales Technical Personnel', + 'description' => 'Well trained technical experts to serve you online' + ), + array( + 'icon' => get_template_directory_uri() . '/assets/images/Intelligent ESS Guardian.webp', + 'title' => 'Intelligent ESS Guardian', + 'description' => 'Transformer Monitoring Proactively Eliminates 95% Operational Risks' + ) +); +?> + +
+
+ +
+

+

+
+ + +
+ $service): ?> +
data-delay=""> +
+ <?php echo esc_attr($service['title']); ?> +
+
+

+
+

+
+
+ +
+
+
+ + + + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-warehousing-distribution.php b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-warehousing-distribution.php new file mode 100644 index 0000000..d9e0d63 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/template-parts/blocks/block-warehousing-distribution.php @@ -0,0 +1,412 @@ + + +
+
+ +
+

+
+ + +
+
+ +
+
+

Key Details and Features

+
    + $feature): ?> +
  • + · + +
  • + +
+
+
+ + +
+
+ Warehousing and Distribution Project - Aerial View +
+ ANTWERP +
+
+
+
+
+ + +
+
+ +
+
+ Warehousing and Distribution Project - Interior View +
+ OPER +
+
+
+ + +
+ +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/template-parts/cases-content.php b/wp-content/themes/nenghui-energy-theme-4/template-parts/cases-content.php new file mode 100644 index 0000000..a8f0ec4 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/template-parts/cases-content.php @@ -0,0 +1,303 @@ + + +
+
+
+ +
+
+ + +
> + +
+
+
+

+ +
+ + +
+
+
+
+ +
+
+
+
+ +
+ + + '', + 'link_before' => '', + 'link_after' => '', + )); + ?> +
+
+
+ + + + + + 'cases', + 'post_status' => 'publish', + 'posts_per_page' => 3, + 'post__not_in' => array(get_the_ID()), + 'tax_query' => array( + array( + 'taxonomy' => 'case_category', + 'field' => 'term_id', + 'terms' => $category_ids, + 'operator' => 'IN' + ) + ), + 'orderby' => 'rand' + ); + + $related_query = new WP_Query($related_args); + + if ($related_query->have_posts()) : + ?> + + +
+ + +
+
+ +
+
+ +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-4/template-parts/content-search.php b/wp-content/themes/nenghui-energy-theme-4/template-parts/content-search.php new file mode 100644 index 0000000..e69de29 diff --git a/wp-content/themes/nenghui-energy-theme-4/template-parts/products-content.php b/wp-content/themes/nenghui-energy-theme-4/template-parts/products-content.php new file mode 100644 index 0000000..819125f --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/template-parts/products-content.php @@ -0,0 +1,315 @@ + + + +
+ +
+

+ +
+ +
+
+ +
+ + + + +
+
+ 'COMPACT
DESIGN', + 'description' => 'Light footprint, easy frame
installation and field installation.', + 'icon' => 'product-icon-1.webp', + 'alt' => 'Compact Design' + ), + array( + 'title' => 'HIGH
INTEGRATION', + 'description' => '20kWh+ energy in one cabinet
with DC/AC power conversion
& thermal cooling.', + 'icon' => 'product-icon-2.webp', + 'alt' => 'High Integration' + ), + array( + 'title' => 'EFFICIENT
COOLING', + 'description' => 'Optimal air-duct design optimizes
airflow for improved cooling with low
energy consumption.', + 'icon' => 'product-icon-3.webp', + 'alt' => 'Efficient Cooling' + ), + array( + 'title' => 'LONG
CYCLE LIFE', + 'description' => 'Over 6,000 times cycle life, excellent
performance of battery system.', + 'icon' => 'product-icon-4.webp', + 'alt' => 'Long Cycle Life' + ), + array( + 'title' => 'FLEXIBLE
EXPANSION', + 'description' => 'Modular design, simplified panel
for expansion.', + 'icon' => 'product-icon-5.webp', + 'alt' => 'Flexible Expansion' + ), + array( + 'title' => 'ULTIMATE
SAFETY', + 'description' => 'Comprehensive safety protection
with NOVEC1230 thermal prevent
heat diffusion and spreading.', + 'icon' => 'product-icon-6.webp', + 'alt' => 'Ultimate Safety' + ) + ); + } + + // 循环输出产品特性卡片 + foreach ($product_features as $feature) : + if (!empty($feature['title'])) : + ?> +
+
+ + <?php echo esc_attr($feature['alt']); ?> +
+

+

+
+ +
+
+ + + + + + +
+ 'USAGE SCENARIO', + 'description' => 'Off-grid PV, energy storage, diesel generation, and charging post', + 'image' => 'Usage scenario.webp', + 'bottom_text' => 'Nenghui all-in-one liquid-cooled ESS cabinet adopts advanced cabinet-level liquid cooling and temperature balancing strategy. The cell temperature difference is less than 3°C, which further improves the consistency of cell temperature and extends the battery life. The modular design makes the parallel solution more flexible and has a higher energy density, which significantly improves the economy, safety and construction convenience of ESS projects.' + ); + } + ?> + +
+
+

+

+
+ +
+ + Usage Scenario +
+ + +
+
+ + + + + + +
+ 'DC Side', + 'content' => '
Cell TypeLFP280Ah
PACK46.592kWh/IP25S
Battery System232.96kWh/IP260S
Rated Voltage832Vdc
Voltage Range728-936Vdc
Pack Ingress RatingIP65
', + 'expanded' => true + ), + array( + 'title' => 'AC Side', + 'content' => '
Rated Power100kW
Max. Power110kW
THDi≤3%
DC Ratio≤0.5%lon
Nominal Voltage400Vac/3P+N+PE
Power Factor-1lagging~1leading
Nominal Frequency50Hz/60Hz
', + 'expanded' => false + ) + ); + } + ?> + +
+
+

TECHNICAL SPECIFICATION

+
+ +
+ $spec): ?> + +
+ +
> +
+ +
+
+
+ +
+
+
+ + + + + + +
+ 'Nenghui\'s innovative 40', + 'file_url' => '', + 'file_size' => '', + 'description' => '' + ) + ); + } + + // 过滤掉空的PDF项目 + $pdf_downloads_data = array_filter($pdf_downloads_data, function($pdf) { + return !empty($pdf['title']) || !empty($pdf['file_url']); + }); + ?> + + +
+
+

DOWNLOADS

+
+ +
+ $pdf): ?> +
+
+ PDF +
+
+

+ +

+ + + + +
+ +
+ + Download + +
+ +
+ +
+
+ +
+ +
+ + diff --git a/wp-content/themes/nenghui-energy-theme-4/widgets/widgets-config.php b/wp-content/themes/nenghui-energy-theme-4/widgets/widgets-config.php new file mode 100644 index 0000000..6adfabd --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-4/widgets/widgets-config.php @@ -0,0 +1,83 @@ + '首页侧边栏', + // 'id' => 'sidebar-1', + // 'description' => '首页侧边栏', + // 'before_widget' => '
', + // 'after_widget' => '
', + // 'before_title' => '

', + // 'after_title' => '

', + // )); + // register_sidebar(array( + // 'name' => '文章侧边栏', + // 'id' => 'sidebar-2', + // 'description' => '文章侧边栏', + // 'before_widget' => '
', + // 'after_widget' => '
', + // 'before_title' => '

', + // 'after_title' => '

', + // )); + // register_sidebar(array( + // 'name' => '页面侧边栏', + // 'id' => 'sidebar-3', + // 'description' => '页面侧边栏', + // 'before_widget' => '
', + // 'after_widget' => '
', + // 'before_title' => '

', + // 'after_title' => '

', + // )); + // register_sidebar(array( + // 'name' => '分类目录侧边栏', + // 'id' => 'sidebar-4', + // 'description' => '分类目录侧边栏', + // 'before_widget' => '
', + // 'after_widget' => '
', + // 'before_title' => '

', + // 'after_title' => '

', + // )); + // register_sidebar(array( + // 'name' => '标签侧边栏', + // 'id' => 'sidebar-5', + // 'description' => '标签侧边栏', + // 'before_widget' => '
', + // 'after_widget' => '
', + // 'before_title' => '

', + // 'after_title' => '

', + // )); + // register_sidebar(array( + // 'name' => '搜索侧边栏', + // 'id' => 'sidebar-6', + // 'description' => '搜索侧边栏', + // 'before_widget' => '
', + // 'after_widget' => '
', + // 'before_title' => '

', + // 'after_title' => '

', + // )); + // register_sidebar(array( + // 'name' => '404侧边栏', + // 'id' => 'sidebar-7', + // 'description' => '404侧边栏', + // 'before_widget' => '
', + // 'after_widget' => '
', + // 'before_title' => '

', + // 'after_title' => '

', + // )); + // register_sidebar(array( + // 'name' => '底部侧边栏', + // 'id' => 'sidebar-8', + // 'description' => '底部侧边栏', + // 'before_widget' => '
', + // 'after_widget' => '
', + // 'before_title' => '

', + // 'after_title' => '

', + // )); + // } +?> \ No newline at end of file diff --git a/wp-content/wp-rocket-config/index.html b/wp-content/wp-rocket-config/index.html new file mode 100644 index 0000000..e69de29 diff --git a/wp-content/wp-rocket-config/nenghui.com.ar.php b/wp-content/wp-rocket-config/nenghui.com.ar.php new file mode 100644 index 0000000..d8f7eb1 --- /dev/null +++ b/wp-content/wp-rocket-config/nenghui.com.ar.php @@ -0,0 +1,95 @@ + 'q', +); +$rocket_secret_cache_key = '689ae14a5abbd039885448'; +$rocket_cache_ssl = 1; +$rocket_cache_mobile = 1; +$rocket_do_caching_mobile_files = 1; +$rocket_cache_ignored_parameters = array( + 'utm_source' => 0, + 'utm_medium' => 1, + 'utm_campaign' => 2, + 'utm_expid' => 3, + 'utm_term' => 4, + 'utm_content' => 5, + 'utm_id' => 6, + 'utm_source_platform' => 7, + 'utm_creative_format' => 8, + 'utm_marketing_tactic' => 9, + 'mtm_source' => 10, + 'mtm_medium' => 11, + 'mtm_campaign' => 12, + 'mtm_keyword' => 13, + 'mtm_cid' => 14, + 'mtm_content' => 15, + 'pk_source' => 16, + 'pk_medium' => 17, + 'pk_campaign' => 18, + 'pk_keyword' => 19, + 'pk_cid' => 20, + 'pk_content' => 21, + 'fb_action_ids' => 22, + 'fb_action_types' => 23, + 'fb_source' => 24, + 'fbclid' => 25, + 'campaignid' => 26, + 'adgroupid' => 27, + 'adid' => 28, + 'gclid' => 29, + 'age-verified' => 30, + 'ao_noptimize' => 31, + 'usqp' => 32, + 'cn-reloaded' => 33, + '_ga' => 34, + 'sscid' => 35, + 'gclsrc' => 36, + '_gl' => 37, + 'mc_cid' => 38, + 'mc_eid' => 39, + '_bta_tid' => 40, + '_bta_c' => 41, + 'trk_contact' => 42, + 'trk_msg' => 43, + 'trk_module' => 44, + 'trk_sid' => 45, + 'gdfms' => 46, + 'gdftrk' => 47, + 'gdffi' => 48, + '_ke' => 49, + '_kx' => 50, + 'redirect_log_mongo_id' => 51, + 'redirect_mongo_id' => 52, + 'sb_referer_host' => 53, + 'mkwid' => 54, + 'pcrid' => 55, + 'ef_id' => 56, + 's_kwcid' => 57, + 'msclkid' => 58, + 'dm_i' => 59, + 'epik' => 60, + 'pp' => 61, + 'gbraid' => 62, + 'wbraid' => 63, + 'ssp_iabi' => 64, + 'ssp_iaba' => 65, + 'gad' => 66, + 'vgo_ee' => 67, + 'gad_source' => 68, + 'gad_campaignid' => 69, + 'onlywprocket' => 70, + 'srsltid' => 71, + 'gadid' => 72, + 'fbadid' => 73, +); +$rocket_cache_mandatory_cookies = ''; +$rocket_cache_dynamic_cookies = array(); +$rocket_permalink_structure = '/%category%/%postname%/%post_id%/'; diff --git a/wp-content/wp-rocket-config/nenghui.com.be.php b/wp-content/wp-rocket-config/nenghui.com.be.php new file mode 100644 index 0000000..d8f7eb1 --- /dev/null +++ b/wp-content/wp-rocket-config/nenghui.com.be.php @@ -0,0 +1,95 @@ + 'q', +); +$rocket_secret_cache_key = '689ae14a5abbd039885448'; +$rocket_cache_ssl = 1; +$rocket_cache_mobile = 1; +$rocket_do_caching_mobile_files = 1; +$rocket_cache_ignored_parameters = array( + 'utm_source' => 0, + 'utm_medium' => 1, + 'utm_campaign' => 2, + 'utm_expid' => 3, + 'utm_term' => 4, + 'utm_content' => 5, + 'utm_id' => 6, + 'utm_source_platform' => 7, + 'utm_creative_format' => 8, + 'utm_marketing_tactic' => 9, + 'mtm_source' => 10, + 'mtm_medium' => 11, + 'mtm_campaign' => 12, + 'mtm_keyword' => 13, + 'mtm_cid' => 14, + 'mtm_content' => 15, + 'pk_source' => 16, + 'pk_medium' => 17, + 'pk_campaign' => 18, + 'pk_keyword' => 19, + 'pk_cid' => 20, + 'pk_content' => 21, + 'fb_action_ids' => 22, + 'fb_action_types' => 23, + 'fb_source' => 24, + 'fbclid' => 25, + 'campaignid' => 26, + 'adgroupid' => 27, + 'adid' => 28, + 'gclid' => 29, + 'age-verified' => 30, + 'ao_noptimize' => 31, + 'usqp' => 32, + 'cn-reloaded' => 33, + '_ga' => 34, + 'sscid' => 35, + 'gclsrc' => 36, + '_gl' => 37, + 'mc_cid' => 38, + 'mc_eid' => 39, + '_bta_tid' => 40, + '_bta_c' => 41, + 'trk_contact' => 42, + 'trk_msg' => 43, + 'trk_module' => 44, + 'trk_sid' => 45, + 'gdfms' => 46, + 'gdftrk' => 47, + 'gdffi' => 48, + '_ke' => 49, + '_kx' => 50, + 'redirect_log_mongo_id' => 51, + 'redirect_mongo_id' => 52, + 'sb_referer_host' => 53, + 'mkwid' => 54, + 'pcrid' => 55, + 'ef_id' => 56, + 's_kwcid' => 57, + 'msclkid' => 58, + 'dm_i' => 59, + 'epik' => 60, + 'pp' => 61, + 'gbraid' => 62, + 'wbraid' => 63, + 'ssp_iabi' => 64, + 'ssp_iaba' => 65, + 'gad' => 66, + 'vgo_ee' => 67, + 'gad_source' => 68, + 'gad_campaignid' => 69, + 'onlywprocket' => 70, + 'srsltid' => 71, + 'gadid' => 72, + 'fbadid' => 73, +); +$rocket_cache_mandatory_cookies = ''; +$rocket_cache_dynamic_cookies = array(); +$rocket_permalink_structure = '/%category%/%postname%/%post_id%/'; diff --git a/wp-content/wp-rocket-config/nenghui.com.de.php b/wp-content/wp-rocket-config/nenghui.com.de.php new file mode 100644 index 0000000..d8f7eb1 --- /dev/null +++ b/wp-content/wp-rocket-config/nenghui.com.de.php @@ -0,0 +1,95 @@ + 'q', +); +$rocket_secret_cache_key = '689ae14a5abbd039885448'; +$rocket_cache_ssl = 1; +$rocket_cache_mobile = 1; +$rocket_do_caching_mobile_files = 1; +$rocket_cache_ignored_parameters = array( + 'utm_source' => 0, + 'utm_medium' => 1, + 'utm_campaign' => 2, + 'utm_expid' => 3, + 'utm_term' => 4, + 'utm_content' => 5, + 'utm_id' => 6, + 'utm_source_platform' => 7, + 'utm_creative_format' => 8, + 'utm_marketing_tactic' => 9, + 'mtm_source' => 10, + 'mtm_medium' => 11, + 'mtm_campaign' => 12, + 'mtm_keyword' => 13, + 'mtm_cid' => 14, + 'mtm_content' => 15, + 'pk_source' => 16, + 'pk_medium' => 17, + 'pk_campaign' => 18, + 'pk_keyword' => 19, + 'pk_cid' => 20, + 'pk_content' => 21, + 'fb_action_ids' => 22, + 'fb_action_types' => 23, + 'fb_source' => 24, + 'fbclid' => 25, + 'campaignid' => 26, + 'adgroupid' => 27, + 'adid' => 28, + 'gclid' => 29, + 'age-verified' => 30, + 'ao_noptimize' => 31, + 'usqp' => 32, + 'cn-reloaded' => 33, + '_ga' => 34, + 'sscid' => 35, + 'gclsrc' => 36, + '_gl' => 37, + 'mc_cid' => 38, + 'mc_eid' => 39, + '_bta_tid' => 40, + '_bta_c' => 41, + 'trk_contact' => 42, + 'trk_msg' => 43, + 'trk_module' => 44, + 'trk_sid' => 45, + 'gdfms' => 46, + 'gdftrk' => 47, + 'gdffi' => 48, + '_ke' => 49, + '_kx' => 50, + 'redirect_log_mongo_id' => 51, + 'redirect_mongo_id' => 52, + 'sb_referer_host' => 53, + 'mkwid' => 54, + 'pcrid' => 55, + 'ef_id' => 56, + 's_kwcid' => 57, + 'msclkid' => 58, + 'dm_i' => 59, + 'epik' => 60, + 'pp' => 61, + 'gbraid' => 62, + 'wbraid' => 63, + 'ssp_iabi' => 64, + 'ssp_iaba' => 65, + 'gad' => 66, + 'vgo_ee' => 67, + 'gad_source' => 68, + 'gad_campaignid' => 69, + 'onlywprocket' => 70, + 'srsltid' => 71, + 'gadid' => 72, + 'fbadid' => 73, +); +$rocket_cache_mandatory_cookies = ''; +$rocket_cache_dynamic_cookies = array(); +$rocket_permalink_structure = '/%category%/%postname%/%post_id%/'; diff --git a/wp-content/wp-rocket-config/nenghui.com.es.php b/wp-content/wp-rocket-config/nenghui.com.es.php new file mode 100644 index 0000000..d8f7eb1 --- /dev/null +++ b/wp-content/wp-rocket-config/nenghui.com.es.php @@ -0,0 +1,95 @@ + 'q', +); +$rocket_secret_cache_key = '689ae14a5abbd039885448'; +$rocket_cache_ssl = 1; +$rocket_cache_mobile = 1; +$rocket_do_caching_mobile_files = 1; +$rocket_cache_ignored_parameters = array( + 'utm_source' => 0, + 'utm_medium' => 1, + 'utm_campaign' => 2, + 'utm_expid' => 3, + 'utm_term' => 4, + 'utm_content' => 5, + 'utm_id' => 6, + 'utm_source_platform' => 7, + 'utm_creative_format' => 8, + 'utm_marketing_tactic' => 9, + 'mtm_source' => 10, + 'mtm_medium' => 11, + 'mtm_campaign' => 12, + 'mtm_keyword' => 13, + 'mtm_cid' => 14, + 'mtm_content' => 15, + 'pk_source' => 16, + 'pk_medium' => 17, + 'pk_campaign' => 18, + 'pk_keyword' => 19, + 'pk_cid' => 20, + 'pk_content' => 21, + 'fb_action_ids' => 22, + 'fb_action_types' => 23, + 'fb_source' => 24, + 'fbclid' => 25, + 'campaignid' => 26, + 'adgroupid' => 27, + 'adid' => 28, + 'gclid' => 29, + 'age-verified' => 30, + 'ao_noptimize' => 31, + 'usqp' => 32, + 'cn-reloaded' => 33, + '_ga' => 34, + 'sscid' => 35, + 'gclsrc' => 36, + '_gl' => 37, + 'mc_cid' => 38, + 'mc_eid' => 39, + '_bta_tid' => 40, + '_bta_c' => 41, + 'trk_contact' => 42, + 'trk_msg' => 43, + 'trk_module' => 44, + 'trk_sid' => 45, + 'gdfms' => 46, + 'gdftrk' => 47, + 'gdffi' => 48, + '_ke' => 49, + '_kx' => 50, + 'redirect_log_mongo_id' => 51, + 'redirect_mongo_id' => 52, + 'sb_referer_host' => 53, + 'mkwid' => 54, + 'pcrid' => 55, + 'ef_id' => 56, + 's_kwcid' => 57, + 'msclkid' => 58, + 'dm_i' => 59, + 'epik' => 60, + 'pp' => 61, + 'gbraid' => 62, + 'wbraid' => 63, + 'ssp_iabi' => 64, + 'ssp_iaba' => 65, + 'gad' => 66, + 'vgo_ee' => 67, + 'gad_source' => 68, + 'gad_campaignid' => 69, + 'onlywprocket' => 70, + 'srsltid' => 71, + 'gadid' => 72, + 'fbadid' => 73, +); +$rocket_cache_mandatory_cookies = ''; +$rocket_cache_dynamic_cookies = array(); +$rocket_permalink_structure = '/%category%/%postname%/%post_id%/'; diff --git a/wp-content/wp-rocket-config/nenghui.com.fr.php b/wp-content/wp-rocket-config/nenghui.com.fr.php new file mode 100644 index 0000000..d8f7eb1 --- /dev/null +++ b/wp-content/wp-rocket-config/nenghui.com.fr.php @@ -0,0 +1,95 @@ + 'q', +); +$rocket_secret_cache_key = '689ae14a5abbd039885448'; +$rocket_cache_ssl = 1; +$rocket_cache_mobile = 1; +$rocket_do_caching_mobile_files = 1; +$rocket_cache_ignored_parameters = array( + 'utm_source' => 0, + 'utm_medium' => 1, + 'utm_campaign' => 2, + 'utm_expid' => 3, + 'utm_term' => 4, + 'utm_content' => 5, + 'utm_id' => 6, + 'utm_source_platform' => 7, + 'utm_creative_format' => 8, + 'utm_marketing_tactic' => 9, + 'mtm_source' => 10, + 'mtm_medium' => 11, + 'mtm_campaign' => 12, + 'mtm_keyword' => 13, + 'mtm_cid' => 14, + 'mtm_content' => 15, + 'pk_source' => 16, + 'pk_medium' => 17, + 'pk_campaign' => 18, + 'pk_keyword' => 19, + 'pk_cid' => 20, + 'pk_content' => 21, + 'fb_action_ids' => 22, + 'fb_action_types' => 23, + 'fb_source' => 24, + 'fbclid' => 25, + 'campaignid' => 26, + 'adgroupid' => 27, + 'adid' => 28, + 'gclid' => 29, + 'age-verified' => 30, + 'ao_noptimize' => 31, + 'usqp' => 32, + 'cn-reloaded' => 33, + '_ga' => 34, + 'sscid' => 35, + 'gclsrc' => 36, + '_gl' => 37, + 'mc_cid' => 38, + 'mc_eid' => 39, + '_bta_tid' => 40, + '_bta_c' => 41, + 'trk_contact' => 42, + 'trk_msg' => 43, + 'trk_module' => 44, + 'trk_sid' => 45, + 'gdfms' => 46, + 'gdftrk' => 47, + 'gdffi' => 48, + '_ke' => 49, + '_kx' => 50, + 'redirect_log_mongo_id' => 51, + 'redirect_mongo_id' => 52, + 'sb_referer_host' => 53, + 'mkwid' => 54, + 'pcrid' => 55, + 'ef_id' => 56, + 's_kwcid' => 57, + 'msclkid' => 58, + 'dm_i' => 59, + 'epik' => 60, + 'pp' => 61, + 'gbraid' => 62, + 'wbraid' => 63, + 'ssp_iabi' => 64, + 'ssp_iaba' => 65, + 'gad' => 66, + 'vgo_ee' => 67, + 'gad_source' => 68, + 'gad_campaignid' => 69, + 'onlywprocket' => 70, + 'srsltid' => 71, + 'gadid' => 72, + 'fbadid' => 73, +); +$rocket_cache_mandatory_cookies = ''; +$rocket_cache_dynamic_cookies = array(); +$rocket_permalink_structure = '/%category%/%postname%/%post_id%/'; diff --git a/wp-content/wp-rocket-config/nenghui.com.ms.php b/wp-content/wp-rocket-config/nenghui.com.ms.php new file mode 100644 index 0000000..d8f7eb1 --- /dev/null +++ b/wp-content/wp-rocket-config/nenghui.com.ms.php @@ -0,0 +1,95 @@ + 'q', +); +$rocket_secret_cache_key = '689ae14a5abbd039885448'; +$rocket_cache_ssl = 1; +$rocket_cache_mobile = 1; +$rocket_do_caching_mobile_files = 1; +$rocket_cache_ignored_parameters = array( + 'utm_source' => 0, + 'utm_medium' => 1, + 'utm_campaign' => 2, + 'utm_expid' => 3, + 'utm_term' => 4, + 'utm_content' => 5, + 'utm_id' => 6, + 'utm_source_platform' => 7, + 'utm_creative_format' => 8, + 'utm_marketing_tactic' => 9, + 'mtm_source' => 10, + 'mtm_medium' => 11, + 'mtm_campaign' => 12, + 'mtm_keyword' => 13, + 'mtm_cid' => 14, + 'mtm_content' => 15, + 'pk_source' => 16, + 'pk_medium' => 17, + 'pk_campaign' => 18, + 'pk_keyword' => 19, + 'pk_cid' => 20, + 'pk_content' => 21, + 'fb_action_ids' => 22, + 'fb_action_types' => 23, + 'fb_source' => 24, + 'fbclid' => 25, + 'campaignid' => 26, + 'adgroupid' => 27, + 'adid' => 28, + 'gclid' => 29, + 'age-verified' => 30, + 'ao_noptimize' => 31, + 'usqp' => 32, + 'cn-reloaded' => 33, + '_ga' => 34, + 'sscid' => 35, + 'gclsrc' => 36, + '_gl' => 37, + 'mc_cid' => 38, + 'mc_eid' => 39, + '_bta_tid' => 40, + '_bta_c' => 41, + 'trk_contact' => 42, + 'trk_msg' => 43, + 'trk_module' => 44, + 'trk_sid' => 45, + 'gdfms' => 46, + 'gdftrk' => 47, + 'gdffi' => 48, + '_ke' => 49, + '_kx' => 50, + 'redirect_log_mongo_id' => 51, + 'redirect_mongo_id' => 52, + 'sb_referer_host' => 53, + 'mkwid' => 54, + 'pcrid' => 55, + 'ef_id' => 56, + 's_kwcid' => 57, + 'msclkid' => 58, + 'dm_i' => 59, + 'epik' => 60, + 'pp' => 61, + 'gbraid' => 62, + 'wbraid' => 63, + 'ssp_iabi' => 64, + 'ssp_iaba' => 65, + 'gad' => 66, + 'vgo_ee' => 67, + 'gad_source' => 68, + 'gad_campaignid' => 69, + 'onlywprocket' => 70, + 'srsltid' => 71, + 'gadid' => 72, + 'fbadid' => 73, +); +$rocket_cache_mandatory_cookies = ''; +$rocket_cache_dynamic_cookies = array(); +$rocket_permalink_structure = '/%category%/%postname%/%post_id%/'; diff --git a/wp-content/wp-rocket-config/nenghui.com.php b/wp-content/wp-rocket-config/nenghui.com.php new file mode 100644 index 0000000..d8f7eb1 --- /dev/null +++ b/wp-content/wp-rocket-config/nenghui.com.php @@ -0,0 +1,95 @@ + 'q', +); +$rocket_secret_cache_key = '689ae14a5abbd039885448'; +$rocket_cache_ssl = 1; +$rocket_cache_mobile = 1; +$rocket_do_caching_mobile_files = 1; +$rocket_cache_ignored_parameters = array( + 'utm_source' => 0, + 'utm_medium' => 1, + 'utm_campaign' => 2, + 'utm_expid' => 3, + 'utm_term' => 4, + 'utm_content' => 5, + 'utm_id' => 6, + 'utm_source_platform' => 7, + 'utm_creative_format' => 8, + 'utm_marketing_tactic' => 9, + 'mtm_source' => 10, + 'mtm_medium' => 11, + 'mtm_campaign' => 12, + 'mtm_keyword' => 13, + 'mtm_cid' => 14, + 'mtm_content' => 15, + 'pk_source' => 16, + 'pk_medium' => 17, + 'pk_campaign' => 18, + 'pk_keyword' => 19, + 'pk_cid' => 20, + 'pk_content' => 21, + 'fb_action_ids' => 22, + 'fb_action_types' => 23, + 'fb_source' => 24, + 'fbclid' => 25, + 'campaignid' => 26, + 'adgroupid' => 27, + 'adid' => 28, + 'gclid' => 29, + 'age-verified' => 30, + 'ao_noptimize' => 31, + 'usqp' => 32, + 'cn-reloaded' => 33, + '_ga' => 34, + 'sscid' => 35, + 'gclsrc' => 36, + '_gl' => 37, + 'mc_cid' => 38, + 'mc_eid' => 39, + '_bta_tid' => 40, + '_bta_c' => 41, + 'trk_contact' => 42, + 'trk_msg' => 43, + 'trk_module' => 44, + 'trk_sid' => 45, + 'gdfms' => 46, + 'gdftrk' => 47, + 'gdffi' => 48, + '_ke' => 49, + '_kx' => 50, + 'redirect_log_mongo_id' => 51, + 'redirect_mongo_id' => 52, + 'sb_referer_host' => 53, + 'mkwid' => 54, + 'pcrid' => 55, + 'ef_id' => 56, + 's_kwcid' => 57, + 'msclkid' => 58, + 'dm_i' => 59, + 'epik' => 60, + 'pp' => 61, + 'gbraid' => 62, + 'wbraid' => 63, + 'ssp_iabi' => 64, + 'ssp_iaba' => 65, + 'gad' => 66, + 'vgo_ee' => 67, + 'gad_source' => 68, + 'gad_campaignid' => 69, + 'onlywprocket' => 70, + 'srsltid' => 71, + 'gadid' => 72, + 'fbadid' => 73, +); +$rocket_cache_mandatory_cookies = ''; +$rocket_cache_dynamic_cookies = array(); +$rocket_permalink_structure = '/%category%/%postname%/%post_id%/'; diff --git a/wp-content/wp-rocket-config/nenghui.com.pt.php b/wp-content/wp-rocket-config/nenghui.com.pt.php new file mode 100644 index 0000000..d8f7eb1 --- /dev/null +++ b/wp-content/wp-rocket-config/nenghui.com.pt.php @@ -0,0 +1,95 @@ + 'q', +); +$rocket_secret_cache_key = '689ae14a5abbd039885448'; +$rocket_cache_ssl = 1; +$rocket_cache_mobile = 1; +$rocket_do_caching_mobile_files = 1; +$rocket_cache_ignored_parameters = array( + 'utm_source' => 0, + 'utm_medium' => 1, + 'utm_campaign' => 2, + 'utm_expid' => 3, + 'utm_term' => 4, + 'utm_content' => 5, + 'utm_id' => 6, + 'utm_source_platform' => 7, + 'utm_creative_format' => 8, + 'utm_marketing_tactic' => 9, + 'mtm_source' => 10, + 'mtm_medium' => 11, + 'mtm_campaign' => 12, + 'mtm_keyword' => 13, + 'mtm_cid' => 14, + 'mtm_content' => 15, + 'pk_source' => 16, + 'pk_medium' => 17, + 'pk_campaign' => 18, + 'pk_keyword' => 19, + 'pk_cid' => 20, + 'pk_content' => 21, + 'fb_action_ids' => 22, + 'fb_action_types' => 23, + 'fb_source' => 24, + 'fbclid' => 25, + 'campaignid' => 26, + 'adgroupid' => 27, + 'adid' => 28, + 'gclid' => 29, + 'age-verified' => 30, + 'ao_noptimize' => 31, + 'usqp' => 32, + 'cn-reloaded' => 33, + '_ga' => 34, + 'sscid' => 35, + 'gclsrc' => 36, + '_gl' => 37, + 'mc_cid' => 38, + 'mc_eid' => 39, + '_bta_tid' => 40, + '_bta_c' => 41, + 'trk_contact' => 42, + 'trk_msg' => 43, + 'trk_module' => 44, + 'trk_sid' => 45, + 'gdfms' => 46, + 'gdftrk' => 47, + 'gdffi' => 48, + '_ke' => 49, + '_kx' => 50, + 'redirect_log_mongo_id' => 51, + 'redirect_mongo_id' => 52, + 'sb_referer_host' => 53, + 'mkwid' => 54, + 'pcrid' => 55, + 'ef_id' => 56, + 's_kwcid' => 57, + 'msclkid' => 58, + 'dm_i' => 59, + 'epik' => 60, + 'pp' => 61, + 'gbraid' => 62, + 'wbraid' => 63, + 'ssp_iabi' => 64, + 'ssp_iaba' => 65, + 'gad' => 66, + 'vgo_ee' => 67, + 'gad_source' => 68, + 'gad_campaignid' => 69, + 'onlywprocket' => 70, + 'srsltid' => 71, + 'gadid' => 72, + 'fbadid' => 73, +); +$rocket_cache_mandatory_cookies = ''; +$rocket_cache_dynamic_cookies = array(); +$rocket_permalink_structure = '/%category%/%postname%/%post_id%/'; diff --git a/wp-content/wp-rocket-config/nenghui.com.ru.php b/wp-content/wp-rocket-config/nenghui.com.ru.php new file mode 100644 index 0000000..d8f7eb1 --- /dev/null +++ b/wp-content/wp-rocket-config/nenghui.com.ru.php @@ -0,0 +1,95 @@ + 'q', +); +$rocket_secret_cache_key = '689ae14a5abbd039885448'; +$rocket_cache_ssl = 1; +$rocket_cache_mobile = 1; +$rocket_do_caching_mobile_files = 1; +$rocket_cache_ignored_parameters = array( + 'utm_source' => 0, + 'utm_medium' => 1, + 'utm_campaign' => 2, + 'utm_expid' => 3, + 'utm_term' => 4, + 'utm_content' => 5, + 'utm_id' => 6, + 'utm_source_platform' => 7, + 'utm_creative_format' => 8, + 'utm_marketing_tactic' => 9, + 'mtm_source' => 10, + 'mtm_medium' => 11, + 'mtm_campaign' => 12, + 'mtm_keyword' => 13, + 'mtm_cid' => 14, + 'mtm_content' => 15, + 'pk_source' => 16, + 'pk_medium' => 17, + 'pk_campaign' => 18, + 'pk_keyword' => 19, + 'pk_cid' => 20, + 'pk_content' => 21, + 'fb_action_ids' => 22, + 'fb_action_types' => 23, + 'fb_source' => 24, + 'fbclid' => 25, + 'campaignid' => 26, + 'adgroupid' => 27, + 'adid' => 28, + 'gclid' => 29, + 'age-verified' => 30, + 'ao_noptimize' => 31, + 'usqp' => 32, + 'cn-reloaded' => 33, + '_ga' => 34, + 'sscid' => 35, + 'gclsrc' => 36, + '_gl' => 37, + 'mc_cid' => 38, + 'mc_eid' => 39, + '_bta_tid' => 40, + '_bta_c' => 41, + 'trk_contact' => 42, + 'trk_msg' => 43, + 'trk_module' => 44, + 'trk_sid' => 45, + 'gdfms' => 46, + 'gdftrk' => 47, + 'gdffi' => 48, + '_ke' => 49, + '_kx' => 50, + 'redirect_log_mongo_id' => 51, + 'redirect_mongo_id' => 52, + 'sb_referer_host' => 53, + 'mkwid' => 54, + 'pcrid' => 55, + 'ef_id' => 56, + 's_kwcid' => 57, + 'msclkid' => 58, + 'dm_i' => 59, + 'epik' => 60, + 'pp' => 61, + 'gbraid' => 62, + 'wbraid' => 63, + 'ssp_iabi' => 64, + 'ssp_iaba' => 65, + 'gad' => 66, + 'vgo_ee' => 67, + 'gad_source' => 68, + 'gad_campaignid' => 69, + 'onlywprocket' => 70, + 'srsltid' => 71, + 'gadid' => 72, + 'fbadid' => 73, +); +$rocket_cache_mandatory_cookies = ''; +$rocket_cache_dynamic_cookies = array(); +$rocket_permalink_structure = '/%category%/%postname%/%post_id%/'; diff --git a/wp-content/wp-rocket-config/nenghui.com.th.php b/wp-content/wp-rocket-config/nenghui.com.th.php new file mode 100644 index 0000000..d8f7eb1 --- /dev/null +++ b/wp-content/wp-rocket-config/nenghui.com.th.php @@ -0,0 +1,95 @@ + 'q', +); +$rocket_secret_cache_key = '689ae14a5abbd039885448'; +$rocket_cache_ssl = 1; +$rocket_cache_mobile = 1; +$rocket_do_caching_mobile_files = 1; +$rocket_cache_ignored_parameters = array( + 'utm_source' => 0, + 'utm_medium' => 1, + 'utm_campaign' => 2, + 'utm_expid' => 3, + 'utm_term' => 4, + 'utm_content' => 5, + 'utm_id' => 6, + 'utm_source_platform' => 7, + 'utm_creative_format' => 8, + 'utm_marketing_tactic' => 9, + 'mtm_source' => 10, + 'mtm_medium' => 11, + 'mtm_campaign' => 12, + 'mtm_keyword' => 13, + 'mtm_cid' => 14, + 'mtm_content' => 15, + 'pk_source' => 16, + 'pk_medium' => 17, + 'pk_campaign' => 18, + 'pk_keyword' => 19, + 'pk_cid' => 20, + 'pk_content' => 21, + 'fb_action_ids' => 22, + 'fb_action_types' => 23, + 'fb_source' => 24, + 'fbclid' => 25, + 'campaignid' => 26, + 'adgroupid' => 27, + 'adid' => 28, + 'gclid' => 29, + 'age-verified' => 30, + 'ao_noptimize' => 31, + 'usqp' => 32, + 'cn-reloaded' => 33, + '_ga' => 34, + 'sscid' => 35, + 'gclsrc' => 36, + '_gl' => 37, + 'mc_cid' => 38, + 'mc_eid' => 39, + '_bta_tid' => 40, + '_bta_c' => 41, + 'trk_contact' => 42, + 'trk_msg' => 43, + 'trk_module' => 44, + 'trk_sid' => 45, + 'gdfms' => 46, + 'gdftrk' => 47, + 'gdffi' => 48, + '_ke' => 49, + '_kx' => 50, + 'redirect_log_mongo_id' => 51, + 'redirect_mongo_id' => 52, + 'sb_referer_host' => 53, + 'mkwid' => 54, + 'pcrid' => 55, + 'ef_id' => 56, + 's_kwcid' => 57, + 'msclkid' => 58, + 'dm_i' => 59, + 'epik' => 60, + 'pp' => 61, + 'gbraid' => 62, + 'wbraid' => 63, + 'ssp_iabi' => 64, + 'ssp_iaba' => 65, + 'gad' => 66, + 'vgo_ee' => 67, + 'gad_source' => 68, + 'gad_campaignid' => 69, + 'onlywprocket' => 70, + 'srsltid' => 71, + 'gadid' => 72, + 'fbadid' => 73, +); +$rocket_cache_mandatory_cookies = ''; +$rocket_cache_dynamic_cookies = array(); +$rocket_permalink_structure = '/%category%/%postname%/%post_id%/'; diff --git a/wp-cron.php b/wp-cron.php new file mode 100644 index 0000000..417dcce --- /dev/null +++ b/wp-cron.php @@ -0,0 +1,205 @@ +get_row( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = %s LIMIT 1", '_transient_doing_cron' ) ); + if ( is_object( $row ) ) { + $value = $row->option_value; + } + } + + return $value; +} + +$crons = wp_get_ready_cron_jobs(); +if ( empty( $crons ) ) { + die(); +} + +$gmt_time = microtime( true ); + +// The cron lock: a unix timestamp from when the cron was spawned. +$doing_cron_transient = get_transient( 'doing_cron' ); + +// Use global $doing_wp_cron lock, otherwise use the GET lock. If no lock, try to grab a new lock. +if ( empty( $doing_wp_cron ) ) { + if ( empty( $_GET['doing_wp_cron'] ) ) { + // Called from external script/job. Try setting a lock. + if ( $doing_cron_transient && ( $doing_cron_transient + WP_CRON_LOCK_TIMEOUT > $gmt_time ) ) { + return; + } + $doing_wp_cron = sprintf( '%.22F', microtime( true ) ); + $doing_cron_transient = $doing_wp_cron; + set_transient( 'doing_cron', $doing_wp_cron ); + } else { + $doing_wp_cron = $_GET['doing_wp_cron']; + } +} + +/* + * The cron lock (a unix timestamp set when the cron was spawned), + * must match $doing_wp_cron (the "key"). + */ +if ( $doing_cron_transient !== $doing_wp_cron ) { + return; +} + +foreach ( $crons as $timestamp => $cronhooks ) { + if ( $timestamp > $gmt_time ) { + break; + } + + foreach ( $cronhooks as $hook => $keys ) { + + foreach ( $keys as $k => $v ) { + + $schedule = $v['schedule']; + + if ( $schedule ) { + $result = wp_reschedule_event( $timestamp, $schedule, $hook, $v['args'], true ); + + if ( is_wp_error( $result ) ) { + error_log( + sprintf( + /* translators: 1: Hook name, 2: Error code, 3: Error message, 4: Event data. */ + __( 'Cron reschedule event error for hook: %1$s, Error code: %2$s, Error message: %3$s, Data: %4$s' ), + $hook, + $result->get_error_code(), + $result->get_error_message(), + wp_json_encode( $v ) + ) + ); + + /** + * Fires if an error happens when rescheduling a cron event. + * + * @since 6.1.0 + * + * @param WP_Error $result The WP_Error object. + * @param string $hook Action hook to execute when the event is run. + * @param array $v Event data. + */ + do_action( 'cron_reschedule_event_error', $result, $hook, $v ); + } + } + + $result = wp_unschedule_event( $timestamp, $hook, $v['args'], true ); + + if ( is_wp_error( $result ) ) { + error_log( + sprintf( + /* translators: 1: Hook name, 2: Error code, 3: Error message, 4: Event data. */ + __( 'Cron unschedule event error for hook: %1$s, Error code: %2$s, Error message: %3$s, Data: %4$s' ), + $hook, + $result->get_error_code(), + $result->get_error_message(), + wp_json_encode( $v ) + ) + ); + + /** + * Fires if an error happens when unscheduling a cron event. + * + * @since 6.1.0 + * + * @param WP_Error $result The WP_Error object. + * @param string $hook Action hook to execute when the event is run. + * @param array $v Event data. + */ + do_action( 'cron_unschedule_event_error', $result, $hook, $v ); + } + + /** + * Fires scheduled events. + * + * @ignore + * @since 2.1.0 + * + * @param string $hook Name of the hook that was scheduled to be fired. + * @param array $args The arguments to be passed to the hook. + */ + do_action_ref_array( $hook, $v['args'] ); + + // If the hook ran too long and another cron process stole the lock, quit. + if ( _get_cron_lock() !== $doing_wp_cron ) { + return; + } + } + } +} + +if ( _get_cron_lock() === $doing_wp_cron ) { + delete_transient( 'doing_cron' ); +} + +die(); diff --git a/wp-links-opml.php b/wp-links-opml.php new file mode 100644 index 0000000..51ef95b --- /dev/null +++ b/wp-links-opml.php @@ -0,0 +1,98 @@ +\n"; +?> + + + + <?php + /* translators: %s: Site title. */ + printf( __( 'Links for %s' ), esc_attr( get_bloginfo( 'name', 'display' ) ) ); + ?> + + GMT + + + + 'link_category', + 'hierarchical' => 0, + ) + ); +} else { + $cats = get_categories( + array( + 'taxonomy' => 'link_category', + 'hierarchical' => 0, + 'include' => $link_cat, + ) + ); +} + +foreach ( (array) $cats as $cat ) : + /** This filter is documented in wp-includes/bookmark-template.php */ + $catname = apply_filters( 'link_category', $cat->name ); + + ?> + + $cat->term_id ) ); + foreach ( (array) $bookmarks as $bookmark ) : + /** + * Filters the OPML outline link title text. + * + * @since 2.2.0 + * + * @param string $title The OPML outline title text. + */ + $title = apply_filters( 'link_title', $bookmark->link_name ); + ?> + + + + + + diff --git a/wp-load.php b/wp-load.php new file mode 100644 index 0000000..40c141f --- /dev/null +++ b/wp-load.php @@ -0,0 +1,105 @@ +' . sprintf( + /* translators: %s: wp-config.php */ + __( "There doesn't seem to be a %s file. It is needed before the installation can continue." ), + 'wp-config.php' + ) . '

'; + $die .= '

' . sprintf( + /* translators: 1: Documentation URL, 2: wp-config.php */ + __( 'Need more help? Read the support article on %2$s.' ), + __( 'https://developer.wordpress.org/advanced-administration/wordpress/wp-config/' ), + 'wp-config.php' + ) . '

'; + $die .= '

' . sprintf( + /* translators: %s: wp-config.php */ + __( "You can create a %s file through a web interface, but this doesn't work for all server setups. The safest way is to manually create the file." ), + 'wp-config.php' + ) . '

'; + $die .= '

' . __( 'Create a Configuration File' ) . '

'; + + wp_die( $die, __( 'WordPress › Error' ) ); +} diff --git a/wp-login.php b/wp-login.php new file mode 100644 index 0000000..60d9c21 --- /dev/null +++ b/wp-login.php @@ -0,0 +1,1651 @@ +` element. + * Defaults to 'Log In'. + * @param string $message Optional. Message to display in header. Default empty. + * @param WP_Error|null $wp_error Optional. The error to pass. Defaults to a WP_Error instance. + */ +function login_header( $title = null, $message = '', $wp_error = null ) { + global $error, $interim_login, $action; + + if ( null === $title ) { + $title = __( 'Log In' ); + } + + // Don't index any of these forms. + add_filter( 'wp_robots', 'wp_robots_sensitive_page' ); + add_action( 'login_head', 'wp_strict_cross_origin_referrer' ); + + add_action( 'login_head', 'wp_login_viewport_meta' ); + + if ( ! is_wp_error( $wp_error ) ) { + $wp_error = new WP_Error(); + } + + // Shake it! + $shake_error_codes = array( 'empty_password', 'empty_email', 'invalid_email', 'invalidcombo', 'empty_username', 'invalid_username', 'incorrect_password', 'retrieve_password_email_failure' ); + /** + * Filters the error codes array for shaking the login form. + * + * @since 3.0.0 + * + * @param string[] $shake_error_codes Error codes that shake the login form. + */ + $shake_error_codes = apply_filters( 'shake_error_codes', $shake_error_codes ); + + if ( $shake_error_codes && $wp_error->has_errors() && in_array( $wp_error->get_error_code(), $shake_error_codes, true ) ) { + add_action( 'login_footer', 'wp_shake_js', 12 ); + } + + $login_title = get_bloginfo( 'name', 'display' ); + + /* translators: Login screen title. 1: Login screen name, 2: Network or site name. */ + $login_title = sprintf( __( '%1$s ‹ %2$s — WordPress' ), $title, $login_title ); + + if ( wp_is_recovery_mode() ) { + /* translators: %s: Login screen title. */ + $login_title = sprintf( __( 'Recovery Mode — %s' ), $login_title ); + } + + /** + * Filters the title tag content for login page. + * + * @since 4.9.0 + * + * @param string $login_title The page title, with extra context added. + * @param string $title The original page title. + */ + $login_title = apply_filters( 'login_title', $login_title, $title ); + + ?> + > + + + <?php echo $login_title; ?> + get_error_code() ) { + ob_start(); + ?> + + + + + + + + + + +

+ +
+

+ add( 'error', $error ); + unset( $error ); + } + + if ( $wp_error->has_errors() ) { + $error_list = array(); + $messages = ''; + + foreach ( $wp_error->get_error_codes() as $code ) { + $severity = $wp_error->get_error_data( $code ); + foreach ( $wp_error->get_error_messages( $code ) as $error_message ) { + if ( 'message' === $severity ) { + $messages .= '

' . $error_message . '

'; + } else { + $error_list[] = $error_message; + } + } + } + + if ( ! empty( $error_list ) ) { + $errors = ''; + + if ( count( $error_list ) > 1 ) { + $errors .= ''; + } else { + $errors .= '

' . $error_list[0] . '

'; + } + + /** + * Filters the error messages displayed above the login form. + * + * @since 2.1.0 + * + * @param string $errors Login error messages. + */ + $errors = apply_filters( 'login_errors', $errors ); + + wp_admin_notice( + $errors, + array( + 'type' => 'error', + 'id' => 'login_error', + 'paragraph_wrap' => false, + ) + ); + } + + if ( ! empty( $messages ) ) { + /** + * Filters instructional messages displayed above the login form. + * + * @since 2.5.0 + * + * @param string $messages Login messages. + */ + $messages = apply_filters( 'login_messages', $messages ); + + wp_admin_notice( + $messages, + array( + 'type' => 'info', + 'id' => 'login-message', + 'additional_classes' => array( 'message' ), + 'paragraph_wrap' => false, + ) + ); + } + } +} // End of login_header(). + +/** + * Outputs the footer for the login page. + * + * @since 3.1.0 + * + * @global bool|string $interim_login Whether interim login modal is being displayed. String 'success' + * upon successful login. + * + * @param string $input_id Which input to auto-focus. + */ +function login_footer( $input_id = '' ) { + global $interim_login; + + // Don't allow interim logins to navigate away from the page. + if ( ! $interim_login ) { + ?> +

+ %s', + esc_url( home_url( '/' ) ), + sprintf( + /* translators: %s: Site title. */ + _x( '← Go to %s', 'site' ), + get_bloginfo( 'title', 'display' ) + ) + ); + /** + * Filters the "Go to site" link displayed in the login page footer. + * + * @since 5.7.0 + * + * @param string $link HTML link to the home URL of the current site. + */ + echo apply_filters( 'login_site_html_link', $html_link ); + ?> +

+ ', '
' ); + } + + ?> + . ?> + + +
+
+ + + + 'language-switcher-locales', + 'name' => 'wp_lang', + 'selected' => determine_locale(), + 'show_available_translations' => false, + 'explicit_option_en_us' => true, + 'languages' => $languages, + ); + + /** + * Filters default arguments for the Languages select input on the login screen. + * + * The arguments get passed to the wp_dropdown_languages() function. + * + * @since 5.9.0 + * + * @param array $args Arguments for the Languages select input on the login screen. + */ + wp_dropdown_languages( apply_filters( 'login_language_dropdown_args', $args ) ); + ?> + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + 0 ) { + update_option( 'admin_email_lifespan', time() + $remind_interval ); + } + + $redirect_to = add_query_arg( 'admin_email_remind_later', 1, $redirect_to ); + wp_safe_redirect( $redirect_to ); + exit; + } + + if ( ! empty( $_POST['correct-admin-email'] ) ) { + if ( ! check_admin_referer( 'confirm_admin_email', 'confirm_admin_email_nonce' ) ) { + wp_safe_redirect( wp_login_url() ); + exit; + } + + /** + * Filters the interval for redirecting the user to the admin email confirmation screen. + * + * If `0` (zero) is returned, the user will not be redirected. + * + * @since 5.3.0 + * + * @param int $interval Interval time (in seconds). Default is 6 months. + */ + $admin_email_check_interval = (int) apply_filters( 'admin_email_check_interval', 6 * MONTH_IN_SECONDS ); + + if ( $admin_email_check_interval > 0 ) { + update_option( 'admin_email_lifespan', time() + $admin_email_check_interval ); + } + + wp_safe_redirect( $redirect_to ); + exit; + } + + login_header( __( 'Confirm your administration email' ), '', $errors ); + + /** + * Fires before the admin email confirm form. + * + * @since 5.3.0 + * + * @param WP_Error $errors A `WP_Error` object containing any errors generated by using invalid + * credentials. Note that the error object may not contain any errors. + */ + do_action( 'admin_email_confirm', $errors ); + + ?> + +
+ + + +

+ +

+

+ administration email for this website is still correct.' ); ?> + %s', + /* translators: Hidden accessibility text. */ + __( '(opens in a new tab)' ) + ); + + printf( + '%s%s', + esc_url( $admin_email_help_url ), + __( 'Why is this important?' ), + $accessibility_text + ); + + ?> +

+

+ ' . esc_html( $admin_email ) . '' + ); + + ?> +

+

+ +

+ +
+
+ + + +
+ 0 ) : ?> +
+ 'confirm_admin_email', + 'remind_me_later' => wp_create_nonce( 'remind_me_later_nonce' ), + ), + $remind_me_link + ); + + ?> + +
+ +
+
+ + HashPassword( wp_unslash( $_POST['post_password'] ) ), $expire, COOKIEPATH, COOKIE_DOMAIN, $secure ); + + wp_safe_redirect( $redirect_to ); + exit; + + case 'logout': + check_admin_referer( 'log-out' ); + + $user = wp_get_current_user(); + + wp_logout(); + + if ( ! empty( $_REQUEST['redirect_to'] ) && is_string( $_REQUEST['redirect_to'] ) ) { + $redirect_to = $_REQUEST['redirect_to']; + $requested_redirect_to = $redirect_to; + } else { + $redirect_to = add_query_arg( + array( + 'loggedout' => 'true', + 'wp_lang' => get_user_locale( $user ), + ), + wp_login_url() + ); + + $requested_redirect_to = ''; + } + + /** + * Filters the log out redirect URL. + * + * @since 4.2.0 + * + * @param string $redirect_to The redirect destination URL. + * @param string $requested_redirect_to The requested redirect destination URL passed as a parameter. + * @param WP_User $user The WP_User object for the user that's logging out. + */ + $redirect_to = apply_filters( 'logout_redirect', $redirect_to, $requested_redirect_to, $user ); + + wp_safe_redirect( $redirect_to ); + exit; + + case 'lostpassword': + case 'retrievepassword': + if ( $http_post ) { + $errors = retrieve_password(); + + if ( ! is_wp_error( $errors ) ) { + $redirect_to = ! empty( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : 'wp-login.php?checkemail=confirm'; + wp_safe_redirect( $redirect_to ); + exit; + } + } + + if ( isset( $_GET['error'] ) ) { + if ( 'invalidkey' === $_GET['error'] ) { + $errors->add( 'invalidkey', __( 'Error: Your password reset link appears to be invalid. Please request a new link below.' ) ); + } elseif ( 'expiredkey' === $_GET['error'] ) { + $errors->add( 'expiredkey', __( 'Error: Your password reset link has expired. Please request a new link below.' ) ); + } + } + + $lostpassword_redirect = ! empty( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : ''; + /** + * Filters the URL redirected to after submitting the lostpassword/retrievepassword form. + * + * @since 3.0.0 + * + * @param string $lostpassword_redirect The redirect destination URL. + */ + $redirect_to = apply_filters( 'lostpassword_redirect', $lostpassword_redirect ); + + /** + * Fires before the lost password form. + * + * @since 1.5.1 + * @since 5.1.0 Added the `$errors` parameter. + * + * @param WP_Error $errors A `WP_Error` object containing any errors generated by using invalid + * credentials. Note that the error object may not contain any errors. + */ + do_action( 'lost_password', $errors ); + + login_header( + __( 'Lost Password' ), + wp_get_admin_notice( + __( 'Please enter your username or email address. You will receive an email message with instructions on how to reset your password.' ), + array( + 'type' => 'info', + 'additional_classes' => array( 'message' ), + ) + ), + $errors + ); + + $user_login = ''; + + if ( isset( $_POST['user_login'] ) && is_string( $_POST['user_login'] ) ) { + $user_login = wp_unslash( $_POST['user_login'] ); + } + + ?> + +
+

+ + +

+ + +

+ +

+
+ + + get_error_code() === 'expired_key' ) { + wp_redirect( site_url( 'wp-login.php?action=lostpassword&error=expiredkey' ) ); + } else { + wp_redirect( site_url( 'wp-login.php?action=lostpassword&error=invalidkey' ) ); + } + + exit; + } + + $errors = new WP_Error(); + + // Check if password is one or all empty spaces. + if ( ! empty( $_POST['pass1'] ) ) { + $_POST['pass1'] = trim( $_POST['pass1'] ); + + if ( empty( $_POST['pass1'] ) ) { + $errors->add( 'password_reset_empty_space', __( 'The password cannot be a space or all spaces.' ) ); + } + } + + // Check if password fields do not match. + if ( ! empty( $_POST['pass1'] ) && trim( $_POST['pass2'] ) !== $_POST['pass1'] ) { + $errors->add( 'password_reset_mismatch', __( 'Error: The passwords do not match.' ) ); + } + + /** + * Fires before the password reset procedure is validated. + * + * @since 3.5.0 + * + * @param WP_Error $errors WP Error object. + * @param WP_User|WP_Error $user WP_User object if the login and reset key match. WP_Error object otherwise. + */ + do_action( 'validate_password_reset', $errors, $user ); + + if ( ( ! $errors->has_errors() ) && isset( $_POST['pass1'] ) && ! empty( $_POST['pass1'] ) ) { + reset_password( $user, $_POST['pass1'] ); + setcookie( $rp_cookie, ' ', time() - YEAR_IN_SECONDS, $rp_path, COOKIE_DOMAIN, is_ssl(), true ); + login_header( + __( 'Password Reset' ), + wp_get_admin_notice( + __( 'Your password has been reset.' ) . ' ' . __( 'Log in' ) . '', + array( + 'type' => 'info', + 'additional_classes' => array( 'message', 'reset-pass' ), + ) + ) + ); + login_footer(); + exit; + } + + wp_enqueue_script( 'utils' ); + wp_enqueue_script( 'user-profile' ); + + login_header( + __( 'Reset Password' ), + wp_get_admin_notice( + __( 'Enter your new password below or generate one.' ), + array( + 'type' => 'info', + 'additional_classes' => array( 'message', 'reset-pass' ), + ) + ), + $errors + ); + + ?> +
+ + +
+

+ +

+ +
+ + + +
+
+
+ + +
+
+ +

+ + +

+ +

+ + + +

+ + +

+
+ + + 'info', + 'additional_classes' => array( 'message', 'register' ), + ) + ), + $errors + ); + + ?> +
+

+ + +

+

+ + +

+ +

+ +

+ +

+ +

+
+ + + add( + 'confirm', + sprintf( + /* translators: %s: Link to the login page. */ + __( 'Check your email for the confirmation link, then visit the login page.' ), + wp_login_url() + ), + 'message' + ); + } elseif ( 'registered' === $_GET['checkemail'] ) { + $errors->add( + 'registered', + sprintf( + /* translators: %s: Link to the login page. */ + __( 'Registration complete. Please check your email, then visit the login page.' ), + wp_login_url() + ), + 'message' + ); + } + + /** This action is documented in wp-login.php */ + $errors = apply_filters( 'wp_login_errors', $errors, $redirect_to ); + + login_header( __( 'Check your email' ), '', $errors ); + login_footer(); + break; + + case 'confirmaction': + if ( ! isset( $_GET['request_id'] ) ) { + wp_die( __( 'Missing request ID.' ) ); + } + + if ( ! isset( $_GET['confirm_key'] ) ) { + wp_die( __( 'Missing confirm key.' ) ); + } + + $request_id = (int) $_GET['request_id']; + $key = sanitize_text_field( wp_unslash( $_GET['confirm_key'] ) ); + $result = wp_validate_user_request_key( $request_id, $key ); + + if ( is_wp_error( $result ) ) { + wp_die( $result ); + } + + /** + * Fires an action hook when the account action has been confirmed by the user. + * + * Using this you can assume the user has agreed to perform the action by + * clicking on the link in the confirmation email. + * + * After firing this action hook the page will redirect to wp-login a callback + * redirects or exits first. + * + * @since 4.9.6 + * + * @param int $request_id Request ID. + */ + do_action( 'user_request_action_confirmed', $request_id ); + + $message = _wp_privacy_account_request_confirmed_message( $request_id ); + + login_header( __( 'User action confirmed.' ), $message ); + login_footer(); + exit; + + case 'login': + default: + $secure_cookie = ''; + $customize_login = isset( $_REQUEST['customize-login'] ); + + if ( $customize_login ) { + wp_enqueue_script( 'customize-base' ); + } + + // If the user wants SSL but the session is not SSL, force a secure cookie. + if ( ! empty( $_POST['log'] ) && ! force_ssl_admin() ) { + $user_name = sanitize_user( wp_unslash( $_POST['log'] ) ); + $user = get_user_by( 'login', $user_name ); + + if ( ! $user && strpos( $user_name, '@' ) ) { + $user = get_user_by( 'email', $user_name ); + } + + if ( $user ) { + if ( get_user_option( 'use_ssl', $user->ID ) ) { + $secure_cookie = true; + force_ssl_admin( true ); + } + } + } + + if ( isset( $_REQUEST['redirect_to'] ) && is_string( $_REQUEST['redirect_to'] ) ) { + $redirect_to = $_REQUEST['redirect_to']; + // Redirect to HTTPS if user wants SSL. + if ( $secure_cookie && str_contains( $redirect_to, 'wp-admin' ) ) { + $redirect_to = preg_replace( '|^http://|', 'https://', $redirect_to ); + } + } else { + $redirect_to = admin_url(); + } + + $reauth = ! empty( $_REQUEST['reauth'] ); + + $user = wp_signon( array(), $secure_cookie ); + + if ( empty( $_COOKIE[ LOGGED_IN_COOKIE ] ) ) { + if ( headers_sent() ) { + $user = new WP_Error( + 'test_cookie', + sprintf( + /* translators: 1: Browser cookie documentation URL, 2: Support forums URL. */ + __( 'Error: Cookies are blocked due to unexpected output. For help, please see this documentation or try the support forums.' ), + __( 'https://developer.wordpress.org/advanced-administration/wordpress/cookies/' ), + __( 'https://wordpress.org/support/forums/' ) + ) + ); + } elseif ( isset( $_POST['testcookie'] ) && empty( $_COOKIE[ TEST_COOKIE ] ) ) { + // If cookies are disabled, the user can't log in even with a valid username and password. + $user = new WP_Error( + 'test_cookie', + sprintf( + /* translators: %s: Browser cookie documentation URL. */ + __( 'Error: Cookies are blocked or not supported by your browser. You must enable cookies to use WordPress.' ), + __( 'https://developer.wordpress.org/advanced-administration/wordpress/cookies/#enable-cookies-in-your-browser' ) + ) + ); + } + } + + $requested_redirect_to = isset( $_REQUEST['redirect_to'] ) && is_string( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : ''; + + /** + * Filters the login redirect URL. + * + * @since 3.0.0 + * + * @param string $redirect_to The redirect destination URL. + * @param string $requested_redirect_to The requested redirect destination URL passed as a parameter. + * @param WP_User|WP_Error $user WP_User object if login was successful, WP_Error object otherwise. + */ + $redirect_to = apply_filters( 'login_redirect', $redirect_to, $requested_redirect_to, $user ); + + if ( ! is_wp_error( $user ) && ! $reauth ) { + if ( $interim_login ) { + $message = '

' . __( 'You have logged in successfully.' ) . '

'; + $interim_login = 'success'; + login_header( '', $message ); + + ?> + + + + + + exists() && $user->has_cap( 'manage_options' ) ) { + $admin_email_lifespan = (int) get_option( 'admin_email_lifespan' ); + + /* + * If `0` (or anything "falsey" as it is cast to int) is returned, the user will not be redirected + * to the admin email confirmation screen. + */ + /** This filter is documented in wp-login.php */ + $admin_email_check_interval = (int) apply_filters( 'admin_email_check_interval', 6 * MONTH_IN_SECONDS ); + + if ( $admin_email_check_interval > 0 && time() > $admin_email_lifespan ) { + $redirect_to = add_query_arg( + array( + 'action' => 'confirm_admin_email', + 'wp_lang' => get_user_locale( $user ), + ), + wp_login_url( $redirect_to ) + ); + } + } + + if ( ( empty( $redirect_to ) || 'wp-admin/' === $redirect_to || admin_url() === $redirect_to ) ) { + // If the user doesn't belong to a blog, send them to user admin. If the user can't edit posts, send them to their profile. + if ( is_multisite() && ! get_active_blog_for_user( $user->ID ) && ! is_super_admin( $user->ID ) ) { + $redirect_to = user_admin_url(); + } elseif ( is_multisite() && ! $user->has_cap( 'read' ) ) { + $redirect_to = get_dashboard_url( $user->ID ); + } elseif ( ! $user->has_cap( 'edit_posts' ) ) { + $redirect_to = $user->has_cap( 'read' ) ? admin_url( 'profile.php' ) : home_url(); + } + + wp_redirect( $redirect_to ); + exit; + } + + wp_safe_redirect( $redirect_to ); + exit; + } + + $errors = $user; + // Clear errors if loggedout is set. + if ( ! empty( $_GET['loggedout'] ) || $reauth ) { + $errors = new WP_Error(); + } + + if ( empty( $_POST ) && $errors->get_error_codes() === array( 'empty_username', 'empty_password' ) ) { + $errors = new WP_Error( '', '' ); + } + + if ( $interim_login ) { + if ( ! $errors->has_errors() ) { + $errors->add( 'expired', __( 'Your session has expired. Please log in to continue where you left off.' ), 'message' ); + } + } else { + // Some parts of this script use the main login form to display a message. + if ( isset( $_GET['loggedout'] ) && $_GET['loggedout'] ) { + $errors->add( 'loggedout', __( 'You are now logged out.' ), 'message' ); + } elseif ( isset( $_GET['registration'] ) && 'disabled' === $_GET['registration'] ) { + $errors->add( 'registerdisabled', __( 'Error: User registration is currently not allowed.' ) ); + } elseif ( str_contains( $redirect_to, 'about.php?updated' ) ) { + $errors->add( 'updated', __( 'You have successfully updated WordPress! Please log back in to see what’s new.' ), 'message' ); + } elseif ( WP_Recovery_Mode_Link_Service::LOGIN_ACTION_ENTERED === $action ) { + $errors->add( 'enter_recovery_mode', __( 'Recovery Mode Initialized. Please log in to continue.' ), 'message' ); + } elseif ( isset( $_GET['redirect_to'] ) && is_string( $_GET['redirect_to'] ) + && str_contains( $_GET['redirect_to'], 'wp-admin/authorize-application.php' ) + ) { + $query_component = wp_parse_url( $_GET['redirect_to'], PHP_URL_QUERY ); + $query = array(); + if ( $query_component ) { + parse_str( $query_component, $query ); + } + + if ( ! empty( $query['app_name'] ) ) { + /* translators: 1: Website name, 2: Application name. */ + $message = sprintf( 'Please log in to %1$s to authorize %2$s to connect to your account.', get_bloginfo( 'name', 'display' ), '' . esc_html( $query['app_name'] ) . '' ); + } else { + /* translators: %s: Website name. */ + $message = sprintf( 'Please log in to %s to proceed with authorization.', get_bloginfo( 'name', 'display' ) ); + } + + $errors->add( 'authorize_application', $message, 'message' ); + } + } + + /** + * Filters the login page errors. + * + * @since 3.6.0 + * + * @param WP_Error $errors WP Error object. + * @param string $redirect_to Redirect destination URL. + */ + $errors = apply_filters( 'wp_login_errors', $errors, $redirect_to ); + + // Clear any stale cookies. + if ( $reauth ) { + wp_clear_auth_cookie(); + } + + login_header( __( 'Log In' ), '', $errors ); + + if ( isset( $_POST['log'] ) ) { + $user_login = ( 'incorrect_password' === $errors->get_error_code() || 'empty_password' === $errors->get_error_code() ) ? wp_unslash( $_POST['log'] ) : ''; + } + + $rememberme = ! empty( $_POST['rememberme'] ); + + $aria_describedby = ''; + $has_errors = $errors->has_errors(); + + if ( $has_errors ) { + $aria_describedby = ' aria-describedby="login_error"'; + } + + if ( $has_errors && 'message' === $errors->get_error_data() ) { + $aria_describedby = ' aria-describedby="login-message"'; + } + + wp_enqueue_script( 'user-profile' ); + ?> + +
+

+ + class="input" value="" size="20" autocapitalize="off" autocomplete="username" required="required" /> +

+ +
+ +
+ class="input password-input" value="" size="20" autocomplete="current-password" spellcheck="false" required="required" /> + +
+
+ +

/>

+

+ + + + + + + + + +

+
+ + + + get_error_code() === 'invalid_username' ) { + $login_script .= 'd.value = "";'; + } + } + + $login_script .= 'd.focus(); d.select();'; + $login_script .= '} catch( er ) {}'; + $login_script .= '}, 200);'; + $login_script .= "}\n"; // End of wp_attempt_focus(). + + /** + * Filters whether to print the call to `wp_attempt_focus()` on the login screen. + * + * @since 4.8.0 + * + * @param bool $print Whether to print the function call. Default true. + */ + if ( apply_filters( 'enable_login_autofocus', true ) && ! $error ) { + $login_script .= "wp_attempt_focus();\n"; + } + + // Run `wpOnload()` if defined. + $login_script .= "if ( typeof wpOnload === 'function' ) { wpOnload() }"; + + wp_print_inline_script_tag( $login_script ); + + if ( $interim_login ) { + ob_start(); + ?> + + Writing + * + * @package WordPress + */ + +/** Make sure that the WordPress bootstrap has run before continuing. */ +require __DIR__ . '/wp-load.php'; + +/** This filter is documented in wp-admin/options.php */ +if ( ! apply_filters( 'enable_post_by_email_configuration', true ) ) { + wp_die( __( 'This action has been disabled by the administrator.' ), 403 ); +} + +$mailserver_url = get_option( 'mailserver_url' ); + +if ( empty( $mailserver_url ) || 'mail.example.com' === $mailserver_url ) { + wp_die( __( 'This action has been disabled by the administrator.' ), 403 ); +} + +/** + * Fires to allow a plugin to do a complete takeover of Post by Email. + * + * @since 2.9.0 + */ +do_action( 'wp-mail.php' ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores + +/** Get the POP3 class with which to access the mailbox. */ +require_once ABSPATH . WPINC . '/class-pop3.php'; + +/** Only check at this interval for new messages. */ +if ( ! defined( 'WP_MAIL_INTERVAL' ) ) { + define( 'WP_MAIL_INTERVAL', 5 * MINUTE_IN_SECONDS ); +} + +$last_checked = get_transient( 'mailserver_last_checked' ); + +if ( $last_checked ) { + wp_die( + sprintf( + // translators: %s human readable rate limit. + __( 'Email checks are rate limited to once every %s.' ), + human_time_diff( time() - WP_MAIL_INTERVAL, time() ) + ), + __( 'Slow down, no need to check for new mails so often!' ), + 429 + ); +} + +set_transient( 'mailserver_last_checked', true, WP_MAIL_INTERVAL ); + +$time_difference = (int) ( (float) get_option( 'gmt_offset' ) * HOUR_IN_SECONDS ); + +$phone_delim = '::'; + +$pop3 = new POP3(); + +if ( ! $pop3->connect( get_option( 'mailserver_url' ), get_option( 'mailserver_port' ) ) || ! $pop3->user( get_option( 'mailserver_login' ) ) ) { + wp_die( esc_html( $pop3->ERROR ) ); +} + +$count = $pop3->pass( get_option( 'mailserver_pass' ) ); + +if ( false === $count ) { + wp_die( esc_html( $pop3->ERROR ) ); +} + +if ( 0 === $count ) { + $pop3->quit(); + wp_die( __( 'There does not seem to be any new mail.' ) ); +} + +// Always run as an unauthenticated user. +wp_set_current_user( 0 ); + +for ( $i = 1; $i <= $count; $i++ ) { + + $message = $pop3->get( $i ); + + $bodysignal = false; + $boundary = ''; + $charset = ''; + $content = ''; + $content_type = ''; + $content_transfer_encoding = ''; + $post_author = 1; + $author_found = false; + $post_date = null; + $post_date_gmt = null; + + foreach ( $message as $line ) { + // Body signal. + if ( strlen( $line ) < 3 ) { + $bodysignal = true; + } + if ( $bodysignal ) { + $content .= $line; + } else { + if ( preg_match( '/Content-Type: /i', $line ) ) { + $content_type = trim( $line ); + $content_type = substr( $content_type, 14, strlen( $content_type ) - 14 ); + $content_type = explode( ';', $content_type ); + if ( ! empty( $content_type[1] ) ) { + $charset = explode( '=', $content_type[1] ); + $charset = ( ! empty( $charset[1] ) ) ? trim( $charset[1] ) : ''; + } + $content_type = $content_type[0]; + } + if ( preg_match( '/Content-Transfer-Encoding: /i', $line ) ) { + $content_transfer_encoding = trim( $line ); + $content_transfer_encoding = substr( $content_transfer_encoding, 27, strlen( $content_transfer_encoding ) - 27 ); + $content_transfer_encoding = explode( ';', $content_transfer_encoding ); + $content_transfer_encoding = $content_transfer_encoding[0]; + } + if ( 'multipart/alternative' === $content_type && str_contains( $line, 'boundary="' ) && '' === $boundary ) { + $boundary = trim( $line ); + $boundary = explode( '"', $boundary ); + $boundary = $boundary[1]; + } + if ( preg_match( '/Subject: /i', $line ) ) { + $subject = trim( $line ); + $subject = substr( $subject, 9, strlen( $subject ) - 9 ); + // Captures any text in the subject before $phone_delim as the subject. + if ( function_exists( 'iconv_mime_decode' ) ) { + $subject = iconv_mime_decode( $subject, 2, get_option( 'blog_charset' ) ); + } else { + $subject = wp_iso_descrambler( $subject ); + } + $subject = explode( $phone_delim, $subject ); + $subject = $subject[0]; + } + + /* + * Set the author using the email address (From or Reply-To, the last used) + * otherwise use the site admin. + */ + if ( ! $author_found && preg_match( '/^(From|Reply-To): /', $line ) ) { + if ( preg_match( '|[a-z0-9_.-]+@[a-z0-9_.-]+(?!.*<)|i', $line, $matches ) ) { + $author = $matches[0]; + } else { + $author = trim( $line ); + } + $author = sanitize_email( $author ); + if ( is_email( $author ) ) { + $userdata = get_user_by( 'email', $author ); + if ( ! empty( $userdata ) ) { + $post_author = $userdata->ID; + $author_found = true; + } + } + } + + if ( preg_match( '/Date: /i', $line ) ) { // Of the form '20 Mar 2002 20:32:37 +0100'. + $ddate = str_replace( 'Date: ', '', trim( $line ) ); + // Remove parenthesized timezone string if it exists, as this confuses strtotime(). + $ddate = preg_replace( '!\s*\(.+\)\s*$!', '', $ddate ); + $ddate_timestamp = strtotime( $ddate ); + $post_date = gmdate( 'Y-m-d H:i:s', $ddate_timestamp + $time_difference ); + $post_date_gmt = gmdate( 'Y-m-d H:i:s', $ddate_timestamp ); + } + } + } + + // Set $post_status based on $author_found and on author's publish_posts capability. + if ( $author_found ) { + $user = new WP_User( $post_author ); + $post_status = ( $user->has_cap( 'publish_posts' ) ) ? 'publish' : 'pending'; + } else { + // Author not found in DB, set status to pending. Author already set to admin. + $post_status = 'pending'; + } + + $subject = trim( $subject ); + + if ( 'multipart/alternative' === $content_type ) { + $content = explode( '--' . $boundary, $content ); + $content = $content[2]; + + // Match case-insensitive Content-Transfer-Encoding. + if ( preg_match( '/Content-Transfer-Encoding: quoted-printable/i', $content, $delim ) ) { + $content = explode( $delim[0], $content ); + $content = $content[1]; + } + $content = strip_tags( $content, '


' ); + } + $content = trim( $content ); + + /** + * Filters the original content of the email. + * + * Give Post-By-Email extending plugins full access to the content, either + * the raw content, or the content of the last quoted-printable section. + * + * @since 2.8.0 + * + * @param string $content The original email content. + */ + $content = apply_filters( 'wp_mail_original_content', $content ); + + if ( false !== stripos( $content_transfer_encoding, 'quoted-printable' ) ) { + $content = quoted_printable_decode( $content ); + } + + if ( function_exists( 'iconv' ) && ! empty( $charset ) ) { + $content = iconv( $charset, get_option( 'blog_charset' ), $content ); + } + + // Captures any text in the body after $phone_delim as the body. + $content = explode( $phone_delim, $content ); + $content = empty( $content[1] ) ? $content[0] : $content[1]; + + $content = trim( $content ); + + /** + * Filters the content of the post submitted by email before saving. + * + * @since 1.2.0 + * + * @param string $content The email content. + */ + $post_content = apply_filters( 'phone_content', $content ); + + $post_title = xmlrpc_getposttitle( $content ); + + if ( '' === trim( $post_title ) ) { + $post_title = $subject; + } + + $post_category = array( get_option( 'default_email_category' ) ); + + $post_data = compact( 'post_content', 'post_title', 'post_date', 'post_date_gmt', 'post_author', 'post_category', 'post_status' ); + $post_data = wp_slash( $post_data ); + + $post_ID = wp_insert_post( $post_data ); + if ( is_wp_error( $post_ID ) ) { + echo "\n" . $post_ID->get_error_message(); + } + + // The post wasn't inserted or updated, for whatever reason. Better move forward to the next email. + if ( empty( $post_ID ) ) { + continue; + } + + /** + * Fires after a post submitted by email is published. + * + * @since 1.2.0 + * + * @param int $post_ID The post ID. + */ + do_action( 'publish_phone', $post_ID ); + + echo "\n

" . __( 'Author:' ) . ' ' . esc_html( $post_author ) . '

'; + echo "\n

" . __( 'Posted title:' ) . ' ' . esc_html( $post_title ) . '

'; + + if ( ! $pop3->delete( $i ) ) { + echo '

' . sprintf( + /* translators: %s: POP3 error. */ + __( 'Oops: %s' ), + esc_html( $pop3->ERROR ) + ) . '

'; + $pop3->reset(); + exit; + } else { + echo '

' . sprintf( + /* translators: %s: The message ID. */ + __( 'Mission complete. Message %s deleted.' ), + '' . $i . '' + ) . '

'; + } +} + +$pop3->quit(); diff --git a/wp-settings.php b/wp-settings.php new file mode 100644 index 0000000..3a91622 --- /dev/null +++ b/wp-settings.php @@ -0,0 +1,764 @@ +init(); + +// Load multisite-specific files. +if ( is_multisite() ) { + require ABSPATH . WPINC . '/ms-functions.php'; + require ABSPATH . WPINC . '/ms-default-filters.php'; + require ABSPATH . WPINC . '/ms-deprecated.php'; +} + +// Define constants that rely on the API to obtain the default value. +// Define must-use plugin directory constants, which may be overridden in the sunrise.php drop-in. +wp_plugin_directory_constants(); + +/** + * @since 3.9.0 + * + * @global array $wp_plugin_paths + */ +$GLOBALS['wp_plugin_paths'] = array(); + +// Load must-use plugins. +foreach ( wp_get_mu_plugins() as $mu_plugin ) { + $_wp_plugin_file = $mu_plugin; + include_once $mu_plugin; + $mu_plugin = $_wp_plugin_file; // Avoid stomping of the $mu_plugin variable in a plugin. + + /** + * Fires once a single must-use plugin has loaded. + * + * @since 5.1.0 + * + * @param string $mu_plugin Full path to the plugin's main file. + */ + do_action( 'mu_plugin_loaded', $mu_plugin ); +} +unset( $mu_plugin, $_wp_plugin_file ); + +// Load network activated plugins. +if ( is_multisite() ) { + foreach ( wp_get_active_network_plugins() as $network_plugin ) { + wp_register_plugin_realpath( $network_plugin ); + + $_wp_plugin_file = $network_plugin; + include_once $network_plugin; + $network_plugin = $_wp_plugin_file; // Avoid stomping of the $network_plugin variable in a plugin. + + /** + * Fires once a single network-activated plugin has loaded. + * + * @since 5.1.0 + * + * @param string $network_plugin Full path to the plugin's main file. + */ + do_action( 'network_plugin_loaded', $network_plugin ); + } + unset( $network_plugin, $_wp_plugin_file ); +} + +/** + * Fires once all must-use and network-activated plugins have loaded. + * + * @since 2.8.0 + */ +do_action( 'muplugins_loaded' ); + +if ( is_multisite() ) { + ms_cookie_constants(); +} + +// Define constants after multisite is loaded. +wp_cookie_constants(); + +// Define and enforce our SSL constants. +wp_ssl_constants(); + +// Create common globals. +require ABSPATH . WPINC . '/vars.php'; + +// Make taxonomies and posts available to plugins and themes. +// @plugin authors: warning: these get registered again on the init hook. +create_initial_taxonomies(); +create_initial_post_types(); + +wp_start_scraping_edited_file_errors(); + +// Register the default theme directory root. +register_theme_directory( get_theme_root() ); + +if ( ! is_multisite() && wp_is_fatal_error_handler_enabled() ) { + // Handle users requesting a recovery mode link and initiating recovery mode. + wp_recovery_mode()->initialize(); +} + +// To make get_plugin_data() available in a way that's compatible with plugins also loading this file, see #62244. +require_once ABSPATH . 'wp-admin/includes/plugin.php'; + +// Load active plugins. +foreach ( wp_get_active_and_valid_plugins() as $plugin ) { + wp_register_plugin_realpath( $plugin ); + + $plugin_data = get_plugin_data( $plugin, false, false ); + + $textdomain = $plugin_data['TextDomain']; + if ( $textdomain ) { + if ( $plugin_data['DomainPath'] ) { + $GLOBALS['wp_textdomain_registry']->set_custom_path( $textdomain, dirname( $plugin ) . $plugin_data['DomainPath'] ); + } else { + $GLOBALS['wp_textdomain_registry']->set_custom_path( $textdomain, dirname( $plugin ) ); + } + } + + $_wp_plugin_file = $plugin; + include_once $plugin; + $plugin = $_wp_plugin_file; // Avoid stomping of the $plugin variable in a plugin. + + /** + * Fires once a single activated plugin has loaded. + * + * @since 5.1.0 + * + * @param string $plugin Full path to the plugin's main file. + */ + do_action( 'plugin_loaded', $plugin ); +} +unset( $plugin, $_wp_plugin_file, $plugin_data, $textdomain ); + +// Load pluggable functions. +require ABSPATH . WPINC . '/pluggable.php'; +require ABSPATH . WPINC . '/pluggable-deprecated.php'; + +// Set internal encoding. +wp_set_internal_encoding(); + +// Run wp_cache_postload() if object cache is enabled and the function exists. +if ( WP_CACHE && function_exists( 'wp_cache_postload' ) ) { + wp_cache_postload(); +} + +/** + * Fires once activated plugins have loaded. + * + * Pluggable functions are also available at this point in the loading order. + * + * @since 1.5.0 + */ +do_action( 'plugins_loaded' ); + +// Define constants which affect functionality if not already defined. +wp_functionality_constants(); + +// Add magic quotes and set up $_REQUEST ( $_GET + $_POST ). +wp_magic_quotes(); + +/** + * Fires when comment cookies are sanitized. + * + * @since 2.0.11 + */ +do_action( 'sanitize_comment_cookies' ); + +/** + * WordPress Query object + * + * @since 2.0.0 + * + * @global WP_Query $wp_the_query WordPress Query object. + */ +$GLOBALS['wp_the_query'] = new WP_Query(); + +/** + * Holds the reference to {@see $wp_the_query}. + * Use this global for WordPress queries + * + * @since 1.5.0 + * + * @global WP_Query $wp_query WordPress Query object. + */ +$GLOBALS['wp_query'] = $GLOBALS['wp_the_query']; + +/** + * Holds the WordPress Rewrite object for creating pretty URLs + * + * @since 1.5.0 + * + * @global WP_Rewrite $wp_rewrite WordPress rewrite component. + */ +$GLOBALS['wp_rewrite'] = new WP_Rewrite(); + +/** + * WordPress Object + * + * @since 2.0.0 + * + * @global WP $wp Current WordPress environment instance. + */ +$GLOBALS['wp'] = new WP(); + +/** + * WordPress Widget Factory Object + * + * @since 2.8.0 + * + * @global WP_Widget_Factory $wp_widget_factory + */ +$GLOBALS['wp_widget_factory'] = new WP_Widget_Factory(); + +/** + * WordPress User Roles + * + * @since 2.0.0 + * + * @global WP_Roles $wp_roles WordPress role management object. + */ +$GLOBALS['wp_roles'] = new WP_Roles(); + +/** + * Fires before the theme is loaded. + * + * @since 2.6.0 + */ +do_action( 'setup_theme' ); + +// Define the template related constants and globals. +wp_templating_constants(); +wp_set_template_globals(); + +// Load the default text localization domain. +load_default_textdomain(); + +$locale = get_locale(); +$locale_file = WP_LANG_DIR . "/$locale.php"; +if ( ( 0 === validate_file( $locale ) ) && is_readable( $locale_file ) ) { + require $locale_file; +} +unset( $locale_file ); + +/** + * WordPress Locale object for loading locale domain date and various strings. + * + * @since 2.1.0 + * + * @global WP_Locale $wp_locale WordPress date and time locale object. + */ +$GLOBALS['wp_locale'] = new WP_Locale(); + +/** + * WordPress Locale Switcher object for switching locales. + * + * @since 4.7.0 + * + * @global WP_Locale_Switcher $wp_locale_switcher WordPress locale switcher object. + */ +$GLOBALS['wp_locale_switcher'] = new WP_Locale_Switcher(); +$GLOBALS['wp_locale_switcher']->init(); + +// Load the functions for the active theme, for both parent and child theme if applicable. +foreach ( wp_get_active_and_valid_themes() as $theme ) { + $wp_theme = wp_get_theme( basename( $theme ) ); + + $wp_theme->load_textdomain(); + + if ( file_exists( $theme . '/functions.php' ) ) { + include $theme . '/functions.php'; + } +} +unset( $theme, $wp_theme ); + +/** + * Fires after the theme is loaded. + * + * @since 3.0.0 + */ +do_action( 'after_setup_theme' ); + +// Create an instance of WP_Site_Health so that Cron events may fire. +if ( ! class_exists( 'WP_Site_Health' ) ) { + require_once ABSPATH . 'wp-admin/includes/class-wp-site-health.php'; +} +WP_Site_Health::get_instance(); + +// Set up current user. +$GLOBALS['wp']->init(); + +/** + * Fires after WordPress has finished loading but before any headers are sent. + * + * Most of WP is loaded at this stage, and the user is authenticated. WP continues + * to load on the {@see 'init'} hook that follows (e.g. widgets), and many plugins instantiate + * themselves on it for all sorts of reasons (e.g. they need a user, a taxonomy, etc.). + * + * If you wish to plug an action once WP is loaded, use the {@see 'wp_loaded'} hook below. + * + * @since 1.5.0 + */ +do_action( 'init' ); + +// Check site status. +if ( is_multisite() ) { + $file = ms_site_check(); + if ( true !== $file ) { + require $file; + die(); + } + unset( $file ); +} + +/** + * This hook is fired once WP, all plugins, and the theme are fully loaded and instantiated. + * + * Ajax requests should use wp-admin/admin-ajax.php. admin-ajax.php can handle requests for + * users not logged in. + * + * @link https://developer.wordpress.org/plugins/javascript/ajax + * + * @since 3.0.0 + */ +do_action( 'wp_loaded' ); diff --git a/wp-signup.php b/wp-signup.php new file mode 100644 index 0000000..0508d01 --- /dev/null +++ b/wp-signup.php @@ -0,0 +1,1053 @@ +is_404 = false; + +/** + * Fires before the Site Sign-up page is loaded. + * + * @since 4.4.0 + */ +do_action( 'before_signup_header' ); + +/** + * Prints styles for front-end Multisite Sign-up pages. + * + * @since MU (3.0.0) + */ +function wpmu_signup_stylesheet() { + ?> + + +
+'; +} + +$newblogname = isset( $_GET['new'] ) ? strtolower( preg_replace( '/^-|-$|[^-a-zA-Z0-9]/', '', $_GET['new'] ) ) : null; + +$current_user = wp_get_current_user(); +if ( 'none' === $active_signup ) { + _e( 'Registration has been disabled.' ); +} elseif ( 'blog' === $active_signup && ! is_user_logged_in() ) { + $login_url = wp_login_url( network_site_url( 'wp-signup.php' ) ); + /* translators: %s: Login URL. */ + printf( __( 'You must first log in, and then you can create a new site.' ), $login_url ); +} else { + $stage = isset( $_POST['stage'] ) ? $_POST['stage'] : 'default'; + switch ( $stage ) { + case 'validate-user-signup': + if ( 'all' === $active_signup + || ( 'blog' === $_POST['signup_for'] && 'blog' === $active_signup ) + || ( 'user' === $_POST['signup_for'] && 'user' === $active_signup ) + ) { + validate_user_signup(); + } else { + _e( 'User registration has been disabled.' ); + } + break; + case 'validate-blog-signup': + if ( 'all' === $active_signup || 'blog' === $active_signup ) { + validate_blog_signup(); + } else { + _e( 'Site registration has been disabled.' ); + } + break; + case 'gimmeanotherblog': + validate_another_blog_signup(); + break; + case 'default': + default: + $user_email = isset( $_POST['user_email'] ) ? $_POST['user_email'] : ''; + /** + * Fires when the site sign-up form is sent. + * + * @since 3.0.0 + */ + do_action( 'preprocess_signup_form' ); + if ( is_user_logged_in() && ( 'all' === $active_signup || 'blog' === $active_signup ) ) { + signup_another_blog( $newblogname ); + } elseif ( ! is_user_logged_in() && ( 'all' === $active_signup || 'user' === $active_signup ) ) { + signup_user( $newblogname, $user_email ); + } elseif ( ! is_user_logged_in() && ( 'blog' === $active_signup ) ) { + _e( 'Sorry, new registrations are not allowed at this time.' ); + } else { + _e( 'You are logged in already. No need to register again!' ); + } + + if ( $newblogname ) { + $newblog = get_blogaddress_by_name( $newblogname ); + + if ( 'blog' === $active_signup || 'all' === $active_signup ) { + printf( + /* translators: %s: Site address. */ + '

' . __( 'The site you were looking for, %s, does not exist, but you can create it now!' ) . '

', + '' . $newblog . '' + ); + } else { + printf( + /* translators: %s: Site address. */ + '

' . __( 'The site you were looking for, %s, does not exist.' ) . '

', + '' . $newblog . '' + ); + } + } + break; + } +} +?> +
+
+ + + '1' ) ); +} + +// Always run as an unauthenticated user. +wp_set_current_user( 0 ); + +/** + * Response to a trackback. + * + * Responds with an error or success XML message. + * + * @since 0.71 + * + * @param int|bool $error Whether there was an error. + * Default '0'. Accepts '0' or '1', true or false. + * @param string $error_message Error message if an error occurred. Default empty string. + */ +function trackback_response( $error = 0, $error_message = '' ) { + header( 'Content-Type: text/xml; charset=' . get_option( 'blog_charset' ) ); + + if ( $error ) { + echo '\n"; + echo "\n"; + echo "1\n"; + echo "$error_message\n"; + echo ''; + die(); + } else { + echo '\n"; + echo "\n"; + echo "0\n"; + echo ''; + } +} + +if ( ! isset( $_GET['tb_id'] ) || ! $_GET['tb_id'] ) { + $post_id = explode( '/', $_SERVER['REQUEST_URI'] ); + $post_id = (int) $post_id[ count( $post_id ) - 1 ]; +} + +$trackback_url = isset( $_POST['url'] ) ? sanitize_url( $_POST['url'] ) : ''; +$charset = isset( $_POST['charset'] ) ? sanitize_text_field( $_POST['charset'] ) : ''; + +// These three are stripslashed here so they can be properly escaped after mb_convert_encoding(). +$title = isset( $_POST['title'] ) ? sanitize_text_field( wp_unslash( $_POST['title'] ) ) : ''; +$excerpt = isset( $_POST['excerpt'] ) ? sanitize_textarea_field( wp_unslash( $_POST['excerpt'] ) ) : ''; +$blog_name = isset( $_POST['blog_name'] ) ? sanitize_text_field( wp_unslash( $_POST['blog_name'] ) ) : ''; + +if ( $charset ) { + $charset = str_replace( array( ',', ' ' ), '', strtoupper( trim( $charset ) ) ); + + // Validate the specified "sender" charset is available on the receiving site. + if ( function_exists( 'mb_list_encodings' ) && ! in_array( $charset, mb_list_encodings(), true ) ) { + $charset = ''; + } +} + +if ( ! $charset ) { + $charset = 'ASCII, UTF-8, ISO-8859-1, JIS, EUC-JP, SJIS'; +} + +// No valid uses for UTF-7. +if ( str_contains( $charset, 'UTF-7' ) ) { + die; +} + +// For international trackbacks. +if ( function_exists( 'mb_convert_encoding' ) ) { + $title = mb_convert_encoding( $title, get_option( 'blog_charset' ), $charset ); + $excerpt = mb_convert_encoding( $excerpt, get_option( 'blog_charset' ), $charset ); + $blog_name = mb_convert_encoding( $blog_name, get_option( 'blog_charset' ), $charset ); +} + +// Escape values to use in the trackback. +$title = wp_slash( $title ); +$excerpt = wp_slash( $excerpt ); +$blog_name = wp_slash( $blog_name ); + +if ( is_single() || is_page() ) { + $post_id = $posts[0]->ID; +} + +if ( ! isset( $post_id ) || ! (int) $post_id ) { + trackback_response( 1, __( 'I really need an ID for this to work.' ) ); +} + +if ( empty( $title ) && empty( $trackback_url ) && empty( $blog_name ) ) { + // If it doesn't look like a trackback at all. + wp_redirect( get_permalink( $post_id ) ); + exit; +} + +if ( ! empty( $trackback_url ) && ! empty( $title ) ) { + /** + * Fires before the trackback is added to a post. + * + * @since 4.7.0 + * + * @param int $post_id Post ID related to the trackback. + * @param string $trackback_url Trackback URL. + * @param string $charset Character set. + * @param string $title Trackback title. + * @param string $excerpt Trackback excerpt. + * @param string $blog_name Site name. + */ + do_action( 'pre_trackback_post', $post_id, $trackback_url, $charset, $title, $excerpt, $blog_name ); + + header( 'Content-Type: text/xml; charset=' . get_option( 'blog_charset' ) ); + + if ( ! pings_open( $post_id ) ) { + trackback_response( 1, __( 'Sorry, trackbacks are closed for this item.' ) ); + } + + $title = wp_html_excerpt( $title, 250, '…' ); + $excerpt = wp_html_excerpt( $excerpt, 252, '…' ); + + $comment_post_id = (int) $post_id; + $comment_author = $blog_name; + $comment_author_email = ''; + $comment_author_url = $trackback_url; + $comment_content = "$title\n\n$excerpt"; + $comment_type = 'trackback'; + + $dupe = $wpdb->get_results( + $wpdb->prepare( + "SELECT * FROM $wpdb->comments WHERE comment_post_ID = %d AND comment_author_url = %s", + $comment_post_id, + $comment_author_url + ) + ); + + if ( $dupe ) { + trackback_response( 1, __( 'There is already a ping from that URL for this post.' ) ); + } + + $commentdata = array( + 'comment_post_ID' => $comment_post_id, + ); + + $commentdata += compact( + 'comment_author', + 'comment_author_email', + 'comment_author_url', + 'comment_content', + 'comment_type' + ); + + $result = wp_new_comment( $commentdata ); + + if ( is_wp_error( $result ) ) { + trackback_response( 1, $result->get_error_message() ); + } + + $trackback_id = $wpdb->insert_id; + + /** + * Fires after a trackback is added to a post. + * + * @since 1.2.0 + * + * @param int $trackback_id Trackback ID. + */ + do_action( 'trackback_post', $trackback_id ); + + trackback_response( 0 ); +} diff --git a/xmlrpc.php b/xmlrpc.php new file mode 100644 index 0000000..ae73f68 --- /dev/null +++ b/xmlrpc.php @@ -0,0 +1,106 @@ +'; + ?> + + + WordPress + https://wordpress.org/ + + + + + + + + + + + serve_request(); + +exit; + +/** + * logIO() - Writes logging info to a file. + * + * @since 1.2.0 + * @deprecated 3.4.0 Use error_log() + * @see error_log() + * + * @global int|bool $xmlrpc_logging Whether to enable XML-RPC logging. + * + * @param string $io Whether input or output. + * @param string $msg Information describing logging reason. + */ +function logIO( $io, $msg ) { + _deprecated_function( __FUNCTION__, '3.4.0', 'error_log()' ); + if ( ! empty( $GLOBALS['xmlrpc_logging'] ) ) { + error_log( $io . ' - ' . $msg ); + } +}