diff --git a/.gitignore b/.gitignore index 60d7971..e52f08f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,13 +1,41 @@ -# ---> AL -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -*.code-workspace - -# Local History for Visual Studio Code -.history/ -*.app -.snapshots/* +# Build and Release Folders +bin-debug/ +bin-release/ +[Oo]bj/ +[Bb]in/ +wp-admin/ +wp-includes/ +html-temp/ +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..b9db82a --- /dev/null +++ b/.htaccess @@ -0,0 +1,25 @@ + +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] + + +# BEGIN WordPress +# ???BEGIN WordPress????END WordPress?????????????? +# ????????????? WordPress ?????????? +# ?ʦ????????????????????????? + +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 c3a11d8..0000000 --- a/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# official-website-china - -国内官网 \ No newline at end of file diff --git a/fix-site-url.php b/fix-site-url.php new file mode 100644 index 0000000..e8d0bd8 --- /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:83/wp-admin\n"; +echo "请使用原有的管理员账号登录\n"; diff --git a/index.php b/index.php new file mode 100644 index 0000000..cc2a532 --- /dev/null +++ b/index.php @@ -0,0 +1,17 @@ + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. + +WRITTEN OFFER + +The source code for any program binaries or compressed scripts that are +included with WordPress can be freely obtained at the following URL: + + https://wordpress.org/download/source/ diff --git a/nginx.htaccess b/nginx.htaccess new file mode 100644 index 0000000..e69de29 diff --git a/readme.html b/readme.html new file mode 100644 index 0000000..e1528c1 --- /dev/null +++ b/readme.html @@ -0,0 +1,98 @@ + + + + + + + WordPress › ReadMe + + + +

+ WordPress +

+

Semantic Personal Publishing Platform

+ +

First Things First

+

Welcome. WordPress is a very special project to me. Every developer and contributor adds something unique to the mix, and together we create something beautiful that I am proud to be a part of. Thousands of hours have gone into WordPress, and we are dedicated to making it better every day. Thank you for making it part of your world.

+

— Matt Mullenweg

+ +

Installation: Famous 5-minute install

+
    +
  1. Unzip the package in an empty directory and upload everything.
  2. +
  3. Open wp-admin/install.php in your browser. It will take you through the process to set up a wp-config.php file with your database connection details. +
      +
    1. If for some reason this does not work, do not worry. It may not work on all web hosts. Open up wp-config-sample.php with a text editor like WordPad or similar and fill in your database connection details.
    2. +
    3. Save the file as wp-config.php and upload it.
    4. +
    5. Open wp-admin/install.php in your browser.
    6. +
    +
  4. +
  5. Once the configuration file is set up, the installer will set up the tables needed for your site. If there is an error, double check your wp-config.php file, and try again. If it fails again, please go to the WordPress support forums with as much data as you can gather.
  6. +
  7. If you did not enter a password, note the password given to you. If you did not provide a username, it will be admin.
  8. +
  9. The installer should then send you to the login page. Sign in with the username and password you chose during the installation. If a password was generated for you, you can then click on “Profile” to change the password.
  10. +
+ +

Updating

+

Using the Automatic Updater

+
    +
  1. Open wp-admin/update-core.php in your browser and follow the instructions.
  2. +
  3. You wanted more, perhaps? That’s it!
  4. +
+ +

Updating Manually

+
    +
  1. Before you update anything, make sure you have backup copies of any files you may have modified such as index.php.
  2. +
  3. Delete your old WordPress files, saving ones you’ve modified.
  4. +
  5. Upload the new files.
  6. +
  7. Point your browser to /wp-admin/upgrade.php.
  8. +
+ +

Migrating from other systems

+

WordPress can import from a number of systems. First you need to get WordPress installed and working as described above, before using our import tools.

+ +

System Requirements

+
    +
  • PHP version 7.2.24 or greater.
  • +
  • MySQL version 5.5.5 or greater.
  • +
+ +

Recommendations

+
    +
  • PHP version 8.3 or greater.
  • +
  • MySQL version 8.0 or greater OR MariaDB version 10.6 or greater.
  • +
  • The mod_rewrite Apache module.
  • +
  • HTTPS support.
  • +
  • A link to wordpress.org on your site.
  • +
+ +

Online Resources

+

If you have any questions that are not addressed in this document, please take advantage of WordPress’ numerous online resources:

+
+
HelpHub
+
HelpHub is the encyclopedia of all things WordPress. It is the most comprehensive source of information for WordPress available.
+
The WordPress Blog
+
This is where you’ll find the latest updates and news related to WordPress. Recent WordPress news appears in your administrative dashboard by default.
+
WordPress Planet
+
The WordPress Planet is a news aggregator that brings together posts from WordPress blogs around the web.
+
WordPress Support Forums
+
If you’ve looked everywhere and still cannot find an answer, the support forums are very active and have a large community ready to help. To help them help you be sure to use a descriptive thread title and describe your question in as much detail as possible.
+
WordPress IRC (Internet Relay Chat) Channel
+
There is an online chat channel that is used for discussion among people who use WordPress and occasionally support topics. The above wiki page should point you in the right direction. (irc.libera.chat #wordpress)
+
+ +

Final Notes

+
    +
  • If you have any suggestions, ideas, or comments, or if you (gasp!) found a bug, join us in the Support Forums.
  • +
  • WordPress has a robust plugin API (Application Programming Interface) that makes extending the code easy. If you are a developer interested in utilizing this, see the Plugin Developer Handbook. You shouldn’t modify any of the core code.
  • +
+ +

Share the Love

+

WordPress has no multi-million dollar marketing campaign or celebrity sponsors, but we do have something even better—you. If you enjoy WordPress please consider telling a friend, setting it up for someone less knowledgeable than yourself, or writing the author of a media article that overlooks us.

+ +

WordPress is the official continuation of b2/cafélog, which came from Michel V. The work has been continued by the WordPress developers. If you would like to support WordPress, please consider donating.

+ +

License

+

WordPress is free software, and is released under the terms of the GPL (GNU General Public License) version 2 or (at your option) any later version. See license.txt.

+ + + diff --git a/wp-activate.php b/wp-activate.php new file mode 100644 index 0000000..0c3321f --- /dev/null +++ b/wp-activate.php @@ -0,0 +1,214 @@ +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 @@ +t6FsEOH4-8VTGkQ7eAYiT}GZWhGYd(B/cI5~?QgR^f`K3J;R5^c!zJ`*' ); +define( 'NONCE_KEY', 'UHC|nl_yRHgr^rF,QGy9w' ); +define( 'AUTH_SALT', 'li_Q|]:qK/DQ:_i1CvO?l+7gxk9;Qft^u {vYKdw1KL_f8U.6Ts=j4S1E 8-`mom' ); +define( 'SECURE_AUTH_SALT', 's7Q<,OePI0]+b(o4AsK+*YQBq%jmr9UG@C_3?jnTe>$YZ|W;L#q8&QF/u]UEP8OX' ); +define( 'LOGGED_IN_SALT', '(^i/>/;1Ba`RsubtFO_5W57Gb^oOb`K?$> lhEa^x}y3LtS9{3Kcb !jA;Q#!fgE' ); +define( 'NONCE_SALT', 's:caA~$(m(YDThlW2=Lr=nBUIb.@$G,Qx@yLyL;.!L}F@M?O9Op60|>oqU:y`ZUY' ); + +/**#@-*/ + +/** + * WordPress database table prefix. + * + * You can have multiple installations in one database if you give each + * a unique prefix. Only numbers, letters, and underscores please! + * + * At the installation time, database tables are created with the specified prefix. + * Changing this value after WordPress is installed will make your site think + * it has not been installed. + * + * @link https://developer.wordpress.org/advanced-administration/wordpress/wp-config/#table-prefix + */ +$table_prefix = 'wp_'; + +/** + * For developers: WordPress debugging mode. + * + * Change this to true to enable the display of notices during development. + * It is strongly recommended that plugin and theme developers use WP_DEBUG + * in their development environments. + * + * For information on other constants that can be used for debugging, + * visit the documentation. + * + * @link https://developer.wordpress.org/advanced-administration/debug/debug-wordpress/ + */ +define( 'WP_DEBUG', true ); + +/* Add any custom values between this line and the "stop editing" line. */ + + + +/* That's all, stop editing! Happy publishing. */ + +/** Absolute path to the WordPress directory. */ +if ( ! defined( 'ABSPATH' ) ) { + define( 'ABSPATH', __DIR__ . '/' ); +} + +/** Sets up WordPress vars and included files. */ +require_once ABSPATH . 'wp-settings.php'; diff --git a/wp-content/advanced-cache.php b/wp-content/advanced-cache.php new file mode 100644 index 0000000..e69de29 diff --git a/wp-content/themes/index.php b/wp-content/themes/index.php new file mode 100644 index 0000000..6220032 --- /dev/null +++ b/wp-content/themes/index.php @@ -0,0 +1,2 @@ + + + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/README.md b/wp-content/themes/nenghui-energy-theme-cn/README.md new file mode 100644 index 0000000..e69de29 diff --git a/wp-content/themes/nenghui-energy-theme-cn/archive.php b/wp-content/themes/nenghui-energy-theme-cn/archive.php new file mode 100644 index 0000000..34e0f8b --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/archive.php @@ -0,0 +1,318 @@ + + + + +
+
+
+

新闻资讯

+
+
+ +
+
+ +
+ slug; + } + ?> + + +
+ + +
+ +
+
+ + + +
+ +
+
+
+
+ +
+
+ 'post', + 'posts_per_page' => 1, + 'post_status' => 'publish', + 'orderby' => 'rand' + )); + + if ($random_query->have_posts()) { + $random_posts = $random_query->posts; + // 随机文章缓存5分钟,避免频繁查询 + set_transient($cache_key, $random_posts, 300); + } else { + $random_posts = array(); + } + } + + if (!empty($random_posts)) : + global $post; + foreach ($random_posts as $post) : + setup_postdata($post); + // 获取文章特色图片 + $featured_image = get_the_post_thumbnail_url(get_the_ID(), 'large'); + if (!$featured_image) { + $featured_image = get_template_directory_uri() . '/assets/images/default-post.jpg'; + } + + // 获取文章摘要 + $excerpt = get_the_excerpt(); + if (empty($excerpt)) { + $excerpt = wp_trim_words(get_the_content(), 30, '...'); + } + ?> +
+
+ + <?php echo esc_attr(get_the_title()); ?> + +
+
+
+ +

+
+

+ +

+ 查看更多 +
+
+
+ +
+
+ 暂无文章 +
+
+
+

暂无文章

+

+ 目前还没有发布任何文章,请稍后再来查看。 +

+ 返回首页 +
+
+
+ +
+
+ + +
+
+
+ 'post', + 'posts_per_page' => 5, + 'post_status' => 'publish', + 'orderby' => 'date', + 'order' => 'DESC', + 'paged' => $paged + ); + + // 如果是分类归档页面,添加分类筛选 + if (is_category()) { + $args['cat'] = get_query_var('cat'); + } + + // 处理分类筛选(URL参数优先) + if (isset($_GET['category']) && !empty($_GET['category'])) { + $args['category_name'] = sanitize_text_field($_GET['category']); + // 修复:如果有明确的分类筛选参数,且该参数与当前归档分类不同,则移除归档分类限制 + // 这样可以避免 "在分类A下搜索分类B" 导致的结果为空(除非文章同时属于两个分类) + if (isset($args['cat'])) { + unset($args['cat']); + } + } + + // 处理关键词搜索 + if (isset($_GET['search_keyword']) && !empty($_GET['search_keyword'])) { + $args['s'] = sanitize_text_field($_GET['search_keyword']); + } + + $articles_query = new WP_Query($args); + + if ($articles_query->have_posts()) : + while ($articles_query->have_posts()) : $articles_query->the_post(); + // 获取文章特色图片 + $featured_image = get_the_post_thumbnail_url(get_the_ID(), 'medium'); + if (!$featured_image) { + $featured_image = get_template_directory_uri() . '/assets/images/default-post.jpg'; + } + + // 获取文章摘要 + $excerpt = get_the_excerpt(); + if (empty($excerpt)) { + $excerpt = wp_trim_words(get_the_content(), 20, '...'); + } + + // 获取发布时间 + $post_date = get_the_date('Y-m-d'); + ?> +
+
+ + <?php echo esc_attr(get_the_title()); ?> + +
+
+
+ +
+

+ +

+

+
+ + → + +
+
+
+ max_num_pages; + if ($total_pages > 1) { + echo '
'; + + $big = 999999999; // 需要一个不太可能碰撞的整数 + + // 获取当前页面URL(archive.php的URL) + global $wp; + $current_url = home_url($wp->request); + + // 如果是根目录访问archive.php,需要特殊处理 + if (empty($wp->request) || $wp->request === '/') { + // 为archive页面创建专门的URL结构 + $base_url = home_url('/news'); // 使用/news作为归档页面的基础URL + $format = '/page/%#%/'; + } else { + $base_url = $current_url; + $format = '/page/%#%/'; + } + + // 检查是否使用了永久链接 + if (get_option('permalink_structure')) { + $base = str_replace($big, '%#%', esc_url(get_pagenum_link($big))); + // 确保base URL不会与首页冲突 + if (strpos($base, home_url('/page/')) === 0) { + $base = home_url('/news/page/%#%/'); + } + } else { + $base = add_query_arg('paged', '%#%', $base_url); + $format = ''; + } + + // 获取当前查询参数 + $current_query = $_GET; + unset($current_query['paged']); // 移除paged参数避免重复 + + echo paginate_links(array( + 'base' => $base, + 'format' => $format, + 'current' => max(1, $paged), + 'total' => $articles_query->max_num_pages, + 'prev_text' => '« 上一页', + 'next_text' => '下一页 »', + 'add_args' => $current_query, + 'add_fragment' => false, + )); + echo '
'; + } + ?> + +
+

暂无文章发布

+
+ +
+
+
+ + + + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/css/about-features.css b/wp-content/themes/nenghui-energy-theme-cn/assets/css/about-features.css new file mode 100644 index 0000000..3a796b9 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/css/about-features.css @@ -0,0 +1,187 @@ +/* 关于页面特色区块样式 */ +.about-features-section { + position: relative; + padding: 50px 0; + background-image: url('../images/about-features.webp'); + background-size: cover; + background-position: center center; + background-repeat: no-repeat; + background-attachment: fixed; + height: 60vh; + display: flex; + align-items: center; + justify-content: center; +} + +.about-features-container { + position: relative; + z-index: 2; + max-width: 1200px; + margin: 0 auto; + padding: 0 20px; + text-align: center; +} + +/* 主标题样式 */ +.about-features-header { + margin-bottom: 60px; +} + +.about-features-title { + font-size: 36px; + font-weight: 700; + color: #ffffff; + margin: 0; + line-height: 1.3; +} + +/* 统计数据容器 */ +.about-features-stats { + display: flex; + justify-content: space-between; + align-items: center; + gap: 40px; + flex-wrap: wrap; +} + +/* 单个统计项 */ +.about-features-stat-item { + flex: 1; + min-width: 200px; + padding: 30px 20px; + background: rgba(255, 255, 255, 0.1); + border-radius: 12px; + backdrop-filter: blur(10px); + border: 1px solid rgba(255, 255, 255, 0.2); + transition: all 0.3s ease; +} + +.about-features-stat-item:hover { + transform: translateY(-5px); + background: rgba(255, 255, 255, 0.15); + box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3); +} + +/* 统计数字 */ +.about-stat-number { + font-size: 48px !important; + font-weight: 800 !important; + color: #ffffff !important; + margin-bottom: 10px !important; + line-height: 1 !important; + opacity: 0 !important; + transform: translateY(20px) !important; + transition: all 0.3s ease !important; + text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3); +} + +/* 计数动画关键帧 */ +@keyframes countUp { + 0% { + opacity: 0 !important; + transform: translateY(20px) !important; + } + 50% { + opacity: 1 !important; + transform: translateY(0) !important; + } + 100% { + opacity: 1 !important; + transform: translateY(0) !important; + } +} + +/* 数字计数动画触发类 */ +.about-stat-number.animate { + opacity: 1 !important; + transform: translateY(0) !important; + animation: countUp 2s ease-out forwards !important; +} + +/* 为每个统计项添加不同的延迟 */ +.about-features-stat-item:nth-child(1) .about-stat-number.animate { + animation-delay: 0.2s !important; +} + +.about-features-stat-item:nth-child(2) .about-stat-number.animate { + animation-delay: 0.4s !important; +} + +.about-features-stat-item:nth-child(3) .about-stat-number.animate { + animation-delay: 0.6s !important; +} + +.about-features-stat-item:nth-child(4) .about-stat-number.animate { + animation-delay: 0.8s !important; +} + +/* 统计标签 */ +.about-stat-label { + font-size: 16px; + color: #ffffff; + opacity: 0.9; + line-height: 1.4; + text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2); +} + +/* 平板设备适配 */ +@media (max-width: 768px) { + .about-features-section { + padding: 60px 0; + background-attachment: scroll; + } + + .about-features-title { + font-size: 28px; + } + + .about-features-stats { + flex-direction: column; + gap: 20px; + } + + .about-features-stat-item { + min-width: auto; + width: 100%; + padding: 25px 15px; + } + + .about-stat-number { + font-size: 36px; + } + + .about-stat-label { + font-size: 14px; + } +} + +/* 手机设备适配 */ +@media (max-width: 480px) { + .about-features-section { + padding: 40px 0; + } + + .about-features-container { + padding: 0 15px; + } + + .about-features-header { + margin-bottom: 40px; + } + + .about-features-title { + font-size: 24px; + } + + .about-features-stat-item { + padding: 20px 15px; + } + + .about-stat-number { + font-size: 32px; + } + + .about-stat-label { + font-size: 13px; + } +} \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/css/about-page-core.css b/wp-content/themes/nenghui-energy-theme-cn/assets/css/about-page-core.css new file mode 100644 index 0000000..8c5f848 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/css/about-page-core.css @@ -0,0 +1,160 @@ +/** + * 能辉核心页面Banner样式 + * 响应式设计,适配不同设备 + */ + +.about-banner { + position: relative; + width: 100%; + height: 500px; + background-image: url('../images/nenghui-core-bg.webp'); + background-size: cover; + background-position: center center; + background-repeat: no-repeat; + display: flex; + align-items: center; + justify-content: center; + overflow: hidden; +} + +/* Banner内容容器 */ +.about-banner-content { + position: relative; + z-index: 2; + text-align: center; + color: white; + max-width: 1200px; + margin: 0 auto; + padding: 0 20px; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + height: 100%; + padding-top: 8rem; + overflow: hidden; +} + +/* 主标题 */ +.about-banner-title { + font-size: 48px; + font-weight: 700; + margin: 0 0 20px 0; + text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5); + letter-spacing: 2px; + line-height: 1.2; +} + +/* 副标题 */ +.about-banner-subtitle { + font-size: 20px; + font-weight: 400; + margin: 0; + text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5); + opacity: 0.9; + line-height: 1.4; +} + +/* 响应式设计 - 平板设备 */ +@media (max-width: 1024px) { + .about-banner { + height: 400px; + } + + .about-banner-title { + font-size: 40px; + margin-bottom: 15px; + } + + .about-banner-subtitle { + font-size: 18px; + } +} + +/* 响应式设计 - 手机设备 */ +@media (max-width: 768px) { + .about-banner { + height: 350px; + } + + .about-banner-content { + padding: 0 15px; + } + + .about-banner-title { + font-size: 32px; + margin-bottom: 12px; + letter-spacing: 1px; + } + + .about-banner-subtitle { + font-size: 16px; + } +} + +/* 响应式设计 - 小屏手机 */ +@media (max-width: 480px) { + .about-banner { + height: 300px; + } + + .about-banner-title { + font-size: 28px; + margin-bottom: 10px; + } + + .about-banner-subtitle { + font-size: 14px; + } +} + +/* 大屏设备优化 */ +@media (min-width: 1400px) { + .about-banner { + height: 650px; + } + + .about-banner-title { + font-size: 56px; + margin-bottom: 25px; + } + + .about-banner-subtitle { + font-size: 24px; + } +} + +/* 高对比度模式支持 */ +@media (prefers-contrast: high) { + .about-banner-title { + color: #ffffff; + text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.8); + } + + .about-banner-subtitle { + color: #f0f0f0; + text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.8); + } +} + +/* 减少动画效果 */ +@media (prefers-reduced-motion: reduce) { + .about-banner { + background-attachment: scroll; + } +} + +/* 打印样式 */ +@media print { + .about-banner { + background: none; + color: #000; + page-break-inside: avoid; + } + + .about-banner-title, + .about-banner-subtitle { + color: #000; + text-shadow: none; + } +} \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/css/about-page-sustainable.css b/wp-content/themes/nenghui-energy-theme-cn/assets/css/about-page-sustainable.css new file mode 100644 index 0000000..d929d92 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/css/about-page-sustainable.css @@ -0,0 +1,160 @@ +/** + * 能辉核心页面Banner样式 + * 响应式设计,适配不同设备 + */ + +.about-banner { + position: relative; + width: 100%; + height: 500px; + background-image: url('../images/kechuxu-bg.webp'); + background-size: cover; + background-position: center center; + background-repeat: no-repeat; + display: flex; + align-items: center; + justify-content: center; + overflow: hidden; +} + +/* Banner内容容器 */ +.about-banner-content { + position: relative; + z-index: 2; + text-align: center; + color: white; + max-width: 1200px; + margin: 0 auto; + padding: 0 20px; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + height: 100%; + padding-top: 8rem; + overflow: hidden; +} + +/* 主标题 */ +.about-banner-title { + font-size: 48px; + font-weight: 700; + margin: 0 0 20px 0; + text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5); + letter-spacing: 2px; + line-height: 1.2; +} + +/* 副标题 */ +.about-banner-subtitle { + font-size: 20px; + font-weight: 400; + margin: 0; + text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5); + opacity: 0.9; + line-height: 1.4; +} + +/* 响应式设计 - 平板设备 */ +@media (max-width: 1024px) { + .about-banner { + height: 400px; + } + + .about-banner-title { + font-size: 40px; + margin-bottom: 15px; + } + + .about-banner-subtitle { + font-size: 18px; + } +} + +/* 响应式设计 - 手机设备 */ +@media (max-width: 768px) { + .about-banner { + height: 350px; + } + + .about-banner-content { + padding: 0 15px; + } + + .about-banner-title { + font-size: 32px; + margin-bottom: 12px; + letter-spacing: 1px; + } + + .about-banner-subtitle { + font-size: 16px; + } +} + +/* 响应式设计 - 小屏手机 */ +@media (max-width: 480px) { + .about-banner { + height: 300px; + } + + .about-banner-title { + font-size: 28px; + margin-bottom: 10px; + } + + .about-banner-subtitle { + font-size: 14px; + } +} + +/* 大屏设备优化 */ +@media (min-width: 1400px) { + .about-banner { + height: 650px; + } + + .about-banner-title { + font-size: 56px; + margin-bottom: 25px; + } + + .about-banner-subtitle { + font-size: 24px; + } +} + +/* 高对比度模式支持 */ +@media (prefers-contrast: high) { + .about-banner-title { + color: #ffffff; + text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.8); + } + + .about-banner-subtitle { + color: #f0f0f0; + text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.8); + } +} + +/* 减少动画效果 */ +@media (prefers-reduced-motion: reduce) { + .about-banner { + background-attachment: scroll; + } +} + +/* 打印样式 */ +@media print { + .about-banner { + background: none; + color: #000; + page-break-inside: avoid; + } + + .about-banner-title, + .about-banner-subtitle { + color: #000; + text-shadow: none; + } +} \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/css/about-page.css b/wp-content/themes/nenghui-energy-theme-cn/assets/css/about-page.css new file mode 100644 index 0000000..482a7f0 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/css/about-page.css @@ -0,0 +1,289 @@ +/** + * 关于能辉页面Banner样式 + * 响应式设计,适配不同设备 + */ + +.about-banner { + position: relative; + width: 100%; + height: 500px; + background-image: url('../images/about-nenghui-banner.webp'); + background-size: cover; + background-position: center center; + background-repeat: no-repeat; + display: flex; + align-items: center; + justify-content: center; + overflow: hidden; +} + +/* Banner内容容器 */ +.about-banner-content { + position: relative; + z-index: 2; + text-align: center; + color: white; + max-width: 1200px; + margin: 0 auto; + padding: 0 20px; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + height: 100%; + padding-top: 8rem; + overflow: hidden; +} + +/* 主标题 */ +.about-banner-title { + font-size: 48px; + font-weight: 700; + margin: 0 0 20px 0; + text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5); + letter-spacing: 2px; + line-height: 1.2; +} + +/* 副标题 */ +.about-banner-subtitle { + font-size: 20px; + font-weight: 400; + margin: 0; + text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5); + opacity: 0.9; + line-height: 1.4; +} + +/* 响应式设计 - 平板设备 */ +@media (max-width: 1024px) { + .about-banner { + height: 400px; + } + + .about-banner-title { + font-size: 40px; + margin-bottom: 15px; + } + + .about-banner-subtitle { + font-size: 18px; + } +} + +/* 响应式设计 - 手机设备 */ +@media (max-width: 768px) { + .about-banner { + height: 350px; + } + + .about-banner-content { + padding: 0 15px; + } + + .about-banner-title { + font-size: 32px; + margin-bottom: 12px; + letter-spacing: 1px; + } + + .about-banner-subtitle { + font-size: 16px; + } +} + +/* 响应式设计 - 小屏手机 */ +@media (max-width: 480px) { + .about-banner { + height: 300px; + } + + .about-banner-title { + font-size: 28px; + margin-bottom: 10px; + } + + .about-banner-subtitle { + font-size: 14px; + } +} + +/* 大屏设备优化 */ +@media (min-width: 1400px) { + .about-banner { + height: 650px; + } + + .about-banner-title { + font-size: 56px; + margin-bottom: 25px; + } + + .about-banner-subtitle { + font-size: 24px; + } +} + +/* 高对比度模式支持 */ +@media (prefers-contrast: high) { + .about-banner-title { + color: #ffffff; + text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.8); + } + + .about-banner-subtitle { + color: #f0f0f0; + text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.8); + } +} + +/* 减少动画效果 */ +@media (prefers-reduced-motion: reduce) { + .about-banner { + background-attachment: scroll; + } +} + +/* 打印样式 */ +@media print { + .about-banner { + background: none; + color: #000; + page-break-inside: avoid; + } + + .about-banner-title, + .about-banner-subtitle { + color: #000; + text-shadow: none; + } +} + +/* 关于页面主要内容区域样式 */ +.about-content { + padding: 80px 0; + background-color: #ffffff; +} + +.about-main-section { + max-width: 1200px; + margin: 0 auto; + padding: 0 20px; + display: flex; + align-items: center; + gap: 60px; +} + +.about-text-content { + flex: 1; + max-width: 600px; +} + +.about-main-title { + font-size: 23px; + font-weight: 700; + color: #1a1a1a; + line-height: 1.4; + margin-bottom: 30px; + letter-spacing: -0.5px; +} + +.about-description { + color: #666666; + line-height: 1.8; + font-size: 14px; +} + +.about-description p { + margin-bottom: 20px; + text-align: justify; +} + +.about-description p:last-child { + margin-bottom: 0; +} + +.about-image-content { + flex: 1; + max-width: 500px; +} + +.about-main-image { + width: 150%; + height: auto; +} + +/* 平板设备适配 */ +@media (max-width: 1024px) { + .about-main-section { + gap: 40px; + padding: 0 30px; + } + + .about-main-title { + font-size: 28px; + } + + .about-description { + font-size: 15px; + } +} + +/* 手机设备适配 */ +@media (max-width: 768px) { + .about-content { + padding: 60px 0; + } + + .about-main-section { + flex-direction: column; + gap: 40px; + padding: 0 20px; + } + + .about-text-content { + max-width: 100%; + order: 2; + } + + .about-image-content { + max-width: 100%; + order: 1; + } + + .about-main-image { + width: 100%; + } + + .about-main-title { + font-size: 24px; + text-align: center; + margin-bottom: 25px; + } + + .about-description { + font-size: 14px; + line-height: 1.7; + } +} + +/* 小屏手机适配 */ +@media (max-width: 480px) { + .about-content { + padding: 40px 0; + } + + .about-main-section { + gap: 30px; + padding: 0 15px; + } + + .about-main-title { + font-size: 20px; + margin-bottom: 20px; + } + + .about-description p { + margin-bottom: 15px; + } +} \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/css/admin.css b/wp-content/themes/nenghui-energy-theme-cn/assets/css/admin.css new file mode 100644 index 0000000..2fed05d --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/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-cn/assets/css/animate.min.css b/wp-content/themes/nenghui-energy-theme-cn/assets/css/animate.min.css new file mode 100644 index 0000000..76d2fe1 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/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-cn/assets/css/animations.css b/wp-content/themes/nenghui-energy-theme-cn/assets/css/animations.css new file mode 100644 index 0000000..413309e --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/css/animations.css @@ -0,0 +1,456 @@ +/** + * 自定义动画样式文件 + * 包含常用的CSS动画效果和过渡效果 + */ + +/* 基础动画类 */ +.animate { + animation-duration: 1s; + animation-fill-mode: both; +} + +.animate-fast { + animation-duration: 0.5s; +} + +.animate-slow { + animation-duration: 2s; +} + +/* 淡入淡出动画 */ +@keyframes fadeIn { + from { + opacity: 0; + } + to { + opacity: 1; + } +} + +@keyframes fadeOut { + from { + opacity: 1; + } + to { + opacity: 0; + } +} + +.fade-in { + animation-name: fadeIn; +} + +.fade-out { + animation-name: fadeOut; +} + +/* 滑动动画 */ +@keyframes slideInUp { + from { + transform: translate3d(0, 100%, 0); + visibility: visible; + } + to { + transform: translate3d(0, 0, 0); + } +} + +@keyframes slideInDown { + from { + transform: translate3d(0, -100%, 0); + visibility: visible; + } + to { + transform: translate3d(0, 0, 0); + } +} + +@keyframes slideInLeft { + from { + transform: translate3d(-100%, 0, 0); + visibility: visible; + } + to { + transform: translate3d(0, 0, 0); + } +} + +@keyframes slideInRight { + from { + transform: translate3d(100%, 0, 0); + visibility: visible; + } + to { + transform: translate3d(0, 0, 0); + } +} + +.slide-in-up { + animation-name: slideInUp; +} + +.slide-in-down { + animation-name: slideInDown; +} + +.slide-in-left { + animation-name: slideInLeft; +} + +.slide-in-right { + animation-name: slideInRight; +} + +/* 缩放动画 */ +@keyframes zoomIn { + from { + opacity: 0; + transform: scale3d(0.3, 0.3, 0.3); + } + 50% { + opacity: 1; + } +} + +@keyframes zoomOut { + from { + opacity: 1; + } + 50% { + opacity: 0; + transform: scale3d(0.3, 0.3, 0.3); + } + to { + opacity: 0; + } +} + +.zoom-in { + animation-name: zoomIn; +} + +.zoom-out { + animation-name: zoomOut; +} + +/* 旋转动画 */ +@keyframes rotateIn { + from { + transform-origin: center; + transform: rotate3d(0, 0, 1, -200deg); + opacity: 0; + } + to { + transform-origin: center; + transform: translate3d(0, 0, 0); + opacity: 1; + } +} + +@keyframes spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +.rotate-in { + animation-name: rotateIn; +} + +.spin { + animation-name: spin; + animation-duration: 1s; + animation-iteration-count: infinite; + animation-timing-function: linear; +} + +/* 弹跳动画 */ +@keyframes bounce { + from, + 20%, + 53%, + 80%, + to { + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + transform: translate3d(0, 0, 0); + } + 40%, + 43% { + animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + transform: translate3d(0, -30px, 0); + } + 70% { + animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + transform: translate3d(0, -15px, 0); + } + 90% { + transform: translate3d(0, -4px, 0); + } +} + +.bounce { + animation-name: bounce; + transform-origin: center bottom; +} + +/* 脉冲动画 */ +@keyframes pulse { + from { + transform: scale3d(1, 1, 1); + } + 50% { + transform: scale3d(1.05, 1.05, 1.05); + } + to { + transform: scale3d(1, 1, 1); + } +} + +.pulse { + animation-name: pulse; + animation-iteration-count: infinite; +} + +/* 摇摆动画 */ +@keyframes shake { + from, + to { + transform: translate3d(0, 0, 0); + } + 10%, + 30%, + 50%, + 70%, + 90% { + transform: translate3d(-10px, 0, 0); + } + 20%, + 40%, + 60%, + 80% { + transform: translate3d(10px, 0, 0); + } +} + +.shake { + animation-name: shake; +} + +/* 翻转动画 */ +@keyframes flipInX { + from { + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + animation-timing-function: ease-in; + opacity: 0; + } + 40% { + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + animation-timing-function: ease-in; + } + 60% { + transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + opacity: 1; + } + 80% { + transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + } + to { + transform: perspective(400px); + } +} + +@keyframes flipInY { + from { + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + animation-timing-function: ease-in; + opacity: 0; + } + 40% { + transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + animation-timing-function: ease-in; + } + 60% { + transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + opacity: 1; + } + 80% { + transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + } + to { + transform: perspective(400px); + } +} + +.flip-in-x { + animation-name: flipInX; + backface-visibility: visible; +} + +.flip-in-y { + animation-name: flipInY; + backface-visibility: visible; +} + +/* 过渡效果 */ +.transition-all { + transition: all 0.3s ease; +} + +.transition-opacity { + transition: opacity 0.3s ease; +} + +.transition-transform { + transition: transform 0.3s ease; +} + +.transition-colors { + transition: color 0.3s ease, background-color 0.3s ease, border-color 0.3s ease; +} + +/* 悬停效果 */ +.hover-scale:hover { + transform: scale(1.05); +} + +.hover-lift:hover { + transform: translateY(-5px); + box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15); +} + +.hover-glow:hover { + box-shadow: 0 0 20px rgba(0, 123, 255, 0.5); +} + +/* 延迟动画 */ +.delay-100 { + animation-delay: 0.1s; +} + +.delay-200 { + animation-delay: 0.2s; +} + +.delay-300 { + animation-delay: 0.3s; +} + +.delay-500 { + animation-delay: 0.5s; +} + +.delay-1000 { + animation-delay: 1s; +} + +/* 无限循环动画 */ +.infinite { + animation-iteration-count: infinite; +} + +/* 动画暂停 */ +.paused { + animation-play-state: paused; +} + +/* 响应式动画控制 */ +@media (prefers-reduced-motion: reduce) { + *, + *::before, + *::after { + animation-duration: 0.01ms !important; + animation-iteration-count: 1 !important; + transition-duration: 0.01ms !important; + } +} + +/* 滚动触发动画的基础样式 */ +.scroll-animate { + opacity: 0; + transform: translateY(30px); + transition: all 0.6s ease; +} + +.scroll-animate.active { + opacity: 1; + transform: translateY(0); +} + +/* 加载动画 */ +@keyframes loading { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} + +.loading { + display: inline-block; + width: 20px; + height: 20px; + border: 3px solid rgba(0, 0, 0, 0.1); + border-radius: 50%; + border-top-color: #007bff; + animation: loading 1s ease-in-out infinite; +} + +/* 文字打字机效果 */ +.typewriter { + overflow: hidden; + border-right: 0.15em solid orange; + white-space: nowrap; + margin: 0 auto; + letter-spacing: 0.15em; + animation: typing 3.5s steps(40, end), blink-caret 0.75s step-end infinite; +} + +@keyframes typing { + from { + width: 0; + } + to { + width: 100%; + } +} + +@keyframes blink-caret { + from, + to { + border-color: transparent; + } + 50% { + border-color: orange; + } +} + +/* GSAP动画元素初始状态 - 防止闪显 */ +.gsap-animate, +.section-title, +.section-description, +.accordion-item, +.system-image img, +.products-services-item, +.features-item, +.video-banner-content > *, +[data-gsap-animate] { + opacity: 0; + visibility: hidden; +} + +/* GSAP动画就绪后显示 */ +.gsap-ready .gsap-animate, +.gsap-ready .section-title, +.gsap-ready .section-description, +.gsap-ready .accordion-item, +.gsap-ready .system-image img, +.gsap-ready .products-services-item, +.gsap-ready .features-item, +.gsap-ready .video-banner-content > *, +.gsap-ready [data-gsap-animate] { + visibility: visible; +} \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/css/article-display.css b/wp-content/themes/nenghui-energy-theme-cn/assets/css/article-display.css new file mode 100644 index 0000000..2fe17d9 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/css/article-display.css @@ -0,0 +1,171 @@ +/** + * 文章展示组件样式 + * Article Display Component Styles + */ + +/* 基础重置样式 */ +.article-display-wrapper * { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +/* 文章容器样式 */ +.article-display-wrapper { + max-width: 1200px; + margin: 1rem auto; + background: white; + border-radius: 12px; + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1); + overflow: hidden; + opacity: 1; + transform: translateY(0); + transition: transform 0.3s ease, box-shadow 0.3s ease; + margin-top: 3rem; +} + +.article-display-wrapper:hover { + transform: translateY(-5px); + box-shadow: 0 8px 30px rgba(0, 0, 0, 0.15); +} + +.article-display-wrapper .article-content { + width: 100%; + height: 400px; +} + +.article-display-wrapper .article-item { + display: flex; + align-items: stretch; + background: white; + height: 100%; + opacity: 1; + transform: translateX(0); +} + +/* 左侧图片栏样式 */ +.article-display-wrapper .left-column { + flex: 1; + position: relative; + overflow: hidden; +} + +.article-display-wrapper .left-column .image-link { + display: block; + width: 100%; + height: 100%; + text-decoration: none; +} + +.article-display-wrapper .left-column img { + width: 100%; + height: 100%; + object-fit: cover; + transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1); + opacity: 1; + transform: scale(1); +} + +.article-display-wrapper .left-column .image-link:hover img { + transform: scale(1.05); +} + +/* 右侧内容栏样式 */ +.article-display-wrapper .right-column { + flex: 1; + padding: 40px; + display: flex; + flex-direction: column; + justify-content: space-between; + position: relative; +} + +.article-display-wrapper .content-top { + flex-grow: 1; +} + +.article-display-wrapper .title-link { + text-decoration: none; + color: inherit; + display: block; +} + +.article-display-wrapper .article-title { + font-size: 28px; + font-weight: bold; + color: #333; + margin-bottom: 20px; + line-height: 1.4; + transition: color 0.3s ease; + opacity: 1; + transform: translateY(0); +} + +.article-display-wrapper .title-link:hover .article-title { + color: #00b4a6; +} + +.article-display-wrapper .article-description { + font-size: 16px; + color: #666; + line-height: 1.6; + margin-bottom: 30px; + opacity: 1; + transform: translateY(0); + transition: color 0.3s ease; +} + +.article-display-wrapper:hover .article-description { + color: #555; +} + +.article-display-wrapper .view-more-link { + display: inline-flex; + align-items: center; + color: #126594; + text-decoration: none; + font-size: 16px; + font-weight: 500; + transition: color 0.3s ease, transform 0.3s ease; + opacity: 1; + transform: translateY(0); +} + +.article-display-wrapper .view-more-link:hover { + color: #008a7e; + transform: translateX(5px); +} + + + +/* 响应式设计 */ +@media (max-width: 768px) { + .article-display-wrapper .article-item { + flex-direction: column; + } + + .article-display-wrapper .article-content { + height: auto; + } + + .article-display-wrapper .left-column, + .article-display-wrapper .right-column { + flex: none; + } + + .article-display-wrapper .left-column { + height: 250px; + } + + .article-display-wrapper .right-column { + padding: 20px; + } + + .article-display-wrapper .article-title { + font-size: 22px; + } + + .article-display-wrapper { + padding: 20px; + } +} \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/css/block-cooperate.css b/wp-content/themes/nenghui-energy-theme-cn/assets/css/block-cooperate.css new file mode 100644 index 0000000..ac4f8d3 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/css/block-cooperate.css @@ -0,0 +1,306 @@ +/** + * Block Cooperate Styles + * 合作伙伴区块样式文件 + * + * @package Nenghui Energy Theme + * @since 1.0.0 + */ + +/* 合作伙伴区块基础样式 */ +.cooperate-block { + padding: 60px 0; + background: #ffffff; + overflow: hidden; +} + +.cooperate-container { + max-width: 1200px; + margin: 0 auto; + padding: 0 20px; +} + +/* 标题区域样式 */ +.cooperate-header { + text-align: center; + margin-bottom: 50px; + padding: 30px 0; +} + +.cooperate-title { + font-size: 36px; + font-weight: 700; + color: #333333; + margin: 0; + line-height: 1.3; + letter-spacing: -0.5px; + position: relative; +} + +.cooperate-title::after { + content: ''; + position: absolute; + bottom: -10px; + left: 50%; + transform: translateX(-50%); + width: 60px; + height: 4px; + background: linear-gradient(90deg, #3498db, #2980b9); + border-radius: 2px; +} + +/* 合作伙伴内容区域 */ +.cooperate-content { + margin-top: 40px; +} + +/* 合作伙伴卡片样式 */ +.cooperate-cards { + position: relative; + overflow: hidden; + border-radius: 12px; + background: #f8f9fa; + padding: 20px; +} + +.cards-wrapper { + display: flex; + flex-wrap: wrap; + gap: 30px; + align-items: center; + justify-content: center; +} + +.card-slide { + display: flex; + align-items: center; + justify-content: center; + background: white; + border-radius: 8px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); + transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); + flex: 0 0 calc(25% - 22.5px); + min-height: 120px; + min-width: 200px; + max-width: 250px; + position: relative; + overflow: hidden; +} + +.card-slide::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: linear-gradient(135deg, rgba(0, 123, 255, 0.02), rgba(0, 86, 179, 0.02)); + opacity: 0; + transition: opacity 0.4s cubic-bezier(0.4, 0, 0.2, 1); + pointer-events: none; +} + +.card-slide:hover { + transform: translateY(-8px) scale(1.02); + box-shadow: 0 12px 32px rgba(0, 0, 0, 0.12), 0 4px 16px rgba(0, 123, 255, 0.08); +} + +.card-slide:hover::before { + opacity: 1; +} + +.card-slide img { + max-width: 100%; + max-height: 80px; + width: auto; + height: auto; + object-fit: contain; + filter: grayscale(0%); + transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); + opacity: 0.85; +} + +.card-slide:hover img { + filter: grayscale(0%) brightness(1.1); + opacity: 1; +} + +/* 响应式设计 */ +@media (max-width: 1024px) { + .cooperate-title { + font-size: 32px; + } + + .cards-wrapper { + gap: 20px; + } + + .card-slide { + flex: 0 0 calc(25% - 15px); + min-height: 100px; + padding: 15px; + min-width: 160px; + max-width: 200px; + } + + .card-slide img { + max-height: 60px; + } +} + +@media (max-width: 768px) { + .cooperate-block { + padding: 40px 0; + } + + .cooperate-container { + padding: 0 15px; + } + + .cooperate-header { + margin-bottom: 30px; + padding: 20px 0; + } + + .cooperate-title { + font-size: 28px; + } + + .cooperate-cards { + padding: 30px 15px; + } + + .cards-wrapper { + gap: 15px; + } + + .card-slide { + flex: 0 0 calc(50% - 7.5px); + min-height: 80px; + padding: 10px; + min-width: 150px; + max-width: none; + } + + .card-slide img { + max-height: 50px; + } +} + +@media (max-width: 480px) { + .cooperate-title { + font-size: 24px; + line-height: 1.4; + } + + .cards-wrapper { + flex-direction: column; + gap: 15px; + } + + .card-slide { + flex: none; + width: 100%; + max-width: 280px; + } +} + +/* 动画效果 */ +@keyframes fadeInUp { + from { + opacity: 0; + transform: translateY(30px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +.cooperate-header { + animation: fadeInUp 0.8s ease-out; +} + +.cooperate-cards { + animation: fadeInUp 0.8s ease-out 0.2s both; +} + +/* 动画效果增强 */ +.cooperate-block { + opacity: 0; + transform: translateY(30px); + transition: all 0.6s ease-out; +} + +.cooperate-block.animate-in { + opacity: 1; + transform: translateY(0); +} + +/* 悬停效果增强 */ +.card-slide.dimmed { + opacity: 0.5; + transition: opacity 0.3s ease; +} + +.card-slide img.loaded { + opacity: 1; +} + +.card-slide img.error { + opacity: 0.3; + filter: grayscale(100%); +} + + +/* 性能优化 - 启用硬件加速 */ +.card-slide { + will-change: transform, box-shadow; + backface-visibility: hidden; + perspective: 1000px; +} + +/* 减少动画时的重绘 */ +.card-slide:hover, +.card-slide:focus { + will-change: auto; +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; +} + +/* 移动端布局调整 */ +.cards-wrapper.mobile-layout { + flex-direction: column; + align-items: center; +} + +.cards-wrapper.mobile-layout .card-slide { + min-width: 150px; + margin-bottom: 15px; +} + +/* 打印样式 */ +@media print { + .cooperate-block { + padding: 20px 0; + background: white; + } + + .card-slide { + box-shadow: none; + border: 1px solid #ddd; + } + + .card-slide img { + filter: none; + } +} \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/css/block-news.css b/wp-content/themes/nenghui-energy-theme-cn/assets/css/block-news.css new file mode 100644 index 0000000..b187d25 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/css/block-news.css @@ -0,0 +1,238 @@ +/** + * Block News Styles + * 新闻区块样式文件 + * + * @package Nenghui Energy Theme + * @since 1.0.0 + */ + +.news-debug { + background: #fff3cd; + border: 1px solid #ffeaa7; + color: #856404; + padding: 15px; + margin: 20px 0; + border-radius: 4px; + font-size: 14px; +} + +.news-debug h4 { + margin-top: 0; + color: #856404; + font-size: 16px; +} + +.news-debug pre { + background: #f8f9fa; + border: 1px solid #dee2e6; + padding: 10px; + border-radius: 3px; + font-size: 12px; + overflow-x: auto; +} + +.no-posts-message { + text-align: center; + padding: 40px 20px; + color: #666; + font-size: 16px; +} + +/* 无图片占位符样式 */ +.no-image-placeholder { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + background-color: #f5f5f5; + color: #999; + height: 200px; + border-radius: 8px; + border: 2px dashed #ddd; +} + +.news-card .no-image-placeholder { + height: 150px; +} + +.no-image-placeholder i { + font-size: 2rem; + margin-bottom: 8px; + opacity: 0.6; +} + +.no-image-placeholder span { + font-size: 0.9rem; + font-weight: 500; +} + +.news-container { + max-width: 1200px; + margin: 0 auto; + padding: 30px 20px; +} + +.news-header { + border-bottom: 1px solid #eeeeee; + padding-bottom: 15px; + margin-bottom: 30px; +} + +.news-header p { + color: #888888; + font-size: 14px; + margin: 0; +} + +.news-header h1 { + font-size: 32px; + margin: 8px 0 0 0; + font-weight: bold; + color: #000000; +} + +.main-news { + display: flex; + gap: 30px; + margin-bottom: 40px; +} + +.main-news-left { + flex: 1; + display: flex; + flex-direction: column; + justify-content: center; +} + + + +.main-news-right { + flex: 1; +} + +.main-news h2 { + font-size: 18px; + color: #0066cc; + margin-bottom: 10px; +} + +.main-news-left h2 { + font-size: 30px; +} + +.main-news h2 a { + color: #126594; + text-decoration: none; +} + +.main-news h2 a:hover { + color: #004499; + text-decoration: underline; +} + +.main-news p { + color: #666666; + margin: 0 0 15px 0; +} + +.main-news-info { + display: flex; + align-items: center; + font-size: 14px; + color: #999999; +} + +.main-news-info span { + margin-right: 20px; +} + +.main-news img { + width: 100%; + height: auto; + border-radius: 4px; +} + +.news-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 20px; +} + +.news-card { + border: 1px solid #eeeeee; + border-radius: 4px; + overflow: hidden; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05); + transition: box-shadow 0.3s ease; +} + +.news-card:hover { + box-shadow: 0 3px 8px rgba(0, 0, 0, 0.1); +} + +.news-card img { + width: 100%; + height: 250px; + object-fit: cover; +} + +.news-card-content { + padding: 15px; +} + +.news-card h3 { + font-size: 16px; + margin: 0 0 10px 0; + color: #333333; +} + +.news-card h3 a { + color: #333333; + text-decoration: none; +} + +.news-card h3 a:hover { + color: #0066cc; +} + +.news-card-info { + display: flex; + align-items: center; + font-size: 12px; + color: #999999; +} + +.news-card-info span { + margin-right: 15px; +} + +/* 响应式设计 */ +@media (max-width: 768px) { + .main-news { + flex-direction: column; + gap: 20px; + } + + .news-grid { + grid-template-columns: 1fr; + gap: 15px; + } + + .news-container { + padding: 20px 15px; + } + + .news-header h1 { + font-size: 24px; + } + + .main-news-left h2 { + font-size: 20px; + } +} + +@media (max-width: 1024px) and (min-width: 769px) { + .news-grid { + grid-template-columns: repeat(2, 1fr); + } +} \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/css/business-process.css b/wp-content/themes/nenghui-energy-theme-cn/assets/css/business-process.css new file mode 100644 index 0000000..69aae89 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/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-cn/assets/css/executive-profiles.css b/wp-content/themes/nenghui-energy-theme-cn/assets/css/executive-profiles.css new file mode 100644 index 0000000..24d1693 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/css/executive-profiles.css @@ -0,0 +1,324 @@ +/* 高管简历区块样式 */ +.executive-profiles-block { + padding: 50px 0; + background: #ffffff; + position: relative; +} + +.executive-profiles-container { + max-width: 1200px; + margin: 0 auto; + padding: 0 24px; +} + +/* 标题样式 */ +.section-header { + text-align: center; +} + +.section-title { + font-size: 32px; + font-weight: 600; + color: #1a1a1a; + margin: 0; + position: relative; + display: inline-block; +} + +.section-title::after { + content: ''; + position: absolute; + bottom: -8px; + left: 50%; + transform: translateX(-50%); + width: 50px; + height: 3px; + background: linear-gradient(90deg, #007cba, #00a0d2); + border-radius: 2px; +} + +/* 网格布局 - 默认每行一个元素 */ +.executives-grid { + display: grid; + gap: 16px; + grid-template-columns: 1fr; +} + +.executives-grid[data-columns="1"] { + grid-template-columns: 1fr; +} + +.executives-grid[data-columns="2"] { + grid-template-columns: repeat(2, 1fr); +} + +.executives-grid[data-columns="3"] { + grid-template-columns: repeat(3, 1fr); +} + +.executives-grid[data-columns="4"] { + grid-template-columns: repeat(4, 1fr); +} + +/* 高管卡片样式 */ +.executive-card { + background: #ffffff; + border: none; + border-bottom: 1px solid #e8e8e8; + border-radius: 0; + padding: 20px 0; + transition: all 0.3s ease; + position: relative; + overflow: visible; + display: flex; + flex-direction: row; + gap: 24px; + align-items: flex-start; + box-shadow: none; +} + +.executive-card:hover { + box-shadow: none; + border-bottom-color: #d0d0d0; + transform: none; +} + +/* 高管头部信息 - 左侧栏 */ +.executive-header { + margin-bottom: 0; + border-bottom: none; + padding-bottom: 0; + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 8px; + min-width: 120px; + flex-shrink: 0; +} + +.executive-name { + font-size: 15px; + font-weight: 600; + color: #2c2c2c; + margin: 0; + line-height: 1.3; + letter-spacing: 0.3px; +} + +.executive-title { + font-size: 12px; + color: #757575; + margin: 0; + font-weight: 400; + line-height: 1.3; +} + +/* 简历内容样式 - 右侧栏 */ +.executive-bio { + position: relative; + flex: 1; + min-width: 0; +} + +.bio-preview { + font-size: 13px; + line-height: 1.6; + color: #4a4a4a; + display: block; + overflow: visible; + text-overflow: unset; + cursor: default; + transition: all 0.3s ease; + position: relative; + text-align: justify; + font-weight: 400; +} + +.bio-preview::after { + display: none; +} + + + +/* 深色主题 */ +.executive-profiles-block.theme-dark { + background: #1a1a1a; +} + +.theme-dark .executive-card { + background: #2a2a2a; + border-color: #404040; +} + +.theme-dark .executive-card:hover { + box-shadow: 0 8px 25px rgba(0, 160, 210, 0.2); + border-color: #00a0d2; +} + +.theme-dark .section-title { + color: #ffffff; +} + +.theme-dark .executive-name { + color: #ffffff; +} + +.theme-dark .executive-title { + color: #cccccc; +} + +.theme-dark .executive-header { + border-bottom-color: #404040; +} + +.theme-dark .bio-preview { + color: #e0e0e0; +} + +.theme-dark .bio-preview::after { + background: linear-gradient(to right, transparent, #2a2a2a 50%); +} + +.theme-dark .bio-full { + background: #2a2a2a; + border-color: #00a0d2; + color: #e0e0e0; + box-shadow: 0 4px 15px rgba(0, 160, 210, 0.3); +} + +/* 浅色主题 */ +.executive-profiles-block.theme-light { + background: #f8f9fa; +} + +.theme-light .executive-card { + background: #ffffff; + border-color: #dee2e6; +} + +.theme-light .executive-card:hover { + box-shadow: 0 8px 25px rgba(0, 124, 186, 0.1); + border-color: #007cba; +} + +/* 响应式设计 */ +@media (max-width: 768px) { + .executives-grid { + grid-template-columns: 1fr !important; + gap: 16px; + } + + .executive-profiles-container { + padding: 0 16px; + } + + .executive-profiles-block { + padding: 40px 0; + } + + .section-title { + font-size: 28px; + } + + .executive-card { + padding: 20px 0; + flex-direction: column; + gap: 16px; + } + + .executive-header { + min-width: auto; + flex-direction: row; + align-items: baseline; + gap: 12px; + } + + .executive-name { + font-size: 16px; + } + + .executive-title { + font-size: 13px; + } + + +} + +@media (max-width: 480px) { + .section-title { + font-size: 24px; + } + + .executive-name { + font-size: 15px; + } + + .executive-card { + padding: 15px 0; + } +} + +/* 动画效果 */ +@keyframes fadeInUp { + from { + opacity: 0; + transform: translateY(20px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +.executive-card { + animation: fadeInUp 0.6s ease forwards; +} + +.executive-card:nth-child(1) { animation-delay: 0.1s; } +.executive-card:nth-child(2) { animation-delay: 0.2s; } +.executive-card:nth-child(3) { animation-delay: 0.3s; } +.executive-card:nth-child(4) { animation-delay: 0.4s; } +.executive-card:nth-child(5) { animation-delay: 0.5s; } +.executive-card:nth-child(6) { animation-delay: 0.6s; } +.executive-card:nth-child(7) { animation-delay: 0.7s; } +.executive-card:nth-child(8) { animation-delay: 0.8s; } +.executive-card:nth-child(9) { animation-delay: 0.9s; } +.executive-card:nth-child(10) { animation-delay: 1.0s; } + +/* 加载状态 */ +.executive-profiles-block.loading .executive-card { + opacity: 0; +} + +/* 打印样式 */ +@media print { + .executive-profiles-block { + background: white !important; + padding: 20px 0; + } + + .executive-card { + break-inside: avoid; + box-shadow: none !important; + border: 1px solid #ccc !important; + } + + .bio-preview { + -webkit-line-clamp: unset; + overflow: visible; + } + + .bio-preview::after { + display: none; + } + + .bio-full { + position: static; + opacity: 1; + transform: none; + box-shadow: none; + border: none; + padding: 0; + margin-top: 10px; + } +} \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/css/features.css b/wp-content/themes/nenghui-energy-theme-cn/assets/css/features.css new file mode 100644 index 0000000..19ddeec --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/css/features.css @@ -0,0 +1,173 @@ +.features-block { + width: 100%; + height: 600px; + position: relative; + background-image: url('../images/features-bg.webp'); + background-size: cover; + background-position: center; + background-repeat: no-repeat; + background-attachment: fixed; + display: flex; + align-items: center; + justify-content: center; + padding: 80px 20px; + box-sizing: border-box; + margin: 2rem 0; +} + +/* 添加深色遮罩以提高文字可读性 */ +.features-block::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgb(0 0 0 / 26%); + z-index: 1; +} + +.features-container { + position: relative; + z-index: 2; + max-width: 1200px; + width: 100%; + text-align: center; + color: white; +} + +.features-header { + margin-bottom: 60px; + /* 初始状态:隐藏并向下偏移 */ + opacity: 0; + transform: translateY(30px); +} + +.features-title { + font-size: 42px; + font-weight: 600; + margin: 0; + text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5); + letter-spacing: 1px; +} + +.features-stats { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 40px; + align-items: center; + justify-items: center; +} + +.features-stat-item { + text-align: center; + /* 初始状态:隐藏并向下偏移 */ + opacity: 0; + transform: translateY(50px); +} + +.stat-number { + font-size: 48px; + font-weight: 700; + margin-bottom: 10px; + text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5); + color: #ffffff; + line-height: 1.2; +} + +.stat-label { + font-size: 16px; + font-weight: 400; + color: #f0f0f0; + text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5); + line-height: 1.4; + letter-spacing: 0.5px; +} + +/* 分隔线效果 */ +.features-stat-item:not(:last-child)::after { + content: ''; + position: absolute; + right: -70px; + top: 50%; + transform: translateY(-50%); + width: 1px; + height: 60px; + background: rgb(255 255 255 / 53%); +} + +.features-stat-item { + position: relative; +} + +/* 响应式设计 */ +@media (max-width: 1024px) { + .features-title { + font-size: 36px; + } + + .stat-number { + font-size: 40px; + } + + .features-stats { + gap: 30px; + } + + .features-block { + padding: 60px 20px; + } +} + +@media (max-width: 768px) { + .features-stats { + grid-template-columns: repeat(2, 1fr); + gap: 40px; + } + + .features-title { + font-size: 28px; + } + + .stat-number { + font-size: 36px; + } + + .stat-label { + font-size: 14px; + } + + .features-header { + margin-bottom: 40px; + } + + .features-block { + padding: 40px 15px; + background-attachment: scroll; + } + + /* 移除分隔线在移动端 */ + .features-stat-item:not(:last-child)::after { + display: none; + } +} + +@media (max-width: 480px) { + .features-stats { + grid-template-columns: 1fr; + gap: 30px; + } + + .features-title { + font-size: 22px; + } + + .stat-number { + font-size: 32px; + } + + .features-block { + min-height: 300px; + padding: 30px 15px; + } +} \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/css/footer.css b/wp-content/themes/nenghui-energy-theme-cn/assets/css/footer.css new file mode 100644 index 0000000..b20baa2 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/css/footer.css @@ -0,0 +1,392 @@ +/* =================================== + 网站页脚样式 + =================================== */ + +/* 页脚主容器 */ +.site-footer { + background-color: #f8f9fa; + border-top: 1px solid #e9ecef; + padding: 60px 0 20px; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; +} + +/* 页脚容器 */ +.footer-container { + max-width: 1200px; + margin: 0 auto; + padding: 0 20px; +} + +/* 页脚主要内容区域 */ +.footer-main { + display: flex; + justify-content: space-between; + align-items: flex-start; + margin-bottom: 40px; + gap: 60px; +} + +/* 左侧Logo区域 */ +.footer-logo { + flex: 0 0 auto; + min-width: 200px; +} + +.footer-logo-img { + height: 50px; + width: auto; + max-width: 200px; + object-fit: contain; +} + +/* 右侧导航链接区域 */ +.footer-nav { + flex: 1; + display: flex; + gap: 8rem; +} + +/* 导航列 */ +.footer-nav-column { + flex: 0 1 auto; + min-width: 0; + text-align: center; +} + +/* 导航标题 */ +.footer-nav-title { + font-size: 16px; + font-weight: 600; + color: #333; + margin: 0 0 20px 0; + padding-bottom: 8px; + border-bottom: 2px solid #1369a8; + display: inline-block; + min-width: 80px; +} + +/* 导航列表 */ +.footer-nav-list { + list-style: none; + margin: 0; + padding: 0; +} + +.footer-nav-list li { + margin-bottom: 12px; +} + +.footer-nav-list li:last-child { + margin-bottom: 0; +} + +/* 导航链接 */ +.footer-nav-list a { + color: #666; + text-decoration: none; + font-size: 14px; + line-height: 1.5; + transition: color 0.3s ease; + display: block; + padding: 2px 0; +} + +.footer-nav-list a:hover { + color: #1369a8; + text-decoration: none; +} + +/* 页脚底部 */ +.footer-bottom { + border-top: 1px solid #e9ecef; + padding-top: 20px; + text-align: center; +} + +/* 版权信息 */ +.footer-copyright { + margin: 0; +} + +.footer-copyright p { + color: #999; + font-size: 13px; + line-height: 1.5; + margin: 0; +} + +.footer-copyright a { + color: #999; + text-decoration: none; + transition: color 0.3s ease; +} + +.footer-copyright a:hover { + color: #1369a8; + text-decoration: underline; +} + +/* 滚动进度指示器 */ +.scroll-indicator { + position: fixed; + top: 0; + left: 0; + width: 0%; + height: 3px; + background: linear-gradient(90deg, #1369a8, #0c947b); + z-index: 9999; + transition: width 0.1s ease; +} + +/* 回到顶部按钮 */ +.back-to-top { + position: fixed; + bottom: 30px; + right: 30px; + width: 50px; + height: 50px; + background: #1369a8; + color: white; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + text-decoration: none; + opacity: 0; + visibility: hidden; + transition: all 0.3s ease; + z-index: 1000; + box-shadow: 0 4px 12px rgba(19, 105, 168, 0.3); +} + +.back-to-top:hover { + background: #0f5a94; + transform: translateY(-2px); + box-shadow: 0 6px 16px rgba(19, 105, 168, 0.4); + color: white; + text-decoration: none; +} + +.back-to-top.show { + opacity: 1; + visibility: visible; +} + +.back-to-top i { + font-size: 18px; +} + +/* =================================== + 响应式设计 + =================================== */ + +/* 平板设备 */ +@media (max-width: 1024px) { + .footer-main { + gap: 40px; + } + + .footer-nav { + gap: 30px; + } + + .footer-logo { + min-width: 160px; + } + + .footer-logo-img { + height: 45px; + max-width: 160px; + } +} + +/* 小平板设备 */ +@media (max-width: 768px) { + .site-footer { + padding: 40px 0 20px; + margin-top: 80px; + } + + .footer-main { + flex-direction: column; + gap: 40px; + text-align: center; + align-items: center; + } + + .footer-logo { + min-width: auto; + align-self: center; + } + + .footer-nav { + width: 100%; + flex-wrap: wrap; + justify-content: center; + gap: 30px 40px; + text-align: center; + } + + .footer-nav-column { + flex: 0 0 calc(50% - 20px); + min-width: 140px; + text-align: center; + } + + .footer-nav-title { + text-align: center; + } + + .back-to-top { + bottom: 20px; + right: 20px; + width: 45px; + height: 45px; + } + + .back-to-top i { + font-size: 16px; + } +} + +/* 手机设备 */ +@media (max-width: 480px) { + .site-footer { + padding: 30px 0 15px; + margin-top: 80px; + } + + .footer-container { + padding: 0 15px; + } + + .footer-main { + gap: 30px; + margin-top: 3rem; + } + + .footer-nav { + flex-direction: column; + gap: 25px; + align-items: center; + } + + .footer-nav-column { + flex: none; + width: 100%; + max-width: 200px; + } + + .footer-logo-img { + height: 40px; + max-width: 140px; + } + + .footer-nav-title { + font-size: 15px; + margin-bottom: 15px; + } + + .footer-nav-list a { + font-size: 13px; + } + + .footer-nav-list li { + margin-bottom: 10px; + } + + .footer-copyright p { + font-size: 12px; + line-height: 1.6; + } + + .back-to-top { + bottom: 15px; + right: 15px; + width: 40px; + height: 40px; + } + + .back-to-top i { + font-size: 14px; + } +} + +/* 超小屏幕设备 */ +@media (max-width: 360px) { + .footer-container { + padding: 0 10px; + } + + .footer-nav-column { + max-width: 180px; + } + + .footer-copyright p { + font-size: 11px; + } +} + +/* =================================== + 打印样式 + =================================== */ +@media print { + .site-footer { + background: white !important; + border-top: 1px solid #ccc !important; + margin-top: 20px !important; + padding: 20px 0 !important; + } + + .scroll-indicator, + .back-to-top { + display: none !important; + } + + .footer-nav-list a { + color: #333 !important; + } + + .footer-copyright a { + color: #666 !important; + } +} + +/* =================================== + 无障碍访问优化 + =================================== */ +@media (prefers-reduced-motion: reduce) { + .footer-nav-list a, + .footer-copyright a, + .back-to-top, + .scroll-indicator { + transition: none; + } +} + +/* 高对比度模式 */ +@media (prefers-contrast: high) { + .site-footer { + background-color: white; + border-top: 2px solid #000; + } + + .footer-nav-title { + color: #000; + border-bottom-color: #000; + } + + .footer-nav-list a { + color: #000; + } + + .footer-nav-list a:hover { + color: #000; + background-color: #ffff00; + } + + .footer-copyright p, + .footer-copyright a { + color: #000; + } +} \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/css/henghui-core.css b/wp-content/themes/nenghui-energy-theme-cn/assets/css/henghui-core.css new file mode 100644 index 0000000..69fa928 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/css/henghui-core.css @@ -0,0 +1,672 @@ +/* 恒辉核心页面样式 + GSAP 动画支持 */ + +/* 基础Grid系统 */ +.page-full-width { + overflow-x: hidden; +} + +.about-content .container { + width: 100%; + max-width: 1200px; + margin: 0 auto; + padding: 0 15px; + box-sizing: border-box; +} + +.about-content .row { + display: flex; + flex-wrap: wrap; + margin: 0 -15px; + align-items: center; + min-height: 500px; +} + +.about-content .col-lg-6 { + flex: 0 0 50%; + max-width: 50%; + padding: 0 15px; + box-sizing: border-box; +} + +.about-content .col-md-12 { + flex: 0 0 100%; + max-width: 100%; + padding: 0 15px; + box-sizing: border-box; +} + +/* 响应式Grid */ +@media (max-width: 991.98px) { + .about-content .col-lg-6 { + flex: 0 0 100%; + max-width: 100%; + } + + .about-content .row { + align-items: flex-start; + min-height: auto; + } +} + +.about-content { + padding: 60px 0; + background-color: #f8f9fa; +} + +/* 确保左右布局正确显示 */ +.about-content .row { + display: flex !important; + flex-wrap: wrap; + margin: 0 -15px; + align-items: center; + min-height: 500px; +} + +/* 专业领域轮播样式 */ +.professional-fields { + padding: 60px 0; + background: #f8f9fa; + position: relative; +} + +.professional-fields .container { + max-width: 1000px; + margin: 0 auto; + padding: 0 20px; +} + +.professional-fields .section-title { + text-align: center; + font-size: 2rem; + font-weight: 600; + color: #333; + margin-bottom: 40px; + position: relative; +} + +.professional-carousel { + position: relative; + max-width: 100%; + margin: 0 auto; +} + +.carousel-wrapper { + position: relative; + width: 100%; + height: 120px; + overflow: hidden; + display: flex; + align-items: center; +} + +.professional-carousel { + display: flex; + width: 100%; + height: 100%; + transition: transform 0.5s ease; +} + +.professional-card { + position: relative; + width: 20%; + height: 100px; + display: flex; + align-items: center; + justify-content: space-between; + background: #ffffff; + border-radius: 8px; + margin: 0 5px; + padding: 0 20px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); + transition: all 0.3s ease; + cursor: pointer; + border: 1px solid #e9ecef; + flex-shrink: 0; +} + +.professional-card:hover { + transform: translateY(-2px); + box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15); + border-color: #7dd3fc; +} + +.card-left { + flex: 0 0 40%; + display: flex; + align-items: center; + justify-content: center; +} + +.card-number { + font-size: 5rem; + font-weight: 300; + color: #83cfce; + line-height: 1; + margin: 0; +} + +.card-right { + flex: 0 0 55%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + text-align: center; +} + +.card-icon { + font-size: 2rem; + color: #6d6e6e; + margin-bottom: 8px; + transition: color 0.3s ease; + display: flex; + align-items: center; + justify-content: center; +} + +.card-icon svg { + width: 40px; + height: 40px; +} + +.card-title { + font-size: 1rem; + font-weight: 500; + color: #6d6e6e; + margin: 0; + white-space: nowrap; + transition: color 0.3s ease; +} + +.professional-card:hover .card-title { + color: #83cfce; +} + +.professional-card:hover .card-number { + color: #83cfce; +} + +.carousel-navigation { + position: absolute; + bottom: -60px; + left: 50%; + transform: translateX(-50%); + display: flex; + gap: 15px; + z-index: 10; +} + +.carousel-button { + width: 40px; + height: 40px; + background: #ffffff; + border: 1px solid #ddd; + border-radius: 6px; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + transition: all 0.3s ease; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); +} + +.carousel-button:hover { + background: #f8f9fa; + border-color: #7dd3fc; + transform: translateY(-1px); + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15); +} + +.carousel-button svg { + color: #666; + transition: color 0.3s ease; + width: 20px; + height: 20px; +} + +.carousel-button:hover svg { + color: #0ea5e9; +} + +/* 响应式设计 */ +@media (max-width: 1200px) { + .professional-card { + flex: 0 0 calc(33.333% - 20px); + } +} + +@media (max-width: 768px) { + .professional-card { + flex: 0 0 calc(50% - 15px); + margin: 0 7.5px 20px; + } + + .carousel-wrapper { + height: auto; + min-height: 180px; + } + + .carousel-navigation { + bottom: -50px; + } +} + +@media (max-width: 480px) { + .professional-card { + flex: 0 0 calc(100% - 20px); + margin: 0 10px 20px; + } +} + +/* 左侧内容区域 - 40% */ +.about-content .col-lg-6:first-child { + flex: 0 0 40% !important; + max-width: 40% !important; + padding: 0 15px; + box-sizing: border-box; +} + +/* 右侧图片区域 - 60% */ +.about-content .col-lg-6:last-child { + flex: 0 0 60% !important; + max-width: 60% !important; + padding: 0 15px; + box-sizing: border-box; +} + + + +.content-header { + margin-bottom: 40px; +} + +.section-title { + font-size: 1.5rem; + font-weight: 700; + color: #2c3e50; + margin-bottom: 20px; + line-height: 1.2; +} + +.section-description { + font-size: 14px; + line-height: 1.8; + color: #555; + margin-bottom: 0; +} + +/* 可折叠面板样式 */ +.accordion { + margin-top: 30px; +} + +.accordion-item { + border: 1px solid #e0e0e0; + border-radius: 8px; + margin-bottom: 15px; + box-shadow: 0 2px 4px rgba(0,0,0,0.1); + overflow: hidden; +} + +.accordion-header { + margin: 0; +} + +.accordion-button { + background-color: #fff; + border: none; + padding: 20px 25px; + font-size: 1.1rem; + font-weight: 600; + color: #2c3e50; + text-align: left; + width: 100%; + position: relative; + transition: all 0.3s ease; + cursor: pointer; +} + +.accordion-button:hover { + background-color: #f8f9fa; +} + +.accordion-button.active { + background-color: #f2f2f2 !important; + color: #000 !important; +} + +.accordion-button[aria-expanded="true"] { + background-color: #f2f2f2 !important; + color: #000 !important; +} + +.accordion-button:focus { + outline: none; + box-shadow: 0 0 0 2px rgba(0,123,255,0.25); +} + +.accordion-button::after { + content: '+'; + font-size: 1.5rem; + font-weight: bold; + position: absolute; + right: 25px; + top: 50%; + transform: translateY(-50%); + transition: transform 0.3s ease; +} + +.section-title::after{ + display: none; +} + +.accordion-button.active::after { + content: '−'; + transform: translateY(-50%) rotate(0deg); +} + +.accordion-collapse { + max-height: 0; + overflow: hidden; + transition: max-height 0.3s ease; + border-top: 1px solid #e0e0e0; +} + +.accordion-collapse.show { + max-height: 500px; +} + +.accordion-body { + padding: 25px; + background-color: #fff; +} + +.accordion-body ul { + list-style: none; + padding: 0; + margin: 0; +} + +.accordion-body li { + padding: 8px 0; + border-bottom: 1px solid #f0f0f0; + position: relative; + padding-left: 20px; +} + +.accordion-body li:last-child { + border-bottom: none; +} + +.accordion-body li::before { + content: '•'; + color: #007bff; + font-weight: bold; + position: absolute; + left: 0; +} + +.accordion-body p { + margin: 0; + line-height: 1.6; + color: #555; +} + +/* 响应式图片 */ +.img-fluid { + max-width: 100%; + height: auto; +} + +/* 右侧图片样式 */ +.system-image { + padding: 20px; + text-align: center; +} + +.system-image img { + border-radius: 12px; + box-shadow: 0 8px 25px rgba(0,0,0,0.15); + transition: transform 0.3s ease; +} + +.system-image img:hover { + transform: scale(1.02); +} + +/* 响应式设计 */ +@media (max-width: 991.98px) { + .about-content { + padding: 40px 0; + } + + .about-content .col-lg-6, + .about-content .col-lg-6:first-child, + .about-content .col-lg-6:last-child { + flex: 0 0 100% !important; + max-width: 100% !important; + padding: 0 15px; + } + + .about-content .row { + min-height: auto !important; + align-items: flex-start !important; + } + + .section-title { + font-size: 2rem; + text-align: center; + } + + .section-description { + text-align: center; + margin-bottom: 30px; + } + + .system-image { + margin-top: 40px; + padding: 10px; + } + + .content-header { + text-align: center; + } +} + +@media (max-width: 767.98px) { + .container { + padding: 0 10px; + } + + .section-title { + font-size: 1.8rem; + } + + .section-description { + font-size: 1rem; + padding: 0 10px; + } + + .accordion-button { + padding: 15px 20px; + font-size: 1rem; + } + + .accordion-body { + padding: 20px; + } + + .system-image { + padding: 5px; + margin-top: 30px; + } + + .accordion { + margin-top: 20px; + } +} + +/* GSAP 动画相关样式 */ + +/* 动画元素初始状态 - 防止闪烁 */ +.gsap-animate { + opacity: 0; + transform: translateY(30px); +} + +/* 系统图片动画样式 */ +.system-image { + overflow: hidden; + transition: box-shadow 0.3s ease; +} + +.system-image img { + width: 100%; + height: auto; + display: block; + border-radius: 8px; + transition: transform 0.3s ease; +} + +/* Accordion 动画增强 */ +.accordion-button { + transition: all 0.3s ease; + transform-origin: center; + position: relative; + overflow: hidden; +} + +.accordion-button::before { + content: ''; + position: absolute; + top: 0; + left: -100%; + width: 100%; + height: 100%; + background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.1), transparent); + transition: left 0.5s ease; +} + +.accordion-button:hover::before { + left: 100%; +} + +.accordion-button:hover { + background-color: rgba(0, 123, 255, 0.05); + border-color: rgba(0, 123, 255, 0.2); +} + +.accordion-button.active { + background-color: rgba(0, 123, 255, 0.1); + border-color: rgba(0, 123, 255, 0.3); + transform: scale(1.01); +} + +/* 折叠内容动画 - 纯CSS版本 */ +.accordion-collapse { + overflow: hidden; + max-height: 0; + transition: max-height 0.6s ease-in-out, opacity 0.6s ease-in-out; + opacity: 0; +} + +.accordion-collapse.show { + max-height: 2000px; /* 足够大的值确保内容完全显示 */ + opacity: 1; +} + +.accordion-body { + padding: 25px; + background-color: #fff; + line-height: 1.6; +} + +/* 标题和描述动画样式 */ +.section-title { + position: relative; + overflow: hidden; +} + +.section-description { + line-height: 1.8; + position: relative; +} + +/* 响应式动画调整 */ +@media (max-width: 767.98px) { + .system-image { + margin-top: 40px; + } + + .accordion-button { + font-size: 14px; + padding: 12px 15px; + } + + .section-title { + font-size: 24px; + } + + .section-description { + font-size: 14px; + } +} + +/* 加载状态样式 */ +.loading-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(255, 255, 255, 0.9); + display: flex; + justify-content: center; + align-items: center; + z-index: 9999; + opacity: 1; + transition: opacity 0.5s ease; +} + +.loading-overlay.fade-out { + opacity: 0; + pointer-events: none; +} + +/* 系统图片垂直居中样式 */ +.system-image { + display: flex; + align-items: center; + justify-content: center; + height: 100%; + min-height: 400px; + padding: 20px; +} + +.system-image img { + max-width: 100%; + height: auto; + border-radius: 12px; + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1); + transition: all 0.3s ease; +} + +.system-image img:hover { + transform: scale(1.02); + box-shadow: 0 12px 40px rgba(0, 0, 0, 0.15); +} + +/* 响应式调整 */ +@media (max-width: 991.98px) { + .system-image { + min-height: 300px; + margin-top: 30px; + } +} + +@media (max-width: 767.98px) { + .system-image { + min-height: 250px; + padding: 15px; + } +} \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/css/household-carousel.css b/wp-content/themes/nenghui-energy-theme-cn/assets/css/household-carousel.css new file mode 100644 index 0000000..5706376 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/css/household-carousel.css @@ -0,0 +1,156 @@ +/** + * 户用轮播图样式 + */ + +/* 主容器 */ +.household-carousel-block { + padding: 0; + background: transparent; + position: relative; +} + +/* 轮播图容器 */ +.household-carousel-container { + position: relative; + width: 100%; + margin: 0; + background: transparent; + border-radius: 0; + box-shadow: none; + overflow: hidden; +} + +/* 轮播图包装器 */ +.household-carousel-wrapper { + position: relative; + width: 100%; + height: 500px; + overflow: hidden; +} + +/* 轮播图轨道 */ +.household-carousel-track { + position: relative; + width: 100%; + height: 100%; + display: flex; + transition: transform 0.5s cubic-bezier(0.4, 0, 0.2, 1); +} + +/* 单个幻灯片 */ +.household-slide { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + opacity: 0; + transition: opacity 0.5s ease-in-out; + display: flex; + align-items: center; + justify-content: center; +} + +.household-slide.active { + opacity: 1; +} + +/* 幻灯片图片 */ +.household-slide-image { + width: 100%; + height: 100%; + position: relative; + overflow: hidden; +} + +.household-slide-image img { + width: 100%; + height: 100%; + object-fit: cover; + object-position: center; +} + +/* 右上角控制按钮 */ +.household-carousel-controls { + position: absolute; + top: 20px; + right: 20px; + display: flex; + gap: 10px; + z-index: 10; +} + +.household-carousel-btn { + width: 48px; + height: 48px; + background: rgba(255, 255, 255, 0.9); + border: none; + border-radius: 4px; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + transition: all 0.3s ease; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); + color: #2c3e50; +} + +.household-carousel-btn:hover { + background: #fff; + transform: translateY(-2px); + box-shadow: 0 6px 20px rgba(0, 0, 0, 0.2); +} + +.household-carousel-btn:active { + transform: translateY(0); +} + +.household-carousel-btn svg { + width: 20px; + height: 20px; +} + +/* 响应式设计 */ +@media (max-width: 768px) { + .household-carousel-wrapper { + height: 350px; + } + + .household-carousel-controls { + top: 15px; + right: 15px; + gap: 8px; + } + + .household-carousel-btn { + width: 40px; + height: 40px; + } + + .household-carousel-btn svg { + width: 16px; + height: 16px; + } +} + +@media (max-width: 480px) { + .household-carousel-wrapper { + height: 280px; + } + + .household-carousel-controls { + top: 10px; + right: 10px; + } + + .household-carousel-btn { + width: 36px; + height: 36px; + } +} + +/* 无障碍访问 */ +.household-carousel-btn:focus { + outline: 2px solid #3498db; + outline-offset: 2px; +} \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/css/index.css b/wp-content/themes/nenghui-energy-theme-cn/assets/css/index.css new file mode 100644 index 0000000..94b4dd9 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/css/index.css @@ -0,0 +1,43 @@ +/* 自定义样式文件 */ +#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;} +#btns button:hover {background: #f6f6f6;border: 1px solid #d7d7d7;} +/* 你可以在这里写一些自定义的全局CSS样式 */ +* { + margin: 0; + padding: 0; +} +a { + text-decoration: none; + color: rgb(57, 57, 57); +} + +a:hover { + font-weight: 600; + color: #000; +} + +#box { + width: 80%; + display: block; + margin: 0 auto; + margin-top: 14vh; +} + +img { + display: flex; + margin: 0 auto; +} + +.tinytyper { + font-size: 3rem; + margin-top: 10px; + text-align: center; +} + +#footer { + font-size: 1.5rem; + display: flex; + justify-content: center; + padding: 10px; +} \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/css/investor-reception.css b/wp-content/themes/nenghui-energy-theme-cn/assets/css/investor-reception.css new file mode 100644 index 0000000..a7ec293 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/css/investor-reception.css @@ -0,0 +1,256 @@ +/* 投资者接待区块样式 */ +.investor-reception-block { + width: 100%; + max-width: 1200px; + margin: 20px auto; + overflow: hidden; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; + position: relative; + box-sizing: border-box; +} + +.investor-reception-block * { + box-sizing: border-box; +} + +/* 容器 */ +.investor-reception-container { + display: flex; + flex-direction: column; + width: 100%; +} + +/* 图片区域 */ +.image-section { + width: 100%; + height: 300px; + overflow: hidden; + position: relative; +} + +.reception-image { + width: 100%; + height: 100%; + object-fit: cover; + object-position: center; + display: block; +} + +/* 内容区域 */ +.content-section { + padding: 40px 30px; + background: #ffffff; +} + +.content-container { + max-width: 1000px; + margin: 0 auto; +} + +/* 标题区域 */ +.title-section { + text-align: left; + margin-bottom: 30px; +} + +.main-title { + font-size: 1rem; + font-weight: 700; + color: #2c3e50; + margin: 0 0 15px 0; + line-height: 1.2; +} + + + +/* 联系信息区域 */ +.contact-section { + margin-bottom: 30px; +} + +.contact-item { + display: flex; + align-items: center; + margin-bottom: 15px; + padding: 12px 0; + border-bottom: 1px solid #ecf0f1; +} + +.contact-item:last-child { + border-bottom: none; + margin-bottom: 0; +} + +.contact-label { + font-weight: 600; + color: #34495e; + min-width: 100px; + font-size: 1rem; +} + +.contact-value { + color: #2c3e50; + font-size: 1rem; + flex: 1; +} + +.phone-link, +.email-link { + color: #3498db; + text-decoration: none; + transition: color 0.3s ease; +} + +.phone-link:hover, +.email-link:hover { + color: #2980b9; + text-decoration: underline; +} + +/* 投资者交流平台按钮样式 */ +.contact-btn { + display: inline-block; + background: linear-gradient(135deg, #3498db, #2980b9); + color: #ffffff; + padding: 12px 24px; + border-radius: 6px; + text-decoration: none; + font-weight: 600; + font-size: 1rem; + border: none; + cursor: pointer; + transition: all 0.3s ease; + box-shadow: 0 2px 8px rgba(52, 152, 219, 0.3); +} + +.contact-btn:hover { + background: linear-gradient(135deg, #2980b9, #1f5f8b); + transform: translateY(-2px); + box-shadow: 0 4px 12px rgba(52, 152, 219, 0.4); + color: #ffffff; + text-decoration: none; +} + +.contact-btn:active { + transform: translateY(0); + box-shadow: 0 2px 6px rgba(52, 152, 219, 0.3); +} + + + +/* 主题变体 */ +.theme-dark .content-section { + background: #2c3e50; +} + +.theme-dark .main-title { + color: #ecf0f1; +} + +.theme-dark .subtitle { + color: #bdc3c7; +} + +.theme-dark .contact-label { + color: #ecf0f1; +} + +.theme-dark .contact-value { + color: #bdc3c7; +} + +.theme-dark .contact-item { + border-bottom-color: #34495e; +} + + + +.theme-light .content-section { + background: #f8f9fa; +} + +.theme-light .main-title { + color: #2c3e50; +} + +.theme-light .subtitle { + color: #6c757d; +} + +.theme-light .contact-item { + border-bottom-color: #dee2e6; +} + + + +/* 响应式设计 */ +@media (max-width: 768px) { + .investor-reception-block { + margin: 10px; + border-radius: 8px; + } + + .image-section { + height: 200px; + } + + .reception-image { + width: 80%; + margin: 0 auto; + border-radius: 8px; + } + + .content-section { + padding: 25px 20px; + } + + .main-title { + font-size: 1.6rem; + } + + .subtitle { + font-size: 1rem; + } + + .contact-item { + flex-direction: column; + align-items: flex-start; + gap: 5px; + } + + .contact-label { + min-width: auto; + font-size: 0.9rem; + } + + .contact-value { + font-size: 0.95rem; + } + + +} + +@media (max-width: 480px) { + .image-section { + height: 180px; + } + + .content-section { + padding: 20px 15px; + width: 100%; + margin: 0 auto; + } + + .main-title { + font-size: 1.4rem; + } + + .contact-label { + font-size: 0.85rem; + } + + .contact-value { + font-size: 0.9rem; + } + +} \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/css/investor-relations.css b/wp-content/themes/nenghui-energy-theme-cn/assets/css/investor-relations.css new file mode 100644 index 0000000..c855764 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/css/investor-relations.css @@ -0,0 +1,117 @@ +/** + * 投资者关系页面Banner样式 + * 响应式设计,适配不同设备 + */ + +.investor-banner { + position: relative; + width: 100%; + height: 650px; + background-image: url('../images/Investor-Relations.webp'); + background-size: cover; + background-position: center center; + background-repeat: no-repeat; + display: flex; + align-items: center; + justify-content: center; + overflow: hidden; +} + +/* Banner内容容器 */ +.investor-banner-content { + position: relative; + z-index: 2; + text-align: center; + color: white; + max-width: 1200px; + margin: 0 auto; + padding: 0 20px; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + height: 100%; + padding-top: 8rem; + overflow: hidden; +} + +/* 主标题 */ +.investor-banner-title { + font-size: 48px; + font-weight: 700; + margin: 0; + text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5); + letter-spacing: 2px; + line-height: 1.2; +} + +/* 响应式设计 - 平板设备 */ +@media (max-width: 1024px) { + .investor-banner { + height: 500px; + } + + .investor-banner-title { + font-size: 40px; + } +} + +/* 响应式设计 - 手机设备 */ +@media (max-width: 768px) { + .investor-banner { + height: 400px; + } + + .investor-banner-content { + padding: 0 15px; + padding-top: 6rem; + } + + .investor-banner-title { + font-size: 32px; + letter-spacing: 1px; + } +} + +/* 响应式设计 - 小屏手机 */ +@media (max-width: 480px) { + .investor-banner { + height: 350px; + } + + .investor-banner-content { + padding-top: 5rem; + } + + .investor-banner-title { + font-size: 28px; + letter-spacing: 0.5px; + } +} + +/* 超小屏设备 */ +@media (max-width: 360px) { + .investor-banner { + height: 300px; + } + + .investor-banner-title { + font-size: 24px; + } +} + +/* 投资者关系内容区域 */ +.investor-content { + padding: 60px 0; + max-width: 1200px; + margin: 0 auto; + padding-left: 20px; + padding-right: 20px; +} + +/* 响应式设计 - 移动端内容区域 */ +@media (max-width: 768px) { + .investor-content { + padding: 40px 15px; + } +} \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/css/navigation-menu.css b/wp-content/themes/nenghui-energy-theme-cn/assets/css/navigation-menu.css new file mode 100644 index 0000000..235d7fd --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/css/navigation-menu.css @@ -0,0 +1,639 @@ +/* 导航菜单页面样式 */ +.navigation-menu-page { + min-height: 100vh; + background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%); + padding: 80px 0 60px; +} + +.navigation-menu-page .container { + max-width: 1200px; + margin: 0 auto; + padding: 0 20px; +} + +/* 页面标题区域 */ +.page-header { + text-align: center; + margin-bottom: 60px; + animation: fadeInUp 0.8s ease-out; +} + +.page-title { + font-size: 3rem; + font-weight: 700; + color: #2c3e50; + margin-bottom: 16px; + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; +} + +.page-subtitle { + font-size: 1.2rem; + color: #7f8c8d; + margin: 0; + opacity: 0.8; +} + +/* 导航网格布局 */ +.navigation-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); + gap: 30px; + margin-bottom: 60px; +} + +/* 导航项目卡片 */ +.nav-item { + background: rgba(255, 255, 255, 0.95); + border-radius: 20px; + padding: 40px 30px; + text-align: center; + box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1); + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + position: relative; + overflow: hidden; + backdrop-filter: blur(10px); + border: 1px solid rgba(255, 255, 255, 0.2); +} + +.nav-item::before { + content: ''; + position: absolute; + top: 0; + left: -100%; + width: 100%; + height: 100%; + background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.4), transparent); + transition: left 0.5s; +} + +.nav-item:hover::before { + left: 100%; +} + +.nav-item:hover { + transform: translateY(-10px); + box-shadow: 0 20px 40px rgba(0, 0, 0, 0.15); + background: rgba(255, 255, 255, 1); +} + +/* 图标样式 */ +.nav-icon { + width: 80px; + height: 80px; + margin: 0 auto 24px; + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + color: white; + transition: all 0.3s ease; + position: relative; + z-index: 2; +} + +.nav-item:hover .nav-icon { + transform: scale(1.1) rotate(5deg); + background: linear-gradient(135deg, #764ba2 0%, #667eea 100%); +} + +.nav-icon svg { + width: 48px; + height: 48px; + transition: transform 0.3s ease; +} + +.nav-item:hover .nav-icon svg { + transform: scale(1.1); +} + +/* 标题样式 */ +.nav-title { + font-size: 1.5rem; + font-weight: 600; + color: #2c3e50; + margin-bottom: 12px; + position: relative; + z-index: 2; +} + +/* 描述文字 */ +.nav-description { + font-size: 1rem; + color: #7f8c8d; + line-height: 1.6; + margin-bottom: 24px; + position: relative; + z-index: 2; +} + +/* 链接按钮 */ +.nav-link { + display: inline-flex; + align-items: center; + gap: 8px; + color: #667eea; + text-decoration: none; + font-weight: 600; + font-size: 1.1rem; + transition: all 0.3s ease; + position: relative; + z-index: 2; +} + +.nav-link:hover { + color: #764ba2; + transform: translateX(5px); +} + +/* 底部信息区域 */ +.navigation-footer { + text-align: center; + padding: 40px 0; + border-top: 1px solid rgba(255, 255, 255, 0.3); + animation: fadeInUp 0.8s ease-out 0.3s both; +} + +.navigation-footer p { + font-size: 1.1rem; + color: #7f8c8d; + margin-bottom: 20px; +} + +.contact-btn { + display: inline-block; + background: #1369a8; + color: white; + border: none; + padding: 12px 30px; + border-radius: 50px; + text-decoration: none; + font-weight: 600; + transition: all 0.3s ease; +} + +/* 动画效果 */ +@keyframes fadeInUp { + from { + opacity: 0; + transform: translateY(30px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +.nav-item { + animation: fadeInUp 0.6s ease-out; +} + +.nav-item:nth-child(1) { animation-delay: 0.1s; } +.nav-item:nth-child(2) { animation-delay: 0.2s; } +.nav-item:nth-child(3) { animation-delay: 0.3s; } +.nav-item:nth-child(4) { animation-delay: 0.4s; } +.nav-item:nth-child(5) { animation-delay: 0.5s; } +.nav-item:nth-child(6) { animation-delay: 0.6s; } +.nav-item:nth-child(7) { animation-delay: 0.7s; } +.nav-item:nth-child(8) { animation-delay: 0.8s; } + +/* 响应式设计 */ +@media (max-width: 768px) { + .navigation-menu-page { + padding: 60px 0 40px; + } + + .page-title { + font-size: 2.5rem; + } + + .page-subtitle { + font-size: 1.1rem; + } + + .navigation-grid { + grid-template-columns: 1fr; + gap: 20px; + margin-bottom: 40px; + } + + .nav-item { + padding: 30px 20px; + } + + .nav-icon { + width: 70px; + height: 70px; + margin-bottom: 20px; + } + + .nav-icon svg { + width: 40px; + height: 40px; + } + + .nav-title { + font-size: 1.3rem; + } + + .nav-description { + font-size: 0.95rem; + } +} + +@media (max-width: 480px) { + .navigation-menu-page .container { + padding: 0 15px; + } + + .page-title { + font-size: 2rem; + } + + .nav-item { + padding: 25px 15px; + } + + .nav-icon { + width: 60px; + height: 60px; + } + + .nav-icon svg { + width: 32px; + height: 32px; + } +} + +/* 深色模式支持 */ +@media (prefers-color-scheme: dark) { + .navigation-menu-page { + background: linear-gradient(135deg, #2c3e50 0%, #34495e 100%); + } + + .page-title { + color: #ecf0f1; + } + + .page-subtitle { + color: #bdc3c7; + } + + .nav-item { + background: rgba(52, 73, 94, 0.8); + border: 1px solid rgba(255, 255, 255, 0.1); + } + + .nav-item:hover { + background: rgba(52, 73, 94, 0.9); + } + + .nav-title { + color: #ecf0f1; + } + + .nav-description { + color: #bdc3c7; + } + + .navigation-footer { + border-top: 1px solid rgba(255, 255, 255, 0.1); + } + + .navigation-footer p { + color: #bdc3c7; + } +} + +/* 打印样式 */ +@media print { + .navigation-menu-page { + background: white; + padding: 20px 0; + } + + .nav-item { + background: white; + box-shadow: none; + border: 1px solid #ddd; + break-inside: avoid; + margin-bottom: 20px; + } + + .nav-icon { + background: #667eea; + } + + .contact-btn { + background: #667eea; + } +} + +/* ======================================== + Block Navigation Menu 区块样式 + ======================================== */ + +/* 区块容器 */ +.navigation-menu-block { + margin: 20px 0; + padding: 0; +} + +.navigation-menu-container { + width: 100%; + max-width: 100%; +} + +/* 导航菜单容器 */ +.navigation-menu-nav { + position: relative; +} + +/* 主菜单列表 */ +.navigation-menu-list { + list-style: none; + margin: 0; + padding: 0; + display: flex; + flex-wrap: wrap; + gap: 40px; + background: transparent; + border-radius: 0; + box-shadow: none; + overflow: visible; + align-items: center; + justify-content: center; +} + +/* 菜单项 */ +.navigation-menu-list li { + position: relative; + margin: 0; + padding: 0; + border: none; +} + +.navigation-menu-list li:last-child { + border-right: none; +} + +/* 菜单链接 */ +.navigation-menu-list a { + display: flex; + align-items: center; + padding: 12px 0; + color: #666666; + text-decoration: none; + font-weight: 400; + font-size: 16px; + transition: all 0.3s ease; + white-space: nowrap; + position: relative; + border-bottom: 2px solid transparent; +} + +.navigation-menu-list a:hover { + background: transparent; + color: #333333; +} + +/* 当前页面菜单项 */ +.navigation-menu-list .active > a, +.navigation-menu-list .current-menu-item > a, +.navigation-menu-list .current-menu-parent > a { + background: transparent; + color: #333333; + border-bottom-color: #007cba; + font-weight: 500; +} + +/* 下拉箭头 */ +.dropdown-arrow { + margin-left: 8px; + font-size: 12px; + transition: transform 0.3s ease; +} + +.dropdown-arrow::before { + content: '▼'; +} + +/* 子菜单 */ +.sub-menu { + position: absolute; + top: 100%; + left: 0; + min-width: 200px; + background: white; + border-radius: 6px; + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15); + opacity: 0; + visibility: hidden; + transform: translateY(-10px); + transition: all 0.3s ease; + z-index: 1000; + list-style: none; + margin: 0; + padding: 8px 0; + border: 1px solid #e9ecef; +} + +/* 显示子菜单 */ +.has-dropdown:hover .sub-menu { + opacity: 1; + visibility: visible; + transform: translateY(0); +} + +.has-dropdown:hover .dropdown-arrow { + transform: rotate(180deg); +} + +/* 子菜单项 */ +.sub-menu li { + border: none; + border-bottom: 1px solid #f1f3f4; +} + +.sub-menu li:last-child { + border-bottom: none; +} + +.sub-menu a { + padding: 12px 20px; + font-size: 13px; + color: #495057; + border-radius: 0; +} + +.sub-menu a:hover { + background: #f8f9fa; + color: #667eea; + padding-left: 25px; +} + +/* 三级菜单 */ +.sub-menu .sub-menu { + top: 0; + left: 100%; + margin-left: 1px; +} + +/* 主题样式变体 */ +.navigation-menu-block.theme-dark .navigation-menu-list { + background: #2c3e50; + box-shadow: 0 2px 10px rgba(0, 0, 0, 0.3); +} + +.navigation-menu-block.theme-dark .navigation-menu-list li { + border-right-color: #34495e; +} + +.navigation-menu-block.theme-dark .navigation-menu-list a { + color: #ecf0f1; +} + +.navigation-menu-block.theme-dark .navigation-menu-list a:hover { + background: #34495e; + color: #3498db; +} + +.navigation-menu-block.theme-dark .sub-menu { + background: #2c3e50; + border-color: #34495e; +} + +.navigation-menu-block.theme-dark .sub-menu a { + color: #bdc3c7; +} + +/* 对齐方式 */ +.navigation-menu-block.align-center .navigation-menu-list { + justify-content: center; +} + +.navigation-menu-block.align-right .navigation-menu-list { + justify-content: flex-end; +} + +/* 边框样式 */ +.navigation-menu-block.has-border { + border-bottom: 2px solid #e9ecef; + padding-bottom: 20px; +} + +/* 无菜单时的提示信息 */ +.navigation-menu-fallback { + padding: 40px 20px; + text-align: center; + background: #f8f9fa; + border-radius: 8px; + border: 2px dashed #dee2e6; +} + +.no-menu-message { + color: #6c757d; + font-size: 16px; + margin: 0 0 15px 0; +} + +.admin-notice { + margin: 0; +} + +.admin-notice a { + color: #667eea; + text-decoration: none; + font-weight: 500; +} + +.admin-notice a:hover { + text-decoration: underline; +} + +/* 响应式设计 */ +@media (max-width: 768px) { + .navigation-menu-block { + padding: 15px; + } + + .navigation-menu-list { + flex-direction: column; + gap: 0; + align-items: flex-start; + } + + .navigation-menu-list li { + border: none; + width: 100%; + border-bottom: 1px solid #e9ecef; + } + + .navigation-menu-list li:last-child { + border-bottom: none; + } + + .navigation-menu-list a { + padding: 15px 0; + font-size: 16px; + width: 100%; + border-bottom: 2px solid transparent; + white-space: normal; /* Allow text wrapping on mobile */ + box-sizing: border-box; /* Ensure padding doesn't increase width */ + overflow-wrap: break-word; /* Break long words if necessary */ + } + + .navigation-menu-list .current-menu-item > a, + .navigation-menu-list .active > a { + border-bottom-color: #007cba; + } + + /* 移动端子菜单 */ + .sub-menu { + position: static; + opacity: 1; + visibility: visible; + transform: none; + box-shadow: none; + border: none; + border-radius: 0; + background: #f8f9fa; + margin-left: 20px; + display: none; + min-width: unset; /* Reset min-width for mobile */ + width: auto; + } + + .has-dropdown:hover .sub-menu { + display: block; + } + + .sub-menu a { + padding: 10px 15px; + font-size: 14px; + box-sizing: border-box; + } + + .dropdown-arrow::before { + content: '▶'; + } + + .has-dropdown:hover .dropdown-arrow::before { + content: '▼'; + } +} + +@media (max-width: 480px) { + .navigation-menu-list a { + padding: 10px 12px; + font-size: 14px; + } + + .sub-menu a { + padding: 8px 12px; + font-size: 13px; + } +} \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/css/products-services.css b/wp-content/themes/nenghui-energy-theme-cn/assets/css/products-services.css new file mode 100644 index 0000000..f1ba03a --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/css/products-services.css @@ -0,0 +1,122 @@ +.products-services-block { + width: 100%; + padding: 40px 20px; + box-sizing: border-box; + margin-top: 1rem; +} + +.products-services-container { + max-width: 57%; + margin: 0 auto; +} + +.products-services-header { + text-align: center; + margin-bottom: 60px; + /* 初始状态:隐藏并向下偏移 */ + opacity: 1; + transform: translateY(30px); +} + +.products-services-subtitle { + font-size: 14px; + color: #999; + letter-spacing: 2px; + margin: 0 0 10px 0; + font-weight: 400; +} + +.products-services-title { + font-size: 36px; + color: #333; + margin: 0; + font-weight: 600; +} + +.products-services-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 0; + align-items: flex-start; +} + +.products-services-item { + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + cursor: pointer; + margin: 20px; + /* 初始状态:隐藏并向下偏移,等待GSAP动画 */ + opacity: 0; + transform: translateY(50px); +} + +.products-services-image { + width: 100%; + max-width: 300px; + height: auto; + display: flex; + justify-content: center; + align-items: center; +} + +.products-services-image img { + width: 100%; + height: auto; + object-fit: contain; +} + +.products-services-item-title { + margin-top: 20px; + font-size: 18px; + color: #333; + font-weight: 500; + margin-bottom: 0; +} + +/* 响应式设计 */ +@media (max-width: 768px) { + .products-services-grid { + grid-template-columns: 1fr; + gap: 0; + } + + .products-services-item { + margin: 15px 0; + } + + .products-services-block { + padding: 20px 15px; + } + + .products-services-image { + max-width: 250px; + } + + .products-services-title { + font-size: 28px; + } + + .products-services-header { + margin-bottom: 40px; + } +} + +@media (max-width: 1024px) and (min-width: 769px) { + .products-services-grid { + gap: 0; + } + + .products-services-item { + margin: 18px; + } + + .products-services-image { + max-width: 280px; + } + + .products-services-title { + font-size: 32px; + } +} \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/css/professional-fields.css b/wp-content/themes/nenghui-energy-theme-cn/assets/css/professional-fields.css new file mode 100644 index 0000000..e69de29 diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/css/scroll-animations.css b/wp-content/themes/nenghui-energy-theme-cn/assets/css/scroll-animations.css new file mode 100644 index 0000000..864b878 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/css/scroll-animations.css @@ -0,0 +1,253 @@ +/** + * 滚动触发动画系统 CSS + * 配合 GSAP ScrollTrigger 使用的动画类 + * 使用方法:为元素添加相应的CSS类名即可 + */ + +/* ===== 基础动画配置 ===== */ +.scroll-animate { + /* 确保动画平滑 */ + will-change: transform, opacity; + /* 硬件加速 */ + transform: translateZ(0); + backface-visibility: hidden; + perspective: 1000px; +} + +/* ===== Fade In Up 动画 ===== */ +.fade-in-up { + opacity: 0; + transform: translateY(50px); + transition: all 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94); +} + +.fade-in-up.animate-active { + opacity: 1; + transform: translateY(0); +} + +/* ===== Fade In Down 动画 ===== */ +.fade-in-down { + opacity: 0; + transform: translateY(-50px); + transition: all 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94); +} + +.fade-in-down.animate-active { + opacity: 1; + transform: translateY(0); +} + +/* ===== Fade In Left 动画 ===== */ +.fade-in-left { + opacity: 0; + transform: translateX(-50px); + transition: all 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94); +} + +.fade-in-left.animate-active { + opacity: 1; + transform: translateX(0); +} + +/* ===== Fade In Right 动画 ===== */ +.fade-in-right { + opacity: 0; + transform: translateX(50px); + transition: all 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94); +} + +.fade-in-right.animate-active { + opacity: 1; + transform: translateX(0); +} + +/* ===== Scale In 动画 ===== */ +.scale-in { + opacity: 0; + transform: scale(0.8); + transition: all 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94); +} + +.scale-in.animate-active { + opacity: 1; + transform: scale(1); +} + +/* ===== Rotate In 动画 ===== */ +.rotate-in { + opacity: 0; + transform: rotate(-10deg) scale(0.9); + transition: all 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94); +} + +.rotate-in.animate-active { + opacity: 1; + transform: rotate(0deg) scale(1); +} + +/* ===== 组合动画 ===== */ +.fade-scale-up { + opacity: 0; + transform: translateY(30px) scale(0.95); + transition: all 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94); +} + +.fade-scale-up.animate-active { + opacity: 1; + transform: translateY(0) scale(1); +} + +/* ===== 动画延迟类 ===== */ +.animate-delay-100 { transition-delay: 0.1s; } +.animate-delay-200 { transition-delay: 0.2s; } +.animate-delay-300 { transition-delay: 0.3s; } +.animate-delay-400 { transition-delay: 0.4s; } +.animate-delay-500 { transition-delay: 0.5s; } +.animate-delay-600 { transition-delay: 0.6s; } +.animate-delay-700 { transition-delay: 0.7s; } +.animate-delay-800 { transition-delay: 0.8s; } + +/* ===== 动画速度类 ===== */ +.animate-fast { + transition-duration: 0.4s !important; +} + +.animate-slow { + transition-duration: 1.2s !important; +} + +.animate-slower { + transition-duration: 1.6s !important; +} + +/* ===== 动画缓动函数类 ===== */ +.animate-ease-out { + transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94) !important; +} + +.animate-ease-in-out { + transition-timing-function: cubic-bezier(0.42, 0, 0.58, 1) !important; +} + +.animate-bounce { + transition-timing-function: cubic-bezier(0.68, -0.55, 0.265, 1.55) !important; +} + +/* ===== 特殊效果 ===== */ +.blur-in { + opacity: 0; + filter: blur(10px); + transform: translateY(20px); + transition: all 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94); +} + +.blur-in.animate-active { + opacity: 1; + filter: blur(0px); + transform: translateY(0); +} + +/* ===== 文字动画 ===== */ +.text-reveal { + opacity: 0; + transform: translateY(100%); + display: inline-block; + transition: all 0.6s cubic-bezier(0.25, 0.46, 0.45, 0.94); +} + +.text-reveal.animate-active { + opacity: 1; + transform: translateY(0); +} + +/* ===== 容器动画(用于包含多个子元素的情况) ===== */ +.stagger-container .stagger-item { + opacity: 0; + transform: translateY(30px); + transition: all 0.6s cubic-bezier(0.25, 0.46, 0.45, 0.94); +} + +.stagger-container.animate-active .stagger-item:nth-child(1) { + transition-delay: 0.1s; +} + +.stagger-container.animate-active .stagger-item:nth-child(2) { + transition-delay: 0.2s; +} + +.stagger-container.animate-active .stagger-item:nth-child(3) { + transition-delay: 0.3s; +} + +.stagger-container.animate-active .stagger-item:nth-child(4) { + transition-delay: 0.4s; +} + +.stagger-container.animate-active .stagger-item:nth-child(5) { + transition-delay: 0.5s; +} + +.stagger-container.animate-active .stagger-item { + opacity: 1; + transform: translateY(0); +} + +/* ===== 响应式优化 ===== */ +@media (max-width: 768px) { + .fade-in-up, + .fade-in-down, + .fade-in-left, + .fade-in-right, + .scale-in, + .rotate-in, + .fade-scale-up, + .blur-in { + /* 移动端减少动画距离 */ + transform: translateY(20px); + transition-duration: 0.6s; + } + + .fade-in-left { + transform: translateX(-20px); + } + + .fade-in-right { + transform: translateX(20px); + } +} + +/* ===== 减少动画偏好设置支持 ===== */ +@media (prefers-reduced-motion: reduce) { + .fade-in-up, + .fade-in-down, + .fade-in-left, + .fade-in-right, + .scale-in, + .rotate-in, + .fade-scale-up, + .blur-in, + .text-reveal, + .stagger-item { + transition-duration: 0.01ms !important; + transition-delay: 0.01ms !important; + } +} + +/* ===== 调试模式 ===== */ +.scroll-animate-debug { + position: relative; +} + +.scroll-animate-debug::before { + content: 'ScrollTrigger Debug'; + position: absolute; + top: -20px; + left: 0; + background: rgba(255, 0, 0, 0.8); + color: white; + padding: 2px 6px; + font-size: 10px; + z-index: 9999; + pointer-events: none; +} \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/css/search-results.css b/wp-content/themes/nenghui-energy-theme-cn/assets/css/search-results.css new file mode 100644 index 0000000..ac67266 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/css/search-results.css @@ -0,0 +1,360 @@ +/** + * 搜索结果页面样式 + * Search Results Page Styles + */ + +/* 搜索结果区域 */ +.search-results-section { + padding: 40px 0; + background: #f8f9fa; + min-height: 60vh; +} + +.search-results-section .container { + max-width: 1300px; + margin: 0 auto; + padding: 0 20px; +} + +.search-results-header { + text-align: center; + margin-bottom: 40px; + padding-bottom: 20px; + border-bottom: 2px solid #e9ecef; +} + +.search-results-header h2 { + font-size: 2rem; + color: #333; + margin-bottom: 10px; + font-weight: 600; +} + +.search-results-header p { + color: #666; + font-size: 1rem; + margin: 0; +} + +/* 文章网格布局 */ +.posts-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(350px, 1fr)); + gap: 30px; + margin-bottom: 40px; +} + +/* 文章卡片样式 */ +.post-card { + background: white; + border-radius: 12px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); + transition: all 0.3s ease; + overflow: hidden; + border: 1px solid #e9ecef; +} + +.post-card:hover { + transform: translateY(-5px); + box-shadow: 0 8px 25px rgba(0, 0, 0, 0.15); + border-color: #126594; +} + +/* 文章缩略图 */ +.post-thumbnail { + position: relative; + height: 400px; + overflow: hidden; +} + +.post-thumbnail a { + display: block; + width: 100%; + height: 100%; +} + +.post-thumbnail img { + width: 100%; + height: 100%; + object-fit: cover; + transition: transform 0.3s ease; +} + +.post-thumbnail:hover img { + transform: scale(1.05); +} + +/* 无图片占位符 */ +.no-image-placeholder { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%); + color: #666; + height: 100%; + width: 100%; + transition: all 0.3s ease; +} + +.post-card:hover .no-image-placeholder { + background: linear-gradient(135deg, #126594 0%, #1e7e34 100%); + color: white; +} + +.no-image-placeholder i { + font-size: 2.5rem; + margin-bottom: 8px; + opacity: 0.7; +} + +.no-image-placeholder span { + font-size: 0.9rem; + font-weight: 500; +} + +/* 文章内容 */ +.post-content { + padding: 20px; +} + +.post-title { + margin: 0 0 15px 0; + font-size: 1.25rem; + line-height: 1.4; + font-weight: 600; +} + +.post-title a { + color: #333; + text-decoration: none; + transition: color 0.3s ease; + display: -webkit-box; + -webkit-line-clamp: 2; + line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; +} + +.post-title a:hover { + color: #126594; +} + +/* 文章元信息 */ +.post-meta { + display: flex; + flex-wrap: wrap; + gap: 15px; + margin-bottom: 15px; + font-size: 0.875rem; + color: #666; +} + +.post-meta span { + display: flex; + align-items: center; + gap: 5px; +} + +.post-meta i { + font-size: 0.8rem; + opacity: 0.8; +} + +.post-category a { + color: #666; + text-decoration: none; + transition: color 0.3s ease; +} + +.post-category a:hover { + color: #126594; +} + +/* 文章摘要 */ +.post-excerpt { + color: #666; + font-size: 0.95rem; + line-height: 1.6; + margin: 0; + display: -webkit-box; + -webkit-line-clamp: 3; + line-clamp: 3; + -webkit-box-orient: vertical; + overflow: hidden; +} + +/* 无结果提示 */ +.no-posts { + text-align: center; + background: white; + padding: 60px 40px; + border-radius: 12px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); + max-width: 600px; + margin: 0 auto; +} + +.no-posts h3 { + color: #333; + font-size: 1.5rem; + margin-bottom: 15px; + font-weight: 600; +} + +.no-posts p { + color: #666; + margin-bottom: 20px; + line-height: 1.6; +} + +.no-posts ul { + text-align: left; + color: #666; + line-height: 1.8; + margin: 0; + padding-left: 20px; +} + +.no-posts li { + margin-bottom: 8px; +} + +/* 分页样式增强 */ +.search-results-section .pagination { + margin-top: 50px; + text-align: center; + padding-top: 30px; + border-top: 1px solid #e9ecef; +} + +.search-results-section .pagination .page-numbers { + display: inline-block; + padding: 10px 15px; + margin: 0 5px; + border-radius: 8px; + background: white; + color: #333; + text-decoration: none; + transition: all 0.3s ease; + border: 1px solid #e9ecef; + font-weight: 500; +} + +.search-results-section .pagination .page-numbers.current { + background: #126594; + color: white; + border-color: #126594; +} + +.search-results-section .pagination .page-numbers:hover:not(.current) { + background: #f8f9fa; + border-color: #126594; + color: #126594; + transform: translateY(-2px); +} + +/* 响应式设计 */ +@media screen and (max-width: 1024px) { + .posts-grid { + grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); + gap: 25px; + } +} + +@media screen and (max-width: 768px) { + .search-results-section { + padding: 30px 0; + } + + .posts-grid { + grid-template-columns: 1fr; + gap: 20px; + } + + .search-results-header h2 { + font-size: 1.5rem; + } + + .post-content { + padding: 15px; + } + + .post-meta { + gap: 10px; + font-size: 0.8rem; + } + + .no-posts { + padding: 40px 20px; + margin: 0 15px; + } + + /* 移动端分页优化:三行布局 */ + .search-results-section .pagination { + display: flex; + flex-wrap: wrap; + justify-content: center; + align-items: center; + gap: 10px; + margin-top: 30px; + padding-top: 20px; + } + + .search-results-section .pagination .page-numbers { + display: inline-flex; + padding: 8px 12px; + margin: 0 2px; + font-size: 14px; + line-height: 1.2; + border: 1px solid #eee; + border-radius: 4px; + background: #fff; + } + + /* 上一页按钮:独占一行,放在最上面 */ + .search-results-section .pagination .prev { + width: 100%; + order: 1; + justify-content: center; + margin-bottom: 5px; + padding: 10px; + background: #fff; + border: 1px solid #ddd; + } + + /* 页码:放在中间 */ + .search-results-section .pagination .page-numbers:not(.prev):not(.next) { + order: 2; + } + + /* 下一页按钮:独占一行,放在最下面 */ + .search-results-section .pagination .next { + width: 100%; + order: 3; + justify-content: center; + margin-top: 5px; + padding: 10px; + background: #fff; + border: 1px solid #ddd; + flex-shrink: 0; + } +} + +@media screen and (max-width: 480px) { + .post-thumbnail { + height: 180px; + } + + .post-title { + font-size: 1.1rem; + } + + .search-results-header { + margin-bottom: 30px; + } + + .search-results-header h2 { + font-size: 1.3rem; + } +} \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/css/search.css b/wp-content/themes/nenghui-energy-theme-cn/assets/css/search.css new file mode 100644 index 0000000..a38252e --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/css/search.css @@ -0,0 +1,738 @@ +/** + * 搜索功能样式文件 + * 包含拟态风格设计和动画效果 + */ + +/* 新闻搜索模块样式 */ +.news-search-section { + position: relative; + background-image: url('../images/search-bg.webp'); + background-size: cover; + background-position: center; + background-repeat: no-repeat; + padding: 80px 0; + height: 400px; + margin: 0; + overflow: hidden; +} + +.news-search-section::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0, 0, 0, 0.4); + z-index: 1; +} + +.news-search-section .search-container { + position: relative; + z-index: 2; + max-width: 1200px; + margin: 0 auto; + padding: 0 20px; + text-align: center; + margin-top: 65px; +} + +.search-header { + margin-bottom: 40px; +} + +.search-title { + color: #ffffff; + font-size: 48px; + font-weight: 600; + margin: 0; + text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3); + letter-spacing: 2px; +} + +.search-form-wrapper { + display: flex; + justify-content: center; + align-items: center; +} + +.news-search-form { + width: 100%; + max-width: 800px; +} + +.search-controls { + display: flex; + align-items: center; + gap: 0; + background: rgba(255, 255, 255, 0.95); + border-radius: 50px; + padding: 8px; + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1); + backdrop-filter: blur(10px); + border: 1px solid rgba(255, 255, 255, 0.2); +} + +/* 分类选择器样式 */ +.category-selector { + position: relative; + flex: 0 0 180px; +} + +.category-dropdown { + width: 100%; + height: 50px; + border: none; + background: transparent; + padding: 0 40px 0 20px; + font-size: 16px; + color: #666; + outline: none; + cursor: pointer; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + border-radius: 25px; + transition: all 0.3s ease; +} + +.category-dropdown:focus { + color: #333; +} + + + +/* 搜索输入框样式 */ +.news-search-form .search-input-wrapper { + position: relative; + flex: 1; + margin: 0 8px; +} + +.news-search-form .search-input { + width: 100%; + height: 50px; + border: none; + background: transparent; + padding: 0 20px; + font-size: 16px; + color: #333; + outline: none; + border-radius: 25px; + transition: all 0.3s ease; +} + +.news-search-form .search-input::placeholder { + color: #999; + font-weight: 400; +} + +.news-search-form .search-input:focus { + background: rgba(255, 255, 255, 0.1); +} + +/* 搜索建议样式 */ +.search-suggestions { + position: absolute; + top: 100%; + left: 0; + right: 0; + background: white; + border-radius: 15px; + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1); + max-height: 300px; + overflow-y: auto; + z-index: 1000; + display: none; + margin-top: 8px; +} + +.search-suggestions.show { + display: block; +} + +.suggestion-item { + padding: 12px 20px; + cursor: pointer; + border-bottom: 1px solid #f0f0f0; + transition: all 0.2s ease; + color: #333; + font-size: 14px; +} + +.suggestion-item:hover, +.suggestion-item.active { + background: #f8f9fa; + color: #007bff; +} + +.suggestion-item:last-child { + border-bottom: none; +} + +/* 搜索按钮样式 */ +.search-button { + flex: 0 0 50px; + height: 50px; + background: linear-gradient(135deg, #007bff, #0056b3); + border: none; + border-radius: 25px; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + transition: all 0.3s ease; + box-shadow: 0 4px 15px rgba(0, 123, 255, 0.3); +} + +.search-button:hover { + background: linear-gradient(135deg, #0056b3, #004085); + transform: translateY(-2px); + box-shadow: 0 6px 20px rgba(0, 123, 255, 0.4); +} + +.search-button:active { + transform: translateY(0); +} + +.search-button svg { + width: 20px; + height: 20px; +} + +/* 响应式设计 */ +@media (max-width: 768px) { + .news-search-section { + padding: 60px 0; + } + + .search-title { + font-size: 32px; + margin-bottom: 30px; + } + + .search-controls { + flex-direction: column; + gap: 12px; + padding: 20px; + border-radius: 25px; + } + + .category-selector, + .news-search-form .search-input-wrapper { + flex: none; + width: 100%; + margin: 0; + } + + .category-dropdown, + .news-search-form .search-input { + height: 48px; + text-align: center; + } + + .search-button { + flex: none; + width: 100%; + height: 48px; + border-radius: 24px; + } +} + +@media (max-width: 480px) { + .news-search-section { + padding: 40px 0; + } + + .news-search-section .search-container { + padding: 0 15px; + } + + .search-title { + font-size: 28px; + letter-spacing: 1px; + } + + .search-controls { + padding: 15px; + } + + .news-search-section .search-container { + padding: 0 !important; + } +} + +@media (min-width: 769px) and (max-width: 1024px) { + .search-title { + font-size: 42px; + } + + .search-controls { + max-width: 700px; + margin: 0 auto; + } + + .category-selector { + flex: 0 0 160px; + } +} + +/* 搜索按钮样式 */ +.nav-search { + position: relative; + display: flex; + align-items: center; + flex-shrink: 0; +} + +.search-toggle { + display: flex; + align-items: center; + justify-content: center; + width: 40px; + height: 40px; + background: rgba(0, 0, 0, 0.05); + border: none; + border-radius: 8px; + cursor: pointer; + margin-left: 15px; + padding: 0; + transition: all 0.3s ease; +} + +.search-toggle:hover { + background: rgba(0, 0, 0, 0.1); + transform: scale(1.05); +} + +.search-icon { + width: 20px; + height: 20px; + stroke: #333; + fill: none; + transition: stroke 0.3s ease; +} + +.search-toggle:hover .search-icon { + stroke: #007bff; +} + +/* 搜索框弹出层 */ +.search-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.5); + backdrop-filter: blur(10px); + z-index: 100000; + display: flex; + align-items: center; + justify-content: center; + opacity: 0; + visibility: hidden; + transition: all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94); +} + +.search-overlay.active { + opacity: 1; + visibility: visible; +} + +/* 搜索容器 */ +.search-container { + position: relative; + width: 100%; + height: 100%; + transform: translateY(-50px) scale(0.9); + transition: all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94); + display: flex; + align-items: center; + justify-content: center; +} + +.search-overlay.active .search-container { + transform: translateY(0) scale(1); +} + +/* 拟态风格搜索框 */ +.search-box { + background: #f0f0f0; + border-radius: 25px; + padding: 40px; + position: relative; + width: 90%; + max-width: 800px; +} + +.search-form { + display: flex; + flex-direction: column; + gap: 20px; +} + +/* 搜索输入区域 */ +.search-input-wrapper { + position: relative; + display: flex; + align-items: center; + background: #f0f0f0; + border-radius: 50px; + padding: 0 20px; + border: 1px solid #ddd; + transition: all 0.3s ease; +} + +.search-input-wrapper:focus-within { + border-color: #0073aa; +} + +.search-input-icon { + color: #999; + margin-right: 15px; + flex-shrink: 0; +} + +.search-input { + flex: 1; + border: none; + background: transparent; + padding: 20px 0; + font-size: 18px; + color: #333; + outline: none; + font-family: inherit; +} + +.search-input::placeholder { + color: #999; + font-weight: 400; +} + +.search-close { + display: flex; + align-items: center; + justify-content: center; + width: 32px; + height: 32px; + border: none; + border-radius: 50%; + background: #e6e6e6; + cursor: pointer; + color: #666; + transition: all 0.3s ease; + margin-left: 10px; +} + +.search-close:hover { + background: #ddd; + color: #333; +} + +.search-close:active { + background: linear-gradient(145deg, #d1d1d1, #e6e6e6); + box-shadow: + inset 2px 2px 4px #bebebe, + inset -2px -2px 4px #ffffff; + transform: scale(0.95); +} + +/* 搜索提交按钮 */ +.search-submit { + align-self: center; + padding: 18px 50px; + border: none; + border-radius: 50px; + background: #007bff; + color: white; + font-size: 18px; + font-weight: 600; + cursor: pointer; + transition: all 0.3s ease; + min-width: 140px; + box-shadow: + 8px 8px 16px #bebebe, + -8px -8px 16px #ffffff; +} + +.search-submit:hover { + background: #0056b3; +} + +.search-submit:active { + background: #004085; +} + +/* 响应式设计 */ +@media (max-width: 768px) { + .nav-search { + position: relative; + z-index: 10001; + } + + .search-toggle { + width: 40px; + height: 40px; + background: rgba(255, 255, 255, 0.1); + border-radius: 8px; + backdrop-filter: blur(10px); + } + + .search-toggle:hover { + background: rgba(255, 255, 255, 0.2); + } + + .search-toggle .search-icon { + stroke: #fff; + } + + .search-toggle:hover .search-icon { + stroke: #007bff; + } + + .search-container { + width: 100%; + height: 100%; + padding: 20px; + } + + .search-box { + padding: 25px; + border-radius: 20px; + width: 100%; + max-width: none; + } + + .search-input-wrapper { + padding: 0 15px; + } + + .search-input { + padding: 15px 0; + font-size: 14px; + } + + .search-submit { + padding: 12px 30px; + font-size: 14px; + } +} + +@media (max-width: 480px) { + .search-box { + padding: 15px; + } + + .search-form { + gap: 15px; + } + + .search-input-wrapper { + padding: 0 12px; + } + + .search-input { + padding: 12px 0; + } + + .search-submit { + padding: 10px 25px; + min-width: 100px; + } +} + +/* 搜索按钮激活状态 */ +.search-toggle.active { + background-color: rgba(255, 255, 255, 0.1); +} + +/* 搜索结果提示 */ +.search-suggestions { + position: absolute; + top: 100%; + left: 0; + right: 0; + background: #f0f0f0; + border-radius: 0 0 20px 20px; + border: 1px solid #ddd; + border-top: none; + max-height: 200px; + overflow-y: auto; + z-index: 10; + opacity: 0; + visibility: hidden; + transform: translateY(-10px); + transition: all 0.3s ease; +} + +.search-suggestions.show { + opacity: 1; + visibility: visible; + transform: translateY(0); +} + +.search-suggestion-item { + padding: 12px 20px; + cursor: pointer; + transition: background-color 0.2s ease; + border-bottom: 1px solid rgba(0, 0, 0, 0.05); +} + +.search-suggestion-item:hover { + background: rgba(0, 123, 255, 0.1); +} + +.search-suggestion-item:last-child { + border-bottom: none; +} + +/* 无障碍访问 */ +@media (prefers-reduced-motion: reduce) { + .search-overlay, + .search-container, + .search-toggle, + .search-close, + .search-submit { + transition: none; + } + + .search-toggle.active { + animation: none; + } +} + +/* 高对比度模式 */ +@media (prefers-contrast: high) { + .search-toggle { + border: 2px solid #000; + } + + .search-box { + border: 2px solid #000; + } + + .search-input-wrapper { + border: 1px solid #666; + } +} + +/* 震动动画效果 */ +@keyframes shake { + 0%, 100% { transform: translateX(0); } + 10%, 30%, 50%, 70%, 90% { transform: translateX(-10px); } + 20%, 40%, 60%, 80% { transform: translateX(10px); } +} + +.search-input.shake { + animation: shake 0.6s ease-in-out; +} + +/* 新闻搜索模块样式 */ +.news-search-section { + background: url('../images/search-bg.webp') center/cover no-repeat; + padding: 80px 0; + position: relative; + overflow: hidden; +} + +.news-search-section::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0, 0, 0, 0.4); + z-index: 1; +} + +.news-search-section .search-container { + position: relative; + z-index: 2; + max-width: 1200px; + margin: 0 auto; + padding: 0 20px; + display: flex; + flex-direction: column; + align-items: center; + gap: 40px; + margin-top: 65px; +} + +/* 搜索标题样式 */ +.search-header { + text-align: center; + margin-bottom: 0; +} + +.search-title { + font-size: 48px; + font-weight: 700; + color: white; + margin: 0; + text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5); + letter-spacing: 2px; +} + +/* 搜索表单包装器 */ +.search-form-wrapper { + width: 100%; + max-width: 800px; + margin: 0; +} + +.news-search-form { + width: 100%; +} + +.news-search-form .search-controls { + display: flex; + align-items: center; + gap: 0; + background: rgba(255, 255, 255, 0.95); + border-radius: 50px; + padding: 8px; + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1); + backdrop-filter: blur(10px); + border: 1px solid rgba(255, 255, 255, 0.2); +} + +/* 响应式设计 */ +@media (max-width: 768px) { + .news-search-section { + padding: 60px 0; + } + + .search-title { + font-size: 32px; + margin-bottom: 30px; + } + + .news-search-form .search-controls { + flex-direction: column; + gap: 12px; + padding: 20px; + border-radius: 25px; + } + + .category-selector, + .news-search-form .search-input-wrapper { + flex: none; + width: 100%; + margin: 0; + } + + .category-dropdown, + .news-search-form .search-input { + height: 48px; + text-align: center; + } + + .search-button { + flex: none; + width: 100%; + height: 48px; + border-radius: 24px; + } +} \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/css/simple-carousel.css b/wp-content/themes/nenghui-energy-theme-cn/assets/css/simple-carousel.css new file mode 100644 index 0000000..8d718d0 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/css/simple-carousel.css @@ -0,0 +1,251 @@ +/** + * Simple Carousel CSS - Swiper替代方案样式 + * 轻量级轮播插件样式 + */ + +/* 轮播容器基础样式 */ +.simple-carousel { + position: relative; + width: 100%; + overflow: hidden; + background: #fff; + border-radius: 15px; + box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1); +} + +/* 轮播包装器 */ +.carousel-wrapper { + position: relative; + width: 100%; + height: 100%; + overflow: hidden; + display: flex; + transition: transform 0.5s ease; +} + +/* 幻灯片样式 */ +.carousel-slide { + width: 100%; + height: 100%; + display: flex; + align-items: center; + padding: 40px; + gap: 40px; + flex-shrink: 0; + transition: all 0.3s ease; +} + +/* 导航按钮样式 */ +.carousel-button-next, +.carousel-button-prev { + position: absolute; + top: 50%; + transform: translateY(-50%); + width: 44px; + height: 44px; + background: rgba(255, 255, 255, 0.9); + border: none; + border-radius: 50%; + color: #007bff; + font-size: 18px; + cursor: pointer; + z-index: 10; + display: flex; + align-items: center; + justify-content: center; + box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); + transition: all 0.3s ease; +} + +.carousel-button-next:hover, +.carousel-button-prev:hover { + background: #007bff; + color: white; + transform: translateY(-50%) scale(1.1); +} + +.carousel-button-next { + right: 20px; +} + +.carousel-button-prev { + left: 20px; +} + +.carousel-button-next::after { + content: '›'; + font-weight: bold; +} + +.carousel-button-prev::after { + content: '‹'; + font-weight: bold; +} + +/* 分页器样式 */ +.carousel-pagination { + position: absolute; + bottom: 20px; + left: 50%; + transform: translateX(-50%); + display: flex; + gap: 8px; + z-index: 10; +} + +.carousel-pagination-bullet { + width: 12px; + height: 12px; + border-radius: 50%; + background: rgba(255, 255, 255, 0.5); + cursor: pointer; + transition: all 0.3s ease; + border: 2px solid transparent; +} + +.carousel-pagination-bullet:hover { + background: rgba(255, 255, 255, 0.8); + transform: scale(1.2); +} + +.carousel-pagination-bullet.active { + background: #007bff; + border-color: rgba(255, 255, 255, 0.8); + transform: scale(1.3); +} + +/* 图片区域样式 */ +.slide-image { + flex: 1; + max-width: 45%; +} + +.slide-image img { + width: 100%; + height: 300px; + object-fit: cover; + border-radius: 10px; + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1); +} + +/* 文字区域样式 */ +.slide-content { + flex: 1; + max-width: 55%; + padding-left: 20px; +} + +.slide-title { + font-size: 28px; + font-weight: bold; + color: #333; + margin-bottom: 20px; + border-left: 4px solid #007bff; + padding-left: 15px; +} + +.slide-description { + font-size: 16px; + line-height: 1.8; + color: #666; + text-align: justify; +} + +/* 响应式设计 */ +@media (max-width: 768px) { + .carousel-slide { + flex-direction: column; + padding: 20px; + gap: 20px; + } + + .slide-image, + .slide-content { + max-width: 100%; + } + + .slide-content { + padding-left: 0; + } + + .carousel-wrapper { + height: 400px; + } + + .slide-title { + font-size: 24px; + } + + .slide-description { + font-size: 14px; + } + + .carousel-button-next, + .carousel-button-prev { + width: 36px; + height: 36px; + font-size: 16px; + } + + .carousel-button-next { + right: 10px; + } + + .carousel-button-prev { + left: 10px; + } + + .carousel-pagination { + bottom: 10px; + } + + .carousel-pagination-bullet { + width: 10px; + height: 10px; + } +} + +/* 禁用选择和拖拽 */ +.simple-carousel * { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-user-drag: none; + -webkit-user-drag: none; + -khtml-user-drag: none; + -moz-user-drag: none; + -o-user-drag: none; +} + +/* 触摸优化 */ +.carousel-wrapper { + touch-action: pan-y pinch-zoom; + -webkit-overflow-scrolling: touch; +} + +/* 加载状态 */ +.simple-carousel.loading { + opacity: 0.7; + pointer-events: none; +} + +.simple-carousel.loading::after { + content: ''; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 40px; + height: 40px; + border: 3px solid #f3f3f3; + border-top: 3px solid #007bff; + border-radius: 50%; + animation: spin 1s linear infinite; + z-index: 100; +} + +@keyframes spin { + 0% { transform: translate(-50%, -50%) rotate(0deg); } + 100% { transform: translate(-50%, -50%) rotate(360deg); } +} \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/css/single-sidebar.css b/wp-content/themes/nenghui-energy-theme-cn/assets/css/single-sidebar.css new file mode 100644 index 0000000..8b3610f --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/css/single-sidebar.css @@ -0,0 +1,554 @@ +/** + * 单页文章侧边栏样式 + * Single Page Article Sidebar Styles + */ + +/* 重置和基础样式 */ +.single-page-container, +.single-page-container * { + box-sizing: border-box; +} + +/* 确保不受全局样式影响 */ +.single-page-container { + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; +} + +.single-page-container a { + color: inherit; + text-decoration: none; +} + +.single-page-container img { + max-width: 100%; + height: auto; + display: block; +} + +/* 主容器布局 */ +.single-page-container { + display: flex; + max-width: 1400px; + margin: 0 auto; + gap: 40px; + padding: 20px; + min-height: calc(100vh - 200px); + position: relative; + z-index: 1; + background: transparent; + align-items: flex-start; +} + +/* 左侧侧边栏 */ +.sidebar-left { + width: 20%; + flex-shrink: 0; + border-radius: 12px; + padding: 24px; + height: fit-content; + position: sticky; + top: 20px; + min-width: 280px; +} + +/* 侧边栏头部 */ +.sidebar-header { + margin-bottom: 24px; + padding-bottom: 16px; + border-bottom: 1px solid #e5e7eb; +} + +.sidebar-left .back-link { + display: inline-flex; + align-items: center; + gap: 8px; + color: #6b7280 !important; + text-decoration: none !important; + font-size: 14px; + font-weight: 500 !important; + transition: color 0.3s ease; +} + +.sidebar-left .back-link:hover { + color: #3b82f6 !important; + font-weight: 500 !important; +} + +.back-link svg { + transition: transform 0.3s ease; +} + +.back-link:hover svg { + transform: translateX(-2px); +} + +/* 文章列表容器 */ +.recent-articles { + display: flex; + flex-direction: column; + gap: 6px; + width: 100%; + overflow: hidden; +} + +/* 文章项目 */ +.sidebar-left .article-item { + display: block; + padding: 8px; + border-radius: 6px; + transition: all 0.3s ease; + cursor: pointer; + border: 1px solid transparent; + width: 100%; + box-sizing: border-box; +} + +.sidebar-left .article-item:hover { + background: #f8fafc; + border-color: #e2e8f0; + transform: translateY(-1px); + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06); +} + +/* 文章内容 */ +.sidebar-left .article-content { + width: 100%; + display: flex; + flex-direction: column; + gap: 3px; +} + +.sidebar-left .article-title { + margin: 0; + font-size: 14px; + font-weight: 500; + line-height: 1.4; + color: #333; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; + text-overflow: ellipsis; + word-break: break-word; +} + +.sidebar-left .article-title a { + color: inherit !important; + text-decoration: none !important; + transition: color 0.3s ease; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; + font-weight: inherit !important; +} + +.sidebar-left .article-title a:hover { + color: #3b82f6 !important; + font-weight: 600 !important; +} + +.sidebar-left .article-date { + margin: 0; + font-size: 12px; + color: #666; + font-weight: 400; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +/* 右侧主要内容区域 */ +.main-content { + width: 80%; + flex: 0 0 80%; + min-width: 0; +} + +.main-content .article-c { + background: #ffffff; + border-radius: 12px; + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); + padding: 40px; + width: 100%; + box-sizing: border-box; +} + +.main-content .article-content { + padding: 70px; + width: 100%; + box-sizing: border-box; +} + +/* 文章头部 */ +.article-header { + margin-bottom: 30px; + padding-bottom: 20px; + border-bottom: 1px solid #e5e7eb; +} + +.article-header .article-title { + margin: 0 0 15px 0; + font-size: 28px; + font-weight: 700; + line-height: 1.3; + color: #1f2937; +} + +.article-meta { + display: flex; + align-items: center; + gap: 20px; + flex-wrap: wrap; +} + +.article-meta .article-time { + margin: 0; + font-size: 14px; + color: #6b7280; + font-weight: 400; +} + +.article-categories { + font-size: 14px; + color: #6b7280; +} + +.article-categories a { + color: #3b82f6; + text-decoration: none; + transition: color 0.2s ease; +} + +.article-categories a:hover { + color: #1d4ed8; +} + +/* 文章主体内容 */ +.article-body { + line-height: 1.8; + color: #374151; +} + +/* 文章底部 */ +.article-footer { + margin-top: 40px; + padding-top: 20px; + border-top: 1px solid #e5e7eb; +} + +.article-tags { + font-size: 14px; + color: #6b7280; +} + +.tags-label { + font-weight: 500; + margin-right: 8px; +} + +.article-tags a { + color: #3b82f6; + text-decoration: none; + transition: color 0.2s ease; +} + +.article-tags a:hover { + color: #1d4ed8; +} + +/* 无障碍访问 */ +.screen-reader-text { + position: absolute !important; + width: 1px !important; + height: 1px !important; + padding: 0 !important; + margin: -1px !important; + overflow: hidden !important; + clip: rect(0, 0, 0, 0) !important; + white-space: nowrap !important; + border: 0 !important; +} + +/* 无文章提示 */ +.no-articles { + text-align: center; + color: #6b7280; + font-style: italic; + padding: 20px; +} + +/* 响应式设计 */ +@media (max-width: 1200px) { + .single-page-container { + gap: 30px; + padding: 15px; + } + + .sidebar-left { + width: 25%; + min-width: 260px; + top: auto; + } + + .sidebar-left .article-image { + width: 50px; + height: 38px; + } + + .sidebar-left .article-content { + min-height: 38px; + } + + .sidebar-left .article-title { + font-size: 12px; + line-height: 1.2; + } + + .sidebar-left .article-date { + font-size: 10px; + } + + .main-content { + width: 75%; + flex: 0 0 75%; + } + + .main-content .article-c { + padding: 30px; + } +} + +@media (max-width: 991.98px) { + .single-page-container { + flex-direction: column; + gap: 20px; + padding: 15px; + min-height: auto; + } + + .sidebar-left { + width: 100%; + position: static; + order: 2; + margin-top: 20px; + top: auto; + } + + .main-content { + order: 1; + width: 100%; + } + + .main-content .article-content { + width: 100%; + padding: 25px; + } + + .article-header .article-title { + font-size: 24px; + } + + .article-meta { + gap: 15px; + } + + .recent-articles { + gap: 8px; + } + + .sidebar-left .article-item { + gap: 6px; + padding: 6px; + } + + .sidebar-left .article-image { + width: 45px; + height: 34px; + } + + .sidebar-left .article-content { + min-height: 34px; + } + + .sidebar-left .article-title { + font-size: 11px; + line-height: 1.2; + -webkit-line-clamp: 1; + } + + .sidebar-left .article-date { + font-size: 9px; + } + + .recent-articles { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); + gap: 12px; + } + + .sidebar-left .article-item { + flex-direction: column; + text-align: center; + } + + .sidebar-left .article-image { + width: 100%; + height: 120px; + margin-bottom: 8px; + } + + .sidebar-left .article-content { + min-height: auto; + } +} + +@media (max-width: 576px) { + .single-page-container { + padding: 15px; + min-height: auto; + } + + .sidebar-left { + width: 100%; + position: static; + margin-bottom: 20px; + padding: 15px; + } + + .main-content { + width: 100%; + padding: 20px; + } + + .main-content .article-content { + width: 100%; + padding: 20px; + } + + .article-header { + margin-bottom: 20px; + padding-bottom: 15px; + } + + .article-header .article-title { + font-size: 20px; + line-height: 1.4; + } + + .article-meta { + flex-direction: column; + align-items: flex-start; + gap: 10px; + } + + .article-footer { + margin-top: 30px; + padding-top: 15px; + } + + .recent-articles { + grid-template-columns: 1fr; + } + + .sidebar-left .article-title { + font-size: 13px; + } +} + +/* 加载动画 */ +.sidebar-left .article-item { + opacity: 0; + transform: translateY(10px); + animation: fadeInUp 0.5s ease forwards; +} + +.sidebar-left .article-item:nth-child(1) { animation-delay: 0.1s; } +.sidebar-left .article-item:nth-child(2) { animation-delay: 0.2s; } +.sidebar-left .article-item:nth-child(3) { animation-delay: 0.3s; } +.sidebar-left .article-item:nth-child(4) { animation-delay: 0.4s; } +.sidebar-left .article-item:nth-child(5) { animation-delay: 0.5s; } +.sidebar-left .article-item:nth-child(6) { animation-delay: 0.6s; } + +@keyframes fadeInUp { + to { + opacity: 1; + transform: translateY(0); + } +} + +/* 滚动条样式 */ +.sidebar-left::-webkit-scrollbar { + width: 4px; +} + +.sidebar-left::-webkit-scrollbar-track { + background: #f1f5f9; + border-radius: 2px; +} + +.sidebar-left::-webkit-scrollbar-thumb { + background: #cbd5e1; + border-radius: 2px; +} + +.sidebar-left::-webkit-scrollbar-thumb:hover { + background: #94a3b8; +} + +/* 搜索功能兼容性 */ +.single-page-container { + isolation: isolate; +} + +/* 确保不与搜索模块冲突 */ +.news-search-section + .single-page-container, +.search-results + .single-page-container { + margin-top: 30px; + clear: both; + background: #fff; +} + +/* 搜索模块后的容器样式重置 */ +.news-search-section + .single-page-container { + position: relative; + z-index: auto; +} + +/* 防止与其他模块的样式冲突 */ +.single-page-container .article-item { + position: relative; + z-index: auto; +} + +.single-page-container .article-item:hover { + z-index: 1; +} + +/* 确保容器不会溢出 */ +.single-page-container { + overflow-x: hidden; +} + +/* 修复可能的浮动问题 */ +.single-page-container::after { + content: ""; + display: table; + clear: both; +} + +/* 确保主内容区域的标题样式 */ +.main-content .article-c h1 { + margin-top: 0; + margin-bottom: 20px; + font-size: 28px; + font-weight: 700; + line-height: 1.3; + color: #1f2937; +} + +.main-content .article-c .article-time { + margin-bottom: 30px; + color: #6b7280; + font-size: 14px; +} \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/css/smooth-scroll.css b/wp-content/themes/nenghui-energy-theme-cn/assets/css/smooth-scroll.css new file mode 100644 index 0000000..b2caf68 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/css/smooth-scroll.css @@ -0,0 +1,173 @@ +/** + * Smooth Scroll Styles + * 平滑滚动相关样式 + * + * @package Nenghui Energy Theme + * @since 1.0.0 + */ + +/* 回到顶部按钮样式 */ +.back-to-top { + position: fixed; + bottom: 30px; + right: 30px; + width: 50px; + height: 50px; + background: linear-gradient(135deg, #0066cc, #004499); + color: white; + border: none; + border-radius: 50%; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + font-size: 18px; + box-shadow: 0 4px 12px rgba(0, 102, 204, 0.3); + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + opacity: 0; + visibility: hidden; + transform: translateY(20px); + z-index: 1000; + text-decoration: none; +} + +.back-to-top:hover { + background: linear-gradient(135deg, #004499, #0066cc); + transform: translateY(-2px); + box-shadow: 0 6px 20px rgba(0, 102, 204, 0.4); + color: white; + text-decoration: none; +} + +.back-to-top:active { + transform: translateY(0); + box-shadow: 0 2px 8px rgba(0, 102, 204, 0.3); +} + +.back-to-top.visible { + opacity: 1; + visibility: visible; + transform: translateY(0); +} + +.back-to-top svg { + width: 20px; + height: 20px; +} + +/* 平滑滚动优化 */ +html { + scroll-behavior: smooth; +} + +/* 为支持平滑滚动的浏览器提供更好的体验 */ +@media (prefers-reduced-motion: no-preference) { + html { + scroll-behavior: smooth; + } + + /* 优化滚动性能 */ + * { + scroll-behavior: inherit; + } +} + +/* 为偏好减少动画的用户禁用平滑滚动 */ +@media (prefers-reduced-motion: reduce) { + html { + scroll-behavior: auto; + } + + .back-to-top { + transition: none; + } +} + +/* 移动端适配 */ +@media (max-width: 768px) { + .back-to-top { + bottom: 20px; + right: 20px; + width: 45px; + height: 45px; + font-size: 16px; + } + + .back-to-top i { + font-size: 14px; + } +} + +/* 小屏幕设备 */ +@media (max-width: 480px) { + .back-to-top { + bottom: 15px; + right: 15px; + width: 40px; + height: 40px; + font-size: 14px; + } + + .back-to-top i { + font-size: 12px; + } +} + +/* 滚动条样式优化 */ +::-webkit-scrollbar { + width: 8px; +} + +::-webkit-scrollbar-track { + background: #f1f1f1; + border-radius: 4px; +} + +::-webkit-scrollbar-thumb { + background: linear-gradient(135deg, #0066cc, #004499); + border-radius: 4px; + transition: background 0.3s ease; +} + +::-webkit-scrollbar-thumb:hover { + background: linear-gradient(135deg, #004499, #0066cc); +} + +/* Firefox滚动条样式 */ +* { + scrollbar-width: thin; + scrollbar-color: #0066cc #f1f1f1; +} + +/* 页面滚动时的视觉反馈 */ +.scroll-indicator { + position: fixed; + top: 0; + left: 0; + width: 0; + height: 3px; + background: linear-gradient(90deg, #0066cc, #004499); + z-index: 9999; + transition: width 0.1s ease; +} + +/* 锚点链接悬停效果 */ +a[href^="#"]:hover { + transition: color 0.3s ease; +} + +/* 平滑滚动时的页面优化 */ +body.smooth-scrolling { + overflow-x: hidden; +} + +/* 确保所有可滚动元素都有平滑滚动 */ +.scrollable { + scroll-behavior: smooth; +} + +/* 滚动容器优化 */ +.scroll-container { + scroll-behavior: smooth; + -webkit-overflow-scrolling: touch; +} \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/css/social-activities.css b/wp-content/themes/nenghui-energy-theme-cn/assets/css/social-activities.css new file mode 100644 index 0000000..ff2f666 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/css/social-activities.css @@ -0,0 +1,328 @@ +/** + * Social Activities Grid Styles + * 社会活动网格区块样式文件 + * + * @package Nenghui Energy Theme + * @since 1.0.0 + */ + +/* 社会活动容器 */ +.social-activities-container { + max-width: 1200px; + margin: 0 auto; + padding: 60px 20px; + background: #ffffff; +} + +/* 标题样式 */ +.social-activities-header { + text-align: center; + margin-bottom: 50px; +} + +.social-activities-header h2 { + font-size: 36px; + font-weight: 700; + color: #333; + margin: 0; + position: relative; + display: inline-block; +} + +.social-activities-header h2::after { + content: ''; + position: absolute; + bottom: -10px; + left: 50%; + transform: translateX(-50%); + width: 60px; + height: 3px; + background: linear-gradient(90deg, #007bff, #0056b3); + border-radius: 2px; +} + +/* 网格容器样式 */ +.social-activities-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 30px; + margin-bottom: 40px; +} + +/* 查看更多按钮容器 */ +.social-activities-footer { + text-align: center; + margin-top: 40px; +} + +.view-more-btn { + display: inline-flex; + align-items: center; + padding: 12px 30px; + background: #0a6192; + color: #fff; + text-decoration: none; + border-radius: 25px; + font-size: 16px; + font-weight: 500; + transition: all 0.3s ease; + border: none; + cursor: pointer; + gap: 8px; +} + +.view-more-btn:hover { + background: #0a6192; + color: #fff; + transform: translateY(-2px); + text-decoration: none; + box-shadow: 0 4px 15px rgba(0, 123, 255, 0.3); +} + +/* 文章卡片样式 */ +.social-activity-card { + background: #fff; + border-radius: 12px; + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); + overflow: hidden; + transition: all 0.3s ease; + border: 1px solid #e0e0e0; + display: flex; + flex-direction: column; + height: 100%; + min-height: 400px; +} + +.social-activity-card:hover { + transform: translateY(-4px); + box-shadow: 0 8px 20px rgba(0, 0, 0, 0.15); +} + +/* 图片容器 */ +.activity-image { + position: relative; + height: 200px; + overflow: hidden; + background: #f8f9fa; +} + +.activity-image img { + width: 100%; + height: 100%; + object-fit: cover; + transition: transform 0.3s ease; +} + +.social-activity-card:hover .activity-image img { + transform: scale(1.05); +} + +/* 无图片占位符 */ +.placeholder-image { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 100%; + background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%); + color: #6c757d; + border: none; +} + +.placeholder-image span { + font-size: 0.9rem; + font-weight: 500; +} + +/* 卡片内容 */ +.activity-content { + padding: 20px; + display: flex; + flex-direction: column; + flex: 1; + justify-content: space-between; +} + +.activity-title { + font-size: 16px; + font-weight: 600; + color: #333; + margin: 0 0 12px 0; + line-height: 1.5; + min-height: 48px; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; + flex-shrink: 0; +} + +.activity-title a { + color: #333; + text-decoration: none; + transition: color 0.3s ease; +} + +.activity-title a:hover { + color: #007bff; +} + +/* 文章摘要 */ +.activity-excerpt { + font-size: 14px; + color: #666; + line-height: 1.6; + margin-bottom: 16px; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; + overflow: hidden; + flex: 1; +} + +/* 元信息 */ +.activity-meta { + display: flex; + justify-content: space-between; + align-items: center; + margin-top: auto; + flex-shrink: 0; +} + +.activity-date { + font-size: 14px; + color: #6c757d; +} + +.activity-link { + display: inline-flex; + align-items: center; + padding: 6px 12px; + background: #0a6192; + color: #fff; + text-decoration: none; + border-radius: 15px; + font-size: 12px; + font-weight: 500; + transition: all 0.3s ease; +} + +.activity-link:hover { + background: #0a6192; + color: #fff; + transform: translateY(-1px); + text-decoration: none; + box-shadow: 0 2px 8px rgba(0, 188, 212, 0.3); +} + + + +/* 无文章提示 */ +.no-posts-message { + text-align: center; + padding: 60px 20px; + color: #6c757d; + font-size: 16px; + background: #fff; + border-radius: 12px; + box-shadow: 0 4px 15px rgba(0, 0, 0, 0.05); +} + +/* 响应式设计 */ +@media (max-width: 1024px) { + .social-activities-grid { + grid-template-columns: repeat(3, 1fr); + gap: 25px; + } +} + +@media (max-width: 768px) { + .social-activities-container { + padding: 40px 15px; + } + + .social-activities-grid { + grid-template-columns: repeat(2, 1fr); + gap: 20px; + } + + .social-activities-header h2 { + font-size: 28px; + } + + .activity-content { + padding: 20px; + } + + .activity-title { + font-size: 16px; + min-height: auto; + } + + .activity-image { + height: 180px; + } + + .view-more-btn { + padding: 10px 25px; + font-size: 15px; + } +} + +@media (max-width: 480px) { + .social-activities-header h2 { + font-size: 24px; + } + + .social-activities-grid { + grid-template-columns: 1fr; + gap: 15px; + } + + .activity-content { + padding: 15px; + } + + .activity-link { + padding: 6px 12px; + font-size: 12px; + } + + .activity-image { + height: 160px; + } + + .view-more-btn { + padding: 8px 20px; + font-size: 14px; + } + + .panel-content { + height: 84%; + } +} + +/* 动画效果 */ +@keyframes fadeInUp { + from { + opacity: 0; + transform: translateY(30px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +.social-activities-container { + animation: fadeInUp 0.6s ease-out; +} + +.social-activity-card { + animation: fadeInUp 0.6s ease-out; + animation-fill-mode: both; +} + +.social-activity-card:nth-child(1) { animation-delay: 0.1s; } +.social-activity-card:nth-child(2) { animation-delay: 0.2s; } +.social-activity-card:nth-child(3) { animation-delay: 0.3s; } \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/css/solution.css b/wp-content/themes/nenghui-energy-theme-cn/assets/css/solution.css new file mode 100644 index 0000000..1634985 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/css/solution.css @@ -0,0 +1,279 @@ +/* Solution Block Styles */ +.solution-block { + padding: 80px 0; + overflow: hidden; +} + +.solution-container { + max-width: 1200px; + margin: 0 auto; + padding: 0 20px; +} + +.solution-header { + text-align: center; + margin-bottom: 60px; + opacity: 0; + transform: translateY(30px); +} + +/* 当JavaScript不可用时显示元素 */ +.no-js .solution-header, +body:not(.js-loaded) .solution-header { + opacity: 1 !important; + transform: translateY(0) !important; +} + +.solution-subtitle { + display: block; + font-size: 14px; + color: #666; + margin-bottom: 10px; +} + +.solution-title { + font-size: 48px; + font-weight: 700; + color: #333; + margin: 0; + line-height: 1.2; +} + +.solution-panels { + display: flex; + height: 500px; + border-radius: 20px; + overflow: hidden; + box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1); + opacity: 0; + transform: translateY(50px); + gap: 10px; +} + +/* 当JavaScript不可用时显示元素 */ +.no-js .solution-panels, +body:not(.js-loaded) .solution-panels { + opacity: 1 !important; + transform: translateY(0) !important; +} + +.solution-panel { + position: relative; + flex: 1; + cursor: pointer; + overflow: hidden; + border-radius: 15px; + /* 移除CSS的transition,让JavaScript完全控制动画 */ +} + +/* 移除CSS的hover效果,让JavaScript完全控制 */ + +.panel-background { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 1; + background-color: #f8f9fa; + background-size: cover; + background-position: center; + background-repeat: no-repeat; +} + + + +.panel-content { + position: relative; + width: 100%; + height: 100%; + z-index: 2; + display: flex; + align-items: flex-end; + justify-content: flex-start; + padding: 20px; +} + +.panel-content::before { + content: ''; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: linear-gradient(to top, rgba(0, 0, 0, 0.7) 0%, rgba(0, 0, 0, 0.3) 50%, rgba(0, 0, 0, 0) 100%); + transition: background 0.6s ease; + z-index: 1; +} + +.solution-panel:hover .panel-content::before { + background: linear-gradient(to top, rgba(0, 0, 0, 0.6) 0%, rgba(0, 0, 0, 0.2) 50%, rgba(0, 0, 0, 0) 100%); +} + +.panel-text { + position: relative; + z-index: 2; + color: white; + transform: translateY(20px); + transition: transform 0.6s ease; +} + +.panel-title { + font-size: 32px; + font-weight: 700; + line-height: 1.2; + margin: 0 0 10px 0; + opacity: 1; + transition: all 0.6s ease; +} + +.panel-description { + font-size: 16px; + line-height: 1.4; + margin: 0; + opacity: 0; + transform: translateY(20px); + transition: all 0.6s ease; + max-width: 300px; +} + +/* 悬停效果由媒体查询控制 */ + +/* 响应式设计 */ +@media (max-width: 1024px) { + .solution-block { + padding: 60px 0; + } + + .solution-title { + font-size: 40px; + } + + .solution-panels { + height: 400px; + } + + .panel-content { + padding: 30px; + } + + .panel-title { + font-size: 28px; + } + + .panel-description { + font-size: 14px; + } +} + +@media (max-width: 768px) { + .solution-block { + padding: 40px 0; + } + + .solution-container { + padding: 0 15px; + } + + .solution-header { + margin-bottom: 40px; + } + + .solution-title { + font-size: 32px; + } + + .solution-panels { + flex-direction: column; + height: auto; + border-radius: 15px; + } + + .solution-panel { + height: 300px; + flex: none !important; + } + + .solution-panel:hover { + flex: none !important; + } + + .solution-panel:not(:hover) { + flex: none !important; + } + + .panel-content { + padding: 25px; + } + + .panel-title { + font-size: 24px; + } + + .panel-description { + opacity: 0; + transform: translateY(20px); + max-width: none; + font-size: 14px; + } + + .panel-text { + transform: translateY(0); + } + + /* 移动端文字默认显示在正确位置 */ +} + +/* 移动端强制显示内容,避免动画导致空白 */ +@media (max-width: 768px) { + .solution-header, + .solution-panels, + .solution-panel, + .panel-content::before, + .panel-text, + .panel-title { + opacity: 1 !important; + transform: none !important; + visibility: visible !important; + } +} + + +/* 桌面端悬停效果 */ +@media (min-width: 769px) { + .solution-panel:hover .panel-text { + transform: translateY(0); + } + + .solution-panel:hover .panel-description { + opacity: 1; + transform: translateY(0); + } +} + +@media (max-width: 480px) { + .solution-title { + font-size: 28px; + } + + .solution-panels { + border-radius: 10px; + } + + .solution-panel { + height: 250px; + } + + .panel-content { + padding: 20px; + } + + .panel-title { + font-size: 20px; + margin-bottom: 10px; + } + + .panel-description { + font-size: 13px; + } +} \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/css/stock-info.css b/wp-content/themes/nenghui-energy-theme-cn/assets/css/stock-info.css new file mode 100644 index 0000000..2d1962f --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/css/stock-info.css @@ -0,0 +1,453 @@ +/** + * 股票信息区块样式 + * 参考图片的深蓝色背景和布局设计 + */ + +/* 基础容器样式 */ +.stock-info-block { + width: 100%; + max-width: 1200px; + margin: 20px auto; + background: linear-gradient(135deg, #2c3e50 0%, #34495e 100%); + border-radius: 12px; + padding: 30px; + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1); + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; + color: #ffffff; + position: relative; + overflow: hidden; +} + +.stock-info-block::before { + content: ''; + position: absolute; + top: -70px; + left: 0; + right: 0; + bottom: 0; + background: url("https://cn.nenghui.com/wp-content/uploads/2025/09/20250930191918_2846_68.jpg"); + pointer-events: none; +} + +.stock-info-container { + position: relative; + z-index: 1; +} + +/* 股票头部信息 */ +.stock-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 25px; + padding-bottom: 15px; + border-bottom: 1px solid rgba(255, 255, 255, 0.2); +} + +.stock-basic-info { + display: flex; + align-items: center; + gap: 10px; +} + +.stock-label { + font-size: 14px; + color: rgba(255, 255, 255, 0.8); + font-weight: 400; +} + +.stock-code { + font-size: 18px; + font-weight: 600; + color: #ffffff; + background: rgba(255, 255, 255, 0.1); + padding: 4px 12px; + border-radius: 6px; + letter-spacing: 1px; +} + +.update-time { + display: flex; + align-items: center; + gap: 8px; + font-size: 13px; + color: rgba(255, 255, 255, 0.7); +} + +.update-label { + font-weight: 400; +} + +.update-timestamp { + font-weight: 500; + color: #ffffff; +} + +/* 主要数据区域 - 三列布局 */ +.stock-main-data { + display: grid; + grid-template-columns: 1fr 1fr 1fr; + gap: 40px; + margin-bottom: 30px; +} + +/* 股价区域 */ +.stock-price-section { + text-align: left; +} + +.current-price { + margin-bottom: 10px; +} + +.price-value { + display: block; + font-size: 48px; + font-weight: 700; + color: #ffffff; + line-height: 1.1; + margin-bottom: 8px; + letter-spacing: -1px; +} + +.price-change { + display: flex; + align-items: center; + gap: 12px; + flex-wrap: wrap; +} + +.change-value { + font-size: 16px; + font-weight: 600; + padding: 4px 8px; + border-radius: 4px; + background: rgba(255, 255, 255, 0.1); +} + +.change-percent { + font-size: 16px; + font-weight: 600; + padding: 4px 8px; + border-radius: 4px; + background: rgba(255, 255, 255, 0.1); +} + +/* 涨跌颜色 */ +.price-up .change-value, +.price-up .change-percent { + color: #e74c3c; + background: rgba(231, 76, 60, 0.15); +} + +.price-down .change-value, +.price-down .change-percent { + color: #27ae60; + background: rgba(39, 174, 96, 0.15); +} + +.price-neutral .change-value, +.price-neutral .change-percent { + color: #95a5a6; + background: rgba(149, 165, 166, 0.15); +} + +/* 成交量区域 */ +.stock-volume-section { + text-align: center; +} + +.volume-data { + display: flex; + flex-direction: column; + align-items: center; + gap: 8px; +} + +.volume-value { + font-size: 48px; + font-weight: 700; + color: #ffffff; + line-height: 1.1; + letter-spacing: -1px; +} + +.volume-label { + font-size: 14px; + color: rgba(255, 255, 255, 0.8); + font-weight: 500; +} + +/* 成交额区域 */ +.stock-amount-section { + text-align: right; +} + +.amount-data { + display: flex; + flex-direction: column; + align-items: flex-end; + gap: 8px; +} + +.amount-value { + font-size: 48px; + font-weight: 700; + color: #ffffff; + line-height: 1.1; + letter-spacing: -1px; +} + +.amount-label { + font-size: 14px; + color: rgba(255, 255, 255, 0.8); + font-weight: 500; +} + +/* 详细数据区域 */ +.stock-details { + margin-top: 20px; + padding-top: 20px; + border-top: 1px solid rgba(255, 255, 255, 0.2); +} + +.detail-row { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 20px; +} + +.detail-item { + display: flex; + justify-content: space-between; + align-items: center; + padding: 8px 12px; + background: rgba(255, 255, 255, 0.05); + border-radius: 6px; +} + +.detail-label { + font-size: 13px; + color: rgba(255, 255, 255, 0.7); + font-weight: 400; +} + +.detail-value { + font-size: 14px; + color: #ffffff; + font-weight: 600; +} + +/* 加载状态 */ +.loading-state { + display: flex; + align-items: center; + justify-content: center; + gap: 15px; + padding: 40px 20px; + text-align: center; +} + +.loading-spinner { + width: 24px; + height: 24px; + border: 3px solid rgba(255, 255, 255, 0.3); + border-top: 3px solid #ffffff; + border-radius: 50%; + animation: spin 1s linear infinite; +} + +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + +.loading-text { + font-size: 16px; + color: rgba(255, 255, 255, 0.8); + font-weight: 500; +} + +/* 错误状态 */ +.error-state { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 15px; + padding: 40px 20px; + text-align: center; +} + +.error-icon { + font-size: 32px; + color: #e74c3c; +} + +.error-text { + font-size: 16px; + color: rgba(255, 255, 255, 0.8); + font-weight: 500; +} + +.retry-button { + background: rgba(255, 255, 255, 0.1); + border: 1px solid rgba(255, 255, 255, 0.3); + color: #ffffff; + padding: 8px 16px; + border-radius: 6px; + font-size: 14px; + font-weight: 500; + cursor: pointer; + transition: all 0.3s ease; +} + +.retry-button:hover { + background: rgba(255, 255, 255, 0.2); + border-color: rgba(255, 255, 255, 0.5); +} + +/* 响应式设计 */ +@media (max-width: 768px) { + .stock-info-block { + padding: 20px; + margin: 10px; + } + + .stock-header { + flex-direction: column; + align-items: center; + gap: 10px; + } + + .stock-main-data { + grid-template-columns: 1fr; + gap: 30px; + text-align: center; + } + + .stock-price-section { + text-align: center; + } + + .price-change { + justify-content: center; + } + + .stock-amount-section { + text-align: center; + } + + .amount-data { + align-items: center; + } + + .price-value, + .volume-value, + .amount-value { + font-size: 36px; + } + + .detail-row { + grid-template-columns: repeat(2, 1fr); + gap: 15px; + } + + .detail-item { + flex-direction: column; + gap: 4px; + text-align: center; + } +} + +@media (max-width: 480px) { + .stock-info-block { + padding: 15px; + } + + .price-value, + .volume-value, + .amount-value { + font-size: 28px; + } + + .detail-row { + grid-template-columns: 1fr; + } +} + +/* 主题变体 */ +.stock-info-block.theme-light { + background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%); + color: #333333; +} + +.stock-info-block.theme-light::before { + background: linear-gradient(45deg, rgba(0, 0, 0, 0.02) 0%, transparent 100%); +} + +.stock-info-block.theme-light .stock-header { + border-bottom-color: rgba(0, 0, 0, 0.1); +} + +.stock-info-block.theme-light .stock-label, +.stock-info-block.theme-light .update-time, +.stock-info-block.theme-light .volume-label, +.stock-info-block.theme-light .amount-label, +.stock-info-block.theme-light .detail-label { + color: rgba(0, 0, 0, 0.6); +} + +.stock-info-block.theme-light .stock-code, +.stock-info-block.theme-light .update-timestamp, +.stock-info-block.theme-light .price-value, +.stock-info-block.theme-light .volume-value, +.stock-info-block.theme-light .amount-value, +.stock-info-block.theme-light .detail-value { + color: #333333; +} + +.stock-info-block.theme-light .stock-code { + background: rgba(0, 0, 0, 0.05); +} + +.stock-info-block.theme-light .change-value, +.stock-info-block.theme-light .change-percent { + background: rgba(0, 0, 0, 0.05); +} + +.stock-info-block.theme-light .detail-item { + background: rgba(0, 0, 0, 0.03); +} + +.stock-info-block.theme-light .stock-details { + border-top-color: rgba(0, 0, 0, 0.1); +} + +/* 动画效果 */ +.stock-info-block { + animation: fadeInUp 0.6s ease-out; +} + +@keyframes fadeInUp { + from { + opacity: 0; + transform: translateY(30px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +.price-value, +.volume-value, +.amount-value { + transition: all 0.3s ease; +} + +.price-value.updating, +.volume-value.updating, +.amount-value.updating { + transform: scale(1.05); +} \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/css/swiper-bundle.min.css b/wp-content/themes/nenghui-energy-theme-cn/assets/css/swiper-bundle.min.css new file mode 100644 index 0000000..519ed77 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/css/swiper-bundle.min.css @@ -0,0 +1,13 @@ +/** + * Swiper 11.0.5 + * Most modern mobile touch slider and framework with hardware accelerated transitions + * https://swiperjs.com + * + * Copyright 2014-2023 Vladimir Kharlampidi + * + * Released under the MIT License + * + * Released on: November 22, 2023 + */ + +@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-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-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-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-cn/assets/css/video-banner.css b/wp-content/themes/nenghui-energy-theme-cn/assets/css/video-banner.css new file mode 100644 index 0000000..68f2f4c --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/css/video-banner.css @@ -0,0 +1,171 @@ +/** + * 视频Banner样式 - 简化版本 + * 只保留视频背景功能,移除遮罩、文案和模态框 + */ + +/* 全局样式重置 */ +* { + box-sizing: border-box; +} + +html, body { + overflow-x: hidden; + max-width: 100%; +} + +/* 主容器 */ +.video-banner-block { + position: relative; + width: 100%; + max-width: 100vw; + box-sizing: border-box; + overflow: hidden; +} + +.video-banner-container { + position: relative; + width: 100%; + max-width: 100%; + height: 800px; /* 固定高度 */ + overflow: hidden; + box-sizing: border-box; + margin-top: 160px; +} + +/* 背景图片 */ +.video-banner-bg-image { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-size: cover; + background-position: center; + background-repeat: no-repeat; + z-index: 1; +} + +/* 视频背景容器 */ +.video-background-container { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + overflow: hidden; + z-index: 2; +} + +/* 视频背景 */ +.video-background { + position: absolute; + top: 50%; + left: 50%; + min-width: 100%; + min-height: 100%; + width: auto; + height: auto; + transform: translate(-50%, -50%); + object-fit: cover; + z-index: 2; +} + +/* 响应式设计 */ +@media (max-width: 768px) { + .video-banner-block, + .video-banner-container { + width: 100%; + max-width: 100vw; + height: 800px; /* 保持800px高度 */ + overflow-x: hidden; + } +} + +@media (max-width: 576px) { + .video-banner-block, + .video-banner-container { + width: 100%; + max-width: 100vw; + height: 800px; /* 保持800px高度 */ + overflow-x: hidden; + } +} + +/* 高对比度支持 */ +@media (prefers-contrast: high) { + .video-banner-container { + border: 2px solid #000; + } +} + +/* 减少动画支持 */ +@media (prefers-reduced-motion: reduce) { + .video-background { + animation: none; + } +} + +/* 视频内容区域 */ +.video-banner-content { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + text-align: center; + color: white; + z-index: 10; + max-width: 80%; +} + +.video-banner-title { + font-size: 3rem; + font-weight: bold; + margin-bottom: 1rem; + text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.7); +} + +.video-banner-subtitle { + font-size: 1.5rem; + margin-bottom: 1rem; + text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.7); +} + +.video-banner-description { + font-size: 1.1rem; + margin-bottom: 2rem; + text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.7); + line-height: 1.6; +} + +/* 响应式设计 - 内容区域 */ +@media (max-width: 768px) { + .video-banner-content { + max-width: 90%; + } + + .video-banner-title { + font-size: 2rem; + } + + .video-banner-subtitle { + font-size: 1.2rem; + } + + .video-banner-description { + font-size: 1rem; + } +} + +@media (max-width: 576px) { + .video-banner-title { + font-size: 1.5rem; + } + + .video-banner-subtitle { + font-size: 1rem; + } + + .video-banner-description { + font-size: 0.9rem; + } +} \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/fontawesome/css/all.min.css b/wp-content/themes/nenghui-energy-theme-cn/assets/fontawesome/css/all.min.css new file mode 100644 index 0000000..1f367c1 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/fontawesome/css/all.min.css @@ -0,0 +1,9 @@ +/*! + * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2023 Fonticons, Inc. + */ +.fa{font-family:var(--fa-style-family,"Font Awesome 6 Free");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-classic,.fa-regular,.fa-sharp,.fa-solid,.fab,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-classic,.fa-regular,.fa-solid,.far,.fas{font-family:"Font Awesome 6 Free"}.fa-brands,.fab{font-family:"Font Awesome 6 Brands"}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{-webkit-animation-name:fa-bounce;animation-name:fa-bounce;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{-webkit-animation-name:fa-shake;animation-name:fa-shake;-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-duration:var(--fa-animation-duration,2s);animation-duration:var(--fa-animation-duration,2s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,steps(8));animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{-webkit-animation-delay:-1ms;animation-delay:-1ms;-webkit-animation-duration:1ms;animation-duration:1ms;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-transition-delay:0s;transition-delay:0s;-webkit-transition-duration:0s;transition-duration:0s}}@-webkit-keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@-webkit-keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@-webkit-keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@-webkit-keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@-webkit-keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@-webkit-keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}.fa-rotate-by{-webkit-transform:rotate(var(--fa-rotate-angle,none));transform:rotate(var(--fa-rotate-angle,none))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index,auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse,#fff)} + +.fa-0:before{content:"\30"}.fa-1:before{content:"\31"}.fa-2:before{content:"\32"}.fa-3:before{content:"\33"}.fa-4:before{content:"\34"}.fa-5:before{content:"\35"}.fa-6:before{content:"\36"}.fa-7:before{content:"\37"}.fa-8:before{content:"\38"}.fa-9:before{content:"\39"}.fa-fill-drip:before{content:"\f576"}.fa-arrows-to-circle:before{content:"\e4bd"}.fa-chevron-circle-right:before,.fa-circle-chevron-right:before{content:"\f138"}.fa-at:before{content:"\40"}.fa-trash-alt:before,.fa-trash-can:before{content:"\f2ed"}.fa-text-height:before{content:"\f034"}.fa-user-times:before,.fa-user-xmark:before{content:"\f235"}.fa-stethoscope:before{content:"\f0f1"}.fa-comment-alt:before,.fa-message:before{content:"\f27a"}.fa-info:before{content:"\f129"}.fa-compress-alt:before,.fa-down-left-and-up-right-to-center:before{content:"\f422"}.fa-explosion:before{content:"\e4e9"}.fa-file-alt:before,.fa-file-lines:before,.fa-file-text:before{content:"\f15c"}.fa-wave-square:before{content:"\f83e"}.fa-ring:before{content:"\f70b"}.fa-building-un:before{content:"\e4d9"}.fa-dice-three:before{content:"\f527"}.fa-calendar-alt:before,.fa-calendar-days:before{content:"\f073"}.fa-anchor-circle-check:before{content:"\e4aa"}.fa-building-circle-arrow-right:before{content:"\e4d1"}.fa-volleyball-ball:before,.fa-volleyball:before{content:"\f45f"}.fa-arrows-up-to-line:before{content:"\e4c2"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-circle-minus:before,.fa-minus-circle:before{content:"\f056"}.fa-door-open:before{content:"\f52b"}.fa-right-from-bracket:before,.fa-sign-out-alt:before{content:"\f2f5"}.fa-atom:before{content:"\f5d2"}.fa-soap:before{content:"\e06e"}.fa-heart-music-camera-bolt:before,.fa-icons:before{content:"\f86d"}.fa-microphone-alt-slash:before,.fa-microphone-lines-slash:before{content:"\f539"}.fa-bridge-circle-check:before{content:"\e4c9"}.fa-pump-medical:before{content:"\e06a"}.fa-fingerprint:before{content:"\f577"}.fa-hand-point-right:before{content:"\f0a4"}.fa-magnifying-glass-location:before,.fa-search-location:before{content:"\f689"}.fa-forward-step:before,.fa-step-forward:before{content:"\f051"}.fa-face-smile-beam:before,.fa-smile-beam:before{content:"\f5b8"}.fa-flag-checkered:before{content:"\f11e"}.fa-football-ball:before,.fa-football:before{content:"\f44e"}.fa-school-circle-exclamation:before{content:"\e56c"}.fa-crop:before{content:"\f125"}.fa-angle-double-down:before,.fa-angles-down:before{content:"\f103"}.fa-users-rectangle:before{content:"\e594"}.fa-people-roof:before{content:"\e537"}.fa-people-line:before{content:"\e534"}.fa-beer-mug-empty:before,.fa-beer:before{content:"\f0fc"}.fa-diagram-predecessor:before{content:"\e477"}.fa-arrow-up-long:before,.fa-long-arrow-up:before{content:"\f176"}.fa-burn:before,.fa-fire-flame-simple:before{content:"\f46a"}.fa-male:before,.fa-person:before{content:"\f183"}.fa-laptop:before{content:"\f109"}.fa-file-csv:before{content:"\f6dd"}.fa-menorah:before{content:"\f676"}.fa-truck-plane:before{content:"\e58f"}.fa-record-vinyl:before{content:"\f8d9"}.fa-face-grin-stars:before,.fa-grin-stars:before{content:"\f587"}.fa-bong:before{content:"\f55c"}.fa-pastafarianism:before,.fa-spaghetti-monster-flying:before{content:"\f67b"}.fa-arrow-down-up-across-line:before{content:"\e4af"}.fa-spoon:before,.fa-utensil-spoon:before{content:"\f2e5"}.fa-jar-wheat:before{content:"\e517"}.fa-envelopes-bulk:before,.fa-mail-bulk:before{content:"\f674"}.fa-file-circle-exclamation:before{content:"\e4eb"}.fa-circle-h:before,.fa-hospital-symbol:before{content:"\f47e"}.fa-pager:before{content:"\f815"}.fa-address-book:before,.fa-contact-book:before{content:"\f2b9"}.fa-strikethrough:before{content:"\f0cc"}.fa-k:before{content:"\4b"}.fa-landmark-flag:before{content:"\e51c"}.fa-pencil-alt:before,.fa-pencil:before{content:"\f303"}.fa-backward:before{content:"\f04a"}.fa-caret-right:before{content:"\f0da"}.fa-comments:before{content:"\f086"}.fa-file-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-code-pull-request:before{content:"\e13c"}.fa-clipboard-list:before{content:"\f46d"}.fa-truck-loading:before,.fa-truck-ramp-box:before{content:"\f4de"}.fa-user-check:before{content:"\f4fc"}.fa-vial-virus:before{content:"\e597"}.fa-sheet-plastic:before{content:"\e571"}.fa-blog:before{content:"\f781"}.fa-user-ninja:before{content:"\f504"}.fa-person-arrow-up-from-line:before{content:"\e539"}.fa-scroll-torah:before,.fa-torah:before{content:"\f6a0"}.fa-broom-ball:before,.fa-quidditch-broom-ball:before,.fa-quidditch:before{content:"\f458"}.fa-toggle-off:before{content:"\f204"}.fa-archive:before,.fa-box-archive:before{content:"\f187"}.fa-person-drowning:before{content:"\e545"}.fa-arrow-down-9-1:before,.fa-sort-numeric-desc:before,.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-face-grin-tongue-squint:before,.fa-grin-tongue-squint:before{content:"\f58a"}.fa-spray-can:before{content:"\f5bd"}.fa-truck-monster:before{content:"\f63b"}.fa-w:before{content:"\57"}.fa-earth-africa:before,.fa-globe-africa:before{content:"\f57c"}.fa-rainbow:before{content:"\f75b"}.fa-circle-notch:before{content:"\f1ce"}.fa-tablet-alt:before,.fa-tablet-screen-button:before{content:"\f3fa"}.fa-paw:before{content:"\f1b0"}.fa-cloud:before{content:"\f0c2"}.fa-trowel-bricks:before{content:"\e58a"}.fa-face-flushed:before,.fa-flushed:before{content:"\f579"}.fa-hospital-user:before{content:"\f80d"}.fa-tent-arrow-left-right:before{content:"\e57f"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-binoculars:before{content:"\f1e5"}.fa-microphone-slash:before{content:"\f131"}.fa-box-tissue:before{content:"\e05b"}.fa-motorcycle:before{content:"\f21c"}.fa-bell-concierge:before,.fa-concierge-bell:before{content:"\f562"}.fa-pen-ruler:before,.fa-pencil-ruler:before{content:"\f5ae"}.fa-people-arrows-left-right:before,.fa-people-arrows:before{content:"\e068"}.fa-mars-and-venus-burst:before{content:"\e523"}.fa-caret-square-right:before,.fa-square-caret-right:before{content:"\f152"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-sun-plant-wilt:before{content:"\e57a"}.fa-toilets-portable:before{content:"\e584"}.fa-hockey-puck:before{content:"\f453"}.fa-table:before{content:"\f0ce"}.fa-magnifying-glass-arrow-right:before{content:"\e521"}.fa-digital-tachograph:before,.fa-tachograph-digital:before{content:"\f566"}.fa-users-slash:before{content:"\e073"}.fa-clover:before{content:"\e139"}.fa-mail-reply:before,.fa-reply:before{content:"\f3e5"}.fa-star-and-crescent:before{content:"\f699"}.fa-house-fire:before{content:"\e50c"}.fa-minus-square:before,.fa-square-minus:before{content:"\f146"}.fa-helicopter:before{content:"\f533"}.fa-compass:before{content:"\f14e"}.fa-caret-square-down:before,.fa-square-caret-down:before{content:"\f150"}.fa-file-circle-question:before{content:"\e4ef"}.fa-laptop-code:before{content:"\f5fc"}.fa-swatchbook:before{content:"\f5c3"}.fa-prescription-bottle:before{content:"\f485"}.fa-bars:before,.fa-navicon:before{content:"\f0c9"}.fa-people-group:before{content:"\e533"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-heart-broken:before,.fa-heart-crack:before{content:"\f7a9"}.fa-external-link-square-alt:before,.fa-square-up-right:before{content:"\f360"}.fa-face-kiss-beam:before,.fa-kiss-beam:before{content:"\f597"}.fa-film:before{content:"\f008"}.fa-ruler-horizontal:before{content:"\f547"}.fa-people-robbery:before{content:"\e536"}.fa-lightbulb:before{content:"\f0eb"}.fa-caret-left:before{content:"\f0d9"}.fa-circle-exclamation:before,.fa-exclamation-circle:before{content:"\f06a"}.fa-school-circle-xmark:before{content:"\e56d"}.fa-arrow-right-from-bracket:before,.fa-sign-out:before{content:"\f08b"}.fa-chevron-circle-down:before,.fa-circle-chevron-down:before{content:"\f13a"}.fa-unlock-alt:before,.fa-unlock-keyhole:before{content:"\f13e"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-headphones-alt:before,.fa-headphones-simple:before{content:"\f58f"}.fa-sitemap:before{content:"\f0e8"}.fa-circle-dollar-to-slot:before,.fa-donate:before{content:"\f4b9"}.fa-memory:before{content:"\f538"}.fa-road-spikes:before{content:"\e568"}.fa-fire-burner:before{content:"\e4f1"}.fa-flag:before{content:"\f024"}.fa-hanukiah:before{content:"\f6e6"}.fa-feather:before{content:"\f52d"}.fa-volume-down:before,.fa-volume-low:before{content:"\f027"}.fa-comment-slash:before{content:"\f4b3"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-compress:before{content:"\f066"}.fa-wheat-alt:before,.fa-wheat-awn:before{content:"\e2cd"}.fa-ankh:before{content:"\f644"}.fa-hands-holding-child:before{content:"\e4fa"}.fa-asterisk:before{content:"\2a"}.fa-check-square:before,.fa-square-check:before{content:"\f14a"}.fa-peseta-sign:before{content:"\e221"}.fa-header:before,.fa-heading:before{content:"\f1dc"}.fa-ghost:before{content:"\f6e2"}.fa-list-squares:before,.fa-list:before{content:"\f03a"}.fa-phone-square-alt:before,.fa-square-phone-flip:before{content:"\f87b"}.fa-cart-plus:before{content:"\f217"}.fa-gamepad:before{content:"\f11b"}.fa-circle-dot:before,.fa-dot-circle:before{content:"\f192"}.fa-dizzy:before,.fa-face-dizzy:before{content:"\f567"}.fa-egg:before{content:"\f7fb"}.fa-house-medical-circle-xmark:before{content:"\e513"}.fa-campground:before{content:"\f6bb"}.fa-folder-plus:before{content:"\f65e"}.fa-futbol-ball:before,.fa-futbol:before,.fa-soccer-ball:before{content:"\f1e3"}.fa-paint-brush:before,.fa-paintbrush:before{content:"\f1fc"}.fa-lock:before{content:"\f023"}.fa-gas-pump:before{content:"\f52f"}.fa-hot-tub-person:before,.fa-hot-tub:before{content:"\f593"}.fa-map-location:before,.fa-map-marked:before{content:"\f59f"}.fa-house-flood-water:before{content:"\e50e"}.fa-tree:before{content:"\f1bb"}.fa-bridge-lock:before{content:"\e4cc"}.fa-sack-dollar:before{content:"\f81d"}.fa-edit:before,.fa-pen-to-square:before{content:"\f044"}.fa-car-side:before{content:"\f5e4"}.fa-share-alt:before,.fa-share-nodes:before{content:"\f1e0"}.fa-heart-circle-minus:before{content:"\e4ff"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-microscope:before{content:"\f610"}.fa-sink:before{content:"\e06d"}.fa-bag-shopping:before,.fa-shopping-bag:before{content:"\f290"}.fa-arrow-down-z-a:before,.fa-sort-alpha-desc:before,.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-mitten:before{content:"\f7b5"}.fa-person-rays:before{content:"\e54d"}.fa-users:before{content:"\f0c0"}.fa-eye-slash:before{content:"\f070"}.fa-flask-vial:before{content:"\e4f3"}.fa-hand-paper:before,.fa-hand:before{content:"\f256"}.fa-om:before{content:"\f679"}.fa-worm:before{content:"\e599"}.fa-house-circle-xmark:before{content:"\e50b"}.fa-plug:before{content:"\f1e6"}.fa-chevron-up:before{content:"\f077"}.fa-hand-spock:before{content:"\f259"}.fa-stopwatch:before{content:"\f2f2"}.fa-face-kiss:before,.fa-kiss:before{content:"\f596"}.fa-bridge-circle-xmark:before{content:"\e4cb"}.fa-face-grin-tongue:before,.fa-grin-tongue:before{content:"\f589"}.fa-chess-bishop:before{content:"\f43a"}.fa-face-grin-wink:before,.fa-grin-wink:before{content:"\f58c"}.fa-deaf:before,.fa-deafness:before,.fa-ear-deaf:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-road-circle-check:before{content:"\e564"}.fa-dice-five:before{content:"\f523"}.fa-rss-square:before,.fa-square-rss:before{content:"\f143"}.fa-land-mine-on:before{content:"\e51b"}.fa-i-cursor:before{content:"\f246"}.fa-stamp:before{content:"\f5bf"}.fa-stairs:before{content:"\e289"}.fa-i:before{content:"\49"}.fa-hryvnia-sign:before,.fa-hryvnia:before{content:"\f6f2"}.fa-pills:before{content:"\f484"}.fa-face-grin-wide:before,.fa-grin-alt:before{content:"\f581"}.fa-tooth:before{content:"\f5c9"}.fa-v:before{content:"\56"}.fa-bangladeshi-taka-sign:before{content:"\e2e6"}.fa-bicycle:before{content:"\f206"}.fa-rod-asclepius:before,.fa-rod-snake:before,.fa-staff-aesculapius:before,.fa-staff-snake:before{content:"\e579"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-ambulance:before,.fa-truck-medical:before{content:"\f0f9"}.fa-wheat-awn-circle-exclamation:before{content:"\e598"}.fa-snowman:before{content:"\f7d0"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-road-barrier:before{content:"\e562"}.fa-school:before{content:"\f549"}.fa-igloo:before{content:"\f7ae"}.fa-joint:before{content:"\f595"}.fa-angle-right:before{content:"\f105"}.fa-horse:before{content:"\f6f0"}.fa-q:before{content:"\51"}.fa-g:before{content:"\47"}.fa-notes-medical:before{content:"\f481"}.fa-temperature-2:before,.fa-temperature-half:before,.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-dong-sign:before{content:"\e169"}.fa-capsules:before{content:"\f46b"}.fa-poo-bolt:before,.fa-poo-storm:before{content:"\f75a"}.fa-face-frown-open:before,.fa-frown-open:before{content:"\f57a"}.fa-hand-point-up:before{content:"\f0a6"}.fa-money-bill:before{content:"\f0d6"}.fa-bookmark:before{content:"\f02e"}.fa-align-justify:before{content:"\f039"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-helmet-un:before{content:"\e503"}.fa-bullseye:before{content:"\f140"}.fa-bacon:before{content:"\f7e5"}.fa-hand-point-down:before{content:"\f0a7"}.fa-arrow-up-from-bracket:before{content:"\e09a"}.fa-folder-blank:before,.fa-folder:before{content:"\f07b"}.fa-file-medical-alt:before,.fa-file-waveform:before{content:"\f478"}.fa-radiation:before{content:"\f7b9"}.fa-chart-simple:before{content:"\e473"}.fa-mars-stroke:before{content:"\f229"}.fa-vial:before{content:"\f492"}.fa-dashboard:before,.fa-gauge-med:before,.fa-gauge:before,.fa-tachometer-alt-average:before{content:"\f624"}.fa-magic-wand-sparkles:before,.fa-wand-magic-sparkles:before{content:"\e2ca"}.fa-e:before{content:"\45"}.fa-pen-alt:before,.fa-pen-clip:before{content:"\f305"}.fa-bridge-circle-exclamation:before{content:"\e4ca"}.fa-user:before{content:"\f007"}.fa-school-circle-check:before{content:"\e56b"}.fa-dumpster:before{content:"\f793"}.fa-shuttle-van:before,.fa-van-shuttle:before{content:"\f5b6"}.fa-building-user:before{content:"\e4da"}.fa-caret-square-left:before,.fa-square-caret-left:before{content:"\f191"}.fa-highlighter:before{content:"\f591"}.fa-key:before{content:"\f084"}.fa-bullhorn:before{content:"\f0a1"}.fa-globe:before{content:"\f0ac"}.fa-synagogue:before{content:"\f69b"}.fa-person-half-dress:before{content:"\e548"}.fa-road-bridge:before{content:"\e563"}.fa-location-arrow:before{content:"\f124"}.fa-c:before{content:"\43"}.fa-tablet-button:before{content:"\f10a"}.fa-building-lock:before{content:"\e4d6"}.fa-pizza-slice:before{content:"\f818"}.fa-money-bill-wave:before{content:"\f53a"}.fa-area-chart:before,.fa-chart-area:before{content:"\f1fe"}.fa-house-flag:before{content:"\e50d"}.fa-person-circle-minus:before{content:"\e540"}.fa-ban:before,.fa-cancel:before{content:"\f05e"}.fa-camera-rotate:before{content:"\e0d8"}.fa-air-freshener:before,.fa-spray-can-sparkles:before{content:"\f5d0"}.fa-star:before{content:"\f005"}.fa-repeat:before{content:"\f363"}.fa-cross:before{content:"\f654"}.fa-box:before{content:"\f466"}.fa-venus-mars:before{content:"\f228"}.fa-arrow-pointer:before,.fa-mouse-pointer:before{content:"\f245"}.fa-expand-arrows-alt:before,.fa-maximize:before{content:"\f31e"}.fa-charging-station:before{content:"\f5e7"}.fa-shapes:before,.fa-triangle-circle-square:before{content:"\f61f"}.fa-random:before,.fa-shuffle:before{content:"\f074"}.fa-person-running:before,.fa-running:before{content:"\f70c"}.fa-mobile-retro:before{content:"\e527"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-spider:before{content:"\f717"}.fa-hands-bound:before{content:"\e4f9"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-plane-circle-exclamation:before{content:"\e556"}.fa-x-ray:before{content:"\f497"}.fa-spell-check:before{content:"\f891"}.fa-slash:before{content:"\f715"}.fa-computer-mouse:before,.fa-mouse:before{content:"\f8cc"}.fa-arrow-right-to-bracket:before,.fa-sign-in:before{content:"\f090"}.fa-shop-slash:before,.fa-store-alt-slash:before{content:"\e070"}.fa-server:before{content:"\f233"}.fa-virus-covid-slash:before{content:"\e4a9"}.fa-shop-lock:before{content:"\e4a5"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-blender-phone:before{content:"\f6b6"}.fa-building-wheat:before{content:"\e4db"}.fa-person-breastfeeding:before{content:"\e53a"}.fa-right-to-bracket:before,.fa-sign-in-alt:before{content:"\f2f6"}.fa-venus:before{content:"\f221"}.fa-passport:before{content:"\f5ab"}.fa-heart-pulse:before,.fa-heartbeat:before{content:"\f21e"}.fa-people-carry-box:before,.fa-people-carry:before{content:"\f4ce"}.fa-temperature-high:before{content:"\f769"}.fa-microchip:before{content:"\f2db"}.fa-crown:before{content:"\f521"}.fa-weight-hanging:before{content:"\f5cd"}.fa-xmarks-lines:before{content:"\e59a"}.fa-file-prescription:before{content:"\f572"}.fa-weight-scale:before,.fa-weight:before{content:"\f496"}.fa-user-friends:before,.fa-user-group:before{content:"\f500"}.fa-arrow-up-a-z:before,.fa-sort-alpha-up:before{content:"\f15e"}.fa-chess-knight:before{content:"\f441"}.fa-face-laugh-squint:before,.fa-laugh-squint:before{content:"\f59b"}.fa-wheelchair:before{content:"\f193"}.fa-arrow-circle-up:before,.fa-circle-arrow-up:before{content:"\f0aa"}.fa-toggle-on:before{content:"\f205"}.fa-person-walking:before,.fa-walking:before{content:"\f554"}.fa-l:before{content:"\4c"}.fa-fire:before{content:"\f06d"}.fa-bed-pulse:before,.fa-procedures:before{content:"\f487"}.fa-shuttle-space:before,.fa-space-shuttle:before{content:"\f197"}.fa-face-laugh:before,.fa-laugh:before{content:"\f599"}.fa-folder-open:before{content:"\f07c"}.fa-heart-circle-plus:before{content:"\e500"}.fa-code-fork:before{content:"\e13b"}.fa-city:before{content:"\f64f"}.fa-microphone-alt:before,.fa-microphone-lines:before{content:"\f3c9"}.fa-pepper-hot:before{content:"\f816"}.fa-unlock:before{content:"\f09c"}.fa-colon-sign:before{content:"\e140"}.fa-headset:before{content:"\f590"}.fa-store-slash:before{content:"\e071"}.fa-road-circle-xmark:before{content:"\e566"}.fa-user-minus:before{content:"\f503"}.fa-mars-stroke-up:before,.fa-mars-stroke-v:before{content:"\f22a"}.fa-champagne-glasses:before,.fa-glass-cheers:before{content:"\f79f"}.fa-clipboard:before{content:"\f328"}.fa-house-circle-exclamation:before{content:"\e50a"}.fa-file-arrow-up:before,.fa-file-upload:before{content:"\f574"}.fa-wifi-3:before,.fa-wifi-strong:before,.fa-wifi:before{content:"\f1eb"}.fa-bath:before,.fa-bathtub:before{content:"\f2cd"}.fa-underline:before{content:"\f0cd"}.fa-user-edit:before,.fa-user-pen:before{content:"\f4ff"}.fa-signature:before{content:"\f5b7"}.fa-stroopwafel:before{content:"\f551"}.fa-bold:before{content:"\f032"}.fa-anchor-lock:before{content:"\e4ad"}.fa-building-ngo:before{content:"\e4d7"}.fa-manat-sign:before{content:"\e1d5"}.fa-not-equal:before{content:"\f53e"}.fa-border-style:before,.fa-border-top-left:before{content:"\f853"}.fa-map-location-dot:before,.fa-map-marked-alt:before{content:"\f5a0"}.fa-jedi:before{content:"\f669"}.fa-poll:before,.fa-square-poll-vertical:before{content:"\f681"}.fa-mug-hot:before{content:"\f7b6"}.fa-battery-car:before,.fa-car-battery:before{content:"\f5df"}.fa-gift:before{content:"\f06b"}.fa-dice-two:before{content:"\f528"}.fa-chess-queen:before{content:"\f445"}.fa-glasses:before{content:"\f530"}.fa-chess-board:before{content:"\f43c"}.fa-building-circle-check:before{content:"\e4d2"}.fa-person-chalkboard:before{content:"\e53d"}.fa-mars-stroke-h:before,.fa-mars-stroke-right:before{content:"\f22b"}.fa-hand-back-fist:before,.fa-hand-rock:before{content:"\f255"}.fa-caret-square-up:before,.fa-square-caret-up:before{content:"\f151"}.fa-cloud-showers-water:before{content:"\e4e4"}.fa-bar-chart:before,.fa-chart-bar:before{content:"\f080"}.fa-hands-bubbles:before,.fa-hands-wash:before{content:"\e05e"}.fa-less-than-equal:before{content:"\f537"}.fa-train:before{content:"\f238"}.fa-eye-low-vision:before,.fa-low-vision:before{content:"\f2a8"}.fa-crow:before{content:"\f520"}.fa-sailboat:before{content:"\e445"}.fa-window-restore:before{content:"\f2d2"}.fa-plus-square:before,.fa-square-plus:before{content:"\f0fe"}.fa-torii-gate:before{content:"\f6a1"}.fa-frog:before{content:"\f52e"}.fa-bucket:before{content:"\e4cf"}.fa-image:before{content:"\f03e"}.fa-microphone:before{content:"\f130"}.fa-cow:before{content:"\f6c8"}.fa-caret-up:before{content:"\f0d8"}.fa-screwdriver:before{content:"\f54a"}.fa-folder-closed:before{content:"\e185"}.fa-house-tsunami:before{content:"\e515"}.fa-square-nfi:before{content:"\e576"}.fa-arrow-up-from-ground-water:before{content:"\e4b5"}.fa-glass-martini-alt:before,.fa-martini-glass:before{content:"\f57b"}.fa-rotate-back:before,.fa-rotate-backward:before,.fa-rotate-left:before,.fa-undo-alt:before{content:"\f2ea"}.fa-columns:before,.fa-table-columns:before{content:"\f0db"}.fa-lemon:before{content:"\f094"}.fa-head-side-mask:before{content:"\e063"}.fa-handshake:before{content:"\f2b5"}.fa-gem:before{content:"\f3a5"}.fa-dolly-box:before,.fa-dolly:before{content:"\f472"}.fa-smoking:before{content:"\f48d"}.fa-compress-arrows-alt:before,.fa-minimize:before{content:"\f78c"}.fa-monument:before{content:"\f5a6"}.fa-snowplow:before{content:"\f7d2"}.fa-angle-double-right:before,.fa-angles-right:before{content:"\f101"}.fa-cannabis:before{content:"\f55f"}.fa-circle-play:before,.fa-play-circle:before{content:"\f144"}.fa-tablets:before{content:"\f490"}.fa-ethernet:before{content:"\f796"}.fa-eur:before,.fa-euro-sign:before,.fa-euro:before{content:"\f153"}.fa-chair:before{content:"\f6c0"}.fa-check-circle:before,.fa-circle-check:before{content:"\f058"}.fa-circle-stop:before,.fa-stop-circle:before{content:"\f28d"}.fa-compass-drafting:before,.fa-drafting-compass:before{content:"\f568"}.fa-plate-wheat:before{content:"\e55a"}.fa-icicles:before{content:"\f7ad"}.fa-person-shelter:before{content:"\e54f"}.fa-neuter:before{content:"\f22c"}.fa-id-badge:before{content:"\f2c1"}.fa-marker:before{content:"\f5a1"}.fa-face-laugh-beam:before,.fa-laugh-beam:before{content:"\f59a"}.fa-helicopter-symbol:before{content:"\e502"}.fa-universal-access:before{content:"\f29a"}.fa-chevron-circle-up:before,.fa-circle-chevron-up:before{content:"\f139"}.fa-lari-sign:before{content:"\e1c8"}.fa-volcano:before{content:"\f770"}.fa-person-walking-dashed-line-arrow-right:before{content:"\e553"}.fa-gbp:before,.fa-pound-sign:before,.fa-sterling-sign:before{content:"\f154"}.fa-viruses:before{content:"\e076"}.fa-square-person-confined:before{content:"\e577"}.fa-user-tie:before{content:"\f508"}.fa-arrow-down-long:before,.fa-long-arrow-down:before{content:"\f175"}.fa-tent-arrow-down-to-line:before{content:"\e57e"}.fa-certificate:before{content:"\f0a3"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-suitcase:before{content:"\f0f2"}.fa-person-skating:before,.fa-skating:before{content:"\f7c5"}.fa-filter-circle-dollar:before,.fa-funnel-dollar:before{content:"\f662"}.fa-camera-retro:before{content:"\f083"}.fa-arrow-circle-down:before,.fa-circle-arrow-down:before{content:"\f0ab"}.fa-arrow-right-to-file:before,.fa-file-import:before{content:"\f56f"}.fa-external-link-square:before,.fa-square-arrow-up-right:before{content:"\f14c"}.fa-box-open:before{content:"\f49e"}.fa-scroll:before{content:"\f70e"}.fa-spa:before{content:"\f5bb"}.fa-location-pin-lock:before{content:"\e51f"}.fa-pause:before{content:"\f04c"}.fa-hill-avalanche:before{content:"\e507"}.fa-temperature-0:before,.fa-temperature-empty:before,.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-bomb:before{content:"\f1e2"}.fa-registered:before{content:"\f25d"}.fa-address-card:before,.fa-contact-card:before,.fa-vcard:before{content:"\f2bb"}.fa-balance-scale-right:before,.fa-scale-unbalanced-flip:before{content:"\f516"}.fa-subscript:before{content:"\f12c"}.fa-diamond-turn-right:before,.fa-directions:before{content:"\f5eb"}.fa-burst:before{content:"\e4dc"}.fa-house-laptop:before,.fa-laptop-house:before{content:"\e066"}.fa-face-tired:before,.fa-tired:before{content:"\f5c8"}.fa-money-bills:before{content:"\e1f3"}.fa-smog:before{content:"\f75f"}.fa-crutch:before{content:"\f7f7"}.fa-cloud-arrow-up:before,.fa-cloud-upload-alt:before,.fa-cloud-upload:before{content:"\f0ee"}.fa-palette:before{content:"\f53f"}.fa-arrows-turn-right:before{content:"\e4c0"}.fa-vest:before{content:"\e085"}.fa-ferry:before{content:"\e4ea"}.fa-arrows-down-to-people:before{content:"\e4b9"}.fa-seedling:before,.fa-sprout:before{content:"\f4d8"}.fa-arrows-alt-h:before,.fa-left-right:before{content:"\f337"}.fa-boxes-packing:before{content:"\e4c7"}.fa-arrow-circle-left:before,.fa-circle-arrow-left:before{content:"\f0a8"}.fa-group-arrows-rotate:before{content:"\e4f6"}.fa-bowl-food:before{content:"\e4c6"}.fa-candy-cane:before{content:"\f786"}.fa-arrow-down-wide-short:before,.fa-sort-amount-asc:before,.fa-sort-amount-down:before{content:"\f160"}.fa-cloud-bolt:before,.fa-thunderstorm:before{content:"\f76c"}.fa-remove-format:before,.fa-text-slash:before{content:"\f87d"}.fa-face-smile-wink:before,.fa-smile-wink:before{content:"\f4da"}.fa-file-word:before{content:"\f1c2"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-arrows-h:before,.fa-arrows-left-right:before{content:"\f07e"}.fa-house-lock:before{content:"\e510"}.fa-cloud-arrow-down:before,.fa-cloud-download-alt:before,.fa-cloud-download:before{content:"\f0ed"}.fa-children:before{content:"\e4e1"}.fa-blackboard:before,.fa-chalkboard:before{content:"\f51b"}.fa-user-alt-slash:before,.fa-user-large-slash:before{content:"\f4fa"}.fa-envelope-open:before{content:"\f2b6"}.fa-handshake-alt-slash:before,.fa-handshake-simple-slash:before{content:"\e05f"}.fa-mattress-pillow:before{content:"\e525"}.fa-guarani-sign:before{content:"\e19a"}.fa-arrows-rotate:before,.fa-refresh:before,.fa-sync:before{content:"\f021"}.fa-fire-extinguisher:before{content:"\f134"}.fa-cruzeiro-sign:before{content:"\e152"}.fa-greater-than-equal:before{content:"\f532"}.fa-shield-alt:before,.fa-shield-halved:before{content:"\f3ed"}.fa-atlas:before,.fa-book-atlas:before{content:"\f558"}.fa-virus:before{content:"\e074"}.fa-envelope-circle-check:before{content:"\e4e8"}.fa-layer-group:before{content:"\f5fd"}.fa-arrows-to-dot:before{content:"\e4be"}.fa-archway:before{content:"\f557"}.fa-heart-circle-check:before{content:"\e4fd"}.fa-house-chimney-crack:before,.fa-house-damage:before{content:"\f6f1"}.fa-file-archive:before,.fa-file-zipper:before{content:"\f1c6"}.fa-square:before{content:"\f0c8"}.fa-glass-martini:before,.fa-martini-glass-empty:before{content:"\f000"}.fa-couch:before{content:"\f4b8"}.fa-cedi-sign:before{content:"\e0df"}.fa-italic:before{content:"\f033"}.fa-church:before{content:"\f51d"}.fa-comments-dollar:before{content:"\f653"}.fa-democrat:before{content:"\f747"}.fa-z:before{content:"\5a"}.fa-person-skiing:before,.fa-skiing:before{content:"\f7c9"}.fa-road-lock:before{content:"\e567"}.fa-a:before{content:"\41"}.fa-temperature-arrow-down:before,.fa-temperature-down:before{content:"\e03f"}.fa-feather-alt:before,.fa-feather-pointed:before{content:"\f56b"}.fa-p:before{content:"\50"}.fa-snowflake:before{content:"\f2dc"}.fa-newspaper:before{content:"\f1ea"}.fa-ad:before,.fa-rectangle-ad:before{content:"\f641"}.fa-arrow-circle-right:before,.fa-circle-arrow-right:before{content:"\f0a9"}.fa-filter-circle-xmark:before{content:"\e17b"}.fa-locust:before{content:"\e520"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-list-1-2:before,.fa-list-numeric:before,.fa-list-ol:before{content:"\f0cb"}.fa-person-dress-burst:before{content:"\e544"}.fa-money-check-alt:before,.fa-money-check-dollar:before{content:"\f53d"}.fa-vector-square:before{content:"\f5cb"}.fa-bread-slice:before{content:"\f7ec"}.fa-language:before{content:"\f1ab"}.fa-face-kiss-wink-heart:before,.fa-kiss-wink-heart:before{content:"\f598"}.fa-filter:before{content:"\f0b0"}.fa-question:before{content:"\3f"}.fa-file-signature:before{content:"\f573"}.fa-arrows-alt:before,.fa-up-down-left-right:before{content:"\f0b2"}.fa-house-chimney-user:before{content:"\e065"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-puzzle-piece:before{content:"\f12e"}.fa-money-check:before{content:"\f53c"}.fa-star-half-alt:before,.fa-star-half-stroke:before{content:"\f5c0"}.fa-code:before{content:"\f121"}.fa-glass-whiskey:before,.fa-whiskey-glass:before{content:"\f7a0"}.fa-building-circle-exclamation:before{content:"\e4d3"}.fa-magnifying-glass-chart:before{content:"\e522"}.fa-arrow-up-right-from-square:before,.fa-external-link:before{content:"\f08e"}.fa-cubes-stacked:before{content:"\e4e6"}.fa-krw:before,.fa-won-sign:before,.fa-won:before{content:"\f159"}.fa-virus-covid:before{content:"\e4a8"}.fa-austral-sign:before{content:"\e0a9"}.fa-f:before{content:"\46"}.fa-leaf:before{content:"\f06c"}.fa-road:before{content:"\f018"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-person-circle-plus:before{content:"\e541"}.fa-chart-pie:before,.fa-pie-chart:before{content:"\f200"}.fa-bolt-lightning:before{content:"\e0b7"}.fa-sack-xmark:before{content:"\e56a"}.fa-file-excel:before{content:"\f1c3"}.fa-file-contract:before{content:"\f56c"}.fa-fish-fins:before{content:"\e4f2"}.fa-building-flag:before{content:"\e4d5"}.fa-face-grin-beam:before,.fa-grin-beam:before{content:"\f582"}.fa-object-ungroup:before{content:"\f248"}.fa-poop:before{content:"\f619"}.fa-location-pin:before,.fa-map-marker:before{content:"\f041"}.fa-kaaba:before{content:"\f66b"}.fa-toilet-paper:before{content:"\f71e"}.fa-hard-hat:before,.fa-hat-hard:before,.fa-helmet-safety:before{content:"\f807"}.fa-eject:before{content:"\f052"}.fa-arrow-alt-circle-right:before,.fa-circle-right:before{content:"\f35a"}.fa-plane-circle-check:before{content:"\e555"}.fa-face-rolling-eyes:before,.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-object-group:before{content:"\f247"}.fa-chart-line:before,.fa-line-chart:before{content:"\f201"}.fa-mask-ventilator:before{content:"\e524"}.fa-arrow-right:before{content:"\f061"}.fa-map-signs:before,.fa-signs-post:before{content:"\f277"}.fa-cash-register:before{content:"\f788"}.fa-person-circle-question:before{content:"\e542"}.fa-h:before{content:"\48"}.fa-tarp:before{content:"\e57b"}.fa-screwdriver-wrench:before,.fa-tools:before{content:"\f7d9"}.fa-arrows-to-eye:before{content:"\e4bf"}.fa-plug-circle-bolt:before{content:"\e55b"}.fa-heart:before{content:"\f004"}.fa-mars-and-venus:before{content:"\f224"}.fa-home-user:before,.fa-house-user:before{content:"\e1b0"}.fa-dumpster-fire:before{content:"\f794"}.fa-house-crack:before{content:"\e3b1"}.fa-cocktail:before,.fa-martini-glass-citrus:before{content:"\f561"}.fa-face-surprise:before,.fa-surprise:before{content:"\f5c2"}.fa-bottle-water:before{content:"\e4c5"}.fa-circle-pause:before,.fa-pause-circle:before{content:"\f28b"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-apple-alt:before,.fa-apple-whole:before{content:"\f5d1"}.fa-kitchen-set:before{content:"\e51a"}.fa-r:before{content:"\52"}.fa-temperature-1:before,.fa-temperature-quarter:before,.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-cube:before{content:"\f1b2"}.fa-bitcoin-sign:before{content:"\e0b4"}.fa-shield-dog:before{content:"\e573"}.fa-solar-panel:before{content:"\f5ba"}.fa-lock-open:before{content:"\f3c1"}.fa-elevator:before{content:"\e16d"}.fa-money-bill-transfer:before{content:"\e528"}.fa-money-bill-trend-up:before{content:"\e529"}.fa-house-flood-water-circle-arrow-right:before{content:"\e50f"}.fa-poll-h:before,.fa-square-poll-horizontal:before{content:"\f682"}.fa-circle:before{content:"\f111"}.fa-backward-fast:before,.fa-fast-backward:before{content:"\f049"}.fa-recycle:before{content:"\f1b8"}.fa-user-astronaut:before{content:"\f4fb"}.fa-plane-slash:before{content:"\e069"}.fa-trademark:before{content:"\f25c"}.fa-basketball-ball:before,.fa-basketball:before{content:"\f434"}.fa-satellite-dish:before{content:"\f7c0"}.fa-arrow-alt-circle-up:before,.fa-circle-up:before{content:"\f35b"}.fa-mobile-alt:before,.fa-mobile-screen-button:before{content:"\f3cd"}.fa-volume-high:before,.fa-volume-up:before{content:"\f028"}.fa-users-rays:before{content:"\e593"}.fa-wallet:before{content:"\f555"}.fa-clipboard-check:before{content:"\f46c"}.fa-file-audio:before{content:"\f1c7"}.fa-burger:before,.fa-hamburger:before{content:"\f805"}.fa-wrench:before{content:"\f0ad"}.fa-bugs:before{content:"\e4d0"}.fa-rupee-sign:before,.fa-rupee:before{content:"\f156"}.fa-file-image:before{content:"\f1c5"}.fa-circle-question:before,.fa-question-circle:before{content:"\f059"}.fa-plane-departure:before{content:"\f5b0"}.fa-handshake-slash:before{content:"\e060"}.fa-book-bookmark:before{content:"\e0bb"}.fa-code-branch:before{content:"\f126"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-bridge:before{content:"\e4c8"}.fa-phone-alt:before,.fa-phone-flip:before{content:"\f879"}.fa-truck-front:before{content:"\e2b7"}.fa-cat:before{content:"\f6be"}.fa-anchor-circle-exclamation:before{content:"\e4ab"}.fa-truck-field:before{content:"\e58d"}.fa-route:before{content:"\f4d7"}.fa-clipboard-question:before{content:"\e4e3"}.fa-panorama:before{content:"\e209"}.fa-comment-medical:before{content:"\f7f5"}.fa-teeth-open:before{content:"\f62f"}.fa-file-circle-minus:before{content:"\e4ed"}.fa-tags:before{content:"\f02c"}.fa-wine-glass:before{content:"\f4e3"}.fa-fast-forward:before,.fa-forward-fast:before{content:"\f050"}.fa-face-meh-blank:before,.fa-meh-blank:before{content:"\f5a4"}.fa-parking:before,.fa-square-parking:before{content:"\f540"}.fa-house-signal:before{content:"\e012"}.fa-bars-progress:before,.fa-tasks-alt:before{content:"\f828"}.fa-faucet-drip:before{content:"\e006"}.fa-cart-flatbed:before,.fa-dolly-flatbed:before{content:"\f474"}.fa-ban-smoking:before,.fa-smoking-ban:before{content:"\f54d"}.fa-terminal:before{content:"\f120"}.fa-mobile-button:before{content:"\f10b"}.fa-house-medical-flag:before{content:"\e514"}.fa-basket-shopping:before,.fa-shopping-basket:before{content:"\f291"}.fa-tape:before{content:"\f4db"}.fa-bus-alt:before,.fa-bus-simple:before{content:"\f55e"}.fa-eye:before{content:"\f06e"}.fa-face-sad-cry:before,.fa-sad-cry:before{content:"\f5b3"}.fa-audio-description:before{content:"\f29e"}.fa-person-military-to-person:before{content:"\e54c"}.fa-file-shield:before{content:"\e4f0"}.fa-user-slash:before{content:"\f506"}.fa-pen:before{content:"\f304"}.fa-tower-observation:before{content:"\e586"}.fa-file-code:before{content:"\f1c9"}.fa-signal-5:before,.fa-signal-perfect:before,.fa-signal:before{content:"\f012"}.fa-bus:before{content:"\f207"}.fa-heart-circle-xmark:before{content:"\e501"}.fa-home-lg:before,.fa-house-chimney:before{content:"\e3af"}.fa-window-maximize:before{content:"\f2d0"}.fa-face-frown:before,.fa-frown:before{content:"\f119"}.fa-prescription:before{content:"\f5b1"}.fa-shop:before,.fa-store-alt:before{content:"\f54f"}.fa-floppy-disk:before,.fa-save:before{content:"\f0c7"}.fa-vihara:before{content:"\f6a7"}.fa-balance-scale-left:before,.fa-scale-unbalanced:before{content:"\f515"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-comment-dots:before,.fa-commenting:before{content:"\f4ad"}.fa-plant-wilt:before{content:"\e5aa"}.fa-diamond:before{content:"\f219"}.fa-face-grin-squint:before,.fa-grin-squint:before{content:"\f585"}.fa-hand-holding-dollar:before,.fa-hand-holding-usd:before{content:"\f4c0"}.fa-bacterium:before{content:"\e05a"}.fa-hand-pointer:before{content:"\f25a"}.fa-drum-steelpan:before{content:"\f56a"}.fa-hand-scissors:before{content:"\f257"}.fa-hands-praying:before,.fa-praying-hands:before{content:"\f684"}.fa-arrow-right-rotate:before,.fa-arrow-rotate-forward:before,.fa-arrow-rotate-right:before,.fa-redo:before{content:"\f01e"}.fa-biohazard:before{content:"\f780"}.fa-location-crosshairs:before,.fa-location:before{content:"\f601"}.fa-mars-double:before{content:"\f227"}.fa-child-dress:before{content:"\e59c"}.fa-users-between-lines:before{content:"\e591"}.fa-lungs-virus:before{content:"\e067"}.fa-face-grin-tears:before,.fa-grin-tears:before{content:"\f588"}.fa-phone:before{content:"\f095"}.fa-calendar-times:before,.fa-calendar-xmark:before{content:"\f273"}.fa-child-reaching:before{content:"\e59d"}.fa-head-side-virus:before{content:"\e064"}.fa-user-cog:before,.fa-user-gear:before{content:"\f4fe"}.fa-arrow-up-1-9:before,.fa-sort-numeric-up:before{content:"\f163"}.fa-door-closed:before{content:"\f52a"}.fa-shield-virus:before{content:"\e06c"}.fa-dice-six:before{content:"\f526"}.fa-mosquito-net:before{content:"\e52c"}.fa-bridge-water:before{content:"\e4ce"}.fa-person-booth:before{content:"\f756"}.fa-text-width:before{content:"\f035"}.fa-hat-wizard:before{content:"\f6e8"}.fa-pen-fancy:before{content:"\f5ac"}.fa-digging:before,.fa-person-digging:before{content:"\f85e"}.fa-trash:before{content:"\f1f8"}.fa-gauge-simple-med:before,.fa-gauge-simple:before,.fa-tachometer-average:before{content:"\f629"}.fa-book-medical:before{content:"\f7e6"}.fa-poo:before{content:"\f2fe"}.fa-quote-right-alt:before,.fa-quote-right:before{content:"\f10e"}.fa-shirt:before,.fa-t-shirt:before,.fa-tshirt:before{content:"\f553"}.fa-cubes:before{content:"\f1b3"}.fa-divide:before{content:"\f529"}.fa-tenge-sign:before,.fa-tenge:before{content:"\f7d7"}.fa-headphones:before{content:"\f025"}.fa-hands-holding:before{content:"\f4c2"}.fa-hands-clapping:before{content:"\e1a8"}.fa-republican:before{content:"\f75e"}.fa-arrow-left:before{content:"\f060"}.fa-person-circle-xmark:before{content:"\e543"}.fa-ruler:before{content:"\f545"}.fa-align-left:before{content:"\f036"}.fa-dice-d6:before{content:"\f6d1"}.fa-restroom:before{content:"\f7bd"}.fa-j:before{content:"\4a"}.fa-users-viewfinder:before{content:"\e595"}.fa-file-video:before{content:"\f1c8"}.fa-external-link-alt:before,.fa-up-right-from-square:before{content:"\f35d"}.fa-table-cells:before,.fa-th:before{content:"\f00a"}.fa-file-pdf:before{content:"\f1c1"}.fa-bible:before,.fa-book-bible:before{content:"\f647"}.fa-o:before{content:"\4f"}.fa-medkit:before,.fa-suitcase-medical:before{content:"\f0fa"}.fa-user-secret:before{content:"\f21b"}.fa-otter:before{content:"\f700"}.fa-female:before,.fa-person-dress:before{content:"\f182"}.fa-comment-dollar:before{content:"\f651"}.fa-briefcase-clock:before,.fa-business-time:before{content:"\f64a"}.fa-table-cells-large:before,.fa-th-large:before{content:"\f009"}.fa-book-tanakh:before,.fa-tanakh:before{content:"\f827"}.fa-phone-volume:before,.fa-volume-control-phone:before{content:"\f2a0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-clipboard-user:before{content:"\f7f3"}.fa-child:before{content:"\f1ae"}.fa-lira-sign:before{content:"\f195"}.fa-satellite:before{content:"\f7bf"}.fa-plane-lock:before{content:"\e558"}.fa-tag:before{content:"\f02b"}.fa-comment:before{content:"\f075"}.fa-birthday-cake:before,.fa-cake-candles:before,.fa-cake:before{content:"\f1fd"}.fa-envelope:before{content:"\f0e0"}.fa-angle-double-up:before,.fa-angles-up:before{content:"\f102"}.fa-paperclip:before{content:"\f0c6"}.fa-arrow-right-to-city:before{content:"\e4b3"}.fa-ribbon:before{content:"\f4d6"}.fa-lungs:before{content:"\f604"}.fa-arrow-up-9-1:before,.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-litecoin-sign:before{content:"\e1d3"}.fa-border-none:before{content:"\f850"}.fa-circle-nodes:before{content:"\e4e2"}.fa-parachute-box:before{content:"\f4cd"}.fa-indent:before{content:"\f03c"}.fa-truck-field-un:before{content:"\e58e"}.fa-hourglass-empty:before,.fa-hourglass:before{content:"\f254"}.fa-mountain:before{content:"\f6fc"}.fa-user-doctor:before,.fa-user-md:before{content:"\f0f0"}.fa-circle-info:before,.fa-info-circle:before{content:"\f05a"}.fa-cloud-meatball:before{content:"\f73b"}.fa-camera-alt:before,.fa-camera:before{content:"\f030"}.fa-square-virus:before{content:"\e578"}.fa-meteor:before{content:"\f753"}.fa-car-on:before{content:"\e4dd"}.fa-sleigh:before{content:"\f7cc"}.fa-arrow-down-1-9:before,.fa-sort-numeric-asc:before,.fa-sort-numeric-down:before{content:"\f162"}.fa-hand-holding-droplet:before,.fa-hand-holding-water:before{content:"\f4c1"}.fa-water:before{content:"\f773"}.fa-calendar-check:before{content:"\f274"}.fa-braille:before{content:"\f2a1"}.fa-prescription-bottle-alt:before,.fa-prescription-bottle-medical:before{content:"\f486"}.fa-landmark:before{content:"\f66f"}.fa-truck:before{content:"\f0d1"}.fa-crosshairs:before{content:"\f05b"}.fa-person-cane:before{content:"\e53c"}.fa-tent:before{content:"\e57d"}.fa-vest-patches:before{content:"\e086"}.fa-check-double:before{content:"\f560"}.fa-arrow-down-a-z:before,.fa-sort-alpha-asc:before,.fa-sort-alpha-down:before{content:"\f15d"}.fa-money-bill-wheat:before{content:"\e52a"}.fa-cookie:before{content:"\f563"}.fa-arrow-left-rotate:before,.fa-arrow-rotate-back:before,.fa-arrow-rotate-backward:before,.fa-arrow-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-hard-drive:before,.fa-hdd:before{content:"\f0a0"}.fa-face-grin-squint-tears:before,.fa-grin-squint-tears:before{content:"\f586"}.fa-dumbbell:before{content:"\f44b"}.fa-list-alt:before,.fa-rectangle-list:before{content:"\f022"}.fa-tarp-droplet:before{content:"\e57c"}.fa-house-medical-circle-check:before{content:"\e511"}.fa-person-skiing-nordic:before,.fa-skiing-nordic:before{content:"\f7ca"}.fa-calendar-plus:before{content:"\f271"}.fa-plane-arrival:before{content:"\f5af"}.fa-arrow-alt-circle-left:before,.fa-circle-left:before{content:"\f359"}.fa-subway:before,.fa-train-subway:before{content:"\f239"}.fa-chart-gantt:before{content:"\e0e4"}.fa-indian-rupee-sign:before,.fa-indian-rupee:before,.fa-inr:before{content:"\e1bc"}.fa-crop-alt:before,.fa-crop-simple:before{content:"\f565"}.fa-money-bill-1:before,.fa-money-bill-alt:before{content:"\f3d1"}.fa-left-long:before,.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-dna:before{content:"\f471"}.fa-virus-slash:before{content:"\e075"}.fa-minus:before,.fa-subtract:before{content:"\f068"}.fa-chess:before{content:"\f439"}.fa-arrow-left-long:before,.fa-long-arrow-left:before{content:"\f177"}.fa-plug-circle-check:before{content:"\e55c"}.fa-street-view:before{content:"\f21d"}.fa-franc-sign:before{content:"\e18f"}.fa-volume-off:before{content:"\f026"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before,.fa-hands-american-sign-language-interpreting:before,.fa-hands-asl-interpreting:before{content:"\f2a3"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-droplet-slash:before,.fa-tint-slash:before{content:"\f5c7"}.fa-mosque:before{content:"\f678"}.fa-mosquito:before{content:"\e52b"}.fa-star-of-david:before{content:"\f69a"}.fa-person-military-rifle:before{content:"\e54b"}.fa-cart-shopping:before,.fa-shopping-cart:before{content:"\f07a"}.fa-vials:before{content:"\f493"}.fa-plug-circle-plus:before{content:"\e55f"}.fa-place-of-worship:before{content:"\f67f"}.fa-grip-vertical:before{content:"\f58e"}.fa-arrow-turn-up:before,.fa-level-up:before{content:"\f148"}.fa-u:before{content:"\55"}.fa-square-root-alt:before,.fa-square-root-variable:before{content:"\f698"}.fa-clock-four:before,.fa-clock:before{content:"\f017"}.fa-backward-step:before,.fa-step-backward:before{content:"\f048"}.fa-pallet:before{content:"\f482"}.fa-faucet:before{content:"\e005"}.fa-baseball-bat-ball:before{content:"\f432"}.fa-s:before{content:"\53"}.fa-timeline:before{content:"\e29c"}.fa-keyboard:before{content:"\f11c"}.fa-caret-down:before{content:"\f0d7"}.fa-clinic-medical:before,.fa-house-chimney-medical:before{content:"\f7f2"}.fa-temperature-3:before,.fa-temperature-three-quarters:before,.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-mobile-android-alt:before,.fa-mobile-screen:before{content:"\f3cf"}.fa-plane-up:before{content:"\e22d"}.fa-piggy-bank:before{content:"\f4d3"}.fa-battery-3:before,.fa-battery-half:before{content:"\f242"}.fa-mountain-city:before{content:"\e52e"}.fa-coins:before{content:"\f51e"}.fa-khanda:before{content:"\f66d"}.fa-sliders-h:before,.fa-sliders:before{content:"\f1de"}.fa-folder-tree:before{content:"\f802"}.fa-network-wired:before{content:"\f6ff"}.fa-map-pin:before{content:"\f276"}.fa-hamsa:before{content:"\f665"}.fa-cent-sign:before{content:"\e3f5"}.fa-flask:before{content:"\f0c3"}.fa-person-pregnant:before{content:"\e31e"}.fa-wand-sparkles:before{content:"\f72b"}.fa-ellipsis-v:before,.fa-ellipsis-vertical:before{content:"\f142"}.fa-ticket:before{content:"\f145"}.fa-power-off:before{content:"\f011"}.fa-long-arrow-alt-right:before,.fa-right-long:before{content:"\f30b"}.fa-flag-usa:before{content:"\f74d"}.fa-laptop-file:before{content:"\e51d"}.fa-teletype:before,.fa-tty:before{content:"\f1e4"}.fa-diagram-next:before{content:"\e476"}.fa-person-rifle:before{content:"\e54e"}.fa-house-medical-circle-exclamation:before{content:"\e512"}.fa-closed-captioning:before{content:"\f20a"}.fa-hiking:before,.fa-person-hiking:before{content:"\f6ec"}.fa-venus-double:before{content:"\f226"}.fa-images:before{content:"\f302"}.fa-calculator:before{content:"\f1ec"}.fa-people-pulling:before{content:"\e535"}.fa-n:before{content:"\4e"}.fa-cable-car:before,.fa-tram:before{content:"\f7da"}.fa-cloud-rain:before{content:"\f73d"}.fa-building-circle-xmark:before{content:"\e4d4"}.fa-ship:before{content:"\f21a"}.fa-arrows-down-to-line:before{content:"\e4b8"}.fa-download:before{content:"\f019"}.fa-face-grin:before,.fa-grin:before{content:"\f580"}.fa-backspace:before,.fa-delete-left:before{content:"\f55a"}.fa-eye-dropper-empty:before,.fa-eye-dropper:before,.fa-eyedropper:before{content:"\f1fb"}.fa-file-circle-check:before{content:"\e5a0"}.fa-forward:before{content:"\f04e"}.fa-mobile-android:before,.fa-mobile-phone:before,.fa-mobile:before{content:"\f3ce"}.fa-face-meh:before,.fa-meh:before{content:"\f11a"}.fa-align-center:before{content:"\f037"}.fa-book-dead:before,.fa-book-skull:before{content:"\f6b7"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-heart-circle-exclamation:before{content:"\e4fe"}.fa-home-alt:before,.fa-home-lg-alt:before,.fa-home:before,.fa-house:before{content:"\f015"}.fa-calendar-week:before{content:"\f784"}.fa-laptop-medical:before{content:"\f812"}.fa-b:before{content:"\42"}.fa-file-medical:before{content:"\f477"}.fa-dice-one:before{content:"\f525"}.fa-kiwi-bird:before{content:"\f535"}.fa-arrow-right-arrow-left:before,.fa-exchange:before{content:"\f0ec"}.fa-redo-alt:before,.fa-rotate-forward:before,.fa-rotate-right:before{content:"\f2f9"}.fa-cutlery:before,.fa-utensils:before{content:"\f2e7"}.fa-arrow-up-wide-short:before,.fa-sort-amount-up:before{content:"\f161"}.fa-mill-sign:before{content:"\e1ed"}.fa-bowl-rice:before{content:"\e2eb"}.fa-skull:before{content:"\f54c"}.fa-broadcast-tower:before,.fa-tower-broadcast:before{content:"\f519"}.fa-truck-pickup:before{content:"\f63c"}.fa-long-arrow-alt-up:before,.fa-up-long:before{content:"\f30c"}.fa-stop:before{content:"\f04d"}.fa-code-merge:before{content:"\f387"}.fa-upload:before{content:"\f093"}.fa-hurricane:before{content:"\f751"}.fa-mound:before{content:"\e52d"}.fa-toilet-portable:before{content:"\e583"}.fa-compact-disc:before{content:"\f51f"}.fa-file-arrow-down:before,.fa-file-download:before{content:"\f56d"}.fa-caravan:before{content:"\f8ff"}.fa-shield-cat:before{content:"\e572"}.fa-bolt:before,.fa-zap:before{content:"\f0e7"}.fa-glass-water:before{content:"\e4f4"}.fa-oil-well:before{content:"\e532"}.fa-vault:before{content:"\e2c5"}.fa-mars:before{content:"\f222"}.fa-toilet:before{content:"\f7d8"}.fa-plane-circle-xmark:before{content:"\e557"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen-sign:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble-sign:before,.fa-ruble:before{content:"\f158"}.fa-sun:before{content:"\f185"}.fa-guitar:before{content:"\f7a6"}.fa-face-laugh-wink:before,.fa-laugh-wink:before{content:"\f59c"}.fa-horse-head:before{content:"\f7ab"}.fa-bore-hole:before{content:"\e4c3"}.fa-industry:before{content:"\f275"}.fa-arrow-alt-circle-down:before,.fa-circle-down:before{content:"\f358"}.fa-arrows-turn-to-dots:before{content:"\e4c1"}.fa-florin-sign:before{content:"\e184"}.fa-arrow-down-short-wide:before,.fa-sort-amount-desc:before,.fa-sort-amount-down-alt:before{content:"\f884"}.fa-less-than:before{content:"\3c"}.fa-angle-down:before{content:"\f107"}.fa-car-tunnel:before{content:"\e4de"}.fa-head-side-cough:before{content:"\e061"}.fa-grip-lines:before{content:"\f7a4"}.fa-thumbs-down:before{content:"\f165"}.fa-user-lock:before{content:"\f502"}.fa-arrow-right-long:before,.fa-long-arrow-right:before{content:"\f178"}.fa-anchor-circle-xmark:before{content:"\e4ac"}.fa-ellipsis-h:before,.fa-ellipsis:before{content:"\f141"}.fa-chess-pawn:before{content:"\f443"}.fa-first-aid:before,.fa-kit-medical:before{content:"\f479"}.fa-person-through-window:before{content:"\e5a9"}.fa-toolbox:before{content:"\f552"}.fa-hands-holding-circle:before{content:"\e4fb"}.fa-bug:before{content:"\f188"}.fa-credit-card-alt:before,.fa-credit-card:before{content:"\f09d"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-hand-holding-hand:before{content:"\e4f7"}.fa-book-open-reader:before,.fa-book-reader:before{content:"\f5da"}.fa-mountain-sun:before{content:"\e52f"}.fa-arrows-left-right-to-line:before{content:"\e4ba"}.fa-dice-d20:before{content:"\f6cf"}.fa-truck-droplet:before{content:"\e58c"}.fa-file-circle-xmark:before{content:"\e5a1"}.fa-temperature-arrow-up:before,.fa-temperature-up:before{content:"\e040"}.fa-medal:before{content:"\f5a2"}.fa-bed:before{content:"\f236"}.fa-h-square:before,.fa-square-h:before{content:"\f0fd"}.fa-podcast:before{content:"\f2ce"}.fa-temperature-4:before,.fa-temperature-full:before,.fa-thermometer-4:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-bell:before{content:"\f0f3"}.fa-superscript:before{content:"\f12b"}.fa-plug-circle-xmark:before{content:"\e560"}.fa-star-of-life:before{content:"\f621"}.fa-phone-slash:before{content:"\f3dd"}.fa-paint-roller:before{content:"\f5aa"}.fa-hands-helping:before,.fa-handshake-angle:before{content:"\f4c4"}.fa-location-dot:before,.fa-map-marker-alt:before{content:"\f3c5"}.fa-file:before{content:"\f15b"}.fa-greater-than:before{content:"\3e"}.fa-person-swimming:before,.fa-swimmer:before{content:"\f5c4"}.fa-arrow-down:before{content:"\f063"}.fa-droplet:before,.fa-tint:before{content:"\f043"}.fa-eraser:before{content:"\f12d"}.fa-earth-america:before,.fa-earth-americas:before,.fa-earth:before,.fa-globe-americas:before{content:"\f57d"}.fa-person-burst:before{content:"\e53b"}.fa-dove:before{content:"\f4ba"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-socks:before{content:"\f696"}.fa-inbox:before{content:"\f01c"}.fa-section:before{content:"\e447"}.fa-gauge-high:before,.fa-tachometer-alt-fast:before,.fa-tachometer-alt:before{content:"\f625"}.fa-envelope-open-text:before{content:"\f658"}.fa-hospital-alt:before,.fa-hospital-wide:before,.fa-hospital:before{content:"\f0f8"}.fa-wine-bottle:before{content:"\f72f"}.fa-chess-rook:before{content:"\f447"}.fa-bars-staggered:before,.fa-reorder:before,.fa-stream:before{content:"\f550"}.fa-dharmachakra:before{content:"\f655"}.fa-hotdog:before{content:"\f80f"}.fa-blind:before,.fa-person-walking-with-cane:before{content:"\f29d"}.fa-drum:before{content:"\f569"}.fa-ice-cream:before{content:"\f810"}.fa-heart-circle-bolt:before{content:"\e4fc"}.fa-fax:before{content:"\f1ac"}.fa-paragraph:before{content:"\f1dd"}.fa-check-to-slot:before,.fa-vote-yea:before{content:"\f772"}.fa-star-half:before{content:"\f089"}.fa-boxes-alt:before,.fa-boxes-stacked:before,.fa-boxes:before{content:"\f468"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-assistive-listening-systems:before,.fa-ear-listen:before{content:"\f2a2"}.fa-tree-city:before{content:"\e587"}.fa-play:before{content:"\f04b"}.fa-font:before{content:"\f031"}.fa-rupiah-sign:before{content:"\e23d"}.fa-magnifying-glass:before,.fa-search:before{content:"\f002"}.fa-ping-pong-paddle-ball:before,.fa-table-tennis-paddle-ball:before,.fa-table-tennis:before{content:"\f45d"}.fa-diagnoses:before,.fa-person-dots-from-line:before{content:"\f470"}.fa-trash-can-arrow-up:before,.fa-trash-restore-alt:before{content:"\f82a"}.fa-naira-sign:before{content:"\e1f6"}.fa-cart-arrow-down:before{content:"\f218"}.fa-walkie-talkie:before{content:"\f8ef"}.fa-file-edit:before,.fa-file-pen:before{content:"\f31c"}.fa-receipt:before{content:"\f543"}.fa-pen-square:before,.fa-pencil-square:before,.fa-square-pen:before{content:"\f14b"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-person-circle-exclamation:before{content:"\e53f"}.fa-chevron-down:before{content:"\f078"}.fa-battery-5:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-skull-crossbones:before{content:"\f714"}.fa-code-compare:before{content:"\e13a"}.fa-list-dots:before,.fa-list-ul:before{content:"\f0ca"}.fa-school-lock:before{content:"\e56f"}.fa-tower-cell:before{content:"\e585"}.fa-down-long:before,.fa-long-arrow-alt-down:before{content:"\f309"}.fa-ranking-star:before{content:"\e561"}.fa-chess-king:before{content:"\f43f"}.fa-person-harassing:before{content:"\e549"}.fa-brazilian-real-sign:before{content:"\e46c"}.fa-landmark-alt:before,.fa-landmark-dome:before{content:"\f752"}.fa-arrow-up:before{content:"\f062"}.fa-television:before,.fa-tv-alt:before,.fa-tv:before{content:"\f26c"}.fa-shrimp:before{content:"\e448"}.fa-list-check:before,.fa-tasks:before{content:"\f0ae"}.fa-jug-detergent:before{content:"\e519"}.fa-circle-user:before,.fa-user-circle:before{content:"\f2bd"}.fa-user-shield:before{content:"\f505"}.fa-wind:before{content:"\f72e"}.fa-car-burst:before,.fa-car-crash:before{content:"\f5e1"}.fa-y:before{content:"\59"}.fa-person-snowboarding:before,.fa-snowboarding:before{content:"\f7ce"}.fa-shipping-fast:before,.fa-truck-fast:before{content:"\f48b"}.fa-fish:before{content:"\f578"}.fa-user-graduate:before{content:"\f501"}.fa-adjust:before,.fa-circle-half-stroke:before{content:"\f042"}.fa-clapperboard:before{content:"\e131"}.fa-circle-radiation:before,.fa-radiation-alt:before{content:"\f7ba"}.fa-baseball-ball:before,.fa-baseball:before{content:"\f433"}.fa-jet-fighter-up:before{content:"\e518"}.fa-diagram-project:before,.fa-project-diagram:before{content:"\f542"}.fa-copy:before{content:"\f0c5"}.fa-volume-mute:before,.fa-volume-times:before,.fa-volume-xmark:before{content:"\f6a9"}.fa-hand-sparkles:before{content:"\e05d"}.fa-grip-horizontal:before,.fa-grip:before{content:"\f58d"}.fa-share-from-square:before,.fa-share-square:before{content:"\f14d"}.fa-child-combatant:before,.fa-child-rifle:before{content:"\e4e0"}.fa-gun:before{content:"\e19b"}.fa-phone-square:before,.fa-square-phone:before{content:"\f098"}.fa-add:before,.fa-plus:before{content:"\2b"}.fa-expand:before{content:"\f065"}.fa-computer:before{content:"\e4e5"}.fa-close:before,.fa-multiply:before,.fa-remove:before,.fa-times:before,.fa-xmark:before{content:"\f00d"}.fa-arrows-up-down-left-right:before,.fa-arrows:before{content:"\f047"}.fa-chalkboard-teacher:before,.fa-chalkboard-user:before{content:"\f51c"}.fa-peso-sign:before{content:"\e222"}.fa-building-shield:before{content:"\e4d8"}.fa-baby:before{content:"\f77c"}.fa-users-line:before{content:"\e592"}.fa-quote-left-alt:before,.fa-quote-left:before{content:"\f10d"}.fa-tractor:before{content:"\f722"}.fa-trash-arrow-up:before,.fa-trash-restore:before{content:"\f829"}.fa-arrow-down-up-lock:before{content:"\e4b0"}.fa-lines-leaning:before{content:"\e51e"}.fa-ruler-combined:before{content:"\f546"}.fa-copyright:before{content:"\f1f9"}.fa-equals:before{content:"\3d"}.fa-blender:before{content:"\f517"}.fa-teeth:before{content:"\f62e"}.fa-ils:before,.fa-shekel-sign:before,.fa-shekel:before,.fa-sheqel-sign:before,.fa-sheqel:before{content:"\f20b"}.fa-map:before{content:"\f279"}.fa-rocket:before{content:"\f135"}.fa-photo-film:before,.fa-photo-video:before{content:"\f87c"}.fa-folder-minus:before{content:"\f65d"}.fa-store:before{content:"\f54e"}.fa-arrow-trend-up:before{content:"\e098"}.fa-plug-circle-minus:before{content:"\e55e"}.fa-sign-hanging:before,.fa-sign:before{content:"\f4d9"}.fa-bezier-curve:before{content:"\f55b"}.fa-bell-slash:before{content:"\f1f6"}.fa-tablet-android:before,.fa-tablet:before{content:"\f3fb"}.fa-school-flag:before{content:"\e56e"}.fa-fill:before{content:"\f575"}.fa-angle-up:before{content:"\f106"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-holly-berry:before{content:"\f7aa"}.fa-chevron-left:before{content:"\f053"}.fa-bacteria:before{content:"\e059"}.fa-hand-lizard:before{content:"\f258"}.fa-notdef:before{content:"\e1fe"}.fa-disease:before{content:"\f7fa"}.fa-briefcase-medical:before{content:"\f469"}.fa-genderless:before{content:"\f22d"}.fa-chevron-right:before{content:"\f054"}.fa-retweet:before{content:"\f079"}.fa-car-alt:before,.fa-car-rear:before{content:"\f5de"}.fa-pump-soap:before{content:"\e06b"}.fa-video-slash:before{content:"\f4e2"}.fa-battery-2:before,.fa-battery-quarter:before{content:"\f243"}.fa-radio:before{content:"\f8d7"}.fa-baby-carriage:before,.fa-carriage-baby:before{content:"\f77d"}.fa-traffic-light:before{content:"\f637"}.fa-thermometer:before{content:"\f491"}.fa-vr-cardboard:before{content:"\f729"}.fa-hand-middle-finger:before{content:"\f806"}.fa-percent:before,.fa-percentage:before{content:"\25"}.fa-truck-moving:before{content:"\f4df"}.fa-glass-water-droplet:before{content:"\e4f5"}.fa-display:before{content:"\e163"}.fa-face-smile:before,.fa-smile:before{content:"\f118"}.fa-thumb-tack:before,.fa-thumbtack:before{content:"\f08d"}.fa-trophy:before{content:"\f091"}.fa-person-praying:before,.fa-pray:before{content:"\f683"}.fa-hammer:before{content:"\f6e3"}.fa-hand-peace:before{content:"\f25b"}.fa-rotate:before,.fa-sync-alt:before{content:"\f2f1"}.fa-spinner:before{content:"\f110"}.fa-robot:before{content:"\f544"}.fa-peace:before{content:"\f67c"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-warehouse:before{content:"\f494"}.fa-arrow-up-right-dots:before{content:"\e4b7"}.fa-splotch:before{content:"\f5bc"}.fa-face-grin-hearts:before,.fa-grin-hearts:before{content:"\f584"}.fa-dice-four:before{content:"\f524"}.fa-sim-card:before{content:"\f7c4"}.fa-transgender-alt:before,.fa-transgender:before{content:"\f225"}.fa-mercury:before{content:"\f223"}.fa-arrow-turn-down:before,.fa-level-down:before{content:"\f149"}.fa-person-falling-burst:before{content:"\e547"}.fa-award:before{content:"\f559"}.fa-ticket-alt:before,.fa-ticket-simple:before{content:"\f3ff"}.fa-building:before{content:"\f1ad"}.fa-angle-double-left:before,.fa-angles-left:before{content:"\f100"}.fa-qrcode:before{content:"\f029"}.fa-clock-rotate-left:before,.fa-history:before{content:"\f1da"}.fa-face-grin-beam-sweat:before,.fa-grin-beam-sweat:before{content:"\f583"}.fa-arrow-right-from-file:before,.fa-file-export:before{content:"\f56e"}.fa-shield-blank:before,.fa-shield:before{content:"\f132"}.fa-arrow-up-short-wide:before,.fa-sort-amount-up-alt:before{content:"\f885"}.fa-house-medical:before{content:"\e3b2"}.fa-golf-ball-tee:before,.fa-golf-ball:before{content:"\f450"}.fa-chevron-circle-left:before,.fa-circle-chevron-left:before{content:"\f137"}.fa-house-chimney-window:before{content:"\e00d"}.fa-pen-nib:before{content:"\f5ad"}.fa-tent-arrow-turn-left:before{content:"\e580"}.fa-tents:before{content:"\e582"}.fa-magic:before,.fa-wand-magic:before{content:"\f0d0"}.fa-dog:before{content:"\f6d3"}.fa-carrot:before{content:"\f787"}.fa-moon:before{content:"\f186"}.fa-wine-glass-alt:before,.fa-wine-glass-empty:before{content:"\f5ce"}.fa-cheese:before{content:"\f7ef"}.fa-yin-yang:before{content:"\f6ad"}.fa-music:before{content:"\f001"}.fa-code-commit:before{content:"\f386"}.fa-temperature-low:before{content:"\f76b"}.fa-biking:before,.fa-person-biking:before{content:"\f84a"}.fa-broom:before{content:"\f51a"}.fa-shield-heart:before{content:"\e574"}.fa-gopuram:before{content:"\f664"}.fa-earth-oceania:before,.fa-globe-oceania:before{content:"\e47b"}.fa-square-xmark:before,.fa-times-square:before,.fa-xmark-square:before{content:"\f2d3"}.fa-hashtag:before{content:"\23"}.fa-expand-alt:before,.fa-up-right-and-down-left-from-center:before{content:"\f424"}.fa-oil-can:before{content:"\f613"}.fa-t:before{content:"\54"}.fa-hippo:before{content:"\f6ed"}.fa-chart-column:before{content:"\e0e3"}.fa-infinity:before{content:"\f534"}.fa-vial-circle-check:before{content:"\e596"}.fa-person-arrow-down-to-line:before{content:"\e538"}.fa-voicemail:before{content:"\f897"}.fa-fan:before{content:"\f863"}.fa-person-walking-luggage:before{content:"\e554"}.fa-arrows-alt-v:before,.fa-up-down:before{content:"\f338"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-calendar:before{content:"\f133"}.fa-trailer:before{content:"\e041"}.fa-bahai:before,.fa-haykal:before{content:"\f666"}.fa-sd-card:before{content:"\f7c2"}.fa-dragon:before{content:"\f6d5"}.fa-shoe-prints:before{content:"\f54b"}.fa-circle-plus:before,.fa-plus-circle:before{content:"\f055"}.fa-face-grin-tongue-wink:before,.fa-grin-tongue-wink:before{content:"\f58b"}.fa-hand-holding:before{content:"\f4bd"}.fa-plug-circle-exclamation:before{content:"\e55d"}.fa-chain-broken:before,.fa-chain-slash:before,.fa-link-slash:before,.fa-unlink:before{content:"\f127"}.fa-clone:before{content:"\f24d"}.fa-person-walking-arrow-loop-left:before{content:"\e551"}.fa-arrow-up-z-a:before,.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-fire-alt:before,.fa-fire-flame-curved:before{content:"\f7e4"}.fa-tornado:before{content:"\f76f"}.fa-file-circle-plus:before{content:"\e494"}.fa-book-quran:before,.fa-quran:before{content:"\f687"}.fa-anchor:before{content:"\f13d"}.fa-border-all:before{content:"\f84c"}.fa-angry:before,.fa-face-angry:before{content:"\f556"}.fa-cookie-bite:before{content:"\f564"}.fa-arrow-trend-down:before{content:"\e097"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-draw-polygon:before{content:"\f5ee"}.fa-balance-scale:before,.fa-scale-balanced:before{content:"\f24e"}.fa-gauge-simple-high:before,.fa-tachometer-fast:before,.fa-tachometer:before{content:"\f62a"}.fa-shower:before{content:"\f2cc"}.fa-desktop-alt:before,.fa-desktop:before{content:"\f390"}.fa-m:before{content:"\4d"}.fa-table-list:before,.fa-th-list:before{content:"\f00b"}.fa-comment-sms:before,.fa-sms:before{content:"\f7cd"}.fa-book:before{content:"\f02d"}.fa-user-plus:before{content:"\f234"}.fa-check:before{content:"\f00c"}.fa-battery-4:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-house-circle-check:before{content:"\e509"}.fa-angle-left:before{content:"\f104"}.fa-diagram-successor:before{content:"\e47a"}.fa-truck-arrow-right:before{content:"\e58b"}.fa-arrows-split-up-and-left:before{content:"\e4bc"}.fa-fist-raised:before,.fa-hand-fist:before{content:"\f6de"}.fa-cloud-moon:before{content:"\f6c3"}.fa-briefcase:before{content:"\f0b1"}.fa-person-falling:before{content:"\e546"}.fa-image-portrait:before,.fa-portrait:before{content:"\f3e0"}.fa-user-tag:before{content:"\f507"}.fa-rug:before{content:"\e569"}.fa-earth-europe:before,.fa-globe-europe:before{content:"\f7a2"}.fa-cart-flatbed-suitcase:before,.fa-luggage-cart:before{content:"\f59d"}.fa-rectangle-times:before,.fa-rectangle-xmark:before,.fa-times-rectangle:before,.fa-window-close:before{content:"\f410"}.fa-baht-sign:before{content:"\e0ac"}.fa-book-open:before{content:"\f518"}.fa-book-journal-whills:before,.fa-journal-whills:before{content:"\f66a"}.fa-handcuffs:before{content:"\e4f8"}.fa-exclamation-triangle:before,.fa-triangle-exclamation:before,.fa-warning:before{content:"\f071"}.fa-database:before{content:"\f1c0"}.fa-arrow-turn-right:before,.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-bottle-droplet:before{content:"\e4c4"}.fa-mask-face:before{content:"\e1d7"}.fa-hill-rockslide:before{content:"\e508"}.fa-exchange-alt:before,.fa-right-left:before{content:"\f362"}.fa-paper-plane:before{content:"\f1d8"}.fa-road-circle-exclamation:before{content:"\e565"}.fa-dungeon:before{content:"\f6d9"}.fa-align-right:before{content:"\f038"}.fa-money-bill-1-wave:before,.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-life-ring:before{content:"\f1cd"}.fa-hands:before,.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-calendar-day:before{content:"\f783"}.fa-ladder-water:before,.fa-swimming-pool:before,.fa-water-ladder:before{content:"\f5c5"}.fa-arrows-up-down:before,.fa-arrows-v:before{content:"\f07d"}.fa-face-grimace:before,.fa-grimace:before{content:"\f57f"}.fa-wheelchair-alt:before,.fa-wheelchair-move:before{content:"\e2ce"}.fa-level-down-alt:before,.fa-turn-down:before{content:"\f3be"}.fa-person-walking-arrow-right:before{content:"\e552"}.fa-envelope-square:before,.fa-square-envelope:before{content:"\f199"}.fa-dice:before{content:"\f522"}.fa-bowling-ball:before{content:"\f436"}.fa-brain:before{content:"\f5dc"}.fa-band-aid:before,.fa-bandage:before{content:"\f462"}.fa-calendar-minus:before{content:"\f272"}.fa-circle-xmark:before,.fa-times-circle:before,.fa-xmark-circle:before{content:"\f057"}.fa-gifts:before{content:"\f79c"}.fa-hotel:before{content:"\f594"}.fa-earth-asia:before,.fa-globe-asia:before{content:"\f57e"}.fa-id-card-alt:before,.fa-id-card-clip:before{content:"\f47f"}.fa-magnifying-glass-plus:before,.fa-search-plus:before{content:"\f00e"}.fa-thumbs-up:before{content:"\f164"}.fa-user-clock:before{content:"\f4fd"}.fa-allergies:before,.fa-hand-dots:before{content:"\f461"}.fa-file-invoice:before{content:"\f570"}.fa-window-minimize:before{content:"\f2d1"}.fa-coffee:before,.fa-mug-saucer:before{content:"\f0f4"}.fa-brush:before{content:"\f55d"}.fa-mask:before{content:"\f6fa"}.fa-magnifying-glass-minus:before,.fa-search-minus:before{content:"\f010"}.fa-ruler-vertical:before{content:"\f548"}.fa-user-alt:before,.fa-user-large:before{content:"\f406"}.fa-train-tram:before{content:"\e5b4"}.fa-user-nurse:before{content:"\f82f"}.fa-syringe:before{content:"\f48e"}.fa-cloud-sun:before{content:"\f6c4"}.fa-stopwatch-20:before{content:"\e06f"}.fa-square-full:before{content:"\f45c"}.fa-magnet:before{content:"\f076"}.fa-jar:before{content:"\e516"}.fa-note-sticky:before,.fa-sticky-note:before{content:"\f249"}.fa-bug-slash:before{content:"\e490"}.fa-arrow-up-from-water-pump:before{content:"\e4b6"}.fa-bone:before{content:"\f5d7"}.fa-user-injured:before{content:"\f728"}.fa-face-sad-tear:before,.fa-sad-tear:before{content:"\f5b4"}.fa-plane:before{content:"\f072"}.fa-tent-arrows-down:before{content:"\e581"}.fa-exclamation:before{content:"\21"}.fa-arrows-spin:before{content:"\e4bb"}.fa-print:before{content:"\f02f"}.fa-try:before,.fa-turkish-lira-sign:before,.fa-turkish-lira:before{content:"\e2bb"}.fa-dollar-sign:before,.fa-dollar:before,.fa-usd:before{content:"\24"}.fa-x:before{content:"\58"}.fa-magnifying-glass-dollar:before,.fa-search-dollar:before{content:"\f688"}.fa-users-cog:before,.fa-users-gear:before{content:"\f509"}.fa-person-military-pointing:before{content:"\e54a"}.fa-bank:before,.fa-building-columns:before,.fa-institution:before,.fa-museum:before,.fa-university:before{content:"\f19c"}.fa-umbrella:before{content:"\f0e9"}.fa-trowel:before{content:"\e589"}.fa-d:before{content:"\44"}.fa-stapler:before{content:"\e5af"}.fa-masks-theater:before,.fa-theater-masks:before{content:"\f630"}.fa-kip-sign:before{content:"\e1c4"}.fa-hand-point-left:before{content:"\f0a5"}.fa-handshake-alt:before,.fa-handshake-simple:before{content:"\f4c6"}.fa-fighter-jet:before,.fa-jet-fighter:before{content:"\f0fb"}.fa-share-alt-square:before,.fa-square-share-nodes:before{content:"\f1e1"}.fa-barcode:before{content:"\f02a"}.fa-plus-minus:before{content:"\e43c"}.fa-video-camera:before,.fa-video:before{content:"\f03d"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-person-circle-check:before{content:"\e53e"}.fa-level-up-alt:before,.fa-turn-up:before{content:"\f3bf"} +.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}:host,:root{--fa-style-family-brands:"Font Awesome 6 Brands";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}.fa-brands,.fab{font-weight:400}.fa-monero:before{content:"\f3d0"}.fa-hooli:before{content:"\f427"}.fa-yelp:before{content:"\f1e9"}.fa-cc-visa:before{content:"\f1f0"}.fa-lastfm:before{content:"\f202"}.fa-shopware:before{content:"\f5b5"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-aws:before{content:"\f375"}.fa-redhat:before{content:"\f7bc"}.fa-yoast:before{content:"\f2b1"}.fa-cloudflare:before{content:"\e07d"}.fa-ups:before{content:"\f7e0"}.fa-wpexplorer:before{content:"\f2de"}.fa-dyalog:before{content:"\f399"}.fa-bity:before{content:"\f37a"}.fa-stackpath:before{content:"\f842"}.fa-buysellads:before{content:"\f20d"}.fa-first-order:before{content:"\f2b0"}.fa-modx:before{content:"\f285"}.fa-guilded:before{content:"\e07e"}.fa-vnv:before{content:"\f40b"}.fa-js-square:before,.fa-square-js:before{content:"\f3b9"}.fa-microsoft:before{content:"\f3ca"}.fa-qq:before{content:"\f1d6"}.fa-orcid:before{content:"\f8d2"}.fa-java:before{content:"\f4e4"}.fa-invision:before{content:"\f7b0"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-centercode:before{content:"\f380"}.fa-glide-g:before{content:"\f2a6"}.fa-drupal:before{content:"\f1a9"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-unity:before{content:"\e049"}.fa-whmcs:before{content:"\f40d"}.fa-rocketchat:before{content:"\f3e8"}.fa-vk:before{content:"\f189"}.fa-untappd:before{content:"\f405"}.fa-mailchimp:before{content:"\f59e"}.fa-css3-alt:before{content:"\f38b"}.fa-reddit-square:before,.fa-square-reddit:before{content:"\f1a2"}.fa-vimeo-v:before{content:"\f27d"}.fa-contao:before{content:"\f26d"}.fa-square-font-awesome:before{content:"\e5ad"}.fa-deskpro:before{content:"\f38f"}.fa-sistrix:before{content:"\f3ee"}.fa-instagram-square:before,.fa-square-instagram:before{content:"\e055"}.fa-battle-net:before{content:"\f835"}.fa-the-red-yeti:before{content:"\f69d"}.fa-hacker-news-square:before,.fa-square-hacker-news:before{content:"\f3af"}.fa-edge:before{content:"\f282"}.fa-napster:before{content:"\f3d2"}.fa-snapchat-square:before,.fa-square-snapchat:before{content:"\f2ad"}.fa-google-plus-g:before{content:"\f0d5"}.fa-artstation:before{content:"\f77a"}.fa-markdown:before{content:"\f60f"}.fa-sourcetree:before{content:"\f7d3"}.fa-google-plus:before{content:"\f2b3"}.fa-diaspora:before{content:"\f791"}.fa-foursquare:before{content:"\f180"}.fa-stack-overflow:before{content:"\f16c"}.fa-github-alt:before{content:"\f113"}.fa-phoenix-squadron:before{content:"\f511"}.fa-pagelines:before{content:"\f18c"}.fa-algolia:before{content:"\f36c"}.fa-red-river:before{content:"\f3e3"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-safari:before{content:"\f267"}.fa-google:before{content:"\f1a0"}.fa-font-awesome-alt:before,.fa-square-font-awesome-stroke:before{content:"\f35c"}.fa-atlassian:before{content:"\f77b"}.fa-linkedin-in:before{content:"\f0e1"}.fa-digital-ocean:before{content:"\f391"}.fa-nimblr:before{content:"\f5a8"}.fa-chromecast:before{content:"\f838"}.fa-evernote:before{content:"\f839"}.fa-hacker-news:before{content:"\f1d4"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-adversal:before{content:"\f36a"}.fa-creative-commons:before{content:"\f25e"}.fa-watchman-monitoring:before{content:"\e087"}.fa-fonticons:before{content:"\f280"}.fa-weixin:before{content:"\f1d7"}.fa-shirtsinbulk:before{content:"\f214"}.fa-codepen:before{content:"\f1cb"}.fa-git-alt:before{content:"\f841"}.fa-lyft:before{content:"\f3c3"}.fa-rev:before{content:"\f5b2"}.fa-windows:before{content:"\f17a"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-square-viadeo:before,.fa-viadeo-square:before{content:"\f2aa"}.fa-meetup:before{content:"\f2e0"}.fa-centos:before{content:"\f789"}.fa-adn:before{content:"\f170"}.fa-cloudsmith:before{content:"\f384"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-dribbble-square:before,.fa-square-dribbble:before{content:"\f397"}.fa-codiepie:before{content:"\f284"}.fa-node:before{content:"\f419"}.fa-mix:before{content:"\f3cb"}.fa-steam:before{content:"\f1b6"}.fa-cc-apple-pay:before{content:"\f416"}.fa-scribd:before{content:"\f28a"}.fa-openid:before{content:"\f19b"}.fa-instalod:before{content:"\e081"}.fa-expeditedssl:before{content:"\f23e"}.fa-sellcast:before{content:"\f2da"}.fa-square-twitter:before,.fa-twitter-square:before{content:"\f081"}.fa-r-project:before{content:"\f4f7"}.fa-delicious:before{content:"\f1a5"}.fa-freebsd:before{content:"\f3a4"}.fa-vuejs:before{content:"\f41f"}.fa-accusoft:before{content:"\f369"}.fa-ioxhost:before{content:"\f208"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-app-store:before{content:"\f36f"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-itunes-note:before{content:"\f3b5"}.fa-golang:before{content:"\e40f"}.fa-kickstarter:before{content:"\f3bb"}.fa-grav:before{content:"\f2d6"}.fa-weibo:before{content:"\f18a"}.fa-uncharted:before{content:"\e084"}.fa-firstdraft:before{content:"\f3a1"}.fa-square-youtube:before,.fa-youtube-square:before{content:"\f431"}.fa-wikipedia-w:before{content:"\f266"}.fa-rendact:before,.fa-wpressr:before{content:"\f3e4"}.fa-angellist:before{content:"\f209"}.fa-galactic-republic:before{content:"\f50c"}.fa-nfc-directional:before{content:"\e530"}.fa-skype:before{content:"\f17e"}.fa-joget:before{content:"\f3b7"}.fa-fedora:before{content:"\f798"}.fa-stripe-s:before{content:"\f42a"}.fa-meta:before{content:"\e49b"}.fa-laravel:before{content:"\f3bd"}.fa-hotjar:before{content:"\f3b1"}.fa-bluetooth-b:before{content:"\f294"}.fa-sticker-mule:before{content:"\f3f7"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-hips:before{content:"\f452"}.fa-behance:before{content:"\f1b4"}.fa-reddit:before{content:"\f1a1"}.fa-discord:before{content:"\f392"}.fa-chrome:before{content:"\f268"}.fa-app-store-ios:before{content:"\f370"}.fa-cc-discover:before{content:"\f1f2"}.fa-wpbeginner:before{content:"\f297"}.fa-confluence:before{content:"\f78d"}.fa-mdb:before{content:"\f8ca"}.fa-dochub:before{content:"\f394"}.fa-accessible-icon:before{content:"\f368"}.fa-ebay:before{content:"\f4f4"}.fa-amazon:before{content:"\f270"}.fa-unsplash:before{content:"\e07c"}.fa-yarn:before{content:"\f7e3"}.fa-square-steam:before,.fa-steam-square:before{content:"\f1b7"}.fa-500px:before{content:"\f26e"}.fa-square-vimeo:before,.fa-vimeo-square:before{content:"\f194"}.fa-asymmetrik:before{content:"\f372"}.fa-font-awesome-flag:before,.fa-font-awesome-logo-full:before,.fa-font-awesome:before{content:"\f2b4"}.fa-gratipay:before{content:"\f184"}.fa-apple:before{content:"\f179"}.fa-hive:before{content:"\e07f"}.fa-gitkraken:before{content:"\f3a6"}.fa-keybase:before{content:"\f4f5"}.fa-apple-pay:before{content:"\f415"}.fa-padlet:before{content:"\e4a0"}.fa-amazon-pay:before{content:"\f42c"}.fa-github-square:before,.fa-square-github:before{content:"\f092"}.fa-stumbleupon:before{content:"\f1a4"}.fa-fedex:before{content:"\f797"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-shopify:before{content:"\e057"}.fa-neos:before{content:"\f612"}.fa-hackerrank:before{content:"\f5f7"}.fa-researchgate:before{content:"\f4f8"}.fa-swift:before{content:"\f8e1"}.fa-angular:before{content:"\f420"}.fa-speakap:before{content:"\f3f3"}.fa-angrycreative:before{content:"\f36e"}.fa-y-combinator:before{content:"\f23b"}.fa-empire:before{content:"\f1d1"}.fa-envira:before{content:"\f299"}.fa-gitlab-square:before,.fa-square-gitlab:before{content:"\e5ae"}.fa-studiovinari:before{content:"\f3f8"}.fa-pied-piper:before{content:"\f2ae"}.fa-wordpress:before{content:"\f19a"}.fa-product-hunt:before{content:"\f288"}.fa-firefox:before{content:"\f269"}.fa-linode:before{content:"\f2b8"}.fa-goodreads:before{content:"\f3a8"}.fa-odnoklassniki-square:before,.fa-square-odnoklassniki:before{content:"\f264"}.fa-jsfiddle:before{content:"\f1cc"}.fa-sith:before{content:"\f512"}.fa-themeisle:before{content:"\f2b2"}.fa-page4:before{content:"\f3d7"}.fa-hashnode:before{content:"\e499"}.fa-react:before{content:"\f41b"}.fa-cc-paypal:before{content:"\f1f4"}.fa-squarespace:before{content:"\f5be"}.fa-cc-stripe:before{content:"\f1f5"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-bitcoin:before{content:"\f379"}.fa-keycdn:before{content:"\f3ba"}.fa-opera:before{content:"\f26a"}.fa-itch-io:before{content:"\f83a"}.fa-umbraco:before{content:"\f8e8"}.fa-galactic-senate:before{content:"\f50d"}.fa-ubuntu:before{content:"\f7df"}.fa-draft2digital:before{content:"\f396"}.fa-stripe:before{content:"\f429"}.fa-houzz:before{content:"\f27c"}.fa-gg:before{content:"\f260"}.fa-dhl:before{content:"\f790"}.fa-pinterest-square:before,.fa-square-pinterest:before{content:"\f0d3"}.fa-xing:before{content:"\f168"}.fa-blackberry:before{content:"\f37b"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-playstation:before{content:"\f3df"}.fa-quinscape:before{content:"\f459"}.fa-less:before{content:"\f41d"}.fa-blogger-b:before{content:"\f37d"}.fa-opencart:before{content:"\f23d"}.fa-vine:before{content:"\f1ca"}.fa-paypal:before{content:"\f1ed"}.fa-gitlab:before{content:"\f296"}.fa-typo3:before{content:"\f42b"}.fa-reddit-alien:before{content:"\f281"}.fa-yahoo:before{content:"\f19e"}.fa-dailymotion:before{content:"\e052"}.fa-affiliatetheme:before{content:"\f36b"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-bootstrap:before{content:"\f836"}.fa-odnoklassniki:before{content:"\f263"}.fa-nfc-symbol:before{content:"\e531"}.fa-ethereum:before{content:"\f42e"}.fa-speaker-deck:before{content:"\f83c"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-patreon:before{content:"\f3d9"}.fa-avianex:before{content:"\f374"}.fa-ello:before{content:"\f5f1"}.fa-gofore:before{content:"\f3a7"}.fa-bimobject:before{content:"\f378"}.fa-facebook-f:before{content:"\f39e"}.fa-google-plus-square:before,.fa-square-google-plus:before{content:"\f0d4"}.fa-mandalorian:before{content:"\f50f"}.fa-first-order-alt:before{content:"\f50a"}.fa-osi:before{content:"\f41a"}.fa-google-wallet:before{content:"\f1ee"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-periscope:before{content:"\f3da"}.fa-fulcrum:before{content:"\f50b"}.fa-cloudscale:before{content:"\f383"}.fa-forumbee:before{content:"\f211"}.fa-mizuni:before{content:"\f3cc"}.fa-schlix:before{content:"\f3ea"}.fa-square-xing:before,.fa-xing-square:before{content:"\f169"}.fa-bandcamp:before{content:"\f2d5"}.fa-wpforms:before{content:"\f298"}.fa-cloudversify:before{content:"\f385"}.fa-usps:before{content:"\f7e1"}.fa-megaport:before{content:"\f5a3"}.fa-magento:before{content:"\f3c4"}.fa-spotify:before{content:"\f1bc"}.fa-optin-monster:before{content:"\f23c"}.fa-fly:before{content:"\f417"}.fa-aviato:before{content:"\f421"}.fa-itunes:before{content:"\f3b4"}.fa-cuttlefish:before{content:"\f38c"}.fa-blogger:before{content:"\f37c"}.fa-flickr:before{content:"\f16e"}.fa-viber:before{content:"\f409"}.fa-soundcloud:before{content:"\f1be"}.fa-digg:before{content:"\f1a6"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-symfony:before{content:"\f83d"}.fa-maxcdn:before{content:"\f136"}.fa-etsy:before{content:"\f2d7"}.fa-facebook-messenger:before{content:"\f39f"}.fa-audible:before{content:"\f373"}.fa-think-peaks:before{content:"\f731"}.fa-bilibili:before{content:"\e3d9"}.fa-erlang:before{content:"\f39d"}.fa-cotton-bureau:before{content:"\f89e"}.fa-dashcube:before{content:"\f210"}.fa-42-group:before,.fa-innosoft:before{content:"\e080"}.fa-stack-exchange:before{content:"\f18d"}.fa-elementor:before{content:"\f430"}.fa-pied-piper-square:before,.fa-square-pied-piper:before{content:"\e01e"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-palfed:before{content:"\f3d8"}.fa-superpowers:before{content:"\f2dd"}.fa-resolving:before{content:"\f3e7"}.fa-xbox:before{content:"\f412"}.fa-searchengin:before{content:"\f3eb"}.fa-tiktok:before{content:"\e07b"}.fa-facebook-square:before,.fa-square-facebook:before{content:"\f082"}.fa-renren:before{content:"\f18b"}.fa-linux:before{content:"\f17c"}.fa-glide:before{content:"\f2a5"}.fa-linkedin:before{content:"\f08c"}.fa-hubspot:before{content:"\f3b2"}.fa-deploydog:before{content:"\f38e"}.fa-twitch:before{content:"\f1e8"}.fa-ravelry:before{content:"\f2d9"}.fa-mixer:before{content:"\e056"}.fa-lastfm-square:before,.fa-square-lastfm:before{content:"\f203"}.fa-vimeo:before{content:"\f40a"}.fa-mendeley:before{content:"\f7b3"}.fa-uniregistry:before{content:"\f404"}.fa-figma:before{content:"\f799"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-dropbox:before{content:"\f16b"}.fa-instagram:before{content:"\f16d"}.fa-cmplid:before{content:"\e360"}.fa-facebook:before{content:"\f09a"}.fa-gripfire:before{content:"\f3ac"}.fa-jedi-order:before{content:"\f50e"}.fa-uikit:before{content:"\f403"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-phabricator:before{content:"\f3db"}.fa-ussunnah:before{content:"\f407"}.fa-earlybirds:before{content:"\f39a"}.fa-trade-federation:before{content:"\f513"}.fa-autoprefixer:before{content:"\f41c"}.fa-whatsapp:before{content:"\f232"}.fa-slideshare:before{content:"\f1e7"}.fa-google-play:before{content:"\f3ab"}.fa-viadeo:before{content:"\f2a9"}.fa-line:before{content:"\f3c0"}.fa-google-drive:before{content:"\f3aa"}.fa-servicestack:before{content:"\f3ec"}.fa-simplybuilt:before{content:"\f215"}.fa-bitbucket:before{content:"\f171"}.fa-imdb:before{content:"\f2d8"}.fa-deezer:before{content:"\e077"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-jira:before{content:"\f7b1"}.fa-docker:before{content:"\f395"}.fa-screenpal:before{content:"\e570"}.fa-bluetooth:before{content:"\f293"}.fa-gitter:before{content:"\f426"}.fa-d-and-d:before{content:"\f38d"}.fa-microblog:before{content:"\e01a"}.fa-cc-diners-club:before{content:"\f24c"}.fa-gg-circle:before{content:"\f261"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-yandex:before{content:"\f413"}.fa-readme:before{content:"\f4d5"}.fa-html5:before{content:"\f13b"}.fa-sellsy:before{content:"\f213"}.fa-sass:before{content:"\f41e"}.fa-wirsindhandwerk:before,.fa-wsh:before{content:"\e2d0"}.fa-buromobelexperte:before{content:"\f37f"}.fa-salesforce:before{content:"\f83b"}.fa-octopus-deploy:before{content:"\e082"}.fa-medapps:before{content:"\f3c6"}.fa-ns8:before{content:"\f3d5"}.fa-pinterest-p:before{content:"\f231"}.fa-apper:before{content:"\f371"}.fa-fort-awesome:before{content:"\f286"}.fa-waze:before{content:"\f83f"}.fa-cc-jcb:before{content:"\f24b"}.fa-snapchat-ghost:before,.fa-snapchat:before{content:"\f2ab"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-rust:before{content:"\e07a"}.fa-wix:before{content:"\f5cf"}.fa-behance-square:before,.fa-square-behance:before{content:"\f1b5"}.fa-supple:before{content:"\f3f9"}.fa-rebel:before{content:"\f1d0"}.fa-css3:before{content:"\f13c"}.fa-staylinked:before{content:"\f3f5"}.fa-kaggle:before{content:"\f5fa"}.fa-space-awesome:before{content:"\e5ac"}.fa-deviantart:before{content:"\f1bd"}.fa-cpanel:before{content:"\f388"}.fa-goodreads-g:before{content:"\f3a9"}.fa-git-square:before,.fa-square-git:before{content:"\f1d2"}.fa-square-tumblr:before,.fa-tumblr-square:before{content:"\f174"}.fa-trello:before{content:"\f181"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-get-pocket:before{content:"\f265"}.fa-perbyte:before{content:"\e083"}.fa-grunt:before{content:"\f3ad"}.fa-weebly:before{content:"\f5cc"}.fa-connectdevelop:before{content:"\f20e"}.fa-leanpub:before{content:"\f212"}.fa-black-tie:before{content:"\f27e"}.fa-themeco:before{content:"\f5c6"}.fa-python:before{content:"\f3e2"}.fa-android:before{content:"\f17b"}.fa-bots:before{content:"\e340"}.fa-free-code-camp:before{content:"\f2c5"}.fa-hornbill:before{content:"\f592"}.fa-js:before{content:"\f3b8"}.fa-ideal:before{content:"\e013"}.fa-git:before{content:"\f1d3"}.fa-dev:before{content:"\f6cc"}.fa-sketch:before{content:"\f7c6"}.fa-yandex-international:before{content:"\f414"}.fa-cc-amex:before{content:"\f1f3"}.fa-uber:before{content:"\f402"}.fa-github:before{content:"\f09b"}.fa-php:before{content:"\f457"}.fa-alipay:before{content:"\f642"}.fa-youtube:before{content:"\f167"}.fa-skyatlas:before{content:"\f216"}.fa-firefox-browser:before{content:"\e007"}.fa-replyd:before{content:"\f3e6"}.fa-suse:before{content:"\f7d6"}.fa-jenkins:before{content:"\f3b6"}.fa-twitter:before{content:"\f099"}.fa-rockrms:before{content:"\f3e9"}.fa-pinterest:before{content:"\f0d2"}.fa-buffer:before{content:"\f837"}.fa-npm:before{content:"\f3d4"}.fa-yammer:before{content:"\f840"}.fa-btc:before{content:"\f15a"}.fa-dribbble:before{content:"\f17d"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-internet-explorer:before{content:"\f26b"}.fa-stubber:before{content:"\e5c7"}.fa-telegram-plane:before,.fa-telegram:before{content:"\f2c6"}.fa-old-republic:before{content:"\f510"}.fa-odysee:before{content:"\e5c6"}.fa-square-whatsapp:before,.fa-whatsapp-square:before{content:"\f40c"}.fa-node-js:before{content:"\f3d3"}.fa-edge-legacy:before{content:"\e078"}.fa-slack-hash:before,.fa-slack:before{content:"\f198"}.fa-medrt:before{content:"\f3c8"}.fa-usb:before{content:"\f287"}.fa-tumblr:before{content:"\f173"}.fa-vaadin:before{content:"\f408"}.fa-quora:before{content:"\f2c4"}.fa-reacteurope:before{content:"\f75d"}.fa-medium-m:before,.fa-medium:before{content:"\f23a"}.fa-amilia:before{content:"\f36d"}.fa-mixcloud:before{content:"\f289"}.fa-flipboard:before{content:"\f44d"}.fa-viacoin:before{content:"\f237"}.fa-critical-role:before{content:"\f6c9"}.fa-sitrox:before{content:"\e44a"}.fa-discourse:before{content:"\f393"}.fa-joomla:before{content:"\f1aa"}.fa-mastodon:before{content:"\f4f6"}.fa-airbnb:before{content:"\f834"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-buy-n-large:before{content:"\f8a6"}.fa-gulp:before{content:"\f3ae"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-strava:before{content:"\f428"}.fa-ember:before{content:"\f423"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-teamspeak:before{content:"\f4f9"}.fa-pushed:before{content:"\f3e1"}.fa-wordpress-simple:before{content:"\f411"}.fa-nutritionix:before{content:"\f3d6"}.fa-wodu:before{content:"\e088"}.fa-google-pay:before{content:"\e079"}.fa-intercom:before{content:"\f7af"}.fa-zhihu:before{content:"\f63f"}.fa-korvue:before{content:"\f42f"}.fa-pix:before{content:"\e43a"}.fa-steam-symbol:before{content:"\f3f6"}:host,:root{--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}.fa-regular,.far{font-weight:400}:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}.fa-solid,.fas{font-weight:900}@font-face{font-family:"Font Awesome 5 Brands";font-display:block;font-weight:400;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:900;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:400;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype");unicode-range:u+f003,u+f006,u+f014,u+f016-f017,u+f01a-f01b,u+f01d,u+f022,u+f03e,u+f044,u+f046,u+f05c-f05d,u+f06e,u+f070,u+f087-f088,u+f08a,u+f094,u+f096-f097,u+f09d,u+f0a0,u+f0a2,u+f0a4-f0a7,u+f0c5,u+f0c7,u+f0e5-f0e6,u+f0eb,u+f0f6-f0f8,u+f10c,u+f114-f115,u+f118-f11a,u+f11c-f11d,u+f133,u+f147,u+f14e,u+f150-f152,u+f185-f186,u+f18e,u+f190-f192,u+f196,u+f1c1-f1c9,u+f1d9,u+f1db,u+f1e3,u+f1ea,u+f1f7,u+f1f9,u+f20a,u+f247-f248,u+f24a,u+f24d,u+f255-f25b,u+f25d,u+f271-f274,u+f278,u+f27b,u+f28c,u+f28e,u+f29c,u+f2b5,u+f2b7,u+f2ba,u+f2bc,u+f2be,u+f2c0-f2c1,u+f2c3,u+f2d0,u+f2d2,u+f2d4,u+f2dc}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-v4compatibility.woff2) format("woff2"),url(../webfonts/fa-v4compatibility.ttf) format("truetype");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a} \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/fontawesome/webfonts/fa-solid-900.woff b/wp-content/themes/nenghui-energy-theme-cn/assets/fontawesome/webfonts/fa-solid-900.woff new file mode 100644 index 0000000..e69de29 diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/fontawesome/webfonts/fa-solid-900.woff2 b/wp-content/themes/nenghui-energy-theme-cn/assets/fontawesome/webfonts/fa-solid-900.woff2 new file mode 100644 index 0000000..5c16cd3 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/fontawesome/webfonts/fa-solid-900.woff2 differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/FWas.jpg b/wp-content/themes/nenghui-energy-theme-cn/assets/images/FWas.jpg new file mode 100644 index 0000000..f936b1a Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/FWas.jpg differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/Investor-Relations.webp b/wp-content/themes/nenghui-energy-theme-cn/assets/images/Investor-Relations.webp new file mode 100644 index 0000000..0b16e8f Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/Investor-Relations.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/about-features.webp b/wp-content/themes/nenghui-energy-theme-cn/assets/images/about-features.webp new file mode 100644 index 0000000..2c7f5ec Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/about-features.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/about-nenghui-banner.webp b/wp-content/themes/nenghui-energy-theme-cn/assets/images/about-nenghui-banner.webp new file mode 100644 index 0000000..4cfc86e Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/about-nenghui-banner.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/about-pic.webp b/wp-content/themes/nenghui-energy-theme-cn/assets/images/about-pic.webp new file mode 100644 index 0000000..27ba974 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/about-pic.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (1).png b/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (1).png new file mode 100644 index 0000000..ad1433f Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (1).png differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (10).png b/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (10).png new file mode 100644 index 0000000..5e934fc Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (10).png differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (11).png b/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (11).png new file mode 100644 index 0000000..a4eccf4 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (11).png differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (12).png b/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (12).png new file mode 100644 index 0000000..ed3e98d Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (12).png differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (13).png b/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (13).png new file mode 100644 index 0000000..a2d5c2b Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (13).png differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (14).png b/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (14).png new file mode 100644 index 0000000..e209ffe Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (14).png differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (15).png b/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (15).png new file mode 100644 index 0000000..11d587e Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (15).png differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (2).png b/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (2).png new file mode 100644 index 0000000..133d866 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (2).png differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (3).png b/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (3).png new file mode 100644 index 0000000..1dd9179 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (3).png differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (4).png b/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (4).png new file mode 100644 index 0000000..056038d Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (4).png differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (5).png b/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (5).png new file mode 100644 index 0000000..31298ab Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (5).png differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (6).png b/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (6).png new file mode 100644 index 0000000..e2fb6c7 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (6).png differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (7).png b/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (7).png new file mode 100644 index 0000000..934ffeb Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (7).png differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (8).png b/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (8).png new file mode 100644 index 0000000..2f26331 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (8).png differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (9).png b/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (9).png new file mode 100644 index 0000000..447a6c0 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/企业荣誉 (9).png differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/安全生产许可.jpg b/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/安全生产许可.jpg new file mode 100644 index 0000000..97baf01 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/安全生产许可.jpg differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/工程总承包资质证书.jpg b/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/工程总承包资质证书.jpg new file mode 100644 index 0000000..0dafc05 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/工程总承包资质证书.jpg differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/工程设计资质证书.jpg b/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/工程设计资质证书.jpg new file mode 100644 index 0000000..c553a03 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/工程设计资质证书.jpg differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/承装电力设施许可证.jpg b/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/承装电力设施许可证.jpg new file mode 100644 index 0000000..5624e4e Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/certificates/承装电力设施许可证.jpg differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/cooperate/da-tang.webp b/wp-content/themes/nenghui-energy-theme-cn/assets/images/cooperate/da-tang.webp new file mode 100644 index 0000000..b25880f Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/cooperate/da-tang.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/cooperate/guodiantou.webp b/wp-content/themes/nenghui-energy-theme-cn/assets/images/cooperate/guodiantou.webp new file mode 100644 index 0000000..43a236c Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/cooperate/guodiantou.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/cooperate/guojianengyuan.webp b/wp-content/themes/nenghui-energy-theme-cn/assets/images/cooperate/guojianengyuan.webp new file mode 100644 index 0000000..c211e16 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/cooperate/guojianengyuan.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/cooperate/guowang.webp b/wp-content/themes/nenghui-energy-theme-cn/assets/images/cooperate/guowang.webp new file mode 100644 index 0000000..0e58e46 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/cooperate/guowang.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/cooperate/huadian.webp b/wp-content/themes/nenghui-energy-theme-cn/assets/images/cooperate/huadian.webp new file mode 100644 index 0000000..4052c40 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/cooperate/huadian.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/cooperate/huaneng.webp b/wp-content/themes/nenghui-energy-theme-cn/assets/images/cooperate/huaneng.webp new file mode 100644 index 0000000..f4988a2 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/cooperate/huaneng.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/cooperate/nanfangdianwang.webp b/wp-content/themes/nenghui-energy-theme-cn/assets/images/cooperate/nanfangdianwang.webp new file mode 100644 index 0000000..d8e2e18 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/cooperate/nanfangdianwang.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/cooperate/nengyuanjiantou.webp b/wp-content/themes/nenghui-energy-theme-cn/assets/images/cooperate/nengyuanjiantou.webp new file mode 100644 index 0000000..c46d757 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/cooperate/nengyuanjiantou.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/default-post.jpg b/wp-content/themes/nenghui-energy-theme-cn/assets/images/default-post.jpg new file mode 100644 index 0000000..04f61a3 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/images/default-post.jpg @@ -0,0 +1,13 @@ + + + + + + + + + + + + 默认文章图片 + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/default-post.svg b/wp-content/themes/nenghui-energy-theme-cn/assets/images/default-post.svg new file mode 100644 index 0000000..c077baf --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/images/default-post.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/features-bg.webp b/wp-content/themes/nenghui-energy-theme-cn/assets/images/features-bg.webp new file mode 100644 index 0000000..0c9425d Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/features-bg.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/footer-banner-bg.webp b/wp-content/themes/nenghui-energy-theme-cn/assets/images/footer-banner-bg.webp new file mode 100644 index 0000000..4c4a570 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/footer-banner-bg.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/henghui-xt.webp b/wp-content/themes/nenghui-energy-theme-cn/assets/images/henghui-xt.webp new file mode 100644 index 0000000..c8e172d Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/henghui-xt.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/kechuxu-bg.webp b/wp-content/themes/nenghui-energy-theme-cn/assets/images/kechuxu-bg.webp new file mode 100644 index 0000000..6672693 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/kechuxu-bg.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/logo.svg b/wp-content/themes/nenghui-energy-theme-cn/assets/images/logo.svg new file mode 100644 index 0000000..2232b95 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/images/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/nenghui-core-bg.webp b/wp-content/themes/nenghui-energy-theme-cn/assets/images/nenghui-core-bg.webp new file mode 100644 index 0000000..0f14297 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/nenghui-core-bg.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/phone-carousel-imgs/phone-001.png b/wp-content/themes/nenghui-energy-theme-cn/assets/images/phone-carousel-imgs/phone-001.png new file mode 100644 index 0000000..fc28b66 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/phone-carousel-imgs/phone-001.png differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/phone-carousel-imgs/phone-002.png b/wp-content/themes/nenghui-energy-theme-cn/assets/images/phone-carousel-imgs/phone-002.png new file mode 100644 index 0000000..970f9e2 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/phone-carousel-imgs/phone-002.png differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/phone-carousel-imgs/phone-003.png b/wp-content/themes/nenghui-energy-theme-cn/assets/images/phone-carousel-imgs/phone-003.png new file mode 100644 index 0000000..693d320 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/phone-carousel-imgs/phone-003.png differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/phone-carousel-imgs/phone-004.png b/wp-content/themes/nenghui-energy-theme-cn/assets/images/phone-carousel-imgs/phone-004.png new file mode 100644 index 0000000..f36df5c Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/phone-carousel-imgs/phone-004.png differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/phone-carousel-imgs/phone-005.png b/wp-content/themes/nenghui-energy-theme-cn/assets/images/phone-carousel-imgs/phone-005.png new file mode 100644 index 0000000..8b5e62a Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/phone-carousel-imgs/phone-005.png differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/phone-carousel-imgs/phone-bg.png b/wp-content/themes/nenghui-energy-theme-cn/assets/images/phone-carousel-imgs/phone-bg.png new file mode 100644 index 0000000..e05a11e Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/phone-carousel-imgs/phone-bg.png differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/pic-1.png b/wp-content/themes/nenghui-energy-theme-cn/assets/images/pic-1.png new file mode 100644 index 0000000..55eb867 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/pic-1.png differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/pic-2.png b/wp-content/themes/nenghui-energy-theme-cn/assets/images/pic-2.png new file mode 100644 index 0000000..b5e7183 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/pic-2.png differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/pic-3.png b/wp-content/themes/nenghui-energy-theme-cn/assets/images/pic-3.png new file mode 100644 index 0000000..4956f22 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/pic-3.png differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/search-bg.webp b/wp-content/themes/nenghui-energy-theme-cn/assets/images/search-bg.webp new file mode 100644 index 0000000..79702df Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/search-bg.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/solution-1.webp b/wp-content/themes/nenghui-energy-theme-cn/assets/images/solution-1.webp new file mode 100644 index 0000000..5369d7b Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/solution-1.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/solution-2.webp b/wp-content/themes/nenghui-energy-theme-cn/assets/images/solution-2.webp new file mode 100644 index 0000000..fe0c32c Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/solution-2.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/solution-3.webp b/wp-content/themes/nenghui-energy-theme-cn/assets/images/solution-3.webp new file mode 100644 index 0000000..3dfe02b Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/solution-3.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/video-icon.webp b/wp-content/themes/nenghui-energy-theme-cn/assets/images/video-icon.webp new file mode 100644 index 0000000..009d1a3 Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/video-icon.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/images/video.webp b/wp-content/themes/nenghui-energy-theme-cn/assets/images/video.webp new file mode 100644 index 0000000..a28b2dd Binary files /dev/null and b/wp-content/themes/nenghui-energy-theme-cn/assets/images/video.webp differ diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/js/ScrollTrigger.min.js b/wp-content/themes/nenghui-energy-theme-cn/assets/js/ScrollTrigger.min.js new file mode 100644 index 0000000..070c4cd --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/js/ScrollTrigger.min.js @@ -0,0 +1,11 @@ +/*! + * ScrollTrigger 3.12.2 + * https://greensock.com + * + * @license Copyright 2023, GreenSock. All rights reserved. + * Subject to the terms at https://greensock.com/standard-license or for Club GreenSock members, the agreement issued with that membership. + * @author: Jack Doyle, jack@greensock.com + */ + +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e=e||self).window=e.window||{})}(this,function(e){"use strict";function _defineProperties(e,t){for(var r=0;r=Math.abs(r)?t:r}function O(){(Ae=Se.core.globals().ScrollTrigger)&&Ae.core&&function _integrate(){var e=Ae.core,r=e.bridge||{},t=e._scrollers,n=e._proxies;t.push.apply(t,ze),n.push.apply(n,Ie),ze=t,Ie=n,i=function _bridge(e,t){return r[e](t)}}()}function P(e){return(Se=e||r())&&"undefined"!=typeof document&&document.body&&(Te=window,Pe=(Ce=document).documentElement,Me=Ce.body,t=[Te,Ce,Pe,Me],Se.utils.clamp,De=Se.core.context||function(){},Oe="onpointerenter"in Me?"pointer":"mouse",Ee=E.isTouch=Te.matchMedia&&Te.matchMedia("(hover: none), (pointer: coarse)").matches?1:"ontouchstart"in Te||0=o,n=Math.abs(t)>=o;k&&(r||n)&&k(se,e,t,be,me),r&&(m&&0Math.abs(t)?"x":"y",ie=!0),"y"!==ae&&(be[2]+=e,se._vx.update(e,!0)),"x"!==ae&&(me[2]+=t,se._vy.update(t,!0)),n?ee=ee||requestAnimationFrame(bf):bf()}function ef(e){if(!_e(e,1)){var t=(e=M(e,s)).clientX,r=e.clientY,n=t-se.x,o=r-se.y,i=se.isDragging;se.x=t,se.y=r,(i||Math.abs(se.startX-t)>=a||Math.abs(se.startY-r)>=a)&&(h&&(re=!0),i||(se.isDragging=!0),df(n,o),i||p&&p(se))}}function hf(e){return e.touches&&1=e)return a[n];return a[n-1]}for(n=a.length,e+=r;n--;)if(a[n]<=e)return a[n];return a[0]}:function(e,t,r){void 0===r&&(r=.001);var n=i(e);return!t||Math.abs(n-e)r&&(n*=t/100),e=e.substr(0,r-1)),e=n+(e in q?q[e]*t:~e.indexOf("%")?parseFloat(e)*t/100:parseFloat(e)||0)}return e}function Bb(e,t,r,n,o,i,a,s){var l=o.startColor,c=o.endColor,u=o.fontSize,f=o.indent,d=o.fontWeight,p=Xe.createElement("div"),g=Ja(r)||"fixed"===z(r,"pinType"),h=-1!==e.indexOf("scroller"),v=g?We:r,b=-1!==e.indexOf("start"),m=b?l:c,y="border-color:"+m+";font-size:"+u+";color:"+m+";font-weight:"+d+";pointer-events:none;white-space:nowrap;font-family:sans-serif,Arial;z-index:1000;padding:4px 8px;border-width:0;border-style:solid;";return y+="position:"+((h||s)&&g?"fixed;":"absolute;"),!h&&!s&&g||(y+=(n===He?D:I)+":"+(i+parseFloat(f))+"px;"),a&&(y+="box-sizing:border-box;text-align:left;width:"+a.offsetWidth+"px;"),p._isStart=b,p.setAttribute("class","gsap-marker-"+e+(t?" marker-"+t:"")),p.style.cssText=y,p.innerText=t||0===t?e+"-"+t:e,v.children[0]?v.insertBefore(p,v.children[0]):v.appendChild(p),p._offset=p["offset"+n.op.d2],H(p,0,n,b),p}function Gb(){return 34We.clientWidth)||(ze.cache++,v?k=k||requestAnimationFrame(Q):Q(),st||V("scrollStart"),st=at())}function Ib(){y=Ne.innerWidth,m=Ne.innerHeight}function Jb(){ze.cache++,je||h||Xe.fullscreenElement||Xe.webkitFullscreenElement||b&&y===Ne.innerWidth&&!(Math.abs(Ne.innerHeight-m)>.25*Ne.innerHeight)||c.restart(!0)}function Mb(){return vb(re,"scrollEnd",Mb)||Pt(!0)}function Pb(e){for(var t=0;tt)&&e.setPositions(e.start,Math.max(e.start+1,t),!0)}),r.forEach(function(e){return e&&e.render&&e.render(-1)}),ze.forEach(function(e){Ra(e)&&(e.smooth&&requestAnimationFrame(function(){return e.target.style.scrollBehavior="smooth"}),e.rec&&e(e.rec))}),Rb(_,1),c.pause(),Ct++,Q(rt=2),kt.forEach(function(e){return Ra(e.vars.onRefresh)&&e.vars.onRefresh(e)}),rt=re.isRefreshing=!1,V("refresh")}else ub(re,"scrollEnd",Mb)},j=0,Mt=1,Q=function _updateAll(e){if(!rt||2===e){re.isUpdating=!0,ot&&ot.update(0);var t=kt.length,r=at(),n=50<=r-T,o=t&&kt[0].scroll();if(Mt=o=F})},ke.update=function(e,t,r){if(!de||r||e){var n,o,i,a,s,l,c,u=!0===rt?re:ke.scroll(),f=e?0:(u-D)/N,d=f<0?0:1=Oa(be,he),fe)if(e||!n&&!l)lc(ae,V);else{var g=_t(ae,!0),h=u-D;lc(ae,We,g.top+(he===He?h:0)+xt,g.left+(he===He?0:h)+xt)}Et(n||l?W:G),Z&&d<1&&n||b(j+(1!==d||l?0:Q))}}else b(Ga(j+Q*d));!ue||A.tween||je||it||te.restart(!0),T&&(s||ce&&d&&(d<1||!tt))&&Ge(T.targets).forEach(function(e){return e.classList[n||ce?"add":"remove"](T.className)}),!k||ve||e||k(ke),a&&!je?(ve&&(c&&("complete"===i?O.pause().totalProgress(1):"reset"===i?O.restart(!0).pause():"restart"===i?O.restart(!0):O[i]()),k&&k(ke)),!s&&tt||(C&&s&&Va(ke,C),xe[o]&&Va(ke,xe[o]),ce&&(1===d?ke.kill(!1,1):xe[o]=0),s||xe[o=1===d?1:3]&&Va(ke,xe[o])),pe&&!n&&Math.abs(ke.getVelocity())>(Sa(pe)?pe:2500)&&(Ua(ke.callbackAnimation),ee?ee.progress(1):Ua(O,"reverse"===i?1:!d,1))):ve&&k&&!je&&k(ke)}if(x){var v=de?u/de.duration()*(de._caScrollDist||0):u;y(v+(q._isFlipped?1:0)),x(v)}S&&S(-u/de.duration()*(de._caScrollDist||0))}},ke.enable=function(e,t){ke.enabled||(ke.enabled=!0,ub(be,"resize",Jb),me||ub(be,"scroll",Hb),Te&&ub(ScrollTrigger,"refreshInit",Te),!1!==e&&(ke.progress=Oe=0,R=B=Me=Ae()),!1!==t&&ke.refresh())},ke.getTween=function(e){return e&&A?A.tween:ee},ke.setPositions=function(e,t,r,n){if(de){var o=de.scrollTrigger,i=de.duration(),a=o.end-o.start;e=o.start+a*e/i,t=o.start+a*t/i}ke.refresh(!1,!1,{start:Ba(e,r&&!!ke._startClamp),end:Ba(t,r&&!!ke._endClamp)},n),ke.update()},ke.adjustPinSpacing=function(e){if($&&e){var t=$.indexOf(he.d)+1;$[t]=parseFloat($[t])+e+xt,$[1]=parseFloat($[1])+e+xt,Et($)}},ke.disable=function(e,t){if(ke.enabled&&(!1!==e&&ke.revert(!0,!0),ke.enabled=ke.isActive=!1,t||ee&&ee.pause(),re=0,n&&(n.uncache=1),Te&&vb(ScrollTrigger,"refreshInit",Te),te&&(te.pause(),A.tween&&A.tween.kill()&&(A.tween=0)),!me)){for(var r=kt.length;r--;)if(kt[r].scroller===be&&kt[r]!==ke)return;vb(be,"resize",Jb),me||vb(be,"scroll",Hb)}},ke.kill=function(e,t){ke.disable(e,t),ee&&!t&&ee.kill(),a&&delete Tt[a];var r=kt.indexOf(ke);0<=r&&kt.splice(r,1),r===Qe&&0i&&(b()>i?a.progress(1)&&b(i):a.resetTo("scrollY",i))}Ta(e)||(e={}),e.preventDefault=e.isNormalizer=e.allowClicks=!0,e.type||(e.type="wheel,touch"),e.debounce=!!e.debounce,e.id=e.id||"normalizer";var n,i,l,o,a,c,u,s,f=e.normalizeScrollX,t=e.momentum,r=e.allowNestedScroll,d=e.onRelease,p=J(e.target)||Je,g=Le.core.globals().ScrollSmoother,h=g&&g.get(),v=R&&(e.content&&J(e.content)||h&&!1!==e.content&&!h.smooth()&&h.content()),b=K(p,He),m=K(p,qe),y=1,x=(E.isTouch&&Ne.visualViewport?Ne.visualViewport.scale*Ne.visualViewport.width:Ne.outerWidth)/Ne.innerWidth,_=0,w=Ra(t)?function(){return t(n)}:function(){return t||2.8},S=uc(p,e.type,!0,r),k=Fa,T=Fa;return v&&Le.set(v,{y:"+=0"}),e.ignoreCheck=function(e){return R&&"touchmove"===e.type&&function ignoreDrag(){if(o){requestAnimationFrame(rq);var e=Ga(n.deltaY/2),t=T(b.v-e);if(v&&t!==b.v+b.offset){b.offset=t-b.v;var r=Ga((parseFloat(v&&v._gsap.y)||0)-b.offset);v.style.transform="matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, "+r+", 0, 1)",v._gsap.y=r+"px",b.cacheID=ze.cache,Q()}return!0}b.offset&&vq(),o=!0}()||1.05=i||i-1<=r)&&Le.to({},{onUpdate:Bq,duration:o})}else s.restart(!0);d&&d(e)},e.onWheel=function(){a._ts&&a.pause(),1e3":t.push(e.outerHTML),e=e.nextSibling;for(E=t.length;E--;)"&"===t[E]&&t.splice(E,1,"&");return t}function emojiSafeSplit(D,u,F,C){if(D+="",F&&(D=D.trim?D.trim():D.replace(i,"")),u&&""!==u)return D.replace(/>/g,">").replace(/"===e?">":"<"===e?"<":!C||" "!==e||" "!==D.charAt(B-1)&&" "!==D.charAt(B+1)?e:" ");return t}var u,g,F={version:"3.12.2",name:"text",init:function init(D,u,F){"object"!=typeof u&&(u={value:u});var C,E,e,t,n,B,i,r,A=D.nodeName.toUpperCase(),s=this,l=u.newClass,o=u.oldClass,a=u.preserveSpaces,p=u.rtl,f=s.delimiter=u.delimiter||"",d=s.fillChar=u.fillChar||(u.padSpace?" ":"");if(s.svg=D.getBBox&&("TEXT"===A||"TSPAN"===A),!("innerHTML"in D||s.svg))return!1;if(s.target=D,"value"in u){for(e=splitInnerHTML(D,f,!1,a),(g=g||document.createElement("div")).innerHTML=u.value,E=splitInnerHTML(g,f,!1,a),s.from=F._from,!s.from&&!p||p&&s.from||(A=e,e=E,E=A),s.hasClass=!(!l&&!o),s.newClass=p?o:l,s.oldClass=p?l:o,C=(A=e.length-E.length)<0?e:E,A<0&&(A=-A);-1<--A;)C.push(d);if("diff"===u.type){for(n=[],B=[],i="",A=t=0;A":"")+e.slice(0,a).join(i)+(F?"":"")+(C?"":"")+i+s.slice(a).join(i)+(C?"":"")):e.slice(0,a).join(i)+i+s.slice(a).join(i),u.svg?r.textContent=E:r.innerHTML=" "===A&&~E.indexOf(" ")?E.split(" ").join("  "):E}};F.splitInnerHTML=splitInnerHTML,F.emojiSafeSplit=emojiSafeSplit,F.getText=function getText(D){var u=D.nodeType,F="";if(1===u||9===u||11===u){if("string"==typeof D.textContent)return D.textContent;for(D=D.firstChild;D;D=D.nextSibling)F+=getText(D)}else if(3===u||4===u)return D.nodeValue;return F},function _getGSAP(){return u||"undefined"!=typeof window&&(u=window.gsap)&&u.registerPlugin&&u}()&&u.registerPlugin(F),D.TextPlugin=F,D.default=F;if (typeof(window)==="undefined"||window!==D){Object.defineProperty(D,"__esModule",{value:!0})} else {delete D.default}}); + diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/js/about-features.js b/wp-content/themes/nenghui-energy-theme-cn/assets/js/about-features.js new file mode 100644 index 0000000..0adba26 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/js/about-features.js @@ -0,0 +1,103 @@ +// 关于页面特色区块数字计数动画 +(function() { + 'use strict'; + + // 数字计数动画函数 + function animateNumber(element, targetNumber, duration = 2000) { + const startNumber = 0; + const increment = targetNumber / (duration / 16); // 60fps + let currentNumber = startNumber; + + const timer = setInterval(() => { + currentNumber += increment; + + if (currentNumber >= targetNumber) { + currentNumber = targetNumber; + clearInterval(timer); + } + + // 格式化数字显示 + let displayNumber = Math.floor(currentNumber); + let displayText = ''; + + if (element.textContent.includes('+')) { + displayText = displayNumber + '+项'; + } else if (element.textContent.includes('项')) { + displayText = displayNumber + '项'; + } else { + displayText = displayNumber.toString(); + } + + element.textContent = displayText; + }, 16); + } + + // 提取数字的函数 + function extractNumber(text) { + const match = text.match(/\d+/); + return match ? parseInt(match[0]) : 0; + } + + // 检查元素是否在视窗中 + function isElementInViewport(el) { + const rect = el.getBoundingClientRect(); + return ( + rect.top >= 0 && + rect.left >= 0 && + rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && + rect.right <= (window.innerWidth || document.documentElement.clientWidth) + ); + } + + // 初始化计数动画 + function initCountAnimation() { + const statNumbers = document.querySelectorAll('.about-stat-number'); + let animated = false; + + function checkAndAnimate() { + if (animated) return; + + const featuresSection = document.querySelector('.about-features-section'); + if (!featuresSection) return; + + const rect = featuresSection.getBoundingClientRect(); + const isVisible = rect.top < window.innerHeight && rect.bottom > 0; + + if (isVisible) { + animated = true; + + statNumbers.forEach((element, index) => { + const originalText = element.textContent; + const targetNumber = extractNumber(originalText); + + // 添加动画类 + element.classList.add('animate'); + + // 延迟启动动画 + setTimeout(() => { + animateNumber(element, targetNumber, 2000); + }, index * 200); + }); + + // 移除滚动监听器 + window.removeEventListener('scroll', checkAndAnimate); + window.removeEventListener('resize', checkAndAnimate); + } + } + + // 监听滚动和窗口大小变化 + window.addEventListener('scroll', checkAndAnimate); + window.addEventListener('resize', checkAndAnimate); + + // 初始检查 + checkAndAnimate(); + } + + // DOM加载完成后初始化 + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', initCountAnimation); + } else { + initCountAnimation(); + } + +})(); \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/js/block-cooperate.js b/wp-content/themes/nenghui-energy-theme-cn/assets/js/block-cooperate.js new file mode 100644 index 0000000..9679224 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/js/block-cooperate.js @@ -0,0 +1,229 @@ +/** + * Block Cooperate JavaScript + * 合作伙伴区块交互功能 + * + * @package Nenghui Energy Theme + * @since 1.0.0 + */ + +(function($) { + 'use strict'; + + /** + * 合作伙伴区块初始化 + */ + function initCooperateBlock() { + const $cooperateBlocks = $('.cooperate-block'); + + if ($cooperateBlocks.length === 0) { + return; + } + + $cooperateBlocks.each(function() { + const $block = $(this); + const $carousel = $block.find('.cooperate-carousel'); + const $slides = $block.find('.carousel-slide'); + + // 添加淡入动画 + addFadeInAnimation($block); + + // 添加悬停效果增强 + addHoverEffects($slides); + + // 添加键盘导航支持 + addKeyboardNavigation($slides); + + // 添加无障碍支持 + addAccessibilitySupport($slides); + }); + } + + /** + * 添加淡入动画 + */ + function addFadeInAnimation($block) { + // 使用Intersection Observer API实现滚动触发动画 + if ('IntersectionObserver' in window) { + const observer = new IntersectionObserver((entries) => { + entries.forEach(entry => { + if (entry.isIntersecting) { + $(entry.target).addClass('animate-in'); + observer.unobserve(entry.target); + } + }); + }, { + threshold: 0.1, + rootMargin: '50px' + }); + + observer.observe($block[0]); + } else { + // 降级处理:直接添加动画类 + $block.addClass('animate-in'); + } + } + + /** + * 添加悬停效果增强 + */ + function addHoverEffects($slides) { + $slides.each(function() { + const $slide = $(this); + const $img = $slide.find('img'); + + $slide.on('mouseenter', function() { + // 添加悬停时的缩放效果 + $img.css('transform', 'scale(1.05)'); + + // 其他幻灯片稍微变暗 + $slides.not(this).addClass('dimmed'); + }); + + $slide.on('mouseleave', function() { + // 恢复原始状态 + $img.css('transform', 'scale(1)'); + $slides.removeClass('dimmed'); + }); + }); + } + + /** + * 添加键盘导航支持 + */ + function addKeyboardNavigation($slides) { + $slides.attr('tabindex', '0').on('keydown', function(e) { + const $current = $(this); + let $target; + + switch(e.which) { + case 37: // 左箭头 + e.preventDefault(); + $target = $current.prev('.carousel-slide'); + if ($target.length === 0) { + $target = $slides.last(); + } + $target.focus(); + break; + + case 39: // 右箭头 + e.preventDefault(); + $target = $current.next('.carousel-slide'); + if ($target.length === 0) { + $target = $slides.first(); + } + $target.focus(); + break; + + case 13: // 回车键 + case 32: // 空格键 + e.preventDefault(); + $current.trigger('click'); + break; + } + }); + } + + /** + * 添加无障碍支持 + */ + function addAccessibilitySupport($slides) { + $slides.each(function(index) { + const $slide = $(this); + const $img = $slide.find('img'); + const altText = $img.attr('alt') || '合作伙伴'; + + // 添加ARIA标签 + $slide.attr({ + 'role': 'button', + 'aria-label': `查看${altText}详情,第${index + 1}个合作伙伴,共${$slides.length}个`, + 'aria-describedby': 'cooperate-instructions' + }); + }); + + // 添加使用说明(对屏幕阅读器可见) + const $instructions = $('
', { + id: 'cooperate-instructions', + class: 'sr-only', + text: '使用左右箭头键导航合作伙伴,按回车键或空格键查看详情' + }); + + $('.cooperate-block').first().append($instructions); + } + + /** + * 响应式处理 + */ + function handleResponsive() { + const $cooperateBlocks = $('.cooperate-block'); + const windowWidth = $(window).width(); + + $cooperateBlocks.each(function() { + const $block = $(this); + const $wrapper = $block.find('.carousel-wrapper'); + + // 根据屏幕宽度调整布局 + if (windowWidth <= 480) { + $wrapper.addClass('mobile-layout'); + } else { + $wrapper.removeClass('mobile-layout'); + } + }); + } + + /** + * 性能优化:图片懒加载 + */ + function initLazyLoading() { + if ('IntersectionObserver' in window) { + const imageObserver = new IntersectionObserver((entries) => { + entries.forEach(entry => { + if (entry.isIntersecting) { + const $img = $(entry.target); + const src = $img.attr('src'); + + if (src) { + $img.on('load', function() { + $(this).addClass('loaded'); + }).on('error', function() { + $(this).addClass('error'); + console.warn('Failed to load cooperate partner image:', src); + }); + } + + imageObserver.unobserve(entry.target); + } + }); + }); + + $('.cooperate-block img').each(function() { + imageObserver.observe(this); + }); + } + } + + // 文档就绪时初始化 + $(document).ready(function() { + initCooperateBlock(); + initLazyLoading(); + handleResponsive(); + }); + + // 窗口大小改变时重新处理响应式 + $(window).on('resize', debounce(handleResponsive, 250)); + + /** + * 防抖函数 + */ + function debounce(func, wait) { + let timeout; + return function executedFunction(...args) { + const later = () => { + clearTimeout(timeout); + func(...args); + }; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + }; + } + +})(jQuery); \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/js/business-process.js b/wp-content/themes/nenghui-energy-theme-cn/assets/js/business-process.js new file mode 100644 index 0000000..691f593 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/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-cn/assets/js/customizer-controls.js b/wp-content/themes/nenghui-energy-theme-cn/assets/js/customizer-controls.js new file mode 100644 index 0000000..b954417 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/js/customizer-controls.js @@ -0,0 +1,522 @@ +/** + * 自定义器控制功能 + * 关于我们时间轴设置的用户体验 + */ + +(function($) { + 'use strict'; + + // 确保 wp.customize 对象完全加载后再执行 + $(document).ready(function() { + // 等待 wp.customize 对象可用 + var checkCustomizeReady = function() { + if (typeof wp !== 'undefined' && wp.customize && wp.customize.bind) { + wp.customize.bind('ready', function() { + // 关于我们时间轴控制功能 + initAboutTimelineControls(); + + // 视频Banner控制功能 + initVideoBannerControls(); + + // 业务流程控制功能 + initBusinessProcessControls(); + }); + } else { + // 如果 wp.customize 还没准备好,等待 100ms 后重试 + setTimeout(checkCustomizeReady, 100); + } + }; + + checkCustomizeReady(); + }); + + // 关于我们时间轴控制功能 + function initAboutTimelineControls() { + // 时间轴现在使用独立字段面板,不需要额外的控制功能 + // 所有设置都通过WordPress自定义器的标准控件处理 + } + + // 视频Banner控制功能 + function initVideoBannerControls() { + + // 视频背景URL验证 + wp.customize('video_banner_video_bg_url', function(setting) { + setting.bind(function(value) { + validateVideoUrl(value); + }); + }); + + // 高度验证 + wp.customize('video_banner_height', function(setting) { + setting.bind(function(value) { + validateHeight(value); + }); + }); + + // 添加预设配置按钮 + addVideoBannerPresets(); + + // 视频背景控制 + initVideoBgControls(); + + // 内容预设 + addContentPresets(); + } + + // 视频URL验证 + function validateVideoUrl(url) { + if (!url) return; + + const videoExtensions = ['.mp4', '.webm', '.ogg', '.mov']; + const isValidVideo = videoExtensions.some(ext => url.toLowerCase().includes(ext)); + + if (!isValidVideo && !url.includes('youtube.com') && !url.includes('vimeo.com')) { + showNotification('请输入有效的视频URL(支持MP4、WebM、OGG格式或YouTube/Vimeo链接)', 'warning'); + } + } + + // 高度验证 + function validateHeight(height) { + const numHeight = parseInt(height); + if (numHeight < 300) { + showNotification('建议高度不少于300px以确保良好的视觉效果', 'warning'); + } else if (numHeight > 1200) { + showNotification('建议高度不超过1200px以确保页面性能', 'warning'); + } + } + + // 添加预设配置按钮 + function addVideoBannerPresets() { + // 确保 wp.customize 可用 + if (typeof wp === 'undefined' || !wp.customize || !wp.customize.section) { + return; + } + + const section = wp.customize.section('video_banner_section'); + if (!section) return; + + const presetContainer = $('
'); + presetContainer.append('

快速预设

'); + + const presets = [ + { + name: '标准配置', + settings: { + video_banner_height: 800, + video_banner_video_bg_opacity: 0.7, + video_banner_video_bg_lazy_load: false + } + }, + { + name: '高清大屏', + settings: { + video_banner_height: 1000, + video_banner_video_bg_opacity: 0.8, + video_banner_video_bg_lazy_load: false + } + }, + { + name: '移动优化', + settings: { + video_banner_height: 600, + video_banner_video_bg_opacity: 0.6, + video_banner_video_bg_lazy_load: true + } + } + ]; + + presets.forEach(function(preset) { + const button = $(''); + button.on('click', function() { + applyPreset(preset.settings); + showNotification('已应用 "' + preset.name + '" 预设配置', 'success'); + }); + presetContainer.append(button); + }); + + // 将预设按钮添加到section容器 + setTimeout(function() { + const sectionContainer = section.container.find('.accordion-section-content'); + if (sectionContainer.length) { + sectionContainer.prepend(presetContainer); + } + }, 100); + } + + // 应用预设配置 + function applyPreset(settings) { + // 确保 wp.customize 可用 + if (typeof wp === 'undefined' || !wp.customize) { + return; + } + + Object.keys(settings).forEach(function(key) { + const setting = wp.customize(key); + if (setting) { + setting.set(settings[key]); + } + }); + } + + // 视频背景控制 + function initVideoBgControls() { + // 确保 wp.customize 可用 + if (typeof wp === 'undefined' || !wp.customize) { + return; + } + + // 视频背景启用/禁用控制 + wp.customize('video_banner_video_bg_enabled', function(setting) { + setting.bind(function(enabled) { + toggleVideoBgControls(enabled); + }); + }); + + // 初始状态 - 安全获取设置值 + setTimeout(function() { + const enabledSetting = wp.customize('video_banner_video_bg_enabled'); + if (enabledSetting) { + const initialEnabled = enabledSetting(); + toggleVideoBgControls(initialEnabled); + } + }, 50); + + // 不透明度控制 + wp.customize('video_banner_video_bg_opacity', function(setting) { + setting.bind(function(opacity) { + updateOpacityDisplay(opacity); + }); + }); + } + + // 切换视频背景控制显示 + function toggleVideoBgControls(enabled) { + // 确保 wp.customize 可用 + if (typeof wp === 'undefined' || !wp.customize || !wp.customize.control) { + return; + } + + const controls = [ + 'video_banner_video_bg_url', + 'video_banner_video_bg_opacity', + 'video_banner_video_bg_lazy_load' + ]; + + controls.forEach(function(controlId) { + const control = wp.customize.control(controlId); + if (control) { + if (enabled) { + control.container.show(); + } else { + control.container.hide(); + } + } + }); + } + + // 更新不透明度显示 + function updateOpacityDisplay(opacity) { + // 确保 wp.customize 可用 + if (typeof wp === 'undefined' || !wp.customize || !wp.customize.control) { + return; + } + + const control = wp.customize.control('video_banner_video_bg_opacity'); + if (control) { + const label = control.container.find('.customize-control-title'); + label.text('视频背景不透明度 (' + Math.round(opacity * 100) + '%)'); + } + } + + // 添加内容预设 + function addContentPresets() { + const contentPresets = [ + { + name: '企业介绍', + content: { + video_banner_content_subtitle: 'COMPANY INTRODUCTION', + video_banner_content_title: '能辉能源', + video_banner_content_description: '专业的能源解决方案提供商,致力于可持续发展' + } + }, + { + name: '产品展示', + content: { + video_banner_content_subtitle: 'PRODUCT SHOWCASE', + video_banner_content_title: '创新产品', + video_banner_content_description: '领先的技术,卓越的品质,为您提供最佳解决方案' + } + }, + { + name: '服务介绍', + content: { + video_banner_content_subtitle: 'OUR SERVICES', + video_banner_content_title: '专业服务', + video_banner_content_description: '全方位的服务支持,让您的项目更加成功' + } + } + ]; + + // 添加内容预设按钮 + setTimeout(function() { + // 确保 wp.customize 可用 + if (typeof wp === 'undefined' || !wp.customize || !wp.customize.control) { + return; + } + + const titleControl = wp.customize.control('video_banner_content_title'); + if (titleControl) { + const presetContainer = $('
'); + presetContainer.append(''); + + contentPresets.forEach(function(preset) { + const button = $(''); + button.on('click', function() { + // 确保 wp.customize 可用 + if (typeof wp === 'undefined' || !wp.customize) { + return; + } + + Object.keys(preset.content).forEach(function(key) { + const setting = wp.customize(key); + if (setting) { + setting.set(preset.content[key]); + } + }); + showNotification('已应用 "' + preset.name + '" 内容预设', 'success'); + }); + presetContainer.append(button); + }); + + titleControl.container.append(presetContainer); + } + }, 200); + } + + // 显示通知 + function showNotification(message, type) { + type = type || 'info'; + + // 移除现有通知 + $('.video-banner-notification').remove(); + + const notification = $('

' + message + '

'); + + // 添加关闭按钮功能 + notification.on('click', '.notice-dismiss', function() { + notification.fadeOut(); + }); + + // 显示通知 + $('#customize-controls').prepend(notification); + + // 自动隐藏 + setTimeout(function() { + notification.fadeOut(); + }, 5000); + } + + // 业务流程控制功能 + function initBusinessProcessControls() { + // 业务流程显示控制 + wp.customize('business_process_show', function(setting) { + setting.bind(function(value) { + toggleBusinessProcessSections(value); + }); + }); + + // 初始化时检查显示状态 + const initialShow = wp.customize('business_process_show')(); + toggleBusinessProcessSections(initialShow); + + // 添加Tab预设配置 + addBusinessProcessPresets(); + + // 图片验证 + initBusinessProcessImageValidation(); + + // 添加批量操作功能 + addBusinessProcessBatchOperations(); + } + + // 切换业务流程相关设置的显示状态 + function toggleBusinessProcessSections(show) { + const sections = [ + 'business_process_tab1_section', + 'business_process_tab2_section', + 'business_process_tab3_section', + 'business_process_tab4_section' + ]; + + sections.forEach(function(sectionId) { + const section = wp.customize.section(sectionId); + if (section) { + if (show) { + section.container.show(); + } else { + section.container.hide(); + } + } + }); + } + + // 添加业务流程预设配置 + function addBusinessProcessPresets() { + setTimeout(function() { + const basicSection = wp.customize.section('business_process_basic_section'); + if (basicSection && basicSection.container) { + const presetContainer = $('
'); + + presetContainer.append('

快速配置预设

'); + + const presets = [ + { + name: '默认设计流程', + config: { + title: '设计业务流程', + subtitle: '专业的设计流程,确保项目高质量完成', + tab1: { title: '可行性研究', description: '前期调研并综合考虑"可行性、经济性、安全性"三个方面,多方案比较,确定最优设计方案和实施策略。' }, + tab2: { title: '初步设计', description: '在基本方案确定的基础上,进行"精细设计",确定主要设备的选型和布置,形成初步设计方案。' }, + tab3: { title: '施工图设计', description: '基于初步设计方案,进行详细的施工图设计,确保设计方案的可实施性和工程质量。' }, + tab4: { title: '竣工图设计', description: '项目完工后的竣工图设计,真实反映工程实际建设情况,为后续运维提供准确的技术资料。' } + } + }, + { + name: '工程管理流程', + config: { + title: '工程管理流程', + subtitle: '规范化的工程管理,保障项目顺利实施', + tab1: { title: '项目启动', description: '项目立项、团队组建、资源配置,明确项目目标和实施计划。' }, + tab2: { title: '方案设计', description: '深入分析需求,制定详细的技术方案和实施策略。' }, + tab3: { title: '实施执行', description: '按照既定方案执行项目,严格控制质量、进度和成本。' }, + tab4: { title: '验收交付', description: '项目验收、文档整理、知识转移,确保项目成功交付。' } + } + } + ]; + + presets.forEach(function(preset) { + const button = $(''); + + button.on('click', function(e) { + e.preventDefault(); + applyBusinessProcessPreset(preset.config); + showNotification('已应用预设配置:' + preset.name, 'success'); + }); + + presetContainer.append(button); + }); + + // 添加重置按钮 + const resetButton = $(''); + resetButton.on('click', function(e) { + e.preventDefault(); + resetBusinessProcessSettings(); + showNotification('已重置为默认设置', 'info'); + }); + presetContainer.append(resetButton); + + basicSection.container.find('.customize-section-description-container').after(presetContainer); + } + }, 500); + } + + // 应用业务流程预设配置 + function applyBusinessProcessPreset(config) { + wp.customize('business_process_title').set(config.title); + wp.customize('business_process_subtitle').set(config.subtitle); + + for (let i = 1; i <= 4; i++) { + const tabConfig = config['tab' + i]; + if (tabConfig) { + wp.customize('business_process_tab' + i + '_title').set(tabConfig.title); + wp.customize('business_process_tab' + i + '_description').set(tabConfig.description); + } + } + } + + // 重置业务流程设置 + function resetBusinessProcessSettings() { + const defaults = { + 'business_process_show': true, + 'business_process_title': '设计业务流程', + 'business_process_subtitle': '专业的设计流程,确保项目高质量完成', + 'business_process_tab1_title': '可行性研究', + 'business_process_tab1_description': '前期调研并综合考虑"可行性、经济性、安全性"三个方面,多方案比较,确定最优设计方案和实施策略。', + 'business_process_tab2_title': '初步设计', + 'business_process_tab2_description': '在基本方案确定的基础上,进行"精细设计",确定主要设备的选型和布置,形成初步设计方案。', + 'business_process_tab3_title': '施工图设计', + 'business_process_tab3_description': '基于初步设计方案,进行详细的施工图设计,确保设计方案的可实施性和工程质量。', + 'business_process_tab4_title': '竣工图设计', + 'business_process_tab4_description': '项目完工后的竣工图设计,真实反映工程实际建设情况,为后续运维提供准确的技术资料。' + }; + + Object.keys(defaults).forEach(function(key) { + if (wp.customize(key)) { + wp.customize(key).set(defaults[key]); + } + }); + } + + // 业务流程图片验证 + function initBusinessProcessImageValidation() { + for (let i = 1; i <= 4; i++) { + wp.customize('business_process_tab' + i + '_image', function(setting) { + setting.bind(function(value) { + validateBusinessProcessImage(value, i); + }); + }); + } + } + + // 验证业务流程图片 + function validateBusinessProcessImage(imageUrl, tabNumber) { + if (!imageUrl) { + showNotification('Tab ' + String(tabNumber).padStart(2, '0') + ' 的图片不能为空', 'warning'); + return; + } + + // 检查图片格式 + const validExtensions = ['.jpg', '.jpeg', '.png', '.gif', '.webp', '.svg']; + const isValidImage = validExtensions.some(ext => imageUrl.toLowerCase().includes(ext)); + + if (!isValidImage) { + showNotification('Tab ' + String(tabNumber).padStart(2, '0') + ' 请选择有效的图片格式(JPG、PNG、GIF、WebP、SVG)', 'warning'); + } + } + + // 添加批量操作功能 + function addBusinessProcessBatchOperations() { + setTimeout(function() { + const basicSection = wp.customize.section('business_process_basic_section'); + if (basicSection && basicSection.container) { + const batchContainer = $('
'); + + batchContainer.append('

批量操作

'); + + // 批量设置相同图片 + const imageInput = $(''); + const applyImageButton = $(''); + + applyImageButton.on('click', function(e) { + e.preventDefault(); + const imageUrl = imageInput.val().trim(); + if (imageUrl) { + for (let i = 1; i <= 4; i++) { + wp.customize('business_process_tab' + i + '_image').set(imageUrl); + } + showNotification('已将图片应用到所有Tab', 'success'); + imageInput.val(''); + } else { + showNotification('请输入有效的图片URL', 'warning'); + } + }); + + batchContainer.append(imageInput); + batchContainer.append(applyImageButton); + + basicSection.container.find('.business-process-presets').after(batchContainer); + } + }, 600); + } + +})(jQuery); \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/js/customizer-preview.js b/wp-content/themes/nenghui-energy-theme-cn/assets/js/customizer-preview.js new file mode 100644 index 0000000..cdd085b --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/js/customizer-preview.js @@ -0,0 +1,431 @@ +/** + * 自定义器预览功能 + * 实时预览关于我们时间轴设置的变化 + */ + +(function($) { + 'use strict'; + + // 关于我们时间轴实时预览 + initAboutTimelinePreview(); + + // 视频Banner实时预览 + initVideoBannerPreview(); + + // 业务流程实时预览 + initBusinessProcessPreview(); + + // 关于我们时间轴预览功能 + function initAboutTimelinePreview() { + // 时间轴显示状态实时预览 + wp.customize('about_timeline_show', function(value) { + value.bind(function(newval) { + const timelineContainer = $('.about-timeline-block'); + if (newval) { + timelineContainer.show(); + } else { + timelineContainer.hide(); + } + }); + }); + + // 时间轴标题实时预览 + wp.customize('about_timeline_title', function(value) { + value.bind(function(newval) { + $('.about-timeline-block .timeline-title').text(newval); + }); + }); + + // 监听各个时间轴项目字段的变化 + for (let i = 1; i <= 5; i++) { + // 监听启用状态变化 + wp.customize(`about_timeline_item_${i}_enabled`, function(value) { + value.bind(function(newval) { + updateTimelineFromFields(); + }); + }); + + // 监听年份变化 + wp.customize(`about_timeline_item_${i}_year`, function(value) { + value.bind(function(newval) { + updateTimelineFromFields(); + }); + }); + + // 监听标题变化 + wp.customize(`about_timeline_item_${i}_title`, function(value) { + value.bind(function(newval) { + updateTimelineFromFields(); + }); + }); + + // 监听描述变化 + wp.customize(`about_timeline_item_${i}_description`, function(value) { + value.bind(function(newval) { + updateTimelineFromFields(); + }); + }); + + // 监听图片变化 + wp.customize(`about_timeline_item_${i}_image`, function(value) { + value.bind(function(newval) { + updateTimelineFromFields(); + }); + }); + } + } + + // 从字段获取时间轴数据并更新预览 + function updateTimelineFromFields() { + const timelineData = []; + + // 收集所有启用的时间轴项目数据 + for (let i = 1; i <= 5; i++) { + const enabled = wp.customize(`about_timeline_item_${i}_enabled`).get(); + if (enabled) { + const year = wp.customize(`about_timeline_item_${i}_year`).get(); + const title = wp.customize(`about_timeline_item_${i}_title`).get(); + const description = wp.customize(`about_timeline_item_${i}_description`).get(); + const image = wp.customize(`about_timeline_item_${i}_image`).get(); + + // 只有当年份和标题都不为空时才添加 + if (year && title) { + timelineData.push({ + year: year, + title: title, + description: description || '', + image: image || '' + }); + } + } + } + + if (timelineData.length > 0) { + updateTimelinePreview(timelineData); + } + } + + // 更新时间轴预览内容 + function updateTimelinePreview(timelineData) { + const timelineContainer = $('.timeline-container'); + const swiperContainer = $('.swiper-wrapper'); + + if (timelineContainer.length === 0 || swiperContainer.length === 0) { + return; + } + + // 更新时间轴点 + let timelineHtml = ''; + timelineData.forEach((item, index) => { + const activeClass = index === 0 ? ' active' : ''; + timelineHtml += ` +
+
${item.year}
+
+
+ `; + }); + timelineContainer.html(timelineHtml); + + // 更新Swiper幻灯片 + let swiperHtml = ''; + timelineData.forEach((item, index) => { + swiperHtml += ` +
+
+
+ ${item.title} +
+
+

${item.title}

+

${item.description}

+
+
+
+ `; + }); + swiperContainer.html(swiperHtml); + + // 重新初始化时间轴(如果存在) + if (window.initTimelineBlocks) { + // 销毁现有的实例 + $('.about-timeline-block').each(function() { + const instance = $(this).data('timeline-instance'); + if (instance && typeof instance.destroy === 'function') { + instance.destroy(); + } + $(this).removeData('timeline-instance'); + $(this).removeData('timeline-initialized'); + }); + + // 重新初始化 + setTimeout(() => { + window.initTimelineBlocks(); + }, 100); + } + } + + // 视频Banner预览功能 + function initVideoBannerPreview() { + + // 背景图片实时预览 + wp.customize('video_banner_bg_image', function(value) { + value.bind(function(newval) { + const bannerContainer = $('.video-banner-block'); + if (bannerContainer.length) { + if (newval) { + bannerContainer.css('background-image', 'url(' + newval + ')'); + } else { + bannerContainer.css('background-image', 'none'); + } + } + }); + }); + + // 标题实时预览 + wp.customize('video_banner_content_title', function(value) { + value.bind(function(newval) { + $('.video-banner-content .banner-title').text(newval); + }); + }); + + // 副标题实时预览 + wp.customize('video_banner_content_subtitle', function(value) { + value.bind(function(newval) { + $('.video-banner-content .banner-subtitle').text(newval); + }); + }); + + // 描述实时预览 + wp.customize('video_banner_content_description', function(value) { + value.bind(function(newval) { + $('.video-banner-content .banner-description').text(newval); + }); + }); + + // 高度实时预览 + wp.customize('video_banner_height', function(value) { + value.bind(function(newval) { + const bannerContainer = $('.video-banner-block .video-banner-container'); + if (bannerContainer.length) { + bannerContainer.css('height', newval + 'px'); + } + }); + }); + + // 视频背景启用/禁用 + wp.customize('video_banner_video_bg_enabled', function(value) { + value.bind(function(newval) { + const videoBg = $('.video-banner-video-bg'); + if (videoBg.length) { + if (newval) { + videoBg.show(); + initVideoBackground(); + } else { + videoBg.hide(); + } + } + }); + }); + + // 视频背景URL实时预览 + wp.customize('video_banner_video_bg_url', function(value) { + value.bind(function(newval) { + const videoBg = $('.video-banner-video-bg video'); + if (videoBg.length && newval) { + videoBg.attr('src', newval); + // 重新加载视频 + videoBg[0].load(); + } + }); + }); + + // 视频背景不透明度实时预览 + wp.customize('video_banner_video_bg_opacity', function(value) { + value.bind(function(newval) { + const videoBg = $('.video-banner-video-bg video'); + if (videoBg.length) { + videoBg.css('opacity', newval / 100); + } + }); + }); + + // 区块ID实时预览 + wp.customize('video_banner_block_id', function(value) { + value.bind(function(newval) { + const bannerBlock = $('.video-banner-block'); + if (bannerBlock.length) { + bannerBlock.attr('id', newval); + } + }); + }); + + // 区块类名实时预览 + wp.customize('video_banner_block_class', function(value) { + value.bind(function(newval) { + const bannerBlock = $('.video-banner-block'); + if (bannerBlock.length) { + // 移除之前的自定义类名(保留默认类名) + bannerBlock.removeClass(function(index, className) { + return (className.match(/(^|\s)custom-\S+/g) || []).join(' '); + }); + + // 添加新的类名 + if (newval) { + bannerBlock.addClass(newval); + } + } + }); + }); + + // 初始化视频背景 + initVideoBackground(); + } + + // 初始化视频背景 + function initVideoBackground() { + const videoBg = $('.video-banner-video-bg video'); + if (videoBg.length) { + const video = videoBg[0]; + + // 设置视频属性 + video.muted = true; + video.loop = true; + video.playsInline = true; + + // 尝试自动播放 + const playPromise = video.play(); + if (playPromise !== undefined) { + playPromise.catch(function(error) { + console.log('视频自动播放失败:', error); + // 可以在这里添加用户交互后播放的逻辑 + }); + } + + // 视频加载完成后设置不透明度 + video.addEventListener('loadeddata', function() { + const opacity = wp.customize('video_banner_video_bg_opacity')(); + videoBg.css('opacity', opacity / 100 || 1); + }); + + // 错误处理 + video.addEventListener('error', function(e) { + + videoBg.hide(); + }); + } + } + + // 实时更新视频Banner样式 + function updateVideoBannerStyles() { + const bannerContainer = $('.video-banner-block .video-banner-container'); + if (bannerContainer.length) { + // 获取当前设置值 + const height = wp.customize('video_banner_height')(); + const bgImage = wp.customize('video_banner_bg_image')(); + + // 应用样式 + if (height) { + bannerContainer.css('height', height + 'px'); + } + + if (bgImage) { + bannerContainer.css('background-image', 'url(' + bgImage + ')'); + } + } + } + + // 页面加载完成后初始化 + $(document).ready(function() { + // 延迟执行以确保DOM完全加载 + setTimeout(function() { + updateVideoBannerStyles(); + initVideoBackground(); + }, 500); + }); + + // 业务流程预览功能 + function initBusinessProcessPreview() { + // 业务流程显示状态实时预览 + wp.customize('business_process_show', function(value) { + value.bind(function(newval) { + const processContainer = $('.business-process-block'); + if (newval) { + processContainer.show(); + } else { + processContainer.hide(); + } + }); + }); + + // 业务流程标题实时预览 + wp.customize('business_process_title', function(value) { + value.bind(function(newval) { + $('.business-process-block .process-title').text(newval); + }); + }); + + // 业务流程副标题实时预览 + wp.customize('business_process_subtitle', function(value) { + value.bind(function(newval) { + $('.business-process-block .process-subtitle').text(newval); + }); + }); + + // 监听各个tab的变化 + for (let i = 1; i <= 4; i++) { + const tabNumber = i.toString().padStart(2, '0'); + + // 监听tab标题变化 + wp.customize(`business_process_tab_${tabNumber}_title`, function(value) { + value.bind(function(newval) { + $(`.business-process-tabs .tab-item[data-tab="${tabNumber}"] .tab-title`).text(newval); + }); + }); + + // 监听tab描述变化 + wp.customize(`business_process_tab_${tabNumber}_description`, function(value) { + value.bind(function(newval) { + $(`.business-process-tabs .tab-item[data-tab="${tabNumber}"] .tab-description`).text(newval); + }); + }); + + // 监听tab图片变化 + wp.customize(`business_process_tab_${tabNumber}_image`, function(value) { + value.bind(function(newval) { + const imageContainer = $('.business-process-image'); + const currentActiveTab = $('.business-process-tabs .tab-item.active').data('tab'); + + // 如果当前活动的tab是正在更改的tab,则更新图片 + if (currentActiveTab === tabNumber) { + const img = imageContainer.find('img'); + if (img.length && newval) { + img.attr('src', newval); + } + } + + // 更新数据属性以备后续切换使用 + $(`.business-process-tabs .tab-item[data-tab="${tabNumber}"]`).attr('data-image', newval); + }); + }); + } + + // 监听tab切换事件,更新图片预览 + $(document).on('click', '.business-process-tabs .tab-item', function() { + const tabNumber = $(this).data('tab'); + const imageUrl = $(this).data('image'); + const imageContainer = $('.business-process-image'); + + if (imageUrl && imageContainer.length) { + const img = imageContainer.find('img'); + if (img.length) { + // 添加淡出效果 + img.fadeOut(200, function() { + $(this).attr('src', imageUrl).fadeIn(200); + }); + } + } + }); + } + +})(jQuery); \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/js/dropdown-menu.js b/wp-content/themes/nenghui-energy-theme-cn/assets/js/dropdown-menu.js new file mode 100644 index 0000000..fd1055d --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/js/dropdown-menu.js @@ -0,0 +1,75 @@ +jQuery(document).ready(function($) { + // 处理桌面端下拉菜单 + $('.menu-item-has-children').hover( + function() { + // 鼠标悬停时显示子菜单 + $(this).addClass('active'); + }, + function() { + // 鼠标离开时隐藏子菜单 + $(this).removeClass('active'); + } + ); + + // 处理移动端下拉菜单点击 + $('.menu-item-has-children > a').on('click', function(e) { + // 在移动端阻止默认链接跳转,改为切换子菜单显示 + if ($(window).width() <= 768) { + e.preventDefault(); + + var $parent = $(this).parent(); + var $subMenu = $parent.find('.sub-menu').first(); + + // 切换当前菜单项的子菜单 + $subMenu.slideToggle(200); + $parent.toggleClass('active'); + + // 关闭其他同级菜单项的子菜单 + $parent.siblings('.menu-item-has-children').removeClass('active') + .find('.sub-menu').slideUp(200); + + + } + }); + + // 处理移动端三级菜单点击 + $('.sub-menu .menu-item-has-children > a').on('click', function(e) { + if ($(window).width() <= 768) { + e.preventDefault(); + + var $parent = $(this).parent(); + var $subSubMenu = $parent.find('.sub-menu').first(); + + // 切换三级菜单 + $subSubMenu.slideToggle(200); + $parent.toggleClass('active'); + + // 关闭其他同级三级菜单 + $parent.siblings('.menu-item-has-children').removeClass('active') + .find('.sub-menu').slideUp(200); + } + }); + + + + // 点击页面其他地方时关闭所有下拉菜单(移动端) + $(document).on('click', function(e) { + if ($(window).width() <= 768) { + if (!$(e.target).closest('.menu-item-has-children').length) { + $('.menu-item-has-children').removeClass('active') + .find('.sub-menu').slideUp(200); + + } + } + }); + + // 窗口大小改变时重置菜单状态 + $(window).on('resize', function() { + if ($(window).width() > 768) { + // 桌面端:移除移动端的状态 + $('.menu-item-has-children').removeClass('active'); + $('.sub-menu').removeAttr('style'); + + } + }); +}); \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/js/elementor-debug.js b/wp-content/themes/nenghui-energy-theme-cn/assets/js/elementor-debug.js new file mode 100644 index 0000000..9d010b7 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/js/elementor-debug.js @@ -0,0 +1,216 @@ +/** + * Elementor调试工具 + * 用于诊断Elementor与GSAP动画的兼容性问题 + */ + +(function() { + 'use strict'; + + // Elementor调试器 + const ElementorDebugger = { + // 初始化调试器 + init: function() { + + // 检查Elementor是否加载 + this.checkElementorStatus(); + + // 监听Elementor事件 + this.setupEventListeners(); + + // 创建调试面板 + this.createDebugPanel(); + }, + + // 检查Elementor状态 + checkElementorStatus: function() { + + // 检查Elementor元素 + const elementorElements = document.querySelectorAll('.elementor-element'); + + // 检查动画元素 + const animatedElements = document.querySelectorAll('.elementor-invisible, [data-settings*="animation"]'); + + }, + + // 设置事件监听器 + setupEventListeners: function() { + // 监听DOM变化 + const observer = new MutationObserver((mutations) => { + mutations.forEach((mutation) => { + if (mutation.type === 'childList') { + mutation.addedNodes.forEach((node) => { + if (node.nodeType === Node.ELEMENT_NODE && + node.classList && + node.classList.contains('elementor-element')) { + this.analyzeElement(node); + } + }); + } + + if (mutation.type === 'attributes' && + mutation.attributeName === 'class' && + mutation.target.classList.contains('elementor-element')) { + this.analyzeElement(mutation.target); + } + }); + }); + + observer.observe(document.body, { + childList: true, + subtree: true, + attributes: true, + attributeFilter: ['class'] + }); + + // 监听Elementor钩子(如果可用) + if (typeof elementorFrontend !== 'undefined' && elementorFrontend.hooks) { + try { + elementorFrontend.hooks.addAction('frontend/element_ready/global', (scope) => { + console.log('Elementor全局元素准备就绪:', scope[0]); + this.analyzeElement(scope[0]); + }); + + elementorFrontend.hooks.addAction('frontend/element_ready/widget', (scope) => { + console.log('Elementor小部件准备就绪:', scope[0]); + this.analyzeElement(scope[0]); + }); + } catch (error) { + console.error('绑定Elementor钩子失败:', error); + } + } + }, + + // 分析元素 + analyzeElement: function(element) { + console.group('分析Elementor元素:', element); + + // 检查动画设置 + const hasInvisibleClass = element.classList.contains('elementor-invisible'); + const hasDataSettings = element.hasAttribute('data-settings'); + const dataSettings = element.getAttribute('data-settings'); + + console.log('有elementor-invisible类:', hasInvisibleClass); + console.log('有data-settings属性:', hasDataSettings); + + if (dataSettings) { + try { + const settings = JSON.parse(dataSettings); + console.log('动画设置:', settings); + + if (settings._animation || settings.animation) { + console.log('检测到Elementor动画配置'); + } + } catch (error) { + console.warn('解析data-settings失败:', error); + } + } + + // 检查GSAP相关属性 + const hasGSAPPaused = element.hasAttribute('data-gsap-paused'); + const hasGSAPReady = element.hasAttribute('data-gsap-ready'); + const hasGSAPInitialized = element.hasAttribute('data-gsap-initialized'); + + console.log('GSAP暂停状态:', hasGSAPPaused); + console.log('GSAP准备状态:', hasGSAPReady); + console.log('GSAP初始化状态:', hasGSAPInitialized); + + // 检查子元素 + const childElements = element.querySelectorAll('.elementor-element'); + if (childElements.length > 0) { + console.log('子Elementor元素数量:', childElements.length); + } + + console.groupEnd(); + }, + + // 创建调试面板 + createDebugPanel: function() { + // 只在开发环境或有调试参数时显示 + if (!window.location.search.includes('debug=elementor')) { + return; + } + + const panel = document.createElement('div'); + panel.id = 'elementor-debug-panel'; + panel.style.cssText = ` + position: fixed; + top: 10px; + right: 10px; + width: 300px; + background: rgba(0, 0, 0, 0.9); + color: white; + padding: 15px; + border-radius: 5px; + font-family: monospace; + font-size: 12px; + z-index: 999999; + max-height: 400px; + overflow-y: auto; + `; + + panel.innerHTML = ` +

Elementor调试面板

+
+ + + `; + + document.body.appendChild(panel); + + // 暴露到全局作用域 + window.ElementorDebugger = this; + + this.refreshInfo(); + }, + + // 刷新调试信息 + refreshInfo: function() { + const infoDiv = document.getElementById('debug-info'); + if (!infoDiv) return; + + const elementorElements = document.querySelectorAll('.elementor-element'); + const animatedElements = document.querySelectorAll('.elementor-invisible'); + const gsapPausedElements = document.querySelectorAll('[data-gsap-paused]'); + const gsapReadyElements = document.querySelectorAll('[data-gsap-ready]'); + + infoDiv.innerHTML = ` +
Elementor元素: ${elementorElements.length}
+
动画元素: ${animatedElements.length}
+
GSAP暂停: ${gsapPausedElements.length}
+
GSAP准备: ${gsapReadyElements.length}
+
GSAP加载: ${typeof gsap !== 'undefined' ? '是' : '否'}
+
Elementor前端: ${typeof elementorFrontend !== 'undefined' ? '是' : '否'}
+ `; + }, + + // 测试动画 + testAnimations: function() { + + // 查找所有Elementor元素 + const elements = document.querySelectorAll('.elementor-element'); + + elements.forEach((element, index) => { + setTimeout(() => { + + // 触发兼容性检查 + if (window.GSAPElementorCompatibility) { + window.GSAPElementorCompatibility.handleElementorElement(element); + } + }, index * 100); + }); + } + }; + + // 等待DOM加载完成后初始化 + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', () => { + ElementorDebugger.init(); + }); + } else { + ElementorDebugger.init(); + } + + // 暴露到全局作用域 + window.ElementorDebugger = ElementorDebugger; + +})(); \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/js/executive-profiles.js b/wp-content/themes/nenghui-energy-theme-cn/assets/js/executive-profiles.js new file mode 100644 index 0000000..d2ceb84 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/js/executive-profiles.js @@ -0,0 +1,131 @@ +/** + * 高管简历区块交互功能 + * + * @package Nenghui_Energy_Theme + */ + +(function($) { + 'use strict'; + + // 等待DOM加载完成 + $(document).ready(function() { + initExecutiveProfiles(); + }); + + /** + * 初始化高管简历功能 + */ + function initExecutiveProfiles() { + $('.executive-profiles-block').each(function() { + const $block = $(this); + + // 移除加载状态 + $block.removeClass('loading'); + }); + + // 初始化响应式处理 + handleResponsive(); + + // 初始化动画效果 + initAnimations(); + + // 初始化懒加载 + initLazyLoading(); + } + + + + /** + * 响应式处理 + */ + function handleResponsive() { + const isMobile = window.innerWidth <= 768; + + $('.executive-profiles-block').each(function() { + const $block = $(this); + + if (isMobile) { + $block.addClass('mobile-view'); + } else { + $block.removeClass('mobile-view'); + } + }); + } + + // 窗口大小改变时重新处理响应式 + $(window).on('resize', debounce(function() { + handleResponsive(); + }, 250)); + + /** + * 防抖函数 + * @param {Function} func 要防抖的函数 + * @param {number} wait 等待时间 + * @param {boolean} immediate 是否立即执行 + */ + function debounce(func, wait, immediate) { + let timeout; + return function executedFunction() { + const context = this; + const args = arguments; + + const later = function() { + timeout = null; + if (!immediate) func.apply(context, args); + }; + + const callNow = immediate && !timeout; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + + if (callNow) func.apply(context, args); + }; + } + + /** + * 懒加载图片(如果有头像图片的话) + */ + function initLazyLoading() { + if ('IntersectionObserver' in window) { + const imageObserver = new IntersectionObserver((entries, observer) => { + entries.forEach(entry => { + if (entry.isIntersecting) { + const img = entry.target; + img.src = img.dataset.src; + img.classList.remove('lazy'); + imageObserver.unobserve(img); + } + }); + }); + + document.querySelectorAll('img[data-src]').forEach(img => { + imageObserver.observe(img); + }); + } + } + + /** + * 添加动画效果 + */ + function initAnimations() { + if ('IntersectionObserver' in window) { + // 使用 Intersection Observer 来触发动画 + const animationObserver = new IntersectionObserver((entries) => { + entries.forEach(entry => { + if (entry.isIntersecting) { + entry.target.classList.add('animate'); + } + }); + }, { + threshold: 0.1, + rootMargin: '0px 0px -50px 0px' + }); + + // 观察所有高管卡片 + document.querySelectorAll('.executive-card').forEach(card => { + animationObserver.observe(card); + }); + } + } + +})(jQuery); \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/js/features.js b/wp-content/themes/nenghui-energy-theme-cn/assets/js/features.js new file mode 100644 index 0000000..1b2b44d --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/js/features.js @@ -0,0 +1,185 @@ +/** + * Features Block Animation + * 特性展示区块动画效果 + */ + +// 等待GSAP准备就绪事件 +function waitForGSAPReady(callback) { + if (window.gsap && window.ScrollTrigger) { + callback(); + } else { + document.addEventListener('gsapReady', callback); + // 备用方案:如果事件未触发,使用定时器 + setTimeout(() => { + if (window.gsap && window.ScrollTrigger) { + callback(); + } + }, 3000); + } +} + +// 初始化特性区块动画 +function initFeaturesAnimation() { + // 等待GSAP兼容性就绪 + if (!document.body.classList.contains('gsap-ready')) { + document.addEventListener('gsapCompatibilityReady', initFeaturesAnimation); + return; + } + + // 标题动画 + const header = document.querySelector('.features-header'); + if (header) { + // 检查是否在Elementor元素内 + if (!header.closest('.elementor-element') || header.hasAttribute('data-gsap-ready')) { + createHeaderAnimation(header); + } else { + header.addEventListener('gsapElementReady', () => { + createHeaderAnimation(header); + }); + } + } + + // 统计数据项目动画 + const statItems = document.querySelectorAll('.features-stat-item'); + if (statItems.length > 0) { + statItems.forEach((item, index) => { + // 检查元素是否被Elementor暂停 + if (item.hasAttribute('data-gsap-paused')) { + return; + } + + // 监听元素准备就绪事件 + item.addEventListener('gsapElementReady', () => { + createStatItemAnimation(item, index); + }); + + // 如果元素已经准备就绪,直接创建动画 + if (item.hasAttribute('data-gsap-ready') || !item.closest('.elementor-element')) { + createStatItemAnimation(item, index); + } + }); + } + + // 数字计数动画 + const statNumbers = document.querySelectorAll('.stat-number'); + if (statNumbers.length > 0) { + statNumbers.forEach((numberElement, index) => { + // 检查元素是否被Elementor暂停 + if (numberElement.hasAttribute('data-gsap-paused')) { + return; + } + + // 监听元素准备就绪事件 + numberElement.addEventListener('gsapElementReady', () => { + createNumberAnimation(numberElement, index); + }); + + // 如果元素已经准备就绪,直接创建动画 + if (numberElement.hasAttribute('data-gsap-ready') || !numberElement.closest('.elementor-element')) { + createNumberAnimation(numberElement, index); + } + }); + } +} + +// 创建标题动画 +function createHeaderAnimation(header) { + gsap.fromTo(header, + { + opacity: 0, + y: 30 + }, + { + opacity: 1, + y: 0, + duration: 1, + ease: "power2.out", + scrollTrigger: { + trigger: header, + start: "top 85%", + end: "bottom 20%", + toggleActions: "play none none reverse" + } + } + ); +} + +// 创建统计项目动画 +function createStatItemAnimation(item, index) { + gsap.fromTo(item, + { + opacity: 0, + y: 50 + }, + { + opacity: 1, + y: 0, + duration: 0.8, + ease: "power2.out", + delay: index * 0.15, // 逐个显示,每个延迟0.15秒 + scrollTrigger: { + trigger: item, + start: "top 80%", + end: "bottom 20%", + toggleActions: "play none none reverse" + } + } + ); +} + +// 创建数字计数动画 +function createNumberAnimation(numberElement, index) { + const text = numberElement.textContent; + const hasPlus = text.includes('+'); + const number = parseInt(text.replace(/[^0-9]/g, '')); + + if (!isNaN(number)) { + // 设置初始值为0 + numberElement.textContent = hasPlus ? '0+项' : '0项'; + + // 创建计数动画 + gsap.to({value: 0}, { + value: number, + duration: 2, + ease: "power2.out", + delay: index * 0.15 + 0.5, // 在元素显示后开始计数 + onUpdate: function() { + const currentValue = Math.round(this.targets()[0].value); + if (hasPlus) { + numberElement.textContent = currentValue + '+项'; + } else { + numberElement.textContent = currentValue + '项'; + } + }, + scrollTrigger: { + trigger: numberElement, + start: "top 80%", + toggleActions: "play none none none" + } + }); + } +} + +// 等待GSAP准备就绪后初始化 +waitForGSAPReady(() => { + // 注册 ScrollTrigger 插件 + gsap.registerPlugin(ScrollTrigger); + + // DOM 加载完成后初始化动画 + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', initFeaturesAnimation); + } else { + initFeaturesAnimation(); + } + + // 如果是动态加载的内容,提供重新初始化的函数 + window.reinitFeaturesAnimation = function() { + // 刷新 ScrollTrigger + ScrollTrigger.refresh(); + initFeaturesAnimation(); + }; +}); + +// 如果GSAP未加载,显示警告 +if (typeof gsap === 'undefined') { +} \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/js/gsap-elementor-compatibility.js b/wp-content/themes/nenghui-energy-theme-cn/assets/js/gsap-elementor-compatibility.js new file mode 100644 index 0000000..08d30ef --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/js/gsap-elementor-compatibility.js @@ -0,0 +1,602 @@ +/** + * GSAP与Elementor兼容性管理器 + * GSAP and Elementor Compatibility Manager + * + * 此文件确保GSAP动画与Elementor内置动画系统的兼容性 + * This file ensures compatibility between GSAP animations and Elementor's built-in animation system + * + * @package Nenghui Energy Theme + * @since 1.0.0 + */ + +(function() { + 'use strict'; + + // GSAP与Elementor兼容性管理器 + const GSAPElementorCompatibility = { + initialized: false, + elementorAnimations: new Set(), + gsapAnimations: new Set(), + + // 初始化 + init: function() { + if (this.initialized) return; + + // 添加页面就绪状态标记 + document.body.classList.add('gsap-ready'); + + // 设置GSAP默认值 + this.setupGSAPDefaults(); + + // 设置Elementor钩子 + this.setupElementorHooks(); + + // 设置备用兼容性检查 + this.setupFallbackCompatibility(); + + this.initialized = true; + + // 触发初始化完成事件 + const event = new CustomEvent('gsapCompatibilityReady'); + document.dispatchEvent(event); + }, + + // 等待依赖加载 + waitForDependencies: function(callback) { + let attempts = 0; + const maxAttempts = 100; // 增加等待时间到10秒 + + const checkDependencies = () => { + attempts++; + const gsapReady = window.gsap && window.ScrollTrigger; + const elementorReady = window.elementorFrontend && window.elementorFrontend.hooks; + + if (gsapReady) { + // GSAP准备好了,检查Elementor状态 + if (elementorReady || attempts > 30) { + // Elementor也准备好了,或者已经等待足够长时间 + callback(); + } else { + // 继续等待Elementor + setTimeout(checkDependencies, 100); + } + } else if (attempts < maxAttempts) { + // 继续等待GSAP + setTimeout(checkDependencies, 100); + } else { + // 超时,但仍然尝试继续 + callback(); + } + }; + + checkDependencies(); + }, + + // 设置兼容性 + setupCompatibility: function() { + // 设置GSAP默认值和基础配置 + this.setupGSAPDefaults(); + + // 检查Elementor是否可用且hooks已准备好 + if (window.elementorFrontend && window.elementorFrontend.hooks && typeof window.elementorFrontend.hooks.addAction === 'function') { + this.setupElementorHooks(); + } else { + // 延迟再次检查Elementor + setTimeout(() => { + if (window.elementorFrontend && window.elementorFrontend.hooks) { + this.setupElementorHooks(); + } + }, 1000); + } + + this.setupScrollTriggerCompatibility(); + this.setupAnimationConflictResolution(); + this.setupGlobalAnimationManager(); + }, + + // 设置Elementor兼容性钩子 - 改进版本 + setupElementorHooks: function() { + // 检查Elementor是否可用 + if (typeof elementorFrontend !== 'undefined' && elementorFrontend.hooks) { + this.initElementorHooks(); + } else { + // 监听Elementor前端加载事件 + document.addEventListener('DOMContentLoaded', () => { + // 使用更长的延迟确保Elementor完全加载 + setTimeout(() => { + if (typeof elementorFrontend !== 'undefined' && elementorFrontend.hooks) { + this.initElementorHooks(); + } else { + this.setupFallbackCompatibility(); + } + }, 2000); // 增加延迟到2秒 + }); + } + }, + + // 初始化Elementor钩子 + initElementorHooks: function() { + try { + // 检查elementorFrontend和hooks是否存在 + if (!elementorFrontend || !elementorFrontend.hooks || typeof elementorFrontend.hooks.addAction !== 'function') { + return; + } + + // 监听Elementor元素准备就绪事件 + elementorFrontend.hooks.addAction('frontend/element_ready/global', (scope) => { + this.handleElementorElementReady(scope); + }); + + // 监听Elementor动画开始事件 + elementorFrontend.hooks.addAction('frontend/element_ready/widget', (scope) => { + this.handleElementorWidgetReady(scope); + }); + + // 监听页面加载完成 + if (elementorFrontend.hooks && typeof elementorFrontend.hooks.addAction === 'function') { + elementorFrontend.hooks.addAction('frontend/init', () => { + this.onElementorFrontendInit(); + }); + } + } catch (error) { + this.setupFallbackCompatibility(); + } + }, + + // 备用兼容性方案 + setupFallbackCompatibility: function() { + // 使用MutationObserver监听DOM变化 + const observer = new MutationObserver((mutations) => { + mutations.forEach((mutation) => { + if (mutation.type === 'childList') { + mutation.addedNodes.forEach((node) => { + // 验证节点是否为有效的DOM元素 + if (node && node.nodeType === Node.ELEMENT_NODE) { + // 检查是否是Elementor元素 + if (node.classList && ( + node.classList.contains('elementor-element') || + node.classList.contains('elementor-widget') || + node.querySelector('.elementor-element') + )) { + // 添加延迟以确保元素完全加载 + setTimeout(() => { + this.handleElementorElement(node); + }, 100); + } + } + }); + } + }); + }); + + observer.observe(document.body, { + childList: true, + subtree: true + }); + + // 处理已存在的Elementor元素 + setTimeout(() => { + const existingElements = document.querySelectorAll('.elementor-element, .elementor-widget'); + existingElements.forEach(element => { + // 验证元素有效性 + if (element && element.nodeType === Node.ELEMENT_NODE) { + this.handleElementorElement(element); + } + }); + }, 1000); + }, + + // 处理Elementor元素 + handleElementorElement: function(element) { + // 延迟处理,确保Elementor动画已初始化 + setTimeout(() => { + // 检查元素是否有动画设置 + const hasAnimation = element.classList.contains('elementor-invisible') || + element.hasAttribute('data-settings') || + element.querySelector('[data-settings*="animation"]'); + + if (hasAnimation) { + // 暂停该元素的GSAP动画 + this.pauseGSAPForElement(element); + + // 监听Elementor动画完成 + this.waitForElementorAnimation(element, () => { + this.enableGSAPForElement(element); + }); + } else { + // 没有Elementor动画,可以安全使用GSAP + this.enableGSAPForElement(element); + } + }, 500); + }, + + // 暂停元素的GSAP动画 + pauseGSAPForElement: function(element) { + if (window.gsap) { + gsap.killTweensOf(element); + gsap.killTweensOf(element.querySelectorAll('*')); + element.setAttribute('data-gsap-paused', 'true'); + } + }, + + // 启用元素的GSAP动画 + enableGSAPForElement: function(element) { + element.removeAttribute('data-gsap-paused'); + element.setAttribute('data-gsap-ready', 'true'); + + // 触发自定义事件,通知GSAP动画可以开始 + const event = new CustomEvent('gsapElementReady', { + detail: { element: element } + }); + element.dispatchEvent(event); + }, + + // 等待Elementor动画完成 + waitForElementorAnimation: function(element, callback) { + let attempts = 0; + const maxAttempts = 50; // 5秒超时 + + const checkAnimation = () => { + // 检查元素是否还有elementor-invisible类 + if (!element.classList.contains('elementor-invisible')) { + callback(); + return; + } + + attempts++; + if (attempts < maxAttempts) { + setTimeout(checkAnimation, 100); + } else { + callback(); // 超时也执行回调 + } + }; + + checkAnimation(); + }, + + // 处理Elementor元素 + handleElementorElement: function(scope) { + // 验证scope参数 + if (!scope) { + return; + } + + // 确保scope是DOM元素或jQuery对象 + let element; + if (scope.jquery) { + // 如果是jQuery对象,获取第一个DOM元素 + element = scope[0]; + } else if (scope.nodeType === Node.ELEMENT_NODE) { + // 如果是DOM元素 + element = scope; + } else { + return; + } + + // 验证最终的DOM元素 + if (!element || !element.nodeType || element.nodeType !== Node.ELEMENT_NODE) { + return; + } + + const $scope = jQuery(element); + + // 检查是否有Elementor动画 + const hasElementorAnimation = $scope.find('[data-settings*="animation"]').length > 0 || + $scope.hasClass('elementor-invisible') || + $scope.find('.elementor-invisible').length > 0; + + if (hasElementorAnimation) { + this.elementorAnimations.add(element); + + // 为有Elementor动画的元素添加标记 + $scope.attr('data-has-elementor-animation', 'true'); + + // 延迟初始化GSAP动画,避免冲突 + setTimeout(() => { + this.initGSAPForElement(element); + }, 300); + } else { + // 没有Elementor动画的元素可以立即初始化GSAP + this.initGSAPForElement(element); + } + }, + + // 为元素初始化GSAP动画 + initGSAPForElement: function(element) { + // 验证元素是否存在且为有效的DOM元素 + if (!element || !element.nodeType || element.nodeType !== Node.ELEMENT_NODE) { + return; + } + + // 检查元素是否已经有GSAP动画 + if (element.hasAttribute('data-gsap-initialized')) return; + + // 标记为已初始化 + element.setAttribute('data-gsap-initialized', 'true'); + + // 这里可以添加特定的GSAP动画逻辑 + // 例如:hover效果、滚动触发动画等 + }, + + // 暂停冲突的GSAP动画 + pauseConflictingGSAPAnimations: function(scope) { + const gsapElements = scope.querySelectorAll('[data-gsap-initialized]'); + + gsapElements.forEach(element => { + // 暂停该元素上的所有GSAP动画 + gsap.killTweensOf(element); + }); + }, + + // 设置GSAP默认值 + setupGSAPDefaults: function() { + if (!window.gsap) { + return; + } + + // 设置GSAP默认缓动函数,与Elementor保持一致 + gsap.defaults({ + ease: "power2.out", + duration: 0.6, + overwrite: "auto" // 自动覆盖冲突的动画 + }); + + // 设置ScrollTrigger默认值 + if (window.ScrollTrigger) { + ScrollTrigger.defaults({ + toggleActions: "play none none reverse", + markers: false, + scroller: window, // 确保使用正确的滚动容器 + refreshPriority: 1 // 提高刷新优先级 + }); + + // 注册ScrollTrigger插件 + gsap.registerPlugin(ScrollTrigger); + } + + // 禁用GSAP的自动CSS前缀,避免与Elementor冲突 + gsap.config({ + autoSleep: 60, + force3D: false, // 避免强制3D变换 + nullTargetWarn: false // 减少警告信息 + }); + }, + + // 设置ScrollTrigger兼容性 + setupScrollTriggerCompatibility: function() { + if (!window.ScrollTrigger) return; + + // 监听Elementor的滚动事件 + window.addEventListener('scroll', this.debounce(() => { + // 在滚动时刷新ScrollTrigger,确保与Elementor动画同步 + ScrollTrigger.refresh(); + }, 100), { passive: true }); + + // 监听窗口大小变化 + window.addEventListener('resize', this.debounce(() => { + ScrollTrigger.refresh(); + }, 250)); + + // 在Elementor编辑模式下禁用ScrollTrigger + if (this.isElementorEditMode()) { + ScrollTrigger.disable(); + } + }, + + // 设置动画冲突解决方案 + setupAnimationConflictResolution: function() { + // 创建观察器来监听DOM变化 + const observer = new MutationObserver((mutations) => { + mutations.forEach((mutation) => { + if (mutation.type === 'childList') { + mutation.addedNodes.forEach((node) => { + if (node.nodeType === Node.ELEMENT_NODE) { + this.resolveAnimationConflicts(node); + } + }); + } + }); + }); + + // 开始观察 + observer.observe(document.body, { + childList: true, + subtree: true + }); + }, + + // 解决动画冲突 + resolveAnimationConflicts: function(element) { + // 检查元素是否同时有Elementor和GSAP动画 + const hasElementorAnim = element.hasAttribute('data-has-elementor-animation') || + element.classList.contains('elementor-invisible'); + const hasGSAPAnim = element.hasAttribute('data-gsap-initialized'); + + if (hasElementorAnim && hasGSAPAnim) { + // 优先使用Elementor动画,暂停GSAP动画 + gsap.killTweensOf(element); + + // 等待Elementor动画完成后再启用GSAP + setTimeout(() => { + this.initGSAPForElement(element); + }, 1000); + } + }, + + // 检查是否在Elementor编辑模式 + isElementorEditMode: function() { + return window.elementorFrontend && window.elementorFrontend.isEditMode(); + }, + + // 防抖函数 + debounce: function(func, wait) { + let timeout; + return function executedFunction(...args) { + const later = () => { + clearTimeout(timeout); + func(...args); + }; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + } + }, + + // 全局动画管理器 + setupGlobalAnimationManager: function() { + // 创建全局动画管理器 + window.GSAPAnimationManager = { + activeAnimations: new Map(), + + // 注册动画 + register: function(id, animation) { + this.activeAnimations.set(id, animation); + }, + + // 暂停所有动画 + pauseAll: function() { + this.activeAnimations.forEach(animation => { + if (animation && animation.pause) { + animation.pause(); + } + }); + }, + + // 恢复所有动画 + resumeAll: function() { + this.activeAnimations.forEach(animation => { + if (animation && animation.resume) { + animation.resume(); + } + }); + }, + + // 清理动画 + cleanup: function(id) { + const animation = this.activeAnimations.get(id); + if (animation && animation.kill) { + animation.kill(); + } + this.activeAnimations.delete(id); + } + }; + + // 监听页面可见性变化 + document.addEventListener('visibilitychange', () => { + if (document.hidden) { + window.GSAPAnimationManager.pauseAll(); + } else { + window.GSAPAnimationManager.resumeAll(); + } + }); + }, + + // 公共API方法 + api: { + // 安全地创建GSAP动画 + createAnimation: function(target, vars, options = {}) { + if (!window.gsap) { + console.warn('GSAP未加载,无法创建动画'); + return null; + } + + const element = typeof target === 'string' ? document.querySelector(target) : target; + + if (!element) { + console.warn('目标元素未找到:', target); + return null; + } + + // 检查是否有Elementor动画冲突 + if (element.hasAttribute('data-has-elementor-animation') || + element.classList.contains('elementor-invisible')) { + console.warn('元素有Elementor动画,延迟GSAP动画'); + + return new Promise((resolve) => { + setTimeout(() => { + const animation = gsap.to(element, vars); + if (window.GSAPAnimationManager && options.id) { + window.GSAPAnimationManager.register(options.id, animation); + } + resolve(animation); + }, options.delay || 500); + }); + } + + const animation = gsap.to(element, vars); + if (window.GSAPAnimationManager && options.id) { + window.GSAPAnimationManager.register(options.id, animation); + } + return animation; + }, + + // 安全地创建ScrollTrigger + createScrollTrigger: function(config) { + if (!window.ScrollTrigger) { + console.warn('ScrollTrigger未加载'); + return null; + } + + if (GSAPElementorCompatibility.isElementorEditMode()) { + console.warn('Elementor编辑模式下跳过ScrollTrigger创建'); + return null; + } + + // 添加默认配置 + const defaultConfig = { + refreshPriority: 1, + invalidateOnRefresh: true + }; + + const finalConfig = Object.assign({}, defaultConfig, config); + + try { + return ScrollTrigger.create(finalConfig); + } catch (error) { + console.error('ScrollTrigger创建失败:', error); + return null; + } + }, + + // 刷新所有动画 + refresh: function() { + try { + if (window.ScrollTrigger) { + ScrollTrigger.refresh(); + } + + // 触发Elementor的刷新 + if (window.elementorFrontend && window.jQuery) { + window.jQuery(window).trigger('resize'); + } + + console.log('动画刷新完成'); + } catch (error) { + console.error('动画刷新失败:', error); + } + }, + + // 检查兼容性状态 + getCompatibilityStatus: function() { + return { + gsapLoaded: !!window.gsap, + scrollTriggerLoaded: !!window.ScrollTrigger, + elementorLoaded: !!window.elementorFrontend, + compatibilityInitialized: GSAPElementorCompatibility.initialized, + isEditMode: GSAPElementorCompatibility.isElementorEditMode() + }; + } + } + }; + + // 等待DOM加载完成后初始化 + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', () => GSAPElementorCompatibility.init()); + } else { + GSAPElementorCompatibility.init(); + } + + // 暴露API到全局作用域 + window.GSAPElementorCompatibility = GSAPElementorCompatibility; + window.GSAPElementorAPI = GSAPElementorCompatibility.api; + +})();// Updated at Wed Oct 15 04:15:42 AM CST 2025 diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/js/gsap-elementor-init.js b/wp-content/themes/nenghui-energy-theme-cn/assets/js/gsap-elementor-init.js new file mode 100644 index 0000000..da2edca --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/js/gsap-elementor-init.js @@ -0,0 +1,113 @@ +/** + * GSAP与Elementor初始化管理器 + * 确保GSAP和Elementor的正确初始化顺序 + * + * @package Nenghui Energy Theme + * @since 1.0.0 + */ + +(function() { + 'use strict'; + + // 初始化管理器 + const GSAPElementorInitManager = { + initialized: false, + + // 初始化 + init: function() { + if (this.initialized) return; + + // 等待DOM加载完成 + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', () => { + this.setupInitialization(); + }); + } else { + this.setupInitialization(); + } + }, + + // 设置初始化流程 + setupInitialization: function() { + // 1. 首先等待GSAP加载 + this.waitForGSAP(() => { + // 2. 然后等待兼容性管理器 + this.waitForCompatibilityManager(() => { + // 3. 最后初始化兼容性管理器 + if (window.GSAPElementorCompatibility) { + window.GSAPElementorCompatibility.init(); + } + + // 4. 触发自定义事件,通知其他脚本可以安全使用GSAP + this.triggerGSAPReady(); + + this.initialized = true; + }); + }); + }, + + // 等待GSAP加载 + waitForGSAP: function(callback) { + let attempts = 0; + const maxAttempts = 50; + + const checkGSAP = () => { + if (window.gsap && window.ScrollTrigger) { + callback(); + } else if (attempts < maxAttempts) { + attempts++; + setTimeout(checkGSAP, 100); + } else { + console.error('GSAP加载超时'); + } + }; + + checkGSAP(); + }, + + // 等待兼容性管理器加载 + waitForCompatibilityManager: function(callback) { + let attempts = 0; + const maxAttempts = 50; + + const checkManager = () => { + if (window.GSAPElementorCompatibility) { + callback(); + } else if (attempts < maxAttempts) { + attempts++; + setTimeout(checkManager, 100); + } else { + callback(); // 即使失败也继续执行 + } + }; + + checkManager(); + }, + + // 触发GSAP准备就绪事件 + triggerGSAPReady: function() { + // 创建自定义事件 + const gsapReadyEvent = new CustomEvent('gsapReady', { + detail: { + gsap: window.gsap, + ScrollTrigger: window.ScrollTrigger, + api: window.GSAPElementorAPI, + manager: window.GSAPAnimationManager + } + }); + + // 触发事件 + document.dispatchEvent(gsapReadyEvent); + + // 同时设置全局标志 + window.GSAPReady = true; + } + }; + + // 立即初始化 + GSAPElementorInitManager.init(); + + // 暴露到全局作用域 + window.GSAPElementorInitManager = GSAPElementorInitManager; + +})(); \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/js/gsap.min.js b/wp-content/themes/nenghui-energy-theme-cn/assets/js/gsap.min.js new file mode 100644 index 0000000..0c38bc4 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/js/gsap.min.js @@ -0,0 +1,11 @@ +/*! + * GSAP 3.12.2 + * https://greensock.com + * + * @license Copyright 2023, GreenSock. All rights reserved. + * Subject to the terms at https://greensock.com/standard-license or for Club GreenSock members, the agreement issued with that membership. + * @author: Jack Doyle, jack@greensock.com + */ + +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t=t||self).window=t.window||{})}(this,function(e){"use strict";function _inheritsLoose(t,e){t.prototype=Object.create(e.prototype),(t.prototype.constructor=t).__proto__=e}function _assertThisInitialized(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function r(t){return"string"==typeof t}function s(t){return"function"==typeof t}function t(t){return"number"==typeof t}function u(t){return void 0===t}function v(t){return"object"==typeof t}function w(t){return!1!==t}function x(){return"undefined"!=typeof window}function y(t){return s(t)||r(t)}function P(t){return(i=yt(t,ot))&&Ee}function Q(t,e){return console.warn("Invalid property",t,"set to",e,"Missing plugin? gsap.registerPlugin()")}function R(t,e){return!e&&console.warn(t)}function S(t,e){return t&&(ot[t]=e)&&i&&(i[t]=e)||ot}function T(){return 0}function ea(t){var e,r,i=t[0];if(v(i)||s(i)||(t=[t]),!(e=(i._gsap||{}).harness)){for(r=gt.length;r--&&!gt[r].targetTest(i););e=gt[r]}for(r=t.length;r--;)t[r]&&(t[r]._gsap||(t[r]._gsap=new Vt(t[r],e)))||t.splice(r,1);return t}function fa(t){return t._gsap||ea(Ot(t))[0]._gsap}function ga(t,e,r){return(r=t[e])&&s(r)?t[e]():u(r)&&t.getAttribute&&t.getAttribute(e)||r}function ha(t,e){return(t=t.split(",")).forEach(e)||t}function ia(t){return Math.round(1e5*t)/1e5||0}function ja(t){return Math.round(1e7*t)/1e7||0}function ka(t,e){var r=e.charAt(0),i=parseFloat(e.substr(2));return t=parseFloat(t),"+"===r?t+i:"-"===r?t-i:"*"===r?t*i:t/i}function la(t,e){for(var r=e.length,i=0;t.indexOf(e[i])<0&&++ia;)s=s._prev;return s?(e._next=s._next,s._next=e):(e._next=t[r],t[r]=e),e._next?e._next._prev=e:t[i]=e,e._prev=s,e.parent=e._dp=t,e}function ya(t,e,r,i){void 0===r&&(r="_first"),void 0===i&&(i="_last");var n=e._prev,a=e._next;n?n._next=a:t[r]===e&&(t[r]=a),a?a._prev=n:t[i]===e&&(t[i]=n),e._next=e._prev=e.parent=null}function za(t,e){t.parent&&(!e||t.parent.autoRemoveChildren)&&t.parent.remove&&t.parent.remove(t),t._act=0}function Aa(t,e){if(t&&(!e||e._end>t._dur||e._start<0))for(var r=t;r;)r._dirty=1,r=r.parent;return t}function Ca(t,e,r,i){return t._startAt&&(L?t._startAt.revert(ht):t.vars.immediateRender&&!t.vars.autoRevert||t._startAt.render(e,!0,i))}function Ea(t){return t._repeat?Tt(t._tTime,t=t.duration()+t._rDelay)*t:0}function Ga(t,e){return(t-e._start)*e._ts+(0<=e._ts?0:e._dirty?e.totalDuration():e._tDur)}function Ha(t){return t._end=ja(t._start+(t._tDur/Math.abs(t._ts||t._rts||X)||0))}function Ia(t,e){var r=t._dp;return r&&r.smoothChildTiming&&t._ts&&(t._start=ja(r._time-(0X)&&e.render(r,!0)),Aa(t,e)._dp&&t._initted&&t._time>=t._dur&&t._ts){if(t._dur(n=Math.abs(n))&&(a=i,o=n);return a}function tb(t){return za(t),t.scrollTrigger&&t.scrollTrigger.kill(!!L),t.progress()<1&&At(t,"onInterrupt"),t}function wb(t){if(x()&&t){var e=(t=!t.name&&t.default||t).name,r=s(t),i=e&&!r&&t.init?function(){this._props=[]}:t,n={init:T,render:he,add:Qt,kill:ce,modifier:fe,rawVars:0},a={targetTest:0,get:0,getSetter:ne,aliases:{},register:0};if(Ft(),t!==i){if(pt[e])return;qa(i,qa(ua(t,n),a)),yt(i.prototype,yt(n,ua(t,a))),pt[i.prop=e]=i,t.targetTest&&(gt.push(i),ft[e]=1),e=("css"===e?"CSS":e.charAt(0).toUpperCase()+e.substr(1))+"Plugin"}S(e,i),t.register&&t.register(Ee,i,_e)}else t&&Ct.push(t)}function zb(t,e,r){return(6*(t+=t<0?1:1>16,e>>8&St,e&St]:0:Et.black;if(!p){if(","===e.substr(-1)&&(e=e.substr(0,e.length-1)),Et[e])p=Et[e];else if("#"===e.charAt(0)){if(e.length<6&&(e="#"+(n=e.charAt(1))+n+(a=e.charAt(2))+a+(s=e.charAt(3))+s+(5===e.length?e.charAt(4)+e.charAt(4):"")),9===e.length)return[(p=parseInt(e.substr(1,6),16))>>16,p>>8&St,p&St,parseInt(e.substr(7),16)/255];p=[(e=parseInt(e.substr(1),16))>>16,e>>8&St,e&St]}else if("hsl"===e.substr(0,3))if(p=d=e.match(tt),r){if(~e.indexOf("="))return p=e.match(et),i&&p.length<4&&(p[3]=1),p}else o=+p[0]%360/360,u=p[1]/100,n=2*(h=p[2]/100)-(a=h<=.5?h*(u+1):h+u-h*u),3=U?u.endTime(!1):t._dur;return r(e)&&(isNaN(e)||e in o)?(a=e.charAt(0),s="%"===e.substr(-1),n=e.indexOf("="),"<"===a||">"===a?(0<=n&&(e=e.replace(/=/,"")),("<"===a?u._start:u.endTime(0<=u._repeat))+(parseFloat(e.substr(1))||0)*(s?(n<0?u:i).totalDuration()/100:1)):n<0?(e in o||(o[e]=h),o[e]):(a=parseFloat(e.charAt(n-1)+e.substr(n+1)),s&&i&&(a=a/100*($(i)?i[0]:i).totalDuration()),1=r&&te)return i;i=i._next}else for(i=t._last;i&&i._start>=r;){if("isPause"===i.data&&i._start=n._start)&&n._ts&&h!==n){if(n.parent!==this)return this.render(t,e,r);if(n.render(0=this.totalDuration()||!v&&_)&&(f!==this._start&&Math.abs(l)===Math.abs(this._ts)||this._lock||(!t&&g||!(v===m&&0=i&&(a instanceof Zt?e&&n.push(a):(r&&n.push(a),t&&n.push.apply(n,a.getChildren(!0,e,r)))),a=a._next;return n},e.getById=function getById(t){for(var e=this.getChildren(1,1,1),r=e.length;r--;)if(e[r].vars.id===t)return e[r]},e.remove=function remove(t){return r(t)?this.removeLabel(t):s(t)?this.killTweensOf(t):(ya(this,t),t===this._recent&&(this._recent=this._last),Aa(this))},e.totalTime=function totalTime(t,e){return arguments.length?(this._forcing=1,!this._dp&&this._ts&&(this._start=ja(Rt.time-(0r:!r||s.isActive())&&n.push(s):(i=s.getTweensOf(a,r)).length&&n.push.apply(n,i),s=s._next;return n},e.tweenTo=function tweenTo(t,e){e=e||{};var r,i=this,n=xt(i,t),a=e.startAt,s=e.onStart,o=e.onStartParams,u=e.immediateRender,h=Zt.to(i,qa({ease:e.ease||"none",lazy:!1,immediateRender:!1,time:n,overwrite:"auto",duration:e.duration||Math.abs((n-(a&&"time"in a?a.time:i._time))/i.timeScale())||X,onStart:function onStart(){if(i.pause(),!r){var t=e.duration||Math.abs((n-(a&&"time"in a?a.time:i._time))/i.timeScale());h._dur!==t&&Ra(h,t,0,1).render(h._time,!0,!0),r=1}s&&s.apply(h,o||[])}},e));return u?h.render(0):h},e.tweenFromTo=function tweenFromTo(t,e,r){return this.tweenTo(e,qa({startAt:{time:xt(this,t)}},r))},e.recent=function recent(){return this._recent},e.nextLabel=function nextLabel(t){return void 0===t&&(t=this._time),rb(this,xt(this,t))},e.previousLabel=function previousLabel(t){return void 0===t&&(t=this._time),rb(this,xt(this,t),1)},e.currentLabel=function currentLabel(t){return arguments.length?this.seek(t,!0):this.previousLabel(this._time+X)},e.shiftChildren=function shiftChildren(t,e,r){void 0===r&&(r=0);for(var i,n=this._first,a=this.labels;n;)n._start>=r&&(n._start+=t,n._end+=t),n=n._next;if(e)for(i in a)a[i]>=r&&(a[i]+=t);return Aa(this)},e.invalidate=function invalidate(t){var e=this._first;for(this._lock=0;e;)e.invalidate(t),e=e._next;return i.prototype.invalidate.call(this,t)},e.clear=function clear(t){void 0===t&&(t=!0);for(var e,r=this._first;r;)e=r._next,this.remove(r),r=e;return this._dp&&(this._time=this._tTime=this._pTime=0),t&&(this.labels={}),Aa(this)},e.totalDuration=function totalDuration(t){var e,r,i,n=0,a=this,s=a._last,o=U;if(arguments.length)return a.timeScale((a._repeat<0?a.duration():a.totalDuration())/(a.reversed()?-t:t));if(a._dirty){for(i=a.parent;s;)e=s._prev,s._dirty&&s.totalDuration(),o<(r=s._start)&&a._sort&&s._ts&&!a._lock?(a._lock=1,Ka(a,s,r-s._delay,1)._lock=0):o=r,r<0&&s._ts&&(n-=r,(!i&&!a._dp||i&&i.smoothChildTiming)&&(a._start+=r/a._ts,a._time-=r,a._tTime-=r),a.shiftChildren(-r,!1,-Infinity),o=0),s._end>n&&s._ts&&(n=s._end),s=e;Ra(a,a===I&&a._time>n?a._time:n,1,1),a._dirty=0}return a._tDur},Timeline.updateRoot=function updateRoot(t){if(I._ts&&(na(I,Ga(t,I)),f=Rt.frame),Rt.frame>=mt){mt+=q.autoSleep||120;var e=I._first;if((!e||!e._ts)&&q.autoSleep&&Rt._listeners.length<2){for(;e&&!e._ts;)e=e._next;e||Rt.sleep()}}},Timeline}(Ut);qa(Xt.prototype,{_lock:0,_hasPause:0,_forcing:0});function ac(t,e,i,n,a,o){var u,h,l,f;if(pt[t]&&!1!==(u=new pt[t]).init(a,u.rawVars?e[t]:function _processVars(t,e,i,n,a){if(s(t)&&(t=Kt(t,a,e,i,n)),!v(t)||t.style&&t.nodeType||$(t)||Z(t))return r(t)?Kt(t,a,e,i,n):t;var o,u={};for(o in t)u[o]=Kt(t[o],a,e,i,n);return u}(e[t],n,a,o,i),i,n,o)&&(i._pt=h=new _e(i._pt,a,t,0,1,u.render,u,0,u.priority),i!==c))for(l=i._ptLookup[i._targets.indexOf(a)],f=u._props.length;f--;)l[u._props[f]]=h;return u}function gc(t,r,e,i){var n,a,s=r.ease||i||"power1.inOut";if($(r))a=e[t]||(e[t]=[]),r.forEach(function(t,e){return a.push({t:e/(r.length-1)*100,v:t,e:s})});else for(n in r)a=e[n]||(e[n]=[]),"ease"===n||a.push({t:parseFloat(t),v:r[n],e:s})}var Nt,Wt,Qt=function _addPropTween(t,e,i,n,a,o,u,h,l,f){s(n)&&(n=n(a||0,t,o));var c,d=t[e],p="get"!==i?i:s(d)?l?t[e.indexOf("set")||!s(t["get"+e.substr(3)])?e:"get"+e.substr(3)](l):t[e]():d,_=s(d)?l?re:te:$t;if(r(n)&&(~n.indexOf("random(")&&(n=ob(n)),"="===n.charAt(1)&&(!(c=ka(p,n)+(Ya(p)||0))&&0!==c||(n=c))),!f||p!==n||Wt)return isNaN(p*n)||""===n?(d||e in t||Q(e,n),function _addComplexStringPropTween(t,e,r,i,n,a,s){var o,u,h,l,f,c,d,p,_=new _e(this._pt,t,e,0,1,ue,null,n),m=0,g=0;for(_.b=r,_.e=i,r+="",(d=~(i+="").indexOf("random("))&&(i=ob(i)),a&&(a(p=[r,i],t,e),r=p[0],i=p[1]),u=r.match(it)||[];o=it.exec(i);)l=o[0],f=i.substring(m,o.index),h?h=(h+1)%5:"rgba("===f.substr(-5)&&(h=1),l!==u[g++]&&(c=parseFloat(u[g-1])||0,_._pt={_next:_._pt,p:f||1===g?f:",",s:c,c:"="===l.charAt(1)?ka(c,l)-c:parseFloat(l)-c,m:h&&h<4?Math.round:0},m=it.lastIndex);return _.c=m")}),s.duration();else{for(l in u={},x)"ease"===l||"easeEach"===l||gc(l,x[l],u,x.easeEach);for(l in u)for(C=u[l].sort(function(t,e){return t.t-e.t}),o=D=0;o=t._tDur||e<0)&&t.ratio===u&&(u&&za(t,1),r||L||(At(t,u?"onComplete":"onReverseComplete",!0),t._prom&&t._prom()))}else t._zTime||(t._zTime=e)}(this,t,e,r);return this},e.targets=function targets(){return this._targets},e.invalidate=function invalidate(t){return t&&this.vars.runBackwards||(this._startAt=0),this._pt=this._op=this._onUpdate=this._lazy=this.ratio=0,this._ptLookup=[],this.timeline&&this.timeline.invalidate(t),z.prototype.invalidate.call(this,t)},e.resetTo=function resetTo(t,e,r,i){d||Rt.wake(),this._ts||this.play();var n,a=Math.min(this._dur,(this._dp._time-this._start)*this._ts);return this._initted||Gt(this,a),n=this._ease(a/this._dur),function _updatePropTweens(t,e,r,i,n,a,s){var o,u,h,l,f=(t._pt&&t._ptCache||(t._ptCache={}))[e];if(!f)for(f=t._ptCache[e]=[],h=t._ptLookup,l=t._targets.length;l--;){if((o=h[l][e])&&o.d&&o.d._pt)for(o=o.d._pt;o&&o.p!==e&&o.fp!==e;)o=o._next;if(!o)return Wt=1,t.vars[e]="+=0",Gt(t,s),Wt=0,1;f.push(o)}for(l=f.length;l--;)(o=(u=f[l])._pt||u).s=!i&&0!==i||n?o.s+(i||0)+a*o.c:i,o.c=r-o.s,u.e&&(u.e=ia(r)+Ya(u.e)),u.b&&(u.b=o.s+Ya(u.b))}(this,t,e,r,i,n,a)?this.resetTo(t,e,r,i):(Ia(this,0),this.parent||xa(this._dp,this,"_first","_last",this._dp._sort?"_start":0),this.render(0))},e.kill=function kill(t,e){if(void 0===e&&(e="all"),!(t||e&&"all"!==e))return this._lazy=this._pt=0,this.parent?tb(this):this;if(this.timeline){var i=this.timeline.totalDuration();return this.timeline.killTweensOf(t,e,Nt&&!0!==Nt.vars.overwrite)._first||tb(this),this.parent&&i!==this.timeline.totalDuration()&&Ra(this,this._dur*this.timeline._tDur/i,0,1),this}var n,a,s,o,u,h,l,f=this._targets,c=t?Ot(t):f,d=this._ptLookup,p=this._pt;if((!e||"all"===e)&&function _arraysMatch(t,e){for(var r=t.length,i=r===e.length;i&&r--&&t[r]===e[r];);return r<0}(f,c))return"all"===e&&(this._pt=0),tb(this);for(n=this._op=this._op||[],"all"!==e&&(r(e)&&(u={},ha(e,function(t){return u[t]=1}),e=u),e=function _addAliasesToVars(t,e){var r,i,n,a,s=t[0]?fa(t[0]).harness:0,o=s&&s.aliases;if(!o)return e;for(i in r=yt({},e),o)if(i in r)for(n=(a=o[i].split(",")).length;n--;)r[a[n]]=r[i];return r}(f,e)),l=f.length;l--;)if(~c.indexOf(f[l]))for(u in a=d[l],"all"===e?(n[l]=e,o=a,s={}):(s=n[l]=n[l]||{},o=e),o)(h=a&&a[u])&&("kill"in h.d&&!0!==h.d.kill(u)||ya(this,h,"_pt"),delete a[u]),"all"!==s&&(s[u]=1);return this._initted&&!this._pt&&p&&tb(this),this},Tween.to=function to(t,e,r){return new Tween(t,e,r)},Tween.from=function from(t,e){return Va(1,arguments)},Tween.delayedCall=function delayedCall(t,e,r,i){return new Tween(e,0,{immediateRender:!1,lazy:!1,overwrite:!1,delay:t,onComplete:e,onReverseComplete:e,onCompleteParams:r,onReverseCompleteParams:r,callbackScope:i})},Tween.fromTo=function fromTo(t,e,r){return Va(2,arguments)},Tween.set=function set(t,e){return e.duration=0,e.repeatDelay||(e.repeat=0),new Tween(t,e)},Tween.killTweensOf=function killTweensOf(t,e,r){return I.killTweensOf(t,e,r)},Tween}(Ut);qa(Zt.prototype,{_targets:[],_lazy:0,_startAt:0,_op:0,_onInit:0}),ha("staggerTo,staggerFrom,staggerFromTo",function(r){Zt[r]=function(){var t=new Xt,e=Mt.call(arguments,0);return e.splice("staggerFromTo"===r?5:4,0,0),t[r].apply(t,e)}});function oc(t,e,r){return t.setAttribute(e,r)}function wc(t,e,r,i){i.mSet(t,e,i.m.call(i.tween,r,i.mt),i)}var $t=function _setterPlain(t,e,r){return t[e]=r},te=function _setterFunc(t,e,r){return t[e](r)},re=function _setterFuncWithParam(t,e,r,i){return t[e](i.fp,r)},ne=function _getSetter(t,e){return s(t[e])?te:u(t[e])&&t.setAttribute?oc:$t},ae=function _renderPlain(t,e){return e.set(e.t,e.p,Math.round(1e6*(e.s+e.c*t))/1e6,e)},se=function _renderBoolean(t,e){return e.set(e.t,e.p,!!(e.s+e.c*t),e)},ue=function _renderComplexString(t,e){var r=e._pt,i="";if(!t&&e.b)i=e.b;else if(1===t&&e.e)i=e.e;else{for(;r;)i=r.p+(r.m?r.m(r.s+r.c*t):Math.round(1e4*(r.s+r.c*t))/1e4)+i,r=r._next;i+=e.c}e.set(e.t,e.p,i,e)},he=function _renderPropTweens(t,e){for(var r=e._pt;r;)r.r(t,r.d),r=r._next},fe=function _addPluginModifier(t,e,r,i){for(var n,a=this._pt;a;)n=a._next,a.p===i&&a.modifier(t,e,r),a=n},ce=function _killPropTweensOf(t){for(var e,r,i=this._pt;i;)r=i._next,i.p===t&&!i.op||i.op===t?ya(this,i,"_pt"):i.dep||(e=1),i=r;return!e},pe=function _sortPropTweensByPriority(t){for(var e,r,i,n,a=t._pt;a;){for(e=a._next,r=i;r&&r.pr>a.pr;)r=r._next;(a._prev=r?r._prev:n)?a._prev._next=a:i=a,(a._next=r)?r._prev=a:n=a,a=e}t._pt=i},_e=(PropTween.prototype.modifier=function modifier(t,e,r){this.mSet=this.mSet||this.set,this.set=wc,this.m=t,this.mt=r,this.tween=e},PropTween);function PropTween(t,e,r,i,n,a,s,o,u){this.t=e,this.s=i,this.c=n,this.p=r,this.r=a||ae,this.d=s||this,this.set=o||$t,this.pr=u||0,(this._next=t)&&(t._prev=this)}ha(vt+"parent,duration,ease,delay,overwrite,runBackwards,startAt,yoyo,immediateRender,repeat,repeatDelay,data,paused,reversed,lazy,callbackScope,stringFilter,id,yoyoEase,stagger,inherit,repeatRefresh,keyframes,autoRevert,scrollTrigger",function(t){return ft[t]=1}),ot.TweenMax=ot.TweenLite=Zt,ot.TimelineLite=ot.TimelineMax=Xt,I=new Xt({sortChildren:!1,defaults:V,autoRemoveChildren:!0,id:"root",smoothChildTiming:!0}),q.stringFilter=Fb;function Ec(t){return(ye[t]||Te).map(function(t){return t()})}function Fc(){var t=Date.now(),o=[];2 { + animateProfessionalCards(0); + }, 500); + + } catch (error) { + } + } + + /** + * 专业领域卡片动画 + */ + function animateProfessionalCards(currentIndex) { + if (typeof gsap === 'undefined') { + return; + } + + const cards = $('.professional-card'); + + // 重置所有卡片 + gsap.set(cards, { + opacity: 0, + y: 30, + scale: 0.9 + }); + + // 计算当前显示的卡片(一行5个) + const startIndex = Math.floor(currentIndex / 5) * 5; + const visibleCards = cards.slice(startIndex, startIndex + 5); + + // 动画显示当前卡片 + gsap.to(visibleCards, { + opacity: 1, + y: 0, + scale: 1, + duration: 0.6, + stagger: 0.1, + ease: 'back.out(1.7)' + }); + + // 为卡片添加悬停动画 + visibleCards.each(function() { + const card = $(this); + const icon = card.find('.card-icon'); + const number = card.find('.card-number'); + + card.off('mouseenter mouseleave').on('mouseenter', function() { + gsap.to(card, { + y: -10, + scale: 1.05, + duration: 0.3, + ease: 'power2.out' + }); + + gsap.to(icon, { + rotation: 10, + scale: 1.1, + duration: 0.3, + ease: 'power2.out' + }); + + gsap.to(number, { + scale: 1.2, + duration: 0.3, + ease: 'power2.out' + }); + }).on('mouseleave', function() { + gsap.to(card, { + y: 0, + scale: 1, + duration: 0.3, + ease: 'power2.out' + }); + + gsap.to(icon, { + rotation: 0, + scale: 1, + duration: 0.3, + ease: 'power2.out' + }); + + gsap.to(number, { + scale: 1, + duration: 0.3, + ease: 'power2.out' + }); + }); + }); + } + + /** + * 初始化Accordion功能 + */ + function initAccordion() { + const accordionButtons = $('.accordion-button'); + + if (accordionButtons.length === 0) { + return; + } + + // 为每个accordion按钮添加点击事件 + accordionButtons.on('click', function(e) { + e.preventDefault(); + + const button = $(this); + const targetId = button.data('target'); + const targetCollapse = $('#' + targetId); + const isActive = button.hasClass('active'); + + // 检查目标元素是否存在 + if (targetCollapse.length === 0) { + return; + } + + // 如果当前项已经是激活状态,则关闭它 + if (isActive) { + closeAccordionItem(button, targetCollapse); + } else { + // 关闭其他所有项 + closeAllAccordionItems(); + // 打开当前项 + openAccordionItem(button, targetCollapse); + } + }); + + // 确保默认打开的项正确显示 + setTimeout(function() { + const activeButton = $('.accordion-button.active'); + if (activeButton.length > 0) { + const targetId = activeButton.data('target'); + const targetCollapse = $('#' + targetId); + if (targetCollapse.length > 0 && !targetCollapse.hasClass('show')) { + targetCollapse.addClass('show'); + } + } + }, 100); + } + + /** + * 打开accordion项 + */ + function openAccordionItem(button, collapse) { + // 检查是否有GSAP增强动画 + if (typeof window.openAccordionItemWithGSAP === 'function') { + window.openAccordionItemWithGSAP(button, collapse); + } else { + // 纯CSS动画版本 - 不设置内联样式 + button.addClass('active').attr('aria-expanded', 'true'); + collapse.addClass('show'); + } + } + + /** + * 关闭accordion项 + */ + function closeAccordionItem(button, collapse) { + // 检查是否有GSAP增强动画 + if (typeof window.closeAccordionItemWithGSAP === 'function') { + window.closeAccordionItemWithGSAP(button, collapse); + } else { + // 纯CSS动画版本 - 不设置内联样式 + button.removeClass('active').attr('aria-expanded', 'false'); + collapse.removeClass('show'); + } + } + + /** + * 关闭所有accordion项 + */ + function closeAllAccordionItems() { + $('.accordion-button').each(function() { + const button = $(this); + const targetId = button.data('target'); + const targetCollapse = $('#' + targetId); + + if (button.hasClass('active')) { + closeAccordionItem(button, targetCollapse); + } + }); + } + + /** + * 响应式处理 + */ + function handleResponsive() { + const windowWidth = $(window).width(); + + // 移除可能干扰CSS动画的内联样式 + $('.accordion-collapse').each(function() { + $(this).css('max-height', ''); + }); + } + + // 窗口大小改变时重新处理响应式 + $(window).on('resize', function() { + handleResponsive(); + }); + + // 初始化时处理响应式 + handleResponsive(); + + /** + * 初始化GSAP动画 + */ + function initGSAPAnimations() { + // 检查GSAP是否已加载 + if (typeof gsap === 'undefined') { + return; + } + + // 等待兼容性管理器初始化 + if (window.GSAPElementorAPI) { + + // 使用兼容性API初始化动画 + initPageLoadAnimationsWithAPI(); + initScrollAnimationsWithAPI(); + } else { + + // 页面加载动画 + initPageLoadAnimations(); + + // 滚动触发动画 + initScrollAnimations(); + } + + // Accordion动画增强 + enhanceAccordionAnimations(); + } + + /** + * 使用兼容性API的页面加载动画 + */ + function initPageLoadAnimationsWithAPI() { + // 设置初始状态 + gsap.set('.section-title', { opacity: 0, y: 50 }); + gsap.set('.section-description', { opacity: 0, y: 30 }); + gsap.set('.accordion-item', { opacity: 0, x: -30 }); + gsap.set('.system-image img', { opacity: 0, scale: 0.8 }); + + // 创建时间线动画 + const tl = gsap.timeline({ delay: 0.3 }); + + tl.to('.section-title', { + opacity: 1, + y: 0, + duration: 0.8, + ease: 'power2.out', + onComplete: function() { + $('.section-title').addClass('animated'); + } + }) + .to('.section-description', { + opacity: 1, + y: 0, + duration: 0.6, + ease: 'power2.out' + }, '-=0.4') + .to('.accordion-item', { + opacity: 1, + x: 0, + duration: 0.6, + stagger: 0.1, + ease: 'power2.out' + }, '-=0.3') + .to('.system-image img', { + opacity: 1, + scale: 1, + duration: 0.8, + ease: 'back.out(1.7)' + }, '-=0.5'); + + // 注册动画到管理器 + if (window.GSAPAnimationManager) { + window.GSAPAnimationManager.register('pageLoad', tl); + } + } + + /** + * 使用兼容性API的滚动触发动画 + */ + function initScrollAnimationsWithAPI() { + // 检查ScrollTrigger是否已加载 + if (typeof ScrollTrigger === 'undefined') { + return; + } + + // 使用兼容性API创建ScrollTrigger + const floatingAnimation = window.GSAPElementorAPI.createScrollTrigger({ + trigger: '.system-image img', + start: 'top bottom', + end: 'bottom top', + onEnter: function() { + // 图片悬浮动画 - 延迟启动,避免与页面加载动画冲突 + setTimeout(function() { + const floatTween = gsap.to('.system-image img', { + y: -10, + duration: 2, + ease: 'power1.inOut', + yoyo: true, + repeat: -1 + }); + + if (window.GSAPAnimationManager) { + window.GSAPAnimationManager.register('imageFloat', floatTween); + } + }, 2000); + } + }); + + // 滚动时的视差效果 + const parallaxTrigger = window.GSAPElementorAPI.createScrollTrigger({ + trigger: '.about-content', + start: 'top bottom', + end: 'bottom top', + scrub: true, + animation: gsap.to('.about-content', { + backgroundPosition: '50% 100px', + ease: 'none' + }) + }); + } + + /** + * 页面加载动画 + */ + function initPageLoadAnimations() { + // 等待GSAP兼容性就绪 + if (!document.body.classList.contains('gsap-ready')) { + document.addEventListener('gsapCompatibilityReady', initPageLoadAnimations); + return; + } + + // 设置初始状态 + gsap.set('.section-title', { opacity: 0, y: 50 }); + gsap.set('.section-description', { opacity: 0, y: 30 }); + gsap.set('.accordion-item', { opacity: 0, x: -30 }); + gsap.set('.system-image img', { opacity: 0, scale: 0.8 }); + + // 创建时间线动画 + const tl = gsap.timeline({ delay: 0.3 }); + + tl.to('.section-title', { + opacity: 1, + y: 0, + duration: 0.8, + ease: 'power2.out', + onComplete: function() { + $('.section-title').addClass('animated'); + } + }) + .to('.section-description', { + opacity: 1, + y: 0, + duration: 0.6, + ease: 'power2.out' + }, '-=0.4') + .to('.accordion-item', { + opacity: 1, + x: 0, + duration: 0.6, + stagger: 0.1, + ease: 'power2.out' + }, '-=0.3') + .to('.system-image img', { + opacity: 1, + scale: 1, + duration: 0.8, + ease: 'back.out(1.7)' + }, '-=0.5'); + } + + /** + * 滚动触发动画 + */ + function initScrollAnimations() { + // 检查ScrollTrigger是否已加载 + if (typeof ScrollTrigger === 'undefined') { + console.warn('ScrollTrigger plugin not loaded'); + return; + } + + // 注册ScrollTrigger插件 + gsap.registerPlugin(ScrollTrigger); + + // 图片悬浮动画 - 延迟启动,避免与页面加载动画冲突 + setTimeout(function() { + gsap.to('.system-image img', { + y: -10, + duration: 2, + ease: 'power1.inOut', + yoyo: true, + repeat: -1 + }); + }, 2000); + + // 滚动时的视差效果 + gsap.to('.about-content', { + backgroundPosition: '50% 100px', + ease: 'none', + scrollTrigger: { + trigger: '.about-content', + start: 'top bottom', + end: 'bottom top', + scrub: true + } + }); + } + + /** + * 增强Accordion动画 + */ + function enhanceAccordionAnimations() { + // 为accordion按钮添加悬停动画 + $('.accordion-button').hover( + function() { + gsap.to($(this), { + scale: 1.02, + duration: 0.3, + ease: 'power2.out' + }); + }, + function() { + gsap.to($(this), { + scale: 1, + duration: 0.3, + ease: 'power2.out' + }); + } + ); + + // 纯CSS动画版本 - 避免JavaScript动画冲突 + window.openAccordionItemWithGSAP = function(button, collapse) { + button.addClass('active').attr('aria-expanded', 'true'); + collapse.addClass('show'); + }; + + // 纯CSS动画版本 - 避免JavaScript动画冲突 + window.closeAccordionItemWithGSAP = function(button, collapse) { + button.removeClass('active').attr('aria-expanded', 'false'); + collapse.removeClass('show'); + }; + } + +})(jQuery); \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/js/household-carousel.js b/wp-content/themes/nenghui-energy-theme-cn/assets/js/household-carousel.js new file mode 100644 index 0000000..bf4d2a2 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/js/household-carousel.js @@ -0,0 +1,279 @@ +/** + * 户用轮播图交互功能 + */ + +class HouseholdCarousel { + constructor(container) { + this.container = container; + this.track = container.querySelector('.household-carousel-track'); + this.slides = container.querySelectorAll('.household-slide'); + this.prevBtn = container.querySelector('.household-carousel-prev'); + this.nextBtn = container.querySelector('.household-carousel-next'); + // 移除指示器相关代码 + + this.currentSlide = 0; + this.totalSlides = this.slides.length; + this.isAnimating = false; + this.autoPlayInterval = null; + this.autoPlayDelay = 5000; // 5秒自动切换 + + // 触摸相关属性 + this.touchStartX = 0; + this.touchEndX = 0; + this.touchThreshold = 50; + + this.init(); + } + + init() { + if (this.totalSlides <= 1) { + this.hideControls(); + return; + } + + this.bindEvents(); + this.startAutoPlay(); + this.preloadImages(); + + // 设置初始状态 + this.updateSlide(0, false); + } + + bindEvents() { + // 控制按钮事件 + if (this.prevBtn) { + this.prevBtn.addEventListener('click', () => this.prevSlide()); + } + + if (this.nextBtn) { + this.nextBtn.addEventListener('click', () => this.nextSlide()); + } + + // 移除指示器事件绑定 + + // 触摸事件 + this.container.addEventListener('touchstart', (e) => this.handleTouchStart(e), { passive: true }); + this.container.addEventListener('touchend', (e) => this.handleTouchEnd(e), { passive: true }); + + // 鼠标悬停暂停自动播放 + this.container.addEventListener('mouseenter', () => this.stopAutoPlay()); + this.container.addEventListener('mouseleave', () => this.startAutoPlay()); + + // 键盘导航 + this.container.addEventListener('keydown', (e) => this.handleKeydown(e)); + + // 窗口失焦暂停自动播放 + document.addEventListener('visibilitychange', () => { + if (document.hidden) { + this.stopAutoPlay(); + } else { + this.startAutoPlay(); + } + }); + + // 窗口大小改变时重新计算 + window.addEventListener('resize', () => this.handleResize()); + } + + prevSlide() { + if (this.isAnimating) return; + + const prevIndex = this.currentSlide === 0 ? this.totalSlides - 1 : this.currentSlide - 1; + this.updateSlide(prevIndex); + } + + nextSlide() { + if (this.isAnimating) return; + + const nextIndex = this.currentSlide === this.totalSlides - 1 ? 0 : this.currentSlide + 1; + this.updateSlide(nextIndex); + } + + goToSlide(index) { + if (this.isAnimating || index === this.currentSlide) return; + + this.updateSlide(index); + } + + updateSlide(index, animate = true) { + if (this.isAnimating) return; + + this.isAnimating = animate; + + // 更新当前幻灯片 + this.slides[this.currentSlide].classList.remove('active'); + this.slides[index].classList.add('active'); + + // 移除指示器更新代码 + + // 更新轨道数据属性 + this.track.setAttribute('data-current-slide', index); + + this.currentSlide = index; + + // 动画完成后重置状态 + if (animate) { + setTimeout(() => { + this.isAnimating = false; + }, 500); + } else { + this.isAnimating = false; + } + + // 触发自定义事件 + this.container.dispatchEvent(new CustomEvent('slideChange', { + detail: { currentSlide: this.currentSlide, totalSlides: this.totalSlides } + })); + } + + startAutoPlay() { + if (this.totalSlides <= 1) return; + + this.stopAutoPlay(); + this.autoPlayInterval = setInterval(() => { + this.nextSlide(); + }, this.autoPlayDelay); + } + + stopAutoPlay() { + if (this.autoPlayInterval) { + clearInterval(this.autoPlayInterval); + this.autoPlayInterval = null; + } + } + + preloadImages() { + this.slides.forEach((slide, index) => { + const img = slide.querySelector('img'); + if (img && index > 0) { + // 预加载非首张图片 + const preloadImg = new Image(); + preloadImg.src = img.src; + } + }); + } + + handleTouchStart(e) { + this.touchStartX = e.touches[0].clientX; + } + + handleTouchEnd(e) { + this.touchEndX = e.changedTouches[0].clientX; + this.handleSwipe(); + } + + handleSwipe() { + const swipeDistance = this.touchStartX - this.touchEndX; + + if (Math.abs(swipeDistance) > this.touchThreshold) { + if (swipeDistance > 0) { + // 向左滑动,显示下一张 + this.nextSlide(); + } else { + // 向右滑动,显示上一张 + this.prevSlide(); + } + } + } + + handleKeydown(e) { + switch (e.key) { + case 'ArrowLeft': + e.preventDefault(); + this.prevSlide(); + break; + case 'ArrowRight': + e.preventDefault(); + this.nextSlide(); + break; + case 'Home': + e.preventDefault(); + this.goToSlide(0); + break; + case 'End': + e.preventDefault(); + this.goToSlide(this.totalSlides - 1); + break; + } + } + + handleResize() { + // 防抖处理 + clearTimeout(this.resizeTimeout); + this.resizeTimeout = setTimeout(() => { + // 重新计算布局 + this.updateSlide(this.currentSlide, false); + }, 250); + } + + hideControls() { + if (this.prevBtn) this.prevBtn.style.display = 'none'; + if (this.nextBtn) this.nextBtn.style.display = 'none'; + + // 移除指示器隐藏代码 + } + + // 公共API方法 + getCurrentSlide() { + return this.currentSlide; + } + + getTotalSlides() { + return this.totalSlides; + } + + setAutoPlayDelay(delay) { + this.autoPlayDelay = delay; + if (this.autoPlayInterval) { + this.startAutoPlay(); + } + } + + destroy() { + this.stopAutoPlay(); + + // 移除事件监听器 + if (this.prevBtn) { + this.prevBtn.removeEventListener('click', () => this.prevSlide()); + } + + if (this.nextBtn) { + this.nextBtn.removeEventListener('click', () => this.nextSlide()); + } + + // 移除指示器事件清理代码 + + this.container.removeEventListener('touchstart', (e) => this.handleTouchStart(e)); + this.container.removeEventListener('touchend', (e) => this.handleTouchEnd(e)); + this.container.removeEventListener('mouseenter', () => this.stopAutoPlay()); + this.container.removeEventListener('mouseleave', () => this.startAutoPlay()); + this.container.removeEventListener('keydown', (e) => this.handleKeydown(e)); + } +} + +// 初始化所有轮播图 +function initHouseholdCarousels() { + const carousels = document.querySelectorAll('.household-carousel-block'); + const instances = []; + + carousels.forEach(carousel => { + const instance = new HouseholdCarousel(carousel); + instances.push(instance); + + // 将实例存储到DOM元素上,方便外部访问 + carousel.householdCarousel = instance; + }); + + return instances; +} + +// DOM加载完成后初始化 +if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', initHouseholdCarousels); +} else { + initHouseholdCarousels(); +} + +// 导出类和初始化函数 +window.HouseholdCarousel = HouseholdCarousel; +window.initHouseholdCarousels = initHouseholdCarousels; \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/js/index.js b/wp-content/themes/nenghui-energy-theme-cn/assets/js/index.js new file mode 100644 index 0000000..bba6fb2 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/js/index.js @@ -0,0 +1,45 @@ +// 这是自定义JS文件,用于覆盖主题默认JS文件 + +document.addEventListener('DOMContentLoaded', function() { + // 菜单切换 + const menuToggle = document.querySelector('.menu-toggle'); + const navRight = document.querySelector('.nav-right'); + + if (menuToggle && navRight) { + menuToggle.addEventListener('click', function() { + navRight.classList.toggle('active'); + + // 切换菜单按钮动画 + const spans = this.getElementsByTagName('span'); + this.classList.toggle('active'); + + if (this.classList.contains('active')) { + spans[0].style.transform = 'rotate(45deg) translate(5px, 5px)'; + spans[1].style.opacity = '0'; + spans[2].style.transform = 'rotate(-45deg) translate(7px, -7px)'; + } else { + spans[0].style.transform = 'none'; + spans[1].style.opacity = '1'; + spans[2].style.transform = 'none'; + } + }); + } + + // 滚动时改变导航栏样式 + let lastScroll = 0; + const nav = document.querySelector('.main-nav'); + + window.addEventListener('scroll', function() { + const currentScroll = window.pageYOffset; + + if (currentScroll > lastScroll && currentScroll > 80) { + // 向下滚动 + nav.style.transform = 'translateY(-100%)'; + } else { + // 向上滚动 + nav.style.transform = 'translateY(0)'; + } + + lastScroll = currentScroll; + }); +}); diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/js/investor-reception.js b/wp-content/themes/nenghui-energy-theme-cn/assets/js/investor-reception.js new file mode 100644 index 0000000..0358d64 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/js/investor-reception.js @@ -0,0 +1,129 @@ +/** + * 投资者接待区块 JavaScript + * 处理基本的初始化和动画效果 + */ + +(function($) { + 'use strict'; + + // 投资者接待管理器 + window.investorReceptionManager = { + + // 初始化 + init: function() { + this.bindEvents(); + this.initializeBlocks(); + }, + + // 绑定事件 + bindEvents: function() { + $(document).ready(() => { + this.setupResponsiveHandling(); + }); + }, + + // 初始化所有投资者接待区块 + initializeBlocks: function() { + $('.investor-reception-block').each(function() { + const $block = $(this); + + // 添加加载完成类 + $block.addClass('loaded'); + + // 初始化图片懒加载 + investorReceptionManager.initLazyLoading($block); + + // 添加动画效果 + investorReceptionManager.addAnimations($block); + }); + }, + + // 设置响应式处理 + setupResponsiveHandling: function() { + let resizeTimer; + + $(window).on('resize', () => { + clearTimeout(resizeTimer); + resizeTimer = setTimeout(() => { + this.handleResize(); + }, 250); + }); + }, + + // 处理窗口大小变化 + handleResize: function() { + $('.investor-reception-block').each(function() { + const $block = $(this); + investorReceptionManager.adjustLayout($block); + }); + }, + + // 调整布局 + adjustLayout: function($block) { + const windowWidth = $(window).width(); + + if (windowWidth <= 768) { + $block.addClass('mobile-layout'); + } else { + $block.removeClass('mobile-layout'); + } + }, + + // 初始化懒加载 + initLazyLoading: function($block) { + const $image = $block.find('.reception-image'); + + if ($image.length && 'IntersectionObserver' in window) { + const observer = new IntersectionObserver((entries) => { + entries.forEach(entry => { + if (entry.isIntersecting) { + const $target = $(entry.target); + $target.addClass('loaded'); + observer.unobserve(entry.target); + } + }); + }); + + observer.observe($image[0]); + } + }, + + // 添加动画效果 + addAnimations: function($block) { + // 检查是否支持 Intersection Observer + if ('IntersectionObserver' in window) { + const observer = new IntersectionObserver((entries) => { + entries.forEach(entry => { + if (entry.isIntersecting) { + const $target = $(entry.target); + $target.addClass('animate-in'); + + // 延迟显示子元素 + setTimeout(() => { + $target.find('.title-section').addClass('animate-in'); + }, 200); + + setTimeout(() => { + $target.find('.contact-section').addClass('animate-in'); + }, 400); + + observer.unobserve(entry.target); + } + }); + }, { + threshold: 0.2 + }); + + observer.observe($block[0]); + } else { + // 降级处理:直接添加动画类 + $block.addClass('animate-in'); + $block.find('.title-section, .contact-section').addClass('animate-in'); + } + } + }; + + // 初始化 + investorReceptionManager.init(); + +})(jQuery); \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/js/navigation-menu.js b/wp-content/themes/nenghui-energy-theme-cn/assets/js/navigation-menu.js new file mode 100644 index 0000000..9014194 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/js/navigation-menu.js @@ -0,0 +1,299 @@ +/** + * Navigation Menu Block JavaScript + * 导航菜单区块交互功能 + */ + +(function($) { + 'use strict'; + + // 导航菜单类 + class NavigationMenu { + constructor(element) { + this.element = element; + this.menuList = element.querySelector('.navigation-menu-list'); + this.dropdownItems = element.querySelectorAll('.has-dropdown'); + this.isMobile = window.innerWidth <= 768; + + this.init(); + } + + init() { + this.setupDropdowns(); + this.setupKeyboardNavigation(); + this.setupMobileHandling(); + this.setupResizeHandler(); + this.setupClickOutside(); + } + + // 设置下拉菜单功能 + setupDropdowns() { + this.dropdownItems.forEach(item => { + const link = item.querySelector('a'); + const submenu = item.querySelector('.sub-menu'); + + if (!submenu) return; + + // 鼠标悬停事件 + item.addEventListener('mouseenter', () => { + if (!this.isMobile) { + this.showSubmenu(submenu); + } + }); + + item.addEventListener('mouseleave', () => { + if (!this.isMobile) { + this.hideSubmenu(submenu); + } + }); + + // 点击事件(移动端) + link.addEventListener('click', (e) => { + if (this.isMobile) { + e.preventDefault(); + this.toggleSubmenu(submenu); + } + }); + + // 添加ARIA属性 + link.setAttribute('aria-haspopup', 'true'); + link.setAttribute('aria-expanded', 'false'); + submenu.setAttribute('aria-hidden', 'true'); + }); + } + + // 显示子菜单 + showSubmenu(submenu) { + submenu.style.opacity = '1'; + submenu.style.visibility = 'visible'; + submenu.style.transform = 'translateY(0)'; + submenu.setAttribute('aria-hidden', 'false'); + + const parentLink = submenu.parentElement.querySelector('a'); + if (parentLink) { + parentLink.setAttribute('aria-expanded', 'true'); + } + } + + // 隐藏子菜单 + hideSubmenu(submenu) { + submenu.style.opacity = '0'; + submenu.style.visibility = 'hidden'; + submenu.style.transform = 'translateY(-10px)'; + submenu.setAttribute('aria-hidden', 'true'); + + const parentLink = submenu.parentElement.querySelector('a'); + if (parentLink) { + parentLink.setAttribute('aria-expanded', 'false'); + } + } + + // 切换子菜单显示状态 + toggleSubmenu(submenu) { + const isVisible = submenu.style.opacity === '1' || + submenu.getAttribute('aria-hidden') === 'false'; + + if (isVisible) { + this.hideSubmenu(submenu); + } else { + // 先隐藏其他打开的子菜单 + this.hideAllSubmenus(); + this.showSubmenu(submenu); + } + } + + // 隐藏所有子菜单 + hideAllSubmenus() { + const allSubmenus = this.element.querySelectorAll('.sub-menu'); + allSubmenus.forEach(submenu => { + this.hideSubmenu(submenu); + }); + } + + // 设置键盘导航 + setupKeyboardNavigation() { + const menuLinks = this.element.querySelectorAll('a'); + + menuLinks.forEach((link, index) => { + link.addEventListener('keydown', (e) => { + switch(e.key) { + case 'ArrowDown': + e.preventDefault(); + this.focusNextItem(menuLinks, index); + break; + case 'ArrowUp': + e.preventDefault(); + this.focusPrevItem(menuLinks, index); + break; + case 'ArrowRight': + e.preventDefault(); + this.openSubmenuOnFocus(link); + break; + case 'ArrowLeft': + e.preventDefault(); + this.closeSubmenuOnFocus(link); + break; + case 'Escape': + e.preventDefault(); + this.hideAllSubmenus(); + link.blur(); + break; + case 'Enter': + case ' ': + if (link.getAttribute('aria-haspopup') === 'true') { + e.preventDefault(); + const submenu = link.parentElement.querySelector('.sub-menu'); + if (submenu) { + this.toggleSubmenu(submenu); + } + } + break; + } + }); + }); + } + + // 焦点移动到下一个项目 + focusNextItem(items, currentIndex) { + const nextIndex = (currentIndex + 1) % items.length; + items[nextIndex].focus(); + } + + // 焦点移动到上一个项目 + focusPrevItem(items, currentIndex) { + const prevIndex = currentIndex === 0 ? items.length - 1 : currentIndex - 1; + items[prevIndex].focus(); + } + + // 在焦点时打开子菜单 + openSubmenuOnFocus(link) { + const submenu = link.parentElement.querySelector('.sub-menu'); + if (submenu) { + this.showSubmenu(submenu); + const firstSubmenuLink = submenu.querySelector('a'); + if (firstSubmenuLink) { + firstSubmenuLink.focus(); + } + } + } + + // 在焦点时关闭子菜单 + closeSubmenuOnFocus(link) { + const parentItem = link.closest('.sub-menu'); + if (parentItem) { + const parentLink = parentItem.parentElement.querySelector('a'); + if (parentLink) { + this.hideSubmenu(parentItem); + parentLink.focus(); + } + } + } + + // 设置移动端处理 + setupMobileHandling() { + // 移动端特殊处理逻辑 + if (this.isMobile) { + this.element.classList.add('mobile-menu'); + + // 为移动端添加展开/收起按钮 + this.dropdownItems.forEach(item => { + const link = item.querySelector('a'); + const arrow = link.querySelector('.dropdown-arrow'); + + if (arrow) { + arrow.addEventListener('click', (e) => { + e.stopPropagation(); + e.preventDefault(); + + const submenu = item.querySelector('.sub-menu'); + if (submenu) { + this.toggleSubmenu(submenu); + } + }); + } + }); + } + } + + // 设置窗口大小改变处理 + setupResizeHandler() { + let resizeTimer; + window.addEventListener('resize', () => { + clearTimeout(resizeTimer); + resizeTimer = setTimeout(() => { + const wasMobile = this.isMobile; + this.isMobile = window.innerWidth <= 768; + + if (wasMobile !== this.isMobile) { + this.hideAllSubmenus(); + + if (this.isMobile) { + this.element.classList.add('mobile-menu'); + } else { + this.element.classList.remove('mobile-menu'); + } + } + }, 250); + }); + } + + // 设置点击外部关闭菜单 + setupClickOutside() { + document.addEventListener('click', (e) => { + if (!this.element.contains(e.target)) { + this.hideAllSubmenus(); + } + }); + } + + // 销毁实例 + destroy() { + // 移除事件监听器 + this.dropdownItems.forEach(item => { + const link = item.querySelector('a'); + const submenu = item.querySelector('.sub-menu'); + + if (link && submenu) { + // 这里应该移除所有添加的事件监听器 + // 为了简化,我们只是重置状态 + this.hideSubmenu(submenu); + } + }); + } + } + + // 初始化所有导航菜单 + function initNavigationMenus() { + const menuElements = document.querySelectorAll('.navigation-menu-block'); + const menuInstances = []; + + menuElements.forEach(element => { + const instance = new NavigationMenu(element); + menuInstances.push(instance); + }); + + return menuInstances; + } + + // DOM加载完成后初始化 + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', initNavigationMenus); + } else { + initNavigationMenus(); + } + + // 为jQuery用户提供接口 + if ($ && typeof $.fn !== 'undefined') { + $.fn.navigationMenu = function() { + return this.each(function() { + if (!$(this).data('navigation-menu')) { + const instance = new NavigationMenu(this); + $(this).data('navigation-menu', instance); + } + }); + }; + } + + // 全局暴露NavigationMenu类 + window.NavigationMenu = NavigationMenu; + +})(typeof jQuery !== 'undefined' ? jQuery : undefined); \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/js/performance-monitor.js b/wp-content/themes/nenghui-energy-theme-cn/assets/js/performance-monitor.js new file mode 100644 index 0000000..be293b8 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/js/performance-monitor.js @@ -0,0 +1,358 @@ +/** + * 性能监控器 + * Performance Monitor + * + * 监控和优化JavaScript性能,特别是动画和滚动性能 + * Monitor and optimize JavaScript performance, especially animations and scrolling + * + * @package Nenghui Energy Theme + * @since 1.0.0 + */ + +(function() { + 'use strict'; + + // 性能监控器 + const PerformanceMonitor = { + metrics: { + animations: [], + scrollEvents: 0, + memoryUsage: [], + renderTime: [], + gsapAnimations: 0, + elementorConflicts: 0 + }, + + observers: { + performance: null, + memory: null, + intersection: null + }, + + // 初始化 + init: function() { + if (this.initialized) return; + + this.setupPerformanceObserver(); + this.setupMemoryMonitoring(); + this.setupAnimationMonitoring(); + this.setupScrollOptimization(); + this.setupIntersectionObserver(); + + this.initialized = true; + }, + + // 设置性能观察器 + setupPerformanceObserver: function() { + if (!window.PerformanceObserver) return; + + try { + this.observers.performance = new PerformanceObserver((list) => { + const entries = list.getEntries(); + entries.forEach(entry => { + if (entry.entryType === 'measure') { + this.metrics.renderTime.push({ + name: entry.name, + duration: entry.duration, + timestamp: Date.now() + }); + } + }); + }); + + this.observers.performance.observe({ entryTypes: ['measure', 'navigation'] }); + } catch (e) { + } + }, + + // 设置内存监控 + setupMemoryMonitoring: function() { + if (!performance.memory) return; + + const monitorMemory = () => { + const memory = performance.memory; + this.metrics.memoryUsage.push({ + used: memory.usedJSHeapSize, + total: memory.totalJSHeapSize, + limit: memory.jsHeapSizeLimit, + timestamp: Date.now() + }); + + // 保持最近100条记录 + if (this.metrics.memoryUsage.length > 100) { + this.metrics.memoryUsage.shift(); + } + + // 检查内存泄漏 + this.checkMemoryLeaks(); + }; + + // 每30秒监控一次内存 + setInterval(monitorMemory, 30000); + monitorMemory(); // 立即执行一次 + }, + + // 设置动画监控 + setupAnimationMonitoring: function() { + // 监控GSAP动画 + if (window.gsap) { + const originalTo = gsap.to; + const originalFrom = gsap.from; + const originalFromTo = gsap.fromTo; + + gsap.to = (...args) => { + this.metrics.gsapAnimations++; + return originalTo.apply(gsap, args); + }; + + gsap.from = (...args) => { + this.metrics.gsapAnimations++; + return originalFrom.apply(gsap, args); + }; + + gsap.fromTo = (...args) => { + this.metrics.gsapAnimations++; + return originalFromTo.apply(gsap, args); + }; + } + + // 监控CSS动画 + document.addEventListener('animationstart', (e) => { + this.metrics.animations.push({ + type: 'css', + name: e.animationName, + target: e.target.tagName, + timestamp: Date.now() + }); + }); + }, + + // 设置滚动优化 + setupScrollOptimization: function() { + let scrollTimeout; + let lastScrollTime = 0; + + const optimizedScrollHandler = (e) => { + const now = Date.now(); + + // 限制滚动事件频率 + if (now - lastScrollTime < 16) return; // 约60fps + + lastScrollTime = now; + this.metrics.scrollEvents++; + + // 清除之前的超时 + clearTimeout(scrollTimeout); + + // 滚动结束后的清理工作 + scrollTimeout = setTimeout(() => { + this.optimizeAfterScroll(); + }, 150); + }; + + window.addEventListener('scroll', optimizedScrollHandler, { passive: true }); + }, + + // 设置交叉观察器 + setupIntersectionObserver: function() { + if (!window.IntersectionObserver) return; + + this.observers.intersection = new IntersectionObserver((entries) => { + entries.forEach(entry => { + const element = entry.target; + + if (entry.isIntersecting) { + // 元素进入视口,可以启动动画 + element.classList.add('in-viewport'); + this.triggerLazyAnimations(element); + } else { + // 元素离开视口,可以暂停动画 + element.classList.remove('in-viewport'); + this.pauseAnimations(element); + } + }); + }, { + rootMargin: '50px', + threshold: 0.1 + }); + + // 观察所有动画元素 + document.querySelectorAll('[data-animate], .gsap-animate, .elementor-invisible').forEach(el => { + this.observers.intersection.observe(el); + }); + }, + + // 检查内存泄漏 + checkMemoryLeaks: function() { + const recent = this.metrics.memoryUsage.slice(-10); + if (recent.length < 10) return; + + const trend = recent.reduce((acc, curr, index) => { + if (index === 0) return acc; + return acc + (curr.used - recent[index - 1].used); + }, 0); + + if (trend > 10 * 1024 * 1024) { // 10MB增长 + console.warn('⚠️ 检测到潜在内存泄漏,内存使用持续增长'); + this.cleanupMemory(); + } + }, + + // 清理内存 + cleanupMemory: function() { + // 清理过期的动画记录 + const now = Date.now(); + this.metrics.animations = this.metrics.animations.filter(anim => + now - anim.timestamp < 300000 // 保留5分钟内的记录 + ); + + // 清理过期的渲染时间记录 + this.metrics.renderTime = this.metrics.renderTime.filter(render => + now - render.timestamp < 300000 + ); + + // 强制垃圾回收(如果可用) + if (window.gc) { + window.gc(); + } + }, + + // 滚动后优化 + optimizeAfterScroll: function() { + // 刷新ScrollTrigger + if (window.ScrollTrigger) { + ScrollTrigger.refresh(); + } + + // 清理不在视口内的动画 + document.querySelectorAll('.gsap-animate:not(.in-viewport)').forEach(el => { + gsap.killTweensOf(el); + }); + }, + + // 触发懒加载动画 + triggerLazyAnimations: function(element) { + if (element.hasAttribute('data-lazy-animate')) { + const animationType = element.getAttribute('data-lazy-animate'); + + switch (animationType) { + case 'fadeIn': + gsap.fromTo(element, + { opacity: 0, y: 30 }, + { opacity: 1, y: 0, duration: 0.6, ease: "power2.out" } + ); + break; + case 'slideIn': + gsap.fromTo(element, + { x: -50, opacity: 0 }, + { x: 0, opacity: 1, duration: 0.8, ease: "power2.out" } + ); + break; + } + + element.removeAttribute('data-lazy-animate'); + } + }, + + // 暂停动画 + pauseAnimations: function(element) { + if (window.gsap) { + gsap.killTweensOf(element); + } + }, + + // 获取性能报告 + getPerformanceReport: function() { + const memoryUsage = this.metrics.memoryUsage; + const currentMemory = memoryUsage[memoryUsage.length - 1]; + + return { + summary: { + totalAnimations: this.metrics.animations.length, + gsapAnimations: this.metrics.gsapAnimations, + scrollEvents: this.metrics.scrollEvents, + elementorConflicts: this.metrics.elementorConflicts + }, + memory: { + current: currentMemory ? Math.round(currentMemory.used / 1024 / 1024) + 'MB' : 'N/A', + peak: memoryUsage.length > 0 ? + Math.round(Math.max(...memoryUsage.map(m => m.used)) / 1024 / 1024) + 'MB' : 'N/A' + }, + performance: { + averageRenderTime: this.metrics.renderTime.length > 0 ? + Math.round(this.metrics.renderTime.reduce((sum, r) => sum + r.duration, 0) / this.metrics.renderTime.length) + 'ms' : 'N/A' + }, + recommendations: this.getRecommendations() + }; + }, + + // 获取优化建议 + getRecommendations: function() { + const recommendations = []; + + if (this.metrics.scrollEvents > 1000) { + recommendations.push('考虑进一步优化滚动事件处理,使用更大的节流间隔'); + } + + if (this.metrics.gsapAnimations > 50) { + recommendations.push('GSAP动画数量较多,考虑使用对象池或动画复用'); + } + + const memoryUsage = this.metrics.memoryUsage; + if (memoryUsage.length > 0) { + const latest = memoryUsage[memoryUsage.length - 1]; + if (latest.used > latest.total * 0.8) { + recommendations.push('内存使用率较高,建议清理未使用的动画和事件监听器'); + } + } + + return recommendations; + }, + + // 销毁监控器 + destroy: function() { + // 断开所有观察器 + Object.values(this.observers).forEach(observer => { + if (observer && observer.disconnect) { + observer.disconnect(); + } + }); + + // 清理数据 + this.metrics = { + animations: [], + scrollEvents: 0, + memoryUsage: [], + renderTime: [], + gsapAnimations: 0, + elementorConflicts: 0 + }; + + this.initialized = false; + } + }; + + // 等待DOM加载完成后初始化 + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', () => PerformanceMonitor.init()); + } else { + PerformanceMonitor.init(); + } + + // 页面卸载时清理 + window.addEventListener('beforeunload', () => PerformanceMonitor.destroy()); + + // 暴露到全局作用域 + window.PerformanceMonitor = PerformanceMonitor; + + // 开发模式下的调试功能 + if (window.location.hostname === 'localhost' || window.location.search.includes('debug=1')) { + // 每分钟输出性能报告 + setInterval(() => { + }, 60000); + + // 添加全局调试命令 + window.debugPerformance = () => PerformanceMonitor.getPerformanceReport(); + } + +})(); \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/js/products-services.js b/wp-content/themes/nenghui-energy-theme-cn/assets/js/products-services.js new file mode 100644 index 0000000..ffb3584 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/js/products-services.js @@ -0,0 +1,138 @@ +/** + * Products Services Block Animation + * 产品服务区块动画效果 + */ + +// 等待GSAP准备就绪事件 +function waitForGSAPReady(callback) { + if (window.gsap && window.ScrollTrigger) { + callback(); + } else { + document.addEventListener('gsapReady', callback); + // 备用方案:如果事件未触发,使用定时器 + setTimeout(() => { + if (window.gsap && window.ScrollTrigger) { + callback(); + } + }, 3000); + } +} + +// 初始化产品服务动画 +function initProductsServicesAnimation() { + // 等待GSAP兼容性就绪 + if (!document.body.classList.contains('gsap-ready')) { + document.addEventListener('gsapCompatibilityReady', initProductsServicesAnimation); + return; + } + + const productsServicesItems = document.querySelectorAll('.products-services-item'); + + if (productsServicesItems.length === 0) { + return; + } + + // 检查Elementor兼容性 + productsServicesItems.forEach((item, index) => { + // 检查元素是否被Elementor暂停或已准备就绪 + if (item.hasAttribute('data-gsap-paused')) { + // 监听Elementor准备就绪事件 + item.addEventListener('gsapElementReady', () => { + createItemAnimation(item, index); + }); + } else if (item.hasAttribute('data-gsap-ready') || !item.closest('[data-elementor-type]')) { + // 元素已准备就绪或不在Elementor环境中,直接创建动画 + createItemAnimation(item, index); + } else { + // 默认情况下创建动画 + createItemAnimation(item, index); + } + }); +} + +// 创建项目动画 +function createItemAnimation(item, index) { + gsap.fromTo(item, + { + opacity: 0, + y: 50 + }, + { + opacity: 1, + y: 0, + duration: 0.8, + ease: "power2.out", + delay: index * 0.2, // 逐个显示,每个延迟0.2秒 + scrollTrigger: { + trigger: item, + start: "top 80%", // 当元素顶部距离视口底部80%时触发 + end: "bottom 20%", + toggleActions: "play none none reverse", // 进入时播放,离开时反转 + markers: false // 设置为 true 可以显示调试标记 + } + } + ); + + // 添加GSAP悬停动画 + item.addEventListener('mouseenter', function() { + gsap.to(item, { + y: -10, + duration: 0.3, + ease: "power2.out" + }); + }); + + item.addEventListener('mouseleave', function() { + gsap.to(item, { + y: 0, + duration: 0.3, + ease: "power2.out" + }); + }); +} + +// 创建标题动画 +function createHeaderAnimation(header) { + gsap.fromTo(header, + { + opacity: 0, + y: 30 + }, + { + opacity: 1, + y: 0, + duration: 1, + ease: "power2.out", + scrollTrigger: { + trigger: header, + start: "top 85%", + end: "bottom 20%", + toggleActions: "play none none reverse" + } + } + ); +} + +// 等待GSAP准备就绪后初始化 +waitForGSAPReady(() => { + // 注册 ScrollTrigger 插件 + gsap.registerPlugin(ScrollTrigger); + + // DOM 加载完成后初始化动画 + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', initProductsServicesAnimation); + } else { + initProductsServicesAnimation(); + } + + // 如果是动态加载的内容,提供重新初始化的函数 + window.reinitProductsServicesAnimation = function() { + // 刷新 ScrollTrigger + ScrollTrigger.refresh(); + initProductsServicesAnimation(); + }; +}); + +// 如果GSAP未加载,显示警告 +if (typeof gsap === 'undefined') { +} \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/js/professional-fields.js b/wp-content/themes/nenghui-energy-theme-cn/assets/js/professional-fields.js new file mode 100644 index 0000000..c510417 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/js/professional-fields.js @@ -0,0 +1,195 @@ +/** + * 专业领域轮播初始化 + * 使用 SimpleCarousel 实现一行5个卡片的轮播效果 + */ + +(function() { + 'use strict'; + + // 等待DOM加载完成 + document.addEventListener('DOMContentLoaded', function() { + initProfessionalCarousel(); + }); + + function initProfessionalCarousel() { + const carouselContainer = document.getElementById('professionalCarousel'); + if (!carouselContainer) { + console.warn('Professional carousel container not found'); + return; + } + + // 检查SimpleCarousel是否可用 + if (typeof SimpleCarousel === 'undefined') { + console.error('SimpleCarousel is not loaded'); + return; + } + + // 轮播配置 + const carouselOptions = { + autoplay: true, + autoplayDelay: 4000, + loop: true, + navigation: true, + pagination: false, + touchEnabled: true, + slidesPerView: 5, // 一行显示5个卡片 + spaceBetween: 20, + onSlideChange: function(currentIndex, previousIndex) { + // 轮播切换时的回调 + console.log('Slide changed from', previousIndex, 'to', currentIndex); + + // 添加切换动画效果 + animateSlideChange(currentIndex, previousIndex); + } + }; + + // 初始化轮播 + const carousel = new SimpleCarousel(carouselContainer, carouselOptions); + + // 存储轮播实例到全局,便于调试 + window.professionalCarousel = carousel; + + // 添加键盘导航支持 + addKeyboardNavigation(carousel); + + // 添加鼠标悬停暂停功能 + addHoverPause(carousel, carouselContainer); + + // 添加加载完成动画 + addLoadAnimation(carouselContainer); + + console.log('Professional carousel initialized successfully'); + } + + /** + * 添加轮播切换动画效果 + */ + function animateSlideChange(currentIndex, previousIndex) { + const cards = document.querySelectorAll('.professional-card'); + + // 为当前显示的卡片添加动画 + cards.forEach((card, index) => { + card.classList.remove('slide-in', 'slide-out'); + + // 计算当前显示的卡片范围(一行5个) + const startIndex = Math.floor(currentIndex / 5) * 5; + const endIndex = startIndex + 4; + + if (index >= startIndex && index <= endIndex) { + // 当前显示的卡片 + setTimeout(() => { + card.classList.add('slide-in'); + }, (index - startIndex) * 100); // 错开动画时间 + } + }); + } + + /** + * 添加键盘导航支持 + */ + function addKeyboardNavigation(carousel) { + document.addEventListener('keydown', function(e) { + // 只在轮播容器可见时响应键盘事件 + const carouselContainer = document.getElementById('professionalCarousel'); + if (!isElementInViewport(carouselContainer)) { + return; + } + + switch(e.key) { + case 'ArrowLeft': + e.preventDefault(); + carousel.prev(); + break; + case 'ArrowRight': + e.preventDefault(); + carousel.next(); + break; + } + }); + } + + /** + * 添加鼠标悬停暂停功能 + */ + function addHoverPause(carousel, container) { + container.addEventListener('mouseenter', function() { + carousel.pauseAutoplay(); + }); + + container.addEventListener('mouseleave', function() { + carousel.resumeAutoplay(); + }); + } + + /** + * 添加加载完成动画 + */ + function addLoadAnimation(container) { + // 添加加载状态 + container.classList.add('loading'); + + // 模拟加载完成 + setTimeout(() => { + container.classList.remove('loading'); + container.classList.add('loaded'); + }, 500); + } + + /** + * 检查元素是否在视口中 + */ + function isElementInViewport(el) { + if (!el) return false; + + const rect = el.getBoundingClientRect(); + return ( + rect.top >= 0 && + rect.left >= 0 && + rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && + rect.right <= (window.innerWidth || document.documentElement.clientWidth) + ); + } + + /** + * 响应式处理 + */ + function handleResponsive() { + const carousel = window.professionalCarousel; + if (!carousel) return; + + const screenWidth = window.innerWidth; + let slidesPerView = 5; + + if (screenWidth <= 480) { + slidesPerView = 2; + } else if (screenWidth <= 768) { + slidesPerView = 3; + } else if (screenWidth <= 1024) { + slidesPerView = 4; + } + + // 更新轮播配置(如果SimpleCarousel支持动态更新) + if (carousel.updateSlidesPerView) { + carousel.updateSlidesPerView(slidesPerView); + } + } + + // 监听窗口大小变化 + window.addEventListener('resize', debounce(handleResponsive, 250)); + + /** + * 防抖函数 + */ + function debounce(func, wait) { + let timeout; + return function executedFunction(...args) { + const later = () => { + clearTimeout(timeout); + func(...args); + }; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + }; + } + +})(); \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/js/scroll-animations.js b/wp-content/themes/nenghui-energy-theme-cn/assets/js/scroll-animations.js new file mode 100644 index 0000000..35283b6 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/js/scroll-animations.js @@ -0,0 +1,386 @@ +/** + * 滚动触发动画系统 JavaScript + * 基于 GSAP ScrollTrigger 的动画控制器 + * 配合 scroll-animations.css 使用 + */ + +(function() { + 'use strict'; + + // 动画系统配置 + const ScrollAnimations = { + // 默认配置 + config: { + // 触发位置(元素进入视口的百分比) + triggerStart: 'top 80%', + triggerEnd: 'bottom 20%', + // 是否启用标记(调试用) + markers: false, + // 默认动画持续时间 + duration: 0.8, + // 默认缓动函数 + ease: 'power2.out', + // 是否启用批量处理 + batch: true, + // 批量处理间隔 + batchInterval: 0.1, + // 是否在元素离开视口时反转动画 + toggleActions: 'play none none reverse' + }, + + // 动画类型映射 + animationTypes: { + 'fade-in-up': { + from: { opacity: 0, y: 50 }, + to: { opacity: 1, y: 0 } + }, + 'fade-in-down': { + from: { opacity: 0, y: -50 }, + to: { opacity: 1, y: 0 } + }, + 'fade-in-left': { + from: { opacity: 0, x: -50 }, + to: { opacity: 1, x: 0 } + }, + 'fade-in-right': { + from: { opacity: 0, x: 50 }, + to: { opacity: 1, x: 0 } + }, + 'scale-in': { + from: { opacity: 0, scale: 0.8 }, + to: { opacity: 1, scale: 1 } + }, + 'rotate-in': { + from: { opacity: 0, rotation: -10, scale: 0.9 }, + to: { opacity: 1, rotation: 0, scale: 1 } + }, + 'fade-scale-up': { + from: { opacity: 0, y: 30, scale: 0.95 }, + to: { opacity: 1, y: 0, scale: 1 } + }, + 'blur-in': { + from: { opacity: 0, filter: 'blur(10px)', y: 20 }, + to: { opacity: 1, filter: 'blur(0px)', y: 0 } + } + }, + + // 初始化函数 + init: function() { + // 等待 GSAP 和 ScrollTrigger 加载完成 + this.waitForGSAP(() => { + this.setupScrollTrigger(); + this.initAnimations(); + this.setupStaggerAnimations(); + this.setupTextReveal(); + this.bindEvents(); + + }); + }, + + // 等待 GSAP 加载 + waitForGSAP: function(callback) { + if (typeof gsap !== 'undefined' && typeof ScrollTrigger !== 'undefined') { + callback(); + } else { + // 监听 GSAP 准备就绪事件 + document.addEventListener('gsapReady', callback); + // 备用方案:轮询检查 + let attempts = 0; + const checkGSAP = () => { + attempts++; + if (typeof gsap !== 'undefined' && typeof ScrollTrigger !== 'undefined') { + callback(); + } else if (attempts < 50) { + setTimeout(checkGSAP, 100); + } else { + + this.initCSSFallback(); + } + }; + setTimeout(checkGSAP, 100); + } + }, + + // 设置 ScrollTrigger + setupScrollTrigger: function() { + gsap.registerPlugin(ScrollTrigger); + + // 设置全局配置 + ScrollTrigger.config({ + autoRefreshEvents: "visibilitychange,DOMContentLoaded,load" + }); + + // 启用批量处理以提高性能 + ScrollTrigger.batch(".scroll-animate", { + onEnter: (elements) => { + elements.forEach(element => { + this.animateElement(element, 'enter'); + }); + }, + onLeave: (elements) => { + if (this.config.toggleActions.includes('reverse')) { + elements.forEach(element => { + this.animateElement(element, 'leave'); + }); + } + }, + start: this.config.triggerStart, + end: this.config.triggerEnd + }); + }, + + // 初始化动画 + initAnimations: function() { + // 为每种动画类型创建 ScrollTrigger + Object.keys(this.animationTypes).forEach(animationType => { + const elements = document.querySelectorAll(`.${animationType}`); + + if (elements.length > 0) { + this.createScrollTrigger(elements, animationType); + } + }); + }, + + // 创建 ScrollTrigger + createScrollTrigger: function(elements, animationType) { + const animationConfig = this.animationTypes[animationType]; + + elements.forEach((element, index) => { + // 设置初始状态 + gsap.set(element, animationConfig.from); + + // 获取延迟时间 + const delay = this.getElementDelay(element, index); + + // 创建动画 + const animation = gsap.to(element, { + ...animationConfig.to, + duration: this.config.duration, + ease: this.config.ease, + delay: delay, + scrollTrigger: { + trigger: element, + start: this.config.triggerStart, + end: this.config.triggerEnd, + toggleActions: this.config.toggleActions, + markers: this.config.markers, + onEnter: () => { + element.classList.add('animate-active'); + this.dispatchEvent(element, 'scrollAnimateEnter'); + }, + onLeave: () => { + if (this.config.toggleActions.includes('reverse')) { + element.classList.remove('animate-active'); + this.dispatchEvent(element, 'scrollAnimateLeave'); + } + } + } + }); + + // 存储动画实例到元素上 + element._scrollAnimation = animation; + }); + }, + + // 设置交错动画 + setupStaggerAnimations: function() { + const staggerContainers = document.querySelectorAll('.stagger-container'); + + staggerContainers.forEach(container => { + const items = container.querySelectorAll('.stagger-item'); + + if (items.length > 0) { + // 设置初始状态 + gsap.set(items, { opacity: 0, y: 30 }); + + // 创建交错动画 + gsap.to(items, { + opacity: 1, + y: 0, + duration: 0.6, + ease: this.config.ease, + stagger: this.config.batchInterval, + scrollTrigger: { + trigger: container, + start: this.config.triggerStart, + end: this.config.triggerEnd, + toggleActions: this.config.toggleActions, + onEnter: () => { + container.classList.add('animate-active'); + } + } + }); + } + }); + }, + + // 设置文字揭示动画 + setupTextReveal: function() { + const textElements = document.querySelectorAll('.text-reveal'); + + textElements.forEach(element => { + // 将文字包装在 span 中 + this.wrapTextInSpans(element); + + const spans = element.querySelectorAll('span'); + + // 设置初始状态 + gsap.set(spans, { opacity: 0, y: '100%' }); + + // 创建文字动画 + gsap.to(spans, { + opacity: 1, + y: '0%', + duration: 0.6, + ease: this.config.ease, + stagger: 0.05, + scrollTrigger: { + trigger: element, + start: this.config.triggerStart, + end: this.config.triggerEnd, + toggleActions: this.config.toggleActions + } + }); + }); + }, + + // 包装文字到 span 中 + wrapTextInSpans: function(element) { + const text = element.textContent; + const words = text.split(' '); + + element.innerHTML = words.map(word => + `${word}` + ).join(' '); + }, + + // 获取元素延迟时间 + getElementDelay: function(element, index) { + // 检查是否有延迟类 + const delayClasses = [ + 'animate-delay-100', 'animate-delay-200', 'animate-delay-300', + 'animate-delay-400', 'animate-delay-500', 'animate-delay-600', + 'animate-delay-700', 'animate-delay-800' + ]; + + for (let delayClass of delayClasses) { + if (element.classList.contains(delayClass)) { + return parseInt(delayClass.split('-')[2]) / 1000; + } + } + + // 如果启用批量处理,返回基于索引的延迟 + return this.config.batch ? index * this.config.batchInterval : 0; + }, + + // 动画元素 + animateElement: function(element, direction) { + if (direction === 'enter') { + element.classList.add('animate-active'); + } else { + element.classList.remove('animate-active'); + } + }, + + // 分发自定义事件 + dispatchEvent: function(element, eventName) { + const event = new CustomEvent(eventName, { + detail: { element: element }, + bubbles: true + }); + element.dispatchEvent(event); + }, + + // CSS 回退方案 + initCSSFallback: function() { + + + // 使用 Intersection Observer 作为回退 + if ('IntersectionObserver' in window) { + const observer = new IntersectionObserver((entries) => { + entries.forEach(entry => { + if (entry.isIntersecting) { + entry.target.classList.add('animate-active'); + } + }); + }, { + threshold: 0.1, + rootMargin: '0px 0px -20% 0px' + }); + + // 观察所有动画元素 + Object.keys(this.animationTypes).forEach(animationType => { + const elements = document.querySelectorAll(`.${animationType}`); + elements.forEach(element => observer.observe(element)); + }); + } + }, + + // 绑定事件 + bindEvents: function() { + // 窗口大小改变时刷新 ScrollTrigger + window.addEventListener('resize', () => { + if (typeof ScrollTrigger !== 'undefined') { + ScrollTrigger.refresh(); + } + }); + + // 页面可见性改变时暂停/恢复动画 + document.addEventListener('visibilitychange', () => { + if (typeof gsap !== 'undefined') { + if (document.hidden) { + gsap.globalTimeline.pause(); + } else { + gsap.globalTimeline.resume(); + } + } + }); + }, + + // 公共 API + api: { + // 刷新所有 ScrollTrigger + refresh: function() { + if (typeof ScrollTrigger !== 'undefined') { + ScrollTrigger.refresh(); + } + }, + + // 启用调试模式 + enableDebug: function() { + ScrollAnimations.config.markers = true; + if (typeof ScrollTrigger !== 'undefined') { + ScrollTrigger.refresh(); + } + }, + + // 禁用调试模式 + disableDebug: function() { + ScrollAnimations.config.markers = false; + if (typeof ScrollTrigger !== 'undefined') { + ScrollTrigger.refresh(); + } + }, + + // 手动触发元素动画 + triggerAnimation: function(element) { + if (element && element._scrollAnimation) { + element._scrollAnimation.play(); + } + } + } + }; + + // 等待 DOM 加载完成后初始化 + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', () => { + ScrollAnimations.init(); + }); + } else { + ScrollAnimations.init(); + } + + // 将 API 暴露到全局 + window.ScrollAnimations = ScrollAnimations.api; + +})(); \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/js/search.js b/wp-content/themes/nenghui-energy-theme-cn/assets/js/search.js new file mode 100644 index 0000000..c096ca0 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/js/search.js @@ -0,0 +1,540 @@ +/** + * 搜索功能JavaScript文件 + * 实现搜索框的弹出/收起动画和交互功能 + * 包含新闻搜索模块的交互功能 + */ + +// 新闻搜索模块功能 +(function() { + 'use strict'; + + // 等待DOM加载完成 + document.addEventListener('DOMContentLoaded', function() { + initNewsSearch(); + }); + + function initNewsSearch() { + const searchInput = document.getElementById('news-search'); + const categorySelect = document.getElementById('news-category'); + const searchForm = document.querySelector('.news-search-form'); + const suggestionsContainer = document.getElementById('search-suggestions'); + + if (!searchInput || !categorySelect || !searchForm) { + return; + } + + // 搜索建议数据(可以从后端获取) + let searchSuggestions = []; + let currentSuggestionIndex = -1; + + // 分类下拉动画 + categorySelect.addEventListener('focus', function() { + this.style.transform = 'scale(1.02)'; + }); + + categorySelect.addEventListener('blur', function() { + this.style.transform = 'scale(1)'; + }); + + // 分类选择改变时自动提交表单 + categorySelect.addEventListener('change', function() { + const selectedOption = this.options[this.selectedIndex]; + const url = selectedOption.getAttribute('data-url'); + const searchVal = searchInput.value.trim(); + + // 如果搜索词为空且有目标URL,直接跳转(用于“显示全部”或切换分类) + if (searchVal === '' && url) { + window.location.href = url; + } else { + searchForm.submit(); + } + }); + + // 搜索输入框事件 + searchInput.addEventListener('input', function() { + const query = this.value.trim(); + if (query.length >= 2) { + fetchSearchSuggestions(query); + } else { + hideSuggestions(); + } + }); + + // 键盘事件处理 + searchInput.addEventListener('keydown', function(e) { + if (e.key === 'Enter') { + e.preventDefault(); + if (currentSuggestionIndex >= 0 && searchSuggestions[currentSuggestionIndex]) { + this.value = searchSuggestions[currentSuggestionIndex]; + hideSuggestions(); + } + searchForm.submit(); + } else if (e.key === 'ArrowDown') { + e.preventDefault(); + navigateSuggestions(1); + } else if (e.key === 'ArrowUp') { + e.preventDefault(); + navigateSuggestions(-1); + } else if (e.key === 'Escape') { + hideSuggestions(); + } + }); + + // 点击外部隐藏建议 + document.addEventListener('click', function(e) { + if (!searchInput.contains(e.target) && !suggestionsContainer.contains(e.target)) { + hideSuggestions(); + } + }); + + // 获取搜索建议 + function fetchSearchSuggestions(query) { + // 模拟搜索建议(实际项目中应该从后端API获取) + const mockSuggestions = [ + '新能源汽车', + '新能源政策', + '新能源技术', + '新能源发展', + '新能源投资', + '太阳能发电', + '风能发电', + '储能技术', + '电池技术', + '充电桩建设' + ]; + + searchSuggestions = mockSuggestions.filter(item => + item.toLowerCase().includes(query.toLowerCase()) + ).slice(0, 5); + + showSuggestions(); + } + + // 显示搜索建议 + function showSuggestions() { + if (searchSuggestions.length === 0) { + hideSuggestions(); + return; + } + + let html = ''; + searchSuggestions.forEach((suggestion, index) => { + html += `
${suggestion}
`; + }); + + suggestionsContainer.innerHTML = html; + suggestionsContainer.classList.add('show'); + + // 绑定建议项点击事件 + suggestionsContainer.querySelectorAll('.suggestion-item').forEach(item => { + item.addEventListener('click', function() { + searchInput.value = this.textContent; + hideSuggestions(); + searchForm.submit(); + }); + + item.addEventListener('mouseenter', function() { + currentSuggestionIndex = parseInt(this.dataset.index); + updateSuggestionHighlight(); + }); + }); + } + + // 隐藏搜索建议 + function hideSuggestions() { + suggestionsContainer.classList.remove('show'); + currentSuggestionIndex = -1; + } + + // 导航搜索建议 + function navigateSuggestions(direction) { + if (searchSuggestions.length === 0) return; + + currentSuggestionIndex += direction; + + if (currentSuggestionIndex < 0) { + currentSuggestionIndex = searchSuggestions.length - 1; + } else if (currentSuggestionIndex >= searchSuggestions.length) { + currentSuggestionIndex = 0; + } + + updateSuggestionHighlight(); + } + + // 更新建议高亮 + function updateSuggestionHighlight() { + const items = suggestionsContainer.querySelectorAll('.suggestion-item'); + items.forEach((item, index) => { + if (index === currentSuggestionIndex) { + item.classList.add('active'); + } else { + item.classList.remove('active'); + } + }); + } + + // 表单提交处理 + searchForm.addEventListener('submit', function(e) { + const query = searchInput.value.trim(); + const category = categorySelect.value; + + if (!query && !category) { + e.preventDefault(); + searchInput.focus(); + return; + } + + // 添加加载动画 + const searchButton = searchForm.querySelector('.search-button'); + if (searchButton) { + searchButton.style.opacity = '0.7'; + searchButton.style.transform = 'scale(0.95)'; + } + }); + + // 平滑的焦点动画 + searchInput.addEventListener('focus', function() { + this.parentElement.style.transform = 'scale(1.02)'; + this.parentElement.style.boxShadow = '0 0 0 3px rgba(0, 123, 255, 0.1)'; + }); + + searchInput.addEventListener('blur', function() { + this.parentElement.style.transform = 'scale(1)'; + this.parentElement.style.boxShadow = 'none'; + }); + } + + // 页面加载完成后初始化新闻搜索功能 + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', initNewsSearch); + } else { + initNewsSearch(); + } +})(); + +(function() { + 'use strict'; + + // DOM元素 + let searchToggle, searchOverlay, searchInput, searchClose, searchForm; + + // 初始化函数 + function initSearch() { + // 获取DOM元素 + searchToggle = document.getElementById('searchToggle'); + searchOverlay = document.getElementById('searchOverlay'); + searchInput = document.getElementById('searchInput'); + searchClose = document.getElementById('searchClose'); + searchForm = document.querySelector('.search-form'); + + if (!searchToggle || !searchOverlay) { + return; + } + + // 绑定事件 + bindEvents(); + + // 初始化GSAP动画(如果可用) + if (typeof gsap !== 'undefined') { + initGSAPAnimations(); + } + } + + // 绑定事件 + function bindEvents() { + // 搜索按钮点击事件 + searchToggle.addEventListener('click', openSearch); + + // 关闭按钮点击事件 + if (searchClose) { + searchClose.addEventListener('click', closeSearch); + } + + // 遮罩层点击事件 + searchOverlay.addEventListener('click', function(e) { + if (e.target === searchOverlay) { + closeSearch(); + } + }); + + // ESC键关闭搜索 + document.addEventListener('keydown', function(e) { + if (e.key === 'Escape' && searchOverlay.classList.contains('active')) { + closeSearch(); + } + }); + + // 搜索表单提交事件 + if (searchForm) { + searchForm.addEventListener('submit', handleSearchSubmit); + } + + // 搜索输入框事件 + if (searchInput) { + searchInput.addEventListener('input', handleSearchInput); + searchInput.addEventListener('focus', handleSearchFocus); + searchInput.addEventListener('blur', handleSearchBlur); + } + } + + // 打开搜索框 + function openSearch() { + searchOverlay.classList.add('active'); + searchToggle.classList.add('active'); + document.body.style.overflow = 'hidden'; + + // 延迟聚焦到输入框 + setTimeout(() => { + if (searchInput) { + searchInput.focus(); + } + }, 400); + + // 触发自定义事件 + document.dispatchEvent(new CustomEvent('searchOpened')); + } + + // 关闭搜索框 + function closeSearch() { + searchOverlay.classList.remove('active'); + searchToggle.classList.remove('active'); + document.body.style.overflow = ''; + + // 清空输入框(可选) + if (searchInput) { + // searchInput.value = ''; + } + + // 触发自定义事件 + document.dispatchEvent(new CustomEvent('searchClosed')); + } + + // 处理搜索表单提交 + function handleSearchSubmit(e) { + const query = searchInput.value.trim(); + + if (!query) { + e.preventDefault(); + searchInput.focus(); + + // 添加震动效果 + if (typeof gsap !== 'undefined') { + gsap.to(searchInput, { + x: [-10, 10, -8, 8, -6, 6, -4, 4, -2, 2, 0], + duration: 0.6, + ease: "power2.out" + }); + } else { + searchInput.classList.add('shake'); + setTimeout(() => { + searchInput.classList.remove('shake'); + }, 600); + } + + return false; + } + + // 可以在这里添加搜索分析代码 + if (typeof gtag !== 'undefined') { + gtag('event', 'search', { + search_term: query + }); + } + } + + // 处理搜索输入 + function handleSearchInput(e) { + const query = e.target.value.trim(); + + // 可以在这里实现实时搜索建议 + if (query.length >= 2) { + // debounce搜索请求 + clearTimeout(handleSearchInput.timeout); + handleSearchInput.timeout = setTimeout(() => { + fetchSearchSuggestions(query); + }, 300); + } else { + hideSuggestions(); + } + } + + // 搜索输入框获得焦点 + function handleSearchFocus() { + searchInput.parentElement.classList.add('focused'); + } + + // 搜索输入框失去焦点 + function handleSearchBlur() { + searchInput.parentElement.classList.remove('focused'); + } + + // 获取搜索建议(示例实现) + function fetchSearchSuggestions(query) { + // 这里可以实现AJAX搜索建议 + // 示例:向WordPress REST API发送请求 + /* + fetch(`${themeData.ajaxUrl}?action=search_suggestions&query=${encodeURIComponent(query)}&nonce=${themeData.nonce}`) + .then(response => response.json()) + .then(data => { + if (data.success) { + showSuggestions(data.data); + } + }) + .catch(error => { + console.error('搜索建议获取失败:', error); + }); + */ + } + + // 显示搜索建议 + function showSuggestions(suggestions) { + let suggestionsContainer = document.querySelector('.search-suggestions'); + + if (!suggestionsContainer) { + suggestionsContainer = document.createElement('div'); + suggestionsContainer.className = 'search-suggestions'; + searchInput.parentElement.appendChild(suggestionsContainer); + } + + if (suggestions && suggestions.length > 0) { + suggestionsContainer.innerHTML = suggestions.map(item => + `
${item.title}
` + ).join(''); + + // 绑定建议项点击事件 + suggestionsContainer.querySelectorAll('.search-suggestion-item').forEach(item => { + item.addEventListener('click', function() { + searchInput.value = this.dataset.value; + hideSuggestions(); + searchForm.submit(); + }); + }); + + suggestionsContainer.classList.add('show'); + } else { + hideSuggestions(); + } + } + + // 隐藏搜索建议 + function hideSuggestions() { + const suggestionsContainer = document.querySelector('.search-suggestions'); + if (suggestionsContainer) { + suggestionsContainer.classList.remove('show'); + } + } + + // 初始化GSAP动画 + function initGSAPAnimations() { + // 注册ScrollTrigger插件(如果可用) + if (typeof ScrollTrigger !== 'undefined') { + gsap.registerPlugin(ScrollTrigger); + } + + // 搜索按钮悬停动画 + searchToggle.addEventListener('mouseenter', function() { + gsap.to(this.querySelector('.search-icon'), { + rotation: 90, + scale: 1.1, + duration: 0.3, + ease: "back.out(1.7)" + }); + }); + + searchToggle.addEventListener('mouseleave', function() { + gsap.to(this.querySelector('.search-icon'), { + rotation: 0, + scale: 1, + duration: 0.3, + ease: "back.out(1.7)" + }); + }); + + // 自定义搜索框打开动画 + document.addEventListener('searchOpened', function() { + const searchBox = document.querySelector('.search-box'); + const searchInputWrapper = document.querySelector('.search-input-wrapper'); + const searchSubmit = document.querySelector('.search-submit'); + + // 重置初始状态 + gsap.set([searchBox, searchInputWrapper, searchSubmit], { + opacity: 0, + y: 30, + scale: 0.9 + }); + + // 创建时间线动画 + const tl = gsap.timeline(); + + tl.to(searchBox, { + opacity: 1, + y: 0, + scale: 1, + duration: 0.4, + ease: "back.out(1.7)" + }) + .to(searchInputWrapper, { + opacity: 1, + y: 0, + scale: 1, + duration: 0.3, + ease: "power2.out" + }, "-=0.2") + .to(searchSubmit, { + opacity: 1, + y: 0, + scale: 1, + duration: 0.3, + ease: "power2.out" + }, "-=0.1"); + }); + } + + // 工具函数:防抖 + function debounce(func, wait) { + let timeout; + return function executedFunction(...args) { + const later = () => { + clearTimeout(timeout); + func(...args); + }; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + }; + } + + // 工具函数:节流 + function throttle(func, limit) { + let inThrottle; + return function() { + const args = arguments; + const context = this; + if (!inThrottle) { + func.apply(context, args); + inThrottle = true; + setTimeout(() => inThrottle = false, limit); + } + }; + } + + // 页面加载完成后初始化 + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', initSearch); + } else { + initSearch(); + } + + // 导出到全局(用于调试) + window.ThemeSearch = { + open: openSearch, + close: closeSearch, + toggle: function() { + if (searchOverlay && searchOverlay.classList.contains('active')) { + closeSearch(); + } else { + openSearch(); + } + } + }; + +})(); \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/js/simple-carousel.js b/wp-content/themes/nenghui-energy-theme-cn/assets/js/simple-carousel.js new file mode 100644 index 0000000..4561c24 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/js/simple-carousel.js @@ -0,0 +1,328 @@ +/** + * Simple Carousel Plugin - Swiper替代方案 + * 轻量级轮播插件,避免与平滑滚动库冲突 + */ + +(function() { + 'use strict'; + + class SimpleCarousel { + constructor(container, options = {}) { + this.container = container; + this.options = { + autoplay: true, + autoplayDelay: 5000, + loop: false, + navigation: true, + pagination: true, + touchEnabled: true, + ...options + }; + + this.currentIndex = 0; + this.slides = []; + this.isAnimating = false; + this.autoplayTimer = null; + this.touchStartX = 0; + this.touchEndX = 0; + + this.init(); + } + + init() { + this.setupSlides(); + this.setupNavigation(); + this.setupPagination(); + this.setupTouch(); + this.setupAutoplay(); + this.updateSlides(); + + // 触发初始化完成回调 + if (this.options.onInit) { + this.options.onInit(); + } + } + + setupSlides() { + const wrapper = this.container.querySelector('.carousel-wrapper'); + if (!wrapper) return; + + this.wrapper = wrapper; // 保存wrapper引用 + this.slides = Array.from(wrapper.children); + this.slidesPerView = this.options.slidesPerView || 5; + this.totalGroups = Math.ceil(this.slides.length / this.slidesPerView); + + // 设置轮播容器样式 + wrapper.style.position = 'relative'; + wrapper.style.overflow = 'hidden'; + wrapper.style.display = 'flex'; + wrapper.style.alignItems = 'center'; + wrapper.style.transition = 'transform 0.5s ease'; + + // 为每个幻灯片设置样式 + this.slides.forEach((slide, index) => { + if (this.slidesPerView === 1) { + // 单个幻灯片模式:每个幻灯片占100%宽度 + slide.style.flex = '0 0 100%'; + } else { + // 多个幻灯片模式:根据slidesPerView计算宽度 + const slideWidth = 100 / this.slidesPerView; + slide.style.flex = `0 0 ${slideWidth}%`; + } + slide.style.transition = 'all 0.3s ease'; + }); + + // 初始化显示第一组 + this.updateSlides(); + } + + setupNavigation() { + if (!this.options.navigation) return; + + const nextBtn = this.container.querySelector('.carousel-button-next'); + const prevBtn = this.container.querySelector('.carousel-button-prev'); + + if (nextBtn) { + nextBtn.addEventListener('click', (e) => { + e.preventDefault(); + this.next(); + }); + } + + if (prevBtn) { + prevBtn.addEventListener('click', (e) => { + e.preventDefault(); + this.prev(); + }); + } + } + + setupPagination() { + if (!this.options.pagination) return; + + const pagination = this.container.querySelector('.carousel-pagination'); + if (!pagination) return; + + // 使用现有的分页器按钮,只需要绑定事件 + const bullets = pagination.querySelectorAll('.carousel-pagination-bullet'); + bullets.forEach((bullet, index) => { + bullet.addEventListener('click', () => this.goTo(index)); + }); + } + + setupTouch() { + if (!this.options.touchEnabled) return; + + const wrapper = this.container.querySelector('.carousel-wrapper'); + if (!wrapper) return; + + wrapper.addEventListener('touchstart', (e) => { + this.touchStartX = e.touches[0].clientX; + this.pauseAutoplay(); + }, { passive: true }); + + wrapper.addEventListener('touchend', (e) => { + this.touchEndX = e.changedTouches[0].clientX; + this.handleSwipe(); + this.resumeAutoplay(); + }, { passive: true }); + } + + setupAutoplay() { + if (!this.options.autoplay) return; + + this.autoplayTimer = setInterval(() => { + this.next(); + }, this.options.autoplayDelay); + } + + handleSwipe() { + const swipeThreshold = 50; + const diff = this.touchStartX - this.touchEndX; + + if (Math.abs(diff) > swipeThreshold) { + if (diff > 0) { + this.next(); + } else { + this.prev(); + } + } + } + + next() { + if (this.isAnimating) return; + + if (this.slidesPerView === 1) { + // 单个幻灯片模式:直接切换到下一个 + let nextIndex = this.currentIndex + 1; + if (nextIndex >= this.slides.length) { + nextIndex = this.options.loop ? 0 : this.currentIndex; + } + if (nextIndex !== this.currentIndex) { + this.goTo(nextIndex); + } + } else { + // 多个幻灯片模式:按组切换 + const currentGroup = Math.floor(this.currentIndex / this.slidesPerView); + let nextGroup = currentGroup + 1; + + if (nextGroup >= this.totalGroups) { + nextGroup = this.options.loop ? 0 : currentGroup; + } + + const nextIndex = nextGroup * this.slidesPerView; + if (nextIndex !== this.currentIndex) { + this.goTo(nextIndex); + } + } + } + + prev() { + if (this.isAnimating) return; + + if (this.slidesPerView === 1) { + // 单个幻灯片模式:直接切换到上一个 + let prevIndex = this.currentIndex - 1; + if (prevIndex < 0) { + prevIndex = this.options.loop ? this.slides.length - 1 : this.currentIndex; + } + if (prevIndex !== this.currentIndex) { + this.goTo(prevIndex); + } + } else { + // 多个幻灯片模式:按组切换 + const currentGroup = Math.floor(this.currentIndex / this.slidesPerView); + let prevGroup = currentGroup - 1; + + if (prevGroup < 0) { + prevGroup = this.options.loop ? this.totalGroups - 1 : currentGroup; + } + + const prevIndex = prevGroup * this.slidesPerView; + if (prevIndex !== this.currentIndex) { + this.goTo(prevIndex); + } + } + } + + goTo(index) { + console.log('SimpleCarousel: goTo 被调用,目标索引:', index, '当前索引:', this.currentIndex); + + if (this.isAnimating || index === this.currentIndex || index < 0 || index >= this.slides.length) { + console.log('SimpleCarousel: goTo 被阻止 - 动画中:', this.isAnimating, '相同索引:', index === this.currentIndex, '索引范围:', index < 0 || index >= this.slides.length); + return; + } + + this.isAnimating = true; + const previousIndex = this.currentIndex; + this.currentIndex = index; + + console.log('SimpleCarousel: 切换从索引', previousIndex, '到', this.currentIndex); + + // 更新幻灯片 + this.updateSlides(); + + // 触发回调 + if (this.options.onSlideChange) { + console.log('SimpleCarousel: 触发 onSlideChange 回调'); + this.options.onSlideChange(this.currentIndex, previousIndex); + } + + setTimeout(() => { + this.isAnimating = false; + }, 500); + } + + updateSlides() { + let translateX; + + if (this.slidesPerView === 1) { + // 单个幻灯片模式:直接按索引移动 + translateX = -this.currentIndex * 100; + } else { + // 多个幻灯片模式:按组移动 + const currentGroup = Math.floor(this.currentIndex / this.slidesPerView); + translateX = -currentGroup * 100; + } + + // 移动整个轮播容器 + this.wrapper.style.transform = `translateX(${translateX}%)`; + + // 更新分页器(如果存在) + const bullets = this.container.querySelectorAll('.carousel-pagination-bullet'); + bullets.forEach((bullet, index) => { + if (this.slidesPerView === 1) { + // 单个幻灯片模式:直接按索引激活 + bullet.classList.toggle('active', index === this.currentIndex); + } else { + // 多个幻灯片模式:激活当前可见范围内的幻灯片 + const currentGroup = Math.floor(this.currentIndex / this.slidesPerView); + const slideGroup = Math.floor(index / this.slidesPerView); + bullet.classList.toggle('active', slideGroup === currentGroup); + } + }); + } + + pauseAutoplay() { + if (this.autoplayTimer) { + clearInterval(this.autoplayTimer); + this.autoplayTimer = null; + } + } + + resumeAutoplay() { + if (this.options.autoplay && !this.autoplayTimer) { + this.autoplayTimer = setInterval(() => { + this.next(); + }, this.options.autoplayDelay); + } + } + + destroy() { + this.pauseAutoplay(); + + // 移除事件监听器 + const nextBtn = this.container.querySelector('.carousel-button-next'); + const prevBtn = this.container.querySelector('.carousel-button-prev'); + const bullets = this.container.querySelectorAll('.carousel-pagination-bullet'); + + if (nextBtn) nextBtn.replaceWith(nextBtn.cloneNode(true)); + if (prevBtn) prevBtn.replaceWith(prevBtn.cloneNode(true)); + bullets.forEach(bullet => bullet.replaceWith(bullet.cloneNode(true))); + } + + // 获取当前索引 + get activeIndex() { + return this.currentIndex; + } + + // 获取幻灯片总数 + get slidesLength() { + return this.slides.length; + } + + // 销毁实例 + destroy() { + // 停止自动播放 + this.pauseAutoplay(); + + // 清除事件监听器 + this.removeEventListeners(); + + // 重置样式 + if (this.wrapper) { + this.wrapper.style.transform = ''; + } + + // 清除引用 + this.container = null; + this.wrapper = null; + this.slides = []; + this.autoplayTimer = null; + } + } + + // 导出到全局 + window.SimpleCarousel = SimpleCarousel; + +})(); \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/js/smooth-scroll-init.js b/wp-content/themes/nenghui-energy-theme-cn/assets/js/smooth-scroll-init.js new file mode 100644 index 0000000..e467071 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/js/smooth-scroll-init.js @@ -0,0 +1,323 @@ +/** + * Smooth Scroll Initialization + * 平滑滚动初始化脚本 + * 优化版本:增强与Elementor和其他滚动库的兼容性 + * + * @package Nenghui Energy Theme + * @since 1.0.0 + */ + +// Elementor兼容性检查 +function isElementorEditMode() { + return window.elementorFrontend && window.elementorFrontend.isEditMode(); +} + +// 检查是否有冲突的滚动库 +function hasScrollConflicts() { + const conflicts = []; + + // 检查常见的滚动库 + if (window.AOS) conflicts.push('AOS'); + if (window.ScrollMagic) conflicts.push('ScrollMagic'); + if (window.gsap && window.ScrollTrigger) conflicts.push('GSAP ScrollTrigger'); + + if (conflicts.length > 0) { + + } + + return conflicts.length > 0; +} + +// 动态配置选项 +function getSmoothScrollConfig() { + const baseConfig = { + // 滚动速度 (毫秒) + animationTime: 800, + + // 步长大小 + stepSize: 100, + + // 加速度倍数 + accelerationDelta: 50, + + // 最大加速度 + accelerationMax: 3, + + // 键盘支持 + keyboardSupport: true, + + // 箭头滚动步长 + arrowScroll: 50, + + // 脉冲算法设置 + pulseAlgorithm: true, + + // 脉冲比例 + pulseScale: 4, + + // 脉冲标准化 + pulseNormalize: 1, + + // 固定背景支持 + fixedBackground: true, + + // 排除的元素选择器 + excluded: 'textarea, input[type="text"], input[type="password"], input[type="email"], input[type="number"], input[type="search"], input[type="tel"], input[type="url"], select' + }; + + // Elementor编辑模式下的特殊配置 + if (isElementorEditMode()) { + return { + ...baseConfig, + animationTime: 600, // 增加动画时间,使滚动更平滑 + keyboardSupport: false, // 在编辑模式下禁用键盘支持 + excluded: baseConfig.excluded + ', .elementor-editor-active, .elementor-widget-container' + }; + } + + // 检测到滚动冲突时的配置 + if (hasScrollConflicts()) { + return { + ...baseConfig, + animationTime: 600, // 减少动画时间 + accelerationMax: 2, // 降低加速度 + excluded: baseConfig.excluded + ', .gsap-scroll-trigger, .aos-animate, .scroll-magic-element' + }; + } + + return baseConfig; +} + +// 在库加载前设置全局配置选项 +if (typeof window.SmoothScrollOptions === 'undefined') { + window.SmoothScrollOptions = getSmoothScrollConfig(); +} + +(function() { + 'use strict'; + + // 防抖函数 + function debounce(func, wait) { + let timeout; + return function executedFunction(...args) { + const later = () => { + clearTimeout(timeout); + func(...args); + }; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + }; + } + + // 节流函数 + function throttle(func, limit) { + let inThrottle; + return function() { + const args = arguments; + const context = this; + if (!inThrottle) { + func.apply(context, args); + inThrottle = true; + setTimeout(() => inThrottle = false, limit); + } + }; + } + + // 平滑滚动管理器 + const SmoothScrollManager = { + initialized: false, + backToTopBtn: null, + scrollThreshold: 300, + + // 初始化 + init: function() { + if (this.initialized) return; + + // 在Elementor编辑模式下延迟初始化 + if (isElementorEditMode()) { + + setTimeout(() => this.initScrollFeatures(), 1000); + } else { + this.initScrollFeatures(); + } + + this.initialized = true; + }, + + // 初始化滚动功能 + initScrollFeatures: function() { + console.log('✅ Smooth Scroll options configured successfully'); + + this.setupAnchorLinks(); + this.setupBackToTop(); + this.bindEvents(); + }, + + // 设置锚点链接 + setupAnchorLinks: function() { + const anchorLinks = document.querySelectorAll('a[href^="#"]'); + anchorLinks.forEach(link => { + // 避免重复绑定事件 + if (link.hasAttribute('data-smooth-scroll-bound')) return; + + link.addEventListener('click', this.handleAnchorClick.bind(this)); + link.setAttribute('data-smooth-scroll-bound', 'true'); + }); + }, + + // 处理锚点点击 + handleAnchorClick: function(e) { + const targetId = e.currentTarget.getAttribute('href').substring(1); + const targetElement = document.getElementById(targetId); + + if (targetElement) { + e.preventDefault(); + + // 检查是否在Elementor编辑模式下 + if (isElementorEditMode()) { + // 在编辑模式下使用简单的滚动 + targetElement.scrollIntoView({ behavior: 'auto' }); + return; + } + + // 检查GSAP ScrollTrigger是否存在并刷新 + if (window.ScrollTrigger) { + window.ScrollTrigger.refresh(); + } + + // 平滑滚动到目标元素 + targetElement.scrollIntoView({ + behavior: 'smooth', + block: 'start', + inline: 'nearest' + }); + } + }, + + // 设置回到顶部按钮 + setupBackToTop: function() { + this.backToTopBtn = document.querySelector('.back-to-top'); + if (this.backToTopBtn) { + // 避免重复绑定事件 + if (!this.backToTopBtn.hasAttribute('data-smooth-scroll-bound')) { + this.backToTopBtn.addEventListener('click', this.handleBackToTop.bind(this)); + this.backToTopBtn.setAttribute('data-smooth-scroll-bound', 'true'); + } + } + }, + + // 处理回到顶部 + handleBackToTop: function(e) { + e.preventDefault(); + + // 在Elementor编辑模式下使用简单滚动 + if (isElementorEditMode()) { + window.scrollTo({ top: 0, behavior: 'auto' }); + return; + } + + this.smoothScrollToTop(); + }, + + // 自定义平滑滚动到顶部函数 + smoothScrollToTop: function() { + const startPosition = window.pageYOffset; + const startTime = performance.now(); + const duration = 800; + + const animation = (currentTime) => { + const timeElapsed = currentTime - startTime; + const run = this.easeInOutQuad(timeElapsed, startPosition, -startPosition, duration); + window.scrollTo(0, run); + + if (timeElapsed < duration) { + requestAnimationFrame(animation); + } else { + // 动画完成后刷新ScrollTrigger + if (window.ScrollTrigger) { + window.ScrollTrigger.refresh(); + } + } + }; + + requestAnimationFrame(animation); + }, + + // 缓动函数(easeInOutQuad) + easeInOutQuad: function(t, b, c, d) { + t /= d / 2; + if (t < 1) return c / 2 * t * t + b; + t--; + return -c / 2 * (t * (t - 2) - 1) + b; + }, + + // 绑定事件 + bindEvents: function() { + // 使用节流的滚动事件处理器 + const throttledScrollHandler = throttle(this.handleScroll.bind(this), 16); // 约60fps + window.addEventListener('scroll', throttledScrollHandler, { passive: true }); + + // 监听窗口大小变化 + const debouncedResizeHandler = debounce(this.handleResize.bind(this), 250); + window.addEventListener('resize', debouncedResizeHandler); + + // 监听Elementor前端加载完成 + if (window.elementorFrontend && window.elementorFrontend.hooks && typeof window.elementorFrontend.hooks.addAction === 'function') { + try { + window.elementorFrontend.hooks.addAction('frontend/element_ready/global', () => { + this.setupAnchorLinks(); // 重新设置锚点链接 + }); + } catch (error) { + console.warn('SmoothScroll: 无法绑定Elementor钩子:', error); + } + } + }, + + // 处理滚动事件 + handleScroll: function() { + if (this.backToTopBtn) { + const shouldShow = window.pageYOffset > this.scrollThreshold; + this.backToTopBtn.classList.toggle('visible', shouldShow); + } + }, + + // 处理窗口大小变化 + handleResize: function() { + // 刷新ScrollTrigger实例 + if (window.ScrollTrigger) { + window.ScrollTrigger.refresh(); + } + }, + + // 销毁方法 + destroy: function() { + // 移除所有事件监听器 + const anchorLinks = document.querySelectorAll('a[href^="#"][data-smooth-scroll-bound]'); + anchorLinks.forEach(link => { + link.removeEventListener('click', this.handleAnchorClick); + link.removeAttribute('data-smooth-scroll-bound'); + }); + + if (this.backToTopBtn && this.backToTopBtn.hasAttribute('data-smooth-scroll-bound')) { + this.backToTopBtn.removeEventListener('click', this.handleBackToTop); + this.backToTopBtn.removeAttribute('data-smooth-scroll-bound'); + } + + this.initialized = false; + } + }; + + // 等待DOM加载完成 + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', () => SmoothScrollManager.init()); + } else { + SmoothScrollManager.init(); + } + + // 页面卸载时清理 + window.addEventListener('beforeunload', () => SmoothScrollManager.destroy()); + + // 暴露到全局作用域以便调试 + window.SmoothScrollManager = SmoothScrollManager; + +})(); \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/js/smoothscroll.min.js b/wp-content/themes/nenghui-energy-theme-cn/assets/js/smoothscroll.min.js new file mode 100644 index 0000000..1273993 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/js/smoothscroll.min.js @@ -0,0 +1 @@ +!function(){var s,i,c,a,o={frameRate:150,animationTime:400,stepSize:100,pulseAlgorithm:!0,pulseScale:4,pulseNormalize:1,accelerationDelta:50,accelerationMax:3,keyboardSupport:!0,arrowScroll:50,fixedBackground:!0,excluded:""},p=o,u=!1,d=!1,n={x:0,y:0},f=!1,m=document.documentElement,l=[],h=/^Mac/.test(navigator.platform),w={left:37,up:38,right:39,down:40,spacebar:32,pageup:33,pagedown:34,end:35,home:36},v={37:1,38:1,39:1,40:1};function y(){if(!f&&document.body){f=!0;var e=document.body,t=document.documentElement,o=window.innerHeight,n=e.scrollHeight;if(m=0<=document.compatMode.indexOf("CSS")?t:e,s=e,p.keyboardSupport&&Y("keydown",x),top!=self)d=!0;else if(Q&&o=p.animationTime,c=i?1:l/p.animationTime;p.pulseAlgorithm&&(c=F(c));var s=a.x*c-a.lastX>>0,u=a.y*c-a.lastY>>0;o+=s,n+=u,a.lastX+=s,a.lastY+=u,i&&(b.splice(r,1),r--)}h?window.scrollBy(o,n):(o&&(d.scrollLeft+=o),n&&(d.scrollTop+=n)),f||m||(b=[]),b.length?j(w,d,1e3/p.frameRate+1):(g=!1,null!=d.$scrollBehavior&&(d.style.scrollBehavior=d.$scrollBehavior,d.$scrollBehavior=null))};j(w,d,0),g=!0}}function e(e){f||y();var t=e.target;if(e.defaultPrevented||e.ctrlKey)return!0;if(N(s,"embed")||N(t,"embed")&&/\.pdf/i.test(t.src)||N(s,"object")||t.shadowRoot)return!0;var o=-e.wheelDeltaX||e.deltaX||0,n=-e.wheelDeltaY||e.deltaY||0;h&&(e.wheelDeltaX&&K(e.wheelDeltaX,120)&&(o=e.wheelDeltaX/Math.abs(e.wheelDeltaX)*-120),e.wheelDeltaY&&K(e.wheelDeltaY,120)&&(n=e.wheelDeltaY/Math.abs(e.wheelDeltaY)*-120)),o||n||(n=-e.wheelDelta||0),1===e.deltaMode&&(o*=40,n*=40);var r=z(t);return r?!!function(e){if(!e)return;l.length||(l=[e,e,e]);e=Math.abs(e),l.push(e),l.shift(),clearTimeout(a),a=setTimeout(function(){try{localStorage.SS_deltaBuffer=l.join(",")}catch(e){}},1e3);var t=120 { + this.initCarousels(); + }); + } + + initCarousels() { + $('.social-activities-carousel').each((index, element) => { + const $carousel = $(element); + const slidesPerView = parseInt($carousel.data('slides-per-view')) || 3; + + // 检查是否已经初始化 + if ($carousel.data('carousel-initialized')) { + return; + } + + // 标记为已初始化 + $carousel.data('carousel-initialized', true); + + // 创建轮播实例 + const carousel = new SimpleCarousel(element, { + autoplay: true, + autoplayDelay: 5000, + loop: true, + navigation: true, + pagination: true, + touchEnabled: true, + slidesPerView: slidesPerView, + spaceBetween: 30, + onSlideChange: (activeIndex) => { + this.onSlideChange($carousel, activeIndex); + }, + onInit: () => { + this.onCarouselInit($carousel); + } + }); + + this.carousels.push({ + element: $carousel, + instance: carousel + }); + + // 绑定自定义事件 + this.bindEvents($carousel, carousel); + + console.log('Social Activities Carousel initialized:', { + slidesPerView: slidesPerView, + totalSlides: $carousel.find('.carousel-slide').length + }); + }); + } + + bindEvents($carousel, carouselInstance) { + // 鼠标悬停暂停自动播放 + $carousel.on('mouseenter', () => { + carouselInstance.pauseAutoplay(); + }); + + $carousel.on('mouseleave', () => { + carouselInstance.resumeAutoplay(); + }); + + // 分页器点击事件已在SimpleCarousel中处理,这里不需要重复绑定 + + // 卡片点击统计(可选) + $carousel.find('.social-activity-card').on('click', function(e) { + // 如果点击的不是链接,则跳转到文章页面 + if (!$(e.target).closest('a').length) { + const $link = $(this).find('h3 a, .view-details-btn').first(); + if ($link.length) { + window.location.href = $link.attr('href'); + } + } + }); + + // 键盘导航支持 + $carousel.on('keydown', (e) => { + switch(e.keyCode) { + case 37: // 左箭头 + e.preventDefault(); + carouselInstance.prev(); + break; + case 39: // 右箭头 + e.preventDefault(); + carouselInstance.next(); + break; + } + }); + + // 使轮播容器可聚焦以支持键盘导航 + $carousel.attr('tabindex', '0'); + } + + onSlideChange($carousel, activeIndex) { + // 更新分页器状态 + $carousel.find('.carousel-pagination-bullet').removeClass('active'); + $carousel.find('.carousel-pagination-bullet').eq(activeIndex).addClass('active'); + + // 添加切换动画效果 + $carousel.find('.carousel-slide').removeClass('slide-active'); + $carousel.find('.carousel-slide').eq(activeIndex).addClass('slide-active'); + + // 触发自定义事件 + $carousel.trigger('socialActivitiesSlideChange', [activeIndex]); + } + + onCarouselInit($carousel) { + // 轮播初始化完成后的处理 + $carousel.addClass('carousel-ready'); + + // 设置初始活动状态 + $carousel.find('.carousel-slide').first().addClass('slide-active'); + + // 触发自定义事件 + $carousel.trigger('socialActivitiesCarouselReady'); + } + + // 公共方法:获取轮播实例 + getCarouselInstance(selector) { + const carousel = this.carousels.find(item => + item.element.is(selector) || item.element.find(selector).length + ); + return carousel ? carousel.instance : null; + } + + // 公共方法:销毁所有轮播 + destroy() { + this.carousels.forEach(carousel => { + if (carousel.instance && typeof carousel.instance.destroy === 'function') { + carousel.instance.destroy(); + } + carousel.element.removeData('carousel-initialized'); + }); + this.carousels = []; + } + + // 公共方法:重新初始化 + reinit() { + this.destroy(); + this.initCarousels(); + } + } + + // 创建全局实例 + window.SocialActivitiesCarousel = SocialActivitiesCarousel; + + // 自动初始化 + const socialActivitiesCarousel = new SocialActivitiesCarousel(); + + // 暴露到全局作用域以便外部调用 + window.socialActivitiesCarouselInstance = socialActivitiesCarousel; + + // 支持动态内容加载后重新初始化 + $(document).on('contentUpdated socialActivitiesContentLoaded', function() { + socialActivitiesCarousel.reinit(); + }); + + // 窗口大小改变时重新计算 + let resizeTimer; + $(window).on('resize', function() { + clearTimeout(resizeTimer); + resizeTimer = setTimeout(() => { + socialActivitiesCarousel.carousels.forEach(carousel => { + if (carousel.instance && typeof carousel.instance.updateSlides === 'function') { + carousel.instance.updateSlides(); + } + }); + }, 250); + }); + + // 页面可见性变化时处理自动播放 + document.addEventListener('visibilitychange', function() { + socialActivitiesCarousel.carousels.forEach(carousel => { + if (carousel.instance) { + if (document.hidden) { + carousel.instance.pauseAutoplay(); + } else { + carousel.instance.resumeAutoplay(); + } + } + }); + }); + +})(jQuery); \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/js/solution.js b/wp-content/themes/nenghui-energy-theme-cn/assets/js/solution.js new file mode 100644 index 0000000..f476092 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/js/solution.js @@ -0,0 +1,276 @@ +/** + * Solution Block JavaScript + * 解决方案区块交互效果 + */ + +(function() { + 'use strict'; + + // 移除no-js类,添加js-loaded类,表示JavaScript已加载 + document.documentElement.classList.remove('no-js'); + document.body.classList.remove('no-js'); + document.body.classList.add('js-loaded'); + + // 确保 GSAP 和 ScrollTrigger 已加载 + if (typeof gsap === 'undefined' || typeof ScrollTrigger === 'undefined') { + console.warn('GSAP or ScrollTrigger not loaded'); + return; + } + + // 注册 ScrollTrigger 插件 + gsap.registerPlugin(ScrollTrigger); + + // 初始化解决方案区块动画 + function initSolutionAnimations() { + const solutionBlocks = document.querySelectorAll('.solution-block'); + + solutionBlocks.forEach(block => { + const header = block.querySelector('.solution-header'); + const panels = block.querySelector('.solution-panels'); + const panelItems = block.querySelectorAll('.solution-panel'); + + if (!header || !panels || !panelItems.length) return; + + // 创建时间线 + const tl = gsap.timeline({ + scrollTrigger: { + trigger: block, + start: 'top 80%', + end: 'bottom 20%', + toggleActions: 'play none none reverse' + } + }); + + // 标题动画 + tl.to(header, { + opacity: 1, + y: 0, + duration: 0.8, + ease: 'power2.out' + }) + // 面板容器动画 + .to(panels, { + opacity: 1, + y: 0, + duration: 0.8, + ease: 'power2.out' + }, '-=0.4') + // 面板项目动画 + .fromTo(panelItems, { + scale: 0.9, + opacity: 0 + }, { + scale: 1, + opacity: 1, + duration: 0.6, + stagger: 0.1, + ease: 'power2.out' + }, '-=0.6'); + }); + } + + // 初始化面板状态 + function initPanelStates() { + const panels = document.querySelectorAll('.solution-panel'); + + panels.forEach(panel => { + const panelText = panel.querySelector('.panel-text'); + const panelDescription = panel.querySelector('.panel-description'); + + if (panelText) { + gsap.set(panelText, { y: 20 }); + } + + if (panelDescription) { + gsap.set(panelDescription, { opacity: 0, y: 20 }); + } + }); + } + + // 增强手风琴效果(仅桌面端) + function initAccordionEffect() { + // 只在桌面端启用悬停效果 + if (window.innerWidth <= 768) return; + + const solutionPanels = document.querySelectorAll('.solution-panels'); + + solutionPanels.forEach(panelsContainer => { + const panels = panelsContainer.querySelectorAll('.solution-panel'); + + panels.forEach(panel => { + const panelText = panel.querySelector('.panel-text'); + const panelDescription = panel.querySelector('.panel-description'); + + // 鼠标进入事件 + panel.addEventListener('mouseenter', () => { + // 使用 GSAP 实现平滑的宽度变化 + gsap.to(panel, { + flex: 2, + duration: 0.6, + ease: 'power2.out' + }); + + // 其他面板缩小 + panels.forEach(otherPanel => { + if (otherPanel !== panel) { + gsap.to(otherPanel, { + flex: 0.5, + duration: 0.6, + ease: 'power2.out' + }); + } + }); + + // 文本动画 + if (panelText) { + gsap.to(panelText, { + y: 0, + duration: 0.6, + ease: 'power2.out' + }); + } + + if (panelDescription) { + gsap.to(panelDescription, { + opacity: 1, + y: 0, + duration: 0.6, + delay: 0.2, + ease: 'power2.out' + }); + } + }); + }); + + // 鼠标离开事件 + panelsContainer.addEventListener('mouseleave', () => { + // 重置所有面板 + panels.forEach(resetPanel => { + gsap.to(resetPanel, { + flex: 1, + duration: 0.6, + ease: 'power2.out' + }); + + const resetText = resetPanel.querySelector('.panel-text'); + const resetDescription = resetPanel.querySelector('.panel-description'); + + if (resetText) { + gsap.to(resetText, { + y: 20, + duration: 0.6, + ease: 'power2.out' + }); + } + + if (resetDescription) { + gsap.to(resetDescription, { + opacity: 0, + y: 20, + duration: 0.4, + ease: 'power2.out' + }); + } + }); + }); + }); + } + + // 移动端优化 + function initMobileOptimization() { + const isMobile = window.innerWidth <= 768; + + if (isMobile) { + // 移动端禁用悬停效果,改为点击效果 + const panels = document.querySelectorAll('.solution-panel'); + + panels.forEach(panel => { + // 移除所有悬停事件监听器 + panel.style.pointerEvents = 'auto'; + + panel.addEventListener('click', (e) => { + e.preventDefault(); + e.stopPropagation(); + + const description = panel.querySelector('.panel-description'); + if (!description) return; + + const isExpanded = gsap.getProperty(description, 'opacity') > 0.5; + + // 重置所有面板 + panels.forEach(p => { + const desc = p.querySelector('.panel-description'); + if (desc) { + gsap.to(desc, { + opacity: 0, + y: 20, + duration: 0.3, + ease: 'power2.out' + }); + } + }); + + // 如果当前面板未展开,则展开它 + if (!isExpanded) { + gsap.to(description, { + opacity: 1, + y: 0, + duration: 0.3, + delay: 0.1, + ease: 'power2.out' + }); + } + }); + }); + } + } + + // 清理事件监听器 + function cleanupEventListeners() { + const panels = document.querySelectorAll('.solution-panel'); + const panelsContainers = document.querySelectorAll('.solution-panels'); + + // 移除面板事件 + panels.forEach(panel => { + const newPanel = panel.cloneNode(true); + panel.parentNode.replaceChild(newPanel, panel); + }); + + // 移除容器事件 + panelsContainers.forEach(container => { + const newContainer = container.cloneNode(true); + container.parentNode.replaceChild(newContainer, container); + }); + } + + // 窗口大小改变时重新初始化 + function handleResize() { + // 防抖处理 + clearTimeout(window.solutionResizeTimeout); + window.solutionResizeTimeout = setTimeout(() => { + cleanupEventListeners(); + initPanelStates(); + initAccordionEffect(); + initMobileOptimization(); + }, 250); + } + + // DOM 加载完成后初始化 + function init() { + initPanelStates(); + initSolutionAnimations(); + initAccordionEffect(); + initMobileOptimization(); + + // 监听窗口大小变化 + window.addEventListener('resize', handleResize); + } + + // 确保 DOM 加载完成 + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', init); + } else { + init(); + } + +})(); \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/js/stock-info.js b/wp-content/themes/nenghui-energy-theme-cn/assets/js/stock-info.js new file mode 100644 index 0000000..eef86b7 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/js/stock-info.js @@ -0,0 +1,312 @@ +/** + * 股票信息区块JavaScript + * 处理腾讯股票API调用和数据显示 + */ + +(function($) { + 'use strict'; + + // 股票信息管理器 + window.stockInfoManager = { + // 配置选项 + config: { + apiUrl: 'https://sqt.gtimg.cn/q=', + fallbackApiUrl: 'https://qt.gtimg.cn/q=', // 备用API + refreshInterval: 30000, // 30秒刷新一次 + retryDelay: 5000, // 重试延迟5秒 + maxRetries: 3, + useFallback: false // 是否使用备用API + }, + + // 当前状态 + state: { + isLoading: false, + retryCount: 0, + refreshTimer: null, + lastUpdateTime: null + }, + + // 初始化 + init: function() { + this.bindEvents(); + this.loadAllStockData(); + this.startAutoRefresh(); + }, + + // 绑定事件 + bindEvents: function() { + // 页面可见性变化时的处理 + $(document).on('visibilitychange', this.handleVisibilityChange.bind(this)); + + // 窗口焦点变化时的处理 + $(window).on('focus blur', this.handleFocusChange.bind(this)); + }, + + // 加载所有股票数据 + loadAllStockData: function() { + const self = this; + $('.stock-info-block').each(function() { + const $block = $(this); + const stockCode = $block.data('stock-code'); + if (stockCode) { + self.loadStockData(stockCode, $block); + } + }); + }, + + // 加载单个股票数据 + loadStockData: function(stockCode, $block) { + const self = this; + + if (self.state.isLoading) { + return; + } + + self.state.isLoading = true; + self.showLoading($block); + + // 构建API URL + const apiUrl = (self.config.useFallback ? self.config.fallbackApiUrl : self.config.apiUrl) + stockCode; + + // 使用JSONP方式调用API + $.ajax({ + url: apiUrl, + method: 'GET', + dataType: 'script', + timeout: 10000, + success: function() { + self.handleApiSuccess(stockCode, $block); + }, + error: function(xhr, status, error) { + // 如果主API失败且未使用备用API,尝试备用API + if (!self.config.useFallback && self.config.fallbackApiUrl) { + console.log('主API失败,尝试备用API...'); + self.config.useFallback = true; + self.state.isLoading = false; + self.loadStockData(stockCode, $block); + return; + } + self.handleApiError(error, $block); + }, + complete: function() { + self.state.isLoading = false; + } + }); + }, + + // 处理API成功响应 + handleApiSuccess: function(stockCode, $block) { + try { + // 腾讯API返回的数据格式: v_sz301046="股票名称~代码~当前价格~涨跌额~涨跌幅~..." + const varName = 'v_' + stockCode; + const stockDataString = window[varName]; + + if (!stockDataString) { + throw new Error('股票数据未找到'); + } + + const stockData = this.parseStockData(stockDataString); + this.updateStockDisplay(stockData, $block); + this.hideLoading($block); + this.state.retryCount = 0; + this.state.lastUpdateTime = new Date(); + + } catch (error) { + console.error('解析股票数据失败:', error); + this.handleApiError(error.message, $block); + } + }, + + // 处理API错误 + handleApiError: function(error, $block) { + console.error('股票数据加载失败:', error); + + this.state.retryCount++; + + if (this.state.retryCount < this.config.maxRetries) { + // 重试 + setTimeout(() => { + const stockCode = $block.data('stock-code'); + this.loadStockData(stockCode, $block); + }, this.config.retryDelay); + } else { + // 显示错误状态 + this.showError($block); + this.state.retryCount = 0; + } + }, + + // 解析股票数据 + parseStockData: function(dataString) { + const parts = dataString.split('~'); + + if (parts.length < 30) { + throw new Error('股票数据格式不正确'); + } + + return { + name: parts[1], // 股票名称 + code: parts[2], // 股票代码 + currentPrice: parseFloat(parts[3]), // 当前价格 + prevClose: parseFloat(parts[4]), // 昨收价 + openPrice: parseFloat(parts[5]), // 今开价 + volume: parseInt(parts[6]), // 成交量(手) + amount: parseFloat(parts[37]), // 成交额(万元) + highPrice: parseFloat(parts[33]), // 最高价 + lowPrice: parseFloat(parts[34]), // 最低价 + changeAmount: parseFloat(parts[31]), // 涨跌额 + changePercent: parseFloat(parts[32]), // 涨跌幅 + updateTime: parts[30] // 更新时间 + }; + }, + + // 更新股票显示 + updateStockDisplay: function(data, $block) { + // 更新基本信息 + $block.find('#current-price').text(data.currentPrice.toFixed(2)).addClass('updating'); + $block.find('#volume-value').text(this.formatNumber(data.volume)).addClass('updating'); + $block.find('#amount-value').text(this.formatNumber(data.amount)).addClass('updating'); + + // 更新涨跌信息 + const changeValue = data.changeAmount > 0 ? '+' + data.changeAmount.toFixed(2) : data.changeAmount.toFixed(2); + const changePercent = data.changePercent > 0 ? '+' + data.changePercent.toFixed(2) + '%' : data.changePercent.toFixed(2) + '%'; + + $block.find('#price-change').text(changeValue); + $block.find('#change-percent').text(changePercent); + + // 设置涨跌颜色 + $block.removeClass('price-up price-down price-neutral'); + if (data.changeAmount > 0) { + $block.addClass('price-up'); + } else if (data.changeAmount < 0) { + $block.addClass('price-down'); + } else { + $block.addClass('price-neutral'); + } + + // 更新详细数据 + $block.find('#open-price').text(data.openPrice.toFixed(2)); + $block.find('#prev-close').text(data.prevClose.toFixed(2)); + $block.find('#high-price').text(data.highPrice.toFixed(2)); + $block.find('#low-price').text(data.lowPrice.toFixed(2)); + + // 更新时间 + $block.find('#update-time').text(this.formatUpdateTime(data.updateTime)); + + // 移除更新动画类 + setTimeout(() => { + $block.find('.updating').removeClass('updating'); + }, 300); + }, + + // 格式化数字显示 + formatNumber: function(num) { + if (num >= 10000) { + return (num / 10000).toFixed(1) + '万'; + } else if (num >= 1000) { + return (num / 1000).toFixed(1) + 'K'; + } + return num.toString(); + }, + + // 格式化更新时间 + formatUpdateTime: function(timeString) { + if (!timeString || timeString.length < 14) { + return '数据更新中...'; + } + + // 格式: 20250926161424 -> 2025-09-26 16:14:24 + const year = timeString.substr(0, 4); + const month = timeString.substr(4, 2); + const day = timeString.substr(6, 2); + const hour = timeString.substr(8, 2); + const minute = timeString.substr(10, 2); + const second = timeString.substr(12, 2); + + return `${year}.${month}.${day} ${hour}:${minute}:${second}`; + }, + + // 显示加载状态 + showLoading: function($block) { + $block.find('#loading-indicator').show(); + $block.find('#error-indicator').hide(); + $block.find('.stock-main-data').css('opacity', '0.6'); + }, + + // 隐藏加载状态 + hideLoading: function($block) { + $block.find('#loading-indicator').hide(); + $block.find('.stock-main-data').css('opacity', '1'); + }, + + // 显示错误状态 + showError: function($block) { + $block.find('#loading-indicator').hide(); + $block.find('#error-indicator').show(); + $block.find('.stock-main-data').css('opacity', '0.3'); + }, + + // 刷新数据 + refreshData: function() { + this.state.retryCount = 0; + this.loadAllStockData(); + }, + + // 开始自动刷新 + startAutoRefresh: function() { + const self = this; + + if (self.state.refreshTimer) { + clearInterval(self.state.refreshTimer); + } + + self.state.refreshTimer = setInterval(function() { + if (!document.hidden && document.hasFocus()) { + self.loadAllStockData(); + } + }, self.config.refreshInterval); + }, + + // 停止自动刷新 + stopAutoRefresh: function() { + if (this.state.refreshTimer) { + clearInterval(this.state.refreshTimer); + this.state.refreshTimer = null; + } + }, + + // 处理页面可见性变化 + handleVisibilityChange: function() { + if (document.hidden) { + this.stopAutoRefresh(); + } else { + this.startAutoRefresh(); + this.loadAllStockData(); // 页面重新可见时立即刷新 + } + }, + + // 处理窗口焦点变化 + handleFocusChange: function(event) { + if (event.type === 'focus') { + this.startAutoRefresh(); + this.loadAllStockData(); + } else if (event.type === 'blur') { + this.stopAutoRefresh(); + } + } + }; + + // 文档就绪时初始化 + $(document).ready(function() { + // 检查是否有股票信息区块 + if ($('.stock-info-block').length > 0) { + stockInfoManager.init(); + } + }); + + // 页面卸载时清理 + $(window).on('beforeunload', function() { + stockInfoManager.stopAutoRefresh(); + }); + +})(typeof jQuery !== 'undefined' ? jQuery : undefined); \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/js/swiper-bundle.min.js b/wp-content/themes/nenghui-energy-theme-cn/assets/js/swiper-bundle.min.js new file mode 100644 index 0000000..436b921 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/js/swiper-bundle.min.js @@ -0,0 +1,14 @@ +/** + * Swiper 11.0.5 + * Most modern mobile touch slider and framework with hardware accelerated transitions + * https://swiperjs.com + * + * Copyright 2014-2023 Vladimir Kharlampidi + * + * Released under the MIT License + * + * Released on: November 22, 2023 + */ + +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={}),Object.keys(a).forEach((i=>{void 0===s[i]?s[i]=a[i]:e(a[i])&&e(s[i])&&Object.keys(a[i]).length>0&&t(s[i],a[i])}))}const s={body:{},addEventListener(){},removeEventListener(){},activeElement:{blur(){},nodeName:""},querySelector:()=>null,querySelectorAll:()=>[],getElementById:()=>null,createEvent:()=>({initEvent(){}}),createElement:()=>({children:[],childNodes:[],style:{},setAttribute(){},getElementsByTagName:()=>[]}),createElementNS:()=>({}),importNode:()=>null,location:{hash:"",host:"",hostname:"",href:"",origin:"",pathname:"",protocol:"",search:""}};function a(){const e="undefined"!=typeof document?document:{};return t(e,s),e}const i={document:s,navigator:{userAgent:""},location:{hash:"",host:"",hostname:"",href:"",origin:"",pathname:"",protocol:"",search:""},history:{replaceState(){},pushState(){},go(){},back(){}},CustomEvent:function(){return this},addEventListener(){},removeEventListener(){},getComputedStyle:()=>({getPropertyValue:()=>""}),Image(){},Date(){},screen:{},setTimeout(){},clearTimeout(){},matchMedia:()=>({}),requestAnimationFrame:e=>"undefined"==typeof setTimeout?(e(),null):setTimeout(e,0),cancelAnimationFrame(e){"undefined"!=typeof setTimeout&&clearTimeout(e)}};function r(){const e="undefined"!=typeof window?window:{};return t(e,i),e}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){return void 0===t&&(t=""),[...e.children].filter((e=>e.matches(t)))}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}let T,M,C;function P(){return T||(T=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)}}()),T}function L(e){return void 0===e&&(e={}),M||(M=function(e){let{userAgent:t}=void 0===e?{}:e;const s=P(),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)),M}function A(){return C||(C=function(){const e=r();let t=!1;function s(){const t=e.navigator.userAgent.toLowerCase();return t.indexOf("safari")>=0&&t.indexOf("chrome")<0&&t.indexOf("android")<0}if(s()){const s=String(e.navigator.userAgent);if(s.includes("Version/")){const[e,a]=s.split("Version/")[1].split(" ")[0].split(".").map((e=>Number(e)));t=e<16||16===e&&a<2}}return{isSafari:t||s(),needPerspectiveFix:t,isWebView:/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(e.navigator.userAgent)}}()),C}var I={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 z=(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()}},$=(e,t)=>{if(!e.slides[t])return;const s=e.slides[t].querySelector('[loading="lazy"]');s&&s.removeAttribute("loading")},k=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)&&$(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)&&$(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 A="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;m=m.map((e=>e<=0?-v:e>t?t+w:e))}if(s.centerInsufficientSlides){let e=0;if(g.forEach((t=>{e+=t+(x||0)})),e-=x,e{m[s]=e-t})),h.forEach(((e,s)=>{h[s]=e+t}))}}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{e.classList.remove(s.slideVisibleClass,s.slideFullyVisibleClass)})),t.visibleSlidesIndexes=[],t.visibleSlides=[];let l=s.spaceBetween;"string"==typeof l&&l.indexOf("%")>=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];(u>=0&&u1&&m<=t.size||u<=0&&m>=t.size)&&(t.visibleSlides.push(o),t.visibleSlidesIndexes.push(e),a[e].classList.add(s.slideVisibleClass)),h&&a[e].classList.add(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(t.forEach((e=>{e.classList.remove(s.slideActiveClass,s.slideNextClass,s.slidePrevClass)})),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.filter((e=>e.column===i))[0],c=t.filter((e=>e.column===i+1))[0],d=t.filter((e=>e.column===i-1))[0]):o=t[i];o&&(o.classList.add(s.slideActiveClass),n?(c&&c.classList.add(s.slideNextClass),d&&d.classList.add(s.slidePrevClass)):(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]),c&&c.classList.add(s.slideNextClass),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]),d&&d.classList.add(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.filter((e=>e.column===d))[0];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&&k(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;if(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,t&&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}return 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===t&&(t=this.params.speed),void 0===s&&(s=!0),"string"==typeof e){e=parseInt(e,10)}const i=this,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.filter((e=>1*e.getAttribute("data-swiper-slide-index")===t))[0].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 a=i.params.slidesPerView;"auto"===a?a=i.slidesPerViewDynamic():(a=Math.ceil(parseFloat(i.params.slidesPerView,10)),s&&a%2==0&&(a+=1));let l=t-e1*t.getAttribute("data-swiper-slide-index")===e))[0].column}else n=i.getSlideIndexByData(n)}return requestAnimationFrame((()=>{i.slideTo(n,t,s,a)})),i},slideNext:function(e,t,s){void 0===e&&(e=this.params.speed),void 0===t&&(t=!0);const a=this,{enabled:i,params:r,animating:n}=a;if(!i)return a;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===e&&(e=this.params.speed),void 0===t&&(t=!0);const a=this,{params:i,snapGrid:r,slidesGrid:n,rtlTranslate:l,enabled:o,animating:d}=a;if(!o)return a;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)));let h=r[m.indexOf(u)-1];if(void 0===h&&i.cssMode){let e;r.forEach(((t,s)=>{u>=t&&(e=s)})),void 0!==e&&(h=r[e>0?e-1:e])}let f=0;if(void 0!==h&&(f=n.indexOf(h),f<0&&(f=a.activeIndex-1),"auto"===i.slidesPerView&&1===i.slidesPerGroup&&i.slidesPerGroupAuto&&(f=f-a.slidesPerViewDynamic("previous",!0)+1,f=Math.max(f,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(f,e,t,s)})),!0):a.slideTo(f,e,t,s)},slideReset:function(e,t,s){return void 0===e&&(e=this.params.speed),void 0===t&&(t=!0),this.slideTo(this.activeIndex,e,t,s)},slideToClosest:function(e,t,s,a){void 0===e&&(e=this.params.speed),void 0===t&&(t=!0),void 0===a&&(a=.5);const i=this;let r=i.activeIndex;const n=Math.min(i.params.slidesPerGroupSkip,r),l=n+Math.floor((r-n)/i.params.slidesPerGroup),o=i.rtlTranslate?i.translate:-i.translate;if(o>=i.snapGrid[l]){const e=i.snapGrid[l];o-e>(i.snapGrid[l+1]-e)*a&&(r+=i.params.slidesPerGroup)}else{const e=i.snapGrid[l-1];o-e<=(i.snapGrid[l]-e)*a&&(r-=i.params.slidesPerGroup)}return r=Math.max(r,0),r=Math.min(r,i.slidesGrid.length-1),i.slideTo(r,e,t,s)},slideToClickedSlide:function(){const e=this,{params:t,slidesEl:s}=e,a="auto"===t.slidesPerView?e.slidesPerViewDynamic():t.slidesPerView;let i,r=e.clickedIndex;const n=e.isElement?"swiper-slide":`.${t.slideClass}`;if(t.loop){if(e.animating)return;i=parseInt(e.clickedSlide.getAttribute("data-swiper-slide-index"),10),t.centeredSlides?re.slides.length-e.loopedSlides+a/2?(e.loopFix(),r=e.getSlideIndex(f(s,`${n}[data-swiper-slide-index="${i}"]`)[0]),l((()=>{e.slideTo(r)}))):e.slideTo(r):r>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 H={loopCreate:function(e){const t=this,{params:s,slidesEl:a}=t;if(!s.loop||t.virtual&&t.params.virtual.enabled)return;const i=()=>{f(a,`.${s.slideClass}, swiper-slide`).forEach(((e,t)=>{e.setAttribute("data-swiper-slide-index",t)}))},r=t.grid&&s.grid&&s.grid.rows>1,n=s.slidesPerGroup*(r?s.grid.rows:1),l=t.slides.length%n!=0,o=r&&t.slides.length%s.grid.rows!=0,d=e=>{for(let a=0;a1;d.lengthe.classList.contains(m.slideActiveClass)))[0]):x=r;const S="next"===a||!a,T="prev"===a||!a;let M=0,C=0;const P=b?Math.ceil(d.length/m.grid.rows):d.length,L=(b?d[r].column:r)+(h&&void 0===i?-f/2+.5:0);if(L=0;t-=1)d[t].column===e&&y.push(t)}else y.push(P-t-1)}}else if(L+f>P-w){C=Math.max(L-(P-2*w),v);for(let e=0;e{e.column===t&&E.push(s)})):E.push(t)}}if(o.__preventObserver__=!0,requestAnimationFrame((()=>{o.__preventObserver__=!1})),T&&y.forEach((e=>{d[e].swiperLoopMoveDOM=!0,u.prepend(d[e]),d[e].swiperLoopMoveDOM=!1})),S&&E.forEach((e=>{d[e].swiperLoopMoveDOM=!0,u.append(d[e]),d[e].swiperLoopMoveDOM=!1})),o.recalcSlides(),"auto"===m.slidesPerView?o.updateSlides():b&&(y.length>0&&T||E.length>0&&S)&&o.slides.forEach(((e,t)=>{o.grid.updateSlide(t,e,o.slides)})),m.watchSlidesProgress&&o.updateSlidesOffset(),s)if(y.length>0&&T){if(void 0===t){const e=o.slidesGrid[x],t=o.slidesGrid[x+M]-e;l?o.setTranslate(o.translate-t):(o.slideTo(x+M,0,!1,!0),i&&(o.touchEventsData.startTranslate=o.touchEventsData.startTranslate-t,o.touchEventsData.currentTranslate=o.touchEventsData.currentTranslate-t))}else if(i){const e=b?y.length/m.grid.rows:y.length;o.slideTo(o.activeIndex+e,0,!1,!0),o.touchEventsData.currentTranslate=o.translate}}else if(E.length>0&&S)if(void 0===t){const e=o.slidesGrid[x],t=o.slidesGrid[x-C]-e;l?o.setTranslate(o.translate-t):(o.slideTo(x-C,0,!1,!0),i&&(o.touchEventsData.startTranslate=o.touchEventsData.startTranslate-t,o.touchEventsData.currentTranslate=o.touchEventsData.currentTranslate-t))}else{const e=b?E.length/m.grid.rows:E.length;o.slideTo(o.activeIndex-e,0,!1,!0)}if(o.allowSlidePrev=c,o.allowSlideNext=p,o.controller&&o.controller.control&&!n){const e={slideRealIndex:t,direction:a,setTranslate:i,activeSlideIndex:r,byController:!0};Array.isArray(o.controller.control)?o.controller.control.forEach((t=>{!t.destroyed&&t.params.loop&&t.loopFix({...e,slideTo:t.params.slidesPerView===m.slidesPerView&&s})})):o.controller.control instanceof o.constructor&&o.controller.control.params.loop&&o.controller.control.loopFix({...e,slideTo:o.controller.control.params.slidesPerView===m.slidesPerView&&s})}o.emit("loopFix")},loopDestroy:function(){const e=this,{params:t,slidesEl:s}=e;if(!t.loop||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 N(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 Y(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 N(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&&!t.wrapperEl.contains(p))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(!N(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&&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 B(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].filter((e=>e.identifier===i.touchId))[0],!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(un.startX&&s.translate>=s.minTranslate())return;if(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)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});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(),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]: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.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 R(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].filter((e=>e.identifier===s.touchId))[0],!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 q(){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 V(e){const t=this;t.enabled&&(t.allowClick||(t.params.preventClicks&&e.preventDefault(),t.params.preventClicksPropagation&&t.animating&&(e.stopPropagation(),e.stopImmediatePropagation())))}function _(){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 F(e){const t=this;z(t,e.target),t.params.cssMode||"auto"!==t.params.slidesPerView&&!t.params.autoHeight||t.update()}function j(){const e=this;e.documentTouchHandlerProceeded||(e.documentTouchHandlerProceeded=!0,e.params.touchReleaseOnEdges&&(e.el.style.touchAction="auto"))}const W=(e,t)=>{const s=a(),{params:i,el:r,wrapperEl:n,device:l}=e,o=!!i.nested,d="on"===t?"addEventListener":"removeEventListener",c=t;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",q,!0):e[c]("observerUpdate",q,!0),r[d]("load",e.onLoad,{capture:!0})};const U=(e,t)=>e.grid&&t.grid&&t.grid.rows>1;var K={init:!0,direction:"horizontal",oneWayMovement:!1,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 Z(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 Q={eventsEmitter:I,update:O,translate:D,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(),G({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),G({swiper:s,runCallbacks:e,direction:t,step:"End"}))}},slide:X,loop:H,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=Y.bind(e),e.onTouchMove=B.bind(e),e.onTouchEnd=R.bind(e),e.onDocumentTouchStart=j.bind(e),t.cssMode&&(e.onScroll=_.bind(e)),e.onClick=V.bind(e),e.onLoad=F.bind(e),W(e,"on")},detachEvents:function(){W(this,"off")}},breakpoints:{setBreakpoint:function(){const e=this,{realIndex:t,initialized:s,params:a,el:i}=e,r=a.breakpoints;if(!r||r&&0===Object.keys(r).length)return;const n=e.getBreakpoint(r,e.params.breakpointsBase,e.el);if(!n||e.currentBreakpoint===n)return;const l=(n in r?r[n]:void 0)||e.originalParams,o=U(e,a),d=U(e,l),c=a.enabled;o&&!d?(i.classList.remove(`${a.containerModifierClass}grid`,`${a.containerModifierClass}grid-column`),e.emitContainerClasses()):!o&&d&&(i.classList.add(`${a.containerModifierClass}grid`),(l.grid.fill&&"column"===l.grid.fill||!l.grid.fill&&"column"===a.grid.fill)&&i.classList.add(`${a.containerModifierClass}grid-column`),e.emitContainerClasses()),["navigation","pagination","scrollbar"].forEach((t=>{if(void 0===l[t])return;const s=a[t]&&a[t].enabled,i=l[t]&&l[t].enabled;s&&!i&&e[t].disable(),!s&&i&&e[t].enable()}));const u=l.direction&&l.direction!==a.direction,m=a.loop&&(l.slidesPerView!==a.slidesPerView||u),h=a.loop;u&&s&&e.changeDirection(),p(e.params,l);const f=e.params.enabled,g=e.params.loop;Object.assign(e,{allowTouchMove:e.params.allowTouchMove,allowSlideNext:e.params.allowSlideNext,allowSlidePrev:e.params.allowSlidePrev}),c&&!f?e.disable():!c&&f&&e.enable(),e.currentBreakpoint=n,e.emit("_beforeBreakpoint",l),s&&(m?(e.loopDestroy(),e.loopCreate(t),e.updateSlides()):!h&&g?(e.loopCreate(t),e.updateSlides()):h&&!g&&e.loopDestroy()),e.emit("breakpoint",l)},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.classList.remove(...t),this.emitContainerClasses()}}},J={};class ee{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 ee(a))})),e}const l=this;l.__swiper__=!0,l.support=P(),l.device=L({userAgent:t.userAgent}),l.browser=A(),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:Z(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({},K,o);return l.params=p({},d,J,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.filter((t=>1*t.getAttribute("data-swiper-slide-index")===e))[0])}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]?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&&z(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&&"SWIPER-CONTAINER"===s.parentNode.host.nodeName&&(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(),t.attachEvents();const s=[...t.el.querySelectorAll('[loading="lazy"]')];return t.isElement&&s.push(...t.hostEl.querySelectorAll('[loading="lazy"]')),s.forEach((e=>{e.complete?z(t,e):e.addEventListener("load",(e=>{z(t,e.target)}))})),k(t),t.initialized=!0,k(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.removeAttribute("style"),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.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(J,e)}static get extendedDefaults(){return J}static get defaults(){return K}static installModule(e){ee.prototype.__modules__||(ee.prototype.__modules__=[]);const t=ee.prototype.__modules__;"function"==typeof e&&t.indexOf(e)<0&&t.push(e)}static use(e){return Array.isArray(e)?(e.forEach((e=>ee.installModule(e))),ee):(ee.installModule(e),ee)}}function te(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 se(e){return void 0===e&&(e=""),`.${e.trim().replace(/([\.:!+\/])/g,"\\$1").replace(/ /g,".")}`}function ae(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");t.innerHTML=e,a.append(t.children[0]),t.innerHTML=""}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");t.innerHTML=e,i.prepend(t.children[0]),t.innerHTML=""}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",(()=>{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 de(e,t){const s=h(t);return s!==t&&(s.style.backfaceVisibility="hidden",s.style["-webkit-backface-visibility"]="hidden"),s}function ce(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.filter((t=>t.shadowRoot&&t.shadowRoot===e.parentNode))[0];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 pe(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(Q).forEach((e=>{Object.keys(Q[e]).forEach((t=>{ee.prototype[t]=Q[e][t]}))})),ee.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: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 ue=[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&&(o.innerHTML=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||(i.innerHTML=e),a.cache&&(s.virtual.cache[t]=i),i}function c(e){const{slidesPerView:t,slidesPerGroup:a,centeredSlides:i,loop:r}=s.params,{addSlidesBefore:l,addSlidesAfter:o}=s.params.virtual,{from:c,to:p,slides:u,slidesGrid:m,offset:h}=s.virtual;s.params.cssMode||s.updateActiveIndex();const g=s.activeIndex||0;let v,w,b;v=s.rtlTranslate?"right":s.isHorizontal()?"left":"top",i?(w=Math.floor(t/2)+a+o,b=Math.floor(t/2)+a+l):(w=t+(a-1)+o,b=(r?t:a)+l);let y=g-b,E=g+w;r||(y=Math.max(y,0),E=Math.min(E,u.length-1));let x=(s.slidesGrid[y]||0)-(s.slidesGrid[0]||0);function S(){s.updateSlides(),s.updateProgress(),s.updateSlidesClasses(),n("virtualUpdate")}if(r&&g>=b?(y-=b,i||(x+=s.slidesGrid[0])):r&&g{e.style[v]=x-Math.abs(s.cssOverflowAdjustment())+"px"})),s.updateProgress(),void n("virtualUpdate");if(s.params.virtual.renderExternal)return s.params.virtual.renderExternal.call(s,{offset:x,from:y,to:E,slides:function(){const e=[];for(let t=y;t<=E;t+=1)e.push(u[t]);return e}()}),void(s.params.virtual.renderExternalUpdate?S():n("virtualUpdate"));const T=[],M=[],C=e=>{let t=e;return e<0?t=u.length+e:t>=u.length&&(t-=u.length),t};if(e)s.slides.filter((e=>e.matches(`.${s.params.slideClass}, swiper-slide`))).forEach((e=>{e.remove()}));else for(let e=c;e<=p;e+=1)if(eE){const t=C(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 P=r?-u.length:0,L=r?2*u.length:u.length;for(let t=P;t=y&&t<=E){const s=C(t);void 0===p||e?M.push(s):(t>p&&M.push(s),t{s.slidesEl.append(d(u[e],e))})),r)for(let e=T.length-1;e>=0;e-=1){const t=T[e];s.slidesEl.prepend(d(u[t],t))}else T.sort(((e,t)=>t-e)),T.forEach((e=>{s.slidesEl.prepend(d(u[e],e))}));f(s.slidesEl,".swiper-slide, swiper-slide").forEach((e=>{e.style[v]=x-Math.abs(s.cssOverflowAdjustment())+"px"})),S()}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()})),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.slideToClosest(t.params.speed,!0,void 0,s)}),0)}d||(d=l((()=>{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.autoplayDisableOnInteraction&&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;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};const r=e=>(Array.isArray(e)?e:[e]).filter((e=>!!e));function n(e){let s;return e&&"string"==typeof e&&t.isElement&&(s=t.el.querySelector(e),s)?s:(e&&("string"==typeof e&&(s=[...document.querySelectorAll(e)]),t.params.uniqueNavElements&&"string"==typeof e&&s.length>1&&1===t.el.querySelectorAll(e).length&&(s=t.el.querySelector(e))),e&&!s?e:s)}function l(e,s){const a=t.params.navigation;(e=r(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 o(){const{nextEl:e,prevEl:s}=t.navigation;if(t.params.loop)return l(s,!1),void l(e,!1);l(s,t.isBeginning&&!t.params.rewind),l(e,t.isEnd&&!t.params.rewind)}function d(e){e.preventDefault(),(!t.isBeginning||t.params.loop||t.params.rewind)&&(t.slidePrev(),i("navigationPrev"))}function c(e){e.preventDefault(),(!t.isEnd||t.params.loop||t.params.rewind)&&(t.slideNext(),i("navigationNext"))}function p(){const e=t.params.navigation;if(t.params.navigation=te(t,t.originalParams.navigation,t.params.navigation,{nextEl:"swiper-button-next",prevEl:"swiper-button-prev"}),!e.nextEl&&!e.prevEl)return;let s=n(e.nextEl),a=n(e.prevEl);Object.assign(t.navigation,{nextEl:s,prevEl:a}),s=r(s),a=r(a);const i=(s,a)=>{s&&s.addEventListener("click","next"===a?c:d),!t.enabled&&s&&s.classList.add(...e.lockClass.split(" "))};s.forEach((e=>i(e,"next"))),a.forEach((e=>i(e,"prev")))}function u(){let{nextEl:e,prevEl:s}=t.navigation;e=r(e),s=r(s);const a=(e,s)=>{e.removeEventListener("click","next"===s?c:d),e.classList.remove(...t.params.navigation.disabledClass.split(" "))};e.forEach((e=>a(e,"next"))),s.forEach((e=>a(e,"prev")))}a("init",(()=>{!1===t.params.navigation.enabled?m():(p(),o())})),a("toEdge fromEdge lock unlock",(()=>{o()})),a("destroy",(()=>{u()})),a("enable disable",(()=>{let{nextEl:e,prevEl:s}=t.navigation;e=r(e),s=r(s),t.enabled?o():[...e,...s].filter((e=>!!e)).forEach((e=>e.classList.add(t.params.navigation.lockClass)))})),a("click",((e,s)=>{let{nextEl:a,prevEl:n}=t.navigation;a=r(a),n=r(n);const l=s.target;if(t.params.navigation.hideOnClick&&!n.includes(l)&&!a.includes(l)){if(t.pagination&&t.params.pagination&&t.params.pagination.clickable&&(t.pagination.el===l||t.pagination.el.contains(l)))return;let e;a.length?e=a[0].classList.contains(t.params.navigation.hiddenClass):n.length&&(e=n[0].classList.contains(t.params.navigation.hiddenClass)),i(!0===e?"navigationShow":"navigationHide"),[...a,...n].filter((e=>!!e)).forEach((e=>e.classList.toggle(t.params.navigation.hiddenClass)))}}));const m=()=>{t.el.classList.add(...t.params.navigation.navigationDisabledClass.split(" ")),u()};Object.assign(t.navigation,{enable:()=>{t.el.classList.remove(...t.params.navigation.navigationDisabledClass.split(" ")),p(),o()},disable:m,update:o,init:p,destroy:u})},function(e){let{swiper:t,extendParams:s,on:a,emit:i}=e;const r="swiper-pagination";let n;s({pagination:{el:null,bulletElement:"span",clickable:!1,hideOnClick:!1,renderBullet:null,renderProgressbar:null,renderFraction:null,renderCustom:null,progressbarOpposite:!1,type:"bullets",dynamicBullets:!1,dynamicMainBullets:1,formatFractionCurrent:e=>e,formatFractionTotal:e=>e,bulletClass:`${r}-bullet`,bulletActiveClass:`${r}-bullet-active`,modifierClass:`${r}-`,currentClass:`${r}-current`,totalClass:`${r}-total`,hiddenClass:`${r}-hidden`,progressbarFillClass:`${r}-progressbar-fill`,progressbarOppositeClass:`${r}-progressbar-opposite`,clickableClass:`${r}-clickable`,lockClass:`${r}-lock`,horizontalClass:`${r}-horizontal`,verticalClass:`${r}-vertical`,paginationDisabledClass:`${r}-disabled`}}),t.pagination={el:null,bullets:[]};let l=0;const o=e=>(Array.isArray(e)?e:[e]).filter((e=>!!e));function d(){return!t.params.pagination.el||!t.pagination.el||Array.isArray(t.pagination.el)&&0===t.pagination.el.length}function c(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 p(e){const s=e.target.closest(se(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;t.slideToLoop(a)}else t.slideTo(a)}function u(){const e=t.rtl,s=t.params.pagination;if(d())return;let a,r,p=t.pagination.el;p=o(p);const u=t.virtual&&t.params.virtual.enabled?t.virtual.slides.length:t.slides.length,m=t.params.loop?Math.ceil(u/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,d,u;if(s.dynamicBullets&&(n=S(i[0],t.isHorizontal()?"width":"height",!0),p.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),d=o+(Math.min(i.length,s.dynamicMainBullets)-1),u=(d+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)})),p.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<=d&&e.classList.add(...`${s.bulletActiveClass}-main`.split(" ")),i===o&&c(e,"prev"),i===d&&c(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[d];for(let e=o;e<=d;e+=1)i[e]&&i[e].classList.add(...`${s.bulletActiveClass}-main`.split(" "));c(e,"prev"),c(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`}))}}p.forEach(((e,r)=>{if("fraction"===s.type&&(e.querySelectorAll(se(s.currentClass)).forEach((e=>{e.textContent=s.formatFractionCurrent(a+1)})),e.querySelectorAll(se(s.totalClass)).forEach((e=>{e.textContent=s.formatFractionTotal(m)}))),"progressbar"===s.type){let i;i=s.progressbarOpposite?t.isHorizontal()?"vertical":"horizontal":t.isHorizontal()?"horizontal":"vertical";const r=(a+1)/m;let n=1,l=1;"horizontal"===i?n=r:l=r,e.querySelectorAll(se(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?(e.innerHTML=s.renderCustom(t,a+1,m),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 m(){const e=t.params.pagination;if(d())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=o(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&&(s.innerHTML=r||""),"bullets"===e.type&&t.pagination.bullets.push(...s.querySelectorAll(se(e.bulletClass)))})),"custom"!==e.type&&i("paginationRender",a[0])}function h(){t.params.pagination=te(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.filter((e=>E(e,".swiper")[0]===t.el))[0])),Array.isArray(s)&&1===s.length&&(s=s[0]),Object.assign(t.pagination,{el:s}),s=o(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",p),t.enabled||s.classList.add(e.lockClass)})))}function f(){const e=t.params.pagination;if(d())return;let s=t.pagination.el;s&&(s=o(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",p))}))),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=o(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?g():(h(),m(),u())})),a("activeIndexChange",(()=>{void 0===t.snapIndex&&u()})),a("snapIndexChange",(()=>{u()})),a("snapGridLengthChange",(()=>{m(),u()})),a("destroy",(()=>{f()})),a("enable disable",(()=>{let{el:e}=t.pagination;e&&(e=o(e),e.forEach((e=>e.classList[t.enabled?"remove":"add"](t.params.pagination.lockClass))))})),a("lock unlock",(()=>{u()})),a("click",((e,s)=>{const a=s.target,r=o(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 g=()=>{t.el.classList.add(t.params.pagination.paginationDisabledClass);let{el:e}=t.pagination;e&&(e=o(e),e.forEach((e=>e.classList.add(t.params.pagination.paginationDisabledClass)))),f()};Object.assign(t.pagination,{enable:()=>{t.el.classList.remove(t.params.pagination.paginationDisabledClass);let{el:e}=t.pagination;e&&(e=o(e),e.forEach((e=>e.classList.remove(t.params.pagination.paginationDisabledClass)))),h(),m(),u()},disable:g,render:m,update:u,init:h,destroy:f})},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.preventDefault():e.returnValue=!1,E(e),a.style.transitionDuration="0ms",i.style.transitionDuration="0ms",n.style.transitionDuration="0ms",r("scrollbarDragMove",e))}function T(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 M(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",T,l)}function C(){const{scrollbar:e,el:s}=t;t.params.scrollbar=te(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(se(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&&M("on"),i&&i.classList[t.enabled?"remove":"add"](...n(t.params.scrollbar.lockClass))}function P(){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&&M("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("init",(()=>{!1===t.params.scrollbar.enabled?L():(C(),b(),g())})),i("update resize observerUpdate lock unlock",(()=>{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",(()=>{P()}));const L=()=>{t.el.classList.add(...n(t.params.scrollbar.scrollbarDisabledClass)),t.scrollbar.el&&t.scrollbar.el.classList.add(...n(t.params.scrollbar.scrollbarDisabledClass)),P()};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)),C(),b(),g()},disable:L,updateSize:b,setTranslate:g,init:C,destroy:P})},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,maxRatio:3,minRatio:1,toggle:!0,containerClass:"swiper-zoom-container",zoomedSlideClass:"swiper-slide-zoomed"}}),t.zoom={enabled:!1};let l,o,c=1,p=!1;const u=[],m={originX:0,originY:0,slideEl:void 0,slideWidth:void 0,slideHeight:void 0,imageEl:void 0,imageWrapEl:void 0,maxRatio:3},h={isTouched:void 0,isMoved:void 0,currentX:void 0,currentY:void 0,minX:void 0,minY:void 0,maxX:void 0,maxY:void 0,width:void 0,height:void 0,startX:void 0,startY:void 0,touchesStart:{},touchesCurrent:{}},g={x:void 0,y:void 0,prevPositionX:void 0,prevPositionY:void 0,prevTime:void 0};let v=1;function b(){if(u.length<2)return 1;const e=u[0].pageX,t=u[0].pageY,s=u[1].pageX,a=u[1].pageY;return Math.sqrt((s-e)**2+(a-t)**2)}function y(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 x(e){if("mouse"===e.pointerType&&u.splice(0,u.length),!y(e))return;const s=t.params.zoom;if(l=!1,o=!1,u.push(e),!(u.length<2)){if(l=!0,m.scaleStart=b(),!m.slideEl){m.slideEl=e.target.closest(`.${t.params.slideClass}, swiper-slide`),m.slideEl||(m.slideEl=t.slides[t.activeIndex]);let a=m.slideEl.querySelector(`.${s.containerClass}`);if(a&&(a=a.querySelectorAll("picture, img, svg, canvas, .swiper-zoom-target")[0]),m.imageEl=a,m.imageWrapEl=a?E(m.imageEl,`.${s.containerClass}`)[0]:void 0,!m.imageWrapEl)return void(m.imageEl=void 0);m.maxRatio=m.imageWrapEl.getAttribute("data-swiper-zoom")||s.maxRatio}if(m.imageEl){const[e,t]=function(){if(u.length<2)return{x:null,y:null};const e=m.imageEl.getBoundingClientRect();return[(u[0].pageX+(u[1].pageX-u[0].pageX)/2-e.x-n.scrollX)/c,(u[0].pageY+(u[1].pageY-u[0].pageY)/2-e.y-n.scrollY)/c]}();m.originX=e,m.originY=t,m.imageEl.style.transitionDuration="0ms"}p=!0}}function S(e){if(!y(e))return;const s=t.params.zoom,a=t.zoom,i=u.findIndex((t=>t.pointerId===e.pointerId));i>=0&&(u[i]=e),u.length<2||(o=!0,m.scaleMove=b(),m.imageEl&&(a.scale=m.scaleMove/m.scaleStart*c,a.scale>m.maxRatio&&(a.scale=m.maxRatio-1+(a.scale-m.maxRatio+1)**.5),a.scalet.pointerId===e.pointerId));i>=0&&u.splice(i,1),l&&o&&(l=!1,o=!1,m.imageEl&&(a.scale=Math.max(Math.min(a.scale,m.maxRatio),s.minRatio),m.imageEl.style.transitionDuration=`${t.params.speed}ms`,m.imageEl.style.transform=`translate3d(0,0,0) scale(${a.scale})`,c=a.scale,p=!1,a.scale>1&&m.slideEl?m.slideEl.classList.add(`${s.zoomedSlideClass}`):a.scale<=1&&m.slideEl&&m.slideEl.classList.remove(`${s.zoomedSlideClass}`),1===a.scale&&(m.originX=0,m.originY=0,m.slideEl=void 0)))}function M(e){if(!y(e)||!function(e){const s=`.${t.params.zoom.containerClass}`;return!!e.target.matches(s)||[...t.hostEl.querySelectorAll(s)].filter((t=>t.contains(e.target))).length>0}(e))return;const s=t.zoom;if(!m.imageEl)return;if(!h.isTouched||!m.slideEl)return;h.isMoved||(h.width=m.imageEl.offsetWidth,h.height=m.imageEl.offsetHeight,h.startX=d(m.imageWrapEl,"x")||0,h.startY=d(m.imageWrapEl,"y")||0,m.slideWidth=m.slideEl.offsetWidth,m.slideHeight=m.slideEl.offsetHeight,m.imageWrapEl.style.transitionDuration="0ms");const a=h.width*s.scale,i=h.height*s.scale;if(a0?u[0].pageX:e.pageX,h.touchesCurrent.y=u.length>0?u[0].pageY:e.pageY;if(Math.max(Math.abs(h.touchesCurrent.x-h.touchesStart.x),Math.abs(h.touchesCurrent.y-h.touchesStart.y))>5&&(t.allowClick=!1),!h.isMoved&&!p){if(t.isHorizontal()&&(Math.floor(h.minX)===Math.floor(h.startX)&&h.touchesCurrent.xh.touchesStart.x))return void(h.isTouched=!1);if(!t.isHorizontal()&&(Math.floor(h.minY)===Math.floor(h.startY)&&h.touchesCurrent.yh.touchesStart.y))return void(h.isTouched=!1)}e.cancelable&&e.preventDefault(),e.stopPropagation(),h.isMoved=!0;const r=(s.scale-c)/(m.maxRatio-t.params.zoom.minRatio),{originX:n,originY:l}=m;h.currentX=h.touchesCurrent.x-h.touchesStart.x+h.startX+r*(h.width-2*n),h.currentY=h.touchesCurrent.y-h.touchesStart.y+h.startY+r*(h.height-2*l),h.currentXh.maxX&&(h.currentX=h.maxX-1+(h.currentX-h.maxX+1)**.8),h.currentYh.maxY&&(h.currentY=h.maxY-1+(h.currentY-h.maxY+1)**.8),g.prevPositionX||(g.prevPositionX=h.touchesCurrent.x),g.prevPositionY||(g.prevPositionY=h.touchesCurrent.y),g.prevTime||(g.prevTime=Date.now()),g.x=(h.touchesCurrent.x-g.prevPositionX)/(Date.now()-g.prevTime)/2,g.y=(h.touchesCurrent.y-g.prevPositionY)/(Date.now()-g.prevTime)/2,Math.abs(h.touchesCurrent.x-g.prevPositionX)<2&&(g.x=0),Math.abs(h.touchesCurrent.y-g.prevPositionY)<2&&(g.y=0),g.prevPositionX=h.touchesCurrent.x,g.prevPositionY=h.touchesCurrent.y,g.prevTime=Date.now(),m.imageWrapEl.style.transform=`translate3d(${h.currentX}px, ${h.currentY}px,0)`}function C(){const e=t.zoom;m.slideEl&&t.activeIndex!==t.slides.indexOf(m.slideEl)&&(m.imageEl&&(m.imageEl.style.transform="translate3d(0,0,0) scale(1)"),m.imageWrapEl&&(m.imageWrapEl.style.transform="translate3d(0,0,0)"),m.slideEl.classList.remove(`${t.params.zoom.zoomedSlideClass}`),e.scale=1,c=1,m.slideEl=void 0,m.imageEl=void 0,m.imageWrapEl=void 0,m.originX=0,m.originY=0)}function P(e){const s=t.zoom,a=t.params.zoom;if(!m.slideEl){e&&e.target&&(m.slideEl=e.target.closest(`.${t.params.slideClass}, swiper-slide`)),m.slideEl||(t.params.virtual&&t.params.virtual.enabled&&t.virtual?m.slideEl=f(t.slidesEl,`.${t.params.slideActiveClass}`)[0]:m.slideEl=t.slides[t.activeIndex]);let s=m.slideEl.querySelector(`.${a.containerClass}`);s&&(s=s.querySelectorAll("picture, img, svg, canvas, .swiper-zoom-target")[0]),m.imageEl=s,m.imageWrapEl=s?E(m.imageEl,`.${a.containerClass}`)[0]:void 0}if(!m.imageEl||!m.imageWrapEl)return;let i,r,l,o,d,p,u,g,v,b,y,x,S,T,M,C,P,L;t.params.cssMode&&(t.wrapperEl.style.overflow="hidden",t.wrapperEl.style.touchAction="none"),m.slideEl.classList.add(`${a.zoomedSlideClass}`),void 0===h.touchesStart.x&&e?(i=e.pageX,r=e.pageY):(i=h.touchesStart.x,r=h.touchesStart.y);const A="number"==typeof e?e:null;1===c&&A&&(i=void 0,r=void 0),s.scale=A||m.imageWrapEl.getAttribute("data-swiper-zoom")||a.maxRatio,c=A||m.imageWrapEl.getAttribute("data-swiper-zoom")||a.maxRatio,!e||1===c&&A?(u=0,g=0):(P=m.slideEl.offsetWidth,L=m.slideEl.offsetHeight,l=w(m.slideEl).left+n.scrollX,o=w(m.slideEl).top+n.scrollY,d=l+P/2-i,p=o+L/2-r,v=m.imageEl.offsetWidth,b=m.imageEl.offsetHeight,y=v*s.scale,x=b*s.scale,S=Math.min(P/2-y/2,0),T=Math.min(L/2-x/2,0),M=-S,C=-T,u=d*s.scale,g=p*s.scale,uM&&(u=M),gC&&(g=C)),A&&1===s.scale&&(m.originX=0,m.originY=0),m.imageWrapEl.style.transitionDuration="300ms",m.imageWrapEl.style.transform=`translate3d(${u}px, ${g}px,0)`,m.imageEl.style.transitionDuration="300ms",m.imageEl.style.transform=`translate3d(0,0,0) scale(${s.scale})`}function L(){const e=t.zoom,s=t.params.zoom;if(!m.slideEl){t.params.virtual&&t.params.virtual.enabled&&t.virtual?m.slideEl=f(t.slidesEl,`.${t.params.slideActiveClass}`)[0]:m.slideEl=t.slides[t.activeIndex];let e=m.slideEl.querySelector(`.${s.containerClass}`);e&&(e=e.querySelectorAll("picture, img, svg, canvas, .swiper-zoom-target")[0]),m.imageEl=e,m.imageWrapEl=e?E(m.imageEl,`.${s.containerClass}`)[0]:void 0}m.imageEl&&m.imageWrapEl&&(t.params.cssMode&&(t.wrapperEl.style.overflow="",t.wrapperEl.style.touchAction=""),e.scale=1,c=1,m.imageWrapEl.style.transitionDuration="300ms",m.imageWrapEl.style.transform="translate3d(0,0,0)",m.imageEl.style.transitionDuration="300ms",m.imageEl.style.transform="translate3d(0,0,0) scale(1)",m.slideEl.classList.remove(`${s.zoomedSlideClass}`),m.slideEl=void 0,m.originX=0,m.originY=0)}function A(e){const s=t.zoom;s.scale&&1!==s.scale?L():P(e)}function I(){return{passiveListener:!!t.params.passiveListeners&&{passive:!0,capture:!1},activeListenerWithCapture:!t.params.passiveListeners||{passive:!1,capture:!0}}}function z(){const e=t.zoom;if(e.enabled)return;e.enabled=!0;const{passiveListener:s,activeListenerWithCapture:a}=I();t.wrapperEl.addEventListener("pointerdown",x,s),t.wrapperEl.addEventListener("pointermove",S,a),["pointerup","pointercancel","pointerout"].forEach((e=>{t.wrapperEl.addEventListener(e,T,s)})),t.wrapperEl.addEventListener("pointermove",M,a)}function $(){const e=t.zoom;if(!e.enabled)return;e.enabled=!1;const{passiveListener:s,activeListenerWithCapture:a}=I();t.wrapperEl.removeEventListener("pointerdown",x,s),t.wrapperEl.removeEventListener("pointermove",S,a),["pointerup","pointercancel","pointerout"].forEach((e=>{t.wrapperEl.removeEventListener(e,T,s)})),t.wrapperEl.removeEventListener("pointermove",M,a)}Object.defineProperty(t.zoom,"scale",{get:()=>v,set(e){if(v!==e){const t=m.imageEl,s=m.slideEl;i("zoomChange",e,t,s)}v=e}}),a("init",(()=>{t.params.zoom.enabled&&z()})),a("destroy",(()=>{$()})),a("touchStart",((e,s)=>{t.zoom.enabled&&function(e){const s=t.device;if(!m.imageEl)return;if(h.isTouched)return;s.android&&e.cancelable&&e.preventDefault(),h.isTouched=!0;const a=u.length>0?u[0]:e;h.touchesStart.x=a.pageX,h.touchesStart.y=a.pageY}(s)})),a("touchEnd",((e,s)=>{t.zoom.enabled&&function(){const e=t.zoom;if(!m.imageEl)return;if(!h.isTouched||!h.isMoved)return h.isTouched=!1,void(h.isMoved=!1);h.isTouched=!1,h.isMoved=!1;let s=300,a=300;const i=g.x*s,r=h.currentX+i,n=g.y*a,l=h.currentY+n;0!==g.x&&(s=Math.abs((r-h.currentX)/g.x)),0!==g.y&&(a=Math.abs((l-h.currentY)/g.y));const o=Math.max(s,a);h.currentX=r,h.currentY=l;const d=h.width*e.scale,c=h.height*e.scale;h.minX=Math.min(m.slideWidth/2-d/2,0),h.maxX=-h.minX,h.minY=Math.min(m.slideHeight/2-c/2,0),h.maxY=-h.minY,h.currentX=Math.max(Math.min(h.currentX,h.maxX),h.minX),h.currentY=Math.max(Math.min(h.currentY,h.maxY),h.minY),m.imageWrapEl.style.transitionDuration=`${o}ms`,m.imageWrapEl.style.transform=`translate3d(${h.currentX}px, ${h.currentY}px,0)`}()})),a("doubleTap",((e,s)=>{!t.animating&&t.params.zoom.enabled&&t.zoom.enabled&&t.params.zoom.toggle&&A(s)})),a("transitionEnd",(()=>{t.zoom.enabled&&t.params.zoom.enabled&&C()})),a("slideChange",(()=>{t.zoom.enabled&&t.params.zoom.enabled&&t.params.cssMode&&C()})),Object.assign(t.zoom,{enable:z,disable:$,in:P,out:L,toggle:A})},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)){const e=document.querySelector(t.params.controller.control);if(e&&e.swiper)t.controller.control=e.swiper;else if(e){const s=a=>{t.controller.control=a.detail[0],t.update(),e.removeEventListener("init",s)};e.addEventListener("init",s)}}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(Array.isArray(e)?e:[e]).filter((e=>!!e));function l(e){(e=n(e)).forEach((e=>{e.setAttribute("tabIndex","0")}))}function o(e){(e=n(e)).forEach((e=>{e.setAttribute("tabIndex","-1")}))}function d(e,t){(e=n(e)).forEach((e=>{e.setAttribute("role",t)}))}function c(e,t){(e=n(e)).forEach((e=>{e.setAttribute("aria-roledescription",t)}))}function p(e,t){(e=n(e)).forEach((e=>{e.setAttribute("aria-label",t)}))}function u(e){(e=n(e)).forEach((e=>{e.setAttribute("aria-disabled",!0)}))}function m(e){(e=n(e)).forEach((e=>{e.setAttribute("aria-disabled",!1)}))}function h(e){if(13!==e.keyCode&&32!==e.keyCode)return;const s=t.params.a11y,a=e.target;t.pagination&&t.pagination.el&&(a===t.pagination.el||t.pagination.el.contains(e.target))&&!e.target.matches(se(t.params.pagination.bulletClass))||(t.navigation&&t.navigation.nextEl&&a===t.navigation.nextEl&&(t.isEnd&&!t.params.loop||t.slideNext(),t.isEnd?r(s.lastSlideMessage):r(s.nextSlideMessage)),t.navigation&&t.navigation.prevEl&&a===t.navigation.prevEl&&(t.isBeginning&&!t.params.loop||t.slidePrev(),t.isBeginning?r(s.firstSlideMessage):r(s.prevSlideMessage)),t.pagination&&a.matches(se(t.params.pagination.bulletClass))&&a.click())}function f(){return t.pagination&&t.pagination.bullets&&t.pagination.bullets.length}function g(){return f()&&t.params.pagination.clickable}const w=(e,t,s)=>{l(e),"BUTTON"!==e.tagName&&(d(e,"button"),e.addEventListener("keydown",h)),p(e,s),function(e,t){(e=n(e)).forEach((e=>{e.setAttribute("aria-controls",t)}))}(e,t)},b=()=>{t.a11y.clicked=!0},E=()=>{requestAnimationFrame((()=>{requestAnimationFrame((()=>{t.destroyed||(t.a11y.clicked=!1)}))}))},x=e=>{if(t.a11y.clicked)return;const s=e.target.closest(`.${t.params.slideClass}, swiper-slide`);if(!s||!t.slides.includes(s))return;const a=t.slides.indexOf(s)===t.activeIndex,i=t.params.watchSlidesProgress&&t.visibleSlides&&t.visibleSlides.includes(s);a||i||e.sourceCapabilities&&e.sourceCapabilities.firesTouchEvents||(t.isHorizontal()?t.el.scrollLeft=0:t.el.scrollTop=0,t.slideTo(t.slides.indexOf(s),0))},S=()=>{const e=t.params.a11y;e.itemRoleDescriptionMessage&&c(t.slides,e.itemRoleDescriptionMessage),e.slideRole&&d(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;p(a,e.slideLabelMessage.replace(/\{\{index\}\}/,r+1).replace(/\{\{slidesLength\}\}/,s))}))},T=()=>{const e=t.params.a11y;t.el.append(i);const s=t.el;e.containerRoleDescriptionMessage&&c(s,e.containerRoleDescriptionMessage),e.containerMessage&&p(s,e.containerMessage);const a=t.wrapperEl,r=e.id||a.getAttribute("id")||`swiper-wrapper-${l=16,void 0===l&&(l=16),"x".repeat(l).replace(/x/g,(()=>Math.round(16*Math.random()).toString(16)))}`;var l;const o=t.params.autoplay&&t.params.autoplay.enabled?"off":"polite";var d;d=r,n(a).forEach((e=>{e.setAttribute("id",d)})),function(e,t){(e=n(e)).forEach((e=>{e.setAttribute("aria-live",t)}))}(a,o),S();let{nextEl:u,prevEl:m}=t.navigation?t.navigation:{};if(u=n(u),m=n(m),u&&u.forEach((t=>w(t,r,e.nextSlideMessage))),m&&m.forEach((t=>w(t,r,e.prevSlideMessage))),g()){n(t.pagination.el).forEach((e=>{e.addEventListener("keydown",h)}))}t.el.addEventListener("focus",x,!0),t.el.addEventListener("pointerdown",b,!0),t.el.addEventListener("pointerup",E,!0)};a("beforeInit",(()=>{i=v("span",t.params.a11y.notificationClass),i.setAttribute("aria-live","assertive"),i.setAttribute("aria-atomic","true")})),a("afterInit",(()=>{t.params.a11y.enabled&&T()})),a("slidesLengthChange snapGridLengthChange slidesGridLengthChange",(()=>{t.params.a11y.enabled&&S()})),a("fromEdge toEdge afterInit lock unlock",(()=>{t.params.a11y.enabled&&function(){if(t.params.loop||t.params.rewind||!t.navigation)return;const{nextEl:e,prevEl:s}=t.navigation;s&&(t.isBeginning?(u(s),o(s)):(m(s),l(s))),e&&(t.isEnd?(u(e),o(e)):(m(e),l(e)))}()})),a("paginationUpdate",(()=>{t.params.a11y.enabled&&function(){const e=t.params.a11y;f()&&t.pagination.bullets.forEach((s=>{t.params.pagination.clickable&&(l(s),t.params.pagination.renderBullet||(d(s,"button"),p(s,e.paginationBulletMessage.replace(/\{\{index\}\}/,y(s)+1)))),s.matches(se(t.params.pagination.bulletActiveClass))?s.setAttribute("aria-current","true"):s.removeAttribute("aria-current")}))}()})),a("destroy",(()=>{t.params.a11y.enabled&&function(){i&&i.remove();let{nextEl:e,prevEl:s}=t.navigation?t.navigation:{};e=n(e),s=n(s),e&&e.forEach((e=>e.removeEventListener("keydown",h))),s&&s.forEach((e=>e.removeEventListener("keydown",h))),g()&&n(t.pagination.el).forEach((e=>{e.removeEventListener("keydown",h)}));t.el.removeEventListener("focus",x,!0),t.el.removeEventListener("pointerdown",b,!0),t.el.removeEventListener("pointerup",E,!0)}()}))},function(e){let{swiper:t,extendParams:s,on:a}=e;s({history:{enabled:!1,root:"",replaceState:!1,key:"slides",keepQuery:!1}});let i=!1,n={};const l=e=>e.toString().replace(/\s+/g,"-").replace(/[^\w-]+/g,"").replace(/--+/g,"-").replace(/^-+/,"").replace(/-+$/,""),o=e=>{const t=r();let s;s=e?new URL(e):t.location;const a=s.pathname.slice(1).split("/").filter((e=>""!==e)),i=a.length;return{key:a[i-2],value:a[i-1]}},d=(e,s)=>{const a=r();if(!i||!t.params.history.enabled)return;let n;n=t.params.url?new URL(t.params.url):a.location;const o=t.slides[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.filter((e=>e.getAttribute("data-hash")===s))[0];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||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.filter((e=>e.classList.contains("swiper-slide-active")))[0]: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))},A=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",A)),a().addEventListener("visibilitychange",P),S())})),n("destroy",(()=>{i.el.removeEventListener("pointerenter",L),i.el.removeEventListener("pointerleave",A),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)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}`))[0];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=i=>{e.swiper=i.detail[0],a.removeEventListener("init",s),o(),d(!0),e.swiper.update(),t.update()};a.addEventListener("init",s)}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`})),ce({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))};oe({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=t.params.cubeEffect,p=t.isHorizontal(),u=t.virtual&&t.params.virtual.enabled;let m,h=0;c.shadow&&(p?(m=t.wrapperEl.querySelector(".swiper-cube-shadow"),m||(m=v("div","swiper-cube-shadow"),t.wrapperEl.append(m)),m.style.height=`${r}px`):(m=e.querySelector(".swiper-cube-shadow"),m||(m=v("div","swiper-cube-shadow"),e.append(m))));for(let e=0;e-1&&(h=90*r+90*m,l&&(h=90*-r-90*m),t.browser&&t.browser.isSafari&&Math.abs(h)/90%2==1&&(h+=.001)),s.style.transform=w,c.slideShadows&&i(s,m,p)}if(s.style.transformOrigin=`50% 50% -${o/2}px`,s.style["-webkit-transform-origin"]=`50% 50% -${o/2}px`,c.shadow)if(p)m.style.transform=`translate3d(0px, ${r/2+c.shadowOffset}px, ${-r/2}px) rotateX(89.99deg) rotateZ(0deg) scale(${c.shadowScale})`;else{const e=Math.abs(h)-90*Math.floor(Math.abs(h)/90),t=1.5-(Math.sin(2*e*Math.PI/360)/2+Math.cos(2*e*Math.PI/360)/2),s=c.shadowScale,a=c.shadowScale/t,i=c.shadowOffset;m.style.transform=`scale3d(${s}, 1, ${a}) translate3d(0px, ${n/2+i}px, ${-n/2/a}px) rotateX(-89.99deg)`}const f=(d.isSafari||d.isWebView)&&d.needPerspectiveFix?-o/2:0;s.style.transform=`translate3d(0px,0,${f}px) rotateX(${t.isHorizontal()?0:h}deg) rotateY(${t.isHorizontal()?-h:0}deg)`,s.style.setProperty("--swiper-cube-translate-z",`${f}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=pe("flip",e,t.isHorizontal()?"left":"top")),i||(i=pe("flip",e,t.isHorizontal()?"right":"bottom")),a&&(a.style.opacity=Math.max(-s,0)),i&&(i.style.opacity=Math.max(s,0))};oe({effect:"flip",swiper:t,on:a,setTranslate:()=>{const{slides:e,rtlTranslate:s}=t,a=t.params.flipEffect;for(let r=0;r{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`}))})),ce({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}}),oe({effect:"coverflow",swiper:t,on:a,setTranslate:()=>{const{width:e,height:s,slides:a,slidesSizesGrid:i}=t,r=t.params.coverflowEffect,n=t.isHorizontal(),l=t.translate,o=n?e/2-l:s/2-l,d=n?r.rotate:-r.rotate,c=r.depth;for(let e=0,s=a.length;e0?u:0),t&&(t.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`;oe({effect:"creative",swiper:t,on:a,setTranslate:()=>{const{slides:e,wrapperEl:s,slidesSizesGrid:a}=t,r=t.params.creativeEffect,{progressMultiplier:n}=r,l=t.params.centeredSlides;if(l){const e=a[0]/2-t.params.slidesOffsetBefore||0;s.style.transform=`translateX(calc(50% - ${e}px))`}for(let s=0;s0&&(f=r.prev,h=!0),u.forEach(((e,t)=>{u[t]=`calc(${e}px + (${i(f.translate[t])} * ${Math.abs(d*n)}))`})),m.forEach(((e,s)=>{let a=f.rotate[s]*Math.abs(d*n);t.browser&&t.browser.isSafari&&Math.abs(a)/90%2==1&&(a+=.001),m[s]=a})),a.style.zIndex=-Math.abs(Math.round(o))+e.length;const g=u.join(", "),v=`rotateX(${m[0]}deg) rotateY(${m[1]}deg) rotateZ(${m[2]}deg)`,w=c<0?`scale(${1+(1-f.scale)*c*n})`:`scale(${1-(1-f.scale)*c*n})`,b=c<0?1+(1-f.opacity)*c*n:1-(1-f.opacity)*c*n,y=`translate3d(${g}) ${v} ${w}`;if(h&&f.shadow||!h){let e=a.querySelector(".swiper-slide-shadow");if(!e&&f.shadow&&(e=pe("creative",a)),e){const t=r.shadowPerProgress?d*(1/r.limitProgress):d;e.style.opacity=Math.min(Math.max(Math.abs(t),0),1)}}const E=de(0,a);E.style.transform=y,E.style.opacity=b,f.origin&&(E.style.transformOrigin=f.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`}))})),ce({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}}),oe({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=pe("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;de(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`}))})),ce({swiper:t,duration:e,transformElements:s})},perspective:()=>!0,overwriteParams:()=>({watchSlidesProgress:!0,virtualTranslate:!t.params.cssMode})})}];return ee.use(ue),ee}(); +//# sourceMappingURL=swiper-bundle.min.js.map \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/assets/js/tinytyper.min.js b/wp-content/themes/nenghui-energy-theme-cn/assets/js/tinytyper.min.js new file mode 100644 index 0000000..acff7cb --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/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-cn/assets/js/video-banner.js b/wp-content/themes/nenghui-energy-theme-cn/assets/js/video-banner.js new file mode 100644 index 0000000..3966c7b --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/assets/js/video-banner.js @@ -0,0 +1,323 @@ +/** + * 视频横幅功能脚本 + * 处理视频播放、视频背景和GSAP动画 + */ + +// 全局变量 +let videoBannerInitialized = false; + +// 视频模态框功能 +function openVideoModal(element) { + const container = element.closest('.video-banner-container'); + if (!container) return; + + const videoUrl = container.getAttribute('data-video-url'); + const videoTitle = container.getAttribute('data-video-title') || '视频播放'; + + if (!videoUrl) return; + + const modal = document.getElementById('video-modal'); + const modalVideo = document.getElementById('modal-video'); + const modalTitle = document.getElementById('video-modal-title'); + + if (modal && modalVideo && modalTitle) { + modalTitle.textContent = videoTitle; + modalVideo.src = videoUrl; + modal.style.display = 'block'; + + // 添加动画效果 + if (typeof gsap !== 'undefined') { + gsap.fromTo(modal.querySelector('.video-modal-content'), + { scale: 0.8, opacity: 0 }, + { scale: 1, opacity: 1, duration: 0.3, ease: "back.out(1.7)" } + ); + } + + // 阻止背景滚动 + document.body.style.overflow = 'hidden'; + } +} + +function closeVideoModal() { + const modal = document.getElementById('video-modal'); + const modalVideo = document.getElementById('modal-video'); + + if (modal && modalVideo) { + // 添加关闭动画 + if (typeof gsap !== 'undefined') { + gsap.to(modal.querySelector('.video-modal-content'), { + scale: 0.8, + opacity: 0, + duration: 0.2, + ease: "power2.in", + onComplete: () => { + modal.style.display = 'none'; + modalVideo.src = ''; + document.body.style.overflow = ''; + } + }); + } else { + modal.style.display = 'none'; + modalVideo.src = ''; + document.body.style.overflow = ''; + } + } +} + +// 视频背景管理 +class VideoBannerManager { + constructor() { + this.containers = []; + this.init(); + } + + init() { + this.findContainers(); + this.setupEventListeners(); + this.initializeVideos(); + this.setupAnimations(); + } + + findContainers() { + this.containers = Array.from(document.querySelectorAll('.video-banner-container')); + } + + setupEventListeners() { + // 窗口调整大小时重新初始化 + window.addEventListener('resize', this.debounce(() => { + this.handleResize(); + }, 250)); + + // 模态框点击外部关闭 + const modal = document.getElementById('video-modal'); + if (modal) { + modal.addEventListener('click', (e) => { + if (e.target === modal) { + closeVideoModal(); + } + }); + } + + // ESC键关闭模态框 + document.addEventListener('keydown', (e) => { + if (e.key === 'Escape') { + closeVideoModal(); + } + }); + } + + initializeVideos() { + this.containers.forEach(container => { + const video = container.querySelector('.video-background'); + if (video) { + this.setupVideo(video, container); + } + }); + } + + setupVideo(video, container) { + // 设置视频属性 + video.muted = true; + video.loop = true; + video.playsInline = true; + video.autoplay = true; + + // 监听视频事件 + video.addEventListener('loadeddata', () => { + this.onVideoLoaded(video, container); + }); + + video.addEventListener('canplay', () => { + this.playVideo(video); + }); + + video.addEventListener('error', (e) => { + console.error('视频加载失败:', e); + this.handleVideoError(video, container); + }); + + // 尝试播放视频 + this.playVideo(video); + } + + onVideoLoaded(video, container) { + // 视频加载完成后的处理 + video.style.opacity = '1'; + + // 添加淡入动画 + if (typeof gsap !== 'undefined') { + gsap.fromTo(video, + { opacity: 0 }, + { opacity: 1, duration: 1, ease: "power2.out" } + ); + } + } + + playVideo(video) { + const playPromise = video.play(); + + if (playPromise !== undefined) { + playPromise.then(() => { + // 自动播放成功 + + }).catch(error => { + // 自动播放失败,通常是由于浏览器政策 + + this.handleAutoplayFailure(video); + }); + } + } + + handleAutoplayFailure(video) { + // 创建播放按钮 + const container = video.closest('.video-banner-container'); + if (container && !container.querySelector('.video-play-trigger')) { + const playButton = document.createElement('div'); + playButton.className = 'video-play-trigger'; + playButton.innerHTML = ` +
+ + + + +
+ `; + + playButton.addEventListener('click', () => { + video.play(); + playButton.remove(); + }); + + container.appendChild(playButton); + } + } + + handleVideoError(video, container) { + // 视频加载错误处理 + const errorDiv = document.createElement('div'); + errorDiv.className = 'video-error-message'; + errorDiv.textContent = '视频加载失败'; + container.appendChild(errorDiv); + } + + handleResize() { + // 处理窗口大小变化 + this.containers.forEach(container => { + const video = container.querySelector('.video-background'); + if (video) { + this.adjustVideoSize(video, container); + } + }); + } + + adjustVideoSize(video, container) { + // 调整视频尺寸以适应容器 + const containerRect = container.getBoundingClientRect(); + const videoRect = video.getBoundingClientRect(); + + const containerRatio = containerRect.width / containerRect.height; + const videoRatio = video.videoWidth / video.videoHeight; + + if (containerRatio > videoRatio) { + video.style.width = '100%'; + video.style.height = 'auto'; + } else { + video.style.width = 'auto'; + video.style.height = '100%'; + } + } + + setupAnimations() { + if (typeof gsap === 'undefined') return; + + // 等待GSAP兼容性就绪 + if (!document.body.classList.contains('gsap-ready')) { + document.addEventListener('gsapCompatibilityReady', () => { + this.setupAnimations(); + }); + return; + } + + this.containers.forEach(container => { + this.animateContainer(container); + }); + } + + animateContainer(container) { + const content = container.querySelector('.video-banner-content'); + const title = container.querySelector('.video-banner-title'); + const subtitle = container.querySelector('.video-banner-subtitle'); + const description = container.querySelector('.video-banner-description'); + const playButton = container.querySelector('.video-banner-play-button'); + + // 创建时间线动画 + const tl = gsap.timeline({ delay: 0.5 }); + + if (subtitle) { + tl.fromTo(subtitle, + { y: 30, opacity: 0 }, + { y: 0, opacity: 1, duration: 0.8, ease: "power2.out" } + ); + } + + if (title) { + tl.fromTo(title, + { y: 50, opacity: 0 }, + { y: 0, opacity: 1, duration: 1, ease: "power2.out" }, + "-=0.6" + ); + } + + if (description) { + tl.fromTo(description, + { y: 30, opacity: 0 }, + { y: 0, opacity: 1, duration: 0.8, ease: "power2.out" }, + "-=0.4" + ); + } + + if (playButton) { + tl.fromTo(playButton, + { scale: 0, opacity: 0 }, + { scale: 1, opacity: 1, duration: 0.6, ease: "back.out(1.7)" }, + "-=0.2" + ); + } + } + + // 工具函数:防抖 + debounce(func, wait) { + let timeout; + return function executedFunction(...args) { + const later = () => { + clearTimeout(timeout); + func(...args); + }; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + }; + } +} + +// 初始化 +document.addEventListener('DOMContentLoaded', function() { + if (!videoBannerInitialized) { + new VideoBannerManager(); + videoBannerInitialized = true; + } +}); + +// 如果页面已经加载完成 +if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', function() { + if (!videoBannerInitialized) { + new VideoBannerManager(); + videoBannerInitialized = true; + } + }); +} else { + if (!videoBannerInitialized) { + new VideoBannerManager(); + videoBannerInitialized = true; + } +} diff --git a/wp-content/themes/nenghui-energy-theme-cn/footer.php b/wp-content/themes/nenghui-energy-theme-cn/footer.php new file mode 100644 index 0000000..9bc51bf --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/footer.php @@ -0,0 +1,137 @@ + +
+
+ +
+ +
+ + logo + +
+ +
+ +
+

关于我们

+
    +
  • 关于能辉
  • +
  • 能辉核心
  • +
  • 可持续发展
  • +
+
+ + +
+

投资者关系

+
    +
  • 公司治理
  • +
  • 公司公告
  • +
  • 投资者交流
  • +
+
+ + +
+

新闻资讯

+
    +
  • 新闻中心
  • +
  • 社会活动
  • +
  • 公司公告
  • +
+
+ + +
+

联系我们

+
    +
  • 联系方式
  • +
+
+
+ + +
+
+

© 上海能辉科技股份有限公司 版权所有 | + 公安网备:沪公网安备31010502007560号 | + 工信部备案:沪ICP备16000753号-8 + 隐私政策 +

+
+
+
+
+ + +
+ + + + + + + + + + + + + + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/functions.php b/wp-content/themes/nenghui-energy-theme-cn/functions.php new file mode 100644 index 0000000..68c07d1 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/functions.php @@ -0,0 +1,1049 @@ +is_main_query()) { + if (get_query_var('pagename') === 'archive') { + // 设置为archive页面查询 + $query->set('post_type', 'post'); + $query->set('post_status', 'publish'); + $query->set('posts_per_page', 5); + + // 获取分页参数 + $paged = get_query_var('paged') ? get_query_var('paged') : 1; + $query->set('paged', $paged); + + // 设置模板 + add_filter('template_include', function($template) { + return get_template_directory() . '/archive.php'; + }); + } + } +} +add_action('pre_get_posts', 'handle_archive_query'); + +// 全局设置文章每页显示数量,修复分页404问题 +function set_posts_per_page_global($query) { + if (!is_admin() && $query->is_main_query()) { + if ($query->is_category() || $query->is_search() || $query->is_archive()) { + $query->set('posts_per_page', 5); + } + } +} +add_action('pre_get_posts', 'set_posts_per_page_global', 99); + +// 维护模式检查 +function check_maintenance_mode() { + // 如果是管理员或在后台,不显示维护页面 + if (is_admin() || current_user_can('manage_options')) { + return; + } + + // 获取维护模式设置 + $options = get_option('themes_demo'); + $maintenance_mode = isset($options['maintenance_mode']) ? $options['maintenance_mode'] : '0'; + + // 检查定时维护模式 + $is_scheduled_maintenance = check_scheduled_maintenance(); + + // 如果启用了维护模式或处于定时维护期间,显示维护页面 + if ($maintenance_mode === '1' || $is_scheduled_maintenance) { + $maintenance_title = isset($options['maintenance_title']) ? $options['maintenance_title'] : '网站维护中'; + $maintenance_message = isset($options['maintenance_message']) ? $options['maintenance_message'] : '我们正在对网站进行维护升级,请稍后再访问。给您带来的不便,敬请谅解!'; + + // 设置503状态码 + status_header(503); + + // 显示维护页面 + show_maintenance_page($maintenance_title, $maintenance_message); + exit; + } +} +add_action('template_redirect', 'check_maintenance_mode'); + +/** + * 检查是否处于定时维护期间 + */ +function check_scheduled_maintenance() { + $options = get_option('themes_demo'); + $start_time = isset($options['maintenance_start_time']) ? $options['maintenance_start_time'] : ''; + $end_time = isset($options['maintenance_end_time']) ? $options['maintenance_end_time'] : ''; + $timezone = isset($options['maintenance_timezone']) ? $options['maintenance_timezone'] : 'Asia/Shanghai'; + + // 如果没有设置时间,返回false + if (empty($start_time) && empty($end_time)) { + return false; + } + + try { + // 设置时区 + $tz = new DateTimeZone($timezone); + $current_time = new DateTime('now', $tz); + + // 如果只设置了结束时间,检查是否已过期 + if (empty($start_time) && !empty($end_time)) { + $end_datetime = new DateTime($end_time, $tz); + return $current_time < $end_datetime; + } + + // 如果只设置了开始时间,检查是否已开始 + if (!empty($start_time) && empty($end_time)) { + $start_datetime = new DateTime($start_time, $tz); + return $current_time >= $start_datetime; + } + + // 如果都设置了,检查是否在时间范围内 + if (!empty($start_time) && !empty($end_time)) { + $start_datetime = new DateTime($start_time, $tz); + $end_datetime = new DateTime($end_time, $tz); + return $current_time >= $start_datetime && $current_time < $end_datetime; + } + + } catch (Exception $e) { + // 时间解析错误,记录日志 + error_log('Maintenance mode time parsing error: ' . $e->getMessage()); + return false; + } + + return false; +} + +/** + * 获取维护模式结束时间(用于倒计时) + */ +function get_maintenance_end_time() { + $options = get_option('themes_demo'); + $end_time = isset($options['maintenance_end_time']) ? $options['maintenance_end_time'] : ''; + $timezone = isset($options['maintenance_timezone']) ? $options['maintenance_timezone'] : 'Asia/Shanghai'; + + if (empty($end_time)) { + return null; + } + + try { + $tz = new DateTimeZone($timezone); + $end_datetime = new DateTime($end_time, $tz); + return $end_datetime->getTimestamp(); + } catch (Exception $e) { + error_log('获取维护结束时间错误: ' . $e->getMessage()); + return null; + } +} + +/** + * 注册维护模式定时任务 + */ +function schedule_maintenance_mode_tasks() { + // 清除现有的定时任务 + wp_clear_scheduled_hook('maintenance_mode_start'); + wp_clear_scheduled_hook('maintenance_mode_end'); + + $options = get_option('themes_demo'); + $start_time = isset($options['maintenance_start_time']) ? $options['maintenance_start_time'] : ''; + $end_time = isset($options['maintenance_end_time']) ? $options['maintenance_end_time'] : ''; + $timezone = isset($options['maintenance_timezone']) ? $options['maintenance_timezone'] : 'Asia/Shanghai'; + + if (empty($start_time) && empty($end_time)) { + return; + } + + try { + $tz = new DateTimeZone($timezone); + $current_time = new DateTime('now', $tz); + + // 安排开始维护任务 + if (!empty($start_time)) { + $start_datetime = new DateTime($start_time, $tz); + $start_timestamp = $start_datetime->getTimestamp(); + + // 只有当开始时间在未来时才安排任务 + if ($start_timestamp > time()) { + wp_schedule_single_event($start_timestamp, 'maintenance_mode_start'); + error_log('已安排维护模式开始任务: ' . $start_datetime->format('Y-m-d H:i:s')); + } + } + + // 安排结束维护任务 + if (!empty($end_time)) { + $end_datetime = new DateTime($end_time, $tz); + $end_timestamp = $end_datetime->getTimestamp(); + + // 只有当结束时间在未来时才安排任务 + if ($end_timestamp > time()) { + wp_schedule_single_event($end_timestamp, 'maintenance_mode_end'); + error_log('已安排维护模式结束任务: ' . $end_datetime->format('Y-m-d H:i:s')); + } + } + + } catch (Exception $e) { + error_log('Schedule maintenance tasks error: ' . $e->getMessage()); + } +} +add_action('update_option_themes_demo', 'schedule_maintenance_mode_tasks'); + +/** + * 获取主题缓存版本号 + * 用于当文章更新时刷新所有相关的transient缓存 + */ +function get_theme_cache_version() { + $version = get_option('theme_cache_version'); + if (false === $version) { + $version = time(); + update_option('theme_cache_version', $version); + } + return $version; +} + +/** + * 更新主题缓存版本号(清理缓存) + */ +function update_theme_cache_version() { + update_option('theme_cache_version', time()); +} + +// 在文章保存、删除、切换主题时自动清理缓存 +add_action('save_post', 'update_theme_cache_version'); +add_action('deleted_post', 'update_theme_cache_version'); +add_action('switch_theme', 'update_theme_cache_version'); + +/** + * 在顶部管理栏添加"清理缓存"按钮 + */ +function add_clear_cache_button_to_admin_bar($wp_admin_bar) { + if (!current_user_can('manage_options')) { + return; + } + + $args = array( + 'id' => 'clear_theme_cache', + 'title' => '清理主题缓存', + 'href' => wp_nonce_url(admin_url('admin-post.php?action=clear_theme_cache'), 'clear_theme_cache_nonce'), + 'meta' => array('class' => 'clear-theme-cache-button') + ); + $wp_admin_bar->add_node($args); +} +add_action('admin_bar_menu', 'add_clear_cache_button_to_admin_bar', 999); + +/** + * 处理手动清理缓存请求 + */ +function handle_manual_cache_clearing() { + if (!current_user_can('manage_options')) { + wp_die('权限不足'); + } + + check_admin_referer('clear_theme_cache_nonce'); + + update_theme_cache_version(); + + // 获取来源页面,如果存在则跳回,否则跳回首页 + $redirect_url = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : home_url('/'); + + wp_redirect($redirect_url); + exit; +} +add_action('admin_post_clear_theme_cache', 'handle_manual_cache_clearing'); + + +/** + * 自动开启维护模式 + */ +function auto_start_maintenance_mode() { + $options = get_option('themes_demo'); + $options['maintenance_mode'] = '1'; + update_option('themes_demo', $options); + error_log('自动开启维护模式'); +} +add_action('maintenance_mode_start', 'auto_start_maintenance_mode'); + +/** + * 自动关闭维护模式 + */ +function auto_end_maintenance_mode() { + $options = get_option('themes_demo'); + $options['maintenance_mode'] = '0'; + update_option('themes_demo', $options); + error_log('自动关闭维护模式'); +} +add_action('maintenance_mode_end', 'auto_end_maintenance_mode'); + +/** + * 当主题选项更新时重新安排维护任务 + */ +function reschedule_maintenance_tasks_on_update($option_name, $old_value, $value) { + if ($option_name === 'themes_demo') { + // 检查维护相关设置是否有变化 + $old_start = isset($old_value['maintenance_start_time']) ? $old_value['maintenance_start_time'] : ''; + $old_end = isset($old_value['maintenance_end_time']) ? $old_value['maintenance_end_time'] : ''; + $old_timezone = isset($old_value['maintenance_timezone']) ? $old_value['maintenance_timezone'] : 'Asia/Shanghai'; + + $new_start = isset($value['maintenance_start_time']) ? $value['maintenance_start_time'] : ''; + $new_end = isset($value['maintenance_end_time']) ? $value['maintenance_end_time'] : ''; + $new_timezone = isset($value['maintenance_timezone']) ? $value['maintenance_timezone'] : 'Asia/Shanghai'; + + if ($old_start !== $new_start || $old_end !== $new_end || $old_timezone !== $new_timezone) { + schedule_maintenance_mode_tasks(); + error_log('维护模式设置已更新,重新安排定时任务'); + } + } +} +add_action('updated_option', 'reschedule_maintenance_tasks_on_update', 10, 3); + +/** + * 强制触发WordPress Cron(用于测试) + */ +function force_wp_cron() { + if (defined('DOING_CRON') && DOING_CRON) { + return; + } + + // 触发WordPress Cron + spawn_cron(); +} + +// 在主题激活时安排维护任务 +add_action('after_switch_theme', 'schedule_maintenance_mode_tasks'); + +// 包含维护模式测试文件(仅在开发环境或管理员访问时) +if (is_admin() && current_user_can('manage_options')) { + require_once get_template_directory() . '/maintenance-test.php'; +} + +// 显示维护页面 +function show_maintenance_page($title, $message) { + $site_name = get_bloginfo('name'); + $logo = get_theme_option('site_logo'); + $end_timestamp = get_maintenance_end_time(); + + ?> +> + + + + <?php echo esc_html($title); ?> - <?php echo esc_html($site_name); ?> + + + +
+ + <?php echo esc_attr($site_name); ?> + +
🔧
+ + +

+

+ + +
+
预计恢复时间
+
+
+ 00 + 天 +
+
+ 00 + 时 +
+
+ 00 + 分 +
+
+ 00 + 秒 +
+
+
+ + + + + 刷新页面 +
+ + 100, + 'width' => 400, + 'flex-height' => true, + 'flex-width' => true, + )); +} +add_action('after_setup_theme', 'nenghui_theme_setup'); + +// 注册导航菜单 +function register_theme_menus() { + register_nav_menus(array( + 'primary-menu' => '主导航菜单' + )); +} +add_action('init', 'register_theme_menus'); + +// 允许上传SVG和WebP格式文件 +function allow_svg_webp_upload($mimes) { + // 添加SVG支持 + $mimes['svg'] = 'image/svg+xml'; + $mimes['svgz'] = 'image/svg+xml'; + + // 添加WebP支持 + $mimes['webp'] = 'image/webp'; + + return $mimes; +} +add_filter('upload_mimes', 'allow_svg_webp_upload'); + +// 修复SVG文件的MIME类型检查 +function fix_svg_mime_type($data, $file, $filename, $mimes) { + $filetype = wp_check_filetype($filename, $mimes); + if ($filetype['ext'] === 'svg') { + $data['ext'] = 'svg'; + $data['type'] = 'image/svg+xml'; + } + return $data; +} +add_filter('wp_check_filetype_and_ext', 'fix_svg_mime_type', 10, 4); + +// 为SVG文件添加安全检查 +function sanitize_svg_upload($file) { + if ($file['type'] === 'image/svg+xml') { + $svg_content = file_get_contents($file['tmp_name']); + + // 检查是否包含潜在危险的标签 + $dangerous_tags = array('script', 'object', 'embed', 'iframe', 'link'); + foreach ($dangerous_tags as $tag) { + if (strpos($svg_content, '<' . $tag) !== false) { + $file['error'] = 'SVG文件包含不安全的内容,上传被拒绝。'; + return $file; + } + } + } + return $file; +} +add_filter('wp_handle_upload_prefilter', 'sanitize_svg_upload'); + +// 在媒体库中正确显示SVG文件 +function display_svg_in_media_library($response, $attachment, $meta) { + if ($response['type'] === 'image' && $response['subtype'] === 'svg+xml') { + $response['image'] = array( + 'src' => $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', 'display_svg_in_media_library', 10, 3); + +// 加载自定义器JavaScript文件 +function nenghui_customizer_scripts() { + // 加载自定义器控制脚本 + wp_enqueue_script( + 'nenghui-customizer-controls', + get_template_directory_uri() . '/assets/js/customizer-controls.js', + array('jquery', 'customize-controls'), + '1.5.0', + true + ); +} +add_action('customize_controls_enqueue_scripts', 'nenghui_customizer_scripts'); + +// 加载自定义器预览脚本 +function nenghui_customizer_preview_scripts() { + wp_enqueue_script( + 'nenghui-customizer-preview', + get_template_directory_uri() . '/assets/js/customizer-preview.js', + array('jquery', 'customize-preview'), + '1.5.0', + true + ); +} +add_action('customize_preview_init', 'nenghui_customizer_preview_scripts'); + +// 禁用自动生成的图片尺寸 +function shapeSpace_disable_image_sizes($sizes) { + unset($sizes['thumbnail']); // 禁用缩略图尺寸 + unset($sizes['medium']); // 禁用中等尺寸 + unset($sizes['large']); // 禁用大尺寸 + unset($sizes['medium_large']); // 禁用中大型尺寸 + unset($sizes['1536x1536']); // 禁用2倍中大型尺寸 + unset($sizes['2048x2048']); // 禁用2倍大尺寸 + return $sizes; +} +add_action('intermediate_image_sizes_advanced', 'shapeSpace_disable_image_sizes'); + +// 禁用大图片自动缩放功能 +add_filter('big_image_size_threshold', '__return_false'); + +// 禁用其他自定义图片尺寸 +function shapeSpace_disable_other_image_sizes() { + // 禁用特色图片尺寸 + remove_image_size('post-thumbnail'); + + // 如果有其他主题或插件添加的图片尺寸,可以在这里继续移除 + // 例如:remove_image_size('custom-size'); +} +add_action('init', 'shapeSpace_disable_other_image_sizes'); + +// 自定义导航菜单Walker类,支持下拉多级菜单 +class Custom_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 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 = in_array('menu-item-has-children', $classes); + + $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 : ''); + + + + $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"; + } +} + +// 添加菜单JavaScript支持 +function enqueue_dropdown_menu_scripts() { + wp_enqueue_script( + 'dropdown-menu', + get_template_directory_uri() . '/assets/js/dropdown-menu.js', + array('jquery'), + '1.0.0', + true + ); +} +add_action('wp_enqueue_scripts', 'enqueue_dropdown_menu_scripts'); + +// 股票信息短代码函数 +function nenghui_stock_info_shortcode($atts) { + $attributes = shortcode_atts(array( + 'stock_code' => 'sz301046', + 'theme' => 'default', + 'show_chart' => false, + 'block_id' => 'stock-info-' . uniqid() + ), $atts); + + // 开始输出缓冲 + ob_start(); + + // 设置属性数组供模板使用 + $template_attributes = array( + 'stockCode' => $attributes['stock_code'], + 'theme' => $attributes['theme'], + 'showChart' => $attributes['show_chart'], + 'blockId' => $attributes['block_id'] + ); + + // 包含股票信息区块模板 + $template_path = get_template_directory() . '/template-parts/block/block-stock-info.php'; + if (file_exists($template_path)) { + // 将属性设置为全局变量供模板使用 + global $stock_info_attributes; + $stock_info_attributes = $template_attributes; + include $template_path; + } else { + echo '
股票信息模板文件未找到
'; + } + + return ob_get_clean(); +} + +// 注册短代码 +add_shortcode('nenghui_stock_info', 'nenghui_stock_info_shortcode'); + +// 投资者接待短代码函数 +function nenghui_investor_reception_shortcode($atts) { + $attributes = shortcode_atts(array( + 'title' => '投资者接待', + 'subtitle' => '投资者交流平台', + 'contact_person' => '董事会秘书 罗联明', + 'contact_phone' => '021-50896255', + 'contact_email' => 'nenghui@nhet.com.cn', + 'background_image' => 'http://nh.matepress.cn/wp-content/uploads/2025/09/touzizhe-banner.webp', + 'theme' => 'default', + 'block_id' => 'investor-reception-' . uniqid() + ), $atts); + + // 开始输出缓冲 + ob_start(); + + // 设置属性数组供模板使用 + $template_attributes = array( + 'title' => $attributes['title'], + 'subtitle' => $attributes['subtitle'], + 'contactPerson' => $attributes['contact_person'], + 'contactPhone' => $attributes['contact_phone'], + 'contactEmail' => $attributes['contact_email'], + 'backgroundImage' => $attributes['background_image'], + 'theme' => $attributes['theme'], + 'blockId' => $attributes['block_id'] + ); + + // 包含投资者接待区块模板 + $template_path = get_template_directory() . '/template-parts/block/block-investor-reception.php'; + if (file_exists($template_path)) { + // 将属性设置为全局变量供模板使用 + global $investor_reception_attributes; + $investor_reception_attributes = $template_attributes; + include $template_path; + } else { + echo '
投资者接待模板文件未找到
'; + } + + return ob_get_clean(); +} + +// 注册投资者接待短代码 +add_shortcode('nenghui_investor_reception', 'nenghui_investor_reception_shortcode'); + +// 高管简历短代码函数 +function nenghui_executive_profiles_shortcode($atts) { + $attributes = shortcode_atts(array( + 'title' => '高管团队', + 'theme' => 'default', + 'columns' => '1', + 'block_id' => 'executive-profiles-' . uniqid() + ), $atts); + + // 开始输出缓冲 + ob_start(); + + // 设置属性数组供模板使用 + $template_attributes = array( + 'title' => $attributes['title'], + 'theme' => $attributes['theme'], + 'columns' => intval($attributes['columns']), + 'blockId' => $attributes['block_id'] + ); + + // 包含高管简历区块模板 + $template_path = get_template_directory() . '/template-parts/block/block-executive-profiles.php'; + if (file_exists($template_path)) { + // 将属性设置为全局变量供模板使用 + global $executive_profiles_attributes; + $executive_profiles_attributes = $template_attributes; + include $template_path; + } else { + echo '
高管简历模板文件未找到
'; + } + + return ob_get_clean(); +} + +// 注册高管简历短代码 +add_shortcode('nenghui_executive_profiles', 'nenghui_executive_profiles_shortcode'); + +// HTML压缩功能集成 +// 引入HTML压缩集成文件 +require_once get_template_directory() . '/inc/html-compression-integration.php'; + +/** + * 初始化HTML压缩功能 + * 在主题激活时设置默认选项 + */ +function nenghui_init_html_compression() { + // 设置默认的压缩选项 + $default_options = array( + 'nenghui_compression_enabled' => true, + 'nenghui_compression_remove_comments' => true, + 'nenghui_compression_remove_whitespace' => true, + 'nenghui_compression_compress_css' => true, + 'nenghui_compression_compress_js' => true, + 'nenghui_compression_preserve_line_breaks' => false, + 'nenghui_compression_excluded_pages' => 'wp-admin,wp-login,xmlrpc' + ); + + // 只在首次激活时设置默认值 + foreach ($default_options as $option_name => $default_value) { + if (get_theme_mod($option_name) === false) { + set_theme_mod($option_name, $default_value); + } + } +} + +// 在主题激活时初始化压缩功能 +add_action('after_switch_theme', 'nenghui_init_html_compression'); + +/** + * 添加HTML压缩相关的管理员通知 + */ +function nenghui_compression_admin_notices() { + // 检查是否启用了压缩功能 + $compression_enabled = get_theme_mod('nenghui_compression_enabled', true); + + if (!$compression_enabled) { + echo '
'; + echo '

能汇能源主题:HTML压缩功能已禁用。您可以在 自定义器 中启用它以提升网站性能。

'; + echo '
'; + } +} +add_action('admin_notices', 'nenghui_compression_admin_notices'); + +/** + * 添加压缩功能到主题支持 + */ +function nenghui_add_compression_theme_support() { + // 添加主题支持HTML压缩 + add_theme_support('nenghui-html-compression', array( + 'remove_comments' => true, + 'remove_whitespace' => true, + 'compress_css' => true, + 'compress_js' => true, + 'preserve_content' => array('pre', 'textarea', 'script', 'style'), + 'excluded_pages' => array('wp-admin', 'wp-login', 'xmlrpc') + )); +} +add_action('after_setup_theme', 'nenghui_add_compression_theme_support'); + +/** + * 清理主题停用时的压缩相关数据 + */ +function nenghui_cleanup_compression_data() { + // 清理压缩统计数据 + delete_option('nenghui_compression_stats'); + + // 清理自定义器设置(可选,根据需要决定是否保留用户设置) + // remove_theme_mod('nenghui_compression_enabled'); + // remove_theme_mod('nenghui_compression_remove_comments'); + // remove_theme_mod('nenghui_compression_remove_whitespace'); + // remove_theme_mod('nenghui_compression_compress_css'); + // remove_theme_mod('nenghui_compression_compress_js'); + // remove_theme_mod('nenghui_compression_excluded_pages'); +} +add_action('switch_theme', 'nenghui_cleanup_compression_data'); + +/** + * 手机轮播图简码功能 + * 使用方法: [phone_carousel] + */ +function phone_carousel_shortcode($atts) { + // 设置默认属性 + $atts = shortcode_atts(array( + 'width' => '220px', + 'height' => '800px', + 'mobile_width' => '300px', + 'mobile_height' => '600px' + ), $atts, 'phone_carousel'); + + // 开始输出缓冲 + ob_start(); + + // 包含轮播图模板 + include get_template_directory() . '/template-parts/block/block-phone-carousel.php'; + + // 获取缓冲内容并清理缓冲区 + $output = ob_get_clean(); + + return $output; +} +add_shortcode('phone_carousel', 'phone_carousel_shortcode'); + +/** + * 为手机轮播图简码添加自定义CSS样式 + */ +function phone_carousel_shortcode_styles() { + // 只在使用了简码的页面加载样式 + global $post; + if (is_a($post, 'WP_Post') && has_shortcode($post->post_content, 'phone_carousel')) { + // 样式已经包含在模板文件中,这里可以添加额外的样式覆盖 + echo ''; + } +} +add_action('wp_head', 'phone_carousel_shortcode_styles'); + +/** + * 修复 Elementor Google Fonts 的 Mixed Content 错误 + * 强制所有外部资源使用 HTTPS + */ +function fix_elementor_google_fonts_mixed_content() { + // 修复 Google Fonts 的 HTTP 链接 + add_filter('elementor/frontend/print_google_fonts', function($google_fonts_url) { + if (is_ssl() && strpos($google_fonts_url, 'http://') === 0) { + return str_replace('http://', 'https://', $google_fonts_url); + } + return $google_fonts_url; + }); + + // 修复所有样式表的 HTTP 链接 + add_filter('style_loader_src', function($src) { + if (is_ssl() && strpos($src, 'http://') === 0) { + return str_replace('http://', 'https://', $src); + } + return $src; + }); + + // 修复所有脚本的 HTTP 链接 + add_filter('script_loader_src', function($src) { + if (is_ssl() && strpos($src, 'http://') === 0) { + return str_replace('http://', 'https://', $src); + } + return $src; + }); +} +add_action('init', 'fix_elementor_google_fonts_mixed_content'); + +/** + * 禁用 Elementor 的 Google Fonts(可选方案) + * 如果上面的修复不起作用,可以取消注释下面的代码来完全禁用 Google Fonts + */ +/* +function disable_elementor_google_fonts() { + // 禁用 Elementor 的 Google Fonts + add_filter('elementor/frontend/print_google_fonts', '__return_false'); + + // 移除 Google Fonts 样式表 + add_action('wp_enqueue_scripts', function() { + wp_dequeue_style('google-fonts'); + wp_deregister_style('google-fonts'); + }, 20); +} +add_action('init', 'disable_elementor_google_fonts'); +*/ + +?> diff --git a/wp-content/themes/nenghui-energy-theme-cn/header.php b/wp-content/themes/nenghui-energy-theme-cn/header.php new file mode 100644 index 0000000..38ac216 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/header.php @@ -0,0 +1,83 @@ + + + + + + + + <?php bloginfo('name'); ?> + + + +> +
+
+
+ + + <?php bloginfo('name'); ?> + + logo + + +
+ + + +
+
+ 'primary-menu', + 'container' => false, + 'menu_class' => 'menu-items', + 'walker' => new Custom_Walker_Nav_Menu(), + 'fallback_cb' => function() { + echo '
  • 添加菜单
'; + } + )); + ?> +
+ + +
+ +
+
+
+
+ + +
+
+
+
+
+ + + + + + +
+ +
+
+
+
\ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/inc/assets-loader.php b/wp-content/themes/nenghui-energy-theme-cn/inc/assets-loader.php new file mode 100644 index 0000000..18b5494 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/inc/assets-loader.php @@ -0,0 +1,239 @@ + '/assets/css/reset.css', + 'font-awesome' => '/assets/fontawesome/css/all.min.css', + 'theme-header-css' => '/assets/css/header.css', + 'theme-index-css' => '/assets/css/index.css', + 'animate-css' => '/assets/css/animate.min.css', + 'custom-animations' => '/assets/css/animations.css', + 'scroll-animations-css' => '/assets/css/scroll-animations.css', + 'smooth-scroll-css' => '/assets/css/smooth-scroll.css', + 'search-css' => '/assets/css/search.css', + 'navigation-menu-css' => '/assets/css/navigation-menu.css', + 'footer-css' => '/assets/css/footer.css', + // 'video-banner-css' => '/assets/css/video-banner.css', // 移除全局加载,改为按需加载 + 'products-services-css' => '/assets/css/products-services.css', + 'features-css' => '/assets/css/features.css', + 'solution-css' => '/assets/css/solution.css', + 'block-news-css' => '/assets/css/block-news.css', + 'article-display-css' => '/assets/css/article-display.css', + 'single-sidebar-css' => '/assets/css/single-sidebar.css', + 'simple-carousel-css' => '/assets/css/simple-carousel.css', + 'about-timeline-css' => '/assets/css/about-timeline.css', + 'social-activities-css' => '/assets/css/social-activities.css', + 'business-process-css' => '/assets/css/business-process.css', + // 'henghui-core-css' => '/assets/css/henghui-core.css' // 移至页面单独加载 + ); + + foreach ($css_files as $handle => $file_path) { + // 在生产环境中跳过文件检查以提高性能 + if ((!defined('WP_DEBUG') || !WP_DEBUG) || file_exists($theme_path . $file_path)) { + wp_enqueue_style($handle, $theme_url . $file_path, array(), '1.0.0'); + } elseif (defined('WP_DEBUG') && WP_DEBUG) { + error_log('Missing CSS file: ' . $theme_path . $file_path); + } + } + + // 安全加载JavaScript文件 - 优化GSAP和Swiper兼容性 + $js_files = array( + // 基础库 - 最先加载 + 'smoothscroll' => array('file' => '/assets/js/smoothscroll.min.js', 'deps' => array(), 'ver' => '1.4.10'), + 'smooth-scroll-init' => array('file' => '/assets/js/smooth-scroll-init.js', 'deps' => array('smoothscroll'), 'ver' => '1.0.0'), + + // GSAP核心库 - 已启用,优化加载顺序 + 'gsap' => array('file' => '/assets/js/gsap.min.js', 'deps' => array('jquery'), 'ver' => '3.12.2'), + 'gsap-scrolltrigger' => array('file' => '/assets/js/ScrollTrigger.min.js', 'deps' => array('gsap'), 'ver' => '3.12.2'), + 'gsap-textplugin' => array('file' => '/assets/js/TextPlugin.min.js', 'deps' => array('gsap'), 'ver' => '3.12.2'), + + // GSAP与Elementor兼容性管理器 - 必须在所有GSAP相关脚本之后加载 + 'gsap-elementor-compatibility' => array('file' => '/assets/js/gsap-elementor-compatibility.js', 'deps' => array('gsap', 'gsap-scrolltrigger', 'gsap-textplugin'), 'ver' => '1.0.1'), + + // GSAP与Elementor初始化管理器 - 确保正确的初始化顺序 + 'gsap-elementor-init' => array('file' => '/assets/js/gsap-elementor-init.js', 'deps' => array('gsap-elementor-compatibility'), 'ver' => '1.0.0'), + + // 滚动动画系统 - 基于GSAP ScrollTrigger的动画控制器 + 'scroll-animations' => array('file' => '/assets/js/scroll-animations.js', 'deps' => array('gsap', 'gsap-scrolltrigger', 'gsap-elementor-init'), 'ver' => '1.0.0'), + + // Elementor调试工具 - 仅在调试模式下加载 + 'elementor-debug' => array('file' => '/assets/js/elementor-debug.js', 'deps' => array('gsap-elementor-compatibility'), 'ver' => '1.0.0'), + + // 组件脚本 - GSAP依赖配置,确保兼容性管理器优先加载 + // 'video-banner-js' => array('file' => '/assets/js/video-banner.js', 'deps' => array('jquery', 'gsap'), 'ver' => '1.0.0'), // 移除全局加载,改为按需加载 + 'products-services-js' => array('file' => '/assets/js/products-services.js', 'deps' => array('jquery', 'gsap-elementor-init'), 'ver' => '1.0.0'), + 'features-js' => array('file' => '/assets/js/features.js', 'deps' => array('jquery', 'gsap-elementor-init'), 'ver' => '1.0.0'), + 'solution-js' => array('file' => '/assets/js/solution.js', 'deps' => array('jquery', 'gsap-elementor-init'), 'ver' => '1.0.0'), + 'search-js' => array('file' => '/assets/js/search.js', 'deps' => array('jquery', 'gsap-elementor-init'), 'ver' => '1.0.0'), + + // 其他独立库 + 'tinytyper' => array('file' => '/assets/js/tinytyper.min.js', 'deps' => array('jquery'), 'ver' => '1.0.0'), + + // SimpleCarousel库 - 轻量级轮播组件 + 'simple-carousel-js' => array('file' => '/assets/js/simple-carousel.js', 'deps' => array('jquery'), 'ver' => '1.0.0'), + + // 区块组件脚本 + 'about-timeline-js' => array('file' => '/assets/js/about-timeline.js', 'deps' => array('jquery', 'simple-carousel-js'), 'ver' => '1.0.0'), + 'social-activities-js' => array('file' => '/assets/js/social-activities.js', 'deps' => array('jquery', 'simple-carousel-js'), 'ver' => '1.0.0'), + 'business-process-js' => array('file' => '/assets/js/business-process.js', 'deps' => array('jquery'), 'ver' => '1.0.0'), + // 'professional-fields-js' => array('file' => '/assets/js/professional-fields.js', 'deps' => array('jquery', 'simple-carousel-js'), 'ver' => '1.0.0'), // 移至页面单独加载 + // 'henghui-core-js' => array('file' => '/assets/js/henghui-core.js', 'deps' => array('jquery', 'gsap', 'gsap-scrolltrigger', 'simple-carousel-js'), 'ver' => '1.0.0'), // 移至页面单独加载 + + // 主题脚本 + 'dropdown-menu-js' => array('file' => '/assets/js/dropdown-menu.js', 'deps' => array('jquery'), 'ver' => '1.0.0'), + 'theme-index-js' => array('file' => '/assets/js/index.js', 'deps' => array('jquery', 'tinytyper'), 'ver' => '1.0.0') + ); + + foreach ($js_files as $handle => $config) { + // 调试工具只在调试模式下加载 + if ($handle === 'elementor-debug' && !isset($_GET['debug'])) { + continue; + } + + // 在生产环境中跳过文件检查以提高性能 + if ((!defined('WP_DEBUG') || !WP_DEBUG) || file_exists($theme_path . $config['file'])) { + wp_enqueue_script($handle, $theme_url . $config['file'], $config['deps'], $config['ver'], true); + } elseif (defined('WP_DEBUG') && WP_DEBUG) { + error_log('Missing JS file: ' . $theme_path . $config['file']); + } + } + + // 为主题JS文件传递一些有用的数据 + wp_localize_script('theme-index-js', 'themeData', array( + 'ajaxUrl' => admin_url('admin-ajax.php'), + 'nonce' => wp_create_nonce('theme_nonce'), + 'themeUrl' => $theme_url + )); +} +add_action('wp_enqueue_scripts', 'load_theme_assets'); + +/** + * 加载后台管理资源 + */ +function load_admin_assets($hook) { + $theme_url = get_template_directory_uri(); + + // 加载后台CSS + wp_enqueue_style('theme-admin-css', $theme_url . '/assets/css/admin.css', array(), '1.0.0'); +} +add_action('admin_enqueue_scripts', 'load_admin_assets'); + +/** + * 优化资源加载性能 + */ +function optimize_asset_loading() { + // 移除WordPress默认的jQuery,使用我们自己的版本(如果需要) + // wp_deregister_script('jquery'); + + // 添加资源预加载提示 + echo ''; + echo ''; +} +add_action('wp_head', 'optimize_asset_loading', 1); + +/** + * 添加资源版本控制 + */ +function add_asset_version($src, $handle) { + // 为本地资源添加文件修改时间作为版本号 + if (strpos($src, get_template_directory_uri()) !== false) { + // 开发模式下检查文件修改时间,生产模式直接使用主题版本号,减少IO操作 + if (defined('WP_DEBUG') && WP_DEBUG) { + $file_path = str_replace(get_template_directory_uri(), get_template_directory(), $src); + if (file_exists($file_path)) { + $version = filemtime($file_path); + $src = add_query_arg('v', $version, $src); + } + } else { + // 生产环境使用主题版本号 + $theme = wp_get_theme(); + $src = add_query_arg('v', $theme->get('Version'), $src); + } + } + return $src; +} +add_filter('style_loader_src', 'add_asset_version', 10, 2); +add_filter('script_loader_src', 'add_asset_version', 10, 2); + +/** + * 条件加载资源 + * 根据页面类型加载不同的资源 + */ +function conditional_asset_loading() { + $theme_url = get_template_directory_uri(); + + // 仅在首页加载特定的动画资源(文件存在时) + if (is_front_page() && ((!defined('WP_DEBUG') || !WP_DEBUG) || file_exists(get_template_directory() . '/assets/js/homepage-animations.js'))) { + wp_enqueue_script('homepage-animations', $theme_url . '/assets/js/homepage-animations.js', array('gsap'), '1.0.0', true); + } + + // 仅在单篇文章页面加载相关资源(文件存在时) + if (is_single() && ((!defined('WP_DEBUG') || !WP_DEBUG) || file_exists(get_template_directory() . '/assets/js/single-post.js'))) { + wp_enqueue_script('single-post-enhancements', $theme_url . '/assets/js/single-post.js', array('gsap'), '1.0.0', true); + } + + // 恒辉核心页面专用脚本 + if (is_page_template('page-henghui-core.php')) { + if ((!defined('WP_DEBUG') || !WP_DEBUG) || file_exists(get_template_directory() . '/assets/js/henghui-core.js')) { + wp_enqueue_script('henghui-core-js', $theme_url . '/assets/js/henghui-core.js', array('jquery'), '1.0.0', true); + } + } +} +add_action('wp_enqueue_scripts', 'conditional_asset_loading', 20); + +/** + * 内联关键CSS(可选) + */ +function inline_critical_css() { + $critical_css_file = get_template_directory() . '/assets/css/critical.css'; + if (file_exists($critical_css_file)) { + echo ''; + } +} +// add_action('wp_head', 'inline_critical_css', 2); + +/** + * 资源完整性检查 + */ +function check_asset_integrity() { + // 仅在调试模式下检查,避免生产环境产生不必要的IO开销 + if (!defined('WP_DEBUG') || !WP_DEBUG) { + return; + } + + $required_assets = array( + get_template_directory() . '/assets/js/gsap.min.js', + get_template_directory() . '/assets/js/index.js', + get_template_directory() . '/assets/css/index.css' + ); + + foreach ($required_assets as $asset) { + if (!file_exists($asset)) { + error_log('Missing required asset: ' . $asset); + } + } +} +add_action('init', 'check_asset_integrity'); +?> \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/inc/customizer.php b/wp-content/themes/nenghui-energy-theme-cn/inc/customizer.php new file mode 100644 index 0000000..3ef23ec --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/inc/customizer.php @@ -0,0 +1,849 @@ +add_panel('video_banner_panel', array( + 'title' => '视频横幅设置', + 'description' => '配置首页视频横幅的背景图片和视频链接', + 'priority' => 30, + )); + + // 添加视频横幅设置部分 + $wp_customize->add_section('video_banner_section', array( + 'title' => '视频设置', + 'panel' => 'video_banner_panel', + 'priority' => 10, + )); + + // 背景图片设置 + $wp_customize->add_setting('video_banner_bg_image', array( + 'default' => get_template_directory_uri() . '/assets/images/video.webp', + 'sanitize_callback' => 'esc_url_raw', + 'transport' => 'postMessage', + )); + + $wp_customize->add_control(new WP_Customize_Image_Control($wp_customize, 'video_banner_bg_image', array( + 'label' => '背景图片', + 'section' => 'video_banner_section', + 'settings' => 'video_banner_bg_image', + 'description' => '选择视频横幅的背景图片', + ))); + + // 容器高度设置 + $wp_customize->add_setting('video_banner_height', array( + 'default' => '600', + 'sanitize_callback' => 'absint', + 'transport' => 'postMessage', + )); + + $wp_customize->add_control('video_banner_height', array( + 'label' => '容器高度', + 'section' => 'video_banner_section', + 'type' => 'number', + 'description' => '视频横幅容器的高度(像素)', + 'input_attrs' => array( + 'min' => 300, + 'max' => 1000, + 'step' => 10, + ), + )); + + // 添加视频背景设置部分 + $wp_customize->add_section('video_banner_background_section', array( + 'title' => '视频背景设置', + 'panel' => 'video_banner_panel', + 'priority' => 20, + )); + + // 启用视频背景 + $wp_customize->add_setting('video_banner_enable_background', array( + 'default' => false, + 'sanitize_callback' => 'wp_validate_boolean', + 'transport' => 'postMessage', + )); + + $wp_customize->add_control('video_banner_enable_background', array( + 'label' => '启用视频背景', + 'section' => 'video_banner_background_section', + 'type' => 'checkbox', + 'description' => '启用自动播放的视频背景功能', + )); + + // 视频背景链接设置 + $wp_customize->add_setting('video_banner_background_url', array( + 'default' => '', + 'sanitize_callback' => 'esc_url_raw', + 'transport' => 'postMessage', + )); + + $wp_customize->add_control('video_banner_background_url', array( + 'label' => '视频背景链接', + 'section' => 'video_banner_background_section', + 'type' => 'url', + 'description' => '输入用作背景的视频文件URL地址(建议使用MP4格式)', + )); + + // 视频背景透明度 + $wp_customize->add_setting('video_banner_background_opacity', array( + 'default' => '100', + 'sanitize_callback' => 'absint', + 'transport' => 'postMessage', + )); + + $wp_customize->add_control('video_banner_background_opacity', array( + 'label' => '视频背景透明度', + 'section' => 'video_banner_background_section', + 'type' => 'range', + 'description' => '调整视频背景的透明度(0-100)', + 'input_attrs' => array( + 'min' => 0, + 'max' => 100, + 'step' => 5, + ), + )); + + // 启用懒加载 + $wp_customize->add_setting('video_banner_enable_lazy_load', array( + 'default' => true, + 'sanitize_callback' => 'wp_validate_boolean', + 'transport' => 'postMessage', + )); + + $wp_customize->add_control('video_banner_enable_lazy_load', array( + 'label' => '启用懒加载', + 'section' => 'video_banner_background_section', + 'type' => 'checkbox', + 'description' => '启用视频懒加载以提升页面加载性能', + )); + + // 添加内容设置部分 + $wp_customize->add_section('video_banner_content_section', array( + 'title' => '内容设置', + 'panel' => 'video_banner_panel', + 'priority' => 30, + )); + + // 横幅标题 + $wp_customize->add_setting('video_banner_content_title', array( + 'default' => '', + 'sanitize_callback' => 'sanitize_text_field', + 'transport' => 'postMessage', + )); + + $wp_customize->add_control('video_banner_content_title', array( + 'label' => '横幅标题', + 'section' => 'video_banner_content_section', + 'type' => 'text', + 'description' => '显示在视频横幅上的主标题', + )); + + // 横幅副标题 + $wp_customize->add_setting('video_banner_content_subtitle', array( + 'default' => '', + 'sanitize_callback' => 'sanitize_text_field', + 'transport' => 'postMessage', + )); + + $wp_customize->add_control('video_banner_content_subtitle', array( + 'label' => '横幅副标题', + 'section' => 'video_banner_content_section', + 'type' => 'text', + 'description' => '显示在视频横幅上的副标题', + )); + + // 横幅描述 + $wp_customize->add_setting('video_banner_content_description', array( + 'default' => '', + 'sanitize_callback' => 'sanitize_textarea_field', + 'transport' => 'postMessage', + )); + + $wp_customize->add_control('video_banner_content_description', array( + 'label' => '横幅描述', + 'section' => 'video_banner_content_section', + 'type' => 'textarea', + 'description' => '显示在视频横幅上的描述文字', + )); +} +add_action('customize_register', 'nenghui_video_banner_customizer'); + +// 添加归档页模板自定义选项 +function nenghui_archive_template_customizer($wp_customize) { + // 添加归档页模板面板 + $wp_customize->add_panel('archive_template_panel', array( + 'title' => '归档页模板设置', + 'description' => '配置归档页面的显示模板', + 'priority' => 40, + )); + + // 添加归档页模板设置部分 + $wp_customize->add_section('archive_template_section', array( + 'title' => '模板选择', + 'panel' => 'archive_template_panel', + 'priority' => 10, + )); + + // 获取所有已发布的页面 + $pages = get_pages(array( + 'post_status' => 'publish', + 'number' => 100, + )); + + $page_choices = array( + '' => '使用默认归档模板', + ); + + foreach ($pages as $page) { + $page_choices[$page->ID] = $page->post_title; + } + + // 归档页模板选择设置 + $wp_customize->add_setting('archive_template_page', array( + 'default' => '', + 'sanitize_callback' => 'absint', + 'transport' => 'refresh', + )); + + $wp_customize->add_control('archive_template_page', array( + 'label' => '选择归档页模板', + 'section' => 'archive_template_section', + 'type' => 'select', + 'choices' => $page_choices, + 'description' => '选择一个页面作为归档页面的模板,留空则使用默认归档模板', + )); + + // 是否显示归档标题 + $wp_customize->add_setting('archive_show_title', array( + 'default' => true, + 'sanitize_callback' => 'wp_validate_boolean', + 'transport' => 'refresh', + )); + + $wp_customize->add_control('archive_show_title', array( + 'label' => '显示归档标题', + 'section' => 'archive_template_section', + 'type' => 'checkbox', + 'description' => '是否在归档页面显示归档标题', + )); + + // 是否显示归档描述 + $wp_customize->add_setting('archive_show_description', array( + 'default' => true, + 'sanitize_callback' => 'wp_validate_boolean', + 'transport' => 'refresh', + )); + + $wp_customize->add_control('archive_show_description', array( + 'label' => '显示归档描述', + 'section' => 'archive_template_section', + 'type' => 'checkbox', + 'description' => '是否在归档页面显示归档描述', + )); +} +add_action('customize_register', 'nenghui_archive_template_customizer'); + + + +// 添加证书轮播自定义选项 +function nenghui_certificates_carousel_customizer($wp_customize) { + // 添加证书轮播面板 + $wp_customize->add_panel('certificates_carousel_panel', array( + 'title' => '证书轮播设置', + 'description' => '配置证书轮播图的显示选项', + 'priority' => 60, + )); + + // 添加基础设置部分 + $wp_customize->add_section('certificates_carousel_basic_section', array( + 'title' => '基础设置', + 'panel' => 'certificates_carousel_panel', + 'priority' => 10, + )); + + // 是否显示证书轮播 + $wp_customize->add_setting('certificates_carousel_show', array( + 'default' => true, + 'sanitize_callback' => 'wp_validate_boolean', + 'transport' => 'postMessage', + )); + + $wp_customize->add_control('certificates_carousel_show', array( + 'label' => '显示证书轮播', + 'section' => 'certificates_carousel_basic_section', + 'type' => 'checkbox', + 'description' => '是否在页面中显示证书轮播区块', + )); + + // 轮播标题设置 + $wp_customize->add_setting('certificates_carousel_title', array( + 'default' => '国际奖项证书', + 'sanitize_callback' => 'sanitize_text_field', + 'transport' => 'postMessage', + )); + + $wp_customize->add_control('certificates_carousel_title', array( + 'label' => '轮播标题', + 'section' => 'certificates_carousel_basic_section', + 'type' => 'text', + 'description' => '证书轮播区块的主标题', + )); + + // 轮播副标题设置 + $wp_customize->add_setting('certificates_carousel_subtitle', array( + 'default' => '我们获得的荣誉与认证', + 'sanitize_callback' => 'sanitize_text_field', + 'transport' => 'postMessage', + )); + + $wp_customize->add_control('certificates_carousel_subtitle', array( + 'label' => '轮播副标题', + 'section' => 'certificates_carousel_basic_section', + 'type' => 'text', + 'description' => '证书轮播区块的副标题', + )); + + // 自动轮播设置 + $wp_customize->add_setting('certificates_carousel_autoplay', array( + 'default' => true, + 'sanitize_callback' => 'wp_validate_boolean', + 'transport' => 'postMessage', + )); + + $wp_customize->add_control('certificates_carousel_autoplay', array( + 'label' => '自动轮播', + 'section' => 'certificates_carousel_basic_section', + 'type' => 'checkbox', + 'description' => '是否启用自动轮播功能', + )); + + // 轮播间隔设置 + $wp_customize->add_setting('certificates_carousel_delay', array( + 'default' => 5000, + 'sanitize_callback' => 'absint', + 'transport' => 'postMessage', + )); + + $wp_customize->add_control('certificates_carousel_delay', array( + 'label' => '轮播间隔(毫秒)', + 'section' => 'certificates_carousel_basic_section', + 'type' => 'number', + 'description' => '自动轮播的时间间隔', + 'input_attrs' => array( + 'min' => 2000, + 'max' => 10000, + 'step' => 500, + ), + )); + + // 添加图片设置部分 + $wp_customize->add_section('certificates_carousel_images_section', array( + 'title' => '图片设置', + 'panel' => 'certificates_carousel_panel', + 'priority' => 20, + )); + + // 图片来源选择 + $wp_customize->add_setting('certificates_carousel_source', array( + 'default' => 'folder', + 'sanitize_callback' => 'sanitize_text_field', + 'transport' => 'refresh', + )); + + $wp_customize->add_control('certificates_carousel_source', array( + 'label' => '图片来源', + 'section' => 'certificates_carousel_images_section', + 'type' => 'select', + 'choices' => array( + 'folder' => '使用文件夹中的图片', + 'gallery' => '使用自定义图片库', + ), + 'description' => '选择证书图片的来源方式', + )); + + // 自定义图片库设置(多图上传) + $wp_customize->add_setting('certificates_carousel_gallery', array( + 'default' => '', + 'sanitize_callback' => 'sanitize_text_field', + 'transport' => 'refresh', + )); + + // 使用自定义控件来支持多图上传 + $wp_customize->add_control(new WP_Customize_Media_Control($wp_customize, 'certificates_carousel_gallery', array( + 'label' => '自定义证书图片', + 'section' => 'certificates_carousel_images_section', + 'mime_type' => 'image', + 'description' => '上传自定义的证书图片(支持多选)', + ))); +} +add_action('customize_register', 'nenghui_certificates_carousel_customizer'); + +// 获取视频横幅配置的辅助函数 +function get_video_banner_bg_image() { + return get_theme_mod('video_banner_bg_image', get_template_directory_uri() . '/assets/images/video.webp'); +} + +function get_video_banner_height() { + return get_theme_mod('video_banner_height', 600); +} + +function get_video_banner_enable_background() { + return get_theme_mod('video_banner_enable_background', false); +} + +function get_video_banner_background_url() { + return get_theme_mod('video_banner_background_url', ''); +} + +function get_video_banner_background_opacity() { + return get_theme_mod('video_banner_background_opacity', 100); +} + +function get_video_banner_enable_lazy_load() { + return get_theme_mod('video_banner_enable_lazy_load', true); +} + +function get_video_banner_content_title() { + return get_theme_mod('video_banner_content_title', ''); +} + +function get_video_banner_content_subtitle() { + return get_theme_mod('video_banner_content_subtitle', ''); +} + +function get_video_banner_content_description() { + return get_theme_mod('video_banner_content_description', ''); +} + +// 获取归档页模板配置的辅助函数 +function get_archive_template_page() { + return get_theme_mod('archive_template_page', ''); +} + +function get_archive_show_title() { + return get_theme_mod('archive_show_title', true); +} + +function get_archive_show_description() { + return get_theme_mod('archive_show_description', true); +} + +// 检查是否使用自定义归档页模板 +function is_using_custom_archive_template() { + $template_page_id = get_archive_template_page(); + return !empty($template_page_id) && get_post_status($template_page_id) === 'publish'; +} + +// 获取自定义归档页模板内容 +function get_custom_archive_template_content() { + $template_page_id = get_archive_template_page(); + if (empty($template_page_id)) { + return ''; + } + + $page = get_post($template_page_id); + if (!$page || $page->post_status !== 'publish') { + return ''; + } + + return apply_filters('the_content', $page->post_content); +} + + + +// 获取证书轮播配置的辅助函数 +function get_certificates_carousel_show() { + return get_theme_mod('certificates_carousel_show', true); +} + +function get_certificates_carousel_title() { + return get_theme_mod('certificates_carousel_title', '国际奖项证书'); +} + +function get_certificates_carousel_subtitle() { + return get_theme_mod('certificates_carousel_subtitle', '我们获得的荣誉与认证'); +} + +function get_certificates_carousel_autoplay() { + return get_theme_mod('certificates_carousel_autoplay', true); +} + +function get_certificates_carousel_delay() { + return get_theme_mod('certificates_carousel_delay', 5000); +} + +function get_certificates_carousel_source() { + return get_theme_mod('certificates_carousel_source', 'folder'); +} + +function get_certificates_carousel_gallery() { + return get_theme_mod('certificates_carousel_gallery', ''); +} + +// 获取证书图片数据 +function get_certificates_carousel_images() { + $source = get_certificates_carousel_source(); + $images = []; + + if ($source === 'gallery') { + // 从自定义图片库获取 + $gallery_ids = get_certificates_carousel_gallery(); + if (!empty($gallery_ids)) { + $ids = explode(',', $gallery_ids); + foreach ($ids as $id) { + $id = intval(trim($id)); + if ($id > 0) { + $image_url = wp_get_attachment_image_url($id, 'large'); + $image_title = get_the_title($id); + $image_alt = get_post_meta($id, '_wp_attachment_image_alt', true); + + if ($image_url) { + $images[] = [ + 'url' => $image_url, + 'title' => $image_title ?: '证书', + 'alt' => $image_alt ?: '证书图片', + 'description' => get_post_field('post_content', $id) ?: '公司获得的重要认证证书' + ]; + } + } + } + } + } else { + // 从文件夹获取图片 + $certificates_dir = get_template_directory() . '/assets/images/certificates/'; + $certificates_url = get_template_directory_uri() . '/assets/images/certificates/'; + + if (is_dir($certificates_dir)) { + $files = scandir($certificates_dir); + $image_extensions = ['jpg', 'jpeg', 'png', 'gif', 'webp']; + + foreach ($files as $file) { + if ($file === '.' || $file === '..') continue; + + $file_extension = strtolower(pathinfo($file, PATHINFO_EXTENSION)); + if (in_array($file_extension, $image_extensions)) { + $file_name = pathinfo($file, PATHINFO_FILENAME); + $images[] = [ + 'url' => $certificates_url . $file, + 'title' => str_replace(['Certificate-', '-', '_'], ['证书 ', ' ', ' '], $file_name), + 'alt' => '证书图片 - ' . $file_name, + 'description' => '公司获得的重要认证证书' + ]; + } + } + + // 按文件名排序 + usort($images, function($a, $b) { + return strnatcmp($a['url'], $b['url']); + }); + } + } + + return $images; +} + +// 添加业务流程设计区块自定义选项 +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_video_banner_customizer'); +add_action('customize_register', 'nenghui_certificates_carousel_customizer'); +add_action('customize_register', 'nenghui_business_process_customizer'); + + +?> \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/inc/html-compression-integration.php b/wp-content/themes/nenghui-energy-theme-cn/inc/html-compression-integration.php new file mode 100644 index 0000000..8a0b022 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/inc/html-compression-integration.php @@ -0,0 +1,762 @@ +compressor = new NenghuiHTMLCompressor(); + + // 设置压缩选项 + $this->setupCompressionOptions(); + + // 初始化WordPress钩子 + $this->initHooks(); + } + + /** + * 设置压缩选项 + */ + private function setupCompressionOptions() { + $options = array( + 'remove_comments' => get_theme_mod('nenghui_compression_remove_comments', true), + 'remove_whitespace' => get_theme_mod('nenghui_compression_remove_whitespace', true), + 'compress_css' => get_theme_mod('nenghui_compression_compress_css', true), + 'compress_js' => get_theme_mod('nenghui_compression_compress_js', true), + 'preserve_line_breaks' => get_theme_mod('nenghui_compression_preserve_line_breaks', false), + 'preserve_pre_content' => true, + 'preserve_textarea_content' => true, + 'preserve_script_content' => true, + 'preserve_style_content' => true + ); + + $this->compressor->setOptions($options); + + // 设置是否启用压缩 + $this->compression_enabled = get_theme_mod('nenghui_compression_enabled', true); + + // 设置排除的页面 + $excluded_pages = get_theme_mod('nenghui_compression_excluded_pages', ''); + if (!empty($excluded_pages)) { + $this->excluded_pages = array_map('trim', explode(',', $excluded_pages)); + } + } + + /** + * 初始化WordPress钩子 + */ + private function initHooks() { + // 只在前端启用压缩 + if (!is_admin() && $this->compression_enabled) { + add_action('template_redirect', array($this, 'startOutputBuffering'), 1); + add_action('wp_footer', array($this, 'addCompressionStats'), 999); + } + + // 添加自定义器选项 + add_action('customize_register', array($this, 'addCustomizerOptions')); + + // 添加管理员菜单 + add_action('admin_menu', array($this, 'addAdminMenu')); + + // 添加AJAX处理 + add_action('wp_ajax_nenghui_test_compression', array($this, 'testCompression')); + add_action('wp_ajax_nenghui_clear_compression_cache', array($this, 'clearCompressionCache')); + } + + /** + * 开始输出缓冲 + */ + public function startOutputBuffering() { + // 检查是否应该排除当前页面 + if ($this->shouldExcludePage()) { + return; + } + + // 检查是否为AJAX请求 + if (defined('DOING_AJAX') && DOING_AJAX) { + return; + } + + // 检查是否为REST API请求 + if (defined('REST_REQUEST') && REST_REQUEST) { + return; + } + + // 开始输出缓冲 + ob_start(array($this, 'compressOutput')); + } + + /** + * 压缩输出内容 + * + * @param string $buffer + * @return string + */ + public function compressOutput($buffer) { + // 检查缓冲区是否为空 + if (empty($buffer)) { + return $buffer; + } + + // 检查是否为HTML内容 + if (!$this->isHTMLContent($buffer)) { + return $buffer; + } + + // 记录原始大小 + $original_size = strlen($buffer); + + try { + // 执行压缩 + $compressed_buffer = $this->compressor->compress($buffer); + + // 记录压缩统计 + $this->compression_stats = $this->compressor->getCompressionStats($buffer, $compressed_buffer); + + // 添加压缩信息注释(仅在开发模式下) + if (defined('WP_DEBUG') && WP_DEBUG) { + $compressed_buffer = $this->addCompressionComment($compressed_buffer); + } + + return $compressed_buffer; + + } catch (Exception $e) { + // 压缩失败时返回原始内容 + error_log('Nenghui HTML Compression Error: ' . $e->getMessage()); + return $buffer; + } + } + + /** + * 检查是否应该排除当前页面 + * + * @return bool + */ + private function shouldExcludePage() { + global $wp; + + // 获取当前页面URL + $current_url = home_url($wp->request); + + // 检查排除列表 + foreach ($this->excluded_pages as $excluded_page) { + if (strpos($current_url, $excluded_page) !== false) { + return true; + } + } + + // 检查特殊页面 + if (is_feed() || is_robots() || is_trackback()) { + return true; + } + + // 检查XML内容 + if (strpos($_SERVER['REQUEST_URI'], '.xml') !== false) { + return true; + } + + return false; + } + + /** + * 检查是否为HTML内容 + * + * @param string $buffer + * @return bool + */ + private function isHTMLContent($buffer) { + // 检查内容类型 + $headers = headers_list(); + foreach ($headers as $header) { + if (stripos($header, 'content-type') !== false) { + if (stripos($header, 'text/html') === false) { + return false; + } + break; + } + } + + // 检查是否包含HTML标签 + return preg_match('/compression_stats)) { + $comment = sprintf( + "\n", + number_format($this->compression_stats['original_size']), + number_format($this->compression_stats['compressed_size']), + number_format($this->compression_stats['saved_bytes']), + $this->compression_stats['compression_ratio'] + ); + + // 在标签前插入注释 + $buffer = str_replace('', $comment . "\n", $buffer); + } + + return $buffer; + } + + /** + * 添加压缩统计信息到页面底部 + */ + public function addCompressionStats() { + if (defined('WP_DEBUG') && WP_DEBUG && !empty($this->compression_stats)) { + echo ''; + } + } + + /** + * 添加自定义器选项 + * + * @param WP_Customize_Manager $wp_customize + */ + public function addCustomizerOptions($wp_customize) { + // 添加压缩设置面板 + $wp_customize->add_panel('nenghui_performance_panel', array( + 'title' => __('性能优化', 'nenghui-energy-theme'), + 'description' => __('网站性能优化相关设置', 'nenghui-energy-theme'), + 'priority' => 160, + )); + + // 添加HTML压缩设置部分 + $wp_customize->add_section('nenghui_compression_settings', array( + 'title' => __('HTML压缩设置', 'nenghui-energy-theme'), + 'description' => __('通过压缩HTML代码来提升网站加载速度', 'nenghui-energy-theme'), + 'panel' => 'nenghui_performance_panel', + 'priority' => 10, + )); + + // 启用压缩 - 主开关 + $wp_customize->add_setting('nenghui_compression_enabled', array( + 'default' => true, + 'sanitize_callback' => 'wp_validate_boolean', + 'transport' => 'refresh', + )); + + $wp_customize->add_control('nenghui_compression_enabled', array( + 'label' => __('启用HTML压缩', 'nenghui-energy-theme'), + 'description' => __('开启后将自动压缩HTML输出,显著减少页面大小并提升加载速度', 'nenghui-energy-theme'), + 'section' => 'nenghui_compression_settings', + 'type' => 'checkbox', + 'priority' => 10, + )); + + // 添加分隔符 + $wp_customize->add_setting('nenghui_compression_separator_1', array( + 'sanitize_callback' => 'wp_kses_post', + )); + + $wp_customize->add_control(new WP_Customize_Control($wp_customize, 'nenghui_compression_separator_1', array( + 'type' => 'hidden', + 'section' => 'nenghui_compression_settings', + 'priority' => 15, + ))); + + // 移除注释 + $wp_customize->add_setting('nenghui_compression_remove_comments', array( + 'default' => true, + 'sanitize_callback' => 'wp_validate_boolean', + )); + + $wp_customize->add_control('nenghui_compression_remove_comments', array( + 'label' => __('移除HTML注释', 'nenghui-energy-theme'), + 'description' => __('移除HTML中的注释内容。注意:某些插件可能依赖HTML注释', 'nenghui-energy-theme'), + 'section' => 'nenghui_compression_settings', + 'type' => 'checkbox', + 'priority' => 20, + 'active_callback' => function() { + return get_theme_mod('nenghui_compression_enabled', true); + }, + )); + + // 移除空白字符 + $wp_customize->add_setting('nenghui_compression_remove_whitespace', array( + 'default' => true, + 'sanitize_callback' => 'wp_validate_boolean', + )); + + $wp_customize->add_control('nenghui_compression_remove_whitespace', array( + 'label' => __('压缩空白字符', 'nenghui-energy-theme'), + 'description' => __('移除多余的空格、制表符和换行符,保留必要的空白字符', 'nenghui-energy-theme'), + 'section' => 'nenghui_compression_settings', + 'type' => 'checkbox', + 'priority' => 30, + 'active_callback' => function() { + return get_theme_mod('nenghui_compression_enabled', true); + }, + )); + + // 压缩CSS + $wp_customize->add_setting('nenghui_compression_compress_css', array( + 'default' => true, + 'sanitize_callback' => 'wp_validate_boolean', + )); + + $wp_customize->add_control('nenghui_compression_compress_css', array( + 'label' => __('压缩内联CSS', 'nenghui-energy-theme'), + 'description' => __('压缩<style>标签内的CSS代码,移除注释和多余空白', 'nenghui-energy-theme'), + 'section' => 'nenghui_compression_settings', + 'type' => 'checkbox', + 'priority' => 40, + 'active_callback' => function() { + return get_theme_mod('nenghui_compression_enabled', true); + }, + )); + + // 压缩JavaScript + $wp_customize->add_setting('nenghui_compression_compress_js', array( + 'default' => true, + 'sanitize_callback' => 'wp_validate_boolean', + )); + + $wp_customize->add_control('nenghui_compression_compress_js', array( + 'label' => __('压缩内联JavaScript', 'nenghui-energy-theme'), + 'description' => __('压缩<script>标签内的JavaScript代码,移除注释和多余空白', 'nenghui-energy-theme'), + 'section' => 'nenghui_compression_settings', + 'type' => 'checkbox', + 'priority' => 50, + 'active_callback' => function() { + return get_theme_mod('nenghui_compression_enabled', true); + }, + )); + + // 添加分隔符 + $wp_customize->add_setting('nenghui_compression_separator_2', array( + 'sanitize_callback' => 'wp_kses_post', + )); + + $wp_customize->add_control(new WP_Customize_Control($wp_customize, 'nenghui_compression_separator_2', array( + 'type' => 'hidden', + 'section' => 'nenghui_compression_settings', + 'priority' => 55, + ))); + + // 排除页面 + $wp_customize->add_setting('nenghui_compression_excluded_pages', array( + 'default' => 'wp-admin,wp-login,xmlrpc', + 'sanitize_callback' => 'sanitize_textarea_field', + )); + + $wp_customize->add_control('nenghui_compression_excluded_pages', array( + 'label' => __('排除的页面', 'nenghui-energy-theme'), + 'description' => __('输入不需要压缩的页面URL片段,用逗号分隔。例如:wp-admin, wp-login, xmlrpc', 'nenghui-energy-theme'), + 'section' => 'nenghui_compression_settings', + 'type' => 'textarea', + 'priority' => 60, + 'active_callback' => function() { + return get_theme_mod('nenghui_compression_enabled', true); + }, + )); + + // 添加性能提示部分 + $wp_customize->add_section('nenghui_performance_tips', array( + 'title' => __('性能优化建议', 'nenghui-energy-theme'), + 'description' => __('其他提升网站性能的建议和技巧', 'nenghui-energy-theme'), + 'panel' => 'nenghui_performance_panel', + 'priority' => 20, + )); + + // 性能提示内容 + $wp_customize->add_setting('nenghui_performance_tips_content', array( + 'default' => '', + 'sanitize_callback' => 'wp_kses_post', + )); + + $wp_customize->add_control(new WP_Customize_Control($wp_customize, 'nenghui_performance_tips_content', array( + 'label' => __('性能优化提示', 'nenghui-energy-theme'), + 'description' => __(' +
+

💡 性能优化建议:

+
    +
  • 启用HTML压缩可减少20-40%的页面大小
  • +
  • 建议同时使用缓存插件以获得最佳效果
  • +
  • 定期检查压缩统计以监控性能提升
  • +
  • 在生产环境中测试所有功能正常工作
  • +
+

注意:某些插件可能与HTML压缩冲突,如遇问题请在排除页面中添加相关URL。

+
+ ', 'nenghui-energy-theme'), + 'section' => 'nenghui_performance_tips', + 'type' => 'hidden', + ))); + } + + /** + * 添加管理员菜单 + */ + public function addAdminMenu() { + add_theme_page( + __('HTML压缩设置', 'nenghui-energy-theme'), + __('HTML压缩', 'nenghui-energy-theme'), + 'manage_options', + 'nenghui-html-compression', + array($this, 'adminPage') + ); + } + + /** + * 管理员页面 + */ + public function adminPage() { + // 处理表单提交 + if (isset($_POST['submit']) && wp_verify_nonce($_POST['compression_nonce'], 'save_compression_settings')) { + $this->saveSettings(); + echo '

' . __('设置已保存!', 'nenghui-energy-theme') . '

'; + } + + // 获取当前设置 + $settings = $this->getCurrentSettings(); + ?> +
+

+ +
+ + +
+

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

+
+ +

+
+ +

+
+ +

+
+ +

+
+ +

+
+ + +
+
+ +
+

+
+ displayCompressionStatus(); ?> +
+
+ +
+

+

+ +
+
+ +
+

+

+
+ displayCompressionStats(); ?> +
+
+ +
+

+

+ +
+
+ + + isset($_POST['compression_enabled']) ? true : false, + 'nenghui_compression_remove_comments' => isset($_POST['remove_comments']) ? true : false, + 'nenghui_compression_remove_whitespace' => isset($_POST['remove_whitespace']) ? true : false, + 'nenghui_compression_compress_css' => isset($_POST['compress_css']) ? true : false, + 'nenghui_compression_compress_js' => isset($_POST['compress_js']) ? true : false, + 'nenghui_compression_excluded_pages' => sanitize_textarea_field($_POST['excluded_pages']) + ); + + foreach ($settings as $key => $value) { + set_theme_mod($key, $value); + } + + // 重新设置压缩选项 + $this->setupCompressionOptions(); + } + + /** + * 获取当前设置 + */ + private function getCurrentSettings() { + return array( + 'compression_enabled' => get_theme_mod('nenghui_compression_enabled', true), + 'remove_comments' => get_theme_mod('nenghui_compression_remove_comments', true), + 'remove_whitespace' => get_theme_mod('nenghui_compression_remove_whitespace', true), + 'compress_css' => get_theme_mod('nenghui_compression_compress_css', true), + 'compress_js' => get_theme_mod('nenghui_compression_compress_js', true), + 'excluded_pages' => get_theme_mod('nenghui_compression_excluded_pages', 'wp-admin,wp-login,xmlrpc') + ); + } + + /** + * 显示压缩状态 + */ + private function displayCompressionStatus() { + $settings = $this->getCurrentSettings(); + $status_class = $settings['compression_enabled'] ? 'notice-success' : 'notice-warning'; + $status_text = $settings['compression_enabled'] ? __('已启用', 'nenghui-energy-theme') : __('已禁用', 'nenghui-energy-theme'); + + echo '
'; + echo '

' . __('压缩状态:', 'nenghui-energy-theme') . '' . $status_text . '

'; + echo '
'; + + if ($settings['compression_enabled']) { + echo '
    '; + echo '
  • ' . ($settings['remove_comments'] ? '✅' : '❌') . ' ' . __('移除HTML注释', 'nenghui-energy-theme') . '
  • '; + echo '
  • ' . ($settings['remove_whitespace'] ? '✅' : '❌') . ' ' . __('压缩空白字符', 'nenghui-energy-theme') . '
  • '; + echo '
  • ' . ($settings['compress_css'] ? '✅' : '❌') . ' ' . __('压缩内联CSS', 'nenghui-energy-theme') . '
  • '; + echo '
  • ' . ($settings['compress_js'] ? '✅' : '❌') . ' ' . __('压缩内联JavaScript', 'nenghui-energy-theme') . '
  • '; + echo '
'; + + if (!empty($settings['excluded_pages'])) { + echo '

' . __('排除的页面:', 'nenghui-energy-theme') . '

'; + $excluded = array_map('trim', explode(',', $settings['excluded_pages'])); + echo '
    '; + foreach ($excluded as $page) { + if (!empty($page)) { + echo '
  • ' . esc_html($page) . '
  • '; + } + } + echo '
'; + } + } + } + + /** + * 显示压缩统计信息 + */ + private function displayCompressionStats() { + $stats = get_option('nenghui_compression_stats', array()); + + if (empty($stats)) { + echo '

' . __('暂无压缩统计数据', 'nenghui-energy-theme') . '

'; + return; + } + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + + foreach (array_slice($stats, -10) as $stat) { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + + echo '
' . __('时间', 'nenghui-energy-theme') . '' . __('原始大小', 'nenghui-energy-theme') . '' . __('压缩后大小', 'nenghui-energy-theme') . '' . __('节省空间', 'nenghui-energy-theme') . '' . __('压缩率', 'nenghui-energy-theme') . '
' . date('Y-m-d H:i:s', $stat['timestamp']) . '' . size_format($stat['original_size']) . '' . size_format($stat['compressed_size']) . '' . size_format($stat['saved_bytes']) . '' . $stat['compression_ratio'] . '%
'; + } + + /** + * AJAX测试压缩 + */ + public function testCompression() { + check_ajax_referer('nenghui_compression_test', 'nonce'); + + $test_html = ' + + + Test Page + + + + +
+

Test Page

+

This is a test paragraph with some content.

+ +
+ +'; + + $compressed = $this->compressor->compress($test_html); + $stats = $this->compressor->getCompressionStats($test_html, $compressed); + + $result = '

' . __('压缩测试成功!', 'nenghui-energy-theme') . '

'; + $result .= '

' . sprintf(__('原始大小: %s 字节', 'nenghui-energy-theme'), number_format($stats['original_size'])) . '

'; + $result .= '

' . sprintf(__('压缩后大小: %s 字节', 'nenghui-energy-theme'), number_format($stats['compressed_size'])) . '

'; + $result .= '

' . sprintf(__('节省空间: %s 字节 (%.2f%%)', 'nenghui-energy-theme'), number_format($stats['saved_bytes']), $stats['compression_ratio']) . '

'; + $result .= '
'; + + wp_send_json_success($result); + } + + /** + * AJAX清除缓存 + */ + public function clearCompressionCache() { + check_ajax_referer('nenghui_compression_clear', 'nonce'); + + // 清除相关缓存 + delete_option('nenghui_compression_stats'); + + // 清除对象缓存 + wp_cache_flush(); + + wp_send_json_success(__('缓存已清除', 'nenghui-energy-theme')); + } +} + +// 初始化HTML压缩集成 +new NenghuiHTMLCompressionIntegration(); \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/inc/html-compressor.php b/wp-content/themes/nenghui-energy-theme-cn/inc/html-compressor.php new file mode 100644 index 0000000..4f8b49a --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/inc/html-compressor.php @@ -0,0 +1,361 @@ + true, + 'remove_whitespace' => true, + 'compress_css' => true, + 'compress_js' => true, + 'preserve_line_breaks' => false, + 'preserve_pre_content' => true, + 'preserve_textarea_content' => true, + 'preserve_script_content' => true, + 'preserve_style_content' => true + ); + + /** + * 需要保护的标签内容 + */ + private $preserve_tags = array('pre', 'textarea', 'script', 'style'); + + /** + * 保护的内容存储 + */ + private $preserved_content = array(); + + /** + * 构造函数 + */ + public function __construct($options = array()) { + $this->options = array_merge($this->options, $options); + } + + /** + * 主要压缩方法 + * + * @param string $html HTML内容 + * @return string 压缩后的HTML + */ + public function compress($html) { + if (empty($html)) { + return $html; + } + + // 重置保护内容 + $this->preserved_content = array(); + + // 1. 保护需要保留原始格式的内容 + $html = $this->preserveContent($html); + + // 2. 移除HTML注释 + if ($this->options['remove_comments']) { + $html = $this->removeComments($html); + } + + // 3. 压缩空白字符 + if ($this->options['remove_whitespace']) { + $html = $this->compressWhitespace($html); + } + + // 4. 恢复保护的内容 + $html = $this->restoreContent($html); + + // 5. 压缩内联CSS和JS + if ($this->options['compress_css'] || $this->options['compress_js']) { + $html = $this->compressInlineCode($html); + } + + return trim($html); + } + + /** + * 保护需要保留原始格式的内容 + * + * @param string $html + * @return string + */ + private function preserveContent($html) { + $index = 0; + + // 保护
 标签内容
+        if ($this->options['preserve_pre_content']) {
+            $html = preg_replace_callback(
+                '/]*>.*?<\/pre>/is',
+                function($matches) use (&$index) {
+                    $placeholder = "";
+                    $this->preserved_content[$placeholder] = $matches[0];
+                    $index++;
+                    return $placeholder;
+                },
+                $html
+            );
+        }
+        
+        // 保护 
+    

维护页面显示的详细信息

+ + +

设置维护模式自动开启的时间(留空表示立即开启)

+ + +

设置维护模式自动关闭的时间(留空表示手动关闭)

+ '中国标准时间 (UTC+8)', + 'Asia/Hong_Kong' => '香港时间 (UTC+8)', + 'Asia/Taipei' => '台北时间 (UTC+8)', + 'Asia/Tokyo' => '日本标准时间 (UTC+9)', + 'Asia/Seoul' => '韩国标准时间 (UTC+9)', + 'America/New_York' => '美国东部时间 (UTC-5/-4)', + 'America/Los_Angeles' => '美国西部时间 (UTC-8/-7)', + 'Europe/London' => '英国时间 (UTC+0/+1)', + 'Europe/Paris' => '欧洲中部时间 (UTC+1/+2)', + 'UTC' => '协调世界时 (UTC+0)' + ); + ?> + +

选择维护时间所使用的时区

+ " + message + "

"); + } + + // 显示警告信息 + function showTimeWarning(fieldId, message) { + $("#" + fieldId).after("

" + message + "

"); + } + + // 显示当前时区时间 + function updateCurrentTime() { + var timezone = $("#maintenance_timezone").val(); + var now = new Date(); + var timeString = now.toLocaleString("zh-CN", { + timeZone: timezone.replace("_", "/"), + year: "numeric", + month: "2-digit", + day: "2-digit", + hour: "2-digit", + minute: "2-digit", + second: "2-digit" + }); + + $("#current-time-display").text("当前时间(" + timezone + "):" + timeString); + } + + // 绑定事件 + $("#maintenance_start_time, #maintenance_end_time").on("change", validateMaintenanceTimes); + $("#maintenance_timezone").on("change", function() { + validateMaintenanceTimes(); + updateCurrentTime(); + }); + + // 表单提交验证 + $("form").on("submit", function(e) { + if (!validateMaintenanceTimes()) { + e.preventDefault(); + alert("请修正维护时间设置中的错误"); + return false; + } + }); + + // 添加当前时间显示 + if ($("#maintenance_timezone").length) { + $("#maintenance_timezone").after("

"); + updateCurrentTime(); + + // 每秒更新时间显示 + setInterval(updateCurrentTime, 1000); + } + }); + '); +} +add_action('admin_enqueue_scripts', 'theme_admin_scripts'); + +/** + * 验证维护模式时间设置 + */ +function validate_maintenance_times($input) { + $start_time = isset($input['maintenance_start_time']) ? $input['maintenance_start_time'] : ''; + $end_time = isset($input['maintenance_end_time']) ? $input['maintenance_end_time'] : ''; + $timezone = isset($input['maintenance_timezone']) ? $input['maintenance_timezone'] : 'Asia/Shanghai'; + + // 如果设置了时间,进行验证 + if (!empty($start_time) && !empty($end_time)) { + try { + $tz = new DateTimeZone($timezone); + $start_datetime = new DateTime($start_time, $tz); + $end_datetime = new DateTime($end_time, $tz); + + // 检查结束时间是否晚于开始时间 + if ($end_datetime <= $start_datetime) { + add_settings_error( + 'themes_demo', + 'maintenance_time_error', + '维护结束时间必须晚于开始时间', + 'error' + ); + } + + // 检查时间格式是否正确 + if ($start_datetime->format('Y-m-d\TH:i') !== $start_time) { + add_settings_error( + 'themes_demo', + 'maintenance_start_format_error', + '维护开始时间格式不正确', + 'error' + ); + } + + if ($end_datetime->format('Y-m-d\TH:i') !== $end_time) { + add_settings_error( + 'themes_demo', + 'maintenance_end_format_error', + '维护结束时间格式不正确', + 'error' + ); + } + + } catch (Exception $e) { + add_settings_error( + 'themes_demo', + 'maintenance_timezone_error', + '时区设置或时间格式错误:' . $e->getMessage(), + 'error' + ); + } + } + + return $input; +} + +// 添加设置验证钩子 +add_filter('pre_update_option_themes_demo', 'validate_maintenance_times'); + + + +function theme_settings_page() { +?> +
+ +
+
+

主题设置

+ + +
+ 常规设置 + 维护状态 +
+ +
+
+
+ +
+
+ +
+

维护模式状态监控

+ "; + echo "

当前状态

"; + echo "

手动维护模式: " . ($maintenance_mode === '1' ? '已启用' : '已禁用') . "

"; + echo "

定时维护模式: " . ($is_scheduled ? '处于维护期间' : '不在维护期间') . "

"; + + if (!empty($start_time) || !empty($end_time)) { + echo "

定时设置

"; + if (!empty($start_time)) { + echo "

开始时间: " . esc_html($start_time) . "

"; + } + if (!empty($end_time)) { + echo "

结束时间: " . esc_html($end_time) . "

"; + } + echo "

时区: " . esc_html($timezone) . "

"; + + // 显示当前时区时间 + try { + $tz = new DateTimeZone($timezone); + $current_time = new DateTime('now', $tz); + echo "

当前时间: " . $current_time->format('Y-m-d H:i:s') . "

"; + } catch (Exception $e) { + echo "

时区错误: " . esc_html($e->getMessage()) . "

"; + } + } + + // 显示定时任务状态 + echo "

定时任务状态

"; + $start_scheduled = wp_next_scheduled('maintenance_mode_start'); + $end_scheduled = wp_next_scheduled('maintenance_mode_end'); + + if ($start_scheduled) { + echo "

开始维护任务: " . date('Y-m-d H:i:s', $start_scheduled) . "

"; + } else { + echo "

开始维护任务: 未安排

"; + } + + if ($end_scheduled) { + echo "

结束维护任务: " . date('Y-m-d H:i:s', $end_scheduled) . "

"; + } else { + echo "

结束维护任务: 未安排

"; + } + + echo "
"; + + // 添加快速操作按钮 + echo "
"; + echo "

快速操作

"; + echo "

打开测试页面

"; + echo "

"; + echo "
"; + ?> +
+
+
+ + + + + \ No newline at end of file diff --git a/wp-content/themes/nenghui-energy-theme-cn/wp-cron-trigger.php b/wp-content/themes/nenghui-energy-theme-cn/wp-cron-trigger.php new file mode 100644 index 0000000..d0262b5 --- /dev/null +++ b/wp-content/themes/nenghui-energy-theme-cn/wp-cron-trigger.php @@ -0,0 +1,20 @@ + \ No newline at end of file diff --git a/wp-content/themes/twentytwentyfive/assets/css/editor-style.css b/wp-content/themes/twentytwentyfive/assets/css/editor-style.css new file mode 100644 index 0000000..13b91ba --- /dev/null +++ b/wp-content/themes/twentytwentyfive/assets/css/editor-style.css @@ -0,0 +1,8 @@ +/* + * Link styles + * https://github.com/WordPress/gutenberg/issues/42319 + */ +a { + text-decoration-thickness: 1px !important; + text-underline-offset: .1em; +} diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/beiruti/Beiruti-VariableFont_wght.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/beiruti/Beiruti-VariableFont_wght.woff2 new file mode 100644 index 0000000..ddfcab2 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/beiruti/Beiruti-VariableFont_wght.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/fira-code/FiraCode-VariableFont_wght.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/fira-code/FiraCode-VariableFont_wght.woff2 new file mode 100644 index 0000000..f40961f Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/fira-code/FiraCode-VariableFont_wght.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-Black.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-Black.woff2 new file mode 100644 index 0000000..bac3ec2 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-Black.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-BlackItalic.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-BlackItalic.woff2 new file mode 100644 index 0000000..a550f65 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-BlackItalic.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-Bold.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-Bold.woff2 new file mode 100644 index 0000000..d67367c Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-Bold.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-BoldItalic.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-BoldItalic.woff2 new file mode 100644 index 0000000..0d4ee87 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-BoldItalic.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-ExtraBold.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-ExtraBold.woff2 new file mode 100644 index 0000000..5ba058c Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-ExtraBold.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-ExtraBoldItalic.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-ExtraBoldItalic.woff2 new file mode 100644 index 0000000..5e40008 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-ExtraBoldItalic.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-ExtraLight.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-ExtraLight.woff2 new file mode 100644 index 0000000..a06977d Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-ExtraLight.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-ExtraLightItalic.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-ExtraLightItalic.woff2 new file mode 100644 index 0000000..ca7c7d7 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-ExtraLightItalic.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-Italic.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-Italic.woff2 new file mode 100644 index 0000000..212cd3b Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-Italic.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-Light.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-Light.woff2 new file mode 100644 index 0000000..027c4e4 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-Light.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-LightItalic.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-LightItalic.woff2 new file mode 100644 index 0000000..e16e676 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-LightItalic.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-Medium.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-Medium.woff2 new file mode 100644 index 0000000..00b0ea7 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-Medium.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-MediumItalic.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-MediumItalic.woff2 new file mode 100644 index 0000000..47a5428 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-MediumItalic.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-Regular.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-Regular.woff2 new file mode 100644 index 0000000..d224f4f Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-Regular.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-SemiBold.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-SemiBold.woff2 new file mode 100644 index 0000000..ff815c0 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-SemiBold.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-SemiBoldItalic.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-SemiBoldItalic.woff2 new file mode 100644 index 0000000..897a0f6 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-SemiBoldItalic.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-Thin.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-Thin.woff2 new file mode 100644 index 0000000..444b0c7 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-Thin.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-ThinItalic.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-ThinItalic.woff2 new file mode 100644 index 0000000..85da45d Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/fira-sans/FiraSans-ThinItalic.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-Black.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-Black.woff2 new file mode 100644 index 0000000..2fefc2e Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-Black.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-BlackItalic.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-BlackItalic.woff2 new file mode 100644 index 0000000..aa9ab25 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-BlackItalic.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-Bold.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-Bold.woff2 new file mode 100644 index 0000000..218a007 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-Bold.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-BoldItalic.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-BoldItalic.woff2 new file mode 100644 index 0000000..e32f031 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-BoldItalic.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-ExtraBold.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-ExtraBold.woff2 new file mode 100644 index 0000000..0d3efcd Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-ExtraBold.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-ExtraBoldItalic.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-ExtraBoldItalic.woff2 new file mode 100644 index 0000000..4665bfd Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-ExtraBoldItalic.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-ExtraLight.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-ExtraLight.woff2 new file mode 100644 index 0000000..bc7f2ae Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-ExtraLight.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-ExtraLightItalic.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-ExtraLightItalic.woff2 new file mode 100644 index 0000000..9e7bd16 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-ExtraLightItalic.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-Light.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-Light.woff2 new file mode 100644 index 0000000..0d00850 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-Light.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-LightItalic.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-LightItalic.woff2 new file mode 100644 index 0000000..2ab7591 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-LightItalic.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-Medium.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-Medium.woff2 new file mode 100644 index 0000000..fe4b21a Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-Medium.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-MediumItalic.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-MediumItalic.woff2 new file mode 100644 index 0000000..da06424 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-MediumItalic.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-Regular.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-Regular.woff2 new file mode 100644 index 0000000..043102e Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-Regular.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-RegularItalic.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-RegularItalic.woff2 new file mode 100644 index 0000000..dd072f4 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-RegularItalic.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-SemiBold.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-SemiBold.woff2 new file mode 100644 index 0000000..d00879a Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-SemiBold.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-SemiBoldItalic.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-SemiBoldItalic.woff2 new file mode 100644 index 0000000..8d5628b Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/literata/Literata72pt-SemiBoldItalic.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/manrope/Manrope-VariableFont_wght.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/manrope/Manrope-VariableFont_wght.woff2 new file mode 100644 index 0000000..44f81dc Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/manrope/Manrope-VariableFont_wght.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/platypi/Platypi-Italic-VariableFont_wght.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/platypi/Platypi-Italic-VariableFont_wght.woff2 new file mode 100644 index 0000000..c9e4e2e Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/platypi/Platypi-Italic-VariableFont_wght.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/platypi/Platypi-VariableFont_wght.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/platypi/Platypi-VariableFont_wght.woff2 new file mode 100644 index 0000000..f86f871 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/platypi/Platypi-VariableFont_wght.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/roboto-slab/RobotoSlab-VariableFont_wght.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/roboto-slab/RobotoSlab-VariableFont_wght.woff2 new file mode 100644 index 0000000..8484d4f Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/roboto-slab/RobotoSlab-VariableFont_wght.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/vollkorn/Vollkorn-Italic-VariableFont_wght.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/vollkorn/Vollkorn-Italic-VariableFont_wght.woff2 new file mode 100644 index 0000000..67ccfbc Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/vollkorn/Vollkorn-Italic-VariableFont_wght.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/vollkorn/Vollkorn-VariableFont_wght.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/vollkorn/Vollkorn-VariableFont_wght.woff2 new file mode 100644 index 0000000..6f93056 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/vollkorn/Vollkorn-VariableFont_wght.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/ysabeau-office/YsabeauOffice-Italic-VariableFont_wght.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/ysabeau-office/YsabeauOffice-Italic-VariableFont_wght.woff2 new file mode 100644 index 0000000..761f2e8 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/ysabeau-office/YsabeauOffice-Italic-VariableFont_wght.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/fonts/ysabeau-office/YsabeauOffice-VariableFont_wght.woff2 b/wp-content/themes/twentytwentyfive/assets/fonts/ysabeau-office/YsabeauOffice-VariableFont_wght.woff2 new file mode 100644 index 0000000..562680d Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/fonts/ysabeau-office/YsabeauOffice-VariableFont_wght.woff2 differ diff --git a/wp-content/themes/twentytwentyfive/assets/images/404-image.webp b/wp-content/themes/twentytwentyfive/assets/images/404-image.webp new file mode 100644 index 0000000..5b33a9e Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/images/404-image.webp differ diff --git a/wp-content/themes/twentytwentyfive/assets/images/agenda-img-4.webp b/wp-content/themes/twentytwentyfive/assets/images/agenda-img-4.webp new file mode 100644 index 0000000..d7a00dc Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/images/agenda-img-4.webp differ diff --git a/wp-content/themes/twentytwentyfive/assets/images/akaka-falls-state-park-flora.webp b/wp-content/themes/twentytwentyfive/assets/images/akaka-falls-state-park-flora.webp new file mode 100644 index 0000000..f4eabf2 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/images/akaka-falls-state-park-flora.webp differ diff --git a/wp-content/themes/twentytwentyfive/assets/images/book-image-landing.webp b/wp-content/themes/twentytwentyfive/assets/images/book-image-landing.webp new file mode 100644 index 0000000..f30065c Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/images/book-image-landing.webp differ diff --git a/wp-content/themes/twentytwentyfive/assets/images/book-image.webp b/wp-content/themes/twentytwentyfive/assets/images/book-image.webp new file mode 100644 index 0000000..92beb78 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/images/book-image.webp differ diff --git a/wp-content/themes/twentytwentyfive/assets/images/botany-flowers-closeup.webp b/wp-content/themes/twentytwentyfive/assets/images/botany-flowers-closeup.webp new file mode 100644 index 0000000..427db85 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/images/botany-flowers-closeup.webp differ diff --git a/wp-content/themes/twentytwentyfive/assets/images/botany-flowers.webp b/wp-content/themes/twentytwentyfive/assets/images/botany-flowers.webp new file mode 100644 index 0000000..bb34c39 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/images/botany-flowers.webp differ diff --git a/wp-content/themes/twentytwentyfive/assets/images/campanula-alliariifolia-flower.webp b/wp-content/themes/twentytwentyfive/assets/images/campanula-alliariifolia-flower.webp new file mode 100644 index 0000000..c2ad28b Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/images/campanula-alliariifolia-flower.webp differ diff --git a/wp-content/themes/twentytwentyfive/assets/images/category-anthuriums.webp b/wp-content/themes/twentytwentyfive/assets/images/category-anthuriums.webp new file mode 100644 index 0000000..0f1d2fa Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/images/category-anthuriums.webp differ diff --git a/wp-content/themes/twentytwentyfive/assets/images/category-cactus.webp b/wp-content/themes/twentytwentyfive/assets/images/category-cactus.webp new file mode 100644 index 0000000..9c90905 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/images/category-cactus.webp differ diff --git a/wp-content/themes/twentytwentyfive/assets/images/category-sunflowers.webp b/wp-content/themes/twentytwentyfive/assets/images/category-sunflowers.webp new file mode 100644 index 0000000..eced76d Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/images/category-sunflowers.webp differ diff --git a/wp-content/themes/twentytwentyfive/assets/images/coming-soon-bg-image.webp b/wp-content/themes/twentytwentyfive/assets/images/coming-soon-bg-image.webp new file mode 100644 index 0000000..ac96d52 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/images/coming-soon-bg-image.webp differ diff --git a/wp-content/themes/twentytwentyfive/assets/images/coral-square.webp b/wp-content/themes/twentytwentyfive/assets/images/coral-square.webp new file mode 100644 index 0000000..73c068f Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/images/coral-square.webp differ diff --git a/wp-content/themes/twentytwentyfive/assets/images/dallas-creek-square.webp b/wp-content/themes/twentytwentyfive/assets/images/dallas-creek-square.webp new file mode 100644 index 0000000..d363401 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/images/dallas-creek-square.webp differ diff --git a/wp-content/themes/twentytwentyfive/assets/images/delphinium-flowers.webp b/wp-content/themes/twentytwentyfive/assets/images/delphinium-flowers.webp new file mode 100644 index 0000000..dc5a84a Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/images/delphinium-flowers.webp differ diff --git a/wp-content/themes/twentytwentyfive/assets/images/flower-meadow-square.webp b/wp-content/themes/twentytwentyfive/assets/images/flower-meadow-square.webp new file mode 100644 index 0000000..4b9cd30 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/images/flower-meadow-square.webp differ diff --git a/wp-content/themes/twentytwentyfive/assets/images/grid-flower-1.webp b/wp-content/themes/twentytwentyfive/assets/images/grid-flower-1.webp new file mode 100644 index 0000000..4fadf2e Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/images/grid-flower-1.webp differ diff --git a/wp-content/themes/twentytwentyfive/assets/images/grid-flower-2.webp b/wp-content/themes/twentytwentyfive/assets/images/grid-flower-2.webp new file mode 100644 index 0000000..2bebf05 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/images/grid-flower-2.webp differ diff --git a/wp-content/themes/twentytwentyfive/assets/images/hero-podcast.webp b/wp-content/themes/twentytwentyfive/assets/images/hero-podcast.webp new file mode 100644 index 0000000..1a79e97 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/images/hero-podcast.webp differ diff --git a/wp-content/themes/twentytwentyfive/assets/images/link-in-bio-background.webp b/wp-content/themes/twentytwentyfive/assets/images/link-in-bio-background.webp new file mode 100644 index 0000000..0f31d5b Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/images/link-in-bio-background.webp differ diff --git a/wp-content/themes/twentytwentyfive/assets/images/link-in-bio-image.webp b/wp-content/themes/twentytwentyfive/assets/images/link-in-bio-image.webp new file mode 100644 index 0000000..ace36ca Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/images/link-in-bio-image.webp differ diff --git a/wp-content/themes/twentytwentyfive/assets/images/location.webp b/wp-content/themes/twentytwentyfive/assets/images/location.webp new file mode 100644 index 0000000..4f7ea3c Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/images/location.webp differ diff --git a/wp-content/themes/twentytwentyfive/assets/images/malibu-plantlife.webp b/wp-content/themes/twentytwentyfive/assets/images/malibu-plantlife.webp new file mode 100644 index 0000000..74f54e6 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/images/malibu-plantlife.webp differ diff --git a/wp-content/themes/twentytwentyfive/assets/images/man-in-hat.webp b/wp-content/themes/twentytwentyfive/assets/images/man-in-hat.webp new file mode 100644 index 0000000..5090ff2 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/images/man-in-hat.webp differ diff --git a/wp-content/themes/twentytwentyfive/assets/images/marshland-birds-square.webp b/wp-content/themes/twentytwentyfive/assets/images/marshland-birds-square.webp new file mode 100644 index 0000000..5b2bc76 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/images/marshland-birds-square.webp differ diff --git a/wp-content/themes/twentytwentyfive/assets/images/northern-buttercups-flowers.webp b/wp-content/themes/twentytwentyfive/assets/images/northern-buttercups-flowers.webp new file mode 100644 index 0000000..d75c1d3 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/images/northern-buttercups-flowers.webp differ diff --git a/wp-content/themes/twentytwentyfive/assets/images/nurse.webp b/wp-content/themes/twentytwentyfive/assets/images/nurse.webp new file mode 100644 index 0000000..606552f Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/images/nurse.webp differ diff --git a/wp-content/themes/twentytwentyfive/assets/images/parthenon-square.webp b/wp-content/themes/twentytwentyfive/assets/images/parthenon-square.webp new file mode 100644 index 0000000..039281d Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/images/parthenon-square.webp differ diff --git a/wp-content/themes/twentytwentyfive/assets/images/poster-image-background.webp b/wp-content/themes/twentytwentyfive/assets/images/poster-image-background.webp new file mode 100644 index 0000000..00bc0b7 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/images/poster-image-background.webp differ diff --git a/wp-content/themes/twentytwentyfive/assets/images/red-hibiscus-closeup.webp b/wp-content/themes/twentytwentyfive/assets/images/red-hibiscus-closeup.webp new file mode 100644 index 0000000..3435a3b Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/images/red-hibiscus-closeup.webp differ diff --git a/wp-content/themes/twentytwentyfive/assets/images/ruins-image.webp b/wp-content/themes/twentytwentyfive/assets/images/ruins-image.webp new file mode 100644 index 0000000..d407de2 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/images/ruins-image.webp differ diff --git a/wp-content/themes/twentytwentyfive/assets/images/services-subscriber-photo.webp b/wp-content/themes/twentytwentyfive/assets/images/services-subscriber-photo.webp new file mode 100644 index 0000000..785147d Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/images/services-subscriber-photo.webp differ diff --git a/wp-content/themes/twentytwentyfive/assets/images/star-thristle-flower.webp b/wp-content/themes/twentytwentyfive/assets/images/star-thristle-flower.webp new file mode 100644 index 0000000..f5ccb93 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/images/star-thristle-flower.webp differ diff --git a/wp-content/themes/twentytwentyfive/assets/images/typewriter.webp b/wp-content/themes/twentytwentyfive/assets/images/typewriter.webp new file mode 100644 index 0000000..d386d23 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/images/typewriter.webp differ diff --git a/wp-content/themes/twentytwentyfive/assets/images/vash-gon-square.webp b/wp-content/themes/twentytwentyfive/assets/images/vash-gon-square.webp new file mode 100644 index 0000000..a9b8d17 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/images/vash-gon-square.webp differ diff --git a/wp-content/themes/twentytwentyfive/assets/images/woman-splashing-water.webp b/wp-content/themes/twentytwentyfive/assets/images/woman-splashing-water.webp new file mode 100644 index 0000000..187c016 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/assets/images/woman-splashing-water.webp differ diff --git a/wp-content/themes/twentytwentyfive/functions.php b/wp-content/themes/twentytwentyfive/functions.php new file mode 100644 index 0000000..3805c48 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/functions.php @@ -0,0 +1,158 @@ +get( 'Version' ) + ); + } +endif; +add_action( 'wp_enqueue_scripts', 'twentytwentyfive_enqueue_styles' ); + +// Registers custom block styles. +if ( ! function_exists( 'twentytwentyfive_block_styles' ) ) : + /** + * Registers custom block styles. + * + * @since Twenty Twenty-Five 1.0 + * + * @return void + */ + function twentytwentyfive_block_styles() { + register_block_style( + 'core/list', + array( + 'name' => 'checkmark-list', + 'label' => __( 'Checkmark', 'twentytwentyfive' ), + 'inline_style' => ' + ul.is-style-checkmark-list { + list-style-type: "\2713"; + } + + ul.is-style-checkmark-list li { + padding-inline-start: 1ch; + }', + ) + ); + } +endif; +add_action( 'init', 'twentytwentyfive_block_styles' ); + +// Registers pattern categories. +if ( ! function_exists( 'twentytwentyfive_pattern_categories' ) ) : + /** + * Registers pattern categories. + * + * @since Twenty Twenty-Five 1.0 + * + * @return void + */ + function twentytwentyfive_pattern_categories() { + + register_block_pattern_category( + 'twentytwentyfive_page', + array( + 'label' => __( 'Pages', 'twentytwentyfive' ), + 'description' => __( 'A collection of full page layouts.', 'twentytwentyfive' ), + ) + ); + + register_block_pattern_category( + 'twentytwentyfive_post-format', + array( + 'label' => __( 'Post formats', 'twentytwentyfive' ), + 'description' => __( 'A collection of post format patterns.', 'twentytwentyfive' ), + ) + ); + } +endif; +add_action( 'init', 'twentytwentyfive_pattern_categories' ); + +// Registers block binding sources. +if ( ! function_exists( 'twentytwentyfive_register_block_bindings' ) ) : + /** + * Registers the post format block binding source. + * + * @since Twenty Twenty-Five 1.0 + * + * @return void + */ + function twentytwentyfive_register_block_bindings() { + register_block_bindings_source( + 'twentytwentyfive/format', + array( + 'label' => _x( 'Post format name', 'Label for the block binding placeholder in the editor', 'twentytwentyfive' ), + 'get_value_callback' => 'twentytwentyfive_format_binding', + ) + ); + } +endif; +add_action( 'init', 'twentytwentyfive_register_block_bindings' ); + +// Registers block binding callback function for the post format name. +if ( ! function_exists( 'twentytwentyfive_format_binding' ) ) : + /** + * Callback function for the post format name block binding source. + * + * @since Twenty Twenty-Five 1.0 + * + * @return string|void Post format name, or nothing if the format is 'standard'. + */ + function twentytwentyfive_format_binding() { + $post_format_slug = get_post_format(); + + if ( $post_format_slug && 'standard' !== $post_format_slug ) { + return get_post_format_string( $post_format_slug ); + } + } +endif; diff --git a/wp-content/themes/twentytwentyfive/parts/footer-columns.html b/wp-content/themes/twentytwentyfive/parts/footer-columns.html new file mode 100644 index 0000000..00ca2ec --- /dev/null +++ b/wp-content/themes/twentytwentyfive/parts/footer-columns.html @@ -0,0 +1 @@ + diff --git a/wp-content/themes/twentytwentyfive/parts/footer-newsletter.html b/wp-content/themes/twentytwentyfive/parts/footer-newsletter.html new file mode 100644 index 0000000..8e16988 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/parts/footer-newsletter.html @@ -0,0 +1 @@ + diff --git a/wp-content/themes/twentytwentyfive/parts/footer.html b/wp-content/themes/twentytwentyfive/parts/footer.html new file mode 100644 index 0000000..c2ea07c --- /dev/null +++ b/wp-content/themes/twentytwentyfive/parts/footer.html @@ -0,0 +1 @@ + diff --git a/wp-content/themes/twentytwentyfive/parts/header-large-title.html b/wp-content/themes/twentytwentyfive/parts/header-large-title.html new file mode 100644 index 0000000..2c7ccf8 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/parts/header-large-title.html @@ -0,0 +1 @@ + diff --git a/wp-content/themes/twentytwentyfive/parts/header.html b/wp-content/themes/twentytwentyfive/parts/header.html new file mode 100644 index 0000000..7e3e990 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/parts/header.html @@ -0,0 +1 @@ + diff --git a/wp-content/themes/twentytwentyfive/parts/sidebar.html b/wp-content/themes/twentytwentyfive/parts/sidebar.html new file mode 100644 index 0000000..a29f829 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/parts/sidebar.html @@ -0,0 +1 @@ + diff --git a/wp-content/themes/twentytwentyfive/parts/vertical-header.html b/wp-content/themes/twentytwentyfive/parts/vertical-header.html new file mode 100644 index 0000000..e102cc7 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/parts/vertical-header.html @@ -0,0 +1 @@ + diff --git a/wp-content/themes/twentytwentyfive/patterns/banner-about-book.php b/wp-content/themes/twentytwentyfive/patterns/banner-about-book.php new file mode 100644 index 0000000..dc06f30 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/banner-about-book.php @@ -0,0 +1,41 @@ + + + +
+ +
+ +
+ +

+ + + +

+ +
+ + + +
+ +
<?php esc_attr_e( 'Image of a book', 'twentytwentyfive' ); ?>
+ +
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/banner-cover-big-heading.php b/wp-content/themes/twentytwentyfive/patterns/banner-cover-big-heading.php new file mode 100644 index 0000000..1b00c3a --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/banner-cover-big-heading.php @@ -0,0 +1,35 @@ + + +
+ +
+ +
+ <?php esc_attr_e( 'Photo of a field full of flowers, a blue sky and a tree.', 'twentytwentyfive' ); ?> +
+ + + +
+ +

+ + +
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/banner-intro-image.php b/wp-content/themes/twentytwentyfive/patterns/banner-intro-image.php new file mode 100644 index 0000000..ea70d00 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/banner-intro-image.php @@ -0,0 +1,52 @@ + + +
+ +
+ +
+ +
+ <?php echo esc_attr_x( 'Picture of a flower', 'Alt text for intro picture.', 'twentytwentyfive' ); ?> +
+ +
+ + + +
+ +

+ + + +

+ + + +
+ +
+ +
+ +
+ +
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/banner-intro.php b/wp-content/themes/twentytwentyfive/patterns/banner-intro.php new file mode 100644 index 0000000..48a816a --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/banner-intro.php @@ -0,0 +1,28 @@ + + +
+ +

+ ' . esc_html_x( 'Fleurs', 'Example brand name.', 'twentytwentyfive' ) . '' + ); + ?> +

+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/banner-poster.php b/wp-content/themes/twentytwentyfive/patterns/banner-poster.php new file mode 100644 index 0000000..3c78fe3 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/banner-poster.php @@ -0,0 +1,69 @@ + + +
<?php esc_attr_e( 'Picture of a historical building in ruins.', 'twentytwentyfive' ); ?> +
+ +
+ +
+ +
+ +

+ historias, iсторії, iστορίες”', 'Placeholder heading in four languages.', 'twentytwentyfive' ) + ); + ?> +

+ +
+ + + +
+ +


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

+ +
+ + + +
+ +

+ +
+ +
+ +
+ +
+
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/banner-with-description-and-images-grid.php b/wp-content/themes/twentytwentyfive/patterns/banner-with-description-and-images-grid.php new file mode 100644 index 0000000..8fc3369 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/banner-with-description-and-images-grid.php @@ -0,0 +1,53 @@ + + +
+ +
+ +
+ +
+ +

+ + + +

+ ' . esc_html_x( 'Fleurs', 'Example brand name.', 'twentytwentyfive' ) . '' + ); + ?> +

+ + +
+ + + +
<?php esc_attr_e( 'Photography close up of a red flower.', 'twentytwentyfive' ); ?>
+ +
+ + + +
<?php esc_attr_e( 'Black and white photography close up of a flower.', 'twentytwentyfive' ); ?>
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/binding-format.php b/wp-content/themes/twentytwentyfive/patterns/binding-format.php new file mode 100644 index 0000000..a2ca92d --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/binding-format.php @@ -0,0 +1,16 @@ + + +

+ diff --git a/wp-content/themes/twentytwentyfive/patterns/comments.php b/wp-content/themes/twentytwentyfive/patterns/comments.php new file mode 100644 index 0000000..08c500f --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/comments.php @@ -0,0 +1,53 @@ + + +
+ +

+ + + + +
+ +
+ + +
+ + + + +
+ + +
+ +
+ +
+ +
+ + + + + + + + + +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/contact-centered-social-link.php b/wp-content/themes/twentytwentyfive/patterns/contact-centered-social-link.php new file mode 100644 index 0000000..7fad89b --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/contact-centered-social-link.php @@ -0,0 +1,39 @@ + + + +
+ +
+ +

Feel free to reach out.', 'Heading of the Contact social link pattern', 'twentytwentyfive' ) ); ?>

+ + + +
+ + + +
    + + + + +
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/contact-info-locations.php b/wp-content/themes/twentytwentyfive/patterns/contact-info-locations.php new file mode 100644 index 0000000..393d0a7 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/contact-info-locations.php @@ -0,0 +1,101 @@ + + +
+ +
+ +

+ + + +
+ +
+ +

+ + + + + + + + +

+ + +

+ +
+ + + +
+ +
+ +

+ + +

+ +
+ + + +
+ +

+ + + +

+ +
+ + + +
+ +

+ + + +

+ +
+ + + +
+ +

+ + + +

+ +
+ +
+ +
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/contact-location-and-link.php b/wp-content/themes/twentytwentyfive/patterns/contact-location-and-link.php new file mode 100644 index 0000000..95cbbe3 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/contact-location-and-link.php @@ -0,0 +1,43 @@ + + +
+ +
+ +
+ +
+

+ + + +

+ +
+ +
+ + + +
+ +
<?php esc_attr_e( 'The business location', 'twentytwentyfive' ); ?>
+ +
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/cta-book-links.php b/wp-content/themes/twentytwentyfive/patterns/cta-book-links.php new file mode 100644 index 0000000..b142d08 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/cta-book-links.php @@ -0,0 +1,60 @@ + + +
+ +

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

international editions.', 'Pattern placeholder text with link.', 'twentytwentyfive' ) ); ?>

+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/cta-book-locations.php b/wp-content/themes/twentytwentyfive/patterns/cta-book-locations.php new file mode 100644 index 0000000..37e6419 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/cta-book-locations.php @@ -0,0 +1,148 @@ + + +
+ +
+ +
+ +
+ +

+ + + +

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

+ + + +

+ +
+ + + +
+ +

+ + + +

+ +
+ + + +
+ +

+ + + +

+ +
+ + + +
+ +

+ + + +

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

+ + + +

+ +
+ + + +
+ +

+ + + +

+ +
+ + + +
+ +

+ + + +

+ +
+ + + +
+ +

+ + + +

+ +
+ +
+ +
+ +
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/cta-centered-heading.php b/wp-content/themes/twentytwentyfive/patterns/cta-centered-heading.php new file mode 100644 index 0000000..e1c8d7e --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/cta-centered-heading.php @@ -0,0 +1,34 @@ + + +
+ +
+ +

+ + +

+ + + +
+ +
+
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/cta-events-list.php b/wp-content/themes/twentytwentyfive/patterns/cta-events-list.php new file mode 100644 index 0000000..5cdd050 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/cta-events-list.php @@ -0,0 +1,171 @@ + + +
+ +
+ +

+ + + +

+ + + +
+ +
+ +
+ +

+ + + +

+ +
+ + + +
+ +

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

+ historias, iсторії, iστορίες”', 'Placeholder heading in four languages.', 'twentytwentyfive' ) + ); + ?> +

+ + + +

+ +
+ + + +
+ +

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

+ + + +

+ +
+ + + +
+ +

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

+ historias, iсторії, iστορίες”', 'Placeholder heading in four languages.', 'twentytwentyfive' ) + ); + ?> +

+ + + +

+ +
+ + + +
+ +

+ + + +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/cta-grid-products-link.php b/wp-content/themes/twentytwentyfive/patterns/cta-grid-products-link.php new file mode 100644 index 0000000..87851b4 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/cta-grid-products-link.php @@ -0,0 +1,141 @@ + + +
+ +
+ +

+ + + +
+ +
<?php esc_attr_e( 'Black and white flower', 'twentytwentyfive' ); ?>
+ + + +
+ +

+ +
+ + + +
<?php esc_attr_e( 'Closeup of plantlife in the Malibu Canyon area', 'twentytwentyfive' ); ?>
+ + + +
+ +
+ +
+ + + +
+ +
+ +

+ tags. The price value has a font size set.*/ + esc_html__( 'Starting at%s/month', 'twentytwentyfive' ), + '
' . esc_html__( '30€', 'twentytwentyfive' ) . '
' + ); + ?> +

+ +
+ +
+ + + +
<?php esc_attr_e( 'Flora of Akaka Falls State Park', 'twentytwentyfive' ); ?>
+ + + +
+ +

+ +
+ + + +
+ +

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

+ +
+ + + +
+ +
+ +
+ + + +
<?php esc_attr_e( 'Botany flowers', 'twentytwentyfive' ); ?>
+ + + +
+ +
+ +
+ + + +
<?php esc_attr_e( 'Black and white flower', 'twentytwentyfive' ); ?>
+ +
+ + + +
+ +
+ +
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/cta-heading-search.php b/wp-content/themes/twentytwentyfive/patterns/cta-heading-search.php new file mode 100644 index 0000000..00dffc2 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/cta-heading-search.php @@ -0,0 +1,25 @@ + + +
+
+ +

+ + + +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/cta-newsletter.php b/wp-content/themes/twentytwentyfive/patterns/cta-newsletter.php new file mode 100644 index 0000000..679e1e0 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/cta-newsletter.php @@ -0,0 +1,38 @@ + + +
+ +
+ +

+ + + +

+ + + +
+ + + +
+
+
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/event-3-col.php b/wp-content/themes/twentytwentyfive/patterns/event-3-col.php new file mode 100644 index 0000000..08a7d7a --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/event-3-col.php @@ -0,0 +1,105 @@ + + +
+ +
+ +

+ + + +

+ +
+ + + +
+ +
+ +
<?php esc_attr_e( 'Event image', 'twentytwentyfive' ); ?>
+ + + +
+ +

+ + + +

+ +
+ + + +

+ +
+ + + +
+ +
<?php esc_attr_e( 'Event image', 'twentytwentyfive' ); ?>
+ + + +
+ +

+ + + +

+ +
+ + + +

+ +
+ + + +
+ +
<?php esc_attr_e( 'Event image', 'twentytwentyfive' ); ?>
+ + + +
+ +

+ + + +

+ +
+ + + +

+ +
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/event-rsvp.php b/wp-content/themes/twentytwentyfive/patterns/event-rsvp.php new file mode 100644 index 0000000..1ba58e5 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/event-rsvp.php @@ -0,0 +1,103 @@ + + +
+ +
+ +
+ +
+ +

+ historias, iсторії, iστορίες”', 'Placeholder heading in four languages.', 'twentytwentyfive' ) + ); + ?> +

+ + + +

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

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

+ + + +
+ + + +

+ +
+ +
+ + + +
+ +
<?php esc_attr_e( 'Close up photo of white flowers on a grey background', 'twentytwentyfive' ); ?> +
+ +
+ +
+ +
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/event-schedule.php b/wp-content/themes/twentytwentyfive/patterns/event-schedule.php new file mode 100644 index 0000000..ba5156d --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/event-schedule.php @@ -0,0 +1,199 @@ + + +
+ +
+ +

+ + +

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

+ +
+ + +
+ +
+ +
+ +
<?php esc_attr_e( 'Birds on a lake.', 'twentytwentyfive' ); ?>
+ +
+ + +
+ +
+ +
+ +

+ + +

+ +
+ + +

Prof. Fiona Presley', 'Pattern placeholder text with link.', 'twentytwentyfive' ) ); ?>

+ +
+ +
+ +
+ + +
+ +
+ +
<?php esc_attr_e( 'View of the deep ocean.', 'twentytwentyfive' ); ?>
+ +
+ + +
+ +
+ +
+ +

+ + +

+ +
+ + +

Prof. Fiona Presley', 'Pattern placeholder text with link.', 'twentytwentyfive' ) ); ?>

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

+ +
+ + +
+ +
+ +
+ +
<?php esc_attr_e( 'The Acropolis of Athens.', 'twentytwentyfive' ); ?>
+ +
+ + +
+
+ +
+ +

+ + +

+ +
+ + +

Prof. Fiona Presley', 'Pattern placeholder text with link.', 'twentytwentyfive' ) ); ?>

+ +
+ +
+ +
+ + +
+ +
+ +
<?php esc_attr_e( 'Black and white photo of an African woman.', 'twentytwentyfive' ); ?>
+ +
+ + +
+ +
+ +
+ +

+ + +

+ +
+ + +

Prof. Fiona Presley', 'Pattern placeholder text with link.', 'twentytwentyfive' ) ); ?>

+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/footer-centered.php b/wp-content/themes/twentytwentyfive/patterns/footer-centered.php new file mode 100644 index 0000000..be82e0f --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/footer-centered.php @@ -0,0 +1,40 @@ + + +
+ +
+ + +
+ + + +
+ + + +

+ WordPress' + ); + ?> +

+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/footer-columns.php b/wp-content/themes/twentytwentyfive/patterns/footer-columns.php new file mode 100644 index 0000000..6b12c32 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/footer-columns.php @@ -0,0 +1,84 @@ + + +
+ +
+ +
+ +
+ + +
+ + + +
+ +
+ +

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

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

+ + +

+ WordPress' + ); + ?> +

+ +
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/footer-newsletter.php b/wp-content/themes/twentytwentyfive/patterns/footer-newsletter.php new file mode 100644 index 0000000..1c88efc --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/footer-newsletter.php @@ -0,0 +1,60 @@ + + +
+ +
+ +

+ + + +

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

+ + +

+ WordPress' + ); + ?> +

+ +
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/footer-social.php b/wp-content/themes/twentytwentyfive/patterns/footer-social.php new file mode 100644 index 0000000..006cb83 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/footer-social.php @@ -0,0 +1,42 @@ + + +
+ +
+ + + + + + +
+ + +
+ + +

+ WordPress' + ); + ?> +

+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/footer.php b/wp-content/themes/twentytwentyfive/patterns/footer.php new file mode 100644 index 0000000..4dec2cc --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/footer.php @@ -0,0 +1,93 @@ + + +
+ +
+ + + +
+ +
+ +
+ + +
+ + + +
+ +
+ +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + +
+ +

+ + +

+ WordPress' + ); + ?> +

+ +
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/format-audio.php b/wp-content/themes/twentytwentyfive/patterns/format-audio.php new file mode 100644 index 0000000..852f1d4 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/format-audio.php @@ -0,0 +1,38 @@ + + +
+ +
+ +
+
<?php esc_attr_e( 'Event image', 'twentytwentyfive' ); ?>
+
+ + + +
+

+ + + +

+ + + +
+
+
+
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/format-link.php b/wp-content/themes/twentytwentyfive/patterns/format-link.php new file mode 100644 index 0000000..2605a89 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/format-link.php @@ -0,0 +1,28 @@ + + +
+ +

+ + + +
+ +

+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/grid-videos.php b/wp-content/themes/twentytwentyfive/patterns/grid-videos.php new file mode 100644 index 0000000..56f54c2 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/grid-videos.php @@ -0,0 +1,56 @@ + + +
+ +
+ +

+ + + +

+ +
+ + + +
+ +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/grid-with-categories.php b/wp-content/themes/twentytwentyfive/patterns/grid-with-categories.php new file mode 100644 index 0000000..f0762aa --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/grid-with-categories.php @@ -0,0 +1,71 @@ + + +
+ +
+ +
+ +

+ +
+ + +
+ +
<?php esc_attr_e( 'Close up of a red anthurium.', 'twentytwentyfive' ); ?>
+ +
+ +
+ + +

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

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

+ +
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/header-centered.php b/wp-content/themes/twentytwentyfive/patterns/header-centered.php new file mode 100644 index 0000000..4468001 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/header-centered.php @@ -0,0 +1,28 @@ + + +
+ +
+ + +
+ +
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/header-columns.php b/wp-content/themes/twentytwentyfive/patterns/header-columns.php new file mode 100644 index 0000000..7cb8eab --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/header-columns.php @@ -0,0 +1,34 @@ + + +
+ +
+ +
+ + +
+ + +
+ +
+ + +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/header-large-title.php b/wp-content/themes/twentytwentyfive/patterns/header-large-title.php new file mode 100644 index 0000000..8a4cd38 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/header-large-title.php @@ -0,0 +1,28 @@ + + +
+ +
+ + +
+ +
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/header.php b/wp-content/themes/twentytwentyfive/patterns/header.php new file mode 100644 index 0000000..8cccb6c --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/header.php @@ -0,0 +1,32 @@ + + +
+ +
+ +
+ + +
+ +
+ +
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/heading-and-paragraph-with-image.php b/wp-content/themes/twentytwentyfive/patterns/heading-and-paragraph-with-image.php new file mode 100644 index 0000000..6ece41c --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/heading-and-paragraph-with-image.php @@ -0,0 +1,44 @@ + + + +
+ +
+ +
+ +

+ +

+ + +

+ +
+ + + +
+ +
+ <?php echo esc_attr_x( 'Cliff Palace, Colorado', 'Alt text for Overview picture.', 'twentytwentyfive' ); ?> +
+ +
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/hero-book.php b/wp-content/themes/twentytwentyfive/patterns/hero-book.php new file mode 100644 index 0000000..31d3465 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/hero-book.php @@ -0,0 +1,50 @@ + + +
+ +
+ +
+ +
+ + <?php esc_attr_e( 'Image of the book', 'twentytwentyfive' ); ?> +
+ +
+ +
+
+ +
+ + + +
+ +

+ + + +

+ + + +

+
+
+
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/hero-full-width-image.php b/wp-content/themes/twentytwentyfive/patterns/hero-full-width-image.php new file mode 100644 index 0000000..9507971 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/hero-full-width-image.php @@ -0,0 +1,41 @@ + + + +
+ + <?php echo esc_attr_x( 'Picture of a flower', 'Alt text for cover image.', 'twentytwentyfive' ); ?> +
+ +
+ +

+ + + +

+ + + +
+ +
+ +
+ +
+ +
+
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/hero-overlapped-book-cover-with-links.php b/wp-content/themes/twentytwentyfive/patterns/hero-overlapped-book-cover-with-links.php new file mode 100644 index 0000000..677e992 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/hero-overlapped-book-cover-with-links.php @@ -0,0 +1,123 @@ + + +
+ +
+ +
+ +
+ +
+ +
+ +

+ +

+ + + +

+ +

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

international editions.', 'Pattern placeholder text with link.', 'twentytwentyfive' ) ); ?>

+ +
+ +
+ +
+ + + +
+ +
+ <?php echo esc_attr__( 'Book Image', 'twentytwentyfive' ); ?> +
+ +
+ +
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/hero-podcast.php b/wp-content/themes/twentytwentyfive/patterns/hero-podcast.php new file mode 100644 index 0000000..43610a4 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/hero-podcast.php @@ -0,0 +1,78 @@ + + +
+ +
+ +
+ +
+ <?php echo esc_attr_x( 'Picture of a person', 'Alt text for hero image.', 'twentytwentyfive' ); ?> +
+ +
+ + + + +
+ +

+ + + +

+ + + +
+ + +

+ + + +
+ +

+ + + +

+ + + +

+ + + +

+ + + +

+ +
+ + +
+ + +
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/hidden-404.php b/wp-content/themes/twentytwentyfive/patterns/hidden-404.php new file mode 100644 index 0000000..b548067 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/hidden-404.php @@ -0,0 +1,46 @@ + + +
+ +
+ +
+ +
+ <?php echo esc_attr_x( 'Small totara tree on ridge above Long Point', 'image description', 'twentytwentyfive' ); ?> +
+ +
+ + +
+ +
+ +

+ +

+ + +

+ + +
+ +
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/hidden-blog-heading.php b/wp-content/themes/twentytwentyfive/patterns/hidden-blog-heading.php new file mode 100644 index 0000000..a632a2b --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/hidden-blog-heading.php @@ -0,0 +1,16 @@ + + +

+ diff --git a/wp-content/themes/twentytwentyfive/patterns/hidden-search.php b/wp-content/themes/twentytwentyfive/patterns/hidden-search.php new file mode 100644 index 0000000..d4a7090 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/hidden-search.php @@ -0,0 +1,14 @@ + + + diff --git a/wp-content/themes/twentytwentyfive/patterns/hidden-sidebar.php b/wp-content/themes/twentytwentyfive/patterns/hidden-sidebar.php new file mode 100644 index 0000000..1b6dccb --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/hidden-sidebar.php @@ -0,0 +1,42 @@ + + +

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

+ + +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/hidden-written-by.php b/wp-content/themes/twentytwentyfive/patterns/hidden-written-by.php new file mode 100644 index 0000000..a8ffce6 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/hidden-written-by.php @@ -0,0 +1,24 @@ + + +
+ +

+ + + +

+ + +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/logos.php b/wp-content/themes/twentytwentyfive/patterns/logos.php new file mode 100644 index 0000000..7d16329 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/logos.php @@ -0,0 +1,48 @@ + + +
+ +

+ + + +
+ + + +
+ +
+ + + +
+ + + +
+ + + +
+ + + +
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/media-instagram-grid.php b/wp-content/themes/twentytwentyfive/patterns/media-instagram-grid.php new file mode 100644 index 0000000..f064293 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/media-instagram-grid.php @@ -0,0 +1,65 @@ + + +
+ +
+ +
+ +
+ +

+ + + +

+ +
+ +
+ + + +
<?php esc_attr_e( 'Photo of a field full of flowers, a blue sky and a tree.', 'twentytwentyfive' ); ?>
+ + + +
<?php esc_attr_e( 'Profile portrait of a native person.', 'twentytwentyfive' ); ?>
+ + + +
<?php esc_attr_e( 'View of the deep ocean.', 'twentytwentyfive' ); ?>
+ + + +
<?php esc_attr_e( 'Portrait of an African Woman dressed in traditional costume, wearing decorative jewelry.', 'twentytwentyfive' ); ?>
+ + + +
<?php esc_attr_e( 'The Acropolis of Athens.', 'twentytwentyfive' ); ?>
+ + + +
<?php esc_attr_e( 'Close up of two flowers on a dark background.', 'twentytwentyfive' ); ?>
+ + + +
<?php esc_attr_e( 'Birds on a lake.', 'twentytwentyfive' ); ?>
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/more-posts.php b/wp-content/themes/twentytwentyfive/patterns/more-posts.php new file mode 100644 index 0000000..6dd8f82 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/more-posts.php @@ -0,0 +1,34 @@ + + +
+ +

+ + + +
+ + +
+ + +
+ + +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/overlapped-images.php b/wp-content/themes/twentytwentyfive/patterns/overlapped-images.php new file mode 100644 index 0000000..f7e8215 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/overlapped-images.php @@ -0,0 +1,58 @@ + + +
+ +
+ +
+ +
<?php esc_attr_e( 'Photography close up of a red flower.', 'twentytwentyfive' ); ?>
+ + +
+ +
<?php esc_attr_e( 'Black and white photography close up of a flower.', 'twentytwentyfive' ); ?>
+ +
+ +
+ + +
+ +
+ +

+ +
+ + + +

+ ' . esc_html_x( 'Fleurs', 'Example brand name.', 'twentytwentyfive' ) . '' + ); + ?> +

+ +
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/page-business-home.php b/wp-content/themes/twentytwentyfive/patterns/page-business-home.php new file mode 100644 index 0000000..e94cf50 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/page-business-home.php @@ -0,0 +1,24 @@ + + + + + + + + diff --git a/wp-content/themes/twentytwentyfive/patterns/page-coming-soon.php b/wp-content/themes/twentytwentyfive/patterns/page-coming-soon.php new file mode 100644 index 0000000..baab759 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/page-coming-soon.php @@ -0,0 +1,45 @@ + + +
<?php esc_attr_e( 'Photo of a field full of flowers, a blue sky and a tree.', 'twentytwentyfive' ); ?> +
+ +
+ +

+ +
+ + +

+ + + +

+ + + +
+ +
+ +
+ +
+
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/page-cv-bio.php b/wp-content/themes/twentytwentyfive/patterns/page-cv-bio.php new file mode 100644 index 0000000..13dc4f3 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/page-cv-bio.php @@ -0,0 +1,57 @@ + + +
+ +
+ +
+ +
+ +
+ +

+ + +

+ +
+ +
+ + + +
+ +
+ +
<?php esc_attr_e( 'Woman on beach, splashing water.', 'twentytwentyfive' ); ?>
+ + + +



+ +
+ +
+ +
+ +
+
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/page-landing-book.php b/wp-content/themes/twentytwentyfive/patterns/page-landing-book.php new file mode 100644 index 0000000..3874c78 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/page-landing-book.php @@ -0,0 +1,24 @@ + + + + + + + + diff --git a/wp-content/themes/twentytwentyfive/patterns/page-landing-event.php b/wp-content/themes/twentytwentyfive/patterns/page-landing-event.php new file mode 100644 index 0000000..9915e20 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/page-landing-event.php @@ -0,0 +1,23 @@ + + + + + + + diff --git a/wp-content/themes/twentytwentyfive/patterns/page-landing-podcast.php b/wp-content/themes/twentytwentyfive/patterns/page-landing-podcast.php new file mode 100644 index 0000000..48ac731 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/page-landing-podcast.php @@ -0,0 +1,23 @@ + + + + + + + diff --git a/wp-content/themes/twentytwentyfive/patterns/page-link-in-bio-heading-paragraph-links-image.php b/wp-content/themes/twentytwentyfive/patterns/page-link-in-bio-heading-paragraph-links-image.php new file mode 100644 index 0000000..7d5e1ef --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/page-link-in-bio-heading-paragraph-links-image.php @@ -0,0 +1,68 @@ + + +
+ +
+ +
+ +
+ +

+ + + +

+ + + +
+ +

+ + + +

+ + + +

+ +
+ +
+ +
+ + + +
+ +
+ <?php esc_attr_e( 'Photo of a woman worker.', 'twentytwentyfive' ); ?>
+ +
+ +
+ +
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/page-link-in-bio-wide-margins.php b/wp-content/themes/twentytwentyfive/patterns/page-link-in-bio-wide-margins.php new file mode 100644 index 0000000..3f095cc --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/page-link-in-bio-wide-margins.php @@ -0,0 +1,57 @@ + + +
+ +
+ +
+ +
<?php esc_attr_e( 'Woman on beach, splashing water.', 'twentytwentyfive' ); ?>
+ +
+ + + +
+ +
+ +

+ + + +

+ + + +
    + + + + + +
+ +
+ +
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/page-link-in-bio-with-tight-margins.php b/wp-content/themes/twentytwentyfive/patterns/page-link-in-bio-with-tight-margins.php new file mode 100644 index 0000000..264ce63 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/page-link-in-bio-with-tight-margins.php @@ -0,0 +1,67 @@ + + +
+ +
+ +
+ +
+ + <?php esc_attr_e( 'Black and white photo focusing on a woman and a child from afar.', 'twentytwentyfive' ); ?>
+ + +
+ +
+ +
+ + + +
+ +
+ +

+ + + +
+ +

+ + + +

+ + + +

+ +
+ +
+ +
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/page-portfolio-home.php b/wp-content/themes/twentytwentyfive/patterns/page-portfolio-home.php new file mode 100644 index 0000000..7a2a5b3 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/page-portfolio-home.php @@ -0,0 +1,236 @@ + + +
+ +
+ +
+ +
+ +

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

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

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

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

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

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

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

+ + +


+ +
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/page-shop-home.php b/wp-content/themes/twentytwentyfive/patterns/page-shop-home.php new file mode 100644 index 0000000..ce87caf --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/page-shop-home.php @@ -0,0 +1,21 @@ + + + + + diff --git a/wp-content/themes/twentytwentyfive/patterns/post-navigation.php b/wp-content/themes/twentytwentyfive/patterns/post-navigation.php new file mode 100644 index 0000000..22852b2 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/post-navigation.php @@ -0,0 +1,24 @@ + + +
+ +
+ + +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/pricing-2-col.php b/wp-content/themes/twentytwentyfive/patterns/pricing-2-col.php new file mode 100644 index 0000000..c1ac80b --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/pricing-2-col.php @@ -0,0 +1,121 @@ + + +
+ +

+ + + +

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

+ + + +

+ + + +
    + +
  • + + + +
  • + + + +
  • + + + +
  • + + + +
  • + +
+ + + +
+ +
+ +
+ +
+ + + +
+ +

+ + + +

+ + + +
    + +
  • + + + +
  • + + + +
  • + + + +
  • + + + +
  • + +
+ + + +
+ +
+ +
+ +
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/pricing-3-col.php b/wp-content/themes/twentytwentyfive/patterns/pricing-3-col.php new file mode 100644 index 0000000..ff66c8b --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/pricing-3-col.php @@ -0,0 +1,148 @@ + + +
+ +
+ +

+ + + +

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

+ + + +

+ +
+ + + +
+ +

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

+ + + +

+ +
+ + + +
+ +

+ + + +

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

+ + + +

+ +
+ + + +
+ +

+ + + +

+ +
+ +
+ + + +
+ +
+ +
+ +
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/services-3-col.php b/wp-content/themes/twentytwentyfive/patterns/services-3-col.php new file mode 100644 index 0000000..44a4bc0 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/services-3-col.php @@ -0,0 +1,79 @@ + + +
+ +

+ + + +
+ +
+ + +
+ <?php esc_attr_e( 'Image for service', 'twentytwentyfive' ); ?> +
+ + + +

+ + + +

+ +
+ + + +
+ +
+ <?php esc_attr_e( 'Image for service', 'twentytwentyfive' ); ?> +
+ + + +

+ + + +

+ +
+ + + +
+ +
+ <?php esc_attr_e( 'Image for service', 'twentytwentyfive' ); ?> +
+ + + +

+ + + +

+ +
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/services-subscriber-only-section.php b/wp-content/themes/twentytwentyfive/patterns/services-subscriber-only-section.php new file mode 100644 index 0000000..713103c --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/services-subscriber-only-section.php @@ -0,0 +1,76 @@ + + +
+ +
+ +
+ +

+ + + +
    + +
  • + + + +
  • + + + +
  • + + + +
  • + + + +
  • + +
+ + + +
+ +
+ + + +
+ +
+ + + +

+ +
+ + + +
+ +
<?php esc_attr_e( 'Smartphones capturing a scenic wildflower meadow with trees', 'twentytwentyfive' ); ?>
+ +
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/services-team-photos.php b/wp-content/themes/twentytwentyfive/patterns/services-team-photos.php new file mode 100644 index 0000000..865438c --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/services-team-photos.php @@ -0,0 +1,60 @@ + + +
+ +
+ +
+ +

+ +
+ + + +
+ +
+ +
+ <?php esc_attr_e( 'Woman on beach, splashing water.', 'twentytwentyfive' ); ?> +
+ + + +
+ <?php esc_attr_e( 'Portrait of a nurse', 'twentytwentyfive' ); ?> +
+ + + +
+ <?php esc_attr_e( 'Picture of a person typing on a typewriter.', 'twentytwentyfive' ); ?> +
+ + + +
+ <?php esc_attr_e( 'Man in hat, standing in front of a building.', 'twentytwentyfive' ); ?> +
+ +
+ +
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/template-404-vertical-header-blog.php b/wp-content/themes/twentytwentyfive/patterns/template-404-vertical-header-blog.php new file mode 100644 index 0000000..5506cb4 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/template-404-vertical-header-blog.php @@ -0,0 +1,41 @@ + + +
+ +
+ +
+ + +
+ +
+ +
+ + + + + +
+ +
+ +
+ +
+ + + diff --git a/wp-content/themes/twentytwentyfive/patterns/template-archive-news-blog.php b/wp-content/themes/twentytwentyfive/patterns/template-archive-news-blog.php new file mode 100644 index 0000000..8ad1942 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/template-archive-news-blog.php @@ -0,0 +1,39 @@ + + + + +
+ +
+ +
+ + + + +
+ +
+ + +
+ +
+ +
+ + + diff --git a/wp-content/themes/twentytwentyfive/patterns/template-archive-photo-blog.php b/wp-content/themes/twentytwentyfive/patterns/template-archive-photo-blog.php new file mode 100644 index 0000000..e94b245 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/template-archive-photo-blog.php @@ -0,0 +1,26 @@ + + + + + +
+ + + +
+ + + diff --git a/wp-content/themes/twentytwentyfive/patterns/template-archive-text-blog.php b/wp-content/themes/twentytwentyfive/patterns/template-archive-text-blog.php new file mode 100644 index 0000000..7efe1b4 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/template-archive-text-blog.php @@ -0,0 +1,28 @@ + + + + +
+ + + +
+ + +
+ + + diff --git a/wp-content/themes/twentytwentyfive/patterns/template-archive-vertical-header-blog.php b/wp-content/themes/twentytwentyfive/patterns/template-archive-vertical-header-blog.php new file mode 100644 index 0000000..9a25fe3 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/template-archive-vertical-header-blog.php @@ -0,0 +1,48 @@ + + +
+ +
+ +
+ + + +
+ +
+ +
+ + + + +
+ + + + + +
+ +
+ +
+ +
+ + + diff --git a/wp-content/themes/twentytwentyfive/patterns/template-home-news-blog.php b/wp-content/themes/twentytwentyfive/patterns/template-home-news-blog.php new file mode 100644 index 0000000..7dea528 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/template-home-news-blog.php @@ -0,0 +1,166 @@ + + + + +
+ +
+ +
+ +
+ +
+ +
+ + +
+ + + +
+ + + + +

+ + +
+ + +
+ + +
+ + + +
+ + +
+ +
+ +
+ + +
+ +
+ + +
+ + + + +
+ + +
+ +
+ + +
+ +
+ +
+ + +
+ + + +
+ + +
+ + +
+ + +
+ + + +
+ + +
+ +
+ +
+ +
+ +
+ + + +
+ +
+ + +
+ + + +
+ + +
+ +
+ + + +
+ +
+ + +
+ + + +
+ + + +
+ + + + + +
+ +
+ +
+ +
+ + + diff --git a/wp-content/themes/twentytwentyfive/patterns/template-home-photo-blog.php b/wp-content/themes/twentytwentyfive/patterns/template-home-photo-blog.php new file mode 100644 index 0000000..29ed376 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/template-home-photo-blog.php @@ -0,0 +1,33 @@ + + + + +
+ +
+ +

+ +
+ + +

+ + +
+ + + diff --git a/wp-content/themes/twentytwentyfive/patterns/template-home-posts-grid-news-blog.php b/wp-content/themes/twentytwentyfive/patterns/template-home-posts-grid-news-blog.php new file mode 100644 index 0000000..167f0a0 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/template-home-posts-grid-news-blog.php @@ -0,0 +1,136 @@ + + + + +
+ + +
+ +
+ + + +
+ + + +
+ + + + +

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

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

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

+ + +
+ +
+ + + +
+ +

+ + +
+ + +
+ + +
+ + +
+ +
+ + +
+ + + + + diff --git a/wp-content/themes/twentytwentyfive/patterns/template-home-text-blog.php b/wp-content/themes/twentytwentyfive/patterns/template-home-text-blog.php new file mode 100644 index 0000000..81e482e --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/template-home-text-blog.php @@ -0,0 +1,29 @@ + + + + +
+ +

+ + +
+ + +
+ + + diff --git a/wp-content/themes/twentytwentyfive/patterns/template-home-vertical-header-blog.php b/wp-content/themes/twentytwentyfive/patterns/template-home-vertical-header-blog.php new file mode 100644 index 0000000..b44b5dd --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/template-home-vertical-header-blog.php @@ -0,0 +1,47 @@ + + +
+ +
+ +
+ + + +
+ +
+ +
+ + + +
+ + + + + +
+ +
+ +
+ +
+ + + diff --git a/wp-content/themes/twentytwentyfive/patterns/template-home-with-sidebar-news-blog.php b/wp-content/themes/twentytwentyfive/patterns/template-home-with-sidebar-news-blog.php new file mode 100644 index 0000000..ee67322 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/template-home-with-sidebar-news-blog.php @@ -0,0 +1,127 @@ + + + + +
+ +
+ +
+ +
+ + + +
+ + + +
+ + +
+ +
+ + +
+ +

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

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

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

+ + +
+ +
+ + + diff --git a/wp-content/themes/twentytwentyfive/patterns/template-page-photo-blog.php b/wp-content/themes/twentytwentyfive/patterns/template-page-photo-blog.php new file mode 100644 index 0000000..54ccb20 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/template-page-photo-blog.php @@ -0,0 +1,28 @@ + + + + +
+ +
+ + + +
+ +
+ + + diff --git a/wp-content/themes/twentytwentyfive/patterns/template-page-vertical-header-blog.php b/wp-content/themes/twentytwentyfive/patterns/template-page-vertical-header-blog.php new file mode 100644 index 0000000..1c23770 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/template-page-vertical-header-blog.php @@ -0,0 +1,63 @@ + + +
+ +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ + + +
+ +
+ +
+ + +
+ +
+ +
+ +
+ +
+ +
+ +
+ + + diff --git a/wp-content/themes/twentytwentyfive/patterns/template-query-loop-news-blog.php b/wp-content/themes/twentytwentyfive/patterns/template-query-loop-news-blog.php new file mode 100644 index 0000000..c55b337 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/template-query-loop-news-blog.php @@ -0,0 +1,62 @@ + + +
+ +
+
+ + + +
+ + + + + + +
+ +

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

+ + + + +
+
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/template-query-loop-photo-blog.php b/wp-content/themes/twentytwentyfive/patterns/template-query-loop-photo-blog.php new file mode 100644 index 0000000..c9f150c --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/template-query-loop-photo-blog.php @@ -0,0 +1,46 @@ + + +
+ +
+ + +

+ + +
+ + + +
+ + + +
+ + + +
+ + + + + +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/template-query-loop-text-blog.php b/wp-content/themes/twentytwentyfive/patterns/template-query-loop-text-blog.php new file mode 100644 index 0000000..e90e480 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/template-query-loop-text-blog.php @@ -0,0 +1,47 @@ + + +
+ +
+ + +

+ + +
+ + + +
+ + +
+ + + + +
+ + + +
+ + + + + +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/template-query-loop-vertical-header-blog.php b/wp-content/themes/twentytwentyfive/patterns/template-query-loop-vertical-header-blog.php new file mode 100644 index 0000000..b572e93 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/template-query-loop-vertical-header-blog.php @@ -0,0 +1,51 @@ + + +
+ + +
+ + +
+ + +
+ + +
+
+ + + +
+
+ + + +
+ + + + + + + + + + +

+ + +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/template-query-loop.php b/wp-content/themes/twentytwentyfive/patterns/template-query-loop.php new file mode 100644 index 0000000..82dc4de --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/template-query-loop.php @@ -0,0 +1,46 @@ + + +
+ + +
+ + + + +
+ + + +
+ + +

+ + +
+ + +
+ + + + + +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/template-search-news-blog.php b/wp-content/themes/twentytwentyfive/patterns/template-search-news-blog.php new file mode 100644 index 0000000..e4ff042 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/template-search-news-blog.php @@ -0,0 +1,39 @@ + + + + +
+ +
+ +
+ + + + +
+ +
+ + +
+ +
+ +
+ + + diff --git a/wp-content/themes/twentytwentyfive/patterns/template-search-photo-blog.php b/wp-content/themes/twentytwentyfive/patterns/template-search-photo-blog.php new file mode 100644 index 0000000..c08992c --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/template-search-photo-blog.php @@ -0,0 +1,29 @@ + + + + +
+ + +
+ +
+ + +
+ + + diff --git a/wp-content/themes/twentytwentyfive/patterns/template-search-text-blog.php b/wp-content/themes/twentytwentyfive/patterns/template-search-text-blog.php new file mode 100644 index 0000000..124af4a --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/template-search-text-blog.php @@ -0,0 +1,32 @@ + + + + +
+ +
+ + +
+ + +
+ + +
+ + + diff --git a/wp-content/themes/twentytwentyfive/patterns/template-search-vertical-header-blog.php b/wp-content/themes/twentytwentyfive/patterns/template-search-vertical-header-blog.php new file mode 100644 index 0000000..3121358 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/template-search-vertical-header-blog.php @@ -0,0 +1,45 @@ + + +
+ +
+ +
+ + +
+ +
+ +
+ + + + +
+ + + +
+ +
+ +
+ +
+ + + diff --git a/wp-content/themes/twentytwentyfive/patterns/template-single-left-aligned-content.php b/wp-content/themes/twentytwentyfive/patterns/template-single-left-aligned-content.php new file mode 100644 index 0000000..9f86084 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/template-single-left-aligned-content.php @@ -0,0 +1,112 @@ + + + + +
+ +
+ +
+ +
+ +
+ + +
+ +

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

+ + +
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ +
+ +
+ + +
+ +
+ +
+ + + +
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ +
+ +
+ + + diff --git a/wp-content/themes/twentytwentyfive/patterns/template-single-news-blog.php b/wp-content/themes/twentytwentyfive/patterns/template-single-news-blog.php new file mode 100644 index 0000000..86ebd9c --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/template-single-news-blog.php @@ -0,0 +1,141 @@ + + + + +
+ + +
+ +
+ +
+ + + +
+ + +
+ +
+ +
+ + +

+ + +
+ + +
+ + +
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ +
+ +
+ + + +
+ +
+ + +
+ +
+ + + +
+ +
+ +
+ + + +
+ +
+ +
+ +
+ + + +
+ + + +
+ + + +
+ + +
+ +
+ +
+ + + diff --git a/wp-content/themes/twentytwentyfive/patterns/template-single-offset.php b/wp-content/themes/twentytwentyfive/patterns/template-single-offset.php new file mode 100644 index 0000000..bc71fa2 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/template-single-offset.php @@ -0,0 +1,93 @@ + + + + +
+ +
+ +
+ + +
+ +
+ + + +
+ +
+ +
+ +
+ +
+

+ +
+ +
+ + + +
+ +
+ +
+ +
+ +
+ + + +
+ +
+ + +
+ +
+ + + +
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ +
+ +
+ + + diff --git a/wp-content/themes/twentytwentyfive/patterns/template-single-photo-blog.php b/wp-content/themes/twentytwentyfive/patterns/template-single-photo-blog.php new file mode 100644 index 0000000..884259b --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/template-single-photo-blog.php @@ -0,0 +1,97 @@ + + + + +
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ +
+

+ +
+ + +
+

+ +
+ +
+ + +
+ +
+ +

+ + +
+ + +
+ +

+ + +
+ +
+ +
+ +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ + + + + +
+ +
+ +
+ + diff --git a/wp-content/themes/twentytwentyfive/patterns/template-single-text-blog.php b/wp-content/themes/twentytwentyfive/patterns/template-single-text-blog.php new file mode 100644 index 0000000..2b60f96 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/template-single-text-blog.php @@ -0,0 +1,49 @@ + + + + +
+ +
+ + + +
+ + + + +
+ +
+ + + +
+ +
+ + +
+ +
+ + +
+ +
+ + diff --git a/wp-content/themes/twentytwentyfive/patterns/template-single-vertical-header-blog.php b/wp-content/themes/twentytwentyfive/patterns/template-single-vertical-header-blog.php new file mode 100644 index 0000000..9d8c310 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/template-single-vertical-header-blog.php @@ -0,0 +1,100 @@ + + +
+ +
+ +
+ + +
+ +
+ +
+ +
+ + +
+ + +
+ + + +
+ +
+ + + +
+ +
+ +
+ + +
+ + +
+ + + +
+ + + +
+ +
+ +
+ + +
+ +
+ +
+ + + +
+ +
+ + +
+ + +
+ +
+ + +
+ +
+ +
+ +
+ + + diff --git a/wp-content/themes/twentytwentyfive/patterns/testimonials-2-col.php b/wp-content/themes/twentytwentyfive/patterns/testimonials-2-col.php new file mode 100644 index 0000000..7f33f2c --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/testimonials-2-col.php @@ -0,0 +1,79 @@ + + +
+ +
+ +
+ +
+ +
+ +
<?php echo esc_attr_x( 'Picture of a person', 'Alt text for testimonial image.', 'twentytwentyfive' ); ?>
+ +
+ + + +
+ +
+ +

+ + Atlanta, GA', 'Sample testimonial citation.', 'twentytwentyfive' ) ); ?> +
+ +
+ +
+ +
+ + + +
+ +
+ +
+ +
<?php echo esc_attr_x( 'Picture of a person', 'Alt text for testimonial image.', 'twentytwentyfive' ); ?>
+ +
+ + + +
+ +
+ +

+ + Springfield, IL', 'Sample testimonial citation.', 'twentytwentyfive' ) ); ?> +
+ +
+ +
+ +
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/testimonials-6-col.php b/wp-content/themes/twentytwentyfive/patterns/testimonials-6-col.php new file mode 100644 index 0000000..e3bb055 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/testimonials-6-col.php @@ -0,0 +1,127 @@ + + +
+ +

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

+ +
+ + Springfield, IL', 'Sample testimonial citation.', 'twentytwentyfive' ) ); ?> +
+ +
+ + + +
+ +
+ +
+ +

+ +
+ + Springfield, IL', 'Sample testimonial citation.', 'twentytwentyfive' ) ); ?> +
+ +
+ + + +
+ +
+ +
+ +

+ +
+ + Springfield, IL', 'Sample testimonial citation.', 'twentytwentyfive' ) ); ?> +
+ +
+ +
+ + + +
+ +
+ +
+ +
+ +

+ +
+ + Springfield, IL', 'Sample testimonial citation.', 'twentytwentyfive' ) ); ?> +
+ +
+ + + +
+
+ +
+ +

+ +
+ Springfield, IL', 'Sample testimonial citation.', 'twentytwentyfive' ) ); ?> +
+ +
+ + + +
+
+ +
+ +

+ +
+ Springfield, IL', 'Sample testimonial citation.', 'twentytwentyfive' ) ); ?> +
+ +
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/testimonials-large.php b/wp-content/themes/twentytwentyfive/patterns/testimonials-large.php new file mode 100644 index 0000000..b9d727c --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/testimonials-large.php @@ -0,0 +1,54 @@ + + +
+ +
+ +
+ +
+ +

+ + + +
+ +
+ +

+ +
+ + Atlanta, GA', 'Sample testimonial citation.', 'twentytwentyfive' ) ); ?> +
+ +
+ +
+ + + +
+ +
<?php echo esc_attr_x( 'Picture of a person typing on a typewriter.', 'Alt text for testimonial image.', 'twentytwentyfive' ); ?>
+ +
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/text-faqs.php b/wp-content/themes/twentytwentyfive/patterns/text-faqs.php new file mode 100644 index 0000000..fd8397b --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/text-faqs.php @@ -0,0 +1,98 @@ + + +
+ +
+ +

+ + + +
+ +
+ +
+ +

+ + + +

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

+ + + +

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

+ + + +

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

+ + + +

+ +
+ +
+ +
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/patterns/vertical-header.php b/wp-content/themes/twentytwentyfive/patterns/vertical-header.php new file mode 100644 index 0000000..52cbf9a --- /dev/null +++ b/wp-content/themes/twentytwentyfive/patterns/vertical-header.php @@ -0,0 +1,29 @@ + + +
+ +
+ +
+ + +
+ +
+ +
+ diff --git a/wp-content/themes/twentytwentyfive/readme.txt b/wp-content/themes/twentytwentyfive/readme.txt new file mode 100644 index 0000000..8b2efea --- /dev/null +++ b/wp-content/themes/twentytwentyfive/readme.txt @@ -0,0 +1,272 @@ +=== Twenty Twenty-Five === +Contributors: wordpressdotorg +Requires at least: 6.7 +Tested up to: 6.8 +Requires PHP: 7.2 +Stable tag: 1.3 +License: GPLv2 or later +License URI: http://www.gnu.org/licenses/gpl-2.0.html + +== Description == + +Twenty Twenty-Five emphasizes simplicity and adaptability. It offers flexible design options, supported by a variety of patterns for different page types, such as services and landing pages, making it ideal for building personal blogs, professional portfolios, online magazines, or business websites. Its templates cater to various blog styles, from text-focused to image-heavy layouts. Additionally, it supports international typography and diverse color palettes, ensuring accessibility and customization for users worldwide. + + +== Changelog == + += 1.3 = +* Released: July 15, 2025 + +https://wordpress.org/documentation/article/twenty-twenty-five-changelog/#Version_1.3 + += 1.2 = +* Released: April 15, 2025 + +https://wordpress.org/documentation/article/twenty-twenty-five-changelog/#Version_1.2 + += 1.1 = +* Released: February 11, 2025 + +https://wordpress.org/documentation/article/twenty-twenty-five-changelog/#Version_1.1 + += 1.0 = +* Released: November 13, 2024 + +https://wordpress.org/documentation/article/twenty-twenty-five-changelog/#Version_1.0 + +== Copyright == + +Twenty Twenty-Five WordPress Theme, (C) 2024-2025 WordPress.org and contributors. +Twenty Twenty-Five is distributed under the terms of the GNU GPL. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +This theme incorporates code from: + +Twenty Twenty-Four WordPress Theme, (C) 2023 WordPress.org +License: GPLv2 or later. License URI: http://www.gnu.org/licenses/gpl-2.0.html + + +This theme bundles the following third-party resources: + +=== Fonts === +.ttf files downloaded from fonts.google.com have been converted to .woff2 using +https://github.com/google/woff2 + + +Fira Code Font +Copyright (c) 2014, The Fira Code Project Authors +License: SIL Open Font License, 1.1, https://opensource.org/licenses/OFL-1.1 +Reference: https://github.com/tonsky/FiraCode +Source: https://fonts.google.com/specimen/Fira+Code + +Manrope Font +Copyright (c) 2018 The Manrope Project Authors +License: SIL Open Font License, 1.1, https://opensource.org/licenses/OFL-1.1 +Reference: https://github.com/sharanda/manrope +Source: https://fonts.google.com/specimen/Manrope + +Vollkorn Font +Copyright (c) 2005–2018, Friedrich Althausen +License: SIL Open Font License, 1.1, https://opensource.org/licenses/OFL-1.1 +Reference: https://github.com/FAlthausen/Vollkorn-Typeface +Source: https://fonts.google.com/specimen/Vollkorn + +Fira Sans Font +Digitized data copyright (c) 2012-2015, The Mozilla Foundation and Telefonica S.A. +License: SIL Open Font License, 1.1, https://opensource.org/licenses/OFL-1.1 +Reference: https://github.com/mozilla/Fira +Source: https://fonts.google.com/specimen/Fira+Sans + +Platypi Font +License: SIL Open Font License, 1.1, https://opensource.org/licenses/OFL-1.1 +Reference: https://github.com/d-sargent/platypi +Source: https://fonts.google.com/specimen/Platypi + +Ysabeau Office Font +License: SIL Open Font License, 1.1, https://opensource.org/licenses/OFL-1.1 +Reference: https://github.com/CatharsisFonts/Ysabeau +Source: https://fonts.google.com/specimen/Ysabeau+Office + +Literata Font +License: SIL Open Font License, 1.1, https://opensource.org/licenses/OFL-1.1 +Reference: https://github.com/googlefonts/literata +Source: https://fonts.google.com/specimen/Literata + +Roboto Slab Font +License: SIL Open Font License, 1.1, https://opensource.org/licenses/OFL-1.1 +Reference: hhttps://github.com/googlefonts/robotoslab +Source: https://fonts.google.com/specimen/Roboto+Slab + +Beiruti Font +License: SIL Open Font License, 1.1, https://opensource.org/licenses/OFL-1.1 +Reference: https://github.com/googlefonts/beiruti +Source: https://fonts.google.com/specimen/Beiruti + +=== Images === + +Northern Buttercups. +Free public domain CC0 image. +northern-buttercups-flowers.webp +https://www.rawpixel.com/image/8802603 + +License: CC0 https://creativecommons.org/publicdomain/zero/1.0/ +Small totara tree on ridge above Long Point, Porirua Harbour, by Leslie Adkin. +Free public domain CC0 image. +404-image.webp +https://www.rawpixel.com/image/13029755 + +Old gray paris map. +Free public domain CC0 image. +location.webp +https://www.rawpixel.com/image/6033837 + +Delphinium (Larkspur). +Free public domain CC0 image. +delphinium-flowers.webp +https://www.rawpixel.com/image/2224378 + +Campanula Alliariifolia (Cornish Bellflower). +Free public domain CC0 image. +campanula-alliariifolia-flower.webp +https://www.rawpixel.com/image/2222755 + +Centaurea Ruthenica(Star Thristle). +Free public domain CC0 image. +star-thristle-flower.webp +https://www.rawpixel.com/image/2211732 + +Botany flowers. +Free public domain CC0 image. +botany-flowers.webp +botany-flowers-closeup.webp +https://www.rawpixel.com/image/8812207 + +Person typing on a typewriter. +Free public domain CC0 image. +typewriter.webp +https://www.rawpixel.com/image/12240004/photo-image-face-person-technology + +Woman wearing a traditional nurse's cap, photographed from behind. +nurse.webp +Free public domain CC0 image. +https://www.rawpixel.com/image/8782633/photo-image-person-white + +Woman splashing water, at Lake George. +woman-splashing-water.webp +Free public domain CC0 image. +https://www.rawpixel.com/image/9758986/photo-image-people-art-vintage + +Man in hat, standing in front of a building. +man-in-hat.webp +Free public domain CC0 image. +https://www.slam.org/collection/objects/62642/ + +African Woman by Pascal Sébah and Jean Pascal Sébah +Free public domain CC0 image. +agenda-img-4.webp +https://www.rawpixel.com/image/14263497 + +Two Girls, Mill Workers by Lewis W Hine. +Free public domain CC0 image. +link-in-bio-background.webp +https://www.rawpixel.com/image/14265869 + +Cliff Palace, Mesa Verde National Park, Colorado (vertical orientation) +Free public domain CC0 image. +poster-image-background.webp +ruins-image.webp +https://www.rawpixel.com/image/8802835 + +Flower meadow in Llano, Texas. +Free public domain CC0 image. +coming-soon-bg-image.webp +flower-meadow-square.webp +services-subscriber-photo.webp +https://www.rawpixel.com/image/8800058 + +Hibiscus flower. +Free public domain CC0 image. +grid-flower-1.webp +red-hibiscus-closeup.webp +https://www.rawpixel.com/image/8799471 + +Phacelia tanacetifolia (Lacy Phacelia) enlarged 4 times from Urformen der Kunst (1928) by Karl Blossfeldt. +Free public domain CC0 image. +grid-flower-2.webp +https://www.rawpixel.com/image/2222743 + +At Hawaiian Greenhouse, Inc, near Pahoa, anthuriums grow under a sun screen. +Free public domain CC0 image. +category-anthuriums.webp +https://www.rawpixel.com/image/8799473 + +Sunflower +Free public domain CC0 image. +category-sunflowers.webp +https://www.rawpixel.com/image/8799614 + +Detail of cactus "Saguaros, Saguro National Monument," Arizona. Photographer: Adams, Ansel, 1902-1984 +Free public domain CC0 image. +category-cactus.webp +https://www.rawpixel.com/image/8799351 + +Vash Gon - Jicarilla by Edward S Curtis. +Free public domain CC0 image. +vash-gon-square.webp +https://www.rawpixel.com/image/14262822 + +One of the 40 Or More Species of Coral at John Pennekamp Coral Reef State Park, a Few Miles Off Key Largo. +Free public domain CC0 image. +coral-square.webp +https://www.rawpixel.com/image/8799931 + +Parthenon op de Akropolis in Athene (westzijde) (c. 1880 - c. 1890) by Rhomaides Frères. +Free public domain CC0 image. +parthenon-square.webp +https://www.rawpixel.com/image/13759051 + +Near East Dallas Creek, 05/1972. Photographer: Norton, Boyd. +Free public domain CC0 image. +dallas-creek-square.webp +https://www.rawpixel.com/image/8802688 + +Marshland birds at the Lake Havasu National Wildlife Refuge. +Free public domain CC0 image. +marshland-birds-square.webp +https://www.rawpixel.com/image/8799403 + +Photograph - New York [Portrait - Washington Square] by Paul Strand. +Free public domain CC0 image. +hero-podcast.webp +https://www.rawpixel.com/image/14264288 + +Evening Breeze by Asahachi Kono. +Free public domain CC0 image. +link-in-bio-image +https://www.rawpixel.com/image/14262995 + +Bust by Mathew brady. +Free public domain CC0 image. +book-image-landing.webp +book-image.webp +https://www.rawpixel.com/image/8799536 +Book template by Beatriz Fialho, public domain. + +Flora of Akaka Falls State Park. +Free public domain CC0 image. +akaka-falls-state-park-flora.webp +https://www.rawpixel.com/image/8802845 + +Closeup of plantlife in the Malibu Canyon area of the Santa Monica Mountains. +Free public domain CC0 image. +malibu-plantlife.webp +https://www.rawpixel.com/image/8799918 diff --git a/wp-content/themes/twentytwentyfive/screenshot.png b/wp-content/themes/twentytwentyfive/screenshot.png new file mode 100644 index 0000000..2dd45d3 Binary files /dev/null and b/wp-content/themes/twentytwentyfive/screenshot.png differ diff --git a/wp-content/themes/twentytwentyfive/style.css b/wp-content/themes/twentytwentyfive/style.css new file mode 100644 index 0000000..ac150b9 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/style.css @@ -0,0 +1,61 @@ +/* +Theme Name: Twenty Twenty-Five +Theme URI: https://wordpress.org/themes/twentytwentyfive/ +Author: the WordPress team +Author URI: https://wordpress.org +Description: Twenty Twenty-Five emphasizes simplicity and adaptability. It offers flexible design options, supported by a variety of patterns for different page types, such as services and landing pages, making it ideal for building personal blogs, professional portfolios, online magazines, or business websites. Its templates cater to various blog styles, from text-focused to image-heavy layouts. Additionally, it supports international typography and diverse color palettes, ensuring accessibility and customization for users worldwide. +Requires at least: 6.7 +Tested up to: 6.8 +Requires PHP: 7.2 +Version: 1.3 +License: GNU General Public License v2 or later +License URI: http://www.gnu.org/licenses/gpl-2.0.html +Text Domain: twentytwentyfive +Tags: one-column, custom-colors, custom-menu, custom-logo, editor-style, featured-images, full-site-editing, block-patterns, rtl-language-support, sticky-post, threaded-comments, translation-ready, wide-blocks, block-styles, style-variations, accessibility-ready, blog, portfolio, news +*/ + +/* + * Link styles + * https://github.com/WordPress/gutenberg/issues/42319 + */ +a { + text-decoration-thickness: 1px !important; + text-underline-offset: .1em; +} + +/* Focus styles */ +:where(.wp-site-blocks *:focus) { + outline-width: 2px; + outline-style: solid; +} + +/* Increase the bottom margin on submenus, so that the outline is visible. */ +.wp-block-navigation .wp-block-navigation-submenu .wp-block-navigation-item:not(:last-child) { + margin-bottom: 3px; +} + +/* Increase the outline offset on the parent menu items, so that the outline does not touch the text. */ +.wp-block-navigation .wp-block-navigation-item .wp-block-navigation-item__content { + outline-offset: 4px; +} + +/* Remove outline offset from the submenus, otherwise the outline is visible outside the submenu container. */ +.wp-block-navigation .wp-block-navigation-item ul.wp-block-navigation__submenu-container .wp-block-navigation-item__content { + outline-offset: 0; +} + +/* + * Progressive enhancement to reduce widows and orphans + * https://github.com/WordPress/gutenberg/issues/55190 + */ +h1, h2, h3, h4, h5, h6, blockquote, caption, figcaption, p { + text-wrap: pretty; +} + +/* + * Change the position of the more block on the front, by making it a block level element. + * https://github.com/WordPress/gutenberg/issues/65934 +*/ +.more-link { + display: block; +} diff --git a/wp-content/themes/twentytwentyfive/styles/01-evening.json b/wp-content/themes/twentytwentyfive/styles/01-evening.json new file mode 100644 index 0000000..6b9a11a --- /dev/null +++ b/wp-content/themes/twentytwentyfive/styles/01-evening.json @@ -0,0 +1,126 @@ +{ + "$schema": "https://schemas.wp.org/wp/6.7/theme.json", + "version": 3, + "title": "Evening", + "settings": { + "color": { + "palette": [ + { + "color": "#1B1B1B", + "name": "Base", + "slug": "base" + }, + { + "color": "#F0F0F0", + "name": "Contrast", + "slug": "contrast" + }, + { + "color": "#786D0A", + "name": "Accent 1", + "slug": "accent-1" + }, + { + "color": "#442369", + "name": "Accent 2", + "slug": "accent-2" + }, + { + "color": "#D1D0EA", + "name": "Accent 3", + "slug": "accent-3" + }, + { + "color": "#CBCBCB", + "name": "Accent 4", + "slug": "accent-4" + }, + { + "color": "#353535", + "name": "Accent 5", + "slug": "accent-5" + }, + { + "color": "#FFFFFF33", + "name": "Accent 6", + "slug": "accent-6" + } + ] + } + }, + "styles": { + "color": { + "text": "var:preset|color|accent-4" + }, + "blocks": { + "core/button": { + "variations": { + "outline": { + "spacing": { + "padding": { + "bottom": "0.6rem", + "left": "1.6rem", + "right": "1.6rem", + "top": "0.6rem" + } + } + } + } + } + }, + "elements": { + "button": { + "color": { + "background": "var:preset|color|contrast", + "text": "var:preset|color|base" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--contrast) 85%, transparent)", + "text": "var:preset|color|base" + } + }, + "spacing": { + "padding": { + "bottom": "0.6rem", + "left": "1.6rem", + "right": "1.6rem", + "top": "0.6rem" + } + } + } + }, + "variations": { + "section-2": { + "elements": { + "button": { + "color": { + "background": "var:preset|color|base", + "text": "var:preset|color|contrast" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--base) 85%, transparent)" + } + } + } + } + }, + "section-4": { + "elements": { + "button": { + "color": { + "background": "var:preset|color|accent-2", + "text": "var:preset|color|contrast" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--accent-2) 85%, transparent)" + } + } + } + } + } + } + } +} diff --git a/wp-content/themes/twentytwentyfive/styles/02-noon.json b/wp-content/themes/twentytwentyfive/styles/02-noon.json new file mode 100644 index 0000000..32bed51 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/styles/02-noon.json @@ -0,0 +1,461 @@ +{ + "$schema": "https://schemas.wp.org/wp/6.7/theme.json", + "version": 3, + "title": "Noon", + "settings": { + "color": { + "palette": [ + { + "color": "#F8F7F5", + "name": "Base", + "slug": "base" + }, + { + "color": "#191919", + "name": "Contrast", + "slug": "contrast" + }, + { + "color": "#FFFFFF", + "name": "Accent 1", + "slug": "accent-1" + }, + { + "color": "#F5B684", + "name": "Accent 2", + "slug": "accent-2" + }, + { + "color": "#191919", + "name": "Accent 3", + "slug": "accent-3" + }, + { + "color": "#5F5F5F", + "name": "Accent 4", + "slug": "accent-4" + }, + { + "color": "#F1EEE9", + "name": "Accent 5", + "slug": "accent-5" + }, + { + "color": "#19191933", + "name": "Accent 6", + "slug": "accent-6" + } + ] + }, + "typography": { + "fontFamilies": [ + { + "name": "Beiruti", + "slug": "beiruti", + "fontFamily": "Beiruti, sans-serif", + "fontFace": [ + { + "fontFamily": "Beiruti", + "fontStyle": "normal", + "fontWeight": "200 900", + "src": [ + "file:./assets/fonts/beiruti/Beiruti-VariableFont_wght.woff2" + ] + } + ] + }, + { + "name": "Literata", + "slug": "literata", + "fontFamily": "Literata, serif", + "fontFace": [ + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-ExtraLight.woff2" + ], + "fontWeight": "200", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-ExtraLightItalic.woff2" + ], + "fontWeight": "200", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-Light.woff2" + ], + "fontWeight": "300", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-LightItalic.woff2" + ], + "fontWeight": "300", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-Regular.woff2" + ], + "fontWeight": "400", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-RegularItalic.woff2" + ], + "fontWeight": "400", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-Medium.woff2" + ], + "fontWeight": "500", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-MediumItalic.woff2" + ], + "fontWeight": "500", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-SemiBold.woff2" + ], + "fontWeight": "600", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-SemiBoldItalic.woff2" + ], + "fontWeight": "600", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-Bold.woff2" + ], + "fontWeight": "700", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-BoldItalic.woff2" + ], + "fontWeight": "700", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-ExtraBold.woff2" + ], + "fontWeight": "800", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-ExtraBoldItalic.woff2" + ], + "fontWeight": "800", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-Black.woff2" + ], + "fontWeight": "900", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-BlackItalic.woff2" + ], + "fontWeight": "900", + "fontStyle": "italic", + "fontFamily": "Literata" + } + ] + } + ], + "fontSizes": [ + { + "fluid": false, + "name": "Small", + "size": "0.9rem", + "slug": "small" + }, + { + "fluid": { + "max": "1.2rem", + "min": "1rem" + }, + "name": "Medium", + "size": "1rem", + "slug": "medium" + }, + { + "fluid": { + "max": "1.8rem", + "min": "1.6rem" + }, + "name": "Large", + "size": "1.6rem", + "slug": "large" + }, + { + "fluid": { + "max": "2.2rem", + "min": "1.8em" + }, + "name": "Extra Large", + "size": "1.8rem", + "slug": "x-large" + }, + { + "fluid": { + "max": "2.8rem", + "min": "2rem" + }, + "name": "Extra Extra Large", + "size": "2rem", + "slug": "xx-large" + } + ] + } + }, + "styles": { + "color": { + "text": "var:preset|color|accent-4" + }, + "typography": { + "fontFamily": "var:preset|font-family|literata", + "fontSize": "var:preset|font-size|medium", + "letterSpacing": "-0.01em", + "lineHeight": "1.6" + }, + "blocks": { + "core/button": { + "border": { + "color": "var:preset|color|contrast" + }, + "shadow": "var:preset|shadow|natural", + "spacing": { + "padding": { + "bottom": "0.6rem", + "left": "1.6rem", + "right": "1.6rem", + "top": "0.6rem" + } + }, + "typography": { + "fontFamily": "var:preset|font-family|beiruti" + }, + "variations": { + "outline": { + "shadow": "none", + "spacing": { + "padding": { + "bottom": "0.6rem", + "left": "1.6rem", + "right": "1.6rem", + "top": "0.6rem" + } + } + } + } + }, + "core/list": { + "typography": { + "lineHeight": "1.3" + } + }, + "core/loginout": { + "typography": { + "fontSize": "var:preset|font-size|medium" + } + }, + "core/post-terms": { + "typography": { + "fontWeight": "300" + } + }, + "core/post-title": { + "color": { + "text": "var:preset|color|accent-3" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "core/pullquote": { + "color": { + "text": "var:preset|color|accent-3" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + } + }, + "typography": { + "fontFamily": "var:preset|font-family|beiruti", + "fontWeight": "500", + "lineHeight": "1" + } + }, + "core/quote": { + "typography": { + "fontSize": "var:preset|font-size|medium" + } + }, + "core/query-pagination": { + "typography": { + "fontWeight": "300" + } + }, + "core/query-title": { + "color": { + "text": "var:preset|color|accent-3" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "core/site-tagline": { + "typography": { + "fontSize": "var:preset|font-size|small" + } + }, + "core/site-title": { + "typography": { + "fontFamily": "var:preset|font-family|beiruti", + "fontWeight": "600", + "letterSpacing": "2.4px", + "textTransform": "uppercase" + } + } + }, + "elements": { + "button": { + "color": { + "background": "var:preset|color|contrast", + "text": "var:preset|color|base" + } + }, + "h4": { + "typography": { + "fontSize": "var:preset|font-size|large" + } + }, + "h5": { + "typography": { + "fontSize": "var:preset|font-size|medium", + "letterSpacing": "0px" + } + }, + "h6": { + "typography": { + "fontSize": "var:preset|font-size|small" + } + }, + "heading": { + "color": { + "text": "var:preset|color|accent-3" + }, + "typography": { + "fontFamily": "var:preset|font-family|beiruti", + "fontWeight": "500", + "letterSpacing": "-0.02em", + "lineHeight": "1.02" + } + }, + "link": { + "color": { + "text": "currentColor" + } + } + }, + "variations": { + "section-4": { + "color": { + "text": "var:preset|color|accent-2" + }, + "elements": { + "button": { + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--accent-2) 85%, transparent)" + } + } + }, + "heading": { + "color": { + "text": "currentColor" + } + }, + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "section-5": { + "color": { + "text": "var:preset|color|base" + }, + "elements": { + "button": { + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--base) 85%, transparent)" + } + } + }, + "heading": { + "color": { + "text": "var:preset|color|base" + } + }, + "link": { + "color": { + "text": "currentColor" + } + } + } + } + } + } +} diff --git a/wp-content/themes/twentytwentyfive/styles/03-dusk.json b/wp-content/themes/twentytwentyfive/styles/03-dusk.json new file mode 100644 index 0000000..bbcdf63 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/styles/03-dusk.json @@ -0,0 +1,396 @@ +{ + "$schema": "https://schemas.wp.org/wp/6.7/theme.json", + "version": 3, + "title": "Dusk", + "settings": { + "color": { + "palette": [ + { + "color": "#E2E2E2", + "name": "Base", + "slug": "base" + }, + { + "color": "#3B3B3B", + "name": "Contrast", + "slug": "contrast" + }, + { + "color": "#F5EDFF", + "name": "Accent 1", + "slug": "accent-1" + }, + { + "color": "#650DD4", + "name": "Accent 2", + "slug": "accent-2" + }, + { + "color": "#191919", + "name": "Accent 3", + "slug": "accent-3" + }, + { + "color": "#5F5F5F", + "name": "Accent 4", + "slug": "accent-4" + }, + { + "color": "#DBDBDB", + "name": "Accent 5", + "slug": "accent-5" + }, + { + "color": "#3B3B3B33", + "name": "Accent 6", + "slug": "accent-6" + } + ] + }, + "custom": { + "color": { + "accent-2-opacity-20": "#650DD433" + } + }, + "typography": { + "fontFamilies": [ + { + "name": "Vollkorn", + "slug": "vollkorn", + "fontFamily": "Vollkorn, serif", + "fontFace": [ + { + "src": [ + "file:./assets/fonts/vollkorn/Vollkorn-Italic-VariableFont_wght.woff2" + ], + "fontWeight": "400 900", + "fontStyle": "italic", + "fontFamily": "Vollkorn" + }, + { + "src": [ + "file:./assets/fonts/vollkorn/Vollkorn-VariableFont_wght.woff2" + ], + "fontWeight": "400 900", + "fontStyle": "normal", + "fontFamily": "Vollkorn" + } + ] + }, + { + "name": "Fira Code", + "slug": "fira-code", + "fontFamily": "\"Fira Code\", monospace", + "fontFace": [ + { + "src": [ + "file:./assets/fonts/fira-code/FiraCode-VariableFont_wght.woff2" + ], + "fontWeight": "300 700", + "fontStyle": "normal", + "fontFamily": "\"Fira Code\"" + } + ] + } + ] + } + }, + "styles": { + "typography": { + "fontFamily": "var:preset|font-family|fira-code", + "fontSize": "var:preset|font-size|medium", + "letterSpacing": "-0.18px", + "lineHeight": "1.5" + }, + "blocks": { + "core/code": { + "color": { + "text": "var:preset|color|black", + "background": "var:preset|color|accent-5" + } + }, + "core/paragraph": { + "elements": { + "link": { + "color": { + "text": "var:preset|color|accent-2" + } + } + } + }, + "core/post-author-name": { + "typography": { + "fontWeight": "300" + }, + "color": { + "text": "var:preset|color|accent-2" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "core/post-terms": { + "typography": { + "fontWeight": "300" + }, + "color": { + "text": "var:preset|color|accent-2" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "core/post-title": { + "typography": { + "fontWeight": "400", + "letterSpacing": "-0.96px" + }, + "elements": { + "link": { + "color": { + "text": "var:preset|color|accent-3" + } + } + } + }, + "core/pullquote": { + "color": { + "text": "var:preset|color|black" + }, + "typography": { + "fontFamily": "var:preset|font-family|vollkorn", + "fontSize": "var:preset|font-size|x-large", + "fontWeight": "400" + }, + "elements": { + "cite": { + "typography": { + "fontFamily": "var:preset|font-family|fira-code", + "fontWeight": "300", + "letterSpacing": "-0.14px" + }, + "color": { + "text": "var:preset|color|contrast" + } + } + } + }, + "core/quote": { + "color": { + "text": "var:preset|color|black" + }, + "typography": { + "fontFamily": "var:preset|font-family|fira-code", + "fontWeight": "500", + "letterSpacing": "-0.18px" + } + }, + "core/site-title": { + "color": { + "text": "var:preset|color|accent-3" + }, + "typography": { + "fontFamily": "var:preset|font-family|vollkorn", + "fontSize": "var:preset|font-size|x-large" + }, + "elements": { + "link": { + "color": { + "text": "var:preset|color|accent-3" + } + } + } + } + }, + "elements": { + "button": { + "typography": { + "fontFamily": "var:preset|font-family|fira-code", + "fontSize": "var:preset|font-size|medium", + "fontWeight": "400", + "letterSpacing": "-0.36px" + }, + "color": { + "text": "var:preset|color|base", + "background": "var:preset|color|accent-2" + }, + "border": { + "radius": "4px", + "color": "transparent" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--accent-2) 85%, transparent)" + } + } + }, + "heading": { + "color": { + "text": "var:preset|color|accent-3" + }, + "typography": { + "fontFamily": "var:preset|font-family|vollkorn" + } + }, + "h1": { + "typography": { + "fontSize": "48px", + "letterSpacing": "-0.96px;" + } + }, + "h2": { + "typography": { + "fontSize": "38px", + "letterSpacing": "-0.96px" + } + }, + "h3": { + "typography": { + "fontSize": "32px", + "letterSpacing": "-0.64px" + } + }, + "h4": { + "typography": { + "fontSize": "28px", + "letterSpacing": "-0.56px" + } + }, + "h5": { + "typography": { + "fontSize": "24px", + "letterSpacing": "-0.48px" + } + }, + "link": { + "color": { + "text": "var:preset|color|accent-3" + } + } + }, + "variations": { + "post-terms-1": { + "elements": { + "link": { + "border": { + "color": "var:custom|color|accent-2-opacity-20", + "radius": "4px", + "width": "0.8px", + "style": "solid" + } + } + } + }, + "section-1": { + "elements": { + "link": { + "color": { + "text": "var:preset|color|accent-3" + } + } + } + }, + "section-2": { + "color": { + "text": "var:preset|color|base" + }, + "elements": { + "button": { + "color": { + "background": "var:preset|color|accent-3", + "text": "var:preset|color|base" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--accent-3) 85%, transparent)" + } + } + }, + "link": { + "color": { + "text": "currentColor" + } + }, + "heading": { + "color": { + "text": "currentColor" + } + } + } + }, + "section-3": { + "color": { + "text": "var:preset|color|accent-2" + }, + "elements": { + "heading": { + "color": { + "text": "currentColor" + } + } + } + }, + "section-4": { + "color": { + "text": "var:preset|color|base" + }, + "elements": { + "button": { + "color": { + "text": "var:preset|color|base" + }, + ":hover": { + "color": { + "text": "var:preset|color|base" + } + } + }, + "link": { + "color": { + "text": "currentColor" + } + }, + "heading": { + "color": { + "text": "currentColor" + } + } + } + }, + "section-5": { + "elements": { + "button": { + "color": { + "background": "var:preset|color|accent-2", + "text": "var:preset|color|base" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--accent-2) 85%, transparent)", + "text": "var:preset|color|base" + } + } + }, + "heading": { + "color": { + "text": "var:preset|color|base" + } + }, + "link": { + "color": { + "text": "var:preset|color|base" + } + } + } + } + } + } +} diff --git a/wp-content/themes/twentytwentyfive/styles/04-afternoon.json b/wp-content/themes/twentytwentyfive/styles/04-afternoon.json new file mode 100644 index 0000000..d1edf01 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/styles/04-afternoon.json @@ -0,0 +1,302 @@ +{ + "$schema": "https://schemas.wp.org/wp/6.7/theme.json", + "version": 3, + "title": "Afternoon", + "settings": { + "color": { + "palette": [ + { + "color": "#DAE7BD", + "name": "Base", + "slug": "base" + }, + { + "color": "#516028", + "name": "Contrast", + "slug": "contrast" + }, + { + "color": "#C7F642", + "name": "Accent 1", + "slug": "accent-1" + }, + { + "color": "#EBF6D3", + "name": "Accent 2", + "slug": "accent-2" + }, + { + "color": "#303D10", + "name": "Accent 3", + "slug": "accent-3" + }, + { + "color": "#516028", + "name": "Accent 4", + "slug": "accent-4" + }, + { + "color": "#EBF6D3", + "name": "Accent 5", + "slug": "accent-5" + }, + { + "color": "#51602833", + "name": "Accent 6", + "slug": "accent-6" + } + ] + }, + "typography": { + "fontFamilies": [ + { + "name": "Platypi", + "slug": "platypi", + "fontFamily": "Platypi", + "fontFace": [ + { + "fontFamily": "Platypi", + "fontStyle": "normal", + "fontWeight": "300 800", + "src": [ + "file:./assets/fonts/platypi/Platypi-VariableFont_wght.woff2" + ] + }, + { + "fontFamily": "Platypi", + "fontStyle": "italic", + "fontWeight": "300 800", + "src": [ + "file:./assets/fonts/platypi/Platypi-Italic-VariableFont_wght.woff2" + ] + } + ] + }, + { + "name": "Ysabeau Office", + "slug": "ysabeau-office", + "fontFamily": "\"Ysabeau Office\", sans-serif", + "fontFace": [ + { + "src": [ + "file:./assets/fonts/ysabeau-office/YsabeauOffice-VariableFont_wght.woff2" + ], + "fontWeight": "100 900", + "fontStyle": "normal", + "fontFamily": "\"Ysabeau Office\"" + }, + { + "src": [ + "file:./assets/fonts/ysabeau-office/YsabeauOffice-Italic-VariableFont_wght.woff2" + ], + "fontWeight": "100 900", + "fontStyle": "italic", + "fontFamily": "\"Ysabeau Office\"" + } + ] + } + ], + "fontSizes": [ + { + "fluid": false, + "name": "Small", + "size": "0.875rem", + "slug": "small" + }, + { + "fluid": { + "max": "1.125rem", + "min": "1rem" + }, + "name": "Medium", + "size": "1rem", + "slug": "medium" + }, + { + "fluid": { + "max": "1.375rem", + "min": "1.125rem" + }, + "name": "Large", + "size": "1.38rem", + "slug": "large" + }, + { + "fluid": { + "max": "1.8rem", + "min": "1.4rem" + }, + "name": "Extra Large", + "size": "1.4rem", + "slug": "x-large" + }, + { + "fluid": { + "max": "2.6rem", + "min": "2rem" + }, + "name": "Extra Extra Large", + "size": "2rem", + "slug": "xx-large" + } + ] + } + }, + "styles": { + "typography": { + "fontFamily": "var:preset|font-family|ysabeau-office", + "letterSpacing": "-0.22px", + "lineHeight": "1.5" + }, + "blocks": { + "core/button": { + "border": { + "radius": "0px" + }, + "spacing": { + "padding": { + "bottom": "1rem", + "left": "1.6rem", + "right": "1.6rem", + "top": "1rem" + } + }, + "variations": { + "outline": { + "spacing": { + "padding": { + "bottom": "1rem", + "left": "1.6rem", + "right": "1.6rem", + "top": "1rem" + } + } + } + } + }, + "core/code": { + "typography": { + "letterSpacing": "0px" + } + }, + "core/heading": { + "typography": { + "lineHeight": "1.2" + } + }, + "core/list": { + "typography": { + "lineHeight": "1.3" + } + }, + "core/loginout": { + "typography": { + "fontSize": "var:preset|font-size|medium" + } + }, + "core/post-terms": { + "typography": { + "fontWeight": "400" + } + }, + "core/pullquote": { + "typography": { + "fontFamily": "var:preset|font-family|platypi", + "letterSpacing": "-0.01em", + "lineHeight": "1.1" + } + }, + "core/quote": { + "typography": { + "fontWeight": "300" + } + }, + "core/site-title": { + "typography": { + "fontFamily": "var:preset|font-family|ysabeau-office", + "fontSize": "var:preset|font-size|large", + "letterSpacing": "1.44px", + "textTransform": "uppercase" + } + } + }, + "elements": { + "button": { + "typography": { + "fontFamily": "var:preset|font-family|ysabeau-office", + "fontWeight": "600", + "letterSpacing": "1.44px", + "textTransform": "uppercase" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--contrast) 85%, black)" + } + } + }, + "heading": { + "typography": { + "fontFamily": "var:preset|font-family|platypi" + } + }, + "h5": { + "typography": { + "fontSize": "var:preset|font-size|medium", + "letterSpacing": "normal" + } + }, + "h6": { + "typography": { + "fontSize": "var:preset|font-size|small", + "fontWeight": "400", + "fontStyle": "initial", + "letterSpacing": "initial", + "textTransform": "initial" + } + } + }, + "variations": { + "section-2": { + "color": { + "background": "var:preset|color|accent-3", + "text": "var:preset|color|accent-1" + }, + "elements": { + "button": { + "color": { + "background": "var:preset|color|accent-1", + "text": "var:preset|color|accent-3" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--accent-1) 85%, transparent)" + } + } + } + } + }, + "section-4": { + "elements": { + "button": { + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--accent-2) 85%, transparent)" + } + } + } + } + }, + "section-5": { + "elements": { + "button": { + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--base) 90%, transparent)" + } + } + } + } + } + } + } +} diff --git a/wp-content/themes/twentytwentyfive/styles/05-twilight.json b/wp-content/themes/twentytwentyfive/styles/05-twilight.json new file mode 100644 index 0000000..833b4f3 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/styles/05-twilight.json @@ -0,0 +1,254 @@ +{ + "$schema": "https://schemas.wp.org/wp/6.7/theme.json", + "version": 3, + "title": "Twilight", + "settings": { + "color": { + "palette": [ + { + "color": "#131313", + "name": "Base", + "slug": "base" + }, + { + "color": "#FFFFFF", + "name": "Contrast", + "slug": "contrast" + }, + { + "color": "#4B52FF", + "name": "Accent 1", + "slug": "accent-1" + }, + { + "color": "#FF7A5C", + "name": "Accent 2", + "slug": "accent-2" + }, + { + "color": "#252525", + "name": "Accent 3", + "slug": "accent-3" + }, + { + "color": "#FFFFFF", + "name": "Accent 4", + "slug": "accent-4" + }, + { + "color": "#252525", + "name": "Accent 5", + "slug": "accent-5" + }, + { + "color": "#FFFFFF33", + "name": "Accent 6", + "slug": "accent-6" + } + ] + }, + "typography": { + "fontFamilies": [ + { + "name": "Roboto Slab", + "slug": "roboto-slab", + "fontFamily": "\"Roboto Slab\", serif", + "fontFace": [ + { + "fontFamily": "\"Roboto Slab\"", + "fontStyle": "normal", + "fontWeight": "100 900", + "src": [ + "file:./assets/fonts/roboto-slab/RobotoSlab-VariableFont_wght.woff2" + ] + } + ] + }, + { + "name": "Manrope", + "slug": "manrope", + "fontFamily": "Manrope, sans-serif", + "fontFace": [ + { + "src": [ + "file:./assets/fonts/manrope/Manrope-VariableFont_wght.woff2" + ], + "fontWeight": "200 800", + "fontStyle": "normal", + "fontFamily": "Manrope" + } + ] + } + ], + "fontSizes": [ + { + "fluid": false, + "name": "Small", + "size": "0.875rem", + "slug": "small" + }, + { + "fluid": { + "max": "1.125rem", + "min": "1rem" + }, + "name": "Medium", + "size": "1rem", + "slug": "medium" + }, + { + "fluid": { + "max": "1.375rem", + "min": "1.125rem" + }, + "name": "Large", + "size": "1.38rem", + "slug": "large" + }, + { + "fluid": { + "max": "2rem", + "min": "1.75rem" + }, + "name": "Extra Large", + "size": "1.75rem", + "slug": "x-large" + }, + { + "fluid": { + "max": "2.4rem", + "min": "2.15rem" + }, + "name": "Extra Extra Large", + "size": "2.15rem", + "slug": "xx-large" + } + ] + } + }, + "styles": { + "typography": { + "letterSpacing": "0" + }, + "blocks": { + "core/button": { + "variations": { + "outline": { + "spacing": { + "padding": { + "bottom": "0.625rem", + "left": "1.375rem", + "right": "1.375rem", + "top": "0.625rem" + } + } + } + } + }, + "core/navigation": { + "typography": { + "fontSize": "var:preset|font-size|large", + "letterSpacing": "-0.28px", + "textTransform": "uppercase" + } + }, + "core/post-author": { + "typography": { + "fontSize": "var:preset|font-size|small" + } + }, + "core/post-author-name": { + "typography": { + "fontSize": "var:preset|font-size|small" + } + }, + "core/post-terms": { + "typography": { + "fontWeight": "500" + } + }, + "core/pullquote": { + "typography": { + "fontFamily": "var:preset|font-family|roboto-slab", + "fontSize": "var:preset|font-size|xx-large", + "fontWeight": "200" + } + }, + "core/search": { + "typography": { + "textTransform": "uppercase" + } + }, + "core/site-tagline": { + "typography": { + "fontSize": "var:preset|font-size|large" + } + }, + "core/site-title": { + "typography": { + "textTransform": "uppercase" + } + } + }, + "elements": { + "button": { + "spacing": { + "padding": { + "bottom": "0.625rem", + "left": "1.375rem", + "right": "1.375rem", + "top": "0.625rem" + } + }, + "typography": { + "fontWeight": "500", + "letterSpacing": "-0.36px", + "textTransform": "uppercase" + } + }, + "heading": { + "typography": { + "fontFamily": "var:preset|font-family|roboto-slab", + "fontWeight": "300", + "letterSpacing": "-0.5px", + "lineHeight": "1.2" + } + } + }, + "variations": { + "section-2": { + "color": { + "text": "var:preset|color|base" + }, + "elements": { + "button": { + "color": { + "background": "var:preset|color|base", + "text": "var:preset|color|accent-2" + }, + ":hover": { + "color": { + "text": "var:preset|color|accent-2" + } + } + }, + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "section-5": { + "blocks": { + "core/post-comments-form": { + "css": "& textarea, input:not([type=submit]){border-radius:.25rem; border-color: color-mix(in srgb, currentColor 20%, transparent) !important;} & input[type=checkbox]{margin:0 .2rem 0 0 !important;} & label {font-size: var(--wp--preset--font-size--small); }" + }, + "core/search": { + "css": "& .wp-block-search__input{border-color: color-mix(in srgb, currentColor 20%, transparent);}" + } + } + } + } + } +} diff --git a/wp-content/themes/twentytwentyfive/styles/06-morning.json b/wp-content/themes/twentytwentyfive/styles/06-morning.json new file mode 100644 index 0000000..60d1173 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/styles/06-morning.json @@ -0,0 +1,505 @@ +{ + "$schema": "https://schemas.wp.org/wp/6.7/theme.json", + "version": 3, + "title": "Morning", + "settings": { + "color": { + "palette": [ + { + "color": "#DFDCD7", + "name": "Base", + "slug": "base" + }, + { + "color": "#191919", + "name": "Contrast", + "slug": "contrast" + }, + { + "color": "#7A9BDB", + "name": "Accent 1", + "slug": "accent-1" + }, + { + "color": "#F7E6FF", + "name": "Accent 2", + "slug": "accent-2" + }, + { + "color": "#182949", + "name": "Accent 3", + "slug": "accent-3" + }, + { + "color": "#5F5F5F", + "name": "Accent 4", + "slug": "accent-4" + }, + { + "color": "#D7D3CC", + "name": "Accent 5", + "slug": "accent-5" + }, + { + "color": "#19191933", + "name": "Accent 6", + "slug": "accent-6" + } + ] + }, + "typography": { + "fontFamilies": [ + { + "name": "Literata", + "slug": "literata", + "fontFamily": "Literata, serif", + "fontFace": [ + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-ExtraLight.woff2" + ], + "fontWeight": "200", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-ExtraLightItalic.woff2" + ], + "fontWeight": "200", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-Light.woff2" + ], + "fontWeight": "300", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-LightItalic.woff2" + ], + "fontWeight": "300", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-Regular.woff2" + ], + "fontWeight": "400", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-RegularItalic.woff2" + ], + "fontWeight": "400", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-Medium.woff2" + ], + "fontWeight": "500", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-MediumItalic.woff2" + ], + "fontWeight": "500", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-SemiBold.woff2" + ], + "fontWeight": "600", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-SemiBoldItalic.woff2" + ], + "fontWeight": "600", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-Bold.woff2" + ], + "fontWeight": "700", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-BoldItalic.woff2" + ], + "fontWeight": "700", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-ExtraBold.woff2" + ], + "fontWeight": "800", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-ExtraBoldItalic.woff2" + ], + "fontWeight": "800", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-Black.woff2" + ], + "fontWeight": "900", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-BlackItalic.woff2" + ], + "fontWeight": "900", + "fontStyle": "italic", + "fontFamily": "Literata" + } + ] + }, + { + "name": "Ysabeau Office", + "slug": "ysabeau-office", + "fontFamily": "\"Ysabeau Office\", sans-serif", + "fontFace": [ + { + "src": [ + "file:./assets/fonts/ysabeau-office/YsabeauOffice-VariableFont_wght.woff2" + ], + "fontWeight": "100 900", + "fontStyle": "normal", + "fontFamily": "\"Ysabeau Office\"" + }, + { + "src": [ + "file:./assets/fonts/ysabeau-office/YsabeauOffice-Italic-VariableFont_wght.woff2" + ], + "fontWeight": "100 900", + "fontStyle": "italic", + "fontFamily": "\"Ysabeau Office\"" + } + ] + } + ], + "fontSizes": [ + { + "fluid": false, + "name": "Small", + "size": "0.875rem", + "slug": "small" + }, + { + "fluid": { + "max": "1.125rem", + "min": "1rem" + }, + "name": "Medium", + "size": "1rem", + "slug": "medium" + }, + { + "fluid": { + "max": "1.375rem", + "min": "1.125rem" + }, + "name": "Large", + "size": "1.38rem", + "slug": "large" + }, + { + "fluid": { + "max": "2rem", + "min": "1.75rem" + }, + "name": "Extra Large", + "size": "1.75rem", + "slug": "x-large" + }, + { + "fluid": { + "max": "2.6rem", + "min": "1.4rem" + }, + "name": "Extra Extra Large", + "size": "2.6rem", + "slug": "xx-large" + } + ] + } + }, + "styles": { + "color": { + "text": "var:preset|color|accent-4" + }, + "typography": { + "fontFamily": "var:preset|font-family|ysabeau-office", + "letterSpacing": "-0.24px" + }, + "blocks": { + "core/code": { + "color": { + "text": "var:preset|color|contrast", + "background": "var:preset|color|accent-5" + } + }, + "core/navigation": { + "typography": { + "fontSize": "1.25rem" + } + }, + "core/paragraph": { + "elements": { + "link": { + "color": { + "text": "var:preset|color|contrast" + } + } + } + }, + "core/post-author-name": { + "elements": { + "link": { + "color": { + "text": "var:preset|color|contrast" + } + } + } + }, + "core/post-title": { + "typography": { + "fontWeight": "900", + "letterSpacing": "-0.96px" + }, + "elements": { + "link": { + "color": { + "text": "var:preset|color|contrast" + } + } + } + }, + "core/pullquote": { + "color": { + "text": "var:preset|color|contrast" + }, + "typography": { + "fontSize": "var:preset|font-size|xx-large" + }, + "elements": { + "cite": { + "typography": { + "fontSize": "var:preset|font-size|medium", + "letterSpacing": "-0.14px" + }, + "color": { + "text": "var:preset|color|accent-4" + } + } + } + }, + "core/quote": { + "elements": { + "cite": { + "typography": { + "fontSize": "var:preset|font-size|medium", + "letterSpacing": "-0.14px" + }, + "color": { + "text": "var:preset|color|accent-4" + } + } + } + }, + "core/query-title": { + "typography": { + "fontWeight": "900" + } + }, + "core/site-title": { + "typography": { + "fontFamily": "var:preset|font-family|ysabeau-office", + "textTransform": "uppercase", + "letterSpacing": "1.6px" + } + } + }, + "elements": { + "button": { + "typography": { + "fontFamily": "var:preset|font-family|literata", + "fontSize": "var:preset|font-size|medium", + "fontWeight": "900", + "letterSpacing": "-0.36px" + }, + "color": { + "text": "var:preset|color|contrast", + "background": "var:preset|color|accent-1" + }, + "border": { + "radius": "0px" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--accent-1) 85%, transparent)", + "text": "var:preset|color|contrast" + } + } + }, + "heading": { + "color": { + "text": "var:preset|color|contrast" + }, + "typography": { + "fontFamily": "var:preset|font-family|literata", + "fontWeight": "900", + "lineHeight": "1.2" + } + }, + "h5": { + "typography": { + "letterSpacing": "0px" + } + }, + "h6": { + "typography": { + "fontWeight": "900", + "letterSpacing": "0px" + } + }, + "link": { + "color": { + "text": "currentColor" + } + } + }, + "variations": { + "post-terms-1": { + "typography": { + "fontSize": "var:preset|font-size|medium" + }, + "elements": { + "link": { + "color": { + "background": "var:preset|color|accent-5" + }, + "border": { + "radius": "100px", + "color": "var:preset|color|accent-5" + } + } + } + }, + "section-2": { + "elements": { + "button": { + "color": { + "background": "var:preset|color|accent-1", + "text": "var:preset|color|contrast" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--accent-1) 85%, transparent)" + } + } + } + } + }, + "section-3": { + "elements": { + "button": { + "color": { + "background": "var:preset|color|contrast", + "text": "var:preset|color|base" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--contrast) 85%, transparent)" + } + } + } + } + }, + "section-4": { + "color": { + "text": "var:preset|color|base" + }, + "elements": { + "heading": { + "color": { + "text": "currentColor" + } + }, + "button": { + "color": { + "background": "var:preset|color|accent-1", + "text": "var:preset|color|contrast" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--accent-1) 85%, transparent)", + "text": "var:preset|color|contrast" + } + } + }, + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "section-5": { + "elements": { + "heading": { + "color": { + "text": "var:preset|color|base" + } + }, + "button": { + "color": { + "background": "var:preset|color|accent-1", + "text": "var:preset|color|contrast" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--accent-1) 85%, transparent)" + } + } + }, + "link": { + "color": { + "text": "currentColor" + } + } + } + } + } + } +} diff --git a/wp-content/themes/twentytwentyfive/styles/07-sunrise.json b/wp-content/themes/twentytwentyfive/styles/07-sunrise.json new file mode 100644 index 0000000..fa5b100 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/styles/07-sunrise.json @@ -0,0 +1,508 @@ +{ + "$schema": "https://schemas.wp.org/wp/6.7/theme.json", + "version": 3, + "title": "Sunrise", + "settings": { + "color": { + "palette": [ + { + "color": "#330616", + "name": "Base", + "slug": "base" + }, + { + "color": "#FFFFFF", + "name": "Contrast", + "slug": "contrast" + }, + { + "color": "#F0FDA6", + "name": "Accent 1", + "slug": "accent-1" + }, + { + "color": "#DB9AB1", + "name": "Accent 2", + "slug": "accent-2" + }, + { + "color": "#C1E4E7", + "name": "Accent 3", + "slug": "accent-3" + }, + { + "color": "#DB9AB1", + "name": "Accent 4", + "slug": "accent-4" + }, + { + "color": "#4A1628", + "name": "Accent 5", + "slug": "accent-5" + }, + { + "color": "#DB9AB133", + "name": "Accent 6", + "slug": "accent-6" + } + ] + }, + "typography": { + "fontFamilies": [ + { + "name": "Platypi", + "slug": "platypi", + "fontFamily": "Platypi", + "fontFace": [ + { + "fontFamily": "Platypi", + "fontStyle": "normal", + "fontWeight": "300 800", + "src": [ + "file:./assets/fonts/platypi/Platypi-VariableFont_wght.woff2" + ] + }, + { + "fontFamily": "Platypi", + "fontStyle": "italic", + "fontWeight": "300 800", + "src": [ + "file:./assets/fonts/platypi/Platypi-Italic-VariableFont_wght.woff2" + ] + } + ] + }, + { + "name": "Literata", + "slug": "literata", + "fontFamily": "Literata, serif", + "fontFace": [ + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-ExtraLight.woff2" + ], + "fontWeight": "200", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-ExtraLightItalic.woff2" + ], + "fontWeight": "200", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-Light.woff2" + ], + "fontWeight": "300", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-LightItalic.woff2" + ], + "fontWeight": "300", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-Regular.woff2" + ], + "fontWeight": "400", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-RegularItalic.woff2" + ], + "fontWeight": "400", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-Medium.woff2" + ], + "fontWeight": "500", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-MediumItalic.woff2" + ], + "fontWeight": "500", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-SemiBold.woff2" + ], + "fontWeight": "600", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-SemiBoldItalic.woff2" + ], + "fontWeight": "600", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-Bold.woff2" + ], + "fontWeight": "700", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-BoldItalic.woff2" + ], + "fontWeight": "700", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-ExtraBold.woff2" + ], + "fontWeight": "800", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-ExtraBoldItalic.woff2" + ], + "fontWeight": "800", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-Black.woff2" + ], + "fontWeight": "900", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-BlackItalic.woff2" + ], + "fontWeight": "900", + "fontStyle": "italic", + "fontFamily": "Literata" + } + ] + } + ] + } + }, + "styles": { + "color": { + "text": "var:preset|color|accent-2" + }, + "typography": { + "fontFamily": "var:preset|font-family|literata", + "fontSize": "1.5rem", + "letterSpacing": "-0.24px", + "lineHeight": "1.3" + }, + "blocks": { + "core/code": { + "color": { + "text": "var:preset|color|accent-2", + "background": "var:preset|color|accent-5" + } + }, + "core/navigation": { + "typography": { + "fontSize": "1.25rem" + } + }, + "core/post-author-name": { + "color": { + "text": "var:preset|color|contrast" + }, + "elements": { + "link": { + "color": { + "text": "var:preset|color|contrast" + } + } + } + }, + "core/post-terms": { + "typography": { + "fontWeight": "400" + }, + "color": { + "text": "var:preset|color|contrast" + }, + "elements": { + "link": { + "color": { + "text": "var:preset|color|contrast" + } + } + } + }, + "core/post-title": { + "typography": { + "fontWeight": "800", + "letterSpacing": "-0.96px" + }, + "elements": { + "link": { + "color": { + "text": "var:preset|color|accent-2" + } + } + } + }, + "core/pullquote": { + "color": { + "text": "var:preset|color|accent-2" + }, + "typography": { + "fontFamily": "var:preset|font-family|platypi", + "fontSize": "var:preset|font-size|x-large", + "letterSpacing": "-0.76px", + "fontWeight": "800" + }, + "elements": { + "cite": { + "typography": { + "fontFamily": "var:preset|font-family|literata", + "fontWeight": "400", + "letterSpacing": "-0.14px" + }, + "color": { + "text": "var:preset|color|accent-2" + } + } + } + }, + "core/quote": { + "color": { + "text": "var:preset|color|accent-2" + }, + "typography": { + "fontSize": "1.5rem", + "fontWeight": "600", + "letterSpacing": "-0.24px" + }, + "elements": { + "cite": { + "typography": { + "letterSpacing": "-0.14px" + }, + "color": { + "text": "var:preset|color|accent-2" + } + } + } + }, + "core/site-title": { + "typography": { + "fontFamily": "var:preset|font-family|platypi", + "fontSize": "30px", + "fontWeight": "800", + "letterSpacing": "-0.6px" + }, + "elements": { + "link": { + "color": { + "text": "var:preset|color|accent-2" + } + } + } + } + }, + "elements": { + "button": { + "color": { + "text": "var:preset|color|base", + "background": "var:preset|color|accent-2" + }, + "border": { + "radius": "0px" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--accent-2) 85%, transparent)" + } + }, + "typography": { + "fontFamily": "var:preset|font-family|platypi", + "fontSize": "1.5rem", + "fontWeight": "800" + } + }, + "heading": { + "typography": { + "fontFamily": "var:preset|font-family|platypi", + "fontWeight": "800" + } + }, + "link": { + "color": { + "text": "var:preset|color|contrast" + } + } + }, + "variations": { + "post-terms-1": { + "typography": { + "fontSize": "16px" + }, + "elements": { + "link": { + "color": { + "background": "var:preset|color|accent-5" + }, + "border": { + "radius": "100px", + "color": "var:preset|color|accent-5" + } + } + } + }, + "section-1": { + "color": { + "text": "var:preset|color|accent-5", + "background": "var:preset|color|contrast" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + }, + "button": { + "color": { + "background": "var:preset|color|base", + "text": "var:preset|color|contrast" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--base) 85%, transparent)" + } + } + } + } + }, + "section-2": { + "color": { + "text": "var:preset|color|base" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + }, + "button": { + "color": { + "background": "var:preset|color|base", + "text": "var:preset|color|contrast" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--base) 85%, transparent)" + } + } + } + } + }, + "section-3": { + "color": { + "text": "var:preset|color|base" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + }, + "button": { + "color": { + "background": "var:preset|color|base", + "text": "var:preset|color|contrast" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--base) 85%, transparent)" + } + } + } + } + }, + "section-4": { + "color": { + "text": "var:preset|color|base" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + }, + "button": { + "color": { + "background": "var:preset|color|base", + "text": "var:preset|color|contrast" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--base) 85%, transparent)" + } + } + } + } + }, + "section-5": { + "color": { + "text": "var:preset|color|contrast", + "background": "var:preset|color|accent-5" + }, + "elements": { + "heading": { + "color": { + "text": "currentColor" + } + }, + "link": { + "color": { + "text": "currentColor" + } + }, + "button": { + "color": { + "background": "var:preset|color|contrast", + "text": "var:preset|color|base" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--contrast) 85%, transparent)", + "text": "var:preset|color|base" + } + } + } + } + } + } + } +} diff --git a/wp-content/themes/twentytwentyfive/styles/08-midnight.json b/wp-content/themes/twentytwentyfive/styles/08-midnight.json new file mode 100644 index 0000000..9272d14 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/styles/08-midnight.json @@ -0,0 +1,612 @@ +{ + "$schema": "https://schemas.wp.org/wp/6.7/theme.json", + "version": 3, + "title": "Midnight", + "settings": { + "color": { + "duotone": [ + { + "colors": [ + "#4433A6", + "#79F3B1" + ], + "name": "Midnight filter", + "slug": "midnight-filter" + } + ], + "palette": [ + { + "color": "#4433A6", + "name": "Base", + "slug": "base" + }, + { + "color": "#79F3B1", + "name": "Contrast", + "slug": "contrast" + }, + { + "color": "#5644BC", + "name": "Accent 1", + "slug": "accent-1" + }, + { + "color": "#372696", + "name": "Accent 2", + "slug": "accent-2" + }, + { + "color": "#251D51", + "name": "Accent 3", + "slug": "accent-3" + }, + { + "color": "#79F3B1", + "name": "Accent 4", + "slug": "accent-4" + }, + { + "color": "#E8B7FF", + "name": "Accent 5", + "slug": "accent-5" + }, + { + "color": "#79F3B133", + "name": "Accent 6", + "slug": "accent-6" + } + ] + }, + "typography": { + "fontSizes": [ + { + "fluid": false, + "name": "Small", + "size": "0.9rem", + "slug": "small" + }, + { + "fluid": { + "max": "1.2rem", + "min": "0.9rem" + }, + "name": "Medium", + "size": "1rem", + "slug": "medium" + }, + { + "fluid": { + "max": "1.8rem", + "min": "1.2rem" + }, + "name": "Large", + "size": "1.2rem", + "slug": "large" + }, + { + "fluid": { + "max": "2.2rem", + "min": "1.8rem" + }, + "name": "Extra Large", + "size": "1.8rem", + "slug": "x-large" + }, + { + "fluid": { + "max": "2.8rem", + "min": "2rem" + }, + "name": "Extra Extra Large", + "size": "2rem", + "slug": "xx-large" + } + ], + "fontFamilies": [ + { + "name": "Literata", + "slug": "literata", + "fontFamily": "Literata, serif", + "fontFace": [ + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-ExtraLight.woff2" + ], + "fontWeight": "200", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-ExtraLightItalic.woff2" + ], + "fontWeight": "200", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-Light.woff2" + ], + "fontWeight": "300", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-LightItalic.woff2" + ], + "fontWeight": "300", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-Regular.woff2" + ], + "fontWeight": "400", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-RegularItalic.woff2" + ], + "fontWeight": "400", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-Medium.woff2" + ], + "fontWeight": "500", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-MediumItalic.woff2" + ], + "fontWeight": "500", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-SemiBold.woff2" + ], + "fontWeight": "600", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-SemiBoldItalic.woff2" + ], + "fontWeight": "600", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-Bold.woff2" + ], + "fontWeight": "700", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-BoldItalic.woff2" + ], + "fontWeight": "700", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-ExtraBold.woff2" + ], + "fontWeight": "800", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-ExtraBoldItalic.woff2" + ], + "fontWeight": "800", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-Black.woff2" + ], + "fontWeight": "900", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-BlackItalic.woff2" + ], + "fontWeight": "900", + "fontStyle": "italic", + "fontFamily": "Literata" + } + ] + }, + { + "name": "Fira Sans", + "slug": "fira-sans", + "fontFamily": "\"Fira Sans\", sans-serif", + "fontFace": [ + { + "src": [ + "file:./assets/fonts/fira-sans/FiraSans-Thin.woff2" + ], + "fontWeight": "100", + "fontStyle": "normal", + "fontFamily": "\"Fira Sans\"" + }, + { + "src": [ + "file:./assets/fonts/fira-sans/FiraSans-ThinItalic.woff2" + ], + "fontWeight": "100", + "fontStyle": "italic", + "fontFamily": "\"Fira Sans\"" + }, + { + "src": [ + "file:./assets/fonts/fira-sans/FiraSans-ExtraLight.woff2" + ], + "fontWeight": "200", + "fontStyle": "normal", + "fontFamily": "\"Fira Sans\"" + }, + { + "src": [ + "file:./assets/fonts/fira-sans/FiraSans-ExtraLightItalic.woff2" + ], + "fontWeight": "200", + "fontStyle": "italic", + "fontFamily": "\"Fira Sans\"" + }, + { + "src": [ + "file:./assets/fonts/fira-sans/FiraSans-Light.woff2" + ], + "fontWeight": "300", + "fontStyle": "normal", + "fontFamily": "\"Fira Sans\"" + }, + { + "src": [ + "file:./assets/fonts/fira-sans/FiraSans-LightItalic.woff2" + ], + "fontWeight": "300", + "fontStyle": "italic", + "fontFamily": "\"Fira Sans\"" + }, + { + "src": [ + "file:./assets/fonts/fira-sans/FiraSans-Italic.woff2" + ], + "fontWeight": "400", + "fontStyle": "italic", + "fontFamily": "\"Fira Sans\"" + }, + { + "src": [ + "file:./assets/fonts/fira-sans/FiraSans-Regular.woff2" + ], + "fontWeight": "400", + "fontStyle": "normal", + "fontFamily": "\"Fira Sans\"" + }, + { + "src": [ + "file:./assets/fonts/fira-sans/FiraSans-Medium.woff2" + ], + "fontWeight": "500", + "fontStyle": "normal", + "fontFamily": "\"Fira Sans\"" + }, + { + "src": [ + "file:./assets/fonts/fira-sans/FiraSans-MediumItalic.woff2" + ], + "fontWeight": "500", + "fontStyle": "italic", + "fontFamily": "\"Fira Sans\"" + }, + { + "src": [ + "file:./assets/fonts/fira-sans/FiraSans-SemiBold.woff2" + ], + "fontWeight": "600", + "fontStyle": "normal", + "fontFamily": "\"Fira Sans\"" + }, + { + "src": [ + "file:./assets/fonts/fira-sans/FiraSans-SemiBoldItalic.woff2" + ], + "fontWeight": "600", + "fontStyle": "italic", + "fontFamily": "\"Fira Sans\"" + }, + { + "src": [ + "file:./assets/fonts/fira-sans/FiraSans-Bold.woff2" + ], + "fontWeight": "700", + "fontStyle": "normal", + "fontFamily": "\"Fira Sans\"" + }, + { + "src": [ + "file:./assets/fonts/fira-sans/FiraSans-BoldItalic.woff2" + ], + "fontWeight": "700", + "fontStyle": "italic", + "fontFamily": "\"Fira Sans\"" + }, + { + "src": [ + "file:./assets/fonts/fira-sans/FiraSans-ExtraBold.woff2" + ], + "fontWeight": "800", + "fontStyle": "normal", + "fontFamily": "\"Fira Sans\"" + }, + { + "src": [ + "file:./assets/fonts/fira-sans/FiraSans-ExtraBoldItalic.woff2" + ], + "fontWeight": "800", + "fontStyle": "italic", + "fontFamily": "\"Fira Sans\"" + }, + { + "src": [ + "file:./assets/fonts/fira-sans/FiraSans-Black.woff2" + ], + "fontWeight": "900", + "fontStyle": "normal", + "fontFamily": "\"Fira Sans\"" + }, + { + "src": [ + "file:./assets/fonts/fira-sans/FiraSans-BlackItalic.woff2" + ], + "fontWeight": "900", + "fontStyle": "italic", + "fontFamily": "\"Fira Sans\"" + } + ] + } + ] + } + }, + "styles": { + "typography": { + "fontSize": "var:preset|font-size|medium", + "fontFamily": "var:preset|font-family|fira-sans", + "letterSpacing": "-0.01em", + "lineHeight": "1.5" + }, + "blocks": { + "core/avatar": { + "filter": { + "duotone": "var:preset|duotone|midnight-filter" + } + }, + "core/button": { + "variations": { + "outline": { + "spacing": { + "padding": { + "bottom": "1rem", + "left": "1rem", + "right": "1rem", + "top": "1rem" + } + } + } + } + }, + "core/code": { + "color": { + "background": "var:preset|color|accent-2", + "text": "var:preset|color|contrast" + } + }, + "core/cover": { + "filter": { + "duotone": "var:preset|duotone|midnight-filter" + } + }, + "core/image": { + "filter": { + "duotone": "var:preset|duotone|midnight-filter" + } + }, + "core/post-date": { + "color": { + "text": "var:preset|color|contrast" + }, + "elements": { + "link": { + "color": { + "text": "var:preset|color|contrast" + } + } + } + }, + "core/post-featured-image": { + "filter": { + "duotone": "var:preset|duotone|midnight-filter" + } + }, + "core/post-title": { + "typography": { + "fontWeight": "200" + } + }, + "core/pullquote": { + "border": { + "bottom": { + "style": "none", + "width": "0px" + }, + "left": { + "style": "none", + "width": "0px" + }, + "right": { + "style": "none", + "width": "0px" + }, + "top": { + "style": "none", + "width": "0px" + } + }, + "typography": { + "fontFamily": "var:preset|font-family|literata", + "fontWeight": "200", + "letterSpacing": "0em" + } + }, + "core/query-pagination": { + "typography": { + "fontWeight": "300", + "letterSpacing": "0px" + } + }, + "core/quote": { + "typography": { + "fontSize": "var:preset|font-size|medium", + "letterSpacing": "-0.01em", + "lineHeight": "1.5", + "fontWeight": "300" + } + }, + "core/search": { + "border": { + "radius": "0px" + } + }, + "core/site-logo": { + "filter": { + "duotone": "var:preset|duotone|midnight-filter" + } + }, + "core/site-title": { + "typography": { + "fontFamily": "var:preset|font-family|literata", + "fontSize": "var:preset|font-size|x-large", + "fontWeight": "300", + "letterSpacing": "-0.56px", + "textTransform": "uppercase" + } + } + }, + "elements": { + "button": { + "border": { + "radius": "0px" + }, + "color": { + "background": "var:preset|color|contrast", + "text": "var:preset|color|base" + }, + "spacing": { + "padding": { + "bottom": "1rem", + "left": "1rem", + "right": "1rem", + "top": "1rem" + } + }, + "typography": { + "fontFamily": "var:preset|font-family|literata", + "fontSize": "var:preset|font-size|medium", + "fontWeight": "400", + "letterSpacing": "-0.01em", + "textTransform": "uppercase" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--contrast) 85%, transparent)" + } + } + }, + "heading": { + "typography": { + "fontFamily": "var:preset|font-family|literata", + "fontWeight": "200", + "letterSpacing": "-0.02em", + "lineHeight": "1.24" + } + }, + "h6": { + "typography": { + "fontWeight": "200" + } + } + }, + "variations": { + "section-1": { + "color": { + "text": "var:preset|color|accent-3" + }, + "elements": { + "button": { + "color": { + "background": "var:preset|color|accent-3", + "text": "var:preset|color|accent-5" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--accent-3) 85%, transparent)" + } + } + }, + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "section-4": { + "color": { + "text": "var:preset|color|accent-5" + }, + "elements": { + "button": { + "color": { + "background": "var:preset|color|accent-5", + "text": "var:preset|color|accent-3" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--accent-5) 85%, transparent)" + } + } + }, + "link": { + "color": { + "text": "currentColor" + } + } + } + } + } + } +} diff --git a/wp-content/themes/twentytwentyfive/styles/blocks/01-display.json b/wp-content/themes/twentytwentyfive/styles/blocks/01-display.json new file mode 100644 index 0000000..ff8eaae --- /dev/null +++ b/wp-content/themes/twentytwentyfive/styles/blocks/01-display.json @@ -0,0 +1,13 @@ +{ + "$schema": "https://schemas.wp.org/wp/6.7/theme.json", + "version": 3, + "title": "Display", + "slug": "text-display", + "blockTypes": ["core/heading", "core/paragraph"], + "styles": { + "typography": { + "fontSize": "clamp(2.2rem, 2.2rem + ((1vw - 0.2rem) * 1.333), 3.5rem)", + "lineHeight": "1.2" + } + } +} diff --git a/wp-content/themes/twentytwentyfive/styles/blocks/02-subtitle.json b/wp-content/themes/twentytwentyfive/styles/blocks/02-subtitle.json new file mode 100644 index 0000000..bd9640c --- /dev/null +++ b/wp-content/themes/twentytwentyfive/styles/blocks/02-subtitle.json @@ -0,0 +1,13 @@ +{ + "$schema": "https://schemas.wp.org/wp/6.7/theme.json", + "version": 3, + "title": "Subtitle", + "slug": "text-subtitle", + "blockTypes": ["core/heading", "core/paragraph"], + "styles": { + "typography": { + "fontSize": "clamp(1.5rem, 1.5rem + ((1vw - 0.2rem) * 0.392), 1.75rem)", + "lineHeight": "1.2" + } + } +} diff --git a/wp-content/themes/twentytwentyfive/styles/blocks/03-annotation.json b/wp-content/themes/twentytwentyfive/styles/blocks/03-annotation.json new file mode 100644 index 0000000..41391e3 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/styles/blocks/03-annotation.json @@ -0,0 +1,36 @@ +{ + "$schema": "https://schemas.wp.org/wp/6.7/theme.json", + "version": 3, + "title": "Annotation", + "slug": "text-annotation", + "blockTypes": ["core/heading", "core/paragraph"], + "styles": { + "css": "width: fit-content", + "typography": { + "fontSize": "var:preset|font-size|small", + "lineHeight": "1.5", + "letterSpacing": "normal" + }, + "border": { + "color": "currentColor", + "style": "solid", + "width": "1px", + "radius": "16px" + }, + "spacing": { + "padding": { + "top": "0.2rem", + "right": "0.6rem", + "bottom": "0.25rem", + "left": "0.6rem" + } + }, + "elements": { + "link": { + "typography": { + "textDecoration": "none" + } + } + } + } +} diff --git a/wp-content/themes/twentytwentyfive/styles/blocks/post-terms-1.json b/wp-content/themes/twentytwentyfive/styles/blocks/post-terms-1.json new file mode 100644 index 0000000..5995fbb --- /dev/null +++ b/wp-content/themes/twentytwentyfive/styles/blocks/post-terms-1.json @@ -0,0 +1,37 @@ +{ + "version": 3, + "$schema": "https://schemas.wp.org/wp/6.7/theme.json", + "title": "Pill shaped", + "slug": "post-terms-1", + "blockTypes": ["core/post-terms"], + "styles": { + "elements": { + "link": { + "border": { + "color": "var:preset|color|accent-6", + "radius": "20px", + "width": "0.8px", + "style": "solid" + }, + "spacing": { + "padding": { + "top": "5px", + "right": "10px", + "bottom": "5px", + "left": "10px" + } + }, + "typography": { + "fontWeight": "400", + "lineHeight": "2.8", + "textDecoration": "none" + }, + ":hover": { + "typography": { + "textDecoration": "underline" + } + } + } + } + } +} diff --git a/wp-content/themes/twentytwentyfive/styles/colors/01-evening.json b/wp-content/themes/twentytwentyfive/styles/colors/01-evening.json new file mode 100644 index 0000000..56c88fb --- /dev/null +++ b/wp-content/themes/twentytwentyfive/styles/colors/01-evening.json @@ -0,0 +1,102 @@ +{ + "$schema": "https://schemas.wp.org/wp/6.7/theme.json", + "version": 3, + "title": "Evening", + "settings": { + "color": { + "palette": [ + { + "color": "#1B1B1B", + "name": "Base", + "slug": "base" + }, + { + "color": "#F0F0F0", + "name": "Contrast", + "slug": "contrast" + }, + { + "color": "#786D0A", + "name": "Accent 1", + "slug": "accent-1" + }, + { + "color": "#442369", + "name": "Accent 2", + "slug": "accent-2" + }, + { + "color": "#D1D0EA", + "name": "Accent 3", + "slug": "accent-3" + }, + { + "color": "#CBCBCB", + "name": "Accent 4", + "slug": "accent-4" + }, + { + "color": "#353535", + "name": "Accent 5", + "slug": "accent-5" + }, + { + "color": "#FFFFFF33", + "name": "Accent 6", + "slug": "accent-6" + } + ] + } + }, + "styles": { + "color": { + "text": "var:preset|color|accent-4" + }, + "elements": { + "button": { + "color": { + "background": "var:preset|color|contrast", + "text": "var:preset|color|base" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--contrast) 85%, transparent)", + "text": "var:preset|color|base" + } + } + } + }, + "variations": { + "section-2": { + "elements": { + "button": { + "color": { + "background": "var:preset|color|base", + "text": "var:preset|color|contrast" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--base) 85%, transparent)" + } + } + } + } + }, + "section-4": { + "elements": { + "button": { + "color": { + "background": "var:preset|color|accent-2", + "text": "var:preset|color|contrast" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--accent-2) 85%, transparent)" + } + } + } + } + } + } + } +} diff --git a/wp-content/themes/twentytwentyfive/styles/colors/02-noon.json b/wp-content/themes/twentytwentyfive/styles/colors/02-noon.json new file mode 100644 index 0000000..97b12a5 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/styles/colors/02-noon.json @@ -0,0 +1,167 @@ +{ + "$schema": "https://schemas.wp.org/wp/6.7/theme.json", + "version": 3, + "title": "Noon", + "settings": { + "color": { + "palette": [ + { + "color": "#F8F7F5", + "name": "Base", + "slug": "base" + }, + { + "color": "#191919", + "name": "Contrast", + "slug": "contrast" + }, + { + "color": "#FFFFFF", + "name": "Accent 1", + "slug": "accent-1" + }, + { + "color": "#F5B684", + "name": "Accent 2", + "slug": "accent-2" + }, + { + "color": "#191919", + "name": "Accent 3", + "slug": "accent-3" + }, + { + "color": "#5F5F5F", + "name": "Accent 4", + "slug": "accent-4" + }, + { + "color": "#F1EEE9", + "name": "Accent 5", + "slug": "accent-5" + }, + { + "color": "#19191933", + "name": "Accent 6", + "slug": "accent-6" + } + ] + } + }, + "styles": { + "color": { + "text": "var:preset|color|accent-4" + }, + "blocks": { + "core/button": { + "border": { + "color": "var:preset|color|contrast" + } + }, + "core/post-title": { + "color": { + "text": "var:preset|color|accent-3" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "core/pullquote": { + "color": { + "text": "var:preset|color|accent-3" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "core/query-title": { + "color": { + "text": "var:preset|color|accent-3" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + } + } + } + }, + "elements": { + "button": { + "color": { + "background": "var:preset|color|contrast", + "text": "var:preset|color|base" + } + }, + "heading": { + "color": { + "text": "var:preset|color|accent-3" + } + }, + "link": { + "color": { + "text": "currentColor" + } + } + }, + "variations": { + "section-4": { + "color": { + "text": "var:preset|color|accent-2" + }, + "elements": { + "button": { + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--accent-2) 85%, transparent)" + } + } + }, + "heading": { + "color": { + "text": "currentColor" + } + }, + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "section-5": { + "color": { + "text": "var:preset|color|base" + }, + "elements": { + "button": { + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--base) 85%, transparent)" + } + } + }, + "heading": { + "color": { + "text": "var:preset|color|base" + } + }, + "link": { + "color": { + "text": "currentColor" + } + } + } + } + } + } +} diff --git a/wp-content/themes/twentytwentyfive/styles/colors/03-dusk.json b/wp-content/themes/twentytwentyfive/styles/colors/03-dusk.json new file mode 100644 index 0000000..705c827 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/styles/colors/03-dusk.json @@ -0,0 +1,276 @@ +{ + "$schema": "https://schemas.wp.org/wp/6.7/theme.json", + "version": 3, + "title": "Dusk", + "settings": { + "color": { + "palette": [ + { + "color": "#E2E2E2", + "name": "Base", + "slug": "base" + }, + { + "color": "#3B3B3B", + "name": "Contrast", + "slug": "contrast" + }, + { + "color": "#F5EDFF", + "name": "Accent 1", + "slug": "accent-1" + }, + { + "color": "#650DD4", + "name": "Accent 2", + "slug": "accent-2" + }, + { + "color": "#191919", + "name": "Accent 3", + "slug": "accent-3" + }, + { + "color": "#5F5F5F", + "name": "Accent 4", + "slug": "accent-4" + }, + { + "color": "#DBDBDB", + "name": "Accent 5", + "slug": "accent-5" + }, + { + "color": "#3B3B3B33", + "name": "Accent 6", + "slug": "accent-6" + } + ] + }, + "custom": { + "color": { + "accent-2-opacity-20": "#650DD433" + } + } + }, + "styles": { + "blocks": { + "core/code": { + "color": { + "text": "var:preset|color|black", + "background": "var:preset|color|accent-5" + } + }, + "core/paragraph": { + "elements": { + "link": { + "color": { + "text": "var:preset|color|accent-2" + } + } + } + }, + "core/post-author-name": { + "color": { + "text": "var:preset|color|accent-2" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "core/post-terms": { + "color": { + "text": "var:preset|color|accent-2" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "core/post-title": { + "elements": { + "link": { + "color": { + "text": "var:preset|color|accent-3" + } + } + } + }, + "core/pullquote": { + "color": { + "text": "var:preset|color|black" + }, + "elements": { + "cite": { + "color": { + "text": "var:preset|color|contrast" + } + } + } + }, + "core/quote": { + "color": { + "text": "var:preset|color|black" + } + }, + "core/site-title": { + "color": { + "text": "var:preset|color|accent-3" + }, + "elements": { + "link": { + "color": { + "text": "var:preset|color|accent-3" + } + } + } + } + }, + "elements": { + "button": { + "color": { + "text": "var:preset|color|base", + "background": "var:preset|color|accent-2" + }, + "border": { + "color": "transparent" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--accent-2) 85%, transparent)" + } + } + }, + "heading": { + "color": { + "text": "var:preset|color|accent-3" + } + }, + "link": { + "color": { + "text": "var:preset|color|accent-3" + } + } + }, + "variations": { + "post-terms-1": { + "elements": { + "link": { + "border": { + "color": "var:custom|color|accent-2-opacity-20" + } + } + } + }, + "section-1": { + "elements": { + "link": { + "color": { + "text": "var:preset|color|accent-3" + } + } + } + }, + "section-2": { + "color": { + "text": "var:preset|color|base" + }, + "elements": { + "button": { + "color": { + "background": "var:preset|color|accent-3", + "text": "var:preset|color|base" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--accent-3) 85%, transparent)" + } + } + }, + "link": { + "color": { + "text": "currentColor" + } + }, + "heading": { + "color": { + "text": "currentColor" + } + } + } + }, + "section-3": { + "color": { + "text": "var:preset|color|accent-2" + }, + "elements": { + "heading": { + "color": { + "text": "currentColor" + } + } + } + }, + "section-4": { + "color": { + "text": "var:preset|color|base" + }, + "elements": { + "button": { + "color": { + "text": "var:preset|color|base" + }, + ":hover": { + "color": { + "text": "var:preset|color|base" + } + } + }, + "link": { + "color": { + "text": "currentColor" + } + }, + "heading": { + "color": { + "text": "currentColor" + } + } + } + }, + "section-5": { + "elements": { + "button": { + "color": { + "background": "var:preset|color|accent-2", + "text": "var:preset|color|base" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--accent-2) 85%, transparent)", + "text": "var:preset|color|base" + } + } + }, + "heading": { + "color": { + "text": "var:preset|color|base" + } + }, + "link": { + "color": { + "text": "var:preset|color|base" + } + } + } + } + } + } +} diff --git a/wp-content/themes/twentytwentyfive/styles/colors/04-afternoon.json b/wp-content/themes/twentytwentyfive/styles/colors/04-afternoon.json new file mode 100644 index 0000000..60da749 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/styles/colors/04-afternoon.json @@ -0,0 +1,105 @@ +{ + "$schema": "https://schemas.wp.org/wp/6.7/theme.json", + "version": 3, + "title": "Afternoon", + "settings": { + "color": { + "palette": [ + { + "color": "#DAE7BD", + "name": "Base", + "slug": "base" + }, + { + "color": "#516028", + "name": "Contrast", + "slug": "contrast" + }, + { + "color": "#C7F642", + "name": "Accent 1", + "slug": "accent-1" + }, + { + "color": "#EBF6D3", + "name": "Accent 2", + "slug": "accent-2" + }, + { + "color": "#303D10", + "name": "Accent 3", + "slug": "accent-3" + }, + { + "color": "#516028", + "name": "Accent 4", + "slug": "accent-4" + }, + { + "color": "#EBF6D3", + "name": "Accent 5", + "slug": "accent-5" + }, + { + "color": "#51602833", + "name": "Accent 6", + "slug": "accent-6" + } + ] + } + }, + "styles": { + "elements": { + "button": { + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--contrast) 85%, black)" + } + } + } + }, + "variations": { + "section-2": { + "color": { + "background": "var:preset|color|accent-3", + "text": "var:preset|color|accent-1" + }, + "elements": { + "button": { + "color": { + "background": "var:preset|color|accent-1", + "text": "var:preset|color|accent-3" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--accent-1) 85%, transparent)" + } + } + } + } + }, + "section-4": { + "elements": { + "button": { + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--accent-2) 85%, transparent)" + } + } + } + } + }, + "section-5": { + "elements": { + "button": { + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--base) 90%, transparent)" + } + } + } + } + } + } + } +} diff --git a/wp-content/themes/twentytwentyfive/styles/colors/05-twilight.json b/wp-content/themes/twentytwentyfive/styles/colors/05-twilight.json new file mode 100644 index 0000000..329164d --- /dev/null +++ b/wp-content/themes/twentytwentyfive/styles/colors/05-twilight.json @@ -0,0 +1,78 @@ +{ + "$schema": "https://schemas.wp.org/wp/6.7/theme.json", + "version": 3, + "title": "Twilight", + "settings": { + "color": { + "palette": [ + { + "color": "#131313", + "name": "Base", + "slug": "base" + }, + { + "color": "#FFFFFF", + "name": "Contrast", + "slug": "contrast" + }, + { + "color": "#4B52FF", + "name": "Accent 1", + "slug": "accent-1" + }, + { + "color": "#FF7A5C", + "name": "Accent 2", + "slug": "accent-2" + }, + { + "color": "#252525", + "name": "Accent 3", + "slug": "accent-3" + }, + { + "color": "#FFFFFF", + "name": "Accent 4", + "slug": "accent-4" + }, + { + "color": "#252525", + "name": "Accent 5", + "slug": "accent-5" + }, + { + "color": "#FFFFFF33", + "name": "Accent 6", + "slug": "accent-6" + } + ] + } + }, + "styles": { + "variations": { + "section-2": { + "color": { + "text": "var:preset|color|base" + }, + "elements": { + "button": { + "color": { + "background": "var:preset|color|base", + "text": "var:preset|color|accent-2" + }, + ":hover": { + "color": { + "text": "var:preset|color|accent-2" + } + } + }, + "link": { + "color": { + "text": "currentColor" + } + } + } + } + } + } +} diff --git a/wp-content/themes/twentytwentyfive/styles/colors/06-morning.json b/wp-content/themes/twentytwentyfive/styles/colors/06-morning.json new file mode 100644 index 0000000..4330045 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/styles/colors/06-morning.json @@ -0,0 +1,234 @@ +{ + "$schema": "https://schemas.wp.org/wp/6.7/theme.json", + "version": 3, + "title": "Morning", + "settings": { + "color": { + "palette": [ + { + "color": "#DFDCD7", + "name": "Base", + "slug": "base" + }, + { + "color": "#191919", + "name": "Contrast", + "slug": "contrast" + }, + { + "color": "#7A9BDB", + "name": "Accent 1", + "slug": "accent-1" + }, + { + "color": "#F7E6FF", + "name": "Accent 2", + "slug": "accent-2" + }, + { + "color": "#182949", + "name": "Accent 3", + "slug": "accent-3" + }, + { + "color": "#5F5F5F", + "name": "Accent 4", + "slug": "accent-4" + }, + { + "color": "#D7D3CC", + "name": "Accent 5", + "slug": "accent-5" + }, + { + "color": "#19191933", + "name": "Accent 6", + "slug": "accent-6" + } + ] + } + }, + "styles": { + "color": { + "text": "var:preset|color|accent-4" + }, + "blocks": { + "core/code": { + "color": { + "text": "var:preset|color|contrast", + "background": "var:preset|color|accent-5" + } + }, + "core/paragraph": { + "elements": { + "link": { + "color": { + "text": "var:preset|color|contrast" + } + } + } + }, + "core/post-author-name": { + "elements": { + "link": { + "color": { + "text": "var:preset|color|contrast" + } + } + } + }, + "core/post-title": { + "elements": { + "link": { + "color": { + "text": "var:preset|color|contrast" + } + } + } + }, + "core/pullquote": { + "color": { + "text": "var:preset|color|contrast" + }, + "elements": { + "cite": { + "color": { + "text": "var:preset|color|accent-4" + } + } + } + }, + "core/quote": { + "elements": { + "cite": { + "color": { + "text": "var:preset|color|accent-4" + } + } + } + } + }, + "elements": { + "button": { + "color": { + "text": "var:preset|color|contrast", + "background": "var:preset|color|accent-1" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--accent-1) 85%, transparent)", + "text": "var:preset|color|contrast" + } + } + }, + "heading": { + "color": { + "text": "var:preset|color|contrast" + } + }, + "link": { + "color": { + "text": "currentColor" + } + } + }, + "variations": { + "post-terms-1": { + "elements": { + "link": { + "color": { + "background": "var:preset|color|accent-5" + }, + "border": { + "color": "var:preset|color|accent-5" + } + } + } + }, + "section-2": { + "elements": { + "button": { + "color": { + "background": "var:preset|color|accent-1", + "text": "var:preset|color|contrast" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--accent-1) 85%, transparent)" + } + } + } + } + }, + "section-3": { + "elements": { + "button": { + "color": { + "background": "var:preset|color|contrast", + "text": "var:preset|color|base" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--contrast) 85%, transparent)" + } + } + } + } + }, + "section-4": { + "color": { + "text": "var:preset|color|base" + }, + "elements": { + "heading": { + "color": { + "text": "currentColor" + } + }, + "button": { + "color": { + "background": "var:preset|color|accent-1", + "text": "var:preset|color|contrast" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--accent-1) 85%, transparent)", + "text": "var:preset|color|contrast" + } + } + }, + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "section-5": { + "elements": { + "heading": { + "color": { + "text": "var:preset|color|base" + } + }, + "button": { + "color": { + "background": "var:preset|color|accent-1", + "text": "var:preset|color|contrast" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--accent-1) 85%, transparent)" + } + } + }, + "link": { + "color": { + "text": "currentColor" + } + } + } + } + } + } +} diff --git a/wp-content/themes/twentytwentyfive/styles/colors/07-sunrise.json b/wp-content/themes/twentytwentyfive/styles/colors/07-sunrise.json new file mode 100644 index 0000000..ee39df9 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/styles/colors/07-sunrise.json @@ -0,0 +1,285 @@ +{ + "$schema": "https://schemas.wp.org/wp/6.7/theme.json", + "version": 3, + "title": "Sunrise", + "settings": { + "color": { + "palette": [ + { + "color": "#330616", + "name": "Base", + "slug": "base" + }, + { + "color": "#FFFFFF", + "name": "Contrast", + "slug": "contrast" + }, + { + "color": "#F0FDA6", + "name": "Accent 1", + "slug": "accent-1" + }, + { + "color": "#DB9AB1", + "name": "Accent 2", + "slug": "accent-2" + }, + { + "color": "#C1E4E7", + "name": "Accent 3", + "slug": "accent-3" + }, + { + "color": "#DB9AB1", + "name": "Accent 4", + "slug": "accent-4" + }, + { + "color": "#4A1628", + "name": "Accent 5", + "slug": "accent-5" + }, + { + "color": "#DB9AB133", + "name": "Accent 6", + "slug": "accent-6" + } + ] + } + }, + "styles": { + "color": { + "text": "var:preset|color|accent-2" + }, + "blocks": { + "core/code": { + "color": { + "text": "var:preset|color|accent-2", + "background": "var:preset|color|accent-5" + } + }, + "core/post-author-name": { + "color": { + "text": "var:preset|color|contrast" + }, + "elements": { + "link": { + "color": { + "text": "var:preset|color|contrast" + } + } + } + }, + "core/post-terms": { + "color": { + "text": "var:preset|color|contrast" + }, + "elements": { + "link": { + "color": { + "text": "var:preset|color|contrast" + } + } + } + }, + "core/post-title": { + "elements": { + "link": { + "color": { + "text": "var:preset|color|accent-2" + } + } + } + }, + "core/pullquote": { + "color": { + "text": "var:preset|color|accent-2" + }, + "elements": { + "cite": { + "color": { + "text": "var:preset|color|accent-2" + } + } + } + }, + "core/quote": { + "color": { + "text": "var:preset|color|accent-2" + }, + "elements": { + "cite": { + "color": { + "text": "var:preset|color|accent-2" + } + } + } + }, + "core/site-title": { + "elements": { + "link": { + "color": { + "text": "var:preset|color|accent-2" + } + } + } + } + }, + "elements": { + "button": { + "color": { + "text": "var:preset|color|base", + "background": "var:preset|color|accent-2" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--accent-2) 85%, transparent)" + } + } + }, + "link": { + "color": { + "text": "var:preset|color|contrast" + } + } + }, + "variations": { + "post-terms-1": { + "elements": { + "link": { + "color": { + "background": "var:preset|color|accent-5" + }, + "border": { + "color": "var:preset|color|accent-5" + } + } + } + }, + "section-1": { + "color": { + "text": "var:preset|color|accent-5", + "background": "var:preset|color|contrast" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + }, + "button": { + "color": { + "background": "var:preset|color|base", + "text": "var:preset|color|contrast" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--base) 85%, transparent)" + } + } + } + } + }, + "section-2": { + "color": { + "text": "var:preset|color|base" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + }, + "button": { + "color": { + "background": "var:preset|color|base", + "text": "var:preset|color|contrast" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--base) 85%, transparent)" + } + } + } + } + }, + "section-3": { + "color": { + "text": "var:preset|color|base" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + }, + "button": { + "color": { + "background": "var:preset|color|base", + "text": "var:preset|color|contrast" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--base) 85%, transparent)" + } + } + } + } + }, + "section-4": { + "color": { + "text": "var:preset|color|base" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + }, + "button": { + "color": { + "background": "var:preset|color|base", + "text": "var:preset|color|contrast" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--base) 85%, transparent)" + } + } + } + } + }, + "section-5": { + "color": { + "text": "var:preset|color|contrast", + "background": "var:preset|color|accent-5" + }, + "elements": { + "heading": { + "color": { + "text": "currentColor" + } + }, + "link": { + "color": { + "text": "currentColor" + } + }, + "button": { + "color": { + "background": "var:preset|color|contrast", + "text": "var:preset|color|base" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--contrast) 85%, transparent)", + "text": "var:preset|color|base" + } + } + } + } + } + } + } +} diff --git a/wp-content/themes/twentytwentyfive/styles/colors/08-midnight.json b/wp-content/themes/twentytwentyfive/styles/colors/08-midnight.json new file mode 100644 index 0000000..c995e2e --- /dev/null +++ b/wp-content/themes/twentytwentyfive/styles/colors/08-midnight.json @@ -0,0 +1,144 @@ +{ + "$schema": "https://schemas.wp.org/wp/6.7/theme.json", + "version": 3, + "title": "Midnight", + "settings": { + "color": { + "duotone": [ + { + "colors": [ + "#4433A6", + "#79F3B1" + ], + "name": "Midnight filter", + "slug": "midnight-filter" + } + ], + "palette": [ + { + "color": "#4433A6", + "name": "Base", + "slug": "base" + }, + { + "color": "#79F3B1", + "name": "Contrast", + "slug": "contrast" + }, + { + "color": "#5644BC", + "name": "Accent 1", + "slug": "accent-1" + }, + { + "color": "#372696", + "name": "Accent 2", + "slug": "accent-2" + }, + { + "color": "#251D51", + "name": "Accent 3", + "slug": "accent-3" + }, + { + "color": "#79F3B1", + "name": "Accent 4", + "slug": "accent-4" + }, + { + "color": "#E8B7FF", + "name": "Accent 5", + "slug": "accent-5" + }, + { + "color": "#79F3B133", + "name": "Accent 6", + "slug": "accent-6" + } + ] + } + }, + "styles": { + "blocks": { + "core/code": { + "color": { + "background": "var:preset|color|accent-2", + "text": "var:preset|color|contrast" + } + }, + "core/post-date": { + "color": { + "text": "var:preset|color|contrast" + }, + "elements": { + "link": { + "color": { + "text": "var:preset|color|contrast" + } + } + } + } + }, + "elements": { + "button": { + "color": { + "background": "var:preset|color|contrast", + "text": "var:preset|color|base" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--contrast) 85%, transparent)" + } + } + } + }, + "variations": { + "section-1": { + "color": { + "text": "var:preset|color|accent-3" + }, + "elements": { + "button": { + "color": { + "background": "var:preset|color|accent-3", + "text": "var:preset|color|accent-5" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--accent-3) 85%, transparent)" + } + } + }, + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "section-4": { + "color": { + "text": "var:preset|color|accent-5" + }, + "elements": { + "button": { + "color": { + "background": "var:preset|color|accent-5", + "text": "var:preset|color|accent-3" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--accent-5) 85%, transparent)" + } + } + }, + "link": { + "color": { + "text": "currentColor" + } + } + } + } + } + } +} diff --git a/wp-content/themes/twentytwentyfive/styles/sections/section-1.json b/wp-content/themes/twentytwentyfive/styles/sections/section-1.json new file mode 100644 index 0000000..642f3b2 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/styles/sections/section-1.json @@ -0,0 +1,130 @@ +{ + "$schema": "https://schemas.wp.org/wp/6.7/theme.json", + "version": 3, + "slug": "section-1", + "title": "Style 1", + "blockTypes": [ + "core/group", + "core/columns", + "core/column" + ], + "styles": { + "color": { + "background": "var:preset|color|accent-5", + "text": "var:preset|color|contrast" + }, + "blocks": { + "core/separator": { + "color": { + "text": "color-mix(in srgb, currentColor 25%, transparent)" + } + }, + "core/site-title": { + "color": { + "text": "currentColor" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "core/post-author-name": { + "color": { + "text": "currentColor" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "core/post-date": { + "color":{ + "text": "color-mix(in srgb, currentColor 85%, transparent)" + }, + "elements": { + "link": { + "color" : { + "text": "color-mix(in srgb, currentColor 85%, transparent)" + } + } + } + }, + "core/post-terms": { + "color": { + "text": "currentColor" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "core/comment-author-name": { + "color": { + "text": "currentColor" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "core/comment-date": { + "color": { + "text": "currentColor" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "core/comment-edit-link": { + "color": { + "text": "currentColor" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "core/comment-reply-link": { + "color": { + "text": "currentColor" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "core/pullquote": { + "color": { + "text": "currentColor" + } + }, + "core/quote": { + "color": { + "text": "currentColor" + } + } + } + } +} diff --git a/wp-content/themes/twentytwentyfive/styles/sections/section-2.json b/wp-content/themes/twentytwentyfive/styles/sections/section-2.json new file mode 100644 index 0000000..81459c0 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/styles/sections/section-2.json @@ -0,0 +1,118 @@ +{ + "$schema": "https://schemas.wp.org/wp/6.7/theme.json", + "version": 3, + "slug": "section-2", + "title": "Style 2", + "blockTypes": [ + "core/group", + "core/columns", + "core/column" + ], + "styles": { + "color": { + "background": "var:preset|color|accent-2", + "text": "var:preset|color|contrast" + }, + "blocks": { + "core/separator": { + "color": { + "text": "color-mix(in srgb, currentColor 25%, transparent)" + } + }, + "core/post-author-name": { + "color": { + "text": "currentColor" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "core/post-date": { + "color":{ + "text": "color-mix(in srgb, currentColor 85%, transparent)" + }, + "elements": { + "link": { + "color" : { + "text": "color-mix(in srgb, currentColor 85%, transparent)" + } + } + } + }, + "core/post-terms": { + "color": { + "text": "currentColor" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "core/comment-author-name": { + "color": { + "text": "currentColor" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "core/comment-date": { + "color": { + "text": "currentColor" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "core/comment-edit-link": { + "color": { + "text": "currentColor" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "core/comment-reply-link": { + "color": { + "text": "currentColor" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "core/pullquote": { + "color": { + "text": "currentColor" + } + }, + "core/quote": { + "color": { + "text": "currentColor" + } + } + } + } +} diff --git a/wp-content/themes/twentytwentyfive/styles/sections/section-3.json b/wp-content/themes/twentytwentyfive/styles/sections/section-3.json new file mode 100644 index 0000000..3d1c0a6 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/styles/sections/section-3.json @@ -0,0 +1,118 @@ +{ + "$schema": "https://schemas.wp.org/wp/6.7/theme.json", + "version": 3, + "slug": "section-3", + "title": "Style 3", + "blockTypes": [ + "core/group", + "core/columns", + "core/column" + ], + "styles": { + "color": { + "background": "var:preset|color|accent-1", + "text": "var:preset|color|contrast" + }, + "blocks": { + "core/separator": { + "color": { + "text": "color-mix(in srgb, currentColor 25%, transparent)" + } + }, + "core/post-author-name": { + "color": { + "text": "currentColor" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "core/post-date": { + "color":{ + "text": "color-mix(in srgb, currentColor 85%, transparent)" + }, + "elements": { + "link": { + "color" : { + "text": "color-mix(in srgb, currentColor 85%, transparent)" + } + } + } + }, + "core/post-terms": { + "color": { + "text": "currentColor" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "core/comment-author-name": { + "color": { + "text": "currentColor" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "core/comment-date": { + "color": { + "text": "currentColor" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "core/comment-edit-link": { + "color": { + "text": "currentColor" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "core/comment-reply-link": { + "color": { + "text": "currentColor" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "core/pullquote": { + "color": { + "text": "currentColor" + } + }, + "core/quote": { + "color": { + "text": "currentColor" + } + } + } + } +} diff --git a/wp-content/themes/twentytwentyfive/styles/sections/section-4.json b/wp-content/themes/twentytwentyfive/styles/sections/section-4.json new file mode 100644 index 0000000..226779b --- /dev/null +++ b/wp-content/themes/twentytwentyfive/styles/sections/section-4.json @@ -0,0 +1,132 @@ +{ + "$schema": "https://schemas.wp.org/wp/6.7/theme.json", + "version": 3, + "slug": "section-4", + "title": "Style 4", + "blockTypes": [ + "core/group", + "core/columns", + "core/column" + ], + "styles": { + "color": { + "background": "var:preset|color|accent-3", + "text": "var:preset|color|accent-2" + }, + "blocks": { + "core/separator": { + "color": { + "text": "color-mix(in srgb, currentColor 25%, transparent)" + } + }, + "core/post-author-name": { + "color": { + "text": "currentColor" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "core/post-date": { + "color":{ + "text": "color-mix(in srgb, currentColor 85%, transparent)" + }, + "elements": { + "link": { + "color" : { + "text": "color-mix(in srgb, currentColor 85%, transparent)" + } + } + } + }, + "core/post-terms": { + "color": { + "text": "currentColor" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "core/comment-author-name": { + "color": { + "text": "currentColor" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "core/comment-date": { + "color": { + "text": "currentColor" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "core/comment-edit-link": { + "color": { + "text": "currentColor" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "core/comment-reply-link": { + "color": { + "text": "currentColor" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "core/pullquote": { + "color": { + "text": "currentColor" + } + }, + "core/quote": { + "color": { + "text": "currentColor" + } + } + }, + "elements": { + "button": { + "color": { + "background": "var:preset|color|accent-2", + "text": "var:preset|color|accent-3" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--accent-2) 85%, transparent)", + "text": "var:preset|color|accent-3" + } + } + } + } + } +} diff --git a/wp-content/themes/twentytwentyfive/styles/sections/section-5.json b/wp-content/themes/twentytwentyfive/styles/sections/section-5.json new file mode 100644 index 0000000..c9b37a8 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/styles/sections/section-5.json @@ -0,0 +1,132 @@ +{ + "$schema": "https://schemas.wp.org/wp/6.7/theme.json", + "version": 3, + "slug": "section-5", + "title": "Style 5", + "blockTypes": [ + "core/group", + "core/columns", + "core/column" + ], + "styles": { + "color": { + "background": "var:preset|color|contrast", + "text": "var:preset|color|base" + }, + "blocks": { + "core/separator": { + "color": { + "text": "color-mix(in srgb, currentColor 25%, transparent)" + } + }, + "core/post-author-name": { + "color": { + "text": "currentColor" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "core/post-date": { + "color":{ + "text": "color-mix(in srgb, currentColor 85%, transparent)" + }, + "elements": { + "link": { + "color" : { + "text": "color-mix(in srgb, currentColor 85%, transparent)" + } + } + } + }, + "core/post-terms": { + "color": { + "text": "currentColor" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "core/comment-author-name": { + "color": { + "text": "currentColor" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "core/comment-date": { + "color": { + "text": "currentColor" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "core/comment-edit-link": { + "color": { + "text": "currentColor" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "core/comment-reply-link": { + "color": { + "text": "currentColor" + }, + "elements": { + "link": { + "color": { + "text": "currentColor" + } + } + } + }, + "core/pullquote": { + "color": { + "text": "currentColor" + } + }, + "core/quote": { + "color": { + "text": "currentColor" + } + } + }, + "elements": { + "button": { + "color": { + "background": "var:preset|color|base", + "text": "var:preset|color|contrast" + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--base) 80%, transparent)", + "text": "var:preset|color|contrast" + } + } + } + } + } +} diff --git a/wp-content/themes/twentytwentyfive/styles/typography/typography-preset-1.json b/wp-content/themes/twentytwentyfive/styles/typography/typography-preset-1.json new file mode 100644 index 0000000..ad6c6cd --- /dev/null +++ b/wp-content/themes/twentytwentyfive/styles/typography/typography-preset-1.json @@ -0,0 +1,292 @@ +{ + "version": 3, + "$schema": "https://schemas.wp.org/wp/6.7/theme.json", + "title": "Beiruti & Literata", + "slug": "typography-preset-1", + "settings": { + "typography": { + "fontFamilies": [ + { + "name": "Beiruti", + "slug": "beiruti", + "fontFamily": "Beiruti, sans-serif", + "fontFace": [ + { + "fontFamily": "Beiruti", + "fontStyle": "normal", + "fontWeight": "200 900", + "src": [ + "file:./assets/fonts/beiruti/Beiruti-VariableFont_wght.woff2" + ] + } + ] + }, + { + "name": "Literata", + "slug": "literata", + "fontFamily": "Literata, serif", + "fontFace": [ + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-ExtraLight.woff2" + ], + "fontWeight": "200", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-ExtraLightItalic.woff2" + ], + "fontWeight": "200", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-Light.woff2" + ], + "fontWeight": "300", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-LightItalic.woff2" + ], + "fontWeight": "300", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-Regular.woff2" + ], + "fontWeight": "400", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-RegularItalic.woff2" + ], + "fontWeight": "400", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-Medium.woff2" + ], + "fontWeight": "500", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-MediumItalic.woff2" + ], + "fontWeight": "500", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-SemiBold.woff2" + ], + "fontWeight": "600", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-SemiBoldItalic.woff2" + ], + "fontWeight": "600", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-Bold.woff2" + ], + "fontWeight": "700", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-BoldItalic.woff2" + ], + "fontWeight": "700", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-ExtraBold.woff2" + ], + "fontWeight": "800", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-ExtraBoldItalic.woff2" + ], + "fontWeight": "800", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-Black.woff2" + ], + "fontWeight": "900", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-BlackItalic.woff2" + ], + "fontWeight": "900", + "fontStyle": "italic", + "fontFamily": "Literata" + } + ] + } + ], + "fontSizes": [ + { + "fluid": false, + "name": "Small", + "size": "0.9rem", + "slug": "small" + }, + { + "fluid": { + "max": "1.2rem", + "min": "1rem" + }, + "name": "Medium", + "size": "1rem", + "slug": "medium" + }, + { + "fluid": { + "max": "1.8rem", + "min": "1.6rem" + }, + "name": "Large", + "size": "1.6rem", + "slug": "large" + }, + { + "fluid": { + "max": "2.2rem", + "min": "1.8em" + }, + "name": "Extra Large", + "size": "1.8rem", + "slug": "x-large" + }, + { + "fluid": { + "max": "2.8rem", + "min": "2rem" + }, + "name": "Extra Extra Large", + "size": "2rem", + "slug": "xx-large" + } + ] + } + }, + "styles": { + "typography": { + "fontFamily": "var:preset|font-family|literata", + "fontSize": "var:preset|font-size|medium", + "letterSpacing": "-0.01em", + "lineHeight": "1.6" + }, + "blocks": { + "core/button": { + "typography": { + "fontFamily": "var:preset|font-family|beiruti" + } + }, + "core/list": { + "typography": { + "lineHeight": "1.3" + } + }, + "core/loginout": { + "typography": { + "fontSize": "var:preset|font-size|medium" + } + }, + "core/post-terms": { + "typography": { + "fontWeight": "300" + } + }, + "core/pullquote": { + "typography": { + "fontFamily": "var:preset|font-family|beiruti", + "fontWeight": "500", + "lineHeight": "1" + } + }, + "core/quote": { + "typography": { + "fontSize": "var:preset|font-size|medium" + } + }, + "core/query-pagination": { + "typography": { + "fontWeight": "300" + } + }, + "core/site-tagline": { + "typography": { + "fontSize": "var:preset|font-size|small" + } + }, + "core/site-title": { + "typography": { + "fontFamily": "var:preset|font-family|beiruti", + "fontWeight": "600", + "letterSpacing": "2.4px", + "textTransform": "uppercase" + } + } + }, + "elements": { + "h4": { + "typography": { + "fontSize": "var:preset|font-size|large" + } + }, + "h5": { + "typography": { + "fontSize": "var:preset|font-size|medium", + "letterSpacing": "0px" + } + }, + "h6": { + "typography": { + "fontSize": "var:preset|font-size|small" + } + }, + "heading": { + "typography": { + "fontFamily": "var:preset|font-family|beiruti", + "fontWeight": "500", + "letterSpacing": "-0.02em", + "lineHeight": "1.02" + } + } + } + } +} diff --git a/wp-content/themes/twentytwentyfive/styles/typography/typography-preset-2.json b/wp-content/themes/twentytwentyfive/styles/typography/typography-preset-2.json new file mode 100644 index 0000000..e3e26b3 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/styles/typography/typography-preset-2.json @@ -0,0 +1,150 @@ +{ + "version": 3, + "$schema": "https://schemas.wp.org/wp/6.7/theme.json", + "title": "Vollkorn & Fira Code", + "slug": "typography-preset-2", + "settings": { + "typography": { + "fontFamilies": [ + { + "name": "Vollkorn", + "slug": "vollkorn", + "fontFamily": "Vollkorn, serif", + "fontFace": [ + { + "src": [ + "file:./assets/fonts/vollkorn/Vollkorn-Italic-VariableFont_wght.woff2" + ], + "fontWeight": "400 900", + "fontStyle": "italic", + "fontFamily": "Vollkorn" + }, + { + "src": [ + "file:./assets/fonts/vollkorn/Vollkorn-VariableFont_wght.woff2" + ], + "fontWeight": "400 900", + "fontStyle": "normal", + "fontFamily": "Vollkorn" + } + ] + }, + { + "name": "Fira Code", + "slug": "fira-code", + "fontFamily": "\"Fira Code\", monospace", + "fontFace": [ + { + "src": [ + "file:./assets/fonts/fira-code/FiraCode-VariableFont_wght.woff2" + ], + "fontWeight": "300 700", + "fontStyle": "normal", + "fontFamily": "\"Fira Code\"" + } + ] + } + ] + } + }, + "styles": { + "typography": { + "fontFamily": "var:preset|font-family|fira-code", + "fontSize": "var:preset|font-size|medium", + "letterSpacing": "-0.18px", + "lineHeight": "1.5" + }, + "blocks": { + "core/post-author-name": { + "typography": { + "fontWeight": "300" + } + }, + "core/post-terms": { + "typography": { + "fontWeight": "300" + } + }, + "core/post-title": { + "typography": { + "fontWeight": "400", + "letterSpacing": "-0.96px" + } + }, + "core/pullquote": { + "typography": { + "fontFamily": "var:preset|font-family|vollkorn", + "fontSize": "var:preset|font-size|x-large", + "fontWeight": "400" + }, + "elements": { + "cite": { + "typography": { + "fontFamily": "var:preset|font-family|fira-code", + "fontWeight": "300", + "letterSpacing": "-0.14px" + } + } + } + }, + "core/quote": { + "typography": { + "fontFamily": "var:preset|font-family|fira-code", + "fontWeight": "500", + "letterSpacing": "-0.18px" + } + }, + "core/site-title": { + "typography": { + "fontFamily": "var:preset|font-family|vollkorn", + "fontSize": "var:preset|font-size|x-large" + } + } + }, + "elements": { + "button": { + "typography": { + "fontFamily": "var:preset|font-family|fira-code", + "fontSize": "var:preset|font-size|medium", + "fontWeight": "400", + "letterSpacing": "-0.36px" + } + }, + "heading": { + "typography": { + "fontFamily": "var:preset|font-family|vollkorn" + } + }, + "h1": { + "typography": { + "fontSize": "48px", + "letterSpacing": "-0.96px;" + } + }, + "h2": { + "typography": { + "fontSize": "38px", + "letterSpacing": "-0.96px" + } + }, + "h3": { + "typography": { + "fontSize": "32px", + "letterSpacing": "-0.64px" + } + }, + "h4": { + "typography": { + "fontSize": "28px", + "letterSpacing": "-0.56px" + } + }, + "h5": { + "typography": { + "fontSize": "24px", + "letterSpacing": "-0.48px" + } + } + } + } +} diff --git a/wp-content/themes/twentytwentyfive/styles/typography/typography-preset-3.json b/wp-content/themes/twentytwentyfive/styles/typography/typography-preset-3.json new file mode 100644 index 0000000..6d64153 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/styles/typography/typography-preset-3.json @@ -0,0 +1,186 @@ +{ + "version": 3, + "$schema": "https://schemas.wp.org/wp/6.7/theme.json", + "title": "Platypi & Ysabeau Office", + "slug": "typography-preset-3", + "settings": { + "typography": { + "fontFamilies": [ + { + "name": "Platypi", + "slug": "platypi", + "fontFamily": "Platypi", + "fontFace": [ + { + "fontFamily": "Platypi", + "fontStyle": "normal", + "fontWeight": "300 800", + "src": [ + "file:./assets/fonts/platypi/Platypi-VariableFont_wght.woff2" + ] + }, + { + "fontFamily": "Platypi", + "fontStyle": "italic", + "fontWeight": "300 800", + "src": [ + "file:./assets/fonts/platypi/Platypi-Italic-VariableFont_wght.woff2" + ] + } + ] + }, + { + "name": "Ysabeau Office", + "slug": "ysabeau-office", + "fontFamily": "\"Ysabeau Office\", sans-serif", + "fontFace": [ + { + "src": [ + "file:./assets/fonts/ysabeau-office/YsabeauOffice-VariableFont_wght.woff2" + ], + "fontWeight": "100 900", + "fontStyle": "normal", + "fontFamily": "\"Ysabeau Office\"" + }, + { + "src": [ + "file:./assets/fonts/ysabeau-office/YsabeauOffice-Italic-VariableFont_wght.woff2" + ], + "fontWeight": "100 900", + "fontStyle": "italic", + "fontFamily": "\"Ysabeau Office\"" + } + ] + } + ], + "fontSizes": [ + { + "fluid": false, + "name": "Small", + "size": "0.875rem", + "slug": "small" + }, + { + "fluid": { + "max": "1.125rem", + "min": "1rem" + }, + "name": "Medium", + "size": "1rem", + "slug": "medium" + }, + { + "fluid": { + "max": "1.375rem", + "min": "1.125rem" + }, + "name": "Large", + "size": "1.38rem", + "slug": "large" + }, + { + "fluid": { + "max": "1.8rem", + "min": "1.4rem" + }, + "name": "Extra Large", + "size": "1.4rem", + "slug": "x-large" + }, + { + "fluid": { + "max": "2.6rem", + "min": "2rem" + }, + "name": "Extra Extra Large", + "size": "2rem", + "slug": "xx-large" + } + ] + } + }, + "styles": { + "typography": { + "fontFamily": "var:preset|font-family|ysabeau-office", + "letterSpacing": "-0.22px", + "lineHeight": "1.5" + }, + "blocks":{ + "core/code": { + "typography": { + "letterSpacing": "0px" + } + }, + "core/heading": { + "typography": { + "lineHeight": "1.2" + } + }, + "core/list": { + "typography": { + "lineHeight": "1.3" + } + }, + "core/loginout": { + "typography": { + "fontSize": "var:preset|font-size|medium" + } + }, + "core/post-terms": { + "typography": { + "fontWeight": "400" + } + }, + "core/pullquote": { + "typography": { + "fontFamily": "var:preset|font-family|platypi", + "letterSpacing": "-0.01em", + "lineHeight": "1.1" + } + }, + "core/quote": { + "typography": { + "fontWeight": "300" + } + }, + "core/site-title": { + "typography": { + "fontFamily": "var:preset|font-family|ysabeau-office", + "fontSize": "var:preset|font-size|large", + "letterSpacing": "1.44px", + "textTransform": "uppercase" + } + } + }, + "elements": { + "button": { + "typography": { + "fontFamily": "var:preset|font-family|ysabeau-office", + "fontWeight": "600", + "letterSpacing": "1.44px", + "textTransform": "uppercase" + } + }, + "heading": { + "typography": { + "fontFamily": "var:preset|font-family|platypi" + } + }, + "h5": { + "typography": { + "fontSize": "var:preset|font-size|medium", + "letterSpacing": "normal" + } + }, + "h6": { + "typography": { + "fontSize": "var:preset|font-size|small", + "fontWeight": "400", + "fontStyle": "initial", + "letterSpacing": "initial", + "textTransform": "initial" + } + } + } + } +} diff --git a/wp-content/themes/twentytwentyfive/styles/typography/typography-preset-4.json b/wp-content/themes/twentytwentyfive/styles/typography/typography-preset-4.json new file mode 100644 index 0000000..62a6362 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/styles/typography/typography-preset-4.json @@ -0,0 +1,154 @@ +{ + "version": 3, + "$schema": "https://schemas.wp.org/wp/6.7/theme.json", + "title": "Roboto Slab & Manrope", + "slug": "typography-preset-4", + "settings": { + "typography": { + "fontFamilies": [ + { + "name": "Roboto Slab", + "slug": "roboto-slab", + "fontFamily": "\"Roboto Slab\", serif", + "fontFace": [ + { + "fontFamily": "\"Roboto Slab\"", + "fontStyle": "normal", + "fontWeight": "100 900", + "src": [ + "file:./assets/fonts/roboto-slab/RobotoSlab-VariableFont_wght.woff2" + ] + } + ] + }, + { + "name": "Manrope", + "slug": "manrope", + "fontFamily": "Manrope, sans-serif", + "fontFace": [ + { + "src": [ + "file:./assets/fonts/manrope/Manrope-VariableFont_wght.woff2" + ], + "fontWeight": "200 800", + "fontStyle": "normal", + "fontFamily": "Manrope" + } + ] + } + ], + "fontSizes": [ + { + "fluid": false, + "name": "Small", + "size": "0.875rem", + "slug": "small" + }, + { + "fluid": { + "max": "1.125rem", + "min": "1rem" + }, + "name": "Medium", + "size": "1rem", + "slug": "medium" + }, + { + "fluid": { + "max": "1.375rem", + "min": "1.125rem" + }, + "name": "Large", + "size": "1.38rem", + "slug": "large" + }, + { + "fluid": { + "max": "2rem", + "min": "1.75rem" + }, + "name": "Extra Large", + "size": "1.75rem", + "slug": "x-large" + }, + { + "fluid": { + "max": "2.4rem", + "min": "2.15rem" + }, + "name": "Extra Extra Large", + "size": "2.15rem", + "slug": "xx-large" + } + ] + } + }, + "styles": { + "typography": { + "letterSpacing": "0" + }, + "blocks": { + "core/navigation": { + "typography": { + "fontSize": "var:preset|font-size|large", + "letterSpacing": "-0.28px", + "textTransform": "uppercase" + } + }, + "core/post-author": { + "typography": { + "fontSize": "var:preset|font-size|small" + } + }, + "core/post-author-name": { + "typography": { + "fontSize": "var:preset|font-size|small" + } + }, + "core/post-terms": { + "typography": { + "fontWeight": "500" + } + }, + "core/pullquote": { + "typography": { + "fontFamily": "var:preset|font-family|roboto-slab", + "fontSize": "var:preset|font-size|xx-large", + "fontWeight": "200" + } + }, + "core/search": { + "typography": { + "textTransform": "uppercase" + } + }, + "core/site-tagline": { + "typography": { + "fontSize": "var:preset|font-size|large" + } + }, + "core/site-title": { + "typography": { + "textTransform": "uppercase" + } + } + }, + "elements": { + "button": { + "typography": { + "fontWeight": "500", + "letterSpacing": "-0.36px", + "textTransform": "uppercase" + } + }, + "heading": { + "typography": { + "fontFamily": "var:preset|font-family|roboto-slab", + "fontWeight": "300", + "letterSpacing": "-0.5px", + "lineHeight": "1.2" + } + } + } + } +} diff --git a/wp-content/themes/twentytwentyfive/styles/typography/typography-preset-5.json b/wp-content/themes/twentytwentyfive/styles/typography/typography-preset-5.json new file mode 100644 index 0000000..e30d03e --- /dev/null +++ b/wp-content/themes/twentytwentyfive/styles/typography/typography-preset-5.json @@ -0,0 +1,303 @@ +{ + "version": 3, + "$schema": "https://schemas.wp.org/wp/6.7/theme.json", + "title": "Literata & Ysabeau Office", + "slug": "typography-preset-5", + "settings": { + "typography": { + "fontFamilies": [ + { + "name": "Literata", + "slug": "literata", + "fontFamily": "Literata, serif", + "fontFace": [ + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-ExtraLight.woff2" + ], + "fontWeight": "200", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-ExtraLightItalic.woff2" + ], + "fontWeight": "200", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-Light.woff2" + ], + "fontWeight": "300", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-LightItalic.woff2" + ], + "fontWeight": "300", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-Regular.woff2" + ], + "fontWeight": "400", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-RegularItalic.woff2" + ], + "fontWeight": "400", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-Medium.woff2" + ], + "fontWeight": "500", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-MediumItalic.woff2" + ], + "fontWeight": "500", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-SemiBold.woff2" + ], + "fontWeight": "600", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-SemiBoldItalic.woff2" + ], + "fontWeight": "600", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-Bold.woff2" + ], + "fontWeight": "700", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-BoldItalic.woff2" + ], + "fontWeight": "700", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-ExtraBold.woff2" + ], + "fontWeight": "800", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-ExtraBoldItalic.woff2" + ], + "fontWeight": "800", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-Black.woff2" + ], + "fontWeight": "900", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-BlackItalic.woff2" + ], + "fontWeight": "900", + "fontStyle": "italic", + "fontFamily": "Literata" + } + ] + }, + { + "name": "Ysabeau Office", + "slug": "ysabeau-office", + "fontFamily": "\"Ysabeau Office\", sans-serif", + "fontFace": [ + { + "src": [ + "file:./assets/fonts/ysabeau-office/YsabeauOffice-VariableFont_wght.woff2" + ], + "fontWeight": "100 900", + "fontStyle": "normal", + "fontFamily": "\"Ysabeau Office\"" + }, + { + "src": [ + "file:./assets/fonts/ysabeau-office/YsabeauOffice-Italic-VariableFont_wght.woff2" + ], + "fontWeight": "100 900", + "fontStyle": "italic", + "fontFamily": "\"Ysabeau Office\"" + } + ] + } + ], + "fontSizes": [ + { + "fluid": false, + "name": "Small", + "size": "0.875rem", + "slug": "small" + }, + { + "fluid": { + "max": "1.125rem", + "min": "1rem" + }, + "name": "Medium", + "size": "1rem", + "slug": "medium" + }, + { + "fluid": { + "max": "1.375rem", + "min": "1.125rem" + }, + "name": "Large", + "size": "1.38rem", + "slug": "large" + }, + { + "fluid": { + "max": "2rem", + "min": "1.75rem" + }, + "name": "Extra Large", + "size": "1.75rem", + "slug": "x-large" + }, + { + "fluid": { + "max": "2.6rem", + "min": "1.4rem" + }, + "name": "Extra Extra Large", + "size": "2.6rem", + "slug": "xx-large" + } + ] + } + }, + "styles": { + "typography": { + "fontFamily": "var:preset|font-family|ysabeau-office", + "letterSpacing": "-0.24px" + }, + "blocks": { + "core/navigation": { + "typography": { + "fontSize": "1.25rem" + } + }, + "core/post-title": { + "typography": { + "fontWeight": "900", + "letterSpacing": "-0.96px" + } + }, + "core/pullquote": { + "typography": { + "fontSize": "var:preset|font-size|xx-large" + }, + "elements": { + "cite": { + "typography": { + "fontSize": "var:preset|font-size|medium", + "letterSpacing": "-0.14px" + } + } + } + }, + "core/quote": { + "elements": { + "cite": { + "typography": { + "fontSize": "var:preset|font-size|medium", + "letterSpacing": "-0.14px" + } + } + } + }, + "core/query-title": { + "typography": { + "fontWeight": "900" + } + }, + "core/site-title": { + "typography": { + "fontFamily": "var:preset|font-family|ysabeau-office", + "textTransform": "uppercase", + "letterSpacing": "1.6px" + } + } + }, + "elements": { + "button": { + "typography": { + "fontFamily": "var:preset|font-family|literata", + "fontSize": "var:preset|font-size|medium", + "fontWeight": "900", + "letterSpacing": "-0.36px" + } + }, + "heading": { + "typography": { + "fontFamily": "var:preset|font-family|literata", + "fontWeight": "900", + "lineHeight": "1.2" + } + }, + "h5": { + "typography": { + "letterSpacing": "0px" + } + }, + "h6": { + "typography": { + "fontWeight": "900", + "letterSpacing": "0px" + } + } + }, + "variations": { + "post-terms-1": { + "typography": { + "fontSize": "var:preset|font-size|medium" + } + } + } + } +} diff --git a/wp-content/themes/twentytwentyfive/styles/typography/typography-preset-6.json b/wp-content/themes/twentytwentyfive/styles/typography/typography-preset-6.json new file mode 100644 index 0000000..d9eb663 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/styles/typography/typography-preset-6.json @@ -0,0 +1,257 @@ +{ + "version": 3, + "$schema": "https://schemas.wp.org/wp/6.7/theme.json", + "title": "Platypi & Literata", + "slug": "typography-preset-6", + "settings": { + "typography": { + "fontFamilies": [ + { + "name": "Platypi", + "slug": "platypi", + "fontFamily": "Platypi", + "fontFace": [ + { + "fontFamily": "Platypi", + "fontStyle": "normal", + "fontWeight": "300 800", + "src": [ + "file:./assets/fonts/platypi/Platypi-VariableFont_wght.woff2" + ] + }, + { + "fontFamily": "Platypi", + "fontStyle": "italic", + "fontWeight": "300 800", + "src": [ + "file:./assets/fonts/platypi/Platypi-Italic-VariableFont_wght.woff2" + ] + } + ] + }, + { + "name": "Literata", + "slug": "literata", + "fontFamily": "Literata, serif", + "fontFace": [ + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-ExtraLight.woff2" + ], + "fontWeight": "200", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-ExtraLightItalic.woff2" + ], + "fontWeight": "200", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-Light.woff2" + ], + "fontWeight": "300", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-LightItalic.woff2" + ], + "fontWeight": "300", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-Regular.woff2" + ], + "fontWeight": "400", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-RegularItalic.woff2" + ], + "fontWeight": "400", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-Medium.woff2" + ], + "fontWeight": "500", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-MediumItalic.woff2" + ], + "fontWeight": "500", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-SemiBold.woff2" + ], + "fontWeight": "600", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-SemiBoldItalic.woff2" + ], + "fontWeight": "600", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-Bold.woff2" + ], + "fontWeight": "700", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-BoldItalic.woff2" + ], + "fontWeight": "700", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-ExtraBold.woff2" + ], + "fontWeight": "800", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-ExtraBoldItalic.woff2" + ], + "fontWeight": "800", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-Black.woff2" + ], + "fontWeight": "900", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-BlackItalic.woff2" + ], + "fontWeight": "900", + "fontStyle": "italic", + "fontFamily": "Literata" + } + ] + } + ] + } + }, + "styles": { + "typography": { + "fontFamily": "var:preset|font-family|literata", + "fontSize": "1.5rem", + "letterSpacing": "-0.24px", + "lineHeight": "1.3" + }, + "blocks": { + "core/navigation": { + "typography": { + "fontSize": "1.25rem" + } + }, + "core/post-terms": { + "typography": { + "fontWeight": "400" + } + }, + "core/post-title": { + "typography": { + "fontWeight": "800", + "letterSpacing": "-0.96px" + } + }, + "core/pullquote": { + "typography": { + "fontFamily": "var:preset|font-family|platypi", + "fontSize": "var:preset|font-size|x-large", + "letterSpacing": "-0.76px", + "fontWeight": "800" + }, + "elements": { + "cite": { + "typography": { + "fontFamily": "var:preset|font-family|literata", + "fontWeight": "400", + "letterSpacing": "-0.14px" + } + } + } + }, + "core/quote": { + "typography": { + "fontSize": "1.5rem", + "fontWeight": "600", + "letterSpacing": "-0.24px" + }, + "elements": { + "cite": { + "typography": { + "letterSpacing": "-0.14px" + } + } + } + }, + "core/site-title": { + "typography": { + "fontFamily": "var:preset|font-family|platypi", + "fontSize": "30px", + "fontWeight": "800", + "letterSpacing": "-0.6px" + } + } + }, + "elements": { + "button": { + "typography": { + "fontFamily": "var:preset|font-family|platypi", + "fontSize": "1.5rem", + "fontWeight": "800" + } + }, + "heading": { + "typography": { + "fontFamily": "var:preset|font-family|platypi", + "fontWeight": "800" + } + } + }, + "variations": { + "post-terms-1": { + "typography": { + "fontSize": "16px" + } + } + } + } +} diff --git a/wp-content/themes/twentytwentyfive/styles/typography/typography-preset-7.json b/wp-content/themes/twentytwentyfive/styles/typography/typography-preset-7.json new file mode 100644 index 0000000..69b1740 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/styles/typography/typography-preset-7.json @@ -0,0 +1,411 @@ +{ + "version": 3, + "$schema": "https://schemas.wp.org/wp/6.7/theme.json", + "title": "Literata & Fira Sans", + "slug": "typography-preset-7", + "settings": { + "typography": { + "fontFamilies": [ + { + "name": "Literata", + "slug": "literata", + "fontFamily": "Literata, serif", + "fontFace": [ + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-ExtraLight.woff2" + ], + "fontWeight": "200", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-ExtraLightItalic.woff2" + ], + "fontWeight": "200", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-Light.woff2" + ], + "fontWeight": "300", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-LightItalic.woff2" + ], + "fontWeight": "300", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-Regular.woff2" + ], + "fontWeight": "400", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-RegularItalic.woff2" + ], + "fontWeight": "400", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-Medium.woff2" + ], + "fontWeight": "500", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-MediumItalic.woff2" + ], + "fontWeight": "500", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-SemiBold.woff2" + ], + "fontWeight": "600", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-SemiBoldItalic.woff2" + ], + "fontWeight": "600", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-Bold.woff2" + ], + "fontWeight": "700", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-BoldItalic.woff2" + ], + "fontWeight": "700", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-ExtraBold.woff2" + ], + "fontWeight": "800", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-ExtraBoldItalic.woff2" + ], + "fontWeight": "800", + "fontStyle": "italic", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-Black.woff2" + ], + "fontWeight": "900", + "fontStyle": "normal", + "fontFamily": "Literata" + }, + { + "src": [ + "file:./assets/fonts/literata/Literata72pt-BlackItalic.woff2" + ], + "fontWeight": "900", + "fontStyle": "italic", + "fontFamily": "Literata" + } + ] + }, + { + "name": "Fira Sans", + "slug": "fira-sans", + "fontFamily": "\"Fira Sans\", sans-serif", + "fontFace": [ + { + "src": [ + "file:./assets/fonts/fira-sans/FiraSans-Thin.woff2" + ], + "fontWeight": "100", + "fontStyle": "normal", + "fontFamily": "\"Fira Sans\"" + }, + { + "src": [ + "file:./assets/fonts/fira-sans/FiraSans-ThinItalic.woff2" + ], + "fontWeight": "100", + "fontStyle": "italic", + "fontFamily": "\"Fira Sans\"" + }, + { + "src": [ + "file:./assets/fonts/fira-sans/FiraSans-ExtraLight.woff2" + ], + "fontWeight": "200", + "fontStyle": "normal", + "fontFamily": "\"Fira Sans\"" + }, + { + "src": [ + "file:./assets/fonts/fira-sans/FiraSans-ExtraLightItalic.woff2" + ], + "fontWeight": "200", + "fontStyle": "italic", + "fontFamily": "\"Fira Sans\"" + }, + { + "src": [ + "file:./assets/fonts/fira-sans/FiraSans-Light.woff2" + ], + "fontWeight": "300", + "fontStyle": "normal", + "fontFamily": "\"Fira Sans\"" + }, + { + "src": [ + "file:./assets/fonts/fira-sans/FiraSans-LightItalic.woff2" + ], + "fontWeight": "300", + "fontStyle": "italic", + "fontFamily": "\"Fira Sans\"" + }, + { + "src": [ + "file:./assets/fonts/fira-sans/FiraSans-Italic.woff2" + ], + "fontWeight": "400", + "fontStyle": "italic", + "fontFamily": "\"Fira Sans\"" + }, + { + "src": [ + "file:./assets/fonts/fira-sans/FiraSans-Regular.woff2" + ], + "fontWeight": "400", + "fontStyle": "normal", + "fontFamily": "\"Fira Sans\"" + }, + { + "src": [ + "file:./assets/fonts/fira-sans/FiraSans-Medium.woff2" + ], + "fontWeight": "500", + "fontStyle": "normal", + "fontFamily": "\"Fira Sans\"" + }, + { + "src": [ + "file:./assets/fonts/fira-sans/FiraSans-MediumItalic.woff2" + ], + "fontWeight": "500", + "fontStyle": "italic", + "fontFamily": "\"Fira Sans\"" + }, + { + "src": [ + "file:./assets/fonts/fira-sans/FiraSans-SemiBold.woff2" + ], + "fontWeight": "600", + "fontStyle": "normal", + "fontFamily": "\"Fira Sans\"" + }, + { + "src": [ + "file:./assets/fonts/fira-sans/FiraSans-SemiBoldItalic.woff2" + ], + "fontWeight": "600", + "fontStyle": "italic", + "fontFamily": "\"Fira Sans\"" + }, + { + "src": [ + "file:./assets/fonts/fira-sans/FiraSans-Bold.woff2" + ], + "fontWeight": "700", + "fontStyle": "normal", + "fontFamily": "\"Fira Sans\"" + }, + { + "src": [ + "file:./assets/fonts/fira-sans/FiraSans-BoldItalic.woff2" + ], + "fontWeight": "700", + "fontStyle": "italic", + "fontFamily": "\"Fira Sans\"" + }, + { + "src": [ + "file:./assets/fonts/fira-sans/FiraSans-ExtraBold.woff2" + ], + "fontWeight": "800", + "fontStyle": "normal", + "fontFamily": "\"Fira Sans\"" + }, + { + "src": [ + "file:./assets/fonts/fira-sans/FiraSans-ExtraBoldItalic.woff2" + ], + "fontWeight": "800", + "fontStyle": "italic", + "fontFamily": "\"Fira Sans\"" + }, + { + "src": [ + "file:./assets/fonts/fira-sans/FiraSans-Black.woff2" + ], + "fontWeight": "900", + "fontStyle": "normal", + "fontFamily": "\"Fira Sans\"" + }, + { + "src": [ + "file:./assets/fonts/fira-sans/FiraSans-BlackItalic.woff2" + ], + "fontWeight": "900", + "fontStyle": "italic", + "fontFamily": "\"Fira Sans\"" + } + ] + } + ], + "fontSizes": [ + { + "fluid": false, + "name": "Small", + "size": "0.9rem", + "slug": "small" + }, + { + "fluid": { + "max": "1.2rem", + "min": "0.9rem" + }, + "name": "Medium", + "size": "1rem", + "slug": "medium" + }, + { + "fluid": { + "max": "1.8rem", + "min": "1.2rem" + }, + "name": "Large", + "size": "1.2rem", + "slug": "large" + }, + { + "fluid": { + "max": "2.2rem", + "min": "1.8rem" + }, + "name": "Extra Large", + "size": "1.8rem", + "slug": "x-large" + }, + { + "fluid": { + "max": "2.8rem", + "min": "2rem" + }, + "name": "Extra Extra Large", + "size": "2rem", + "slug": "xx-large" + } + ] + } + }, + "styles": { + "typography": { + "fontSize": "var:preset|font-size|medium", + "fontFamily": "var:preset|font-family|fira-sans", + "letterSpacing": "-0.01em", + "lineHeight": "1.5" + }, + "blocks": { + "core/post-title": { + "typography": { + "fontWeight": "200" + } + }, + "core/pullquote": { + "typography": { + "fontFamily": "var:preset|font-family|literata", + "fontWeight": "200", + "letterSpacing": "0em" + } + }, + "core/query-pagination": { + "typography": { + "fontWeight": "300", + "letterSpacing": "0px" + } + }, + "core/quote": { + "typography": { + "fontSize": "var:preset|font-size|medium", + "letterSpacing": "-0.01em", + "lineHeight": "1.5", + "fontWeight": "300" + } + }, + "core/site-title": { + "typography": { + "fontFamily": "var:preset|font-family|literata", + "fontSize": "var:preset|font-size|x-large", + "fontWeight": "300", + "letterSpacing": "-0.56px", + "textTransform": "uppercase" + } + } + }, + "elements": { + "button": { + "typography": { + "fontFamily": "var:preset|font-family|literata", + "fontSize": "var:preset|font-size|medium", + "fontWeight": "400", + "letterSpacing": "-0.01em", + "textTransform": "uppercase" + } + }, + "heading": { + "typography": { + "fontFamily": "var:preset|font-family|literata", + "fontWeight": "200", + "letterSpacing": "-0.02em", + "lineHeight": "1.24" + } + }, + "h6": { + "typography": { + "fontWeight": "200" + } + } + } + } +} diff --git a/wp-content/themes/twentytwentyfive/templates/404.html b/wp-content/themes/twentytwentyfive/templates/404.html new file mode 100644 index 0000000..379f83d --- /dev/null +++ b/wp-content/themes/twentytwentyfive/templates/404.html @@ -0,0 +1,9 @@ + + + +
+ +
+ + + diff --git a/wp-content/themes/twentytwentyfive/templates/archive.html b/wp-content/themes/twentytwentyfive/templates/archive.html new file mode 100644 index 0000000..3b0ddbe --- /dev/null +++ b/wp-content/themes/twentytwentyfive/templates/archive.html @@ -0,0 +1,11 @@ + + + +
+ + + +
+ + + diff --git a/wp-content/themes/twentytwentyfive/templates/home.html b/wp-content/themes/twentytwentyfive/templates/home.html new file mode 100644 index 0000000..ae6870c --- /dev/null +++ b/wp-content/themes/twentytwentyfive/templates/home.html @@ -0,0 +1,10 @@ + + + +
+ + +
+ + + diff --git a/wp-content/themes/twentytwentyfive/templates/index.html b/wp-content/themes/twentytwentyfive/templates/index.html new file mode 100644 index 0000000..ae6870c --- /dev/null +++ b/wp-content/themes/twentytwentyfive/templates/index.html @@ -0,0 +1,10 @@ + + + +
+ + +
+ + + diff --git a/wp-content/themes/twentytwentyfive/templates/page-no-title.html b/wp-content/themes/twentytwentyfive/templates/page-no-title.html new file mode 100644 index 0000000..17e4781 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/templates/page-no-title.html @@ -0,0 +1,9 @@ + + + +
+ +
+ + + diff --git a/wp-content/themes/twentytwentyfive/templates/page.html b/wp-content/themes/twentytwentyfive/templates/page.html new file mode 100644 index 0000000..4331194 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/templates/page.html @@ -0,0 +1,15 @@ + + + +
+ +
+ + + +
+ +
+ + + diff --git a/wp-content/themes/twentytwentyfive/templates/search.html b/wp-content/themes/twentytwentyfive/templates/search.html new file mode 100644 index 0000000..3ccff6f --- /dev/null +++ b/wp-content/themes/twentytwentyfive/templates/search.html @@ -0,0 +1,12 @@ + + + +
+ + + + +
+ + + diff --git a/wp-content/themes/twentytwentyfive/templates/single.html b/wp-content/themes/twentytwentyfive/templates/single.html new file mode 100644 index 0000000..90b7fb2 --- /dev/null +++ b/wp-content/themes/twentytwentyfive/templates/single.html @@ -0,0 +1,25 @@ + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + +
+ + + diff --git a/wp-content/themes/twentytwentyfive/theme.json b/wp-content/themes/twentytwentyfive/theme.json new file mode 100644 index 0000000..7daeb0d --- /dev/null +++ b/wp-content/themes/twentytwentyfive/theme.json @@ -0,0 +1,733 @@ +{ + "$schema": "https://schemas.wp.org/wp/6.7/theme.json", + "version": 3, + "settings": { + "appearanceTools": true, + "color": { + "defaultDuotone": false, + "defaultGradients": false, + "defaultPalette": false, + "palette": [ + { + "color": "#FFFFFF", + "name": "Base", + "slug": "base" + }, + { + "color": "#111111", + "name": "Contrast", + "slug": "contrast" + }, + { + "color": "#FFEE58", + "name": "Accent 1", + "slug": "accent-1" + }, + { + "color": "#F6CFF4", + "name": "Accent 2", + "slug": "accent-2" + }, + { + "color": "#503AA8", + "name": "Accent 3", + "slug": "accent-3" + }, + { + "color": "#686868", + "name": "Accent 4", + "slug": "accent-4" + }, + { + "color": "#FBFAF3", + "name": "Accent 5", + "slug": "accent-5" + }, + { + "color": "color-mix(in srgb, currentColor 20%, transparent)", + "name": "Accent 6", + "slug": "accent-6" + } + ] + }, + "layout": { + "contentSize": "645px", + "wideSize": "1340px" + }, + "spacing": { + "defaultSpacingSizes": false, + "spacingSizes": [ + { + "name": "Tiny", + "size": "10px", + "slug": "20" + }, + { + "name": "X-Small", + "size": "20px", + "slug": "30" + }, + { + "name": "Small", + "size": "30px", + "slug": "40" + }, + { + "name": "Regular", + "size": "clamp(30px, 5vw, 50px)", + "slug": "50" + }, + { + "name": "Large", + "size": "clamp(30px, 7vw, 70px)", + "slug": "60" + }, + { + "name": "X-Large", + "size": "clamp(50px, 7vw, 90px)", + "slug": "70" + }, + { + "name": "XX-Large", + "size": "clamp(70px, 10vw, 140px)", + "slug": "80" + } + ], + "units": [ + "%", + "px", + "em", + "rem", + "vh", + "vw" + ] + }, + "typography": { + "writingMode": true, + "defaultFontSizes": false, + "fluid": true, + "fontSizes": [ + { + "fluid": false, + "name": "Small", + "size": "0.875rem", + "slug": "small" + }, + { + "fluid": { + "max": "1.125rem", + "min": "1rem" + }, + "name": "Medium", + "size": "1rem", + "slug": "medium" + }, + { + "fluid": { + "max": "1.375rem", + "min": "1.125rem" + }, + "name": "Large", + "size": "1.38rem", + "slug": "large" + }, + { + "fluid": { + "max": "2rem", + "min": "1.75rem" + }, + "name": "Extra Large", + "size": "1.75rem", + "slug": "x-large" + }, + { + "fluid": { + "max": "3rem", + "min": "2.15rem" + }, + "name": "Extra Extra Large", + "size": "2.15rem", + "slug": "xx-large" + } + ], + "fontFamilies": [ + { + "name": "Manrope", + "slug": "manrope", + "fontFamily": "Manrope, sans-serif", + "fontFace": [ + { + "src": [ + "file:./assets/fonts/manrope/Manrope-VariableFont_wght.woff2" + ], + "fontWeight": "200 800", + "fontStyle": "normal", + "fontFamily": "Manrope" + } + ] + }, + { + "name": "Fira Code", + "slug": "fira-code", + "fontFamily": "\"Fira Code\", monospace", + "fontFace": [ + { + "src": [ + "file:./assets/fonts/fira-code/FiraCode-VariableFont_wght.woff2" + ], + "fontWeight": "300 700", + "fontStyle": "normal", + "fontFamily": "\"Fira Code\"" + } + ] + } + ] + }, + "useRootPaddingAwareAlignments": true + }, + "styles": { + "color": { + "background": "var:preset|color|base", + "text": "var:preset|color|contrast" + }, + "spacing": { + "blockGap": "1.2rem", + "padding": { + "left": "var:preset|spacing|50", + "right": "var:preset|spacing|50" + } + }, + "typography": { + "fontFamily": "var:preset|font-family|manrope", + "fontSize": "var:preset|font-size|large", + "fontWeight": "300", + "letterSpacing": "-0.1px", + "lineHeight": "1.4" + }, + "blocks": { + "core/avatar": { + "border": { + "radius": "100px" + } + }, + "core/button": { + "variations": { + "outline": { + "border": { + "color": "currentColor", + "width": "1px" + }, + "css": ".wp-block-button__link:not(.has-background):hover {background-color:color-mix(in srgb, var(--wp--preset--color--contrast) 5%, transparent);}", + "spacing": { + "padding": { + "bottom": "calc(1rem - 1px)", + "left": "calc(2.25rem - 1px)", + "right": "calc(2.25rem - 1px)", + "top": "calc(1rem - 1px)" + } + } + } + } + }, + "core/columns": { + "spacing": { + "blockGap": "var:preset|spacing|50" + } + }, + "core/buttons": { + "spacing": { + "blockGap": "16px" + } + }, + "core/code": { + "typography": { + "fontFamily": "var:preset|font-family|fira-code", + "fontSize": "var:preset|font-size|medium", + "fontWeight": "300" + }, + "color": { + "background": "var:preset|color|accent-5", + "text": "var:preset|color|contrast" + }, + "spacing": { + "padding": { + "right": "var:preset|spacing|40", + "bottom": "var:preset|spacing|40", + "left": "var:preset|spacing|40", + "top": "var:preset|spacing|40" + } + } + }, + "core/comment-author-name": { + "color": { + "text": "var:preset|color|accent-4" + }, + "elements": { + "link": { + "color": { + "text": "var:preset|color|accent-4" + }, + "typography": { + "textDecoration": "none" + }, + ":hover": { + "typography": { + "textDecoration": "underline" + } + } + } + }, + "typography": { + "fontSize": "var:preset|font-size|small" + }, + "spacing": { + "margin": { + "top": "5px", + "bottom": "0px" + } + } + }, + "core/comment-content": { + "typography": { + "fontSize": "var:preset|font-size|medium" + }, + "spacing": { + "margin": { + "top": "var:preset|spacing|30", + "bottom": "var:preset|spacing|30" + } + } + }, + "core/comment-date": { + "typography": { + "fontSize": "var:preset|font-size|small" + }, + "color": { + "text": "var:preset|color|contrast" + }, + "elements": { + "link": { + "color": { + "text": "var:preset|color|contrast" + } + } + } + }, + "core/comment-edit-link": { + "elements": { + "link": { + "color": { + "text": "var:preset|color|contrast" + } + } + }, + "typography": { + "fontSize": "var:preset|font-size|small" + } + }, + "core/comment-reply-link": { + "elements": { + "link": { + "color": { + "text": "var:preset|color|contrast" + } + } + }, + "typography": { + "fontSize": "var:preset|font-size|small" + } + }, + "core/post-comments-form": { + "css": "& textarea, input:not([type=submit]){border-radius:.25rem; border-color: var(--wp--preset--color--accent-6) !important;} & input[type=checkbox]{margin:0 .2rem 0 0 !important;} & label {font-size: var(--wp--preset--font-size--small); }", + "typography": { + "fontSize": "var:preset|font-size|medium" + }, + "spacing": { + "padding": { + "top": "var:preset|spacing|40", + "bottom": "var:preset|spacing|40" + } + } + }, + "core/comments-pagination": { + "typography": { + "fontSize": "var:preset|font-size|medium" + }, + "spacing": { + "margin": { + "top": "var:preset|spacing|40", + "bottom": "var:preset|spacing|40" + } + } + }, + "core/comments-pagination-next": { + "typography": { + "fontSize": "var:preset|font-size|medium" + } + }, + "core/comments-pagination-numbers": { + "typography": { + "fontSize": "var:preset|font-size|medium" + } + }, + "core/comments-pagination-previous": { + "typography": { + "fontSize": "var:preset|font-size|medium" + } + }, + "core/post-date": { + "color":{ + "text": "var:preset|color|accent-4" + }, + "elements": { + "link": { + "color" : { + "text": "var:preset|color|accent-4" + }, + ":hover": { + "typography": { + "textDecoration": "underline" + } + }, + "typography": { + "textDecoration": "none" + } + } + }, + "typography": { + "fontSize": "var:preset|font-size|small" + } + }, + "core/post-navigation-link": { + "typography": { + "fontSize": "var:preset|font-size|medium" + } + }, + "core/post-terms": { + "css": "& a { white-space: nowrap; }", + "typography": { + "fontSize": "var:preset|font-size|small", + "fontWeight": "600" + } + }, + "core/post-title": { + "elements": { + "link": { + ":hover": { + "typography": { + "textDecoration": "underline" + } + }, + "typography": { + "textDecoration": "none" + } + } + } + }, + "core/quote": { + "border": { + "style": "solid", + "width": "0 0 0 2px", + "color": "currentColor" + }, + "spacing": { + "blockGap": "var:preset|spacing|30", + "margin": { + "left": "0", + "right": "0" + }, + "padding": { + "top": "var:preset|spacing|30", + "right": "var:preset|spacing|40", + "bottom": "var:preset|spacing|30", + "left": "var:preset|spacing|40" + } + }, + "typography": { + "fontSize": "var:preset|font-size|large", + "fontWeight": "300" + }, + "elements": { + "cite": { + "typography": { + "fontSize": "var:preset|font-size|small", + "fontStyle": "normal", + "fontWeight": "300" + }, + "css": "& sub { font-size: 0.65em }" + } + }, + "css": "&.has-text-align-right { border-width: 0 2px 0 0; } &.has-text-align-center { border-width: 0;border-inline: 0; padding-inline: 0; }", + "variations": { + "plain": { + "border": { + "color": "transparent", + "style": "none", + "width": "0", + "radius": "0" + }, + "spacing": { + "padding": { + "top": "0", + "right": "0", + "bottom": "0", + "left": "0" + } + } + } + } + }, + "core/pullquote": { + "typography": { + "fontSize": "var:preset|font-size|xx-large", + "fontWeight": "300", + "lineHeight": "1.2" + }, + "elements": { + "cite": { + "typography": { + "fontSize": "var:preset|font-size|small", + "fontStyle": "normal" + } + } + }, + "spacing": { + "padding": { + "bottom": "var:preset|spacing|30", + "top": "var:preset|spacing|30" + } + }, + "css": "& p:last-of-type {margin-bottom: var(--wp--preset--spacing--30);}" + }, + "core/query-pagination": { + "typography": { + "fontSize": "var:preset|font-size|medium", + "fontWeight": "500" + } + }, + "core/search": { + "css": "& .wp-block-search__input{border-radius:3.125rem;padding-left:1.5625rem;padding-right:1.5625rem;border-color:var(--wp--preset--color--accent-6);}", + "typography": { + "fontSize": "var:preset|font-size|medium", + "lineHeight": "1.6" + }, + "elements": { + "button": { + "border": { + "radius": "3.125rem" + }, + "spacing": { + "margin": { + "left": "1.125rem" + } + }, + ":hover" : { + "border": { + "color": "transparent" + } + } + } + } + }, + "core/separator": { + "border": { + "color": "currentColor", + "style": "solid", + "width": "0 0 1px 0" + }, + "color": { + "text": "var:preset|color|accent-6" + }, + "variations": { + "wide": { + "css": " &:not(.alignfull){max-width: var(--wp--style--global--wide-size) !important;}" + } + } + }, + "core/site-tagline": { + "typography": { + "fontSize": "var:preset|font-size|medium" + } + }, + "core/site-title": { + "typography": { + "fontWeight": "700", + "letterSpacing": "-.5px" + }, + "elements": { + "link": { + "typography": { + "textDecoration": "none" + }, + ":hover": { + "typography": { + "textDecoration": "underline" + } + } + } + } + }, + "core/term-description": { + "typography": { + "fontSize": "var:preset|font-size|medium" + } + }, + "core/navigation": { + "typography": { + "fontSize": "var:preset|font-size|medium" + }, + "elements": { + "link": { + ":hover": { + "typography": { + "textDecoration": "underline" + } + }, + "typography": { + "textDecoration": "none" + } + } + } + }, + "core/list": { + "css": "& li{margin-top: 0.5rem;}" + } + }, + "elements": { + "button": { + "color": { + "background": "var:preset|color|contrast", + "text": "var:preset|color|base" + }, + ":focus": { + "outline": { + "color": "var:preset|color|accent-4", + "offset": "2px" + } + }, + ":hover": { + "color": { + "background": "color-mix(in srgb, var(--wp--preset--color--contrast) 85%, transparent)", + "text": "var:preset|color|base" + }, + "border": { + "color": "transparent" + } + }, + "spacing": { + "padding": { + "bottom": "1rem", + "left": "2.25rem", + "right": "2.25rem", + "top": "1rem" + } + }, + "typography": { + "fontSize": "var:preset|font-size|medium" + } + }, + "caption": { + "typography": { + "fontSize": "var:preset|font-size|small", + "lineHeight": "1.4" + } + }, + "h1": { + "typography": { + "fontSize": "var:preset|font-size|xx-large" + } + }, + "h2": { + "typography": { + "fontSize": "var:preset|font-size|x-large" + } + }, + "h3": { + "typography": { + "fontSize": "var:preset|font-size|large" + } + }, + "h4": { + "typography": { + "fontSize": "var:preset|font-size|medium" + } + }, + "h5": { + "typography": { + "fontSize": "var:preset|font-size|small", + "letterSpacing": "0.5px" + } + }, + "h6": { + "typography": { + "fontSize": "var:preset|font-size|small", + "fontWeight": "700", + "letterSpacing": "1.4px", + "textTransform": "uppercase" + } + }, + "heading": { + "typography": { + "fontWeight": "400", + "lineHeight": "1.125", + "letterSpacing": "-0.1px" + } + }, + "link": { + "color": { + "text": "currentColor" + }, + ":hover": { + "typography": { + "textDecoration": "none" + } + } + } + } + }, + "templateParts": [ + { + "area": "header", + "name": "header", + "title": "Header" + }, + { + "area": "header", + "name": "vertical-header", + "title": "Vertical site header" + }, + { + "area": "header", + "name": "header-large-title", + "title": "Header with large title" + + }, + { + "area": "footer", + "name": "footer", + "title": "Footer" + }, + { + "area": "footer", + "name": "footer-columns", + "title": "Footer Columns" + }, + { + "area": "footer", + "name": "footer-newsletter", + "title": "Footer Newsletter" + }, + { + "area": "uncategorized", + "name": "sidebar", + "title": "Sidebar" + } + ], + "customTemplates": [ + { + "name": "page-no-title", + "postTypes": ["page"], + "title": "Page No Title" + } + ] +} 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 .= '
    '; + + foreach ( $error_list as $item ) { + $errors .= '
  • ' . $item . '
  • '; + } + + $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'] ); + } + + ?> + +
+

+ + +

+ + +

+ +

+
+ +

+ + %s', esc_url( wp_registration_url() ), __( 'Register' ) ); + + echo esc_html( $login_link_separator ); + + /** This filter is documented in wp-includes/general-template.php */ + echo apply_filters( 'register', $registration_url ); + } + + ?> +

+ 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 + ); + + ?> +
+ + +
+

+ +

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

+ + +

+ +

+ + + +

+ + +

+
+ +

+ + %s', esc_url( wp_registration_url() ), __( 'Register' ) ); + + echo esc_html( $login_link_separator ); + + /** This filter is documented in wp-includes/general-template.php */ + echo apply_filters( 'register', $registration_url ); + } + + ?> +

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

+ + +

+

+ + +

+ +

+ +

+ +

+ +

+
+ +

+ + %s', esc_url( wp_lostpassword_url() ), __( 'Lost your password?' ) ); + + /** This filter is documented in wp-login.php */ + echo apply_filters( 'lost_password_html_link', $html_link ); + + ?> +

+ 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" /> + +
+
+ +

/>

+

+ + + + + + + + + +

+
+ + +

+ %s', esc_url( wp_registration_url() ), __( 'Register' ) ); + + /** This filter is documented in wp-includes/general-template.php */ + echo apply_filters( 'register', $registration_url ); + + echo esc_html( $login_link_separator ); + } + + $html_link = sprintf( '%s', esc_url( wp_lostpassword_url() ), __( 'Lost your password?' ) ); + + /** + * Filters the link that allows the user to reset the lost password. + * + * @since 6.1.0 + * + * @param string $html_link HTML link to the lost password form. + */ + echo apply_filters( 'lost_password_html_link', $html_link ); + + ?> +

+ 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() { + ?> + + +
+
+' . __( 'Site Name (subdirectory only):' ) . ''; + } else { + echo ''; + } + + $errmsg_blogname = $errors->get_error_message( 'blogname' ); + $errmsg_blogname_aria = ''; + if ( $errmsg_blogname ) { + $errmsg_blogname_aria = 'wp-signup-blogname-error '; + echo '

' . $errmsg_blogname . '

'; + } + + if ( ! is_subdomain_install() ) { + echo '
' . $current_network->domain . $current_network->path . '
'; + } else { + $site_domain = preg_replace( '|^www\.|', '', $current_network->domain ); + echo '
.' . esc_html( $site_domain ) . '
'; + } + + if ( ! is_user_logged_in() ) { + if ( ! is_subdomain_install() ) { + $site = $current_network->domain . $current_network->path . __( 'sitename' ); + } else { + $site = __( 'domain' ) . '.' . $site_domain . $current_network->path; + } + + printf( + '

(%s) %s

', + /* translators: %s: Site address. */ + sprintf( __( 'Your address will be %s.' ), $site ), + __( 'Must be at least 4 characters, letters and numbers only. It cannot be changed, so choose carefully!' ) + ); + } + + // Site Title. + ?> + + get_error_message( 'blog_title' ); + $errmsg_blog_title_aria = ''; + if ( $errmsg_blog_title ) { + $errmsg_blog_title_aria = ' aria-describedby="wp-signup-blog-title-error"'; + echo '

' . $errmsg_blog_title . '

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

+ + 'WPLANG', + 'id' => 'site-language', + 'selected' => $lang, + 'languages' => $languages, + 'show_available_translations' => false, + ) + ); + ?> +

+ + +
+
+ + + + +

+ + /> + + + + /> + + +

+
+
+ + ' . __( 'Username:' ) . ''; + $errmsg_username = $errors->get_error_message( 'user_name' ); + $errmsg_username_aria = ''; + if ( $errmsg_username ) { + $errmsg_username_aria = 'wp-signup-username-error '; + echo '

' . $errmsg_username . '

'; + } + ?> + +

+ + ' . __( 'Email Address:' ) . ''; + $errmsg_email = $errors->get_error_message( 'user_email' ); + $errmsg_email_aria = ''; + if ( $errmsg_email ) { + $errmsg_email_aria = 'wp-signup-email-error '; + echo '

' . $errmsg_email . '

'; + } + ?> + +

+ + get_error_message( 'generic' ); + if ( $errmsg_generic ) { + echo '

' . $errmsg_generic . '

'; + } + /** + * Fires at the end of the new user account registration form. + * + * @since 3.0.0 + * + * @param WP_Error $errors A WP_Error object containing 'user_name' or 'user_email' errors. + */ + do_action( 'signup_extra_fields', $errors ); +} + +/** + * Validates user sign-up name and email. + * + * @since MU (3.0.0) + * + * @return array Contains username, email, and error messages. + * See wpmu_validate_user_signup() for details. + */ +function validate_user_form() { + return wpmu_validate_user_signup( $_POST['user_name'], $_POST['user_email'] ); +} + +/** + * Shows a form for returning users to sign up for another site. + * + * @since MU (3.0.0) + * + * @param string $blogname The new site name + * @param string $blog_title The new site title. + * @param WP_Error|string $errors A WP_Error object containing existing errors. Defaults to empty string. + */ +function signup_another_blog( $blogname = '', $blog_title = '', $errors = '' ) { + $current_user = wp_get_current_user(); + + if ( ! is_wp_error( $errors ) ) { + $errors = new WP_Error(); + } + + $signup_defaults = array( + 'blogname' => $blogname, + 'blog_title' => $blog_title, + 'errors' => $errors, + ); + + /** + * Filters the default site sign-up variables. + * + * @since 3.0.0 + * + * @param array $signup_defaults { + * An array of default site sign-up variables. + * + * @type string $blogname The site blogname. + * @type string $blog_title The site title. + * @type WP_Error $errors A WP_Error object possibly containing 'blogname' or 'blog_title' errors. + * } + */ + $filtered_results = apply_filters( 'signup_another_blog_init', $signup_defaults ); + + $blogname = $filtered_results['blogname']; + $blog_title = $filtered_results['blog_title']; + $errors = $filtered_results['errors']; + + /* translators: %s: Network title. */ + echo '

' . sprintf( __( 'Get another %s site in seconds' ), get_network()->site_name ) . '

'; + + if ( $errors->has_errors() ) { + echo '

' . __( 'There was a problem, please correct the form below and try again.' ) . '

'; + } + ?> +

+ add another site to your account. There is no limit to the number of sites you can have, so create to your heart’s content, but write responsibly!' ), + $current_user->display_name + ); + ?> +

+ + ID ); + if ( ! empty( $blogs ) ) { + ?> + +

+
    + userblog_id ); + echo '
  • ' . $home_url . '
  • '; + } + ?> +
+ + +

+
+ + + +

+
+ has_errors() ) { + signup_another_blog( $blogname, $blog_title, $errors ); + return false; + } + + $public = (int) $_POST['blog_public']; + + $blog_meta_defaults = array( + 'lang_id' => 1, + 'public' => $public, + ); + + // Handle the language setting for the new site. + if ( ! empty( $_POST['WPLANG'] ) ) { + + $languages = signup_get_available_languages(); + + if ( in_array( $_POST['WPLANG'], $languages, true ) ) { + $language = wp_unslash( sanitize_text_field( $_POST['WPLANG'] ) ); + + if ( $language ) { + $blog_meta_defaults['WPLANG'] = $language; + } + } + } + + /** + * Filters the new site meta variables. + * + * Use the {@see 'add_signup_meta'} filter instead. + * + * @since MU (3.0.0) + * @deprecated 3.0.0 Use the {@see 'add_signup_meta'} filter instead. + * + * @param array $blog_meta_defaults An array of default blog meta variables. + */ + $meta_defaults = apply_filters_deprecated( 'signup_create_blog_meta', array( $blog_meta_defaults ), '3.0.0', 'add_signup_meta' ); + + /** + * Filters the new default site meta variables. + * + * @since 3.0.0 + * + * @param array $meta { + * An array of default site meta variables. + * + * @type int $lang_id The language ID. + * @type int $blog_public Whether search engines should be discouraged from indexing the site. 1 for true, 0 for false. + * } + */ + $meta = apply_filters( 'add_signup_meta', $meta_defaults ); + + $blog_id = wpmu_create_blog( $domain, $path, $blog_title, $current_user->ID, $meta, get_current_network_id() ); + + if ( is_wp_error( $blog_id ) ) { + return false; + } + + confirm_another_blog_signup( $domain, $path, $blog_title, $current_user->user_login, $current_user->user_email, $meta, $blog_id ); + return true; +} + +/** + * Shows a message confirming that the new site has been created. + * + * @since MU (3.0.0) + * @since 4.4.0 Added the `$blog_id` parameter. + * + * @param string $domain The domain URL. + * @param string $path The site root path. + * @param string $blog_title The site title. + * @param string $user_name The username. + * @param string $user_email The user's email address. + * @param array $meta Any additional meta from the {@see 'add_signup_meta'} filter in validate_blog_signup(). + * @param int $blog_id The site ID. + */ +function confirm_another_blog_signup( $domain, $path, $blog_title, $user_name, $user_email = '', $meta = array(), $blog_id = 0 ) { + + if ( $blog_id ) { + switch_to_blog( $blog_id ); + $home_url = home_url( '/' ); + $login_url = wp_login_url(); + restore_current_blog(); + } else { + $home_url = 'http://' . $domain . $path; + $login_url = 'http://' . $domain . $path . 'wp-login.php'; + } + + $site = sprintf( + '%2$s', + esc_url( $home_url ), + $blog_title + ); + + ?> +

+ +

+

+ Log in as “%3$s” using your existing password.' ), + sprintf( + '%s', + esc_url( $home_url ), + untrailingslashit( $domain . $path ) + ), + esc_url( $login_url ), + $user_name + ); + ?> +

+ $user_name, + 'user_email' => $user_email, + 'errors' => $errors, + ); + + /** + * Filters the default user variables used on the user sign-up form. + * + * @since 3.0.0 + * + * @param array $signup_user_defaults { + * An array of default user variables. + * + * @type string $user_name The user username. + * @type string $user_email The user email address. + * @type WP_Error $errors A WP_Error object with possible errors relevant to the sign-up user. + * } + */ + $filtered_results = apply_filters( 'signup_user_init', $signup_user_defaults ); + $user_name = $filtered_results['user_name']; + $user_email = $filtered_results['user_email']; + $errors = $filtered_results['errors']; + + ?> + +

+ site_name ); + ?> +

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

+ + /> + + + + /> + + +

+
+ + +

+
+ has_errors() ) { + signup_user( $user_name, $user_email, $errors ); + return false; + } + + if ( 'blog' === $_POST['signup_for'] ) { + signup_blog( $user_name, $user_email ); + return false; + } + + /** This filter is documented in wp-signup.php */ + wpmu_signup_user( $user_name, $user_email, apply_filters( 'add_signup_meta', array() ) ); + + confirm_user_signup( $user_name, $user_email ); + return true; +} + +/** + * Shows a message confirming that the new user has been registered and is awaiting activation. + * + * @since MU (3.0.0) + * + * @param string $user_name The username. + * @param string $user_email The user's email address. + */ +function confirm_user_signup( $user_name, $user_email ) { + ?> +

+ +

+

you must activate it.' ); ?>

+

+ ' . $user_email . '' ); + ?> +

+

+ $user_name, + 'user_email' => $user_email, + 'blogname' => $blogname, + 'blog_title' => $blog_title, + 'errors' => $errors, + ); + + /** + * Filters the default site creation variables for the site sign-up form. + * + * @since 3.0.0 + * + * @param array $signup_blog_defaults { + * An array of default site creation variables. + * + * @type string $user_name The user username. + * @type string $user_email The user email address. + * @type string $blogname The blogname. + * @type string $blog_title The title of the site. + * @type WP_Error $errors A WP_Error object with possible errors relevant to new site creation variables. + * } + */ + $filtered_results = apply_filters( 'signup_blog_init', $signup_blog_defaults ); + + $user_name = $filtered_results['user_name']; + $user_email = $filtered_results['user_email']; + $blogname = $filtered_results['blogname']; + $blog_title = $filtered_results['blog_title']; + $errors = $filtered_results['errors']; + + if ( empty( $blogname ) ) { + $blogname = $user_name; + } + ?> +
+ + + + + +

+
+ has_errors() ) { + signup_user( $user_name, $user_email, $user_errors ); + return false; + } + + $result = wpmu_validate_blog_signup( $_POST['blogname'], $_POST['blog_title'] ); + $domain = $result['domain']; + $path = $result['path']; + $blogname = $result['blogname']; + $blog_title = $result['blog_title']; + $errors = $result['errors']; + + if ( $errors->has_errors() ) { + signup_blog( $user_name, $user_email, $blogname, $blog_title, $errors ); + return false; + } + + $public = (int) $_POST['blog_public']; + $signup_meta = array( + 'lang_id' => 1, + 'public' => $public, + ); + + // Handle the language setting for the new site. + if ( ! empty( $_POST['WPLANG'] ) ) { + + $languages = signup_get_available_languages(); + + if ( in_array( $_POST['WPLANG'], $languages, true ) ) { + $language = wp_unslash( sanitize_text_field( $_POST['WPLANG'] ) ); + + if ( $language ) { + $signup_meta['WPLANG'] = $language; + } + } + } + + /** This filter is documented in wp-signup.php */ + $meta = apply_filters( 'add_signup_meta', $signup_meta ); + + wpmu_signup_blog( $domain, $path, $blog_title, $user_name, $user_email, $meta ); + confirm_blog_signup( $domain, $path, $blog_title, $user_name, $user_email, $meta ); + return true; +} + +/** + * Shows a message confirming that the new site has been registered and is awaiting activation. + * + * @since MU (3.0.0) + * + * @param string $domain The domain or subdomain of the site. + * @param string $path The path of the site. + * @param string $blog_title The title of the new site. + * @param string $user_name The user's username. + * @param string $user_email The user's email address. + * @param array $meta Any additional meta from the {@see 'add_signup_meta'} filter in validate_blog_signup(). + */ +function confirm_blog_signup( $domain, $path, $blog_title, $user_name = '', $user_email = '', $meta = array() ) { + ?> +

+ {$blog_title}" ) + ?> +

+ +

you must activate it.' ); ?>

+

+ ' . $user_email . '' ); + ?> +

+

+

+

+
    +
  • +
  • +
  • + +
  • +
+ '; + _e( 'Greetings Network Administrator!' ); + echo ' '; + + switch ( $active_signup ) { + case 'none': + _e( 'The network currently disallows registrations.' ); + break; + case 'blog': + _e( 'The network currently allows site registrations.' ); + break; + case 'user': + _e( 'The network currently allows user registrations.' ); + break; + default: + _e( 'The network currently allows both site and user registrations.' ); + break; + } + + echo ' '; + + /* translators: %s: URL to Network Settings screen. */ + printf( __( 'To change or disable registration go to your Options page.' ), esc_url( network_admin_url( 'settings.php' ) ) ); + echo '
'; +} + +$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 ); + } +}