{"id":206,"date":"2026-08-14T16:26:34","date_gmt":"2026-08-14T08:26:34","guid":{"rendered":"http:\/\/elitehousehold.local\/?page_id=206"},"modified":"2026-11-10T19:41:40","modified_gmt":"2026-11-10T11:41:40","slug":"home","status":"publish","type":"page","link":"https:\/\/www.elite-household.com\/en\/","title":{"rendered":"\u9996\u9801"},"content":{"rendered":"\n<style data-wp-block-html=\"css\">\n\/* =====================================================\n   ELITE HOME BANNER\n   \u9996\u9801\u6a6b\u5e45\u8f2a\u64ad\n\n   Desktop\uff1a1920 \u00d7 700\n   Mobile\uff1a900 \u00d7 1200\n===================================================== *\/\n\n\n\/* =====================================================\n   \u96fb\u8166\u7248\n   1920 \u00d7 700\n===================================================== *\/\n\n.elite-home-banner {\n\n    position: relative;\n\n    width: 100vw;\n    max-width: 100vw;\n\n    \/* 1920 \u00d7 700 *\/\n    aspect-ratio: 1920 \/ 700;\n\n    margin-left: calc(50% - 50vw);\n    margin-right: calc(50% - 50vw);\n\n    overflow: hidden;\n\n    background: #475B63;\n\n}\n\n\n\n\/* =====================================================\n   SLIDER\n===================================================== *\/\n\n.elite-banner-slider {\n\n    position: absolute;\n\n    inset: 0;\n\n    width: 100%;\n    height: 100%;\n\n}\n\n\n\n\/* =====================================================\n   SLIDE\n===================================================== *\/\n\n.elite-banner-slide {\n\n    position: absolute;\n\n    inset: 0;\n\n    display: block;\n\n    width: 100%;\n    height: 100%;\n\n    opacity: 0;\n\n    visibility: hidden;\n\n    pointer-events: none;\n\n    z-index: 1;\n\n    transition:\n        opacity 0.9s ease,\n        visibility 0.9s ease;\n\n}\n\n\n\n.elite-banner-slide.active {\n\n    opacity: 1;\n\n    visibility: visible;\n\n    pointer-events: auto;\n\n    z-index: 2;\n\n}\n\n\n\n\/* =====================================================\n   PICTURE\n===================================================== *\/\n\n.elite-banner-slide picture {\n\n    display: block;\n\n    width: 100%;\n    height: 100%;\n\n}\n\n\n\n\/* =====================================================\n   IMAGE\n===================================================== *\/\n\n.elite-banner-slide img {\n\n    display: block;\n\n    width: 100%;\n    height: 100%;\n\n    object-fit: cover;\n\n    object-position: center center;\n\n}\n\n\n\n\/* =====================================================\n   ARROWS\n===================================================== *\/\n\n.elite-banner-arrow {\n\n    position: absolute;\n\n    top: 50%;\n\n    z-index: 20;\n\n    width: 48px;\n    height: 48px;\n\n    padding: 0;\n\n    border: 0;\n\n    border-radius: 50%;\n\n    transform: translateY(-50%);\n\n    background:\n        rgba(\n            255,\n            255,\n            255,\n            0.88\n        );\n\n    color: #475B63;\n\n    font-size: 32px;\n\n    line-height: 1;\n\n    cursor: pointer;\n\n    transition:\n        background 0.25s ease,\n        color 0.25s ease;\n\n}\n\n\n\n.elite-banner-prev {\n\n    left: 24px;\n\n}\n\n\n\n.elite-banner-next {\n\n    right: 24px;\n\n}\n\n\n\n.elite-banner-arrow:hover {\n\n    background: #729B79;\n\n    color: #ffffff;\n\n}\n\n\n\n\/* =====================================================\n   DOTS\n===================================================== *\/\n\n.elite-banner-dots {\n\n    position: absolute;\n\n    left: 50%;\n    bottom: 22px;\n\n    z-index: 20;\n\n    display: flex;\n\n    align-items: center;\n\n    gap: 9px;\n\n    transform: translateX(-50%);\n\n}\n\n\n\n.elite-banner-dots button {\n\n    width: 8px;\n    height: 8px;\n\n    padding: 0;\n\n    border: 0;\n\n    border-radius: 20px;\n\n    background:\n        rgba(\n            255,\n            255,\n            255,\n            0.65\n        );\n\n    cursor: pointer;\n\n    transition:\n        width 0.3s ease,\n        background 0.3s ease;\n\n}\n\n\n\n.elite-banner-dots button.active {\n\n    width: 30px;\n\n    background: #BACDB0;\n\n}\n\n\n\n\/* =====================================================\n   TABLET\n===================================================== *\/\n\n@media (max-width: 1024px) {\n\n    .elite-banner-prev {\n\n        left: 16px;\n\n    }\n\n\n    .elite-banner-next {\n\n        right: 16px;\n\n    }\n\n}\n\n\n\n\/* =====================================================\n   MOBILE\n   \u624b\u6a5f\u7248\uff1a900 \u00d7 1200\n===================================================== *\/\n\n@media (max-width: 767px) {\n\n    .elite-home-banner {\n\n        \/* 900 \u00d7 1200 = 3 : 4 *\/\n\n        aspect-ratio: 3 \/ 4;\n\n        width: 100vw;\n\n    }\n\n\n    .elite-banner-slide img {\n\n        width: 100%;\n\n        height: 100%;\n\n        object-fit: cover;\n\n        object-position: center center;\n\n    }\n\n\n    \/* \u624b\u6a5f\u4e0d\u986f\u793a\u5de6\u53f3\u7bad\u982d *\/\n\n    .elite-banner-arrow {\n\n        display: none;\n\n    }\n\n\n    .elite-banner-dots {\n\n        bottom: 16px;\n\n    }\n\n}\n<\/style>\n\n<script data-wp-block-html=\"js\">\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n\n\n    \/* =====================================================\n       ELITE HOME BANNER\n       \u9996\u9801\u6a6b\u5e45\n       \u6bcf 4 \u79d2\u8f2a\u64ad\n    ====================================================== *\/\n\n    const banner =\n        document.querySelector(\n            \".elite-home-banner\"\n        );\n\n\n    if (!banner) {\n\n        return;\n\n    }\n\n\n\n    const slides =\n        Array.from(\n            banner.querySelectorAll(\n                \".elite-banner-slide\"\n            )\n        );\n\n\n    const dots =\n        Array.from(\n            banner.querySelectorAll(\n                \".elite-banner-dots button\"\n            )\n        );\n\n\n    const prevButton =\n        banner.querySelector(\n            \".elite-banner-prev\"\n        );\n\n\n    const nextButton =\n        banner.querySelector(\n            \".elite-banner-next\"\n        );\n\n\n    if (slides.length === 0) {\n\n        return;\n\n    }\n\n\n\n    \/* =====================================================\n       SETTINGS\n    ====================================================== *\/\n\n    let currentIndex = 0;\n\n    let autoPlayTimer = null;\n\n    let touchStartX = 0;\n\n\n    \/* 4 \u79d2 *\/\n\n    const autoPlayDelay = 4000;\n\n\n\n    \/* =====================================================\n       SHOW SLIDE\n    ====================================================== *\/\n\n    function showSlide(index) {\n\n\n        if (index >= slides.length) {\n\n            index = 0;\n\n        }\n\n\n        if (index < 0) {\n\n            index =\n                slides.length - 1;\n\n        }\n\n\n\n        slides.forEach(\n            function (slide) {\n\n                slide.classList.remove(\n                    \"active\"\n                );\n\n            }\n        );\n\n\n\n        dots.forEach(\n            function (dot) {\n\n                dot.classList.remove(\n                    \"active\"\n                );\n\n            }\n        );\n\n\n\n        slides[index]\n            .classList\n            .add(\n                \"active\"\n            );\n\n\n\n        if (dots[index]) {\n\n            dots[index]\n                .classList\n                .add(\n                    \"active\"\n                );\n\n        }\n\n\n        currentIndex =\n            index;\n\n    }\n\n\n\n    \/* =====================================================\n       NEXT\n    ====================================================== *\/\n\n    function nextSlide() {\n\n        showSlide(\n            currentIndex + 1\n        );\n\n    }\n\n\n\n    \/* =====================================================\n       PREVIOUS\n    ====================================================== *\/\n\n    function previousSlide() {\n\n        showSlide(\n            currentIndex - 1\n        );\n\n    }\n\n\n\n    \/* =====================================================\n       STOP AUTOPLAY\n    ====================================================== *\/\n\n    function stopAutoPlay() {\n\n\n        if (autoPlayTimer !== null) {\n\n            clearInterval(\n                autoPlayTimer\n            );\n\n\n            autoPlayTimer =\n                null;\n\n        }\n\n    }\n\n\n\n    \/* =====================================================\n       START AUTOPLAY\n    ====================================================== *\/\n\n    function startAutoPlay() {\n\n\n        stopAutoPlay();\n\n\n        if (slides.length <= 1) {\n\n            return;\n\n        }\n\n\n        autoPlayTimer =\n            setInterval(\n\n                function () {\n\n                    nextSlide();\n\n                },\n\n                autoPlayDelay\n\n            );\n\n    }\n\n\n\n    \/* =====================================================\n       NEXT BUTTON\n    ====================================================== *\/\n\n    if (nextButton) {\n\n        nextButton.addEventListener(\n\n            \"click\",\n\n            function (event) {\n\n\n                event.preventDefault();\n\n                event.stopPropagation();\n\n\n                nextSlide();\n\n                startAutoPlay();\n\n            }\n\n        );\n\n    }\n\n\n\n    \/* =====================================================\n       PREVIOUS BUTTON\n    ====================================================== *\/\n\n    if (prevButton) {\n\n        prevButton.addEventListener(\n\n            \"click\",\n\n            function (event) {\n\n\n                event.preventDefault();\n\n                event.stopPropagation();\n\n\n                previousSlide();\n\n                startAutoPlay();\n\n            }\n\n        );\n\n    }\n\n\n\n    \/* =====================================================\n       DOTS\n    ====================================================== *\/\n\n    dots.forEach(\n\n        function (\n            dot,\n            index\n        ) {\n\n            dot.addEventListener(\n\n                \"click\",\n\n                function (event) {\n\n\n                    event.preventDefault();\n\n                    event.stopPropagation();\n\n\n                    showSlide(index);\n\n                    startAutoPlay();\n\n                }\n\n            );\n\n        }\n\n    );\n\n\n\n    \/* =====================================================\n       MOBILE TOUCH START\n    ====================================================== *\/\n\n    banner.addEventListener(\n\n        \"touchstart\",\n\n        function (event) {\n\n\n            if (\n                !event.changedTouches ||\n                !event.changedTouches.length\n            ) {\n\n                return;\n\n            }\n\n\n            touchStartX =\n                event\n                    .changedTouches[0]\n                    .clientX;\n\n        },\n\n        {\n            passive: true\n        }\n\n    );\n\n\n\n    \/* =====================================================\n       MOBILE TOUCH END\n    ====================================================== *\/\n\n    banner.addEventListener(\n\n        \"touchend\",\n\n        function (event) {\n\n\n            if (\n                !event.changedTouches ||\n                !event.changedTouches.length\n            ) {\n\n                return;\n\n            }\n\n\n\n            const touchEndX =\n                event\n                    .changedTouches[0]\n                    .clientX;\n\n\n            const difference =\n                touchStartX -\n                touchEndX;\n\n\n\n            \/* \u5f80\u5de6\u6ed1 *\/\n\n            if (difference > 50) {\n\n                nextSlide();\n\n                startAutoPlay();\n\n            }\n\n\n            \/* \u5f80\u53f3\u6ed1 *\/\n\n            else if (difference < -50) {\n\n                previousSlide();\n\n                startAutoPlay();\n\n            }\n\n        },\n\n        {\n            passive: true\n        }\n\n    );\n\n\n\n    \/* =====================================================\n       START\n    ====================================================== *\/\n\n    showSlide(0);\n\n    startAutoPlay();\n\n\n});\n<\/script>\n\n<!-- =====================================================\n     ELITE HOME BANNER\n     \u9996\u9801\u6a6b\u5e45\u8f2a\u64ad\n\n     \u96fb\u8166\u7248\u5716\u7247\uff1a1920 \u00d7 700 px\n     \u624b\u6a5f\u7248\u5716\u7247\uff1a900 \u00d7 1200 px\n===================================================== -->\n\n<section class=\"elite-home-banner\">\n\n    <div class=\"elite-banner-slider\">\n\n\n        <!-- =================================================\n             \u7b2c 1 \u5f35\n        ================================================== -->\n\n        <a href=\"https:\/\/www.elite-household.com\/product-category\/all\/glemgas-kitchen-appliances\/\" class=\"elite-banner-slide active\">\n\n            <picture>\n\n                <!-- \u624b\u6a5f\u7248\uff1a900 \u00d7 1200 -->\n                <source media=\"(max-width: 767px)\" srcset=\"https:\/\/www.elite-household.com\/wp-content\/uploads\/2026\/09\/\u8d85\u904e60\u5e74\u966a\u4f34\u60a8\u7684\u7fa9\u5927\u5229\u5eda\u96fb\u54c1\u724c-\u624b\u6a5f\u7248.png\">\n\n                <!-- \u96fb\u8166\u7248\uff1a1920 \u00d7 700 -->\n                <img decoding=\"async\" src=\"https:\/\/www.elite-household.com\/wp-content\/uploads\/2026\/08\/\u5b98\u7db2\u6a6b\u5e4501.jpg\" alt=\"\u8d85\u904e60\u5e74\uff0c\u966a\u4f34\u60a8\u7684\u7fa9\u5927\u5229\u5eda\u96fb\u54c1\u724c\">\n\n            <\/picture>\n\n        <\/a>\n\n\n        <!-- =================================================\n             \u7b2c 2 \u5f35\n        ================================================== -->\n\n        <a href=\"\/product-category\/all\/new-arrivals\" class=\"elite-banner-slide\">\n\n            <picture>\n\n                <!-- \u624b\u6a5f\u7248\uff1a900 \u00d7 1200 -->\n                <source media=\"(max-width: 767px)\" srcset=\"https:\/\/www.elite-household.com\/wp-content\/uploads\/2026\/10\/90\u5929\u8a66\u7528-\u624b\u6a5f\u7248900\u00d7-1200px.png\">\n\n                <!-- \u96fb\u8166\u7248\uff1a1920 \u00d7 700 -->\n                <img decoding=\"async\" src=\"https:\/\/www.elite-household.com\/wp-content\/uploads\/2026\/10\/90\u5929\u8a66\u7528-\u96fb\u8166\u72481920\u00d7700px.png\" alt=\"\u65b0\u54c1\u4e0a\u5e02 \u7cbe\u7dfb\u7f8e\u5b78 \u8cea\u611f\u751f\u6d3b\">\n\n            <\/picture>\n\n        <\/a>\n\n\n <!-- =================================================\n             \u7b2c 3 \u5f35\n        ================================================== -->\n\n        <a href=\"\/product-category\/all\/new-arrivals\/\" class=\"elite-banner-slide\">\n\n            <picture>\n\n                <!-- \u624b\u6a5f\u7248\uff1a900 \u00d7 1200 -->\n                <source media=\"(max-width: 767px)\" srcset=\"https:\/\/www.elite-household.com\/wp-content\/uploads\/2026\/09\/\u65b0\u54c1\u4e0a\u5e02-\u624b\u6a5f\u7248.png\">\n\n                <!-- \u96fb\u8166\u7248\uff1a1920 \u00d7 700 -->\n                <img decoding=\"async\" src=\"https:\/\/www.elite-household.com\/wp-content\/uploads\/2026\/08\/\u5b98\u7db2\u6a6b\u5e4502.jpg\" alt=\"\u65b0\u54c1\u4e0a\u5e02 \u7cbe\u7dfb\u7f8e\u5b78 \u8cea\u611f\u751f\u6d3b\">\n\n            <\/picture>\n\n        <\/a>\n\n\n\n        <!-- =================================================\n             \u7b2c 4 \u5f35\n        ================================================== -->\n\n        <a href=\"\/product-category\/all\/induction-cooktop\/\" class=\"elite-banner-slide\">\n\n            <picture>\n\n                <!-- \u624b\u6a5f\u7248\uff1a900 \u00d7 1200 -->\n                <source media=\"(max-width: 767px)\" srcset=\"https:\/\/www.elite-household.com\/wp-content\/uploads\/2026\/09\/\u7528\u7f8e\u5473\u628a\u65e5\u5e38\u8b8a\u5f97\u66f4\u597d-\u624b\u6a5f\u7248.png\">\n\n                <!-- \u96fb\u8166\u7248\uff1a1920 \u00d7 700 -->\n                <img decoding=\"async\" src=\"https:\/\/www.elite-household.com\/wp-content\/uploads\/2026\/09\/\u7528\u7f8e\u5473\u628a\u65e5\u5e38\u8b8a\u5f97\u66f4\u597d.png\" alt=\"\u7528\u7f8e\u5473\u628a\u65e5\u5e38\u8b8a\u5f97\u66f4\u597d\">\n\n            <\/picture>\n\n        <\/a>\n\n\n\n\n  <!-- =================================================\n             \u7b2c 5 \u5f35\n        ================================================== -->\n\n        <a href=\"\/elite-household-8th-anniversary-2026\/\" class=\"elite-banner-slide\">\n\n            <picture>\n\n                <!-- \u624b\u6a5f\u7248\uff1a900 \u00d7 1200 -->\n                <source media=\"(max-width: 767px)\" srcset=\"https:\/\/www.elite-household.com\/wp-content\/uploads\/2026\/10\/\u516b\u9031\u5e74-900\u00d71200-px.png\">\n\n                <!-- \u96fb\u8166\u7248\uff1a1920 \u00d7 700 -->\n                <img decoding=\"async\" src=\"https:\/\/www.elite-household.com\/wp-content\/uploads\/2026\/10\/\u516b\u9031\u5e74-1920\u00d7700-px.png\" alt=\"\u516b\u9031\u5e74\">\n\n            <\/picture>\n\n        <\/a>\n\n\n\n  <!-- =================================================\n             \u7b2c 6 \u5f35\n        ================================================== -->\n\n        <a href=\"\/category\/news\/\" class=\"elite-banner-slide\">\n\n            <picture>\n\n                <!-- \u624b\u6a5f\u7248\uff1a900 \u00d7 1200 -->\n                <source media=\"(max-width: 767px)\" srcset=\"https:\/\/www.elite-household.com\/wp-content\/uploads\/2026\/10\/\u5b89\u5fc3\u4fdd\u56fa900\u00d7-1200px.png\">\n\n                <!-- \u96fb\u8166\u7248\uff1a1920 \u00d7 700 -->\n                <img decoding=\"async\" src=\"https:\/\/www.elite-household.com\/wp-content\/uploads\/2026\/10\/\u5b89\u5fc3\u4fdd\u56fa1920\u00d7700px.png\" alt=\"\u7528\u7f8e\u5473\u628a\u65e5\u5e38\u8b8a\u5f97\u66f4\u597d\">\n\n            <\/picture>\n\n        <\/a>\n\n\n\n\n\n\n\n        <!-- \n=================================================\n             \u5de6\u7bad\u982d\n        ================================================== -->\n\n        <button class=\"elite-banner-arrow elite-banner-prev\" type=\"button\" aria-label=\"\u4e0a\u4e00\u5f35\">\n            \u2039\n        <\/button>\n\n\n\n        <!-- =================================================\n             \u53f3\u7bad\u982d\n        ================================================== -->\n\n        <button class=\"elite-banner-arrow elite-banner-next\" type=\"button\" aria-label=\"\u4e0b\u4e00\u5f35\">\n            \u203a\n        <\/button>\n\n\n\n        <!-- =================================================\n             \u8f2a\u64ad\u5713\u9ede\n        ================================================== -->\n\n        <div class=\"elite-banner-dots\">\n\n            <button class=\"active\" type=\"button\" aria-label=\"\u7b2c1\u5f35\"><\/button>\n\n            <button type=\"button\" aria-label=\"\u7b2c2\u5f35\"><\/button>\n\n            <button type=\"button\" aria-label=\"\u7b2c3\u5f35\"><\/button>\n\n<button type=\"button\" aria-label=\"\u7b2c4\u5f35\"><\/button>\n<button type=\"button\" aria-label=\"\u7b2c5\u5f35\"><\/button>\n<button type=\"button\" aria-label=\"\u7b2c6\u5f35\"><\/button>\n\n\n\n\n\n        <\/div>\n\n\n    <\/div>\n\n<\/section>\n\n\n\n<style data-wp-block-html=\"css\">\n\/* =========================================================\n   BASIC\n========================================================= *\/\n\nhtml {\n  scroll-behavior: smooth;\n}\n\nbody {\n  margin: 0;\n  overflow-x: hidden;\n}\n\n\n.elite-parallax-home,\n.elite-parallax-home * {\n  box-sizing: border-box;\n}\n\n\n.elite-parallax-home {\n\n  --elite-pink: #F3E8EE;\n  --elite-light-green: #BACDB0;\n  --elite-green: #729B79;\n  --elite-dark-green: #475B63;\n  --elite-black: #2E2C2F;\n\n  --elite-white: #ffffff;\n  --elite-bg: #f7f7f5;\n  --elite-light-bg: #f2f5f1;\n  --elite-line: #e4e5e2;\n\n\n  width: 100vw !important;\n  max-width: 100vw !important;\n\n\n  margin-left:\n    calc(50% - 50vw) !important;\n\n  margin-right:\n    calc(50% - 50vw) !important;\n\n\n  padding: 0 !important;\n\n\n  overflow-x: hidden;\n\n\n  color:\n    var(--elite-black);\n\n\n  font-family:\n    \"Noto Sans TC\",\n    \"Microsoft JhengHei\",\n    Arial,\n    sans-serif;\n\n}\n\n\n.elite-parallax-home img {\n\n  display: block;\n\n  width: 100%;\n\n}\n\n\n.elite-parallax-home a {\n\n  color: inherit;\n\n  text-decoration: none;\n\n}\n\n\n\n\/* =========================================================\n   WORDPRESS \/ KADENCE FULL WIDTH\n========================================================= *\/\n\nbody.home .site-main,\nbody.home .content-area,\nbody.home .content-container,\nbody.home .site-container,\nbody.home .entry-content,\nbody.home .entry-content-wrap,\nbody.home .wp-block-post-content,\nbody.home .site-content,\nbody.home .content-wrap {\n\n  max-width:\n    none !important;\n\n}\n\n\nbody.home .entry-content,\nbody.home .entry-content-wrap,\nbody.home .wp-block-post-content {\n\n  padding-left:\n    0 !important;\n\n  padding-right:\n    0 !important;\n\n}\n\n\n\n\/* =========================================================\n   CONTENT CONTAINER\n========================================================= *\/\n\n.ep-container {\n\n  width:\n    min(\n      1260px,\n      calc(100% - 80px)\n    );\n\n\n  margin-left:\n    auto;\n\n  margin-right:\n    auto;\n\n}\n\n\n\n\/* =========================================================\n   REVEAL\n========================================================= *\/\n\n.ep-reveal {\n\n  opacity:\n    1;\n\n\n  transform:\n    translateY(0);\n\n}\n\n\n\nhtml.ep-js-ready\n.ep-reveal {\n\n  opacity:\n    0;\n\n\n  transform:\n    translateY(45px);\n\n\n  transition:\n\n    opacity\n    .8s\n    cubic-bezier(.2,.65,.2,1),\n\n    transform\n    .8s\n    cubic-bezier(.2,.65,.2,1);\n\n}\n\n\n\nhtml.ep-js-ready\n.ep-reveal.ep-visible {\n\n  opacity:\n    1;\n\n\n  transform:\n    translateY(0);\n\n}\n\n\n\n\/* =========================================================\n   COMMON\n========================================================= *\/\n\n.ep-kicker {\n\n  display:\n    block;\n\n\n  margin-bottom:\n    18px;\n\n\n  font-size:\n    12px;\n\n\n  font-weight:\n    700;\n\n\n  letter-spacing:\n    .22em;\n\n}\n\n\n\n.ep-green {\n\n  color:\n    var(--elite-green);\n\n}\n\n\n\n.ep-section-number {\n\n  color:\n    var(--elite-light-green);\n\n\n  font-size:\n    14px;\n\n\n  letter-spacing:\n    .15em;\n\n}\n\n\n\n\/* =========================================================\n   INTRO\n========================================================= *\/\n\n.ep-intro {\n\n  padding:\n    125px 0;\n\n\n  background:\n    #ffffff;\n\n}\n\n\n\n.ep-intro-grid {\n\n  display:\n    grid;\n\n\n  grid-template-columns:\n    160px 1fr;\n\n\n  max-width:\n    1050px;\n\n\n  margin:\n    0 auto;\n\n}\n\n\n\n.ep-intro-content h2 {\n\n  max-width:\n    850px;\n\n\n  margin:\n    0 0 28px;\n\n\n  font-size:\n    clamp(\n      34px,\n      4vw,\n      56px\n    );\n\n\n  line-height:\n    1.45;\n\n\n  font-weight:\n    500;\n\n}\n\n\n\n.ep-intro-content p {\n\n  max-width:\n    680px;\n\n\n  margin:\n    0 0 30px;\n\n\n  color:\n    #666666;\n\n\n  font-size:\n    16px;\n\n\n  line-height:\n    2;\n\n}\n\n\n\n\/* =========================================================\n   TEXT LINK\n========================================================= *\/\n\n.ep-text-link {\n\n  display:\n    inline-flex;\n\n\n  align-items:\n    center;\n\n\n  gap:\n    10px;\n\n\n  padding-bottom:\n    6px;\n\n\n  border-bottom:\n    1px solid\n    var(--elite-dark-green);\n\n\n  font-size:\n    14px;\n\n\n  font-weight:\n    600;\n\n}\n\n\n\n.ep-text-link span {\n\n  transition:\n    transform\n    .25s\n    ease;\n\n}\n\n\n\n.ep-text-link:hover span {\n\n  transform:\n    translateX(5px);\n\n}\n\n\n\n\/* =========================================================\n   SECTION HEADING\n========================================================= *\/\n\n.ep-section-heading {\n\n  margin-bottom:\n    50px;\n\n}\n\n\n\n.ep-section-heading h2 {\n\n  margin:\n    0;\n\n\n  font-size:\n    clamp(\n      36px,\n      4vw,\n      54px\n    );\n\n\n  line-height:\n    1.3;\n\n\n  font-weight:\n    500;\n\n}\n\n\n\n.ep-section-heading p {\n\n  max-width:\n    620px;\n\n\n  margin:\n    18px 0 0;\n\n\n  color:\n    #686868;\n\n\n  line-height:\n    1.9;\n\n}\n\n\n\n\/* =========================================================\n   PRODUCTS\n========================================================= *\/\n\n.ep-products {\n\n  padding:\n    110px 0;\n\n\n  background:\n    var(--elite-bg);\n\n}\n\n\n\n.ep-product-grid {\n\n  display:\n    grid;\n\n\n  grid-template-columns:\n\n    repeat(\n      3,\n      minmax(0,1fr)\n    );\n\n\n  gap:\n    22px;\n\n}\n\n\n\n.ep-product-card {\n\n  overflow:\n    hidden;\n\n\n  background:\n    #ffffff;\n\n\n  transition:\n\n    transform\n    .4s\n    ease,\n\n    box-shadow\n    .4s\n    ease;\n\n}\n\n\n\n.ep-product-card:hover {\n\n  transform:\n    translateY(-8px);\n\n\n  box-shadow:\n\n    0\n    20px\n    55px\n    rgba(\n      46,\n      44,\n      47,\n      .12\n    );\n\n}\n\n\n\n.ep-product-image {\n\n  overflow:\n    hidden;\n\n}\n\n\n\n.ep-product-image img {\n\n  aspect-ratio:\n    4 \/ 3;\n\n\n  object-fit:\n    cover;\n\n\n  transition:\n    transform\n    .65s\n    ease;\n\n}\n\n\n\n.ep-product-card:hover\n.ep-product-image img {\n\n  transform:\n    scale(1.05);\n\n}\n\n\n\n.ep-product-info {\n\n  min-height:\n    100px;\n\n\n  padding:\n    24px;\n\n\n  display:\n    grid;\n\n\n  grid-template-columns:\n    35px 1fr auto;\n\n\n  align-items:\n    center;\n\n}\n\n\n\n.ep-product-info > span {\n\n  color:\n    var(--elite-light-green);\n\n\n  font-size:\n    11px;\n\n}\n\n\n\n.ep-product-info h3 {\n\n  margin:\n    0;\n\n\n  font-size:\n    19px;\n\n\n  font-weight:\n    500;\n\n}\n\n\n\n.ep-product-info i {\n\n  color:\n    var(--elite-green);\n\n\n  font-style:\n    normal;\n\n}\n\n\n\n\/* =========================================================\n   STORY \/ PARALLAX\n========================================================= *\/\n\n.ep-story {\n\n  position:\n    relative;\n\n\n  width:\n    100vw !important;\n\n\n  min-height:\n    680px;\n\n\n  margin-left:\n    calc(50% - 50vw) !important;\n\n\n  margin-right:\n    calc(50% - 50vw) !important;\n\n\n  overflow:\n    hidden;\n\n\n  display:\n    flex;\n\n\n  align-items:\n    center;\n\n\n  color:\n    #ffffff;\n\n}\n\n\n\n.ep-story-bg {\n\n  position:\n    absolute;\n\n\n  top:\n    -10%;\n\n\n  left:\n    0;\n\n\n  width:\n    100%;\n\n\n  height:\n    120%;\n\n\n  background-size:\n    cover !important;\n\n\n  background-position:\n    center center !important;\n\n\n  background-repeat:\n    no-repeat !important;\n\n\n  will-change:\n    transform;\n\n}\n\n\n\n.ep-story-overlay {\n\n  position:\n    absolute;\n\n\n  inset:\n    0;\n\n\n  background:\n    rgba(\n      46,\n      44,\n      47,\n      .5\n    );\n\n}\n\n\n\n.ep-story-content {\n\n  position:\n    relative;\n\n\n  z-index:\n    2;\n\n}\n\n\n\n.ep-story-content h2 {\n\n  max-width:\n    820px;\n\n\n  margin:\n    0 0 22px;\n\n\n  color:\n    #ffffff;\n\n\n  font-size:\n    clamp(\n      42px,\n      5vw,\n      68px\n    );\n\n\n  line-height:\n    1.3;\n\n\n  font-weight:\n    500;\n\n}\n\n\n\n.ep-story-content p {\n\n  max-width:\n    550px;\n\n\n  color:\n    rgba(\n      255,\n      255,\n      255,\n      .86\n    );\n\n\n  line-height:\n    2;\n\n}\n\n\n\n\/* =========================================================\n   BRAND FEATURE\n========================================================= *\/\n\n.ep-brand-feature {\n\n  display:\n    grid;\n\n\n  grid-template-columns:\n    58% 42%;\n\n\n  min-height:\n    720px;\n\n\n  background:\n    #ffffff;\n\n}\n\n\n\n.ep-brand-reverse {\n\n  grid-template-columns:\n    42% 58%;\n\n\n  background:\n    var(--elite-light-bg);\n\n}\n\n\n\n.ep-brand-reverse\n.ep-brand-visual {\n\n  order:\n    2;\n\n}\n\n\n\n.ep-brand-reverse\n.ep-brand-copy {\n\n  order:\n    1;\n\n}\n\n\n\n.ep-brand-visual {\n\n  position:\n    relative;\n\n\n  min-height:\n    680px;\n\n\n  overflow:\n    hidden;\n\n}\n\n\n\n.ep-brand-visual img {\n\n  position:\n    absolute;\n\n\n  top:\n    -4%;\n\n\n  left:\n    0;\n\n\n  width:\n    100%;\n\n\n  height:\n    108%;\n\n\n  object-fit:\n    cover;\n\n\n  will-change:\n    transform;\n\n}\n\n\n\n.ep-brand-copy {\n\n  display:\n    flex;\n\n\n  align-items:\n    center;\n\n\n  justify-content:\n    center;\n\n\n  padding:\n    70px;\n\n}\n\n\n\n.ep-brand-inner {\n\n  max-width:\n    480px;\n\n}\n\n\n\n.ep-brand-inner\n.ep-section-number {\n\n  display:\n    block;\n\n\n  margin-bottom:\n    70px;\n\n}\n\n\n\n.ep-brand-inner h2 {\n\n  margin:\n    0 0 25px;\n\n\n  font-size:\n    clamp(\n      35px,\n      3.5vw,\n      52px\n    );\n\n\n  line-height:\n    1.4;\n\n\n  font-weight:\n    500;\n\n}\n\n\n\n.ep-brand-inner p {\n\n  margin:\n    0 0 32px;\n\n\n  color:\n    #636363;\n\n\n  line-height:\n    2;\n\n}\n\n\n\n\/* =========================================================\n   BUTTON\n========================================================= *\/\n\n.ep-btn {\n\n  min-width:\n    150px;\n\n\n  padding:\n    15px 25px;\n\n\n  display:\n    inline-flex;\n\n\n  align-items:\n    center;\n\n\n  justify-content:\n    center;\n\n\n  border:\n    1px solid transparent;\n\n\n  font-size:\n    14px;\n\n\n  font-weight:\n    600;\n\n\n  transition:\n\n    background\n    .3s\n    ease,\n\n    transform\n    .3s\n    ease;\n\n}\n\n\n\n.ep-btn-dark {\n\n  background:\n    var(--elite-dark-green);\n\n\n  color:\n    #ffffff !important;\n\n}\n\n\n\n.ep-btn-dark:hover {\n\n  background:\n    var(--elite-green);\n\n\n  transform:\n    translateY(-3px);\n\n}\n\n\n\n\/* =========================================================\n   BRANDS\n========================================================= *\/\n\n.ep-brands {\n\n  padding:\n    110px 0;\n\n\n  background:\n    #ffffff;\n\n}\n\n\n.ep-brand-grid {\n\n  display:\n    grid;\n\n  grid-template-columns:\n    repeat(5, 1fr);\n\n\n  border-top:\n    1px solid\n    var(--elite-line);\n\n\n  border-left:\n    1px solid\n    var(--elite-line);\n\n}\n\n\n\n.ep-brand-card {\n\n  min-height:\n    220px;\n\n\n  padding:\n    35px;\n\n\n  border-right:\n    1px solid\n    var(--elite-line);\n\n\n  border-bottom:\n    1px solid\n    var(--elite-line);\n\n\n  display:\n    flex;\n\n\n  flex-direction:\n    column;\n\n\n  align-items:\n    center;\n\n\n  justify-content:\n    center;\n\n\n  transition:\n    background\n    .3s\n    ease;\n\n}\n\n\n\n.ep-brand-card:hover {\n\n  background:\n    var(--elite-light-green);\n\n}\n\n\n\n.ep-brand-card img {\n\n  width:\n    auto;\n\n\n  max-width:\n    150px;\n\n\n  max-height:\n    70px;\n\n\n  object-fit:\n    contain;\n\n\n  margin-bottom:\n    25px;\n\n}\n\n\n\n\n\/* =========================================================\n   MEDIA HUB\uff5c\u6700\u65b0\u5f71\u97f3 + \u96fb\u5b50\u66f8\n========================================================= *\/\n\n.ep-media-hub {\n  background: #ffffff;\n}\n\n.ep-media-section {\n  padding: 92px 0;\n  overflow: hidden;\n}\n\n.ep-video-section {\n  background: #ffffff;\n  border-top: 1px solid var(--elite-line);\n}\n\n.ep-ebook-section {\n  background: #f7f7f5;\n  border-top: 1px solid var(--elite-line);\n}\n\n\n\/* =========================================================\n   \u6a19\u984c\n   VIDEO \/ EBOOK \u7684\u82f1\u6587\u4f4d\u7f6e\u6bd4\u7167 NEWS\uff1a\n   \u82f1\u6587\u5c0f\u6a19\u5728\u4e0a\u3001\u4e2d\u6587\u5927\u6a19\u5728\u4e0b\n========================================================= *\/\n\n.ep-media-heading {\n  display: flex;\n  align-items: flex-end;\n  justify-content: space-between;\n  gap: 30px;\n  margin-bottom: 42px;\n}\n\n.ep-media-heading-title {\n  min-width: 0;\n}\n\n.ep-media-heading .ep-news-kicker {\n  margin-bottom: 14px;\n}\n\n.ep-media-heading h2 {\n  margin: 0;\n  color: var(--elite-black);\n  font-size: clamp(36px, 4vw, 54px);\n  line-height: 1.3;\n  font-weight: 500;\n}\n\n.ep-media-actions {\n  display: flex;\n  align-items: center;\n  gap: 18px;\n  flex-shrink: 0;\n}\n\n.ep-media-arrows {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n\n.ep-media-arrow {\n  width: 38px;\n  height: 38px;\n  padding: 0;\n  border: 1px solid #c9cbc7;\n  border-radius: 50%;\n  background: #ffffff;\n  color: #68716d;\n  font-size: 25px;\n  line-height: 1;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  cursor: pointer;\n  transition:\n    background .25s ease,\n    color .25s ease,\n    border-color .25s ease,\n    opacity .25s ease,\n    transform .25s ease;\n}\n\n.ep-media-arrow:hover {\n  background: var(--elite-dark-green);\n  border-color: var(--elite-dark-green);\n  color: #ffffff;\n  transform: translateY(-2px);\n}\n\n.ep-media-arrow:disabled {\n  opacity: .28;\n  pointer-events: none;\n}\n\n.ep-media-more {\n  min-width: 78px;\n  min-height: 38px;\n  padding: 0 19px;\n  border: 1px solid #c9cbc7;\n  border-radius: 999px;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  color: #6d716f !important;\n  background: #ffffff;\n  font-size: 13px;\n  line-height: 1;\n  text-decoration: none !important;\n  transition:\n    background .25s ease,\n    color .25s ease,\n    border-color .25s ease;\n}\n\n.ep-media-more:hover {\n  background: var(--elite-dark-green);\n  border-color: var(--elite-dark-green);\n  color: #ffffff !important;\n}\n\n.ep-media-more-text {\n  min-width: 0;\n  min-height: 0;\n  padding: 0 0 6px;\n  border: 0;\n  border-bottom: 1px solid #475B63;\n  border-radius: 0;\n  background: transparent;\n  color: #475B63 !important;\n  font-size: 14px;\n  font-weight: 500;\n  line-height: 1.2;\n  letter-spacing: 0;\n  text-decoration: none !important;\n}\n\n.ep-media-more-text:hover {\n  background: transparent;\n  border-color: #729B79;\n  color: #729B79 !important;\n}\n\n\n\/* =========================================================\n   \u5171\u7528\u6c34\u5e73\u6ed1\u52d5\n========================================================= *\/\n\n.ep-media-slider {\n  position: relative;\n}\n\n.ep-media-track {\n  display: flex;\n  gap: 24px;\n  width: 100%;\n  padding: 5px 2px 24px;\n  overflow-x: auto;\n  overflow-y: hidden;\n  scroll-behavior: smooth;\n  scroll-snap-type: x mandatory;\n  scrollbar-width: none;\n  -ms-overflow-style: none;\n  -webkit-overflow-scrolling: touch;\n  cursor: grab;\n}\n\n.ep-media-track::-webkit-scrollbar {\n  display: none;\n}\n\n.ep-media-track.ep-is-dragging {\n  cursor: grabbing;\n  scroll-behavior: auto;\n  scroll-snap-type: none;\n  user-select: none;\n}\n\n.ep-media-loading,\n.ep-media-error,\n.ep-media-empty {\n  flex: 0 0 100%;\n  min-height: 220px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  text-align: center;\n  color: #777777;\n  font-size: 14px;\n  line-height: 1.9;\n}\n\n.ep-media-error {\n  flex-direction: column;\n  gap: 10px;\n}\n\n.ep-media-error a {\n  color: var(--elite-green) !important;\n  text-decoration: underline !important;\n}\n\n.ep-media-swipe-hint {\n  display: none;\n  align-items: center;\n  justify-content: center;\n  gap: 10px;\n  margin-top: 0;\n  color: #999999;\n  font-size: 12px;\n  letter-spacing: .05em;\n}\n\n\n\/* =========================================================\n   VIDEO CARDS\n========================================================= *\/\n\n.ep-video-card {\n  flex: 0 0 calc((100% - 96px) \/ 5);\n  min-width: 0;\n  color: var(--elite-black) !important;\n  scroll-snap-align: start;\n}\n\n.ep-video-thumb {\n  position: relative;\n  width: 100%;\n  aspect-ratio: 16 \/ 9;\n  overflow: hidden;\n  background: #eceeeb;\n}\n\n.ep-video-thumb img {\n  width: 100%;\n  height: 100%;\n  object-fit: cover;\n  transition: transform .55s ease;\n}\n\n.ep-video-card:hover .ep-video-thumb img {\n  transform: scale(1.045);\n}\n\n.ep-video-play {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 54px;\n  height: 54px;\n  border: 1.5px solid rgba(255,255,255,.95);\n  border-radius: 50%;\n  background: rgba(255,255,255,.08);\n  backdrop-filter: blur(1px);\n  transform: translate(-50%, -50%);\n  transition: transform .3s ease, background .3s ease;\n}\n\n.ep-video-play::before {\n  content: \"\";\n  position: absolute;\n  top: 50%;\n  left: 52%;\n  border-top: 8px solid transparent;\n  border-bottom: 8px solid transparent;\n  border-left: 13px solid #ffffff;\n  transform: translate(-40%, -50%);\n}\n\n.ep-video-card:hover .ep-video-play {\n  background: rgba(114,155,121,.82);\n  transform: translate(-50%, -50%) scale(1.07);\n}\n\n.ep-video-card h3 {\n  margin: 13px 0 7px;\n  color: #2b88c7;\n  font-size: 14px;\n  line-height: 1.65;\n  font-weight: 600;\n  display: -webkit-box;\n  -webkit-box-orient: vertical;\n  -webkit-line-clamp: 3;\n  overflow: hidden;\n  transition: color .25s ease;\n}\n\n.ep-video-card:hover h3 {\n  color: var(--elite-green);\n}\n\n.ep-video-date {\n  display: block;\n  color: #aaaaaa;\n  font-size: 11px;\n  letter-spacing: .03em;\n}\n\n\n\/* =========================================================\n   EBOOK CARDS \/ TRUE IMAGE PAGE TURN\n\n   \u505a\u6cd5\uff1a\n   1. \u6700\u5e95\u5c64\u76f4\u63a5\u653e\u300c\u7b2c\u4e8c\u9801\u5b8c\u6574\u5716\u7247\u300d\n   2. \u5c01\u9762\u62c6\u6210\u5de6\u534a\uff0b\u53f3\u534a\n   3. \u6ed1\u9f20\u79fb\u5165\u6642\uff0c\u53f3\u534a\u5f35\u5c01\u9762\u672c\u8eab 3D \u7ffb\u5230\u5de6\u5074\n   4. \u7ffb\u9801\u80cc\u9762\u986f\u793a\u300c\u7b2c\u4e8c\u9801\u7684\u5de6\u534a\u300d\n   5. \u53f3\u5074\u540c\u6642\u9732\u51fa\u5e95\u5c64\u300c\u7b2c\u4e8c\u9801\u7684\u53f3\u534a\u300d\n\n   \u6240\u4ee5\u7ffb\u5230\u5e95\u6642\u770b\u5230\u7684\u662f\u5b8c\u6574\u7b2c\u4e8c\u9801\uff0c\n   \u4e0d\u662f\u534a\u900f\u660e\u906e\u7f69\uff0c\u4e5f\u4e0d\u662f\u5047\u7d19\u5f35\u3002\n========================================================= *\/\n\n.ep-ebook-card {\n  flex: 0 0 calc((100% - 96px) \/ 5);\n  min-width: 0;\n  color: var(--elite-black) !important;\n  scroll-snap-align: start;\n}\n\n.ep-ebook-book {\n  position: relative;\n  width: 100%;\n  aspect-ratio: 1.414 \/ 1;\n  perspective: 1700px;\n  transform-style: preserve-3d;\n  transition: transform .35s ease;\n  isolation: isolate;\n}\n\n\/* \u7b2c\u4e8c\u9801\uff1a\u771f\u6b63\u5b8c\u6574\u7684\u4e00\u5f35\u5716\u7247\uff0c\u653e\u5728\u6700\u5e95\u5c64 *\/\n.ep-ebook-page2 {\n  position: absolute;\n  inset: 0;\n  z-index: 0;\n  overflow: hidden;\n  border: 1px solid #d9dbd6;\n  border-radius: 4px;\n  background: #ffffff;\n  box-shadow:\n    0 14px 28px rgba(46,44,47,.12),\n    4px 5px 0 #ecece8,\n    7px 8px 0 #f7f7f4;\n}\n\n.ep-ebook-page2 img {\n  display: block;\n  width: 100%;\n  height: 100%;\n  max-width: none;\n  object-fit: cover;\n  object-position: center;\n}\n\n\/* \u4e2d\u592e\u66f8\u810a\u9670\u5f71 *\/\n.ep-ebook-page2::after {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 50%;\n  width: 14px;\n  pointer-events: none;\n  transform: translateX(-50%);\n  background: linear-gradient(\n    90deg,\n    rgba(0,0,0,.08),\n    rgba(255,255,255,.08) 38%,\n    rgba(0,0,0,.035) 72%,\n    transparent\n  );\n  opacity: .55;\n}\n\n\/* \u5c01\u9762\u5de6\u534a\uff1a\u7ffb\u9801\u904e\u7a0b\u4e2d\u7559\u5728\u539f\u4f4d\uff0c\u6700\u5f8c\u6703\u88ab\u7ffb\u9801\u80cc\u9762\u84cb\u4f4f *\/\n.ep-ebook-cover-left {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 2;\n  width: 50%;\n  height: 100%;\n  overflow: hidden;\n  border-radius: 4px 0 0 4px;\n  background: #ffffff;\n  box-shadow: -3px 10px 22px rgba(46,44,47,.10);\n}\n\n.ep-ebook-cover-left img {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 200%;\n  height: 100%;\n  max-width: none;\n  object-fit: cover;\n  object-position: center;\n}\n\n\/* \u5c01\u9762\u53f3\u534a\uff1a\u9019\u4e00\u534a\u5716\u7247\u672c\u8eab\u5c31\u662f\u88ab\u7ffb\u8d77\u4f86\u7684\u9801 *\/\n.ep-ebook-turn-page {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  z-index: 5;\n  width: 50%;\n  height: 100%;\n  transform-origin: left center;\n  transform-style: preserve-3d;\n  transform: rotateY(0deg);\n  transition:\n    transform .88s cubic-bezier(.18,.72,.18,1),\n    filter .35s ease;\n  will-change: transform;\n}\n\n.ep-ebook-turn-front,\n.ep-ebook-turn-back {\n  position: absolute;\n  inset: 0;\n  overflow: hidden;\n  backface-visibility: hidden;\n  -webkit-backface-visibility: hidden;\n}\n\n\/* \u6b63\u9762 = \u5c01\u9762\u771f\u6b63\u7684\u53f3\u534a\u5f35 *\/\n.ep-ebook-turn-front {\n  z-index: 2;\n  border-radius: 0 4px 4px 0;\n  background: #ffffff;\n  box-shadow: 8px 11px 24px rgba(46,44,47,.14);\n}\n\n.ep-ebook-turn-front img {\n  position: absolute;\n  top: 0;\n  right: 0;\n  width: 200%;\n  height: 100%;\n  max-width: none;\n  object-fit: cover;\n  object-position: center;\n}\n\n\/* \u80cc\u9762 = \u7b2c\u4e8c\u9801\u771f\u6b63\u7684\u5de6\u534a\u5f35 *\/\n.ep-ebook-turn-back {\n  z-index: 1;\n  transform: rotateY(180deg);\n  border-radius: 4px 0 0 4px;\n  background: #ffffff;\n  box-shadow: -8px 11px 24px rgba(46,44,47,.15);\n}\n\n.ep-ebook-turn-back img {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 200%;\n  height: 100%;\n  max-width: none;\n  object-fit: cover;\n  object-position: center;\n}\n\n\/* \u7ffb\u9801\u908a\u7de3\u9670\u5f71\uff0c\u50c5\u662f\u7acb\u9ad4\u9670\u5f71\uff0c\u4e0d\u662f\u5716\u7247\u906e\u7f69 *\/\n.ep-ebook-turn-page::after {\n  content: \"\";\n  position: absolute;\n  z-index: 6;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 2px;\n  pointer-events: none;\n  background: rgba(0,0,0,.12);\n  backface-visibility: hidden;\n}\n\n.ep-ebook-card:hover .ep-ebook-book,\n.ep-ebook-card:focus-visible .ep-ebook-book {\n  transform: translateY(-6px);\n}\n\n\/* \u7ffb\u6eff 180 \u5ea6\uff1a\u53f3\u534a\u5c01\u9762\u7ffb\u5230\u5de6\u5074\uff0c\u5b8c\u6574\u7b2c\u4e8c\u9801\u9732\u51fa *\/\n.ep-ebook-card:hover .ep-ebook-turn-page,\n.ep-ebook-card:focus-visible .ep-ebook-turn-page {\n  transform: rotateY(-180deg);\n}\n\n.ep-ebook-card h3 {\n  margin: 16px 0 5px;\n  color: #555555;\n  font-size: 15px;\n  line-height: 1.5;\n  font-weight: 500;\n}\n\n.ep-ebook-card p {\n  margin: 0;\n  color: #929292;\n  font-size: 12px;\n  line-height: 1.7;\n  display: -webkit-box;\n  -webkit-box-orient: vertical;\n  -webkit-line-clamp: 2;\n  overflow: hidden;\n}\n\n.ep-ebook-card:hover h3,\n.ep-ebook-card:focus-visible h3 {\n  color: var(--elite-green);\n}\n\n\n\/* =========================================================\n   TABLET\n========================================================= *\/\n\n@media (max-width: 1024px) {\n\n  .ep-media-section {\n    padding: 82px 0;\n  }\n\n  .ep-video-card {\n    flex: 0 0 calc((100% - 48px) \/ 3);\n  }\n\n  .ep-ebook-card {\n    flex: 0 0 calc((100% - 48px) \/ 3);\n  }\n\n}\n\n\n\/* =========================================================\n   MOBILE\n========================================================= *\/\n\n@media (max-width: 767px) {\n\n  .ep-media-section {\n    padding: 72px 0;\n  }\n\n  .ep-video-section {\n    padding-top: 76px;\n  }\n\n  .ep-media-section .ep-container {\n    width: 100%;\n  }\n\n  .ep-media-heading {\n    padding: 0 18px;\n    margin-bottom: 28px;\n    align-items: flex-end;\n  }\n\n  .ep-media-heading h2 {\n    font-size: 36px;\n  }\n\n  .ep-media-actions {\n    gap: 10px;\n  }\n\n  .ep-media-arrows {\n    display: none;\n  }\n\n  .ep-media-more {\n    min-width: 70px;\n    min-height: 34px;\n    padding: 0 15px;\n    font-size: 12px;\n  }\n\n  .ep-media-more-text {\n    min-width: 0;\n    min-height: 0;\n    padding: 0 0 5px;\n    font-size: 13px;\n    font-weight: 500;\n    line-height: 1.2;\n  }\n\n  .ep-media-track {\n    gap: 15px;\n    padding: 5px 18px 23px;\n    scroll-padding-left: 18px;\n  }\n\n  .ep-video-card {\n    flex: 0 0 82%;\n  }\n\n  .ep-ebook-card {\n    flex: 0 0 78%;\n  }\n\n  .ep-video-card h3 {\n    font-size: 15px;\n  }\n\n  .ep-ebook-card h3 {\n    font-size: 15px;\n  }\n\n  .ep-media-swipe-hint {\n    display: flex;\n  }\n\n  \/* \u89f8\u63a7\u88dd\u7f6e\u4e0d\u5f37\u8feb\u505c\u5728\u7ffb\u958b\u72c0\u614b *\/\n  .ep-ebook-card:hover .ep-ebook-turn-page {\n    transform: rotateY(-180deg);\n  }\n\n}\n\n\n\/* =========================================================\n   SMALL MOBILE\n========================================================= *\/\n\n@media (max-width: 420px) {\n\n  .ep-media-heading {\n    padding: 0 16px;\n  }\n\n  .ep-media-heading h2 {\n    font-size: 32px;\n  }\n\n  .ep-media-track {\n    padding-left: 16px;\n    padding-right: 16px;\n    scroll-padding-left: 16px;\n  }\n\n  .ep-video-card,\n  .ep-ebook-card {\n    flex-basis: 86%;\n  }\n\n}\n\n\/* =====================================================\n   NEWS\uff5c\u6700\u65b0\u6d88\u606f\n===================================================== *\/\n\n\n\/* =====================================================\n   \u5916\u5c64\n===================================================== *\/\n\n.ep-news {\n\n    padding:\n        110px 0;\n\n    background:\n        #f7f7f5;\n\n    overflow:\n        hidden;\n\n}\n\n\n\n\/* =====================================================\n   \u5167\u5bb9\u5bec\u5ea6\n===================================================== *\/\n\n.ep-news .ep-container {\n\n    width:\n        min(\n            1260px,\n            calc(100% - 80px)\n        );\n\n    margin-left:\n        auto;\n\n    margin-right:\n        auto;\n\n}\n\n\n\n\/* =====================================================\n   \u6a19\u984c\u5340\n===================================================== *\/\n\n.ep-news-title {\n\n    display:\n        flex;\n\n    align-items:\n        flex-end;\n\n    justify-content:\n        space-between;\n\n    gap:\n        30px;\n\n    margin-bottom:\n        45px;\n\n}\n\n\n\n.ep-news-kicker {\n\n    display:\n        block;\n\n    margin-bottom:\n        14px;\n\n    color:\n        #729B79;\n\n    font-size:\n        12px;\n\n    font-weight:\n        700;\n\n    letter-spacing:\n        .22em;\n\n}\n\n\n\n.ep-news-title h2 {\n\n    margin:\n        0;\n\n    color:\n        #2E2C2F;\n\n    font-size:\n        clamp(\n            36px,\n            4vw,\n            54px\n        );\n\n    line-height:\n        1.3;\n\n    font-weight:\n        500;\n\n}\n\n\n\n\/* =====================================================\n   \u67e5\u770b\u5168\u90e8\n===================================================== *\/\n\n.ep-news-all {\n\n    display:\n        inline-flex;\n\n    align-items:\n        center;\n\n    gap:\n        6px;\n\n    flex-shrink:\n        0;\n\n    min-width:\n        0;\n\n    min-height:\n        0;\n\n    padding:\n        0 0 6px;\n\n    border:\n        0;\n\n    border-bottom:\n        1px solid #475B63;\n\n    border-radius:\n        0;\n\n    background:\n        transparent;\n\n    color:\n        #475B63;\n\n    font-size:\n        14px;\n\n    font-weight:\n        500;\n\n    line-height:\n        1.2;\n\n    letter-spacing:\n        0;\n\n    text-decoration:\n        none;\n\n}\n\n\n.ep-news-all span {\n\n    color:\n        inherit;\n\n    transition:\n        transform .25s ease;\n\n}\n\n\n.ep-news-all:hover {\n\n    border-color:\n        #729B79;\n\n    color:\n        #729B79;\n\n}\n\n\n.ep-news-all:hover span {\n\n    transform:\n        translateX(5px);\n\n}\n\n\n\n\/* =====================================================\n   \u8f2a\u64ad\u5916\u6846\n===================================================== *\/\n\n.ep-news-slider-wrap {\n\n    position:\n        relative;\n\n}\n\n\n\n\/* =====================================================\n   \u5de6\u53f3\u6ed1\u52d5\u5340\n===================================================== *\/\n\n.ep-news-slider {\n\n    display:\n        flex;\n\n    gap:\n        24px;\n\n    width:\n        100%;\n\n    padding:\n        6px 2px 30px;\n\n    overflow-x:\n        auto;\n\n    overflow-y:\n        hidden;\n\n    scroll-behavior:\n        smooth;\n\n    scroll-snap-type:\n        x mandatory;\n\n    scrollbar-width:\n        none;\n\n    -ms-overflow-style:\n        none;\n\n    -webkit-overflow-scrolling:\n        touch;\n\n    cursor:\n        grab;\n\n}\n\n\n\n.ep-news-slider::-webkit-scrollbar {\n\n    display:\n        none;\n\n}\n\n\n\n.ep-news-slider.ep-is-dragging {\n\n    cursor:\n        grabbing;\n\n    scroll-behavior:\n        auto;\n\n    scroll-snap-type:\n        none;\n\n    user-select:\n        none;\n\n}\n\n\n\n\/* =====================================================\n   \u55ae\u5f35\u6700\u65b0\u6d88\u606f\n   \u96fb\u8166\u4e00\u6b21\u986f\u793a 3 \u5f35\n===================================================== *\/\n\n.ep-news-card {\n\n    display:\n        flex;\n\n    flex-direction:\n        column;\n\n    flex:\n        0 0 calc(\n            (100% - 48px) \/ 3\n        );\n\n    min-width:\n        0;\n\n    overflow:\n        hidden;\n\n    background:\n        #ffffff;\n\n    color:\n        #2E2C2F;\n\n    text-decoration:\n        none;\n\n    scroll-snap-align:\n        start;\n\n    transition:\n        transform .4s ease,\n        box-shadow .4s ease;\n\n}\n\n\n\n.ep-news-card:hover {\n\n    transform:\n        translateY(-7px);\n\n    box-shadow:\n\n        0\n        18px\n        50px\n        rgba(\n            46,\n            44,\n            47,\n            .11\n        );\n\n}\n\n\n\n\/* =====================================================\n   \u7e2e\u5716\u5340\n===================================================== *\/\n\n.ep-news-image {\n\n    position:\n        relative;\n\n    overflow:\n        hidden;\n\n    width:\n        100%;\n\n    aspect-ratio:\n        16 \/ 9;\n\n    background:\n        #e8ebe7;\n\n}\n\n\n\n.ep-news-image img {\n\n    display:\n        block;\n\n    width:\n        100%;\n\n    height:\n        100%;\n\n    object-fit:\n        cover;\n\n    object-position:\n        center;\n\n    transition:\n        transform .65s ease;\n\n}\n\n\n\n.ep-news-card:hover\n.ep-news-image img {\n\n    transform:\n        scale(1.05);\n\n}\n\n\n\n\/* =====================================================\n   \u6587\u5b57\u5167\u5bb9\n===================================================== *\/\n\n.ep-news-content {\n\n    display:\n        flex;\n\n    flex-direction:\n        column;\n\n    flex-grow:\n        1;\n\n    min-height:\n        200px;\n\n    padding:\n        25px 25px 27px;\n\n}\n\n\n\n\/* =====================================================\n   \u65e5\u671f\n===================================================== *\/\n\n.ep-news-content time {\n\n    display:\n        block;\n\n    margin-bottom:\n        12px;\n\n    color:\n        #8a8a8a;\n\n    font-size:\n        12px;\n\n    letter-spacing:\n        .04em;\n\n}\n\n\n\n\/* =====================================================\n   \u6a19\u984c\n===================================================== *\/\n\n.ep-news-content h3 {\n\n    margin:\n        0 0 24px;\n\n    color:\n        #2E2C2F;\n\n    font-size:\n        19px;\n\n    line-height:\n        1.65;\n\n    font-weight:\n        500;\n\n    display:\n        -webkit-box;\n\n    -webkit-box-orient:\n        vertical;\n\n    -webkit-line-clamp:\n        3;\n\n    overflow:\n        hidden;\n\n}\n\n\n\n\/* =====================================================\n   READ MORE\n===================================================== *\/\n\n.ep-news-read-more {\n\n    margin-top:\n        auto;\n\n    color:\n        #729B79;\n\n    font-size:\n        11px;\n\n    font-weight:\n        600;\n\n    letter-spacing:\n        .08em;\n\n}\n\n\n\n\/* =====================================================\n   \u5de6\u53f3\u7bad\u982d\n===================================================== *\/\n\n.ep-news-arrow {\n\n    position:\n        absolute;\n\n    z-index:\n        10;\n\n    top:\n        50%;\n\n    display:\n        flex;\n\n    align-items:\n        center;\n\n    justify-content:\n        center;\n\n    width:\n        52px;\n\n    height:\n        52px;\n\n    padding:\n        0;\n\n    border:\n        none;\n\n    border-radius:\n        50%;\n\n    background:\n        rgba(\n            255,\n            255,\n            255,\n            .96\n        );\n\n    color:\n        #557d62;\n\n    font-size:\n        36px;\n\n    line-height:\n        1;\n\n    box-shadow:\n\n        0\n        8px\n        28px\n        rgba(\n            0,\n            0,\n            0,\n            .12\n        );\n\n    cursor:\n        pointer;\n\n    transform:\n        translateY(-50%);\n\n    transition:\n        background .25s ease,\n        color .25s ease,\n        transform .25s ease,\n        opacity .25s ease;\n\n}\n\n\n\n.ep-news-prev {\n\n    left:\n        -26px;\n\n}\n\n\n\n.ep-news-next {\n\n    right:\n        -26px;\n\n}\n\n\n\n.ep-news-arrow:hover {\n\n    background:\n        #557d62;\n\n    color:\n        #ffffff;\n\n    transform:\n        translateY(-50%)\n        scale(1.08);\n\n}\n\n\n\n.ep-news-arrow:disabled {\n\n    opacity:\n        .25;\n\n    cursor:\n        default;\n\n    pointer-events:\n        none;\n\n}\n\n\n\n\/* =====================================================\n   \u8f09\u5165 \/ \u7121\u6587\u7ae0 \/ \u932f\u8aa4\n===================================================== *\/\n\n.ep-news-loading,\n.ep-news-empty,\n.ep-news-error {\n\n    flex:\n        0 0 100%;\n\n    margin:\n        0;\n\n    padding:\n        50px 0;\n\n    color:\n        #777777;\n\n    font-size:\n        14px;\n\n    text-align:\n        center;\n\n}\n\n\n\n\/* =====================================================\n   \u624b\u6a5f\u6ed1\u52d5\u63d0\u793a\n===================================================== *\/\n\n.ep-news-swipe-hint {\n\n    display:\n        none;\n\n    align-items:\n        center;\n\n    justify-content:\n        center;\n\n    gap:\n        10px;\n\n    margin-top:\n        2px;\n\n    color:\n        #999999;\n\n    font-size:\n        12px;\n\n    letter-spacing:\n        .05em;\n\n}\n\n\n\n\/* =====================================================\n   TABLET\n===================================================== *\/\n\n@media (max-width: 1024px) {\n\n    .ep-news .ep-container {\n\n        width:\n            calc(100% - 48px);\n\n    }\n\n\n    \/* \u5e73\u677f\u4e00\u6b21\u7d04 2 \u5f35 *\/\n\n    .ep-news-card {\n\n        flex:\n            0 0 calc(\n                (100% - 20px) \/ 2\n            );\n\n    }\n\n\n    .ep-news-slider {\n\n        gap:\n            20px;\n\n    }\n\n\n    .ep-news-prev {\n\n        left:\n            -20px;\n\n    }\n\n\n    .ep-news-next {\n\n        right:\n            -20px;\n\n    }\n\n}\n\n\n\n\/* =====================================================\n   MOBILE\n===================================================== *\/\n\n@media (max-width: 767px) {\n\n    .ep-news {\n\n        padding:\n            75px 0;\n\n    }\n\n\n    \/*\n       \u624b\u6a5f\u8b93\u6ed1\u52d5\u5361\u7247\u53ef\u4ee5\u9760\u8fd1\u87a2\u5e55\u5de6\u53f3\n    *\/\n\n    .ep-news .ep-container {\n\n        width:\n            100%;\n\n    }\n\n\n    .ep-news-title {\n\n        display:\n            flex;\n\n        align-items:\n            flex-end;\n\n        padding:\n            0 18px;\n\n        margin-bottom:\n            30px;\n\n    }\n\n\n    .ep-news-title h2 {\n\n        font-size:\n            36px;\n\n    }\n\n\n    .ep-news-all {\n\n        display:\n            inline-flex;\n\n        align-items:\n            center;\n\n        gap:\n            6px;\n\n        margin:\n            0;\n\n        min-width:\n            0;\n\n        min-height:\n            0;\n\n        padding:\n            0 0 5px;\n\n        border:\n            0;\n\n        border-bottom:\n            1px solid #475B63;\n\n        border-radius:\n            0;\n\n        background:\n            transparent;\n\n        color:\n            #475B63;\n\n        font-size:\n            13px;\n\n        font-weight:\n            500;\n\n        line-height:\n            1.2;\n\n        letter-spacing:\n            0;\n\n        text-decoration:\n            none;\n\n    }\n\n\n    \/* =================================================\n       \u624b\u6a5f\u6ed1\u52d5\u5340\n       \u523b\u610f\u9732\u51fa\u4e0b\u4e00\u5f35\u5361\u7247\n    ================================================= *\/\n\n    .ep-news-slider {\n\n        gap:\n            15px;\n\n        padding:\n\n            5px\n            18px\n            24px;\n\n        scroll-padding-left:\n            18px;\n\n    }\n\n\n    \/*\n       86% \u5bec\n       \u4e00\u6b21\u4e3b\u8981\u770b\u5230\u4e00\u5f35\n       \u540c\u6642\u9732\u51fa\u4e0b\u4e00\u5f35\u4e00\u9ede\u9ede\n    *\/\n\n    .ep-news-card {\n\n        flex:\n            0 0 86%;\n\n    }\n\n\n    .ep-news-content {\n\n        min-height:\n            190px;\n\n        padding:\n            22px;\n\n    }\n\n\n    .ep-news-content h3 {\n\n        font-size:\n            18px;\n\n    }\n\n\n    \/*\n       \u624b\u6a5f\u76f4\u63a5\u4f7f\u7528\u624b\u6307\u6ed1\n       \u96b1\u85cf\u5de6\u53f3\u7bad\u982d\n    *\/\n\n    .ep-news-arrow {\n\n        display:\n            none;\n\n    }\n\n\n    .ep-news-swipe-hint {\n\n        display:\n            flex;\n\n    }\n\n}\n\n\n\n\/* =====================================================\n   \u5c0f\u5c3a\u5bf8\u624b\u6a5f\n===================================================== *\/\n\n@media (max-width: 420px) {\n\n    .ep-news-title {\n\n        padding:\n            0 16px;\n\n    }\n\n\n    .ep-news-title h2 {\n\n        font-size:\n            32px;\n\n    }\n\n\n    .ep-news-slider {\n\n        padding-left:\n            16px;\n\n        padding-right:\n            16px;\n\n        scroll-padding-left:\n            16px;\n\n    }\n\n\n    .ep-news-card {\n\n        flex:\n            0 0 88%;\n\n    }\n\n}\n\n\/* =========================================================\n   SERVICE\n========================================================= *\/\n\n.ep-service {\n\n  padding:\n    100px 0;\n\n\n  background:\n    var(--elite-dark-green);\n\n\n  color:\n    #ffffff;\n\n}\n\n\n\n.ep-service-heading\n.ep-kicker {\n\n  color:\n    var(--elite-light-green);\n\n}\n\n\n\n.ep-service-heading h2 {\n\n  color:\n    #ffffff;\n\n}\n\n\n\n.ep-service-grid {\n\n  display:\n    grid;\n\n\n  grid-template-columns:\n    repeat(4,1fr);\n\n\n  border-top:\n    1px solid\n    rgba(\n      255,\n      255,\n      255,\n      .22\n    );\n\n\n  border-left:\n    1px solid\n    rgba(\n      255,\n      255,\n      255,\n      .22\n    );\n\n}\n\n\n\n.ep-service-item {\n\n  position:\n    relative;\n\n\n  min-height:\n    270px;\n\n\n  padding:\n    32px;\n\n\n  border-right:\n    1px solid\n    rgba(\n      255,\n      255,\n      255,\n      .22\n    );\n\n\n  border-bottom:\n    1px solid\n    rgba(\n      255,\n      255,\n      255,\n      .22\n    );\n\n\n  transition:\n    background\n    .3s\n    ease;\n\n}\n\n\n\n.ep-service-item:hover {\n\n  background:\n    var(--elite-green);\n\n}\n\n\n\n.ep-service-number {\n\n  color:\n    var(--elite-light-green);\n\n\n  font-size:\n    11px;\n\n}\n\n\n\n.ep-service-item h3 {\n\n  margin:\n    48px 0 13px;\n\n\n  color:\n    #ffffff;\n\n\n  font-size:\n    21px;\n\n\n  font-weight:\n    500;\n\n}\n\n\n\n.ep-service-item p {\n\n  max-width:\n    210px;\n\n\n  margin:\n    0;\n\n\n  color:\n    rgba(\n      255,\n      255,\n      255,\n      .7\n    );\n\n\n  font-size:\n    13px;\n\n\n  line-height:\n    1.8;\n\n}\n\n\n\n.ep-service-item i {\n\n  position:\n    absolute;\n\n\n  right:\n    28px;\n\n\n  bottom:\n    28px;\n\n\n  color:\n    #ffffff;\n\n\n  font-style:\n    normal;\n\n}\n\n\n\n\/* =========================================================\n   TABLET\n========================================================= *\/\n\n@media (max-width:1024px) {\n\n\n  .ep-container {\n\n    width:\n      calc(100% - 48px);\n\n  }\n\n\n  .ep-product-grid {\n\n    grid-template-columns:\n      repeat(2,1fr);\n\n  }\n\n\n  .ep-brand-feature,\n  .ep-brand-reverse {\n\n    grid-template-columns:\n      1fr 1fr;\n\n  }\n\n\n  .ep-brand-grid {\n\n    grid-template-columns:\n      repeat(2,minmax(0,1fr));\n\n  }\n\n\n  .ep-service-grid {\n\n    grid-template-columns:\n      repeat(2,minmax(0,1fr));\n\n  }\n\n}\n\n\n\n\/* =========================================================\n   MOBILE\n========================================================= *\/\n\n@media (max-width:767px) {\n\n\n  .ep-container {\n\n    width:\n      calc(100% - 32px);\n\n  }\n\n\n\n  \/* Intro *\/\n\n  .ep-intro {\n\n    padding:\n      80px 0;\n\n  }\n\n\n  .ep-intro-grid {\n\n    display:\n      block;\n\n  }\n\n\n  .ep-intro-grid\n  > .ep-section-number {\n\n    display:\n      block;\n\n\n    margin-bottom:\n      30px;\n\n  }\n\n\n  .ep-intro-content h2 {\n\n    font-size:\n      34px;\n\n  }\n\n\n\n  \/* Products *\/\n\n  .ep-products {\n\n    padding:\n      80px 0;\n\n  }\n\n\n  .ep-product-grid {\n\n    grid-template-columns:\n      1fr;\n\n  }\n\n\n\n  \/* Story *\/\n\n  .ep-story {\n\n    min-height:\n      560px;\n\n  }\n\n\n  .ep-story-bg {\n\n    top:\n      0;\n\n\n    height:\n      100%;\n\n\n    transform:\n      none !important;\n\n  }\n\n\n  .ep-story-content h2 {\n\n    font-size:\n      38px;\n\n  }\n\n\n\n  \/* Brand feature *\/\n\n  .ep-brand-feature,\n  .ep-brand-reverse {\n\n    display:\n      flex;\n\n\n    flex-direction:\n      column;\n\n\n    min-height:\n      0;\n\n  }\n\n\n  .ep-brand-reverse\n  .ep-brand-visual,\n  .ep-brand-reverse\n  .ep-brand-copy {\n\n    order:\n      initial;\n\n  }\n\n\n  .ep-brand-visual {\n\n    min-height:\n      420px;\n\n  }\n\n\n  .ep-brand-visual img {\n\n    top:\n      0;\n\n\n    height:\n      100%;\n\n\n    transform:\n      none !important;\n\n  }\n\n\n  .ep-brand-copy {\n\n    padding:\n      60px 24px;\n\n  }\n\n\n\n  \/* Brands *\/\n\n  .ep-brands {\n\n    padding:\n      80px 0;\n\n  }\n\n\n  .ep-brand-grid {\n\n    grid-template-columns:\n      repeat(2,minmax(0,1fr));\n\n  }\n\n\n  .ep-brand-card {\n\n    min-height:\n      165px;\n\n\n    padding:\n      20px;\n\n  }\n\n\n\n\n\n  \/* Service *\/\n\n  .ep-service {\n\n    padding:\n      75px 0;\n\n  }\n\n\n  .ep-service-grid {\n\n    grid-template-columns:\n      repeat(2,minmax(0,1fr));\n\n  }\n\n}\n\n\n\n\/* =========================================================\n   SMALL MOBILE\n========================================================= *\/\n\n@media (max-width:480px) {\n\n\n  \/* \u7cbe\u9078\u54c1\u724c\uff1a\u5c0f\u87a2\u5e55\u4ecd\u7dad\u6301\u4e00\u884c\u5169\u500b *\/\n  .ep-brand-grid {\n\n    grid-template-columns:\n      repeat(2,minmax(0,1fr));\n\n  }\n\n\n  \/* \u670d\u52d9\u8207\u652f\u63f4\uff1a\u5c0f\u87a2\u5e55\u4ecd\u7dad\u6301\u4e00\u884c\u5169\u500b *\/\n  .ep-service-grid {\n\n    grid-template-columns:\n      repeat(2,minmax(0,1fr));\n\n  }\n\n}\n\n\n\n\/* =========================================================\n   REDUCED MOTION\n========================================================= *\/\n\n@media (prefers-reduced-motion:reduce) {\n\n\n  html {\n\n    scroll-behavior:\n      auto;\n\n  }\n\n\n  html.ep-js-ready\n  .ep-reveal,\n  .ep-story-bg,\n  .ep-parallax-image {\n\n    transition:\n      none !important;\n\n\n    transform:\n      none !important;\n\n  }\n\n}\n<\/style>\n\n<script data-wp-block-html=\"js\">\n(function () {\n\n    \"use strict\";\n\n\n    \/* =====================================================\n       INITIALIZE\n    ====================================================== *\/\n\n    function initEliteHome() {\n\n        document.documentElement\n            .classList\n            .add(\"ep-js-ready\");\n\n\n        initEliteReveal();\n\n        initEliteParallax();\n\n        initEliteMediaHub();\n\n        initEliteLatestNews();\n\n    }\n\n\n\n    \/* =====================================================\n       SCROLL REVEAL\n    ====================================================== *\/\n\n    function initEliteReveal() {\n\n        const items =\n            document.querySelectorAll(\n                \".ep-reveal\"\n            );\n\n\n        if (!items.length) {\n\n            return;\n\n        }\n\n\n\n        if (\n            !(\n                \"IntersectionObserver\"\n                in window\n            )\n        ) {\n\n            items.forEach(\n                function (item) {\n\n                    item.classList.add(\n                        \"ep-visible\"\n                    );\n\n                }\n            );\n\n\n            return;\n\n        }\n\n\n\n        const observer =\n            new IntersectionObserver(\n\n                function (\n                    entries,\n                    observerInstance\n                ) {\n\n                    entries.forEach(\n                        function (entry) {\n\n                            if (\n                                entry.isIntersecting\n                            ) {\n\n                                entry.target\n                                    .classList\n                                    .add(\n                                        \"ep-visible\"\n                                    );\n\n\n                                observerInstance\n                                    .unobserve(\n                                        entry.target\n                                    );\n\n                            }\n\n                        }\n                    );\n\n                },\n\n                {\n\n                    threshold:\n                        0.1,\n\n\n                    rootMargin:\n                        \"0px 0px -40px 0px\"\n\n                }\n\n            );\n\n\n\n        items.forEach(\n            function (item) {\n\n                observer.observe(\n                    item\n                );\n\n            }\n        );\n\n    }\n\n\n\n    \/* =====================================================\n       PARALLAX\n    ====================================================== *\/\n\n    function initEliteParallax() {\n\n        const storyBackgrounds =\n            document.querySelectorAll(\n                \".ep-story-bg\"\n            );\n\n\n        const brandImages =\n            document.querySelectorAll(\n                \".ep-parallax-image\"\n            );\n\n\n        let ticking =\n            false;\n\n\n\n        function updateParallax() {\n\n\n            \/* =================================================\n               \u624b\u6a5f\u95dc\u9589\u8996\u5dee\n            ================================================= *\/\n\n            if (\n                window.innerWidth <=\n                767\n            ) {\n\n                storyBackgrounds.forEach(\n                    function (item) {\n\n                        item.style.transform =\n                            \"none\";\n\n                    }\n                );\n\n\n                brandImages.forEach(\n                    function (item) {\n\n                        item.style.transform =\n                            \"none\";\n\n                    }\n                );\n\n\n                ticking =\n                    false;\n\n\n                return;\n\n            }\n\n\n\n            \/* =================================================\n               \u4e2d\u6bb5\u80cc\u666f\n            ================================================= *\/\n\n            storyBackgrounds.forEach(\n                function (item) {\n\n\n                    const parent =\n                        item.parentElement;\n\n\n                    if (!parent) {\n\n                        return;\n\n                    }\n\n\n                    const rect =\n                        parent.getBoundingClientRect();\n\n\n                    const speed =\n                        parseFloat(\n                            item.dataset.speed\n                        ) || 0.04;\n\n\n                    const viewportCenter =\n                        window.innerHeight \/\n                        2;\n\n\n                    const elementCenter =\n                        rect.top +\n                        rect.height \/\n                        2;\n\n\n                    const distance =\n                        elementCenter -\n                        viewportCenter;\n\n\n                    const move =\n                        distance *\n                        speed *\n                        -1;\n\n\n                    item.style.transform =\n\n                        \"translate3d(0,\" +\n                        move +\n                        \"px,0)\";\n\n                }\n            );\n\n\n\n            \/* =================================================\n               \u54c1\u724c\u5716\u7247\n            ================================================= *\/\n\n            brandImages.forEach(\n                function (item) {\n\n\n                    const parent =\n                        item.parentElement;\n\n\n                    if (!parent) {\n\n                        return;\n\n                    }\n\n\n                    const rect =\n                        parent.getBoundingClientRect();\n\n\n                    const speed =\n                        parseFloat(\n                            item.dataset.speed\n                        ) || 0.04;\n\n\n                    const viewportCenter =\n                        window.innerHeight \/\n                        2;\n\n\n                    const elementCenter =\n                        rect.top +\n                        rect.height \/\n                        2;\n\n\n                    const distance =\n                        elementCenter -\n                        viewportCenter;\n\n\n                    const move =\n                        distance *\n                        speed *\n                        -1;\n\n\n                    item.style.transform =\n\n                        \"translate3d(0,\" +\n                        move +\n                        \"px,0) \" +\n                        \"scale(1.04)\";\n\n                }\n            );\n\n\n            ticking =\n                false;\n\n        }\n\n\n\n        function requestParallax() {\n\n            if (ticking) {\n\n                return;\n\n            }\n\n\n            ticking =\n                true;\n\n\n            window.requestAnimationFrame(\n                updateParallax\n            );\n\n        }\n\n\n\n        window.addEventListener(\n\n            \"scroll\",\n\n            requestParallax,\n\n            {\n                passive:\n                    true\n            }\n\n        );\n\n\n        window.addEventListener(\n\n            \"resize\",\n\n            requestParallax\n\n        );\n\n\n        updateParallax();\n\n    }\n\n\n\n    \/* =====================================================\n       NEWS\uff5c\u6700\u65b0\u6d88\u606f\n\n       WordPress \u5206\u985e ID = 25\n       \u9996\u9801\u986f\u793a\u6700\u65b0 6 \u5247\n       \u684c\u6a5f\u5de6\u53f3\u62d6\u66f3\n       \u624b\u6a5f\u5de6\u53f3\u6ed1\u52d5\n       \u9ede\u64ca\u5361\u7247\u53ef\u6b63\u5e38\u9032\u5165\u6587\u7ae0\n    ====================================================== *\/\n\n    function initEliteLatestNews() {\n\n\n        const newsContainer =\n            document.querySelector(\n                \"#elite-latest-news\"\n            );\n\n\n        if (!newsContainer) {\n\n            return;\n\n        }\n\n\n\n        const newsSection =\n            newsContainer.closest(\n                \".ep-news\"\n            );\n\n\n        const prevButton =\n            newsSection\n\n                ? newsSection.querySelector(\n                    \".ep-news-prev\"\n                )\n\n                : null;\n\n\n        const nextButton =\n            newsSection\n\n                ? newsSection.querySelector(\n                    \".ep-news-next\"\n                )\n\n                : null;\n\n\n\n        \/* =================================================\n           \u8a2d\u5b9a\n        ================================================= *\/\n\n        const categoryID =\n            25;\n\n\n        const postsPerPage =\n            6;\n\n\n\n        \/* =================================================\n           \u6c92\u6709\u7cbe\u9078\u5716\u7247\u6642\u4f7f\u7528\n        ================================================= *\/\n\n        const defaultImage =\n\n            \"http:\/\/elitehousehold.local\/wp-content\/uploads\/2026\/09\/elite.png\";\n\n\n\n        \/* =================================================\n           WordPress Posts API\n        ================================================= *\/\n\n        const postsAPI =\n\n            \"\/wp-json\/wp\/v2\/posts\" +\n\n            \"?categories=\" +\n            categoryID +\n\n            \"&#038;per_page=\" +\n            postsPerPage +\n\n            \"&#038;orderby=date\" +\n\n            \"&#038;order=desc\";\n\n\n\n        \/* =================================================\n           LOAD NEWS\n        ================================================= *\/\n\n        async function loadEliteLatestNews() {\n\n\n            try {\n\n\n                const response =\n                    await fetch(\n\n                        postsAPI,\n\n                        {\n\n                            method:\n                                \"GET\",\n\n\n                            credentials:\n                                \"same-origin\"\n\n                        }\n\n                    );\n\n\n\n                if (!response.ok) {\n\n                    throw new Error(\n\n                        \"\u6587\u7ae0 API \u932f\u8aa4\uff1a\" +\n                        response.status\n\n                    );\n\n                }\n\n\n\n                const posts =\n                    await response.json();\n\n\n\n                newsContainer.innerHTML =\n                    \"\";\n\n\n\n                \/* =================================================\n                   \u6c92\u6709\u6587\u7ae0\n                ================================================= *\/\n\n                if (\n                    !Array.isArray(posts) ||\n                    posts.length === 0\n                ) {\n\n                    newsContainer.innerHTML =\n\n                        '<p class=\"ep-news-empty\">' +\n\n                        '\u76ee\u524d\u5c1a\u7121\u6700\u65b0\u6d88\u606f\u3002' +\n\n                        '<\/p>';\n\n\n                    updateArrowState();\n\n\n                    return;\n\n                }\n\n\n\n                \/* =================================================\n                   \u6700\u65b0 6 \u7bc7\n                ================================================= *\/\n\n                const latestPosts =\n                    posts.slice(\n                        0,\n                        postsPerPage\n                    );\n\n\n\n                \/* =================================================\n                   \u6bcf\u7bc7\u53d6\u5f97\u7cbe\u9078\u5716\u7247\n                ================================================= *\/\n\n                const postsWithImages =\n                    await Promise.all(\n\n                        latestPosts.map(\n\n                            async function (post) {\n\n\n                                const featuredImage =\n                                    await getFeaturedImage(\n\n                                        post.featured_media,\n\n                                        defaultImage\n\n                                    );\n\n\n                                return {\n\n                                    post:\n                                        post,\n\n\n                                    imageURL:\n                                        featuredImage.url,\n\n\n                                    imageAlt:\n                                        featuredImage.alt\n\n                                };\n\n                            }\n\n                        )\n\n                    );\n\n\n\n                \/* =================================================\n                   \u5efa\u7acb\u5361\u7247\n                ================================================= *\/\n\n                postsWithImages.forEach(\n\n                    function (item) {\n\n\n                        const post =\n                            item.post;\n\n\n\n                        \/* =========================================\n                           DATE\n                        ========================================= *\/\n\n                        const postDate =\n                            new Date(\n                                post.date\n                            );\n\n\n                        const year =\n                            postDate.getFullYear();\n\n\n                        const month =\n                            String(\n\n                                postDate.getMonth() +\n                                1\n\n                            ).padStart(\n                                2,\n                                \"0\"\n                            );\n\n\n                        const day =\n                            String(\n\n                                postDate.getDate()\n\n                            ).padStart(\n                                2,\n                                \"0\"\n                            );\n\n\n                        const formattedDate =\n\n                            year +\n                            \".\" +\n                            month +\n                            \".\" +\n                            day;\n\n\n\n                        \/* =========================================\n                           TITLE\n                        ========================================= *\/\n\n                        const titleHTML =\n\n                            post.title &&\n                            post.title.rendered\n\n                                ? post.title.rendered\n\n                                : \"\u6700\u65b0\u6d88\u606f\";\n\n\n                        const plainTitle =\n                            stripNewsHTML(\n                                titleHTML\n                            );\n\n\n\n                        \/* =========================================\n                           LINK\n                           \u4f7f\u7528 WordPress \u771f\u6b63\u6587\u7ae0\u7db2\u5740\n                        ========================================= *\/\n\n                        const postLink =\n\n                            post.link\n\n                                ? post.link\n\n                                : \"#\";\n\n\n\n                        \/* =========================================\n                           IMAGE\n                        ========================================= *\/\n\n                        const imageURL =\n\n                            item.imageURL ||\n\n                            defaultImage;\n\n\n                        const imageAlt =\n\n                            item.imageAlt ||\n\n                            plainTitle;\n\n\n\n                        \/* =========================================\n                           CARD\n                        ========================================= *\/\n\n                        const article =\n                            document.createElement(\n                                \"a\"\n                            );\n\n\n                        article.href =\n                            postLink;\n\n\n                        article.className =\n                            \"ep-news-card\";\n\n\n                        article.setAttribute(\n                            \"draggable\",\n                            \"false\"\n                        );\n\n\n                        article.setAttribute(\n                            \"aria-label\",\n                            plainTitle\n                        );\n\n\n\n                        article.innerHTML = `\n\n                            <div class=\"ep-news-image\">\n\n                                <img\n                                    src=\"${escapeNewsHTML(imageURL)}\"\n                                    alt=\"${escapeNewsHTML(imageAlt)}\"\n                                    loading=\"lazy\"\n                                    decoding=\"async\"\n                                    draggable=\"false\"\n                                >\n\n                            <\/div>\n\n\n                            <div class=\"ep-news-content\">\n\n\n                                <time\n                                    datetime=\"${escapeNewsHTML(post.date)}\"\n                                >\n\n                                    ${formattedDate}\n\n                                <\/time>\n\n\n                                <h3>\n\n                                    ${escapeNewsHTML(plainTitle)}\n\n                                <\/h3>\n\n\n                                <span class=\"ep-news-read-more\">\n\n                                    READ MORE \u2192\n\n                                <\/span>\n\n\n                            <\/div>\n\n                        `;\n\n\n\n                        newsContainer.appendChild(\n                            article\n                        );\n\n                    }\n\n                );\n\n\n\n                \/* =================================================\n                   \u5361\u7247\u5b8c\u6210\u5f8c\u66f4\u65b0\u7bad\u982d\n                ================================================= *\/\n\n                requestAnimationFrame(\n\n                    function () {\n\n                        updateArrowState();\n\n                    }\n\n                );\n\n\n            }\n\n\n            catch (error) {\n\n\n                console.error(\n\n                    \"\u6700\u65b0\u6d88\u606f\u8f09\u5165\u5931\u6557\uff1a\",\n\n                    error\n\n                );\n\n\n                newsContainer.innerHTML =\n\n                    '<p class=\"ep-news-error\">' +\n\n                    '\u6700\u65b0\u6d88\u606f\u66ab\u6642\u7121\u6cd5\u8f09\u5165\u3002' +\n\n                    '<\/p>';\n\n\n                updateArrowState();\n\n            }\n\n        }\n\n\n\n        \/* =================================================\n           FEATURED IMAGE\n        ================================================= *\/\n\n        async function getFeaturedImage(\n            mediaID,\n            fallbackImage\n        ) {\n\n\n            if (\n                !mediaID ||\n                Number(mediaID) ===\n                0\n            ) {\n\n                return {\n\n                    url:\n                        fallbackImage,\n\n\n                    alt:\n                        \"\"\n\n                };\n\n            }\n\n\n\n            try {\n\n\n                const mediaAPI =\n\n                    \"\/wp-json\/wp\/v2\/media\/\" +\n                    mediaID;\n\n\n\n                const response =\n                    await fetch(\n\n                        mediaAPI,\n\n                        {\n\n                            method:\n                                \"GET\",\n\n\n                            credentials:\n                                \"same-origin\"\n\n                        }\n\n                    );\n\n\n\n                if (!response.ok) {\n\n                    throw new Error(\n\n                        \"Media API \u932f\u8aa4\uff1a\" +\n                        response.status\n\n                    );\n\n                }\n\n\n\n                const media =\n                    await response.json();\n\n\n                let imageURL =\n                    \"\";\n\n\n\n                \/* =================================================\n                   \u627e\u9069\u5408\u7684\u5716\u7247\u5c3a\u5bf8\n                ================================================= *\/\n\n                if (\n                    media.media_details &&\n                    media.media_details.sizes\n                ) {\n\n\n                    const sizes =\n                        media.media_details.sizes;\n\n\n\n                    if (\n                        sizes.large &&\n                        sizes.large.source_url\n                    ) {\n\n                        imageURL =\n                            sizes.large.source_url;\n\n                    }\n\n\n                    else if (\n                        sizes.medium_large &&\n                        sizes.medium_large.source_url\n                    ) {\n\n                        imageURL =\n                            sizes.medium_large\n                                .source_url;\n\n                    }\n\n\n                    else if (\n                        sizes.medium &&\n                        sizes.medium.source_url\n                    ) {\n\n                        imageURL =\n                            sizes.medium\n                                .source_url;\n\n                    }\n\n\n                    else if (\n                        sizes.full &&\n                        sizes.full.source_url\n                    ) {\n\n                        imageURL =\n                            sizes.full\n                                .source_url;\n\n                    }\n\n                }\n\n\n\n                \/* =================================================\n                   \u4f7f\u7528\u539f\u59cb\u5716\u7247\n                ================================================= *\/\n\n                if (\n                    !imageURL &&\n                    media.source_url\n                ) {\n\n                    imageURL =\n                        media.source_url;\n\n                }\n\n\n\n                return {\n\n                    url:\n\n                        imageURL ||\n                        fallbackImage,\n\n\n                    alt:\n\n                        media.alt_text ||\n                        \"\"\n\n                };\n\n\n            }\n\n\n            catch (error) {\n\n\n                console.error(\n\n                    \"\u7cbe\u9078\u5716\u7247\u8b80\u53d6\u5931\u6557\uff0cMedia ID\uff1a\",\n\n                    mediaID,\n\n                    error\n\n                );\n\n\n                return {\n\n                    url:\n                        fallbackImage,\n\n\n                    alt:\n                        \"\"\n\n                };\n\n            }\n\n        }\n\n\n\n        \/* =================================================\n           \u6bcf\u6b21\u6ed1\u52d5\u4e00\u5f35\n        ================================================= *\/\n\n        function getScrollAmount() {\n\n\n            const card =\n                newsContainer.querySelector(\n                    \".ep-news-card\"\n                );\n\n\n            if (!card) {\n\n                return newsContainer.clientWidth;\n\n            }\n\n\n\n            const styles =\n                window.getComputedStyle(\n                    newsContainer\n                );\n\n\n            const gap =\n                parseFloat(\n\n                    styles.columnGap ||\n\n                    styles.gap ||\n\n                    \"0\"\n\n                );\n\n\n\n            return (\n\n                card\n                    .getBoundingClientRect()\n                    .width +\n\n                gap\n\n            );\n\n        }\n\n\n\n        \/* =================================================\n           \u7bad\u982d\u72c0\u614b\n        ================================================= *\/\n\n        function updateArrowState() {\n\n\n            if (\n                !prevButton ||\n                !nextButton\n            ) {\n\n                return;\n\n            }\n\n\n\n            const maxScrollLeft =\n\n                newsContainer.scrollWidth -\n\n                newsContainer.clientWidth;\n\n\n\n            prevButton.disabled =\n\n                newsContainer.scrollLeft <=\n                3;\n\n\n\n            nextButton.disabled =\n\n                newsContainer.scrollLeft >=\n                maxScrollLeft -\n                3;\n\n\n\n            if (\n                maxScrollLeft <=\n                3\n            ) {\n\n                prevButton.style.display =\n                    \"none\";\n\n\n                nextButton.style.display =\n                    \"none\";\n\n            }\n\n\n            else {\n\n                prevButton.style.display =\n                    \"\";\n\n\n                nextButton.style.display =\n                    \"\";\n\n            }\n\n        }\n\n\n\n        \/* =================================================\n           \u4e0a\u4e00\u5f35\n        ================================================= *\/\n\n        if (prevButton) {\n\n\n            prevButton.addEventListener(\n\n                \"click\",\n\n                function () {\n\n\n                    newsContainer.scrollBy({\n\n                        left:\n\n                            -getScrollAmount(),\n\n\n                        behavior:\n\n                            \"smooth\"\n\n                    });\n\n                }\n\n            );\n\n        }\n\n\n\n        \/* =================================================\n           \u4e0b\u4e00\u5f35\n        ================================================= *\/\n\n        if (nextButton) {\n\n\n            nextButton.addEventListener(\n\n                \"click\",\n\n                function () {\n\n\n                    newsContainer.scrollBy({\n\n                        left:\n\n                            getScrollAmount(),\n\n\n                        behavior:\n\n                            \"smooth\"\n\n                    });\n\n                }\n\n            );\n\n        }\n\n\n\n        \/* =================================================\n           \u6ed1\u52d5\u6642\u66f4\u65b0\u7bad\u982d\n        ================================================= *\/\n\n        newsContainer.addEventListener(\n\n            \"scroll\",\n\n            updateArrowState,\n\n            {\n\n                passive:\n                    true\n\n            }\n\n        );\n\n\n\n        window.addEventListener(\n\n            \"resize\",\n\n            updateArrowState\n\n        );\n\n\n\n        \/* =================================================\n           \u684c\u6a5f\u6ed1\u9f20\u62d6\u66f3\n           \u4fee\u6b63\u7248\uff1a\n           \u5c0f\u5e45\u79fb\u52d5\u4ecd\u7136\u8996\u70ba\u9ede\u64ca\n           \u8d85\u904e 15px \u624d\u8996\u70ba\u62d6\u66f3\n        ================================================= *\/\n\n        let isDragging =\n            false;\n\n\n        let dragStartX =\n            0;\n\n\n        let dragStartScrollLeft =\n            0;\n\n\n        let hasDragged =\n            false;\n\n\n        const dragThreshold =\n            15;\n\n\n\n        \/* =================================================\n           \u6ed1\u9f20\u6309\u4e0b\n        ================================================= *\/\n\n        newsContainer.addEventListener(\n\n            \"pointerdown\",\n\n            function (event) {\n\n\n                \/* =================================================\n                   \u624b\u6a5f\u76f4\u63a5\u4f7f\u7528\u539f\u751f\u6ed1\u52d5\n                ================================================= *\/\n\n                if (\n                    event.pointerType ===\n                    \"touch\"\n                ) {\n\n                    return;\n\n                }\n\n\n\n                \/* =================================================\n                   \u53ea\u8655\u7406\u6ed1\u9f20\u5de6\u9375\n                ================================================= *\/\n\n                if (\n                    event.button !==\n                    0\n                ) {\n\n                    return;\n\n                }\n\n\n\n                isDragging =\n                    true;\n\n\n                hasDragged =\n                    false;\n\n\n                dragStartX =\n                    event.clientX;\n\n\n                dragStartScrollLeft =\n                    newsContainer.scrollLeft;\n\n            }\n\n        );\n\n\n\n        \/* =================================================\n           \u6ed1\u9f20\u79fb\u52d5\n        ================================================= *\/\n\n        newsContainer.addEventListener(\n\n            \"pointermove\",\n\n            function (event) {\n\n\n                if (!isDragging) {\n\n                    return;\n\n                }\n\n\n\n                const distance =\n\n                    event.clientX -\n\n                    dragStartX;\n\n\n\n                \/* =================================================\n                   \u8d85\u904e 15px \u624d\u771f\u6b63\u958b\u59cb\u62d6\u66f3\n                ================================================= *\/\n\n                if (\n                    Math.abs(distance) >=\n                    dragThreshold\n                ) {\n\n                    hasDragged =\n                        true;\n\n\n                    newsContainer.classList.add(\n                        \"ep-is-dragging\"\n                    );\n\n\n                    newsContainer.scrollLeft =\n\n                        dragStartScrollLeft -\n\n                        distance;\n\n                }\n\n            }\n\n        );\n\n\n\n        \/* =================================================\n           \u505c\u6b62\u62d6\u66f3\n        ================================================= *\/\n\n        function stopDragging() {\n\n\n            if (!isDragging) {\n\n                return;\n\n            }\n\n\n            isDragging =\n                false;\n\n\n            newsContainer.classList.remove(\n                \"ep-is-dragging\"\n            );\n\n        }\n\n\n\n        newsContainer.addEventListener(\n\n            \"pointerup\",\n\n            stopDragging\n\n        );\n\n\n        newsContainer.addEventListener(\n\n            \"pointercancel\",\n\n            stopDragging\n\n        );\n\n\n        newsContainer.addEventListener(\n\n            \"pointerleave\",\n\n            stopDragging\n\n        );\n\n\n\n        \/* =================================================\n           \u9632\u6b62\u771f\u6b63\u62d6\u66f3\u6642\u8aa4\u958b\u6587\u7ae0\n\n           \u666e\u901a\u9ede\u64ca\uff1a\n           \u76f4\u63a5\u9032\u6587\u7ae0\n\n           \u771f\u6b63\u62d6\u66f3\uff1a\n           \u4e0d\u958b\u6587\u7ae0\n        ================================================= *\/\n\n        newsContainer.addEventListener(\n\n            \"click\",\n\n            function (event) {\n\n\n                if (\n                    hasDragged\n                ) {\n\n\n                    event.preventDefault();\n\n\n                    event.stopPropagation();\n\n\n                    hasDragged =\n                        false;\n\n\n                    return;\n\n                }\n\n\n                \/* =================================================\n                   \u6c92\u6709\u62d6\u66f3\n                   \u4e0d\u963b\u6b62 <a href>\n                   \u8b93\u700f\u89bd\u5668\u6b63\u5e38\u9032\u5165\u6587\u7ae0\n                ================================================= *\/\n\n            },\n\n            true\n\n        );\n\n\n\n        \/* =================================================\n           \u9632\u6b62\u5716\u7247\u672c\u8eab\u88ab\u700f\u89bd\u5668\u62d6\u66f3\n        ================================================= *\/\n\n        newsContainer.addEventListener(\n\n            \"dragstart\",\n\n            function (event) {\n\n                event.preventDefault();\n\n            }\n\n        );\n\n\n\n        \/* =================================================\n           \u555f\u52d5\u6700\u65b0\u6d88\u606f\n        ================================================= *\/\n\n        loadEliteLatestNews();\n\n    }\n\n\n\n\n\n\n    \/* =====================================================\n       MEDIA HUB\uff5c\u6700\u65b0\u5f71\u97f3 + \u96fb\u5b50\u66f8\n\n       YouTube \u6700\u65b0\u5f71\u7247\uff1a\n       1. \u4ee5 @eht4289 \u627e\u51fa\u983b\u9053 ID \u8207 uploads \u64ad\u653e\u6e05\u55ae\n       2. \u5f9e uploads \u64ad\u653e\u6e05\u55ae\u6293\u300c\u6700\u65b0\u4e0a\u67b6\u300d\u5f71\u7247\n       3. localStorage \u5feb\u53d6 1 \u5c0f\u6642\uff0c\u6e1b\u5c11 API \u547c\u53eb\n\n       \u91cd\u8981\uff1a\n       \u8acb\u628a YOUTUBE_API_KEY \u8cbc\u5230\u4e0b\u65b9\u8a2d\u5b9a\u3002\n    ====================================================== *\/\n\n    function initEliteMediaHub() {\n\n\n        \/* =================================================\n           YouTube \u8a2d\u5b9a\n        ================================================= *\/\n\n        const YOUTUBE_API_KEY =\n            \"AIzaSyBVv65iQs1zcrIGYkD9FN5xlLIPYAoVWjM\";\n\n\n        const YOUTUBE_HANDLE =\n            \"@eht4289\";\n\n\n        const YOUTUBE_CHANNEL_URL =\n            \"https:\/\/www.youtube.com\/@eht4289\";\n\n\n        const VIDEO_MAX_RESULTS =\n            12;\n\n\n        const CACHE_HOURS =\n            1;\n\n\n        const CACHE_KEY =\n            \"elite_youtube_latest_videos_v5\";\n\n\n\n        \/* =================================================\n           \u5f71\u7247\u5bb9\u5668\n        ================================================= *\/\n\n        const videoContainer =\n            document.querySelector(\n                \"#elite-latest-videos\"\n            );\n\n\n        const videoSection =\n            document.querySelector(\n                \".ep-video-section\"\n            );\n\n\n        const ebookSection =\n            document.querySelector(\n                \".ep-ebook-section\"\n            );\n\n\n        \/* =================================================\n           \u96fb\u5b50\u66f8\u7b2c\u4e8c\u9801\u5716\u7247\n\n           GLEMGAS \u63d0\u4f9b\u7684\u662f WordPress \u5f8c\u53f0 attachment\uff1a\n           upload.php?item=1216\n\n           \u9019\u4e0d\u662f\u53ef\u76f4\u63a5\u653e\u9032 <img src> \u7684\u5716\u7247\u7db2\u5740\uff0c\n           \u56e0\u6b64\u7528 WordPress REST API \u81ea\u52d5\u53d6\u5f97 attachment 1216\n           \u7684 source_url\uff0c\u518d\u5957\u7528\u5230\u7b2c\u4e8c\u9801\u8207\u7ffb\u9801\u80cc\u9762\u3002\n        ================================================= *\/\n\n        resolveEbookSecondPages();\n\n\n\n        \/* =================================================\n           \u555f\u52d5\u5169\u7d44\u5de6\u53f3\u6ed1\u52d5\n        ================================================= *\/\n\n        if (videoSection) {\n\n            initEliteHorizontalSlider(\n                videoSection,\n                \".ep-video-prev\",\n                \".ep-video-next\"\n            );\n\n        }\n\n\n        if (ebookSection) {\n\n            initEliteHorizontalSlider(\n                ebookSection,\n                \".ep-ebook-prev\",\n                \".ep-ebook-next\"\n            );\n\n        }\n\n\n\n        \/* =================================================\n           \u6c92\u6709\u5f71\u7247\u5bb9\u5668\u5c31\u7d50\u675f\n        ================================================= *\/\n\n        if (!videoContainer) {\n\n            return;\n\n        }\n\n\n\n \/* =================================================\n   API Key \u5c1a\u672a\u8a2d\u5b9a\n================================================= *\/\n\nconst normalizedYouTubeAPIKey =\n    String(YOUTUBE_API_KEY || \"\").trim();\n\n\nconst apiKeyIsMissing =\n    !normalizedYouTubeAPIKey ||\n    !normalizedYouTubeAPIKey.startsWith(\"AIza\");\n\n\nif (apiKeyIsMissing) {\n\n    videoContainer.innerHTML = `\n\n        <div class=\"ep-media-error\">\n\n            \u8981\u81ea\u52d5\u6293\u53d6 YouTube\u300c\u6700\u65b0\u4e0a\u67b6\u5f71\u7247\u300d\uff0c\n            \u8acb\u5148\u5728 JS \u7684 YOUTUBE_API_KEY \u8cbc\u4e0a YouTube Data API v3 \u91d1\u9470\u3002\n\n            <a\n                href=\"${escapeMediaHTML(YOUTUBE_CHANNEL_URL)}\"\n                target=\"_blank\"\n                rel=\"noopener noreferrer\"\n            >\n                \u524d\u5f80 YouTube \u983b\u9053\n            <\/a>\n\n        <\/div>\n\n    `;\n\n\n    refreshVideoSlider();\n\n    return;\n\n}\n\n\n\n        \/* =================================================\n           \u8b80\u53d6\u6700\u65b0\u5f71\u7247\n        ================================================= *\/\n\n        loadLatestYouTubeVideos();\n\n\n\n        \/* =================================================\n           LOAD LATEST VIDEOS\n        ================================================= *\/\n\n        async function loadLatestYouTubeVideos() {\n\n\n            try {\n\n\n                const cachedVideos =\n                    readYouTubeCache();\n\n\n                if (\n                    Array.isArray(cachedVideos) &&\n                    cachedVideos.length\n                ) {\n\n                    renderVideos(\n                        cachedVideos\n                    );\n\n                    return;\n\n                }\n\n\n\n                \/* =========================================\n                   1. \u7531 @handle \u53d6\u5f97 uploads \u64ad\u653e\u6e05\u55ae ID\n                ========================================= *\/\n\n                const channelAPI =\n\n                    \"https:\/\/www.googleapis.com\/youtube\/v3\/channels\" +\n                    \"?part=id,contentDetails\" +\n                    \"&forHandle=\" +\n                    encodeURIComponent(YOUTUBE_HANDLE) +\n                    \"&key=\" +\n                    encodeURIComponent(YOUTUBE_API_KEY);\n\n\n                const channelResponse =\n                    await fetch(channelAPI);\n\n\n                const channelData =\n                    await channelResponse.json();\n\n\n                if (!channelResponse.ok) {\n\n                    const apiMessage =\n                        channelData &&\n                        channelData.error &&\n                        channelData.error.message\n                            ? channelData.error.message\n                            : \"HTTP \" + channelResponse.status;\n\n\n                    throw new Error(\n                        \"YouTube Channel API\uff1a\" +\n                        apiMessage\n                    );\n\n                }\n\n\n                if (\n                    !channelData.items ||\n                    !channelData.items.length\n                ) {\n\n                    throw new Error(\n                        \"\u627e\u4e0d\u5230 YouTube \u983b\u9053\uff1a\" +\n                        YOUTUBE_HANDLE\n                    );\n\n                }\n\n\n                const channel =\n                    channelData.items[0];\n\n\n                const uploadsPlaylistID =\n                    channel.contentDetails &&\n                    channel.contentDetails.relatedPlaylists\n                        ? channel.contentDetails.relatedPlaylists.uploads\n                        : \"\";\n\n\n                if (!uploadsPlaylistID) {\n\n                    throw new Error(\n                        \"\u627e\u4e0d\u5230 YouTube uploads \u64ad\u653e\u6e05\u55ae\u3002\"\n                    );\n\n                }\n\n\n\n                \/* =========================================\n                   2. uploads \u64ad\u653e\u6e05\u55ae\u672c\u8eab\u5c31\u662f\u6700\u65b0\u4e0a\u67b6\u9806\u5e8f\n                ========================================= *\/\n\n                const playlistAPI =\n\n                    \"https:\/\/www.googleapis.com\/youtube\/v3\/playlistItems\" +\n                    \"?part=snippet,contentDetails\" +\n                    \"&playlistId=\" +\n                    encodeURIComponent(uploadsPlaylistID) +\n                    \"&maxResults=\" +\n                    VIDEO_MAX_RESULTS +\n                    \"&key=\" +\n                    encodeURIComponent(YOUTUBE_API_KEY);\n\n\n                const playlistResponse =\n                    await fetch(playlistAPI);\n\n\n                const playlistData =\n                    await playlistResponse.json();\n\n\n                if (!playlistResponse.ok) {\n\n                    const apiMessage =\n                        playlistData &&\n                        playlistData.error &&\n                        playlistData.error.message\n                            ? playlistData.error.message\n                            : \"HTTP \" + playlistResponse.status;\n\n\n                    throw new Error(\n                        \"YouTube PlaylistItems API\uff1a\" +\n                        apiMessage\n                    );\n\n                }\n\n\n                const latestVideos =\n                    (playlistData.items || [])\n                        .map(\n                            function (item) {\n\n\n                                const snippet =\n                                    item.snippet || {};\n\n\n                                const rawTitle =\n                                    snippet.title || \"\";\n\n\n                                if (\n                                    rawTitle === \"Deleted video\" ||\n                                    rawTitle === \"Private video\"\n                                ) {\n\n                                    return null;\n\n                                }\n\n\n                                const contentDetails =\n                                    item.contentDetails || {};\n\n\n                                const resourceID =\n                                    snippet.resourceId || {};\n\n\n                                const videoID =\n                                    contentDetails.videoId ||\n                                    resourceID.videoId ||\n                                    \"\";\n\n\n                                const thumbnails =\n                                    snippet.thumbnails || {};\n\n\n                                const thumbnail =\n                                    (thumbnails.maxres && thumbnails.maxres.url) ||\n                                    (thumbnails.standard && thumbnails.standard.url) ||\n                                    (thumbnails.high && thumbnails.high.url) ||\n                                    (thumbnails.medium && thumbnails.medium.url) ||\n                                    (thumbnails.default && thumbnails.default.url) ||\n                                    (\n                                        videoID\n                                            ? \"https:\/\/i.ytimg.com\/vi\/\" +\n                                              encodeURIComponent(videoID) +\n                                              \"\/hqdefault.jpg\"\n                                            : \"\"\n                                    );\n\n\n                                if (!videoID) {\n\n                                    return null;\n\n                                }\n\n\n                                return {\n\n                                    id:\n                                        videoID,\n\n\n                                    title:\n                                        snippet.title ||\n                                        \"\u6700\u65b0\u5f71\u97f3\",\n\n\n                                    thumbnail:\n                                        thumbnail,\n\n\n                                    publishedAt:\n                                        contentDetails.videoPublishedAt ||\n                                        snippet.publishedAt ||\n                                        \"\"\n\n                                };\n\n                            }\n                        )\n                        .filter(Boolean)\n                        .sort(\n                            function (a, b) {\n\n                                return (\n                                    new Date(b.publishedAt).getTime() -\n                                    new Date(a.publishedAt).getTime()\n                                );\n\n                            }\n                        );\n\n\n                if (!latestVideos.length) {\n\n                    throw new Error(\n                        \"\u76ee\u524d\u6c92\u6709\u53ef\u986f\u793a\u7684\u5f71\u7247\u3002\"\n                    );\n\n                }\n\n\n                writeYouTubeCache(\n                    latestVideos\n                );\n\n\n                renderVideos(\n                    latestVideos\n                );\n\n\n            }\n\n\n            catch (error) {\n\n\n                console.error(\n                    \"\u6700\u65b0\u5f71\u97f3\u8f09\u5165\u5931\u6557\uff1a\",\n                    error\n                );\n\n\n                videoContainer.innerHTML = `\n\n                    <div class=\"ep-media-error\">\n\n                        \u6700\u65b0\u5f71\u97f3\u76ee\u524d\u66ab\u6642\u7121\u6cd5\u8f09\u5165\u3002\n\n                        <a\n                            href=\"${escapeMediaHTML(YOUTUBE_CHANNEL_URL)}\"\n                            target=\"_blank\"\n                            rel=\"noopener noreferrer\"\n                        >\n                            \u524d\u5f80 YouTube \u983b\u9053\n                        <\/a>\n\n                    <\/div>\n\n                `;\n\n\n                refreshVideoSlider();\n\n            }\n\n        }\n\n\n\n        \/* =================================================\n           RENDER VIDEOS\n        ================================================= *\/\n\n        function renderVideos(videos) {\n\n\n            if (\n                !Array.isArray(videos) ||\n                !videos.length\n            ) {\n\n                videoContainer.innerHTML =\n                    '<div class=\"ep-media-empty\">\u76ee\u524d\u5c1a\u7121\u6700\u65b0\u5f71\u97f3\u3002<\/div>';\n\n\n                refreshVideoSlider();\n\n                return;\n\n            }\n\n\n            videoContainer.innerHTML =\n                \"\";\n\n\n            videos.forEach(\n\n                function (video) {\n\n\n                    const link =\n                        \"https:\/\/www.youtube.com\/watch?v=\" +\n                        encodeURIComponent(video.id);\n\n\n                    const card =\n                        document.createElement(\n                            \"a\"\n                        );\n\n\n                    card.href =\n                        link;\n\n\n                    card.target =\n                        \"_blank\";\n\n\n                    card.rel =\n                        \"noopener noreferrer\";\n\n\n                    card.className =\n                        \"ep-video-card\";\n\n\n                    card.setAttribute(\n                        \"draggable\",\n                        \"false\"\n                    );\n\n\n                    const formattedDate =\n                        formatYouTubeDate(\n                            video.publishedAt\n                        );\n\n\n                    card.innerHTML = `\n\n                        <div class=\"ep-video-thumb\">\n\n                            <img\n                                src=\"${escapeMediaHTML(video.thumbnail)}\"\n                                alt=\"${escapeMediaHTML(video.title)}\"\n                                loading=\"lazy\"\n                                decoding=\"async\"\n                                draggable=\"false\"\n                            >\n\n                            <span class=\"ep-video-play\" aria-hidden=\"true\"><\/span>\n\n                        <\/div>\n\n\n                        <h3>\n                            ${escapeMediaHTML(video.title)}\n                        <\/h3>\n\n\n                        <time class=\"ep-video-date\" datetime=\"${escapeMediaHTML(video.publishedAt)}\">\n                            ${escapeMediaHTML(formattedDate)}\n                        <\/time>\n\n                    `;\n\n\n                    videoContainer.appendChild(\n                        card\n                    );\n\n                }\n\n            );\n\n\n            refreshVideoSlider();\n\n        }\n\n\n\n        \/* =================================================\n           CACHE\n        ================================================= *\/\n\n        function readYouTubeCache() {\n\n\n            try {\n\n\n                const raw =\n                    localStorage.getItem(\n                        CACHE_KEY\n                    );\n\n\n                if (!raw) {\n\n                    return null;\n\n                }\n\n\n                const cache =\n                    JSON.parse(raw);\n\n\n                if (\n                    !cache ||\n                    !cache.time ||\n                    !Array.isArray(cache.videos)\n                ) {\n\n                    return null;\n\n                }\n\n\n                const age =\n                    Date.now() -\n                    Number(cache.time);\n\n\n                const maxAge =\n                    CACHE_HOURS *\n                    60 *\n                    60 *\n                    1000;\n\n\n                if (age > maxAge) {\n\n                    localStorage.removeItem(\n                        CACHE_KEY\n                    );\n\n                    return null;\n\n                }\n\n\n                return cache.videos;\n\n\n            }\n\n\n            catch (error) {\n\n                return null;\n\n            }\n\n        }\n\n\n        function writeYouTubeCache(videos) {\n\n\n            try {\n\n\n                localStorage.setItem(\n\n                    CACHE_KEY,\n\n                    JSON.stringify({\n\n                        time:\n                            Date.now(),\n\n\n                        videos:\n                            videos\n\n                    })\n\n                );\n\n\n            }\n\n\n            catch (error) {\n\n                \/* localStorage \u4e0d\u53ef\u7528\u6642\u76f4\u63a5\u7565\u904e *\/\n\n            }\n\n        }\n\n\n\n        \/* =================================================\n           FORMAT DATE\n        ================================================= *\/\n\n        function formatYouTubeDate(value) {\n\n\n            if (!value) {\n\n                return \"\";\n\n            }\n\n\n            const date =\n                new Date(value);\n\n\n            if (\n                Number.isNaN(\n                    date.getTime()\n                )\n            ) {\n\n                return \"\";\n\n            }\n\n\n            const year =\n                date.getFullYear();\n\n\n            const month =\n                String(\n                    date.getMonth() + 1\n                ).padStart(2, \"0\");\n\n\n            const day =\n                String(\n                    date.getDate()\n                ).padStart(2, \"0\");\n\n\n            return (\n                year + \".\" +\n                month + \".\" +\n                day\n            );\n\n        }\n\n\n\n        \/* =================================================\n           \u66f4\u65b0\u5f71\u7247\u8f2a\u64ad\u7bad\u982d\n        ================================================= *\/\n\n        function refreshVideoSlider() {\n\n\n            if (!videoSection) {\n\n                return;\n\n            }\n\n\n            const track =\n                videoSection.querySelector(\n                    \".ep-media-track\"\n                );\n\n\n            if (track) {\n\n                track.dispatchEvent(\n                    new Event(\n                        \"ep-slider-refresh\"\n                    )\n                );\n\n            }\n\n        }\n\n\n\n        \/* =================================================\n           RESOLVE WORDPRESS MEDIA IMAGE\n        ================================================= *\/\n\n        async function resolveEbookSecondPages() {\n\n\n            const mediaImages =\n                document.querySelectorAll(\n                    \".ep-ebook-section img[data-wp-media-id]\"\n                );\n\n\n            if (!mediaImages.length) {\n\n                return;\n\n            }\n\n\n            const ids =\n                Array.from(mediaImages)\n                    .map(\n                        function (image) {\n\n                            return image.dataset.wpMediaId;\n\n                        }\n                    )\n                    .filter(Boolean);\n\n\n            const uniqueIDs =\n                Array.from(\n                    new Set(ids)\n                );\n\n\n            await Promise.all(\n\n                uniqueIDs.map(\n\n                    async function (mediaID) {\n\n\n                        try {\n\n\n                            const response =\n                                await fetch(\n                                    \"\/wp-json\/wp\/v2\/media\/\" +\n                                    encodeURIComponent(mediaID),\n                                    {\n                                        method: \"GET\",\n                                        credentials: \"same-origin\"\n                                    }\n                                );\n\n\n                            if (!response.ok) {\n\n                                throw new Error(\n                                    \"WordPress Media API\uff1a\" +\n                                    response.status\n                                );\n\n                            }\n\n\n                            const media =\n                                await response.json();\n\n\n                            const imageURL =\n                                media && media.source_url\n                                    ? media.source_url\n                                    : \"\";\n\n\n                            if (!imageURL) {\n\n                                throw new Error(\n                                    \"Attachment \" +\n                                    mediaID +\n                                    \" \u6c92\u6709 source_url\"\n                                );\n\n                            }\n\n\n                            mediaImages.forEach(\n\n                                function (image) {\n\n                                    if (\n                                        image.dataset.wpMediaId ===\n                                        String(mediaID)\n                                    ) {\n\n                                        image.src =\n                                            imageURL;\n\n                                        image.removeAttribute(\n                                            \"data-wp-media-id\"\n                                        );\n\n                                    }\n\n                                }\n\n                            );\n\n\n                        }\n\n\n                        catch (error) {\n\n                            console.error(\n                                \"\u96fb\u5b50\u66f8\u7b2c\u4e8c\u9801\u5716\u7247\u8b80\u53d6\u5931\u6557\uff0cMedia ID\uff1a\",\n                                mediaID,\n                                error\n                            );\n\n                        }\n\n                    }\n\n                )\n\n            );\n\n        }\n\n\n\n        \/* =================================================\n           ESCAPE HTML\n        ================================================= *\/\n\n        function escapeMediaHTML(text) {\n\n\n            return String(\n                text || \"\"\n            )\n                .replace(\/&\/g, \"&amp;\")\n                .replace(\/<\/g, \"&lt;\")\n                .replace(\/>\/g, \"&gt;\")\n                .replace(\/\"\/g, \"&quot;\")\n                .replace(\/'\/g, \"&#039;\");\n\n        }\n\n    }\n\n\n\n    \/* =====================================================\n       GENERIC HORIZONTAL SLIDER\n       \u684c\u6a5f\uff1a\u5de6\u53f3\u7bad\u982d + \u6ed1\u9f20\u62d6\u66f3\n       \u624b\u6a5f\uff1a\u539f\u751f\u5de6\u53f3\u6ed1\u52d5\n    ====================================================== *\/\n\n    function initEliteHorizontalSlider(\n        section,\n        prevSelector,\n        nextSelector\n    ) {\n\n\n        const track =\n            section.querySelector(\n                \".ep-media-track\"\n            );\n\n\n        const prevButton =\n            section.querySelector(\n                prevSelector\n            );\n\n\n        const nextButton =\n            section.querySelector(\n                nextSelector\n            );\n\n\n        if (!track) {\n\n            return;\n\n        }\n\n\n\n        \/* =================================================\n           \u6bcf\u6b21\u79fb\u52d5\u4e00\u5f35\n        ================================================= *\/\n\n        function getScrollAmount() {\n\n\n            const firstCard =\n                track.querySelector(\n                    \".ep-video-card, .ep-ebook-card\"\n                );\n\n\n            if (!firstCard) {\n\n                return track.clientWidth;\n\n            }\n\n\n            const styles =\n                window.getComputedStyle(\n                    track\n                );\n\n\n            const gap =\n                parseFloat(\n                    styles.columnGap ||\n                    styles.gap ||\n                    \"0\"\n                );\n\n\n            return (\n                firstCard\n                    .getBoundingClientRect()\n                    .width +\n                gap\n            );\n\n        }\n\n\n\n        \/* =================================================\n           \u7bad\u982d\u72c0\u614b\n        ================================================= *\/\n\n        function updateArrowState() {\n\n\n            if (\n                !prevButton ||\n                !nextButton\n            ) {\n\n                return;\n\n            }\n\n\n            const maxScrollLeft =\n                track.scrollWidth -\n                track.clientWidth;\n\n\n            prevButton.disabled =\n                track.scrollLeft <= 3;\n\n\n            nextButton.disabled =\n                track.scrollLeft >=\n                maxScrollLeft - 3;\n\n\n            if (maxScrollLeft <= 3) {\n\n                prevButton.style.display =\n                    \"none\";\n\n                nextButton.style.display =\n                    \"none\";\n\n            }\n\n            else {\n\n                prevButton.style.display =\n                    \"\";\n\n                nextButton.style.display =\n                    \"\";\n\n            }\n\n        }\n\n\n\n        \/* =================================================\n           PREV \/ NEXT\n        ================================================= *\/\n\n        if (prevButton) {\n\n            prevButton.addEventListener(\n\n                \"click\",\n\n                function () {\n\n                    track.scrollBy({\n\n                        left:\n                            -getScrollAmount(),\n\n                        behavior:\n                            \"smooth\"\n\n                    });\n\n                }\n\n            );\n\n        }\n\n\n        if (nextButton) {\n\n            nextButton.addEventListener(\n\n                \"click\",\n\n                function () {\n\n                    track.scrollBy({\n\n                        left:\n                            getScrollAmount(),\n\n                        behavior:\n                            \"smooth\"\n\n                    });\n\n                }\n\n            );\n\n        }\n\n\n\n        \/* =================================================\n           SCROLL \/ RESIZE \/ REFRESH\n        ================================================= *\/\n\n        track.addEventListener(\n            \"scroll\",\n            updateArrowState,\n            { passive: true }\n        );\n\n\n        track.addEventListener(\n            \"ep-slider-refresh\",\n            updateArrowState\n        );\n\n\n        window.addEventListener(\n            \"resize\",\n            updateArrowState\n        );\n\n\n\n        \/* =================================================\n           \u684c\u6a5f\u62d6\u66f3\n        ================================================= *\/\n\n        let isDragging =\n            false;\n\n        let hasDragged =\n            false;\n\n        let startX =\n            0;\n\n        let startScrollLeft =\n            0;\n\n        const dragThreshold =\n            12;\n\n\n        track.addEventListener(\n\n            \"pointerdown\",\n\n            function (event) {\n\n\n                if (\n                    event.pointerType ===\n                    \"touch\"\n                ) {\n\n                    return;\n\n                }\n\n\n                if (event.button !== 0) {\n\n                    return;\n\n                }\n\n\n                isDragging =\n                    true;\n\n\n                hasDragged =\n                    false;\n\n\n                startX =\n                    event.clientX;\n\n\n                startScrollLeft =\n                    track.scrollLeft;\n\n            }\n\n        );\n\n\n        track.addEventListener(\n\n            \"pointermove\",\n\n            function (event) {\n\n\n                if (!isDragging) {\n\n                    return;\n\n                }\n\n\n                const distance =\n                    event.clientX -\n                    startX;\n\n\n                if (\n                    Math.abs(distance) >=\n                    dragThreshold\n                ) {\n\n                    hasDragged =\n                        true;\n\n\n                    track.classList.add(\n                        \"ep-is-dragging\"\n                    );\n\n\n                    track.scrollLeft =\n                        startScrollLeft -\n                        distance;\n\n                }\n\n            }\n\n        );\n\n\n        function stopDragging() {\n\n\n            if (!isDragging) {\n\n                return;\n\n            }\n\n\n            isDragging =\n                false;\n\n\n            track.classList.remove(\n                \"ep-is-dragging\"\n            );\n\n        }\n\n\n        track.addEventListener(\n            \"pointerup\",\n            stopDragging\n        );\n\n\n        track.addEventListener(\n            \"pointercancel\",\n            stopDragging\n        );\n\n\n        track.addEventListener(\n            \"pointerleave\",\n            stopDragging\n        );\n\n\n\n        \/* =================================================\n           \u62d6\u66f3\u5f8c\u4e0d\u8981\u8aa4\u958b\u9023\u7d50\n        ================================================= *\/\n\n        track.addEventListener(\n\n            \"click\",\n\n            function (event) {\n\n\n                if (hasDragged) {\n\n                    event.preventDefault();\n                    event.stopPropagation();\n\n                    hasDragged =\n                        false;\n\n                }\n\n            },\n\n            true\n\n        );\n\n\n        track.addEventListener(\n\n            \"dragstart\",\n\n            function (event) {\n\n                event.preventDefault();\n\n            }\n\n        );\n\n\n        requestAnimationFrame(\n            updateArrowState\n        );\n\n    }\n\n\n    \/* =====================================================\n       REMOVE HTML\n    ====================================================== *\/\n\n    function stripNewsHTML(text) {\n\n\n        const temp =\n            document.createElement(\n                \"div\"\n            );\n\n\n        temp.innerHTML =\n            text || \"\";\n\n\n        return (\n\n            temp.textContent ||\n\n            temp.innerText ||\n\n            \"\"\n\n        );\n\n    }\n\n\n\n    \/* =====================================================\n       ESCAPE HTML\n    ====================================================== *\/\n\n    function escapeNewsHTML(text) {\n\n\n        return String(\n            text || \"\"\n        )\n\n            .replace(\n                \/&\/g,\n                \"&amp;\"\n            )\n\n            .replace(\n                \/<\/g,\n                \"&lt;\"\n            )\n\n            .replace(\n                \/>\/g,\n                \"&gt;\"\n            )\n\n            .replace(\n                \/\"\/g,\n                \"&quot;\"\n            )\n\n            .replace(\n                \/'\/g,\n                \"&#039;\"\n            );\n\n    }\n\n\n\n    \/* =====================================================\n       START\n    ====================================================== *\/\n\n    if (\n        document.readyState ===\n        \"loading\"\n    ) {\n\n\n        document.addEventListener(\n\n            \"DOMContentLoaded\",\n\n            initEliteHome\n\n        );\n\n    }\n\n\n    else {\n\n\n        initEliteHome();\n\n    }\n\n\n})();\n<\/script>\n\n<div class=\"elite-parallax-home\">\n\n\n  <!-- =====================================================\n       ABOUT\uff5c\u95dc\u65bc\u5275\u532f\u5bb6\u5c45\n  ====================================================== -->\n\n  <section class=\"ep-intro\" id=\"about\">\n\n    <div class=\"ep-container\">\n\n      <div class=\"ep-intro-grid\">\n\n\n        <div class=\"ep-section-number ep-reveal\">\n          01\n        <\/div>\n\n\n        <div class=\"ep-intro-content ep-reveal\">\n\n          <span class=\"ep-kicker ep-green\">\n            ELITE HOUSEHOLD\n          <\/span>\n\n\n          <h2>\n            \u5eda\u623f\u4e0d\u53ea\u662f\u6599\u7406\u7684\u5730\u65b9\uff0c<br>\n            \u66f4\u662f\u751f\u6d3b\u767c\u751f\u7684\u5730\u65b9\u3002\n          <\/h2>\n\n\n          <p>\n            \u5275\u532f\u5bb6\u5c45\u79d1\u6280\u5c08\u6ce8\u65bc\u5eda\u623f\u5bb6\u96fb\u3001\n            \u98f2\u6c34\u8a2d\u5099\u8207\u5eda\u623f\u7a7a\u9593\u76f8\u95dc\u7522\u54c1\uff0c\n            \u5c07\u8a2d\u8a08\u3001\u7f8e\u5b78\u8207\u5be6\u7528\u6a5f\u80fd\u5e36\u5165\u65e5\u5e38\u751f\u6d3b\u3002\n          <\/p>\n\n\n          <a href=\"\/about\/\" class=\"ep-text-link\">\n\n            \u95dc\u65bc\u5275\u532f\u5bb6\u5c45\n\n            <span>\u2192<\/span>\n\n          <\/a>\n\n        <\/div>\n\n\n      <\/div>\n\n    <\/div>\n\n  <\/section>\n\n\n\n  <!-- =====================================================\n       PRODUCTS\uff5c\u63a2\u7d22\u5eda\u623f\u751f\u6d3b\n  ====================================================== -->\n\n  <section class=\"ep-products\" id=\"products\">\n\n    <div class=\"ep-container\">\n\n\n      <header class=\"ep-section-heading ep-reveal\">\n\n        <span class=\"ep-kicker ep-green\">\n          PRODUCTS\n        <\/span>\n\n\n        <h2>\n          \u63a2\u7d22\u5eda\u623f\u751f\u6d3b\n        <\/h2>\n\n\n        <p>\n          \u5f9e\u6599\u7406\u3001\u6e05\u6f54\u3001\u98f2\u6c34\u5230\u5eda\u623f\u6c34\u69fd\uff0c\n          \u627e\u5230\u9069\u5408\u4e0d\u540c\u751f\u6d3b\u65b9\u5f0f\u7684\u8a2d\u5099\u3002\n        <\/p>\n\n      <\/header>\n\n\n\n      <div class=\"ep-product-grid\">\n\n\n        <!-- 01 \u6d17\u7897\u6a5f -->\n\n        <a href=\"http:\/\/elitehousehold.local\/product-category\/all\/glemgas-kitchen-appliances\/dishwasher\/\" class=\"ep-product-card ep-reveal\" target=\"_blank\" rel=\"noopener\">\n\n          <div class=\"ep-product-image\">\n\n            <img decoding=\"async\" src=\"http:\/\/elitehousehold.local\/wp-content\/uploads\/2026\/08\/\u7522\u54c1\u5206\u985e\u5716-\u6d17\u7897\u6a5f.jpg\" alt=\"\u6d17\u7897\u6a5f\">\n\n          <\/div>\n\n\n          <div class=\"ep-product-info\">\n\n            <span>01<\/span>\n\n            <h3>\n              \u6d17\u7897\u6a5f\n            <\/h3>\n\n            <i>\u2192<\/i>\n\n          <\/div>\n\n        <\/a>\n\n\n\n        <!-- 02 \u70e4\u7bb1\u2027\u84b8\u70e4\u7bb1\u2027\u5fae\u6ce2\u70e4\u7bb1\u2027\u5fae\u6ce2\u84b8\u70e4\u7bb1 -->\n\n        <a href=\"http:\/\/elitehousehold.local\/product-category\/all\/glemgas-kitchen-appliances\/oven-steam-oven-microwave-combi-oven\/\" class=\"ep-product-card ep-reveal\" target=\"_blank\" rel=\"noopener\">\n\n          <div class=\"ep-product-image\">\n\n            <img decoding=\"async\" src=\"http:\/\/elitehousehold.local\/wp-content\/uploads\/2026\/08\/\u7522\u54c1\u5206\u985e\u5716-\u70e4\u7bb1.jpg\" alt=\"\u70e4\u7bb1\u8207\u84b8\u70e4\u7bb1\">\n\n          <\/div>\n\n\n          <div class=\"ep-product-info\">\n\n            <span>02<\/span>\n\n            <h3>\n              \u70e4\u7bb1\u2027\u84b8\u70e4\u7bb1\u2027\u5fae\u6ce2\u70e4\u7bb1\u2027\u5fae\u6ce2\u84b8\u70e4\u7bb1\n            <\/h3>\n\n            <i>\u2192<\/i>\n\n          <\/div>\n\n        <\/a>\n\n\n\n        <!-- 03 \u611f\u61c9\u7210 -->\n\n        <a href=\"http:\/\/elitehousehold.local\/product-category\/all\/glemgas-kitchen-appliances\/induction-cooktop\/\" class=\"ep-product-card ep-reveal\" target=\"_blank\" rel=\"noopener\">\n\n          <div class=\"ep-product-image\">\n\n            <img decoding=\"async\" src=\"http:\/\/elitehousehold.local\/wp-content\/uploads\/2026\/08\/\u7522\u54c1\u5206\u985e\u5716-\u611f\u61c9\u7210.jpg\" alt=\"\u611f\u61c9\u7210\">\n\n          <\/div>\n\n\n          <div class=\"ep-product-info\">\n\n            <span>03<\/span>\n\n            <h3>\n              \u611f\u61c9\u7210\n            <\/h3>\n\n            <i>\u2192<\/i>\n\n          <\/div>\n\n        <\/a>\n\n\n\n        <!-- 04 \u6392\u6cb9\u7159\u6a5f -->\n\n        <a href=\"http:\/\/elitehousehold.local\/product-category\/all\/glemgas-kitchen-appliances\/range-hood\/\" class=\"ep-product-card ep-reveal\" target=\"_blank\" rel=\"noopener\">\n\n          <div class=\"ep-product-image\">\n\n            <img decoding=\"async\" src=\"http:\/\/elitehousehold.local\/wp-content\/uploads\/2026\/08\/\u7522\u54c1\u5206\u985e\u5716-\u6392\u6cb9\u7159\u6a5f.jpg\" alt=\"\u6392\u6cb9\u7159\u6a5f\">\n\n          <\/div>\n\n\n          <div class=\"ep-product-info\">\n\n            <span>04<\/span>\n\n            <h3>\n              \u6392\u6cb9\u7159\u6a5f\n            <\/h3>\n\n            <i>\u2192<\/i>\n\n          <\/div>\n\n        <\/a>\n\n\n\n        <!-- 05 GROHE -->\n\n        <a href=\"http:\/\/elitehousehold.local\/product-category\/all\/grohe-water-filter-showcase\/\" class=\"ep-product-card ep-reveal\" target=\"_blank\" rel=\"noopener\">\n\n          <div class=\"ep-product-image\">\n\n            <img decoding=\"async\" src=\"http:\/\/elitehousehold.local\/wp-content\/uploads\/2026\/08\/\u7522\u54c1\u5206\u985e\u5716-\u6de8\u6c34.\u6c23\u6ce1\u6c34\u6a5f.jpg\" alt=\"\u6de8\u6c34\u8207\u6c23\u6ce1\u6c34\">\n\n          <\/div>\n\n\n          <div class=\"ep-product-info\">\n\n            <span>05<\/span>\n\n            <h3>\n              \u6de8\u6c34\u5668\u30fb\u6c23\u6ce1\u6c34\u6a5f\n            <\/h3>\n\n            <i>\u2192<\/i>\n\n          <\/div>\n\n        <\/a>\n\n\n\n        <!-- 06 \u6c34\u69fd -->\n\n        <a href=\"http:\/\/elitehousehold.local\/product-category\/kitchen-sinks\/\" class=\"ep-product-card ep-reveal\" target=\"_blank\" rel=\"noopener\">\n\n          <div class=\"ep-product-image\">\n\n            <img decoding=\"async\" src=\"http:\/\/elitehousehold.local\/wp-content\/uploads\/2026\/08\/\u7522\u54c1\u5206\u985e\u5716-\u6c34\u69fd02.jpg\" alt=\"\u5eda\u623f\u6c34\u69fd\">\n\n          <\/div>\n\n\n          <div class=\"ep-product-info\">\n\n            <span>06<\/span>\n\n            <h3>\n              \u5eda\u623f\u6c34\u69fd\n            <\/h3>\n\n            <i>\u2192<\/i>\n\n          <\/div>\n\n        <\/a>\n\n\n      <\/div>\n\n    <\/div>\n\n  <\/section>\n\n\n\n  <!-- =====================================================\n       PARALLAX\uff5c\u8996\u5dee\u60c5\u5883\u5716\n  ====================================================== -->\n\n  <section class=\"ep-story\">\n\n    <div class=\"ep-story-bg\" data-speed=\"0.06\" style=\"background-image:url('http:\/\/elitehousehold.local\/wp-content\/uploads\/2026\/08\/\u4e2d\u6bb5\u8996\u5dee\u5927\u5716-\u8b93\u8a2d\u5099\u878d\u5165\u7a7a\u9593\uff0c-\u8b93\u79d1\u6280\u878d\u5165\u65e5\u5e38\u3002.jpg');\">\n    <\/div>\n\n\n    <div class=\"ep-story-overlay\"><\/div>\n\n\n    <div class=\"ep-container ep-story-content\">\n\n      <span class=\"ep-kicker ep-reveal\">\n        DESIGN YOUR LIFE\n      <\/span>\n\n\n      <h2 class=\"ep-reveal\">\n        \u8b93\u8a2d\u5099\u878d\u5165\u7a7a\u9593\uff0c<br>\n        \u8b93\u79d1\u6280\u878d\u5165\u65e5\u5e38\u3002\n      <\/h2>\n\n\n      <p class=\"ep-reveal\">\n        \u597d\u7684\u5eda\u623f\u8a2d\u5099\uff0c\n        \u4e0d\u53ea\u662f\u529f\u80fd\u66f4\u5f37\uff0c\n        \u800c\u662f\u8b93\u6bcf\u4e00\u6b21\u4f7f\u7528\u90fd\u66f4\u52a0\u81ea\u7136\u3002\n      <\/p>\n\n    <\/div>\n\n  <\/section>\n\n\n\n  <!-- =====================================================\n       GLEM GAS\n  ====================================================== -->\n\n  <section class=\"ep-brand-feature\">\n\n\n    <div class=\"ep-brand-visual\">\n\n      <img decoding=\"async\" src=\"http:\/\/elitehousehold.local\/wp-content\/uploads\/2026\/08\/GLEM-GAS-\u60c5\u5883\u5716.png\" alt=\"GLEM GAS \u7fa9\u5927\u5229\u7cbe\u54c1\u5eda\u96fb\" class=\"ep-parallax-image\" data-speed=\"0.04\">\n\n    <\/div>\n\n\n\n    <div class=\"ep-brand-copy\">\n\n      <div class=\"ep-brand-inner ep-reveal\">\n\n\n        <span class=\"ep-section-number\">\n          02\n        <\/span>\n\n\n        <span class=\"ep-kicker ep-green\">\n          GLEM GAS\n        <\/span>\n\n\n        <h2>\n          \u7fa9\u5f0f\u8a2d\u8a08\uff0c<br>\n          \u70ba\u5eda\u623f\u5e36\u4f86\u66f4\u591a\u53ef\u80fd\u3002\n        <\/h2>\n\n\n        <p>\n          \u8d85\u904e 60 \u5e74\u6b77\u53f2\u7684\u7fa9\u5927\u5229\u5eda\u96fb\u54c1\u724c\uff0c\n          \u5c07\u8a2d\u8a08\u7f8e\u5b78\u3001\u70f9\u8abf\u79d1\u6280\u8207\u5be6\u7528\u6a5f\u80fd\n          \u878d\u5165\u73fe\u4ee3\u5eda\u623f\u3002\n        <\/p>\n\n\n        <a href=\"http:\/\/elitehousehold.local\/product-category\/all\/glemgas-kitchen-appliances\/\" class=\"ep-btn ep-btn-dark\" target=\"_blank\" rel=\"noopener\">\n\n          \u63a2\u7d22 GLEM GAS\n\n        <\/a>\n\n\n      <\/div>\n\n    <\/div>\n\n  <\/section>\n\n\n\n  <!-- =====================================================\n       GROHE BLUE\n  ====================================================== -->\n\n  <section class=\"ep-brand-feature ep-brand-reverse\">\n\n\n    <div class=\"ep-brand-visual\">\n\n      <img decoding=\"async\" src=\"http:\/\/elitehousehold.local\/wp-content\/uploads\/2026\/08\/GROHE-Blue-\u60c5\u5883\u5716.png\" alt=\"GROHE Blue \u6c23\u6ce1\u6c34\u8207\u6de8\u6c34\u8a2d\u5099\" class=\"ep-parallax-image\" data-speed=\"0.04\">\n\n    <\/div>\n\n\n\n    <div class=\"ep-brand-copy\">\n\n      <div class=\"ep-brand-inner ep-reveal\">\n\n\n        <span class=\"ep-section-number\">\n          03\n        <\/span>\n\n\n        <span class=\"ep-kicker ep-green\">\n          GROHE BLUE\n        <\/span>\n\n\n        <h2>\n          \u4e00\u676f\u597d\u6c34\uff0c<br>\n          \u91cd\u65b0\u5b9a\u7fa9\u65e5\u5e38\u3002\n        <\/h2>\n\n\n        <p>\n          \u5f9e\u7d14\u6de8\u98f2\u6c34\u5230\u6c81\u6dbc\u6c23\u6ce1\u6c34\uff0c\n          \u8b93\u5eda\u623f\u4e0d\u53ea\u662f\u6599\u7406\u7a7a\u9593\uff0c\n          \u66f4\u6210\u70ba\u6bcf\u5929\u4eab\u53d7\u751f\u6d3b\u7684\u5730\u65b9\u3002\n        <\/p>\n\n\n        <a href=\"http:\/\/elitehousehold.local\/product-category\/all\/grohe-water-filter-showcase\/\" class=\"ep-btn ep-btn-dark\" target=\"_blank\" rel=\"noopener\">\n\n          \u63a2\u7d22 GROHE Blue\n\n        <\/a>\n\n\n      <\/div>\n\n    <\/div>\n\n  <\/section>\n\n\n\n  <!-- =====================================================\n       OUR BRANDS\uff5c\u7cbe\u9078\u54c1\u724c\n  ====================================================== -->\n\n  <section class=\"ep-brands\" id=\"brands\">\n\n    <div class=\"ep-container\">\n\n\n      <header class=\"ep-section-heading ep-reveal\">\n\n        <span class=\"ep-kicker ep-green\">\n          OUR BRANDS\n        <\/span>\n\n        <h2>\n          \u7cbe\u9078\u54c1\u724c\n        <\/h2>\n\n      <\/header>\n\n\n\n      <div class=\"ep-brand-grid\">\n\n\n        <!-- GLEM GAS -->\n\n        <a href=\"http:\/\/elitehousehold.local\/product-category\/all\/glemgas-kitchen-appliances\/\" class=\"ep-brand-card ep-reveal\" target=\"_blank\" rel=\"noopener\">\n\n          <img decoding=\"async\" src=\"http:\/\/elitehousehold.local\/wp-content\/uploads\/2026\/09\/GLEMGAS.png\" alt=\"GLEM GAS\">\n\n          <span>\n            \u7fa9\u5927\u5229\u7cbe\u54c1\u5eda\u96fb\n          <\/span>\n\n        <\/a>\n\n\n\n        <!-- GROHE -->\n\n        <a href=\"http:\/\/elitehousehold.local\/product-category\/all\/grohe-water-filter-showcase\/\" class=\"ep-brand-card ep-reveal\" target=\"_blank\" rel=\"noopener\">\n\n          <img decoding=\"async\" src=\"http:\/\/elitehousehold.local\/wp-content\/uploads\/2026\/09\/Grohe.png\" alt=\"GROHE\">\n\n          <span>\n            \u6de8\u6c34\u5668\u30fb\u6c23\u6ce1\u6c34\u6a5f\n          <\/span>\n\n        <\/a>\n\n\n\n        <!-- BEKJO -->\n\n        <a href=\"http:\/\/elitehousehold.local\/product-category\/all\/bekjo-sink\/\" class=\"ep-brand-card ep-reveal\" target=\"_blank\" rel=\"noopener\">\n\n          <img decoding=\"async\" src=\"http:\/\/elitehousehold.local\/wp-content\/uploads\/2026\/09\/Bekjo.png\" alt=\"BEKJO\">\n\n          <span>\n            \u97d3\u570b\u5eda\u623f\u6c34\u69fd\n          <\/span>\n\n        <\/a>\n\n\n\n        <!-- SUNWAVE -->\n\n        <a href=\"http:\/\/elitehousehold.local\/product-category\/all\/sunwave-kitchen-sink\/\" class=\"ep-brand-card ep-reveal\" target=\"_blank\" rel=\"noopener\">\n\n          <img decoding=\"async\" src=\"http:\/\/elitehousehold.local\/wp-content\/uploads\/2026\/09\/Lixil.png\" alt=\"SUNWAVE\">\n\n          <span>\n            \u65e5\u672c\u5eda\u623f\u6c34\u69fd\n          <\/span>\n\n        <\/a>\n\n\n\n        <!-- ELITE -->\n\n        <a href=\"http:\/\/elitehousehold.local\/product-category\/elite-small-appliances\/\" class=\"ep-brand-card ep-reveal\" target=\"_blank\" rel=\"noopener\">\n\n          <img decoding=\"async\" src=\"http:\/\/elitehousehold.local\/wp-content\/uploads\/2026\/09\/elite.png\" alt=\"ELITE\">\n\n          <span>\n            \u5c0f\u5bb6\u96fb\n          <\/span>\n\n        <\/a>\n\n\n      <\/div>\n\n    <\/div>\n\n  <\/section>\n\n\n  <!-- =====================================================\n       MEDIA HUB\uff5c\u6700\u65b0\u5f71\u97f3\n   \n  ====================================================== -->\n\n  <section class=\"ep-media-hub\" id=\"media-hub\">\n\n\n    <!-- ===================================================\n         VIDEO\uff5c\u6700\u65b0\u5f71\u97f3\n       \n    ==================================================== -->\n\n    <div class=\"ep-media-section ep-video-section\">\n\n      <div class=\"ep-container\">\n\n\n        <div class=\"ep-media-heading ep-reveal\">\n\n          <div class=\"ep-media-heading-title\">\n\n            <span class=\"ep-news-kicker\">\n              VIDEO\n            <\/span>\n\n            <h2>\n              \u6700\u65b0\u5f71\u97f3\n            <\/h2>\n\n          <\/div>\n\n\n          <div class=\"ep-media-actions\">\n\n            <div class=\"ep-media-arrows\" aria-label=\"\u6700\u65b0\u5f71\u97f3\u8f2a\u64ad\u63a7\u5236\">\n\n              <button type=\"button\" class=\"ep-media-arrow ep-video-prev\" aria-label=\"\u4e0a\u4e00\u652f\u6700\u65b0\u5f71\u97f3\">\n                \u2039\n              <\/button>\n\n              <button type=\"button\" class=\"ep-media-arrow ep-video-next\" aria-label=\"\u4e0b\u4e00\u652f\u6700\u65b0\u5f71\u97f3\">\n                \u203a\n              <\/button>\n\n            <\/div>\n\n\n            <a href=\"https:\/\/www.youtube.com\/@eht4289\" class=\"ep-media-more\" target=\"_blank\" rel=\"noopener noreferrer\">\n              more\n            <\/a>\n\n          <\/div>\n\n        <\/div>\n\n\n        <div class=\"ep-media-slider ep-video-slider\">\n\n          <div class=\"ep-media-track\" id=\"elite-latest-videos\">\n\n            <div class=\"ep-media-loading\">\n              \u6700\u65b0\u5f71\u97f3\u8f09\u5165\u4e2d...\n            <\/div>\n\n          <\/div>\n\n        <\/div>\n\n\n        <div class=\"ep-media-swipe-hint\">\n          <span>\u2190<\/span>\n          \u5de6\u53f3\u6ed1\u52d5\u67e5\u770b\u66f4\u591a\n          <span>\u2192<\/span>\n        <\/div>\n\n      <\/div>\n\n    <\/div>\n\n\n\n    <!-- ===================================================\n         EBOOK\uff5c\u96fb\u5b50\u66f8\n         \u82f1\u6587\u6a19\u984c\u683c\u5f0f\u6bd4\u7167 NEWS\uff5c\u6700\u65b0\u6d88\u606f\n    ==================================================== -->\n\n    <div class=\"ep-media-section ep-ebook-section\">\n\n      <div class=\"ep-container\">\n\n\n        <div class=\"ep-media-heading ep-reveal\">\n\n          <div class=\"ep-media-heading-title\">\n\n            <span class=\"ep-news-kicker\">\n              EBOOK\n            <\/span>\n\n            <h2>\n              \u96fb\u5b50\u66f8\n            <\/h2>\n\n          <\/div>\n\n\n          <div class=\"ep-media-actions\">\n\n            <div class=\"ep-media-arrows\" aria-label=\"\u96fb\u5b50\u66f8\u8f2a\u64ad\u63a7\u5236\">\n\n              <button type=\"button\" class=\"ep-media-arrow ep-ebook-prev\" aria-label=\"\u4e0a\u4e00\u518a\u96fb\u5b50\u66f8\">\n                \u2039\n              <\/button>\n\n              <button type=\"button\" class=\"ep-media-arrow ep-ebook-next\" aria-label=\"\u4e0b\u4e00\u518a\u96fb\u5b50\u66f8\">\n                \u203a\n              <\/button>\n\n            <\/div>\n\n\n            <a href=\"http:\/\/elitehousehold.local\/catalog-2026-2027\/\" class=\"ep-media-more ep-media-more-text\" target=\"_blank\" rel=\"noopener\">\n              \u67e5\u770b\u5168\u90e8 \u2192\n            <\/a>\n\n          <\/div>\n\n        <\/div>\n\n\n        <div class=\"ep-media-slider ep-ebook-slider\">\n\n          <div class=\"ep-media-track\">\n\n\n            <!-- =================================================\n                 \u6574\u672c\u578b\u9304\n            ================================================== -->\n\n            <a href=\"https:\/\/drive.google.com\/file\/d\/1tF3sYoDmlYeZPEbhF579Rv7jOXsn6lXV\/view\" class=\"ep-ebook-card ep-reveal\" target=\"_blank\" rel=\"noopener noreferrer\">\n\n              <div class=\"ep-ebook-book\">\n\n                <!-- \u7ffb\u958b\u5f8c\u771f\u6b63\u986f\u793a\u7684\u7b2c\u4e8c\u9801 -->\n                <div class=\"ep-ebook-page2\" aria-hidden=\"true\">\n                  <img src=\"http:\/\/elitehousehold.local\/wp-content\/uploads\/2026\/09\/2026-2027\u76ee\u93042.jpg\" alt=\"\" loading=\"lazy\" decoding=\"async\">\n                <\/div>\n\n                <!-- \u5c01\u9762\u5de6\u534a -->\n                <div class=\"ep-ebook-cover-left\" aria-hidden=\"true\">\n                  <img src=\"http:\/\/elitehousehold.local\/wp-content\/uploads\/2026\/08\/2026-2027\u578b\u9304\u5c01\u9762-ol-scaled.jpg\" alt=\"\" loading=\"lazy\" decoding=\"async\">\n                <\/div>\n\n                <!-- \u5c01\u9762\u53f3\u534a\uff1a\u771f\u6b63\u7ffb\u9801 -->\n                <div class=\"ep-ebook-turn-page\" aria-hidden=\"true\">\n\n                  <div class=\"ep-ebook-turn-front\">\n                    <img src=\"http:\/\/elitehousehold.local\/wp-content\/uploads\/2026\/08\/2026-2027\u578b\u9304\u5c01\u9762-ol-scaled.jpg\" alt=\"\" loading=\"lazy\" decoding=\"async\">\n                  <\/div>\n\n                  <div class=\"ep-ebook-turn-back\">\n                    <img src=\"http:\/\/elitehousehold.local\/wp-content\/uploads\/2026\/09\/2026-2027\u76ee\u93042.jpg\" alt=\"\" loading=\"lazy\" decoding=\"async\">\n                  <\/div>\n\n                <\/div>\n\n              <\/div>\n\n              <h3>\u6574\u672c\u578b\u9304<\/h3>\n              <p>2026\u20132027 \u7522\u54c1\u5b8c\u6574\u578b\u9304<\/p>\n\n            <\/a>\n\n\n\n            <!-- =================================================\n                 GLEMGAS \u96fb\u5668\n                 \u7b2c\u4e8c\u9801 attachment ID = 1216\n                 JS \u6703\u900f\u904e WordPress REST API \u81ea\u52d5\u53d6\u5f97\u771f\u6b63\u5716\u7247\u7db2\u5740\n            ================================================== -->\n\n            <a href=\"https:\/\/drive.google.com\/file\/d\/10iIBsWNuuRBvuH_BJSKbEsrxhGmqYedG\/view\" class=\"ep-ebook-card ep-reveal\" target=\"_blank\" rel=\"noopener noreferrer\">\n\n              <div class=\"ep-ebook-book\">\n\n                <div class=\"ep-ebook-page2\" aria-hidden=\"true\">\n                  <img src=\"http:\/\/elitehousehold.local\/wp-content\/uploads\/2026\/08\/2026-2027\u578b\u9304\u5c01\u9762-ol-scaled.jpg\" data-wp-media-id=\"1216\" alt=\"\" loading=\"lazy\" decoding=\"async\">\n                <\/div>\n\n                <div class=\"ep-ebook-cover-left\" aria-hidden=\"true\">\n                  <img src=\"http:\/\/elitehousehold.local\/wp-content\/uploads\/2026\/08\/2026-2027\u578b\u9304\u5c01\u9762-ol-scaled.jpg\" alt=\"\" loading=\"lazy\" decoding=\"async\">\n                <\/div>\n\n                <div class=\"ep-ebook-turn-page\" aria-hidden=\"true\">\n\n                  <div class=\"ep-ebook-turn-front\">\n                    <img src=\"http:\/\/elitehousehold.local\/wp-content\/uploads\/2026\/08\/2026-2027\u578b\u9304\u5c01\u9762-ol-scaled.jpg\" alt=\"\" loading=\"lazy\" decoding=\"async\">\n                  <\/div>\n\n                  <div class=\"ep-ebook-turn-back\">\n                    <img src=\"http:\/\/elitehousehold.local\/wp-content\/uploads\/2026\/08\/2026-2027\u578b\u9304\u5c01\u9762-ol-scaled.jpg\" data-wp-media-id=\"1216\" alt=\"\" loading=\"lazy\" decoding=\"async\">\n                  <\/div>\n\n                <\/div>\n\n              <\/div>\n\n              <h3>GLEMGAS\u96fb\u5668<\/h3>\n              <p>\u7fa9\u5927\u5229\u7cbe\u54c1\u5eda\u96fb\u7cfb\u5217<\/p>\n\n            <\/a>\n\n\n\n            <!-- =================================================\n                 \u5fb7\u570b GROHE \u6c23\u6ce1\u6c34\u6a5f\n            ================================================== -->\n\n            <a href=\"https:\/\/drive.google.com\/file\/d\/1sGYKro1waRaLbmLtHYqxE7MmBYuiGA_9\/view\" class=\"ep-ebook-card ep-reveal\" target=\"_blank\" rel=\"noopener noreferrer\">\n\n              <div class=\"ep-ebook-book\">\n\n                <div class=\"ep-ebook-page2\" aria-hidden=\"true\">\n                  <img src=\"http:\/\/elitehousehold.local\/wp-content\/uploads\/2026\/09\/2026-2027\u76ee\u930435.jpg\" alt=\"\" loading=\"lazy\" decoding=\"async\">\n                <\/div>\n\n                <div class=\"ep-ebook-cover-left\" aria-hidden=\"true\">\n                  <img src=\"http:\/\/elitehousehold.local\/wp-content\/uploads\/2026\/08\/2026-2027\u76ee\u930434-scaled.jpg\" alt=\"\" loading=\"lazy\" decoding=\"async\">\n                <\/div>\n\n                <div class=\"ep-ebook-turn-page\" aria-hidden=\"true\">\n\n                  <div class=\"ep-ebook-turn-front\">\n                    <img src=\"http:\/\/elitehousehold.local\/wp-content\/uploads\/2026\/08\/2026-2027\u76ee\u930434-scaled.jpg\" alt=\"\" loading=\"lazy\" decoding=\"async\">\n                  <\/div>\n\n                  <div class=\"ep-ebook-turn-back\">\n                    <img src=\"http:\/\/elitehousehold.local\/wp-content\/uploads\/2026\/09\/2026-2027\u76ee\u930435.jpg\" alt=\"\" loading=\"lazy\" decoding=\"async\">\n                  <\/div>\n\n                <\/div>\n\n              <\/div>\n\n              <h3>\u5fb7\u570bGROHE\u6c23\u6ce1\u6c34\u6a5f<\/h3>\n              <p>\u6de8\u6c34\u30fb\u6c23\u6ce1\u6c34\u7cfb\u7d71<\/p>\n\n            <\/a>\n\n\n\n            <!-- =================================================\n                 SUNWAVE \u65e5\u672c\u6c34\u69fd\n            ================================================== -->\n\n            <a href=\"https:\/\/drive.google.com\/file\/d\/1KE7TmkiD1PCzNDLbgWTnwdp9grbjvWt6\/view\" class=\"ep-ebook-card ep-reveal\" target=\"_blank\" rel=\"noopener noreferrer\">\n\n              <div class=\"ep-ebook-book\">\n\n                <div class=\"ep-ebook-page2\" aria-hidden=\"true\">\n                  <img src=\"http:\/\/elitehousehold.local\/wp-content\/uploads\/2026\/09\/2026-2027\u76ee\u930443.jpg\" alt=\"\" loading=\"lazy\" decoding=\"async\">\n                <\/div>\n\n                <div class=\"ep-ebook-cover-left\" aria-hidden=\"true\">\n                  <img src=\"http:\/\/elitehousehold.local\/wp-content\/uploads\/2026\/08\/2026-2027\u76ee\u930442-scaled.jpg\" alt=\"\" loading=\"lazy\" decoding=\"async\">\n                <\/div>\n\n                <div class=\"ep-ebook-turn-page\" aria-hidden=\"true\">\n\n                  <div class=\"ep-ebook-turn-front\">\n                    <img src=\"http:\/\/elitehousehold.local\/wp-content\/uploads\/2026\/08\/2026-2027\u76ee\u930442-scaled.jpg\" alt=\"\" loading=\"lazy\" decoding=\"async\">\n                  <\/div>\n\n                  <div class=\"ep-ebook-turn-back\">\n                    <img src=\"http:\/\/elitehousehold.local\/wp-content\/uploads\/2026\/09\/2026-2027\u76ee\u930443.jpg\" alt=\"\" loading=\"lazy\" decoding=\"async\">\n                  <\/div>\n\n                <\/div>\n\n              <\/div>\n\n              <h3>sunwave\u65e5\u672c\u6c34\u69fd<\/h3>\n              <p>\u65e5\u672c\u5eda\u623f\u6c34\u69fd\u7cfb\u5217<\/p>\n\n            <\/a>\n\n\n\n            <!-- =================================================\n                 BEKJO \u97d3\u570b\u6c34\u69fd\n            ================================================== -->\n\n            <a href=\"https:\/\/drive.google.com\/file\/d\/1EmM-e_c3_fZYqBGUl8Jg9zjq-4KQIvvC\/view\" class=\"ep-ebook-card ep-reveal\" target=\"_blank\" rel=\"noopener noreferrer\">\n\n              <div class=\"ep-ebook-book\">\n\n                <div class=\"ep-ebook-page2\" aria-hidden=\"true\">\n                  <img src=\"http:\/\/elitehousehold.local\/wp-content\/uploads\/2026\/09\/2026-2027\u76ee\u930446.jpg\" alt=\"\" loading=\"lazy\" decoding=\"async\">\n                <\/div>\n\n                <div class=\"ep-ebook-cover-left\" aria-hidden=\"true\">\n                  <img src=\"http:\/\/elitehousehold.local\/wp-content\/uploads\/2026\/08\/2026-2027\u76ee\u930445-scaled.jpg\" alt=\"\" loading=\"lazy\" decoding=\"async\">\n                <\/div>\n\n                <div class=\"ep-ebook-turn-page\" aria-hidden=\"true\">\n\n                  <div class=\"ep-ebook-turn-front\">\n                    <img src=\"http:\/\/elitehousehold.local\/wp-content\/uploads\/2026\/08\/2026-2027\u76ee\u930445-scaled.jpg\" alt=\"\" loading=\"lazy\" decoding=\"async\">\n                  <\/div>\n\n                  <div class=\"ep-ebook-turn-back\">\n                    <img src=\"http:\/\/elitehousehold.local\/wp-content\/uploads\/2026\/09\/2026-2027\u76ee\u930446.jpg\" alt=\"\" loading=\"lazy\" decoding=\"async\">\n                  <\/div>\n\n                <\/div>\n\n              <\/div>\n\n              <h3>Bekjo\u97d3\u570b\u6c34\u69fd<\/h3>\n              <p>\u97d3\u570b\u5eda\u623f\u6c34\u69fd\u7cfb\u5217<\/p>\n\n            <\/a>\n\n\n          <\/div>\n\n        <\/div>\n\n\n        <div class=\"ep-media-swipe-hint\">\n          <span>\u2190<\/span>\n          \u5de6\u53f3\u6ed1\u52d5\u67e5\u770b\u66f4\u591a\n          <span>\u2192<\/span>\n        <\/div>\n\n      <\/div>\n\n    <\/div>\n\n  <\/section>\n\n\n <!-- =====================================================\n     NEWS\uff5c\u6700\u65b0\u6d88\u606f\n     WordPress \u5206\u985e ID = 25\n     \u9996\u9801\u986f\u793a\u6700\u65b0 6 \u5247\n     \u5de6\u53f3\u6ed1\u52d5\u5361\u7247\n===================================================== -->\n\n<section class=\"ep-news\" id=\"news\">\n\n    <div class=\"ep-container\">\n\n\n        <!-- =================================================\n             \u6a19\u984c\u5340\n        ================================================== -->\n\n        <div class=\"ep-news-title\">\n\n            <div>\n\n                <span class=\"ep-news-kicker\">\n                    NEWS\n                <\/span>\n\n                <h2>\n                    \u6700\u65b0\u6d88\u606f\n                <\/h2>\n\n            <\/div>\n\n\n            <a href=\"\/category\/news\/\" class=\"ep-news-all\">\n\n                \u67e5\u770b\u5168\u90e8\n\n                <span>\u2192<\/span>\n\n            <\/a>\n\n        <\/div>\n\n\n\n        <!-- =================================================\n             \u6700\u65b0\u6d88\u606f\u8f2a\u64ad\n        ================================================== -->\n\n        <div class=\"ep-news-slider-wrap\">\n\n\n            <!-- \u4e0a\u4e00\u5247 -->\n\n            <button type=\"button\" class=\"ep-news-arrow ep-news-prev\" aria-label=\"\u4e0a\u4e00\u5247\u6700\u65b0\u6d88\u606f\">\n                \u2039\n            <\/button>\n\n\n\n            <!-- \u6700\u65b0\u6d88\u606f\u5361\u7247 -->\n\n            <div class=\"ep-news-slider\" id=\"elite-latest-news\">\n\n                <p class=\"ep-news-loading\">\n                    \u6700\u65b0\u6d88\u606f\u8f09\u5165\u4e2d...\n                <\/p>\n\n            <\/div>\n\n\n\n            <!-- \u4e0b\u4e00\u5247 -->\n\n            <button type=\"button\" class=\"ep-news-arrow ep-news-next\" aria-label=\"\u4e0b\u4e00\u5247\u6700\u65b0\u6d88\u606f\">\n                \u203a\n            <\/button>\n\n\n        <\/div>\n\n\n\n        <!-- =================================================\n             \u624b\u6a5f\u63d0\u793a\n        ================================================== -->\n\n        <div class=\"ep-news-swipe-hint\">\n\n            <span>\u2190<\/span>\n\n            \u5de6\u53f3\u6ed1\u52d5\u67e5\u770b\u66f4\u591a\n\n            <span>\u2192<\/span>\n\n        <\/div>\n\n\n    <\/div>\n\n<\/section>\n\n\n  <!-- =====================================================\n       SERVICE\uff5c\u670d\u52d9\u8207\u652f\u63f4\n  ====================================================== -->\n\n  <section class=\"ep-service\" id=\"service\">\n\n    <div class=\"ep-container\">\n\n\n      <header class=\"ep-section-heading ep-service-heading ep-reveal\">\n\n        <span class=\"ep-kicker\">\n          SERVICE\n        <\/span>\n\n\n        <h2>\n          \u670d\u52d9\u8207\u652f\u63f4\n        <\/h2>\n\n      <\/header>\n\n\n\n      <div class=\"ep-service-grid\">\n\n\n        <!-- 01 -->\n\n        <a href=\"\/downloads\/\" class=\"ep-service-item ep-reveal\">\n\n          <span class=\"ep-service-number\">\n            01\n          <\/span>\n\n          <h3>\n            \u6a94\u6848\u4e0b\u8f09\n          <\/h3>\n\n          <p>\n            \u578b\u9304\u3001\u4f7f\u7528\u8aaa\u660e\u66f8\u53ca\u76f8\u95dc\u7522\u54c1\u8cc7\u6599\u3002\n          <\/p>\n\n          <i>\u2192<\/i>\n\n        <\/a>\n\n\n\n        <!-- 02 -->\n\n        <a href=\"\/showroom\/\" class=\"ep-service-item ep-reveal\">\n\n          <span class=\"ep-service-number\">\n            02\n          <\/span>\n\n          <h3>\n            \u5c55\u793a\u4e2d\u5fc3\n          <\/h3>\n\n          <p>\n            \u67e5\u770b\u5317\u90e8\u3001\u4e2d\u90e8\u8207\u9ad8\u96c4\u5c55\u793a\u4e2d\u5fc3\u8cc7\u8a0a\u3002\n          <\/p>\n\n          <i>\u2192<\/i>\n\n        <\/a>\n\n\n\n        <!-- 03 -->\n\n        <a href=\"\/warranty\/\" class=\"ep-service-item ep-reveal\">\n\n          <span class=\"ep-service-number\">\n            03\n          <\/span>\n\n          <h3>\n            \u4fdd\u56fa\u670d\u52d9\n          <\/h3>\n\n          <p>\n            \u67e5\u770b\u7522\u54c1\u4fdd\u56fa\u689d\u6b3e\u8207\u552e\u5f8c\u670d\u52d9\u76f8\u95dc\u8cc7\u8a0a\u3002\n          <\/p>\n\n          <i>\u2192<\/i>\n\n        <\/a>\n\n\n\n        <!-- 04 -->\n\n        <a href=\"\/contact\/\" class=\"ep-service-item ep-reveal\">\n\n          <span class=\"ep-service-number\">\n            04\n          <\/span>\n\n          <h3>\n            \u806f\u7d61\u6211\u5011\n          <\/h3>\n\n          <p>\n            \u7522\u54c1\u8aee\u8a62\u3001\u5831\u4fee\u8207\u5176\u4ed6\u670d\u52d9\u9700\u6c42\u3002\n          <\/p>\n\n          <i>\u2192<\/i>\n\n        <\/a>\n\n\n      <\/div>\n\n    <\/div>\n\n  <\/section>\n\n\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u2039 \u203a 01 ELITE HOUSEHOLD \u5eda\u623f\u4e0d\u53ea\u662f\u6599\u7406\u7684\u5730\u65b9\uff0c \u66f4\u662f\u751f\u6d3b\u767c\u751f\u7684\u5730\u65b9\u3002 \u5275\u532f\u5bb6\u5c45\u79d1\u6280\u5c08\u6ce8\u65bc&#8230;<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_uag_custom_page_level_css":"","_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"fullwidth","_kad_post_sidebar_id":"","_kad_post_content_style":"unboxed","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"class_list":["post-206","page","type-page","status-publish","hentry"],"acf":[],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false,"trp-custom-language-flag":false,"woocommerce_thumbnail":false,"woocommerce_single":false,"woocommerce_gallery_thumbnail":false},"uagb_author_info":{"display_name":"glemgasadmin","author_link":"https:\/\/www.elite-household.com\/en\/author\/glemgasadmin\/"},"uagb_comment_info":0,"uagb_excerpt":"\u2039 \u203a 01 ELITE HOUSEHOLD \u5eda\u623f\u4e0d\u53ea\u662f\u6599\u7406\u7684\u5730\u65b9\uff0c \u66f4\u662f\u751f\u6d3b\u767c\u751f\u7684\u5730\u65b9\u3002 \u5275\u532f\u5bb6\u5c45\u79d1\u6280\u5c08\u6ce8\u65bc&hellip;","_links":{"self":[{"href":"https:\/\/www.elite-household.com\/en\/wp-json\/wp\/v2\/pages\/206","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.elite-household.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.elite-household.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.elite-household.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.elite-household.com\/en\/wp-json\/wp\/v2\/comments?post=206"}],"version-history":[{"count":98,"href":"https:\/\/www.elite-household.com\/en\/wp-json\/wp\/v2\/pages\/206\/revisions"}],"predecessor-version":[{"id":2306,"href":"https:\/\/www.elite-household.com\/en\/wp-json\/wp\/v2\/pages\/206\/revisions\/2306"}],"wp:attachment":[{"href":"https:\/\/www.elite-household.com\/en\/wp-json\/wp\/v2\/media?parent=206"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}