{"product_id":"sensor-test","title":"Sense+ Motion Control \/ Hand Control \/ Door Control","description":"\u003cdiv\u003e\n\u003clink type=\"image\/x-icon\" rel=\"icon\" href=\"https:\/\/static.gl-inet.com\/www\/images\/favicon.ico\"\u003e \u003clink href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/tiny-slider\/2.9.4\/tiny-slider.css\" rel=\"stylesheet\"\u003e \u003clink href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/animate.css\/4.1.1\/animate.min.css\" rel=\"stylesheet\"\u003e \u003clink href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.5.1\/css\/all.min.css\" rel=\"stylesheet\"\u003e \u003clink href=\"\/plugins\/photoswipe\/photoswipe.min.css?v={{%20$buildTimestamp%20}}\" type=\"text\/css\" rel=\"stylesheet\"\u003e \u003clink href=\"https:\/\/cdn.jsdelivr.net\/gh\/orestbida\/cookieconsent@3.0.1\/dist\/cookieconsent.css\" rel=\"stylesheet\"\u003e \u003clink href=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@4.5.3\/dist\/css\/bootstrap.min.css\" rel=\"stylesheet\"\u003e \u003cscript crossorigin=\"anonymous\" src=\"https:\/\/kit.fontawesome.com\/a08887d4ee.js\"\u003e\u003c\/script\u003e \u003cscript src=\"https:\/\/cdn.jsdelivr.net\/npm\/jquery@3.5.1\/dist\/jquery.min.js\"\u003e\u003c\/script\u003e \u003cscript src=\"https:\/\/cdn.jsdelivr.net\/npm\/popper.js@1.16.1\/dist\/umd\/popper.min.js\"\u003e\u003c\/script\u003e \u003cscript src=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@4.5.3\/dist\/js\/bootstrap.min.js\"\u003e\u003c\/script\u003e \u003cscript defer src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/gsap\/3.11.4\/gsap.min.js\"\u003e\u003c\/script\u003e \u003cscript defer src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/gsap\/3.11.4\/ScrollTrigger.min.js\"\u003e\u003c\/script\u003e\n\u003c\/div\u003e\n\u003cmain class=\"spl-main-container\"\u003e\u003c!-- Use Anywhere in Your Home --\u003e\n\u003csection class=\"horizontal-scroll p-0 text-light product-nav-section\" id=\"scenarios\"\u003e\n\u003cdiv class=\"sticky-control\"\u003e\n\u003cdiv class=\"container\"\u003e\n\u003cdiv class=\"bg-control\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv class=\"content-control\"\u003e\n\u003cdiv class=\"sticky-content\"\u003e\n\u003cdiv class=\"col-12 col-lg-10 text-center text-white m-auto\"\u003e\n\u003ch2 class=\"font-weight-bold\"\u003eUse Anywhere in Your Home\u003c\/h2\u003e\n\u003cp\u003ePair Sense+ LED Lights with Motion, Hand, or Door Sensor Control to brighten every corner of your home.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"horizontal-scroll-wrapper py-0 py-lg-4\"\u003e\n\u003cdiv class=\"figure-list\"\u003e\n\u003cfigure\u003e\n\u003cdiv class=\"order-1 pb-3\"\u003e\u003cimg class=\"img-fluid gl-rounded\" src=\"https:\/\/static.gl-inet.com\/www\/images\/campaign\/lafaer-spl-series\/scene_bathroom.jpg\" alt=\"Lafaer Sense+ Motion control in bath room for smart, auto lighting\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"order-2\"\u003e\n\u003ch4 class=\"font-weight-bold\"\u003eLight the Way At Night\u003c\/h4\u003e\n\u003cp\u003eWalk in and the light turns on instantly―perfect for midnight bathroom trips.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/figure\u003e\n\u003cfigure\u003e\n\u003cdiv class=\"order-1 pb-3\"\u003e\u003cimg class=\"img-fluid gl-rounded\" src=\"https:\/\/static.gl-inet.com\/www\/images\/campaign\/lafaer-spl-series\/scene_bedroom-hc.jpg\" alt=\"Lafaer Sense+ Hand Control near bedside for easier room light\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"order-2\"\u003e\n\u003ch4 class=\"font-weight-bold\"\u003eWave to Control Your Lights\u003c\/h4\u003e\n\u003cp\u003eTurn lights on or off with a simple wave. Ideal for bedtime reading, with an optional delay so the lights switch off after you fall asleep.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/figure\u003e\n\u003cfigure\u003e\n\u003cdiv class=\"order-1 pb-3\"\u003e\u003cimg class=\"img-fluid gl-rounded\" src=\"https:\/\/static.gl-inet.com\/www\/images\/campaign\/lafaer-spl-series\/scene_shoe-cabinets.jpg\" alt=\"Lafaer Sense+ Door Control on show cabinets for auto light on when door open\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"order-2\"\u003e\n\u003ch4 class=\"font-weight-bold\"\u003eSmart Lighting Inside Cabinets\u003c\/h4\u003e\n\u003cp\u003eLights turn on when the door opens and off when it closes.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/figure\u003e\n\u003cfigure\u003e\n\u003cdiv class=\"order-1 pb-3\"\u003e\u003cimg class=\"img-fluid\" src=\"https:\/\/static.gl-inet.com\/www\/images\/campaign\/lafaer-spl-series\/scene_bedroom-mc.jpg\" alt=\"Lafaer Sense+ Motion Control by bedside for smart home lighting solution\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"order-2\"\u003e\n\u003ch4 class=\"font-weight-bold\"\u003eSafe Guidance for the Elderly\u003c\/h4\u003e\n\u003cp\u003eInstalled by the bed, the light activates as you step out, giving gentle illumination for safe movement at night.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/figure\u003e\n\u003cfigure\u003e\n\u003cdiv class=\"order-1 pb-3\"\u003e\u003cimg class=\"img-fluid gl-rounded\" src=\"https:\/\/static.gl-inet.com\/www\/images\/campaign\/lafaer-spl-series\/scene_hallway.jpg\" alt=\"Lafaer Sense+ Motion Control in the hallway for automatic lighting\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"order-2\"\u003e\n\u003ch4 class=\"font-weight-bold\"\u003eAutomatic Lighting When You Walk Through\u003c\/h4\u003e\n\u003cp\u003eConnect multiple lights for seamless hallway coverage. Sensors detect movement from either end and shut off automatically to save energy.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/figure\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c!-- Compare --\u003e\n\u003csection class=\"p-4 py-lg-5\"\u003e\n\u003cdiv class=\"container scene-tab-custom\"\u003e\n\u003cdiv class=\"row justify-content-center\"\u003e\n\u003cdiv class=\"tab-pane show fade\" id=\"lafaer-sensor\" role=\"tabpanel\" aria-labelledby=\"lafaer-sensor-tab\"\u003e\n\u003cdiv class=\"row align-items-center justify-content-center\"\u003e\n\u003cdiv class=\"col-12\" style=\"overflow: auto;\"\u003e\n\u003ctable class=\"table table-bordered text-center\"\u003e\n\u003cthead class=\"thead-light\"\u003e\n\u003ctr\u003e\n\u003cth scope=\"col\"\u003e\u003c\/th\u003e\n\u003cth scope=\"col\"\u003eMotion Control\u003c\/th\u003e\n\u003cth scope=\"col\"\u003eHand Control\u003c\/th\u003e\n\u003cth scope=\"col\"\u003eDoor Control\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth scope=\"row\"\u003e\u003c\/th\u003e\n\u003ctd\u003e\u003cimg class=\"img-fluid w-50\" src=\"https:\/\/static.gl-inet.com\/www\/images\/campaign\/lafaer-spl-series\/product_motion-control.png\" alt=\"Senes+ Motion Control\"\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003cimg class=\"img-fluid w-50\" src=\"https:\/\/static.gl-inet.com\/www\/images\/campaign\/lafaer-spl-series\/product_hand-control.png\" alt=\"Sense+ Hand Control\"\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003cimg class=\"img-fluid w-50\" src=\"https:\/\/static.gl-inet.com\/www\/images\/campaign\/lafaer-spl-series\/product_door-control.png\" alt=\"Sense+ Door Control\"\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth scope=\"row\" style=\"width: 100px;\"\u003eDetecting Range:\u003c\/th\u003e\n\u003ctd\u003e300-500cm \/ 180inch\u003c\/td\u003e\n\u003ctd\u003e5-6cm \/ 2inch\u003c\/td\u003e\n\u003ctd\u003e-\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth scope=\"row\"\u003eMotion Duration \/ Delay:\u003c\/th\u003e\n\u003ctd\u003eLights stay turned on for \u003cb\u003e30 sec \/ 2 min\u003c\/b\u003e after motion is detected\u003c\/td\u003e\n\u003ctd\u003eLights stay turned on for \u003cb\u003e30 min \/ 10min\u003c\/b\u003e after motion is detected\u003c\/td\u003e\n\u003ctd\u003e-\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth scope=\"row\"\u003eLighting Modes:\u003c\/th\u003e\n\u003ctd\u003e\n\u003cul class=\"text-left\"\u003e\n\u003cli\u003eAll-Day Sensing - Lights on in a bright environment\u003c\/li\u003e\n\u003cli\u003eNight Sensing - Lights on in a dark environment\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/td\u003e\n\u003ctd\u003eAuto Sensing - Swipe or wave to turn on the lights\u003c\/td\u003e\n\u003ctd\u003eAuto Sensing - Turn on \/ off lights when opening \/ closing the door\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth scope=\"row\"\u003ePerfect for:\u003c\/th\u003e\n\u003ctd\u003e\n\u003cb\u003eQuick, efficient lighting\u003c\/b\u003e\u003chr\u003e\n\u003ci class=\"fa-solid fa-check m-2\"\u003e\u003c\/i\u003eHallway\u003cbr\u003e\u003ci class=\"fa-solid fa-check m-2\"\u003e\u003c\/i\u003eBathroom\u003cbr\u003e\u003ci class=\"fa-solid fa-check m-2\"\u003e\u003c\/i\u003eWalk-in Closet\u003c\/td\u003e\n\u003ctd\u003e\n\u003cb\u003eClean, touch-free lighting with messy hands\u003c\/b\u003e\u003chr\u003e\n\u003ci class=\"fa-solid fa-check m-2\"\u003e\u003c\/i\u003eKitchen Countertops\u003cbr\u003e\u003ci class=\"fa-solid fa-check m-2\"\u003e\u003c\/i\u003eWorkbenches\u003cbr\u003e\u003ci class=\"fa-solid fa-check m-2\"\u003e\u003c\/i\u003eVanities\u003c\/td\u003e\n\u003ctd\u003e\n\u003cb\u003eAutomatic lighting work exactly when accessed\u003c\/b\u003e\u003chr\u003e\n\u003ci class=\"fa-solid fa-check m-2\"\u003e\u003c\/i\u003ePantries\u003cbr\u003e\u003ci class=\"fa-solid fa-check m-2\"\u003e\u003c\/i\u003eCabinets\u003cbr\u003e\u003ci class=\"fa-solid fa-check m-2\"\u003e\u003c\/i\u003eEntry Closets\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth scope=\"row\"\u003eBattery Type:\u003c\/th\u003e\n\u003ctd colspan=\"3\"\u003eCR2450\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003c\/div\u003e\n\u003ch4 class=\"text-muted font-weight-light pt-3\"\u003e*Sense+ Controls are only compatible with Sense+ LED Lights.\u003c\/h4\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c\/main\u003e\n\u003cstyle\u003e\n.product--no-media {\n    max-width: max-content !important;\n}\n.spl-main-container .spl-hero-banner {\n  background-image: url('https:\/\/static.gl-inet.com\/www\/images\/campaign\/lafaer-spl-series\/spl-series_banner.jpg');\n  height: 45rem;\n  background-size: cover;\n  background-repeat: no-repeat;\n  background-position: center;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n\n@media (max-width: 991px) {\n  .spl-main-container .spl-hero-banner {\n    background-image: url('https:\/\/static.gl-inet.com\/www\/images\/campaign\/lafaer-spl-series\/spl-series_banner_mobile.jpg');\n    height: 40rem;\n    align-items: start;\n    background-position: center bottom;\n  }\n}\n\n.spl-main-container .spl-hero-banner .row {\n  justify-content: center;\n}\n\n@media (max-width: 991px) {\n  .spl-main-container .spl-hero-banner .row {\n    justify-content: start;\n    padding-left: 1rem;\n  }\n}\n\n@media (max-width: 768px) {\n  .spl-main-container .spl-hero-banner .row {\n    justify-content: center;\n    padding-left: 0;\n  }\n}\n\n@media (max-width: 768px) {\n  .spl-main-container .spl-hero-banner .row div {\n    text-align: center;\n    justify-content: center;\n    margin: auto;\n  }\n}\n\n.spl-main-container .spl-hero-banner .row h5 {\n  font-size: 45px;\n}\n\n@media (max-width: 768px) {\n  .spl-main-container .spl-hero-banner .row h5 {\n    font-size: 34px;\n  }\n}\n\n.spl-main-container .spl-hero-banner .row img {\n  max-height: 68px;\n}\n\n@media (max-width: 768px) {\n  .spl-main-container .spl-hero-banner .row img {\n    max-height: 58px;\n  }\n}\n\n\n.frame a .card img {\n  transition: all 0.3s ease;\n}\n.frame a .card .card-body {\n  position: absolute;\n  top: 3rem;\n}\n@media (max-width: 991px) {\n  .frame a .card .card-body {\n    top: 1.5rem;\n  }\n}\n@media (max-width: 991px) {\n  .frame a .card .card-body h2 {\n    font-size: 1.5rem;\n  }\n}\n@media (max-width: 768px) {\n  .frame a .card .card-body h2 {\n    font-size: 2rem;\n  }\n}\n@media (max-width: 576px) {\n  .frame a .card .card-body h2 {\n    font-size: 1.25rem;\n  }\n}\n.frame a:hover .card img{\n  transform: scale(1.05);\n}\n\n\n.spl-main-container .outlined-text {\n  display: inline-block;\n  padding: 0.25em 0.45em;\n  border: 1px solid #fff;\n  border-radius: 12px;\n  margin: 1em 0.25em 0 0;\n}\n\n.spl-main-container .spl-masonry-grid {\n  display: grid;\n  grid-template-columns: repeat(2, 1fr);\n  gap: 3rem;\n  margin: 20px auto;\n  max-width: 1200px;\n  align-items: start;\n}\n\n.spl-main-container .spl-masonry-grid .spl-masonry-item:nth-child(1) {\n  grid-column: 1;\n  grid-row: 1;\n  margin-bottom: 2rem;\n}\n\n.spl-main-container .spl-masonry-grid .spl-masonry-item:nth-child(2) {\n  grid-column: 2;\n  grid-row: 1 \/ span 2;\n  align-self: center;\n}\n\n.spl-main-container .spl-masonry-grid .spl-masonry-item:nth-child(3) {\n  grid-column: 1;\n  grid-row: 2;\n}\n\n@media (max-width: 768px) {\n  .spl-main-container .spl-masonry-grid {\n    grid-template-columns: 1fr;\n    gap: 2rem;\n  }\n}\n\n@media (max-width: 768px) {\n  .spl-main-container .spl-masonry-grid .spl-masonry-item {\n    grid-column: 1 !important;\n    grid-row: auto !important;\n    align-self: stretch !important;\n    margin-bottom: 2rem !important;\n  }\n}\n\n.spl-main-container .carousel-container {\n  max-width: 978px;\n  margin: 0 auto;\n  background: #f7f7f7;\n  border-radius: 12px;\n  \/* box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1); *\/\n  overflow: hidden;\n}\n\n@media (max-width: 768px) {\n  .spl-main-container .carousel-container {\n    margin: 0 10px;\n  }\n}\n\n.spl-main-container .carousel-container .carousel-wrapper {\n  position: relative;\n  overflow: hidden;\n  line-height: 0.75;\n}\n.spl-main-container .carousel-container .carousel-wrapper video {\n  width: 100%;\n  height: 376.88px;\n  object-fit: cover;\n  display: block;\n}\n@media (max-width: 768px) {\n  .spl-main-container .carousel-container .carousel-wrapper video {\n    height: 300px;\n  }\n}\n\n.spl-main-container .carousel-container .carousel-wrapper .carousel-slides {\n  position: relative;\n  width: 100%;\n  height: 376.88px; \n}\n\n@media (max-width: 768px) {\n  .spl-main-container .carousel-container .carousel-wrapper .carousel-slides {\n    height: 300px;\n  }\n}\n\n.spl-main-container .carousel-container .carousel-wrapper .carousel-slides .carousel-slide {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  opacity: 0;\n}\n\n.spl-main-container .carousel-container .carousel-wrapper .carousel-slides .carousel-slide.active {\n  opacity: 1;\n}\n\n.spl-main-container .carousel-container .carousel-wrapper .carousel-slides .carousel-slide img {\n  width: 100%;\n  height: 100%;\n  object-fit: cover;\n  display: block;\n}\n\n@media (max-width: 768px) {\n  .spl-main-container .carousel-container .carousel-wrapper .carousel-slides .carousel-slide img {\n    height: 300px;\n  }\n}\n\n.spl-main-container .carousel-container .gradient-indicator {\n  height: 138px;\n  padding: 30px;\n  background: white;\n}\n\n@media (max-width: 768px) {\n  .spl-main-container .carousel-container .gradient-indicator {\n    height: 150px;\n    padding: 20px;\n  }\n}\n\n.spl-main-container .carousel-container .gradient-indicator .gradient-container {\n  margin: 20px 0;\n  position: relative;\n}\n.spl-main-container .carousel-container .gradient-indicator .gradient-container #brightnessGradientBar {\n  background: linear-gradient(to right, #3a3a3a 0%, #9e9e9e 20%, #d7d1cb 40%, #ebebeb 60%, #ffffff 100%);\n  position: relative;\n  border-radius: 8px;\n  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);\n  border: 1px solid #eaeaea;\n}\n.spl-main-container .carousel-container .gradient-indicator .gradient-container .gradient-bar {\n  position: relative;\n  height: 16px;\n  border-radius: 8px;\n  overflow: visible;\n  background: #eaeaea;\n}\n\n.spl-main-container .carousel-container .gradient-indicator .gradient-container .gradient-bar.active {\n  background: #eaeaea;\n}\n\n.spl-main-container .carousel-container .gradient-indicator .gradient-container .gradient-bar.active.second-stage {\n  background: linear-gradient(to right, #548cff 0%, #e5e7eb 50%, #eaeaea 100%);\n}\n\n.spl-main-container .carousel-container .gradient-indicator .gradient-container .gradient-bar.active.third-stage {\n  background: linear-gradient(to right, #548cff 0%, #a2bdf4 25%, #e0e4eb 45%, #eae8e6 50%, #ece5de 55%, #f4c89a 75%, #ffa546 100%);\n}\n\n.spl-main-container .carousel-container .gradient-indicator .gradient-container .gradient-bar.active.first-stage {\n  background: linear-gradient(to right, #548cff 0%, #a8b8d8 100%);\n}\n\n.spl-main-container .carousel-container .gradient-indicator .gradient-container .gradient-bar .progress-bar {\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 100%;\n  border-radius: 6px;\n  \/* 默认背景色 *\/\n  background: #eaeaea;\n  width: 0%;\n  \/* 添加一个更亮的覆盖层来突出显示当前进度 *\/\n  box-shadow: 0 0 8px rgba(255, 255, 255, 0.3);\n  \/* 确保没有过渡动画效果 *\/\n  transition: none !important;\n}\n\n.spl-main-container .carousel-container .gradient-indicator .gradient-container .gradient-bar .progress-bar.first-stage {\n  background: linear-gradient(to right, #548cff 0%, #e0e4eb 100%);\n}\n\n.spl-main-container .carousel-container .gradient-indicator .gradient-container .gradient-bar .progress-bar.second-stage {\n  background: linear-gradient(to right, #548cff 0%, #a2bdf4 50%, #e0e4eb 100%);\n}\n\n.spl-main-container .carousel-container .gradient-indicator .gradient-container .gradient-bar .progress-bar.third-stage {\n  background: linear-gradient(to right, #548cff 0%, #a2bdf4 25%, #e0e4eb 45%, #eae8e6 50%, #ece5de 55%, #f4c89a 75%, #ffa546 100%);\n}\n\n.spl-main-container .carousel-container .gradient-indicator .gradient-container .gradient-bar .gradient-dots {\n  position: absolute;\n  top: 50%;\n  left: 0;\n  right: 0;\n  display: flex;\n  justify-content: space-between;\n  transform: translateY(-50%);\n  \/* 调整padding，确保圆点完全位于进度条内且边缘没有缝隙 *\/\n  padding: 0;\n}\n\n.spl-main-container .carousel-container .gradient-indicator .gradient-container .gradient-bar .gradient-dots .gradient-dot {\n  width: 12px;\n  height: 12px;\n  border-radius: 50%;\n  background: transparent;\n  border: 2px solid white;\n  cursor: pointer;\n  transition: all 0.3s ease;\n  position: relative;\n  z-index: 10;\n  margin: 3px;\n}\n\n.spl-main-container .carousel-container .gradient-indicator .gradient-container .gradient-bar .gradient-dots .gradient-dot.active {\n  width: 18px;\n  height: 18px;\n  border: 2px solid white;\n  transform: scale(1.4);\n  box-shadow: 0 3px 10px rgba(0, 0, 0, 0.4);\n  margin: 0 2px;\n}\n\n.spl-main-container .carousel-container .gradient-indicator .gradient-container .gradient-bar .gradient-dots .gradient-dot.active[data-slide=\"0\"] {\n  background: #548cff;\n  box-shadow: 0 3px 10px rgba(84, 140, 255, 0.4);\n}\n\n.spl-main-container .carousel-container .gradient-indicator .gradient-container .gradient-bar .gradient-dots .gradient-dot.active[data-slide=\"1\"] {\n  background: #a2bdf4;\n  box-shadow: 0 3px 10px rgba(162, 189, 244, 0.4);\n}\n\n.spl-main-container .carousel-container .gradient-indicator .gradient-container .gradient-bar .gradient-dots .gradient-dot.active[data-slide=\"2\"] {\n  background: #ffa546;\n  box-shadow: 0 3px 10px rgba(255, 165, 70, 0.4);\n  margin-right: -4px;\n}\n\n.spl-main-container .carousel-container .gradient-indicator .gradient-container .gradient-bar .gradient-dots .gradient-dot.active:hover {\n  transform: scale(1.3);\n}\n\n.spl-main-container .gradient-labels {\n  display: flex;\n  justify-content: space-between;\n  margin-top: 15px;\n  font-size: 12px;\n  color: #666;\n}\n\n.spl-main-container .gradient-labels .gradient-label {\n  text-align: center;\n  flex: 1;\n  transition: all 0.3s ease;\n  cursor: pointer;\n  font-size: 14px;\n  color: #020202;\n  font-weight: 500;\n}\n\n.spl-main-container .gradient-labels .gradient-label:nth-child(1) {\n  text-align: left !important;\n}\n\n.spl-main-container .gradient-labels .gradient-label:nth-child(3) {\n  text-align: right !important;\n}\n\n.spl-main-container .gradient-labels .gradient-label.active {\n  font-weight: 700;\n}\n\n.spl-main-container .gradient-labels .gradient-label.active[data-slide=\"0\"] {\n  color: #548cff;\n}\n\n.spl-main-container .gradient-labels .gradient-label.active[data-slide=\"1\"] {\n  color: #617591;\n}\n\n.spl-main-container .gradient-labels .gradient-label.active[data-slide=\"2\"] {\n  color: #ffa546;\n}\n\n\n.horizontal-scroll {\n  height: 400vh;\n  overflow: clip;\n  background-color: #000000;\n}\n\n@media (max-width: 991px) {\n  .horizontal-scroll {\n    padding-top: 1.5rem;\n    padding-bottom: 1.5rem;\n  }\n}\n\n.horizontal-scroll .sticky-control {\n  position: sticky;\n  top: 0;\n}\n\n@media (max-width: 991px) {\n  .horizontal-scroll .sticky-control {\n    top: 15vh;\n  }\n}\n\n.horizontal-scroll .sticky-control .container {\n  width: 100vw;\n  height: 100vh;\n}\n\n@media (max-width: 991px) {\n  .horizontal-scroll .sticky-control .container {\n    transform: none;\n    width: initial;\n    height: initial;\n    padding-top: 2rem;\n    padding-bottom: 2rem;\n  }\n}\n\n@keyframes scale {\n  0% {\n    transform: scale(1);\n  }\n  100% {\n    transform: scale(1.3);\n  }\n}\n\n.horizontal-scroll .sticky-control .container .bg-control {\n  background-image: linear-gradient(rgba(1, 1, 1, 1) 10%, rgba(1, 1, 1, 0) 50%, rgba(1, 1, 1, 0) 60%), url(https:\/\/static.gl-inet.com\/www\/images\/products\/gl-be9300\/be9300_horizontal.jpg);\n  width: 100%;\n  height: 100%;\n  position: absolute;\n  top: 0;\n  left: 0;\n  background-size: cover;\n  background-position: center center;\n  opacity: 1;\n  animation: scale auto linear;\n  animation-direction: normal;\n  animation-fill-mode: forwards;\n  animation-iteration-count: 1;\n  animation-timeline: view();\n  animation-range-start: 40%;\n  animation-range-end: 95%;\n}\n\n.horizontal-scroll .sticky-control .container .content-control {\n  position: sticky;\n  top: 0;\n  height: 100vh;\n  padding-top: 0rem;\n  padding-bottom: 1rem;\n}\n\n@media (max-width: 991px) {\n  .horizontal-scroll .sticky-control .container .content-control {\n    position: relative;\n    height: inherit;\n  }\n}\n\n.horizontal-scroll .sticky-control .container .content-control .sticky-content {\n  position: relative;\n  top: calc(50% + 10px);\n  transform: translateY(-50%);\n}\n\n@media (max-width: 991px) {\n  .horizontal-scroll .sticky-control .container .content-control .sticky-content {\n    transform: none;\n    top: 0;\n    padding-top: 2rem;\n    padding-bottom: 2rem;\n  }\n}\n\n@keyframes be9300-slide {\n  0% {\n    transform: translateX(0);\n  }\n  100% {\n    transform: translateX(-200%);\n  }\n}\n\n@-webkit-keyframes be9300-slide {\n  0% {\n    -webkit-transform: translateX(0);\n  }\n  100% {\n    -webkit-transform: translateX(-200%);\n  }\n}\n\n.horizontal-scroll .horizontal-scroll-wrapper .figure-list {\n  display: flex;\n  position: relative;\n}\n\n.horizontal-scroll .horizontal-scroll-wrapper .figure-list figure {\n  position: relative;\n  padding: 1rem;\n  flex-grow: 0;\n  flex-shrink: 0;\n  flex-basis: 50%;\n}\n\n@media (max-width: 991px) {\n  .horizontal-scroll .horizontal-scroll-wrapper .figure-list figure {\n    flex-basis: 100%;\n  }\n}\n\n.nav-tabs .nav-link.active {\n    color: #3DC1CF !important;\n    background-color: transparent !important;\n    border-color: transparent !important;\n    border-bottom: 2px solid #3DC1CF !important;\n}\n.nav-tabs .nav-link:hover{\n  border: none;\n}\n\n\n.accordion-item[data-state=\"collapsed\"] .fa-solid.fa-plus {\n    display: block;\n}\n.accordion-item[data-state=\"collapsed\"] .fa-solid.fa-minus {\n    display: none;\n}\n.accordion-item[data-state=\"expanded\"] .fa-solid.fa-plus {\n    display: none;\n}\n.accordion-item[data-state=\"expanded\"] .fa-solid.fa-minus {\n    display: block;\n}\n\n\ndiv:empty{\n  display: inline-block;\n}\n.rte img{\n  border:none!important;\n}\n.rte ul, .rte ol {\n    list-style-position: inside;\n    padding-left: 0rem;\n}\n\n@media (max-width: 768px) {\n  \n  \/* 固定表格布局，确保百分比宽度生效 *\/\n  .table {\n    table-layout: fixed !important;\n    width: 100% !important;\n    min-width: 300px !important;\n    border-collapse: collapse !important;\n  }\n\n  \/* 针对带边框的表格，提高选择器优先级 *\/\n  .table.table-bordered th {\n    min-width: 9rem !important; \n  }\n\n  \/* 单元格样式调整，确保宽于表头 *\/\n  .table.table-bordered td {\n    min-width: calc(100% - 9rem) !important; \/* 自动分配剩余宽度，确保宽于表头 *\/\n\n  }\n\n  \/* 去除最后一列边框 *\/\n  .table.table-bordered th:last-child,\n  .table.table-bordered td:last-child {\n    border-right: none !important;\n  }\n  .table.table-bordered td, .table.table-bordered th{\n    font-size: 12px;\n    padding:0.75rem 0.25rem;\n  }\n\n  .accordion-item h6,\n  .accordion-item h5,\n  .accordion-item p{\n    font-size: 1rem;\n    \n  }\n  .accordion-item h5 i::before{\n    display: block;\n    margin-top: 1.2rem;\n  }\n}\n\n\n\u003c\/style\u003e\n\u003cp\u003e\u003cscript\u003e\n    document.addEventListener('DOMContentLoaded', function () {\n      let tl; \/\/ 将 timeline 声明在外部以便重用\n      \n      function initScenariosAnimation() {\n        if (document.querySelector('#scenarios')) {\n          gsap.registerPlugin(ScrollTrigger);\n          const ul = document.querySelector('.figure-list');\n          const figureList = document.querySelectorAll('.figure-list figure');\n          const container = document.querySelector('.horizontal-scroll .container');\n\n          if (!figureList.length || !container) {\n            return false;\n          }\n\n          \/\/ 如果已有动画，先杀死旧的\n          if (tl) {\n            tl.kill();\n            ScrollTrigger.getAll().forEach(trigger =\u003e trigger.kill());\n          }\n\n          \/\/ 重新计算尺寸\n          const figureWidth = figureList[0].offsetWidth;\n          const offsetWidth = container.offsetWidth;\n          const computedStyle = window.getComputedStyle(container);\n          const paddingLeft = parseFloat(computedStyle.paddingLeft) || 0;\n          const paddingRight = parseFloat(computedStyle.paddingRight) || 0;\n          const containerWidth = offsetWidth - paddingLeft - paddingRight;\n          let totalWidth = (figureWidth * figureList.length) - containerWidth;\n\n          \/\/ 创建新动画\n          tl = gsap.timeline({\n            scrollTrigger: {\n              trigger: \".be9300-main-container .horizontal-scroll\",\n              start: \"top top\",\n              end: \"bottom bottom\",\n              scrub: 1,\n              markers: false\n            }\n          });\n\n          tl.to(ul, {\n            x: 0,\n            duration: 0.35,\n            ease: \"none\"\n          })\n          .to(ul, {\n            x: -totalWidth\n          })\n          .to(ul, {\n            x: -totalWidth,\n            duration: 1\n          })\n          \/\/ 刷新 ScrollTrigger 以应用新计算\n          ScrollTrigger.refresh();\n        }\n      }\n\n      \/\/ 初始加载时执行\n      initScenariosAnimation();\n\n      \/\/ 添加 resize 事件监听（防抖优化）\n      let resizeTimer;\n      window.addEventListener('resize', function() {\n        clearTimeout(resizeTimer);\n        resizeTimer = setTimeout(function() {\n          initScenariosAnimation();\n        }, 250); \/\/ 250ms 防抖延迟\n      });\n    });\n\u003c\/script\u003e \u003cscript\u003e\n    class Carousel {\n        constructor() {\n            this.currentSlide = 0;\n            this.totalSlides = 3;\n            this.isAnimating = false;\n            this.autoRotateTimer = null;\n            this.autoRotateInterval = 3000; \/\/ 3秒自动切换\n            \n            this.slideElements = document.querySelectorAll('.carousel-slide');\n            \n            this.progressBar = document.getElementById('progressBar');\n            this.gradientBar = document.getElementById('gradientBar');\n            this.dots = document.querySelectorAll('.gradient-dot');\n            this.labels = document.querySelectorAll('.gradient-label');\n            \n            \/\/ 为标签添加data-slide属性\n            this.labels.forEach((label, index) =\u003e {\n                label.setAttribute('data-slide', index);\n            });\n            \n            this.slideData = [\n                {\n                    title: 'Cool White',\n                    tempK: '2800K',\n                    color: '#548cff'\n                },\n                {\n                    title: 'Natural White',\n                    tempK: '4000K',\n                    color: '#617591'\n                },\n                {\n                    title: 'Warm White',\n                    tempK: '6000K',\n                    color: '#ffa546'\n                }\n            ];\n            \n            this.init();\n        }\n        \n        init() {\n            this.bindEvents();\n            this.updateIndicators();\n            this.updateProgressBar();\n            this.updateSlides();\n            \n            \/\/ 初始状态设置为活动状态以显示渐变\n            this.gradientBar.classList.add('active');\n            \n            \/\/ 启动自动轮播\n            this.startAutoRotate();\n        }\n        \n        \/\/ 启动自动轮播\n        startAutoRotate() {\n            this.stopAutoRotate();\n            this.autoRotateTimer = setInterval(() =\u003e {\n                this.autoNextSlide();\n            }, this.autoRotateInterval);\n        }\n        \n        \/\/ 停止自动轮播\n        stopAutoRotate() {\n            if (this.autoRotateTimer) {\n                clearInterval(this.autoRotateTimer);\n                this.autoRotateTimer = null;\n            }\n        }\n        \n        \/\/ 自动切换到下一张幻灯片\n        autoNextSlide() {\n            if (this.isAnimating) return;\n            \n            let nextSlide = this.currentSlide + 1;\n            if (nextSlide \u003e= this.totalSlides) {\n                nextSlide = 0; \/\/ 循环回到第一张\n            }\n            \n            this.goToSlide(nextSlide);\n        }\n        bindEvents() {\n            this.dots.forEach((dot, index) =\u003e {\n                dot.addEventListener('click', () =\u003e {\n                    if (this.isAnimating) return;\n                    this.goToSlide(index);\n                    this.startAutoRotate(); \/\/ 重置自动轮播计时器\n                });\n            });\n            \n            this.labels.forEach((label, index) =\u003e {\n                label.addEventListener('click', () =\u003e {\n                    if (this.isAnimating) return;\n                    this.goToSlide(index);\n                    this.startAutoRotate(); \/\/ 重置自动轮播计时器\n                });\n            });\n            \n            \/\/ 在鼠标悬停时暂停自动轮播，鼠标离开时恢复\n            this.gradientBar.addEventListener('mouseenter', () =\u003e {\n                this.stopAutoRotate();\n            });\n            \n            this.gradientBar.addEventListener('mouseleave', () =\u003e {\n                this.startAutoRotate();\n            });\n        }\n        \n        goToSlide(slideIndex) {\n            if (slideIndex === this.currentSlide || this.isAnimating) return;\n            \n            this.currentSlide = slideIndex;\n            this.isAnimating = true;\n            \n            \/\/ 滑动前设置为默认颜色\n            this.gradientBar.classList.remove('active');\n            \n            \/\/ 立即更新指示器和图片\n            this.updateIndicators();\n            this.updateSlides();\n            this.updateProgressBar();\n            \n            this.isAnimating = false;\n        }\n        \n        updateSlides() {\n            \/\/ 直接切换显示，无任何过渡效果\n            this.slideElements.forEach((slide, index) =\u003e {\n                if (index === this.currentSlide) {\n                    slide.classList.add('active');\n                } else {\n                    slide.classList.remove('active');\n                }\n            });\n        }\n        \n        updateIndicators() {\n            const currentData = this.slideData[this.currentSlide];\n            \n            \/\/ 更新指示点\n            this.dots.forEach((dot, index) =\u003e {\n                dot.classList.toggle('active', index === this.currentSlide);\n            });\n            \n            \/\/ 更新标签\n            this.labels.forEach((label, index) =\u003e {\n                label.classList.toggle('active', index === this.currentSlide);\n            });\n        }\n        \n        updateProgressBar() {\n            \/\/ 直接设置进度条宽度\n            const progressWidth = (this.currentSlide \/ (this.totalSlides - 1)) * 100;\n            this.progressBar.style.width = progressWidth + '%';\n            \n            \/\/ 重置所有渐变阶段类\n            this.gradientBar.classList.remove('second-stage', 'third-stage');\n            this.progressBar.classList.remove('first-stage', 'second-stage', 'third-stage');\n            \n            \/\/ 根据当前幻灯片设置进度条容器颜色和渐变阶段\n            if (this.currentSlide === this.totalSlides - 1) {\n                \/\/ 第三个圆点高亮\n                this.gradientBar.classList.add('active', 'third-stage');\n                this.progressBar.classList.add('third-stage');\n            } else if (this.currentSlide === 1) {\n                \/\/ 第二个圆点高亮\n                this.gradientBar.classList.add('active', 'second-stage');\n                this.progressBar.classList.add('second-stage');\n            } else {\n                \/\/ 第一个圆点高亮\n                this.gradientBar.classList.add('active');\n                this.progressBar.classList.add('first-stage');\n            }\n        }\n    }\n    \n    \/\/ 初始化轮播图\n    document.addEventListener('DOMContentLoaded', () =\u003e {\n        new Carousel();\n    });\n\u003c\/script\u003e \u003cscript\u003e\n  document.addEventListener('DOMContentLoaded', function() {\n    const video = document.getElementById('brightnessVideo');\n    const progressBar = document.getElementById('brightnessProgressBar');\n    const movingDot = document.getElementById('movingDot');\n    const gradientBar = document.getElementById('brightnessGradientBar');\n    const cycleDuration = 3; \/\/ 3秒循环\n    \n    \/\/ 设置视频循环播放\n    video.loop = true;\n    video.play();\n    \n    \/\/ 设置移动指示点的样式 - 空心样式\n    movingDot.style.width = '12px';\n    movingDot.style.height = '12px';\n    movingDot.style.borderRadius = '50%';\n    movingDot.style.backgroundColor = 'transparent';\n    movingDot.style.border = '2px solid white';\n    movingDot.style.position = 'absolute';\n    movingDot.style.top = '50%';\n    movingDot.style.transform = 'translate(-50%, -50%)';\n    movingDot.style.zIndex = '10';\n    \n    \/\/ 获取温度标签元素\n    const gradientLabels = document.querySelectorAll('.gradient-label');\n    \n    \/\/ 创建从左到右的滑动效果，指示点跟随进度移动\n    function updateProgressAnimation() {\n      const currentTime = (Date.now() \/ 1000) % cycleDuration;\n      const progress = (currentTime \/ cycleDuration) * 100;\n      \n      \/\/ 更新进度条宽度（从左到右滑动）\n      progressBar.style.width = progress + '%';\n      \n      \/\/ 进度条使用固定样式\n      progressBar.style.backgroundColor = 'transparent';\n      progressBar.style.backgroundImage = 'linear-gradient(to right, rgba(255,255,255,0.2), rgba(255,255,255,0.2))';\n      progressBar.style.borderRadius = '8px 0 0 8px'; \/\/ 左边圆角\n\n      \n      \/\/ 更新移动指示点的位置\n      const barWidth = gradientBar.offsetWidth;\n      const dotPosition = (barWidth * progress) \/ 100;\n      movingDot.style.left = progress + '%';\n      \n      requestAnimationFrame(updateProgressAnimation);\n    }\n    \n    \/\/ 开始动画\n    updateProgressAnimation();\n  });\n\u003c\/script\u003e \u003cscript\u003e\n  document.addEventListener('DOMContentLoaded', function() {\n    \/\/ 视频交互\n    const videos = document.querySelectorAll('.hover-play-video');\n    videos.forEach(video =\u003e {\n        video.addEventListener('mouseenter', function() {\n            this.play();\n        });\n        video.addEventListener('mouseleave', function() {\n            this.pause();\n        });\n    });\n  })\n\u003c\/script\u003e \u003cscript\u003e\n  document.addEventListener('DOMContentLoaded', function () {\n      const accordionItems = document.querySelectorAll('.accordion-item');\n      accordionItems.forEach(function (item) {\n          const collapseTarget = item.dataset.target;\n          const collapseElement = document.querySelector(collapseTarget);\n          collapseElement.addEventListener('shown.bs.collapse', function () {\n              item.dataset.state = 'expanded';\n          });\n          collapseElement.addEventListener('hidden.bs.collapse', function () {\n              item.dataset.state = 'collapsed';\n          });\n      });\n  });\n\u003c\/script\u003e\u003c\/p\u003e","brand":"Lafaer","offers":[{"title":"Door Sensor","offer_id":51510739075256,"sku":"EC-SPDC72-US-4PX","price":14.99,"currency_code":"USD","in_stock":true},{"title":"Motion Sensor","offer_id":51510739108024,"sku":"EC-SPMC72-US-4PX","price":14.99,"currency_code":"USD","in_stock":true},{"title":"Hand Sensor","offer_id":51510739140792,"sku":"EC-SPHC72-US-4PX","price":14.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0773\/3457\/7336\/files\/3sensor-control-with-icon_1.jpg?v=1757246077","url":"https:\/\/lafaerco.myshopify.com\/products\/sensor-test","provider":"Lafaer","version":"1.0","type":"link"}