{"id":13883,"date":"2025-12-19T21:11:25","date_gmt":"2025-12-19T21:11:25","guid":{"rendered":"https:\/\/dev.smartplug.com\/staging\/?page_id=13883"},"modified":"2026-09-29T20:29:41","modified_gmt":"2026-09-29T20:29:41","slug":"sp-dock-lifts","status":"publish","type":"page","link":"https:\/\/dev.smartplug.com\/staging\/sp-dock-lifts\/","title":{"rendered":"SP Dock &#038; Lifts"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"13883\" class=\"elementor elementor-13883\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3bca2de e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-parent\" data-id=\"3bca2de\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-a6fee19 e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child\" data-id=\"a6fee19\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-0037da4 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child\" data-id=\"0037da4\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7fe139b elementor-widget elementor-widget-heading\" data-id=\"7fe139b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">SmartPlug Dock &amp; Lift Kit<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-88192ed e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-parent\" data-id=\"88192ed\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-4723124 e-grid e-con-full wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child\" data-id=\"4723124\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-75c0c77 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child\" data-id=\"75c0c77\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c0f1f6b sp-hotspot-image elementor-widget elementor-widget-html\" data-id=\"c0f1f6b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div id=\"sp-elci-gallery\">\n    <div class=\"sp-main-view\">\n\n        <!-- =========================================================\n             FEATURES \u2014 DOCK & LIFT KIT\n             Product-specific content is editable here.\n             ========================================================= -->\n        <div class=\"sp-gallery-slide active\"\n            data-slide=\"0\"\n            data-title=\"Key Features\"\n            data-subtitle=\"Click the numbered points to explore the Dock & Lift Kit\"\n        >\n            <div class=\"sp-product-image-wrap sp-main-product sp-hotspot-image\" style=\"\n                        --image-x-desktop:0px;\n                        --image-y-desktop:10px;\n                        --image-scale-desktop:1.5;\n                        --image-x-mobile:-10px;\n                        --image-y-mobile:0px;\n                        --image-scale-mobile:1.6;\n                    \">\n                <div class=\"sp-main-image-clip\">\n                    <img decoding=\"async\" src=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/08\/Dock-Lifts.png\"\n                         alt=\"Dock & Lift Kit Features\">\n                <\/div>\n\n                <!-- HOTSPOT 1 -->\n                <div class=\"sp-hotspot\" tabindex=\"0\" style=\"\n                    --top:39%;\n                    --left:30%;\n                    --hotspot-x:0px;\n                    --hotspot-y:0px;\n                        --hotspot-scale-desktop:1;\n\n                        --hotspot-scale-mobile:.8;\n\n                        --hotspot-scale-tablet:.9;\n\n                        --hotspot-scale-laptop:1;\n                        --tooltip-x-desktop:0px;\n                        --tooltip-y-desktop:0px;\n                        --tooltip-scale-desktop:1;\n                        --tooltip-x-mobile:0px;\n                        --tooltip-y-mobile:0px;\n                        --tooltip-scale-mobile:1;\n                        --dot-color:#DF6B30;\n                        --number-color:#ffffff;\n                        --tooltip-bg:#DF6B30;\n                        --tooltip-width:240px;\n                        --dot-size:34px;\n                        --number-size:14px;\n                    \">\n                    <div class=\"sp-dot\"><span class=\"sp-number\">1<\/span><\/div>\n                    <div class=\"sp-tooltip\"><strong>Weatherproof Inlet<\/strong><br>Protects the power inlet from moisture and debris.<\/div>\n                <\/div>\n\n                <!-- HOTSPOT 2 -->\n                <div class=\"sp-hotspot\" tabindex=\"0\" style=\"\n                    --top:77%;\n                    --left:29%;\n                    --hotspot-x:0px;\n                    --hotspot-y:0px;\n                        --hotspot-scale-desktop:1;\n\n                        --hotspot-scale-mobile:.8;\n\n                        --hotspot-scale-tablet:.9;\n\n                        --hotspot-scale-laptop:1;\n                        --tooltip-x-desktop:0px;\n                        --tooltip-y-desktop:0px;\n                        --tooltip-scale-desktop:1;\n                        --tooltip-x-mobile:0px;\n                        --tooltip-y-mobile:0px;\n                        --tooltip-scale-mobile:1;\n                        --dot-color:#DF6B30;\n                        --number-color:#ffffff;\n                        --tooltip-bg:#DF6B30;\n                        --tooltip-width:240px;\n                        --dot-size:34px;\n                        --number-size:16px;\n                    \">\n                    <div class=\"sp-dot\"><span class=\"sp-number\">2<\/span><\/div>\n                    <div class=\"sp-tooltip\"><strong>SmartPlug Connector<\/strong><br>Provides a secure, weatherproof power connection.<\/div>\n                <\/div>\n\n                <!-- HOTSPOT 3 -->\n                <div class=\"sp-hotspot\" tabindex=\"0\" style=\"\n                    --top:72%;\n                    --left:75%;\n                    --hotspot-x:0px;\n                    --hotspot-y:0px;\n                        --hotspot-scale-desktop:1;\n\n                        --hotspot-scale-mobile:.8;\n\n                        --hotspot-scale-tablet:.9;\n\n                        --hotspot-scale-laptop:1;\n                        --tooltip-x-desktop:0px;\n                        --tooltip-y-desktop:0px;\n                        --tooltip-scale-desktop:1;\n                        --tooltip-x-mobile:-50px;\n                        --tooltip-y-mobile:0px;\n                        --tooltip-scale-mobile:1;\n                        --dot-color:#DF6B30;\n                        --number-color:#ffffff;\n                        --tooltip-bg:#DF6B30;\n                        --tooltip-width:240px;\n                        --dot-size:34px;\n                        --number-size:16px;\n                        z-index:3;\n                    \">\n                    <div class=\"sp-dot\"><span class=\"sp-number\">3<\/span><\/div>\n                    <div class=\"sp-tooltip\"><strong>Protective Outlet Cover<\/strong><br>Shields the outlet when not in use.<\/div>\n                <\/div>\n\n                <!-- HOTSPOT 4 -->\n                <div class=\"sp-hotspot\" tabindex=\"0\" style=\"\n                    --top:56%;\n                    --left:74.5%;\n                    --hotspot-x:0px;\n                    --hotspot-y:0px;\n                        --hotspot-scale-desktop:1;\n\n                        --hotspot-scale-mobile:.8;\n\n                        --hotspot-scale-tablet:.9;\n\n                        --hotspot-scale-laptop:1;\n                        --tooltip-x-desktop:0px;\n                        --tooltip-y-desktop:0px;\n                        --tooltip-scale-desktop:1;\n                        --tooltip-x-mobile:-50px;\n                        --tooltip-y-mobile:0px;\n                        --tooltip-scale-mobile:1;\n                        --dot-color:#DF6B30;\n                        --number-color:#ffffff;\n                        --tooltip-bg:#DF6B30;\n                        --tooltip-width:250px;\n                        --dot-size:34px;\n                        --number-size:16px;\n                        z-index:2;\n                    \">\n                    <div class=\"sp-dot\"><span class=\"sp-number\">4<\/span><\/div>\n                    <div class=\"sp-tooltip\"><strong>Easy 4-Screw Installation<\/strong><br>Simple mounting system makes setup fast and straightforward.<\/div>\n                <\/div>\n\n                <!-- HOTSPOT 5 -->\n                <div class=\"sp-hotspot\" tabindex=\"0\" style=\"\n                    --top:42%;\n                    --left:69%;\n                    --hotspot-x:0px;\n                    --hotspot-y:0px;\n                        --hotspot-scale-desktop:1;\n\n                        --hotspot-scale-mobile:.8;\n\n                        --hotspot-scale-tablet:.9;\n\n                        --hotspot-scale-laptop:1;\n                        --tooltip-x-desktop:0px;\n                        --tooltip-y-desktop:0px;\n                        --tooltip-scale-desktop:1;\n                        --tooltip-x-mobile:0px;\n                        --tooltip-y-mobile:0px;\n                        --tooltip-scale-mobile:1;\n                        --dot-color:#DF6B30;\n                        --number-color:#ffffff;\n                        --tooltip-bg:#DF6B30;\n                        --tooltip-width:250px;\n                        --dot-size:34px;\n                        --number-size:16px;\n                        z-index:1;\n                    \">\n                    <div class=\"sp-dot\"><span class=\"sp-number\">5<\/span><\/div>\n                    <div class=\"sp-tooltip\"><strong>Heavy-Duty Power Cord<\/strong><br>Delivers reliable power for everyday use.<\/div>\n                <\/div>\n\n                <!-- HOTSPOT 6 -->\n                <div class=\"sp-hotspot\" tabindex=\"0\" style=\"\n                    --top:18%;\n                    --left:53%;\n                    --hotspot-x:0px;\n                    --hotspot-y:0px;\n                        --hotspot-scale-desktop:1;\n\n                        --hotspot-scale-mobile:.8;\n\n                        --hotspot-scale-tablet:.9;\n\n                        --hotspot-scale-laptop:1;\n                        --tooltip-x-desktop:0px;\n                        --tooltip-y-desktop:0px;\n                        --tooltip-scale-desktop:1;\n                        --tooltip-x-mobile:0px;\n                        --tooltip-y-mobile:0px;\n                        --tooltip-scale-mobile:1;\n                        --dot-color:#DF6B30;\n                        --number-color:#ffffff;\n                        --tooltip-bg:#DF6B30;\n                        --tooltip-width:250px;\n                        --dot-size:34px;\n                        --number-size:16px;\n                    \">\n                    <div class=\"sp-dot\"><span class=\"sp-number\">6<\/span><\/div>\n                    <div class=\"sp-tooltip\"><strong>Cord Storage Bag<\/strong><br>Keeps the cord organized and protected.<\/div>\n                <\/div>\n            <\/div>\n\n            <div class=\"sp-slide-info\">\n                <div class=\"sp-slide-title\">Dock &amp; Lift Kit<\/div>\n                <div class=\"sp-slide-subtitle\"><\/div>\n                <button type=\"button\" class=\"sp-fullscreen-trigger sp-feature-fullscreen-trigger\">View Full Screen<\/button>\n            <\/div>\n        <\/div>\n\n        <!-- =========================================================\n             VARIATION 1 \u2014 STORAGE BAG\n             One internal view. Edit independently.\n             ========================================================= -->\n        <div class=\"sp-gallery-slide sp-variant-slide\"\n            data-slide=\"1\"\n            data-variant=\"storage-bag-variation\"\n            data-view=\"storage-bag\"\n            data-current-view=\"storage-bag\"\n\n            data-storage-bag=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Dock-Liftkits.png\"\n\n            data-storage-bag-title=\"Cordset Bag\"\n            data-storage-bag-subtitle=\"25ft \/ 50ft\"\n            data-storage-bag-part-number=\"CB001\"\n        >\n            <div class=\"sp-variant-layout\">\n                <div class=\"sp-mobile-variant-title\">\n                    <div class=\"sp-slide-title\">Cordset Bag<\/div>\n                    <div class=\"sp-slide-subtitle\">25ft \/ 50ft<\/div>\n                <\/div>\n\n                <div class=\"sp-variant-image-wrap\">\n                    <img decoding=\"async\" class=\"sp-variant-image\"\n                         src=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Dock-Liftkits.png\"\n                         alt=\"Dock & Lift Kit Storage Bag\"\n                         style=\"\n                            --image-x-desktop:0px;\n                            --image-y-desktop:0px;\n                            --image-scale-desktop:1;\n                            --image-x-mobile:0px;\n                            --image-y-mobile:0px;\n                            --image-scale-mobile:1;\n                         \">\n                <\/div>\n\n                <div class=\"sp-slide-info sp-side-info\">\n                    <div class=\"sp-slide-title\">Cordset Bag<\/div>\n                    <div class=\"sp-slide-subtitle\">25ft \/ 50ft<\/div><div class=\"sp-part-number\">\n                        PART NUMBER: <strong class=\"sp-part-number-value\"><\/strong>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <!-- =========================================================\n             VARIATION 2 \u2014 VERTICAL \/ HORIZONTAL\n             Edit each view independently.\n             ========================================================= -->\n        <div class=\"sp-gallery-slide sp-variant-slide\"\n            data-slide=\"2\"\n            data-variant=\"vertical-horizontal-variation\"\n            data-view=\"vertical\"\n            data-current-view=\"vertical\"\n\n            data-vertical=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Front-Wethear-Door-Vertical.png\"\n            data-horizontal=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Front-Wethear-Door-Horizontal.png\"\n\n            data-vertical-title=\"Weatherdoor - Vertical\"\n            data-vertical-subtitle=\"You cannot use the Weatherdoor without Receptacles\"\n            data-vertical-part-number=\"RDPWP\"\n\n            data-horizontal-title=\"Weatherdoor - Horizontal\"\n            data-horizontal-subtitle=\"You cannot use the Weatherdoor without the Receptacles\"\n            data-horizontal-part-number=\"RDPWL\"\n        >\n            <div class=\"sp-variant-layout\">\n                <div class=\"sp-mobile-variant-title\">\n                    <div class=\"sp-slide-title\">Vertical<\/div>\n                    <div class=\"sp-slide-subtitle\">You cannot use the Weatherdoor without the Receptacles<\/div>\n                <\/div>\n\n                <div class=\"sp-variant-image-wrap\">\n                    <img decoding=\"async\" class=\"sp-variant-image\"\n                         src=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Front-Wethear-Door-Vertical.png\"\n                         alt=\"Dock & Lift Kit Vertical\"\n                         style=\"\n                            --image-x-desktop:0px;\n                            --image-y-desktop:0px;\n                            --image-scale-desktop:1;\n                            --image-x-mobile:0px;\n                            --image-y-mobile:0px;\n                            --image-scale-mobile:1;\n                         \">\n                <\/div>\n\n                <div class=\"sp-slide-info sp-side-info\">\n                    <div class=\"sp-slide-title\">Vertical<\/div>\n                    <div class=\"sp-slide-subtitle\">You cannot use the Weatherdoor without the Receptacles<\/div>\n\n                    <div class=\"sp-variant-toggle-wrap\" aria-label=\"Vertical and Horizontal\">\n                        <div class=\"sp-variant-toggle-label\">SELECT VIEW<\/div>\n                        <div class=\"sp-variant-toggle\">\n                            <button type=\"button\" class=\"sp-variant-toggle-btn active\" data-view=\"vertical\">Vertical<\/button>\n                            <button type=\"button\" class=\"sp-variant-toggle-btn\" data-view=\"horizontal\">Horizontal<\/button>\n                        <\/div>\n                        <div class=\"sp-variant-showing\">Showing <strong class=\"sp-variant-showing-value\">Vertical<\/strong><\/div>\n                    <\/div>\n\n                    <div class=\"sp-part-number\">\n                        PART NUMBER: <strong class=\"sp-part-number-value\"><\/strong>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <!-- =========================================================\n             VARIATION 3 \u2014 25ft \/ 50ft \/ SOCKET END\n             Edit each view independently.\n             ========================================================= -->\n        <div class=\"sp-gallery-slide sp-variant-slide\"\n            data-slide=\"3\"\n            data-variant=\"cord-length-socket-end-variation\"\n            data-view=\"25ft\"\n            data-current-view=\"25ft\"\n\n            data-25ft=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Dock-Liftkits-25ft.png\"\n            data-50ft=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Dock-Liftkits-50ft.png\"\n            data-socket-end=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Dock-Lift-Ktis-Cordset-Socket-End.png\"\n\n            data-25ft-title=\"Cordset with marina park power end\"\n            data-25ft-subtitle=\"50A - 25ft\"\n            data-25ft-part-number=\"CM50254\"\n\n            data-50ft-title=\"Cordset with marina park power end\"\n            data-50ft-subtitle=\"50A - 50ft\"\n            data-50ft-part-number=\"CM50504\"\n\n            data-socket-end-title=\"Marina Park Power End Socket\"\n            data-socket-end-subtitle=\"50A 250V\"\n            data-socket-end-part-number=\"N\/A\"\n        >\n            <div class=\"sp-variant-layout\">\n                <div class=\"sp-mobile-variant-title\">\n                    <div class=\"sp-slide-title\">Cordset with marina park power end<\/div>\n                    <div class=\"sp-slide-subtitle\">50A - 25ft<\/div>\n                <\/div>\n\n                <div class=\"sp-variant-image-wrap\">\n                    <img decoding=\"async\" class=\"sp-variant-image\"\n                         src=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Dock-Liftkits-25ft.png\"\n                         alt=\"Dock & Lift Kit 25ft\"\n                         style=\"\n                            --image-x-desktop:0px;\n                            --image-y-desktop:0px;\n                            --image-scale-desktop:1;\n                            --image-x-mobile:0px;\n                            --image-y-mobile:0px;\n                            --image-scale-mobile:1;\n                         \">\n                <\/div>\n\n                <div class=\"sp-slide-info sp-side-info\">\n                    <div class=\"sp-slide-title\">Cordset with marina park power end<\/div>\n                    <div class=\"sp-slide-subtitle\">50A - 25ft<\/div>\n\n                    <div class=\"sp-variant-toggle-wrap\" aria-label=\"25ft, 50ft and Socket End\">\n                        <div class=\"sp-variant-toggle-label\">SELECT VIEW<\/div>\n                        <div class=\"sp-variant-toggle\">\n                            <button type=\"button\" class=\"sp-variant-toggle-btn active\" data-view=\"25ft\">25ft<\/button>\n                            <button type=\"button\" class=\"sp-variant-toggle-btn\" data-view=\"50ft\">50ft<\/button>\n                            <button type=\"button\" class=\"sp-variant-toggle-btn\" data-view=\"socket-end\">Socket End<\/button>\n                        <\/div>\n                        <div class=\"sp-variant-showing\">Showing <strong class=\"sp-variant-showing-value\">25ft<\/strong><\/div>\n                    <\/div>\n\n                    <div class=\"sp-part-number\">\n                        PART NUMBER: <strong class=\"sp-part-number-value\"><\/strong>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <!-- =========================================================\n             VARIATION 4 \u2014 30A INLET FINISHES\n             Edit each view independently.\n             ========================================================= -->\n        <div class=\"sp-gallery-slide sp-variant-slide\"\n            data-slide=\"4\"\n            data-variant=\"30a-inlet-variation\"\n            data-view=\"stainless\"\n            data-current-view=\"stainless\"\n\n            data-stainless=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Inlet-Stainless-30A-1.png\"\n            data-white=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Inlet-White-30A-2.png\"\n            data-black=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Inlet-Black-30A-2.png\"\n            data-grey=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Inlet-Grey-30A-2.png\"\n\n            data-stainless-title=\"Stainless - Steel\"\n            data-stainless-subtitle=\"30A\"\n            data-stainless-part-number=\"BM30NT\"\n\n            data-white-title=\"Non-metallic - White\"\n            data-white-subtitle=\"30A\"\n            data-white-part-number=\"BM30PW\"\n\n            data-black-title=\"Non-Metallic - Black\"\n            data-black-subtitle=\"30A\"\n            data-black-part-number=\"BM30PB\"\n\n            data-grey-title=\"Non-Metallic - Grey\"\n            data-grey-subtitle=\"30A\"\n            data-grey-part-number=\"BM30PG\"\n        >\n            <div class=\"sp-variant-layout\">\n                <div class=\"sp-mobile-variant-title\">\n                    <div class=\"sp-slide-title\">Stainless - STEEL<\/div>\n                    <div class=\"sp-slide-subtitle\">30A<\/div>\n                <\/div>\n\n                <div class=\"sp-variant-image-wrap\">\n                    <img decoding=\"async\" class=\"sp-variant-image\"\n                         src=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Inlet-Stainless-30A-1.png\"\n                         alt=\"Dock & Lift Kit 30A Stainless Inlet\"\n                         style=\"\n                            --image-x-desktop:0px;\n                            --image-y-desktop:0px;\n                            --image-scale-desktop:1;\n                            --image-x-mobile:0px;\n                            --image-y-mobile:0px;\n                            --image-scale-mobile:1;\n                         \">\n                <\/div>\n\n                <div class=\"sp-slide-info sp-side-info\">\n                    <div class=\"sp-slide-title\">Stainless - STEEL<\/div>\n                    <div class=\"sp-slide-subtitle\">30A<\/div>\n\n                    <div class=\"sp-variant-toggle-wrap\" aria-label=\"30A inlet finish\">\n                        <div class=\"sp-variant-toggle-label\">SELECT FINISH<\/div>\n                        <div class=\"sp-variant-toggle\">\n                            <button type=\"button\" class=\"sp-variant-toggle-btn active\" data-view=\"stainless\">Stainless<\/button>\n                            <button type=\"button\" class=\"sp-variant-toggle-btn\" data-view=\"white\">White<\/button>\n                            <button type=\"button\" class=\"sp-variant-toggle-btn\" data-view=\"black\">Black<\/button>\n                            <button type=\"button\" class=\"sp-variant-toggle-btn\" data-view=\"grey\">Grey<\/button>\n                        <\/div>\n                        <div class=\"sp-variant-showing\">Showing <strong class=\"sp-variant-showing-value\">Stainless<\/strong><\/div>\n                    <\/div>\n\n                    <div class=\"sp-part-number\">\n                        PART NUMBER: <strong class=\"sp-part-number-value\"><\/strong>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <!-- =========================================================\n             VARIATION 5 \u2014 50A INLET FINISHES\n             Edit each view independently.\n             ========================================================= -->\n        <div class=\"sp-gallery-slide sp-variant-slide\"\n            data-slide=\"5\"\n            data-variant=\"50a-inlet-variation\"\n            data-view=\"stainless\"\n            data-current-view=\"stainless\"\n\n            data-stainless=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Inlet-Stainless-50A-2.png\"\n            data-white=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Inlet-White-50A-1.png\"\n            data-black=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Inlet-Black-50A-2.png\"\n            data-grey=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Inlet-Grey-50A-2.png\"\n\n            data-stainless-title=\"Stainless - STEEL\"\n            data-stainless-subtitle=\"50A\"\n            data-stainless-part-number=\"BM50NT\"\n\n            data-white-title=\"Non-Metallic - White\"\n            data-white-subtitle=\"50A\"\n            data-white-part-number=\"BM50PW\"\n\n            data-black-title=\"Non-Metallic - Black\"\n            data-black-subtitle=\"50A\"\n            data-black-part-number=\"BM50PB\"\n\n            data-grey-title=\"NOn-Metallic - Grey\"\n            data-grey-subtitle=\"50A\"\n            data-grey-part-number=\"BM50PG\"\n        >\n            <div class=\"sp-variant-layout\">\n                <div class=\"sp-mobile-variant-title\">\n                    <div class=\"sp-slide-title\">Stainless - Steel<\/div>\n                    <div class=\"sp-slide-subtitle\">50A<\/div>\n                <\/div>\n\n                <div class=\"sp-variant-image-wrap\">\n                    <img decoding=\"async\" class=\"sp-variant-image\"\n                         src=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Inlet-Stainless-50A-2.png\"\n                         alt=\"Dock & Lift Kit 50A Stainless Inlet\"\n                         style=\"\n                            --image-x-desktop:0px;\n                            --image-y-desktop:0px;\n                            --image-scale-desktop:1;\n                            --image-x-mobile:0px;\n                            --image-y-mobile:0px;\n                            --image-scale-mobile:1;\n                         \">\n                <\/div>\n\n                <div class=\"sp-slide-info sp-side-info\">\n                    <div class=\"sp-slide-title\">Stainless - Steel<\/div>\n                    <div class=\"sp-slide-subtitle\">50A<\/div>\n\n                    <div class=\"sp-variant-toggle-wrap\" aria-label=\"50A inlet finish\">\n                        <div class=\"sp-variant-toggle-label\">SELECT FINISH<\/div>\n                        <div class=\"sp-variant-toggle\">\n                            <button type=\"button\" class=\"sp-variant-toggle-btn active\" data-view=\"stainless\">Stainless<\/button>\n                            <button type=\"button\" class=\"sp-variant-toggle-btn\" data-view=\"white\">White<\/button>\n                            <button type=\"button\" class=\"sp-variant-toggle-btn\" data-view=\"black\">Black<\/button>\n                            <button type=\"button\" class=\"sp-variant-toggle-btn\" data-view=\"grey\">Grey<\/button>\n                        <\/div>\n                        <div class=\"sp-variant-showing\">Showing <strong class=\"sp-variant-showing-value\">Stainless<\/strong><\/div>\n                    <\/div>\n\n                    <div class=\"sp-part-number\">\n                        PART NUMBER: <strong class=\"sp-part-number-value\"><\/strong>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n\n    <\/div>\n\n    <!-- EXACTLY SIX THUMBNAILS -->\n    <div class=\"sp-product-selector\">\n        <button type=\"button\" class=\"sp-thumb-nav sp-thumb-prev\" aria-label=\"Previous product image\">&#10094;<\/button>\n        <div class=\"sp-thumbnails\">\n            <button type=\"button\" class=\"sp-thumb sp-feature-thumb active\" data-target=\"0\" aria-label=\"View Dock &amp; Lift Kit features\">\n                <span class=\"sp-thumb-image\"><img decoding=\"async\" src=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Dock-Lift-Kits.png\" alt=\"Dock &amp; Lift Kit Features\"><\/span>\n                <span class=\"sp-thumb-label\">Features<\/span>\n            <\/button>\n            <button type=\"button\" class=\"sp-thumb\" data-target=\"1\" aria-label=\"View Dock &amp; Lift Kit Storage Bag\">\n                <span class=\"sp-thumb-image\"><img decoding=\"async\" src=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Dock-Liftkits.png\" alt=\"Dock &amp; Lift Kit Storage Bag\"><\/span>\n                <span class=\"sp-thumb-label\">Cordset Bag<\/span>\n            <\/button>\n            <button type=\"button\" class=\"sp-thumb\" data-target=\"2\" aria-label=\"View Dock &amp; Lift Kit Vertical \/ Horizontal\">\n                <span class=\"sp-thumb-image\"><img decoding=\"async\" src=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Front-Wethear-Door-Vertical.png\" alt=\"Dock &amp; Lift Kit Vertical \/ Horizontal\"><\/span>\n                <span class=\"sp-thumb-label\">Weatherdoor<\/span>\n            <\/button>\n            <button type=\"button\" class=\"sp-thumb\" data-target=\"3\" aria-label=\"View Dock &amp; Lift Kit 25ft \/ 50ft \/ Socket End\">\n                <span class=\"sp-thumb-image\"><img decoding=\"async\" src=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Dock-Liftkits-25ft.png\" alt=\"Dock &amp; Lift Kit 25ft \/ 50ft \/ Socket End\"><\/span>\n                <span class=\"sp-thumb-label\">Cordset<\/span>\n            <\/button>\n            <button type=\"button\" class=\"sp-thumb\" data-target=\"4\" aria-label=\"View Dock &amp; Lift Kit 30A Inlet\">\n                <span class=\"sp-thumb-image\"><img decoding=\"async\" src=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Inlet-Stainless-30A-1.png\" alt=\"Dock &amp; Lift Kit 30A Inlet\"><\/span>\n                <span class=\"sp-thumb-label\">30A Inlet<\/span>\n            <\/button>\n            <button type=\"button\" class=\"sp-thumb\" data-target=\"5\" aria-label=\"View Dock &amp; Lift Kit 50A Inlet\">\n                <span class=\"sp-thumb-image\"><img decoding=\"async\" src=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Inlet-Stainless-50A-2.png\" alt=\"Dock &amp; Lift Kit 50A Inlet\"><\/span>\n                <span class=\"sp-thumb-label\">50A Inlet<\/span>\n            <\/button>\n        <\/div>\n        <button type=\"button\" class=\"sp-thumb-nav sp-thumb-next\" aria-label=\"Next product image\">&#10095;<\/button>\n    <\/div>\n\n    <!-- EXACTLY SIX PAGINATION DOTS -->\n    <div class=\"sp-gallery-pagination\" aria-label=\"Product gallery pagination\">\n        <button type=\"button\" class=\"sp-page-dot active\" data-page=\"0\" aria-label=\"Go to features\"><\/button>\n        <button type=\"button\" class=\"sp-page-dot\" data-page=\"1\" aria-label=\"Go to Storage Bag\"><\/button>\n        <button type=\"button\" class=\"sp-page-dot\" data-page=\"2\" aria-label=\"Go to Vertical \/ Horizontal\"><\/button>\n        <button type=\"button\" class=\"sp-page-dot\" data-page=\"3\" aria-label=\"Go to 25ft \/ 50ft \/ Socket End\"><\/button>\n        <button type=\"button\" class=\"sp-page-dot\" data-page=\"4\" aria-label=\"Go to 30A Inlet\"><\/button>\n        <button type=\"button\" class=\"sp-page-dot\" data-page=\"5\" aria-label=\"Go to 50A Inlet\"><\/button>\n    <\/div>\n<\/div>\n\n<style>\n\/* =========================================================\nSMARTPLUG DUAL CORDSET GALLERY\nAmazon-inspired product selector\n========================================================= *\/\n\n#sp-elci-gallery {\n    --sp-orange: #DF6B30;\n    --sp-dark: #1c1c1c;\n    --sp-muted: #666;\n    --sp-border: #dedede;\n    --sp-soft: #f7f7f7;\n\n    width: 100%;\n    height: 560px;\n    margin: 0 auto;\n    font-family: \"Montserrat\", sans-serif;\n    box-sizing: border-box;\n    overflow: visible;\n}\n\n#sp-elci-gallery *,\n#sp-elci-gallery *::before,\n#sp-elci-gallery *::after {\n    box-sizing: border-box;\n}\n\n\/* =========================================================\nMAIN VIEW\n========================================================= *\/\n\n#sp-elci-gallery .sp-main-view {\n    position: relative;\n    width: 100%;\n    height: 430px;\n    overflow: visible;\n}\n\n#sp-elci-gallery .sp-gallery-slide {\n    display: none;\n    width: 100%;\n    height: 100%;\n    position: relative;\n    overflow: visible;\n    flex-direction: column;\n    align-items: center;\n    justify-content: flex-start;\n}\n\n#sp-elci-gallery .sp-gallery-slide.active {\n    display: flex;\n}\n\n\/* =========================================================\nFEATURE IMAGE\n========================================================= *\/\n\n#sp-elci-gallery .sp-main-product {\n    position: relative;\n    width: 100%;\n    height: 400px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n}\n\n#sp-elci-gallery .sp-main-image-clip {\n    position: absolute;\n    inset: 0;\n    overflow: hidden;\n    pointer-events: none;\n    z-index: 1;\n}\n\n#sp-elci-gallery .sp-main-image-clip > img {\n    width: 100%;\n    height: 100%;\n    max-width: none;\n    object-fit: contain;\n    display: block;\n    transform:\n    translate(\n        var(--image-x-desktop),\n        var(--image-y-desktop)\n    )\n    scale(var(--image-scale-desktop));\n    transform-origin: center center;\n    transition: transform .18s ease;\n}\n\n\/* =========================================================\nVARIANT IMAGE\n========================================================= *\/\n\n#sp-elci-gallery .sp-variant-layout {\n    width: 100%;\n    height: 100%;\n    display: grid;\n    grid-template-columns: minmax(0, 1fr) minmax(180px, .65fr);\n    align-items: center;\n    gap: 12px;\n}\n\n#sp-elci-gallery .sp-variant-image-wrap {\n    width: 100%;\n    height: 400px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    position: relative;\n    min-width: 0;\n}\n\n#sp-elci-gallery .sp-variant-image-wrap img {\n    width: 100%;\n    height: 100%;\n    object-fit: contain;\n    display: block;\n    transform:\n    translate(var(--image-x-desktop), var(--image-y-desktop))\n    scale(var(--image-scale-desktop));\n    transform-origin: center center;\n    transition: opacity .16s ease, transform .18s ease;\n}\n\n\/* =========================================================\nPRODUCT INFORMATION\n========================================================= *\/\n\n#sp-elci-gallery .sp-slide-info {\n    width: 100%;\n    max-width: 400px;\n    margin-top: -2px;\n    padding: 0 12px;\n    text-align: center;\n    transition: none;\n}\n\n#sp-elci-gallery .sp-side-info {\n    max-width: none;\n    margin: 0;\n    padding: 2px 2px 2px 2px;\n    text-align: left;\n}\n\n#sp-elci-gallery .sp-side-info .sp-slide-title {\n    font-size: 30px;\n    font-family: \"Bebas Neue\", sans-serif;\n    font-weight: 600;\n    letter-spacing: 1.5px;\n}\n\n#sp-elci-gallery .sp-side-info .sp-part-number { margin-top: 10px; }\n\n#sp-elci-gallery .sp-mobile-variant-title {\n    display: none;\n}\n\n\n#sp-elci-gallery .sp-slide-title {\n    margin-top: 3px;\n    color: var(--sp-dark);\n    font-family: \"Bebas Neue\", sans-serif;\n    font-size: 25px;\n    line-height: 1;\n    letter-spacing: .4px;\n}\n\n#sp-elci-gallery .sp-slide-subtitle {\n    margin-top: 3px;\n    margin-bottom: 3px;\n    color: var(--sp-muted);\n    font-size: 12px;\n    font-weight: 500;\n    line-height: 1.35;\n}\n\n#sp-elci-gallery .sp-variant-image.is-empty {\n    visibility: hidden;\n}\n\n#sp-elci-gallery .sp-part-number {\n    display: inline-block;\n    margin-top: 7px;\n    color: #555;\n    font-size: 12px;\n    font-weight: 600;\n    letter-spacing: .5px;\n}\n\n#sp-elci-gallery .sp-part-number strong {\n    color: var(--sp-dark);\n}\n\n\/* =========================================================\nHOTSPOTS\n========================================================= *\/\n\n#sp-elci-gallery .sp-hotspot {\n    position: absolute;\n    z-index: 1;\n    top: var(--sp-hotspot-top-px, var(--top));\n    left: var(--sp-hotspot-left-px, var(--left));\n    transform:\n        translate(-50%, -50%)\n        scale(var(--hotspot-scale-desktop));\n    transform-origin: center center;\n    outline: none;\n    transition: top .18s ease, left .18s ease, transform .18s ease;\n    will-change: top, left, transform;\n}\n\n\/* LAPTOP: preserve the existing bubble scale only.\n   Hotspot position remains JavaScript-calculated. *\/\n@media (min-width: 1025px) and (max-width: 1366px) {\n    #sp-elci-gallery .sp-hotspot {\n        top: var(--sp-hotspot-top-px, var(--top));\n        left: var(--sp-hotspot-left-px, var(--left));\n        transform:\n            translate(-50%, -50%)\n            scale(var(--hotspot-scale-laptop));\n    }\n}\n\n\/* TABLET PORTRAIT: preserve the existing bubble scale only.\n   Hotspot position remains JavaScript-calculated. *\/\n@media (min-width: 601px) and (max-width: 1024px) {\n    #sp-elci-gallery .sp-hotspot {\n        top: var(--sp-hotspot-top-px, var(--top));\n        left: var(--sp-hotspot-left-px, var(--left));\n        transform:\n            translate(-50%, -50%)\n            scale(var(--hotspot-scale-tablet));\n    }\n}\n\n#sp-elci-gallery .sp-dot {\n    width: 32px;\n    height: 32px;\n    border-radius: 50%;\n    background: var(--dot-color);\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    cursor: pointer;\n    box-shadow: 0 2px 8px rgba(0,0,0,.18);\n}\n\n#sp-elci-gallery .sp-number {\n    color: var(--number-color);\n    font-size: 13px;\n    font-weight: 700;\n    line-height: 1;\n}\n\n#sp-elci-gallery .sp-tooltip {\n    position: absolute;\n    z-index: 81;\n    bottom: calc(100% + 7px - var(--tooltip-y-desktop));\n    left: calc(50% + var(--tooltip-x-desktop));\n    transform:\n    translateX(-50%)\n    scale(var(--tooltip-scale-desktop));\n    transform-origin: center bottom;\n    width: 230px;\n    padding: 10px;\n    border-radius: 7px;\n    background: var(--tooltip-bg);\n    color: #fff;\n    font-size: 10px;\n    line-height: 1.45;\n    text-align: left;\n    opacity: 0;\n    visibility: hidden;\n    transition:\n    opacity .18s ease,\n    visibility .18s ease,\n    left .18s ease,\n    bottom .18s ease,\n    transform .18s ease;\n    pointer-events: none;\n    z-index:10;\n    box-shadow: 0 4px 14px rgba(0,0,0,.14);\n}\n\n#sp-elci-gallery .sp-hotspot:hover .sp-tooltip,\n#sp-elci-gallery .sp-hotspot:focus-visible .sp-tooltip,\n#sp-elci-gallery .sp-hotspot.is-open .sp-tooltip {\n    opacity: 1;\n    visibility: visible;\n}\n\n\/* =========================================================\nAMAZON-STYLE PRODUCT SELECTOR\n========================================================= *\/\n\n#sp-elci-gallery .sp-product-selector {\n    width: 100%;\n    display: flex;\n    align-items: stretch;\n    gap: 6px;\n    margin-top: 4px;\n}\n\n#sp-elci-gallery .sp-thumbnails {\n    flex: 1 1 auto;\n    min-width: 0;\n    display: flex;\n    align-items: stretch;\n    justify-content: center;\n    gap: 7px;\n    overflow-x: auto;\n    overflow-y: hidden;\n    scroll-behavior: smooth;\n    scrollbar-width: none;\n    padding: 2px 0;\n}\n\n#sp-elci-gallery .sp-thumbnails::-webkit-scrollbar {\n    display: none;\n}\n\n#sp-elci-gallery .sp-thumb {\n    flex: 0 0 72px;\n    width: 72px;\n    min-height: 94px;\n    padding: 5px 5px 6px;\n    border: 1px solid var(--sp-border);\n    border-radius: 7px;\n    background: #fff;\n    cursor: pointer;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: flex-start;\n    gap: 3px;\n    appearance: none;\n    -webkit-appearance: none;\n    transition: border-color .18s ease, box-shadow .18s ease, transform .15s ease;\n}\n\n#sp-elci-gallery .sp-thumb:hover {\n    border-color: var(--sp-orange);\n    transform: translateY(-1px);\n}\n\n#sp-elci-gallery .sp-thumb.active {\n    border: 2px solid var(--sp-orange);\n    box-shadow: 0 2px 8px rgba(223,107,48,.13);\n}\n\n#sp-elci-gallery .sp-thumb:focus {\n    outline: none;\n}\n\n#sp-elci-gallery .sp-thumb:focus-visible {\n    border-color: var(--sp-orange);\n    box-shadow: 0 0 0 2px rgba(223,107,48,.18);\n}\n\n#sp-elci-gallery .sp-thumb-image {\n    width: 100%;\n    height: 57px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    overflow: hidden;\n    border-radius: 4px;\n    background: #fff;\n}\n\n#sp-elci-gallery .sp-thumb img {\n    width: 100%;\n    height: 100%;\n    object-fit: contain;\n    display: block;\n    pointer-events: none;\n}\n\n#sp-elci-gallery .sp-thumb-label {\n    display: block;\n    width: 100%;\n    color: var(--sp-dark);\n    font-size: 9px;\n    font-weight: 700;\n    line-height: 1.15;\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n}\n\n#sp-elci-gallery .sp-thumb-part {\n    display: block;\n    color: #777;\n    font-size: 8px;\n    font-weight: 600;\n    line-height: 1;\n}\n\n#sp-elci-gallery .sp-thumb-view {\n    display: block;\n    color: #777;\n    font-size: 8px;\n    font-weight: 600;\n    line-height: 1;\n}\n\n#sp-elci-gallery .sp-feature-thumb .sp-thumb-part {\n    visibility: hidden;\n}\n\n\/* =========================================================\nTHUMBNAIL ARROWS\n========================================================= *\/\n\n#sp-elci-gallery .sp-thumb-nav {\n    display: none;\n    width: 26px;\n    min-width: 26px;\n    height: 26px;\n    align-self: center;\n    padding: 0;\n    border: 0;\n    border-radius: 50%;\n    background: #fff;\n    color: #222;\n    font-family: Arial, sans-serif;\n    font-size: 16px;\n    line-height: 26px;\n    text-align: center;\n    cursor: pointer;\n    appearance: none;\n    -webkit-appearance: none;\n}\n\n\/* =========================================================\nPAGINATION\n========================================================= *\/\n\n#sp-elci-gallery .sp-gallery-pagination {\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    gap: 6px;\n    margin-top: 7px;\n}\n\n#sp-elci-gallery .sp-page-dot {\n    width: 6px;\n    height: 6px;\n    padding: 0;\n    border: 0;\n    border-radius: 50%;\n    background: #c7c7c7;\n    cursor: pointer;\n    appearance: none;\n    -webkit-appearance: none;\n    transition: background .2s ease, transform .2s ease;\n}\n\n#sp-elci-gallery .sp-page-dot:hover,\n#sp-elci-gallery .sp-page-dot.active {\n    background: var(--sp-orange);\n}\n\n#sp-elci-gallery .sp-page-dot.active {\n    transform: scale(1.25);\n}\n\n\/* =========================================================\nFULL SCREEN VIEW + HOVER ZOOM\n========================================================= *\/\n\n#sp-elci-gallery .sp-fullscreen-trigger {\n    position: static;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    margin-top: 7px;\n    transform: none;\n    border: 1px solid #d7d7d7;\n    border-radius: 4px;\n    background: #fff;\n    color: #333;\n    padding: 6px 11px;\n    font-family: \"Montserrat\", sans-serif;\n    font-size: 9px;\n    font-weight: 700;\n    letter-spacing: .2px;\n    line-height: 1;\n    cursor: pointer;\n    white-space: nowrap;\n    appearance: none;\n    -webkit-appearance: none;\n    box-shadow: 0 1px 4px rgba(0,0,0,.08);\n    transition: border-color .18s ease, color .18s ease, background .18s ease;\n}\n\n#sp-elci-gallery .sp-mobile-variant-title .sp-fullscreen-trigger {\n    display: none;\n}\n\n#sp-elci-gallery .sp-fullscreen-trigger:hover {\n    border-color: var(--sp-orange);\n    color: var(--sp-orange);\n}\n\n\/* FEATURE FULL SCREEN \u2014 centered directly after the feature subtitle *\/\n#sp-elci-gallery .sp-gallery-slide:not(.sp-variant-slide) .sp-feature-fullscreen-trigger {\n    display: inline-flex;\n    position: static;\n    margin: 7px auto 0;\n}\n\n#sp-elci-gallery .sp-zoom-preview {\n    position: absolute;\n    top: 0;\n    left: calc(100% + 12px);\n    width: 78%;\n    height: 100%;\n    background: #fff;\n    border: 1px solid #e3e3e3;\n    border-radius: 8px;\n    box-shadow: 0 6px 20px rgba(0,0,0,.18);\n    overflow: hidden;\n    opacity: 0;\n    visibility: hidden;\n    pointer-events: none;\n    z-index: 1;\n    transition: opacity .12s ease, visibility .12s ease;\n}\n\n#sp-elci-gallery .sp-zoom-preview img {\n    position: absolute;\n    width: 200%;\n    height: 200%;\n    max-width: none;\n    object-fit: contain;\n    display: block;\n    pointer-events: none;\n    transform-origin: top left;\n}\n\n#sp-elci-gallery .sp-variant-image-wrap.sp-zoom-active .sp-zoom-preview {\n    opacity: 1;\n    visibility: visible;\n}\n\n\/* Full-screen product popup *\/\n#sp-elci-gallery .sp-fullscreen-modal {\n    position: fixed;\n    inset: 0;\n    z-index: 999999;\n    display: none;\n    align-items: center;\n    justify-content: center;\n    padding: 20px;\n    background: rgba(0,0,0,.38);\n}\n\n#sp-elci-gallery .sp-fullscreen-modal.is-open {\n    display: flex;\n}\n\n#sp-elci-gallery .sp-fullscreen-dialog {\n    position: relative;\n\n    \/* =====================================================\n       FULL SCREEN POPUP SIZE \u2014 EDIT HERE\n       Change these values for the desktop popup size.\n       ===================================================== *\/\n    width: var(--sp-popup-width-desktop, 1100px);\n    height: var(--sp-popup-height-desktop, 520px);\n    max-width: calc(100vw - 30px);\n    max-height: calc(100vh - 40px);\n\n    display: grid;\n    grid-template-columns: minmax(0, 1.55fr) minmax(260px, .75fr);\n    gap: 28px;\n    padding: 24px 28px;\n    background: #fff;\n    border-radius: 7px;\n    box-shadow: 0 8px 35px rgba(0,0,0,.25);\n    overflow: hidden;\n}\n\n#sp-elci-gallery .sp-fullscreen-close {\n    position: absolute;\n    top: 8px;\n    right: 10px;\n    width: 28px;\n    height: 28px;\n    padding: 0;\n    border: 0;\n    background: transparent;\n    color: #222;\n    font-family: Arial, sans-serif;\n    font-size: 24px;\n    line-height: 28px;\n    cursor: pointer;\n    z-index: 5;\n}\n\n#sp-elci-gallery .sp-fullscreen-image-area {\n    min-width: 0;\n    min-height: 0;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    overflow: hidden;\n}\n\n#sp-elci-gallery .sp-fullscreen-image {\n    \/*\n     * Popup image size and position are controlled by the\n     * FULLSCREEN_CONTENT settings below.\n     *\/\n    width: var(--sp-popup-image-width-desktop, 100%);\n    height: var(--sp-popup-image-height-desktop, 100%);\n    max-width: none;\n    max-height: none;\n    object-fit: contain;\n    display: block;\n    transform: translate(\n        var(--sp-popup-image-x-desktop, 0px),\n        var(--sp-popup-image-y-desktop, 0px)\n    );\n}\n\n#sp-elci-gallery .sp-fullscreen-info {\n    min-width: 0;\n    padding: 8px 8px 8px 0;\n    display: flex;\n    flex-direction: column;\n    align-items: flex-start;\n    overflow-y: auto;\n}\n\n\n#sp-elci-gallery .sp-fullscreen-title {\n    margin-top: 5px;\n    color: var(--sp-dark);\n    font-family: \"Bebas Neue\", sans-serif;\n    font-size: 31px;\n    line-height: 1;\n    letter-spacing: 1.5px;\n    font-weight: 700;\n}\n\n#sp-elci-gallery .sp-fullscreen-subtitle {\n    margin-top: 8px;\n    color: #666;\n    font-size: 12px;\n    line-height: 1.45;\n}\n\n#sp-elci-gallery .sp-fullscreen-part-number {\n    margin-top: 8px;\n    color: #555;\n    font-size: 11px;\n    font-weight: 600;\n    letter-spacing: .5px;\n}\n\n#sp-elci-gallery .sp-fullscreen-part-number strong {\n    color: var(--sp-dark);\n}\n\n#sp-elci-gallery .sp-fullscreen-amp-wrap {\n    display: none;\n    margin-top: 14px;\n}\n\n#sp-elci-gallery .sp-fullscreen-amp-wrap.is-visible {\n    display: block;\n}\n\n#sp-elci-gallery .sp-fullscreen-amp-label {\n    margin-bottom: 5px;\n    color: #777;\n    font-size: 10px;\n    font-weight: 700;\n    letter-spacing: .5px;\n}\n\n#sp-elci-gallery .sp-fullscreen-amp-toggle {\n    display: flex;\n    width: 250px;\n    max-width: 100%;\n    border: 1px solid #d8d8d8;\n    border-radius: 6px;\n    overflow: hidden;\n    background: #fff;\n}\n\n#sp-elci-gallery .sp-fullscreen-amp-btn {\n    flex: 1 1 50%;\n    min-height: 32px;\n    padding: 7px 10px;\n    border: 0;\n    background: #fff;\n    color: #333;\n    font-family: \"Montserrat\", sans-serif;\n    font-size: 11px;\n    font-weight: 700;\n    cursor: pointer;\n    appearance: none;\n    -webkit-appearance: none;\n    transition: background .18s ease, color .18s ease;\n}\n\n#sp-elci-gallery .sp-fullscreen-amp-btn.active {\n    background: var(--sp-orange);\n    color: #fff;\n}\n\n#sp-elci-gallery .sp-fullscreen-amp-btn:disabled {\n    background: #f2f2f2;\n    color: #aaa;\n    cursor: not-allowed;\n}\n\n#sp-elci-gallery .sp-fullscreen-thumbnails {\n    width: 100%;\n    max-width: 320px;\n    margin-top: 18px;\n    display: grid;\n    grid-template-columns: repeat(3, 72px);\n    grid-template-rows: repeat(2, 72px);\n    grid-auto-rows: 72px;\n    grid-auto-flow: row;\n    gap: 12px;\n    align-items: stretch;\n    justify-content: start;\n    overflow: visible;\n}\n\n#sp-elci-gallery .sp-fullscreen-thumb {\n    width: 72px;\n    height: 72px;\n    min-width: 0;\n    padding: 4px;\n    border: 1px solid var(--sp-border);\n    border-radius: 4px;\n    background: #fff;\n    cursor: pointer;\n    overflow: hidden;\n    grid-row: auto;\n}\n\n#sp-elci-gallery .sp-fullscreen-thumb.active {\n    border: 2px solid var(--sp-orange);\n}\n\n#sp-elci-gallery .sp-fullscreen-thumb img {\n    width: 100%;\n    height: 100%;\n    object-fit: contain;\n    display: block;\n}\n\n\/* =========================================================\nMOBILE\n========================================================= *\/\n\n@media (max-width: 600px) {\n\n    #sp-elci-gallery .sp-fullscreen-trigger {\n        position: static;\n        display: inline-flex;\n        margin-top: 6px;\n        transform: none;\n        font-size: 8px;\n        padding: 6px 10px;\n    }\n\n    #sp-elci-gallery .sp-zoom-preview {\n        display: none;\n    }\n\n    #sp-elci-gallery .sp-fullscreen-modal {\n        padding: 8px;\n    }\n\n    #sp-elci-gallery .sp-fullscreen-dialog {\n        \/*\n         * FULL SCREEN POPUP SIZE \u2014 MOBILE EDIT HERE\n         *\/\n        width: var(--sp-popup-width-mobile, calc(100vw - 16px));\n        height: var(--sp-popup-height-mobile, 90vh);\n        max-width: calc(100vw - 16px);\n        max-height: calc(100vh - 16px);\n        min-height: 0;\n        grid-template-columns: 1fr;\n        gap: 8px;\n        padding: 18px 12px 12px;\n        border-radius: 8px;\n        box-shadow: 0 8px 30px rgba(0,0,0,.22);\n        overflow-y: auto;\n    }\n\n    #sp-elci-gallery .sp-fullscreen-image-area {\n        height: var(--sp-popup-image-area-height-mobile, 54vh);\n        min-height: 260px;\n        overflow: hidden;\n    }\n\n    #sp-elci-gallery .sp-fullscreen-image {\n        width: var(--sp-popup-image-width-mobile, 100%);\n        height: var(--sp-popup-image-height-mobile, 100%);\n        transform: translate(\n            var(--sp-popup-image-x-mobile, 0px),\n            var(--sp-popup-image-y-mobile, 0px)\n        );\n    }\n\n    #sp-elci-gallery .sp-fullscreen-info {\n        padding: 0 4px 4px;\n        overflow: visible;\n    }\n\n    #sp-elci-gallery .sp-fullscreen-title {\n        font-size: 25px;\n    }\n\n    #sp-elci-gallery .sp-fullscreen-subtitle {\n        font-size: 10px;\n    }\n\n    #sp-elci-gallery .sp-fullscreen-part-number {\n        font-size: 9px;\n    }\n\n    #sp-elci-gallery .sp-fullscreen-amp-wrap {\n        margin-top: 8px;\n    }\n\n    #sp-elci-gallery .sp-fullscreen-amp-label {\n        font-size: 9px;\n        margin-bottom: 4px;\n    }\n\n    #sp-elci-gallery .sp-fullscreen-amp-toggle {\n        width: 250px;\n    }\n\n    #sp-elci-gallery .sp-fullscreen-amp-btn {\n        min-height: 30px;\n        padding: 6px 8px;\n        font-size: 10px;\n    }\n\n    #sp-elci-gallery .sp-fullscreen-thumbnails {\n        width: 100%;\n        max-width: 100%;\n        margin-top: 10px;\n        grid-template-columns: repeat(3, minmax(0, 1fr));\n        grid-template-rows: repeat(2, 58px);\n        grid-auto-rows: 58px;\n        grid-auto-flow: row;\n        gap: 10px;\n        justify-content: start;\n        overflow: visible;\n    }\n\n    #sp-elci-gallery .sp-fullscreen-thumb {\n        width: 100%;\n        height: 58px;\n        min-width: 0;\n        grid-row: auto;\n    }\n\n    \/* =====================================================\n       MOBILE PRODUCT GALLERY\n       Compact Amazon-style vertical product layout\n       ===================================================== *\/\n\n    #sp-elci-gallery {\n        width: 100%;\n        max-width: 100%;\n        height: auto;\n        min-height: 0;\n        margin: 0 auto;\n        overflow: visible;\n    }\n\n    #sp-elci-gallery .sp-main-view {\n        width: 100%;\n        height: auto;\n        min-height: 0;\n        overflow: visible;\n    }\n\n    #sp-elci-gallery .sp-gallery-slide {\n        width: 100%;\n        height: auto;\n        min-height: 0;\n        display: none;\n        position: relative;\n        overflow: visible;\n        flex-direction: column;\n        align-items: center;\n        justify-content: flex-start;\n    }\n\n    #sp-elci-gallery .sp-gallery-slide.active {\n        display: flex;\n    }\n\n    \/* FEATURE IMAGE\n       The main\/features image uses the same responsive viewing frame. *\/\n    #sp-elci-gallery .sp-main-product {\n        width: 100%;\n        height: auto;\n        aspect-ratio: 2.9 \/ 3;\n        min-height: 0;\n        flex: 0 0 auto;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        order: 1;\n        position: relative;\n        overflow: visible;\n    }\n\n    #sp-elci-gallery .sp-main-image-clip {\n        inset: 0;\n    }\n\n    #sp-elci-gallery .sp-main-image-clip > img {\n        width: 100%;\n        height: 100%;\n        object-fit: contain;\n        transform:\n            translate(\n                var(--image-x-mobile),\n                var(--image-y-mobile)\n            )\n            scale(var(--image-scale-mobile));\n    }\n\n    \/* VARIANT LAYOUT *\/\n    #sp-elci-gallery .sp-variant-layout {\n        width: 100%;\n        height: auto;\n        min-height: 0;\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n        justify-content: flex-start;\n        gap: 0;\n    }\n\n    \/* Title at the top *\/\n    #sp-elci-gallery .sp-mobile-variant-title {\n        display: block;\n        width: 100%;\n        min-height: 46px;\n        padding: 0 8px;\n        text-align: center;\n        order: 1;\n        margin: 0;\n        position: relative;\n        z-index: 2;\n    }\n\n    #sp-elci-gallery .sp-mobile-variant-title .sp-slide-title {\n        margin: 2px 0 0;\n        font-size: 23px;\n        line-height: .95;\n        letter-spacing: .8px;\n    }\n\n    #sp-elci-gallery .sp-mobile-variant-title .sp-slide-subtitle {\n        margin: 3px 0 0;\n        font-size: 10px;\n        line-height: 1.2;\n    }\n\n    #sp-elci-gallery .sp-side-info .sp-fullscreen-trigger {\n        display: inline-flex;\n        margin-left: auto;\n        margin-right: auto;\n    }\n\n    #sp-elci-gallery .sp-mobile-variant-title .sp-fullscreen-trigger {\n        display: none;\n    }\n\n    \/* PRODUCT IMAGEEvery variation uses the responsive viewing frame. *\/\n    #sp-elci-gallery .sp-variant-image-wrap {\n        width: 100%;\n        height: auto;\n        aspect-ratio: 5 \/ 3;\n        min-height: 0;\n        flex: 0 0 auto;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        order: 2;\n        position: relative;\n        overflow: visible;\n    }\n\n    #sp-elci-gallery .sp-variant-image-wrap img {\n        width: 100%;\n        height: 100%;\n        object-fit: contain;\n        display: block;\n        transform:\n            translate(var(--image-x-mobile), var(--image-y-mobile))\n            scale(var(--image-scale-mobile));\n        transform-origin: center center;\n        transition: opacity .16s ease, transform .18s ease;\n    }\n\n    #sp-elci-gallery .sp-slide-info .sp-fullscreen-trigger {\n        margin-left: auto;\n        margin-right: auto;\n    }\n\n    \/* PRODUCT INFORMATION \/ CONTROLS *\/\n    #sp-elci-gallery .sp-side-info {\n        width: 100%;\n        max-width: 100%;\n        height: auto;\n        min-height: 0;\n        padding: 0;\n        margin: 0;\n        text-align: center;\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n        justify-content: flex-start;\n        gap: 0;\n        order: 3;\n    }\n\n    \/* Hide duplicate desktop title. *\/\n    #sp-elci-gallery .sp-side-info .sp-slide-title,\n    #sp-elci-gallery .sp-side-info .sp-slide-subtitle {\n        display: none;\n    }\n\n    \/* Part number *\/\n    #sp-elci-gallery .sp-side-info .sp-part-number {\n        display: inline-block;\n        margin: 5px auto 0;\n        padding: 0;\n        color: #555;\n        font-size: 8px;\n        letter-spacing: .4px;\n        text-align: center;\n    }\n\n    #sp-elci-gallery .sp-part-number strong {\n        color: var(--sp-dark);\n    }\n\n    #sp-elci-gallery .sp-variant-image.is-empty {\n        visibility: hidden;\n    }\n\n    \/* HOTSPOTS \u2014 MOBILE\n       Position remains JavaScript-calculated from the actual rendered image. *\/\n    #sp-elci-gallery .sp-hotspot {\n        top: var(--sp-hotspot-top-px, var(--top));\n        left: var(--sp-hotspot-left-px, var(--left));\n        transform:\n            translate(-50%, -50%)\n            scale(var(--hotspot-scale-mobile));\n    }\n\n    #sp-elci-gallery .sp-tooltip {\n        bottom: calc(100% + 7px - var(--tooltip-y-mobile));\n        left: calc(50% + var(--tooltip-x-mobile));\n        transform:\n            translateX(-50%)\n            scale(var(--tooltip-scale-mobile));\n        width: min(190px, calc(100vw - 22px));\n        padding: 8px;\n        font-size: 9px;\n    }\n\n    \/* MOBILE THUMBNAIL STRIP *\/\n    #sp-elci-gallery .sp-product-selector {\n        width: 100%;\n        display: flex;\n        align-items: center;\n        gap: 3px;\n        margin-top: 7px;\n    }\n\n    #sp-elci-gallery .sp-thumb-nav {\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        flex: 0 0 26px;\n        width: 26px;\n        min-width: 26px;\n        height: 26px;\n        min-height: 26px;\n        padding: 0;\n        border: 0;\n        border-radius: 50%;\n        background: #fff;\n        color: #222;\n        font-size: 16px;\n        line-height: 26px;\n        cursor: pointer;\n        z-index: 3;\n    }\n\n    #sp-elci-gallery .sp-thumbnails {\n        flex: 1 1 auto;\n        width: auto;\n        max-width: calc(100% - 58px);\n        min-width: 0;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        gap: 4px;\n        overflow-x: auto;\n        overflow-y: hidden;\n        scroll-behavior: smooth;\n        scrollbar-width: none;\n        padding: 1px 0;\n    }\n\n    #sp-elci-gallery .sp-thumbnails::-webkit-scrollbar {\n        display: none;\n    }\n\n    #sp-elci-gallery .sp-thumb {\n        flex: 0 0 62px;\n        width: 62px;\n        min-width: 62px;\n        min-height: 75px;\n        height: 75px;\n        padding: 3px;\n        border: 1px solid var(--sp-border);\n        border-radius: 5px;\n        gap: 2px;\n    }\n\n    #sp-elci-gallery .sp-thumb.active {\n        border: 2px solid var(--sp-orange);\n    }\n\n    #sp-elci-gallery .sp-thumb-image {\n        width: 100%;\n        height: 45px;\n        min-height: 45px;\n        border-radius: 3px;\n    }\n\n    #sp-elci-gallery .sp-thumb-label {\n        font-size: 8px;\n        line-height: 1.05;\n    }\n\n    #sp-elci-gallery .sp-thumb-part {\n        font-size: 7px;\n        line-height: 1;\n    }\n\n    #sp-elci-gallery .sp-thumb-view {\n        font-size: 7px;\n        line-height: 1;\n    }\n\n    \/* PAGINATION *\/\n    #sp-elci-gallery .sp-gallery-pagination {\n        display: flex;\n        justify-content: center;\n        align-items: center;\n        gap: 5px;\n        margin-top: 4px;\n        height: 7px;\n    }\n\n    #sp-elci-gallery .sp-page-dot {\n        width: 6px;\n        height: 6px;\n    }\n\n    \/* LOCKED RESPONSIVE VIEWING FRAME *\/\n    #sp-elci-gallery .sp-main-view {\n        overflow: visible;\n    }\n\n    #sp-elci-gallery .sp-gallery-slide {\n        height: auto;\n        min-height: 0;\n    }\n\n    #sp-elci-gallery .sp-main-product,\n    #sp-elci-gallery .sp-variant-image-wrap {\n        flex-shrink: 0;\n    }\n\n    \/* LOCKED IMAGE FRAME: image swaps never change the reserved viewing area *\/\n    #sp-elci-gallery .sp-variant-image-wrap img,\n    #sp-elci-gallery .sp-main-image-clip > img {\n        flex-shrink: 0;\n    }\n\n}\n\/* Elementor containers must not clip hotspot tooltips *\/\n.sp-gallery-overflow,\n.sp-gallery-overflow > .e-con,\n.sp-gallery-overflow > .elementor-widget-container {\n    overflow: visible !important;\n}\n\n\/* =========================================================\n   CHANGE LOG \u2014 MOBILE RESPONSIVE FIX\n   =========================================================\n   1. Removed the mobile side-info minimum height that created\n      excessive empty space above the thumbnail strip.\n   2. Added a fixed mobile title area so different title lengths\n      do not make the controls appear at different levels.\n   3. Added a compact, fixed mobile controls area so the\n      configuration, current selection, part number, and\n      Full Screen button stay evenly aligned between variations.\n   4. Reduced the spacing between the Full Screen button and\n      the thumbnail strip.\n   5. Kept the mobile image viewing frame fixed so image swaps\n      do not change the gallery layout.\n   ========================================================= *\/\n\n\/* DESKTOP \u2014 KEEP THE EXISTING FIXED VIEWING FRAME *\/\n#sp-elci-gallery .sp-main-view{height:430px;min-height:430px;}\n#sp-elci-gallery .sp-gallery-slide{height:100%;min-height:430px;}\n#sp-elci-gallery .sp-variant-layout{height:100%;min-height:0;}\n#sp-elci-gallery .sp-variant-image-wrap{height:400px;min-height:400px;flex:0 0 400px;}\n#sp-elci-gallery .sp-side-info{min-height:220px;}\n#sp-elci-gallery .sp-fullscreen-trigger{display:inline-flex;position:static;margin-top:7px;}\n\n\/* MOBILE (<=600px) \u2014 FIXED TITLE \/ IMAGE \/ CONTROLS SPACING *\/\n@media (max-width:600px){\n    #sp-elci-gallery .sp-main-view{\n        height:auto;\n        min-height:0;\n    }\n\n    #sp-elci-gallery .sp-gallery-slide{\n        height:auto;\n        min-height:0;\n    }\n\n    #sp-elci-gallery .sp-variant-layout{\n        height:auto;\n        min-height:0;\n    }\n\n    \/* Keep every variation on the same image viewing frame. *\/\n    #sp-elci-gallery .sp-variant-image-wrap{\n        height:auto;\n        min-height:0;\n        flex:0 0 auto;\n    }\n\n    \/* Reserve the same title space for every variation. *\/\n    #sp-elci-gallery .sp-mobile-variant-title{\n        height:70px;\n        min-height:70px;\n        max-height:70px;\n        overflow:hidden;\n        display:block;\n    }\n\n    \/* Keep the product controls aligned at the same level. *\/\n    #sp-elci-gallery .sp-side-info{\n        height:auto;\n        min-height:0;\n        max-height:none;\n        overflow:visible;\n        justify-content:flex-start;\n    }\n\n    #sp-elci-gallery .sp-side-info .sp-part-number{\n        margin:3px auto 0;\n        line-height:1.05;\n    }\n\n    \/* Keep the Full Screen button directly below the part number. *\/\n    #sp-elci-gallery .sp-side-info .sp-fullscreen-trigger{\n        margin-top:5px;\n    }\n\n    \/* Keep thumbnails below the entire 440px mobile gallery frame. *\/\n    #sp-elci-gallery .sp-product-selector{\n        position:relative;\n        z-index:100;\n        margin-top:0;\n        clear:both;\n        height:78px;\n        min-height:78px;\n        max-height:78px;\n        box-sizing:border-box;\n    }\n\n    #sp-elci-gallery .sp-gallery-pagination{\n        margin-top:3px;\n    }\n\n    #sp-elci-gallery .sp-thumbnails{\n        justify-content:flex-start !important;\n        padding:1px 30px !important;\n        scroll-padding-inline:30px;\n        box-sizing:border-box;\n    }\n\n    \/* Keep the first\/last cards clear of the arrow buttons. *\/\n    #sp-elci-gallery .sp-thumb:first-child{\n        margin-left:0;\n    }\n\n    #sp-elci-gallery .sp-thumb:last-child{\n        margin-right:0;\n    }\n\n    \/* Full-screen button must remain above the thumbnail strip. *\/\n    #sp-elci-gallery .sp-variant-slide .sp-side-info .sp-fullscreen-trigger{\n        position:relative;\n        z-index:10;\n        visibility:visible !important;\n        opacity:1 !important;\n    }\n}\n\n\/* =========================================================\n   LAPTOP THUMBNAIL NAVIGATION \u2014 1025px\u20131366px\n   Uses the same previous\/next thumbnail navigation as mobile.\n   ========================================================= *\/\n@media (min-width:1025px) and (max-width:1366px){\n    #sp-elci-gallery .sp-product-selector{\n        width:100%;\n        display:flex;\n        align-items:center;\n        gap:6px;\n        margin-top:4px;\n    }\n\n    #sp-elci-gallery .sp-thumb-nav{\n        display:flex;\n        align-items:center;\n        justify-content:center;\n        flex:0 0 30px;\n        width:30px;\n        min-width:30px;\n        height:30px;\n        min-height:30px;\n        padding:0;\n        border:0;\n        border-radius:50%;\n        background:#fff;\n        color:#222;\n        font-size:18px;\n        line-height:30px;\n        cursor:pointer;\n        z-index:3;\n        box-shadow:0 1px 4px rgba(0,0,0,.12);\n    }\n\n    #sp-elci-gallery .sp-thumb-nav:hover{\n        background:#fff;\n        color:var(--sp-orange);\n    }\n\n    #sp-elci-gallery .sp-thumbnails{\n        flex:1 1 auto;\n        width:auto;\n        min-width:0;\n        max-width:none;\n        display:flex;\n        align-items:flex-start;\n        justify-content:flex-start;\n        gap:7px;\n        overflow-x:auto;\n        overflow-y:visible;\n        scroll-behavior:smooth;\n        scrollbar-width:none;\n        padding:2px 0;\n        scroll-padding-inline:4px;\n    }\n\n    #sp-elci-gallery .sp-thumbnails::-webkit-scrollbar{\n        display:none;\n    }\n}\n\n\/* =========================================================\n   TABLET VARIATION PRODUCT INFORMATION\n   601px\u20131024px\n   Matches the mobile variation information layout.\n   Feature product is intentionally NOT changed.\n   ========================================================= *\/\n@media (min-width:601px) and (max-width:1024px){\n\n    \/* Only variation slides use the mobile-style stacked layout. *\/\n    #sp-elci-gallery .sp-main-view:has(.sp-gallery-slide.sp-variant-slide.active){\n        height:auto;\n        min-height:0;\n    }\n\n    #sp-elci-gallery .sp-gallery-slide.sp-variant-slide.active{\n        height:auto;\n        min-height:0;\n        overflow:visible;\n    }\n\n    #sp-elci-gallery .sp-variant-slide .sp-variant-layout{\n        width:100%;\n        height:auto;\n        min-height:0;\n        display:flex;\n        flex-direction:column;\n        align-items:center;\n        justify-content:flex-start;\n        gap:0;\n    }\n    #sp-elci-gallery .sp-variant-slide .sp-mobile-variant-title{\n        display:block;\n        width:100%;\n        min-height:62px;\n        height:62px;\n        padding:0 18px;\n        text-align:center;\n        order:1;\n        margin:0;\n        position:relative;\n        z-index:2;\n    }\n\n    #sp-elci-gallery .sp-variant-slide .sp-mobile-variant-title .sp-slide-title{\n        margin:3px 0 0;\n        font-size:28px;\n        line-height:.95;\n        letter-spacing:1px;\n    }\n\n    #sp-elci-gallery .sp-variant-slide .sp-mobile-variant-title .sp-slide-subtitle{\n        margin:4px 0 0;\n        font-size:11px;\n        line-height:1.2;\n    }\n\n    \/* Keep the variation image centered and sized for tablet. *\/\n    #sp-elci-gallery .sp-variant-slide .sp-variant-image-wrap{\n        width:100%;\n        height:auto;\n        aspect-ratio:4 \/ 3;\n        min-height:0;\n        flex:0 0 auto;\n        order:2;\n        display:flex;\n        align-items:center;\n        justify-content:center;\n        position:relative;\n        overflow:visible;\n    }\n\n    #sp-elci-gallery .sp-variant-slide .sp-variant-image-wrap img{\n        width:100%;\n        height:100%;\n        object-fit:contain;\n        display:block;\n        transform:\n            translate(var(--image-x-desktop), var(--image-y-desktop))\n            scale(var(--image-scale-desktop));\n        transform-origin:center center;\n    }\n\n    \/* Hide the duplicate desktop title inside the side-info. *\/\n    #sp-elci-gallery .sp-variant-slide .sp-side-info .sp-slide-title,\n    #sp-elci-gallery .sp-variant-slide .sp-side-info .sp-slide-subtitle{\n        display:none;\n    }\n\n    \/* Mobile-style centered product information below the image. *\/\n    #sp-elci-gallery .sp-variant-slide .sp-side-info{\n        width:100%;\n        max-width:100%;\n        height:auto;\n        min-height:0;\n        padding:0;\n        margin:0;\n        text-align:center;\n        display:flex;\n        flex-direction:column;\n        align-items:center;\n        justify-content:flex-start;\n        gap:0;\n        order:3;\n    }\n\n    #sp-elci-gallery .sp-variant-slide .sp-side-info .sp-part-number{\n        display:inline-block;\n        margin:6px auto 0;\n        padding:0;\n        font-size:10px;\n        line-height:1.1;\n        letter-spacing:.4px;\n        text-align:center;\n    }\n\n    #sp-elci-gallery .sp-variant-slide .sp-side-info .sp-fullscreen-trigger{\n        display:inline-flex;\n        margin:7px auto 0;\n        font-size:9px;\n        padding:6px 11px;\n    }\n}\n\n\n\/* =========================================================\n   VARIATION TOGGLE\n   Uses the existing toggle visual language.\n   ========================================================= *\/\n#sp-elci-gallery .sp-variant-toggle-label{\n    margin-bottom:5px;\n    color:#777;\n    font-size:10px;\n    font-weight:700;\n    letter-spacing:.5px;\n}\n#sp-elci-gallery .sp-variant-showing{\n    margin-top:6px;\n    color:#777;\n    font-size:10px;\n    line-height:1.2;\n}\n#sp-elci-gallery .sp-variant-showing strong{\n    color:#555;\n    font-weight:700;\n}\n\n#sp-elci-gallery .sp-variant-toggle-wrap{\n    display:block;\n    margin-top:10px;\n    width:250px;\n    max-width:100%;\n}\n#sp-elci-gallery .sp-variant-toggle{\n    display:flex;\n    width:250px;\n    max-width:100%;\n    border:1px solid #d8d8d8;\n    border-radius:6px;\n    overflow:hidden;\n    background:#fff;\n}\n#sp-elci-gallery .sp-variant-toggle-btn{\n    flex:1 1 50%;\n    min-height:32px;\n    padding:7px 10px;\n    border:0;\n    background:#fff;\n    color:#333;\n    font-family:\"Montserrat\",sans-serif;\n    font-size:11px;\n    font-weight:700;\n    cursor:pointer;\n    appearance:none;\n    -webkit-appearance:none;\n    transition:background .18s ease,color .18s ease;\n}\n#sp-elci-gallery .sp-variant-toggle-btn.active{\n    background:var(--sp-orange);\n    color:#fff;\n}\n#sp-elci-gallery .sp-variant-toggle-btn:focus-visible{\n    outline:2px solid var(--sp-orange);\n    outline-offset:-2px;\n}\n\n\/* Desktop: fullscreen stays directly below the part number. *\/\n@media (min-width:1025px){\n    #sp-elci-gallery .sp-side-info{\n        display:flex;\n        flex-direction:column;\n        align-items:flex-start;\n        min-height:220px;\n    }\n    #sp-elci-gallery .sp-side-info .sp-fullscreen-trigger{\n        align-self:flex-start;\n        margin-top:7px;\n    }\n}\n\n\/* Tablet\/mobile: keep the same fixed controls footprint. *\/\n@media (max-width:1024px){\n    #sp-elci-gallery .sp-variant-toggle-wrap{\n        width:250px;\n        max-width:100%;\n    }\n}\n@media (max-width:600px){\n    \/* Match the centered mobile product-information layout. *\/\n    #sp-elci-gallery .sp-variant-slide .sp-side-info{\n        align-items:center;\n        text-align:center;\n    }\n    #sp-elci-gallery .sp-variant-slide .sp-side-info .sp-part-number{\n        margin-left:auto;\n        margin-right:auto;\n        text-align:center;\n    }\n    #sp-elci-gallery .sp-variant-slide .sp-side-info .sp-fullscreen-trigger{\n        margin-left:auto;\n        margin-right:auto;\n        align-self:center;\n    }\n    #sp-elci-gallery .sp-variant-toggle-wrap{\n        width:100%;\n        max-width:250px;\n        margin-top:5px;\n    }\n    #sp-elci-gallery .sp-variant-toggle-label{\n        margin-bottom:4px;\n        font-size:9px;\n    }\n    #sp-elci-gallery .sp-variant-showing{\n        margin-top:6px;\n        font-size:10px;\n    }\n    #sp-elci-gallery .sp-variant-toggle{\n        width:100%;\n        max-width:250px;\n    }\n    #sp-elci-gallery .sp-variant-toggle-btn{\n        min-height:30px;\n        padding:6px 8px;\n        font-size:10px;\n    }\n    #sp-elci-gallery .sp-side-info{\n        height:112px;\n        min-height:112px;\n        max-height:112px;\n    }\n    #sp-elci-gallery .sp-side-info .sp-fullscreen-trigger{\n        margin-top:5px;\n    }\n}\n@media (min-width:601px) and (max-width:1024px){\n    #sp-elci-gallery .sp-variant-slide .sp-side-info .sp-fullscreen-trigger{\n        margin-top:7px;\n    }\n}\n\n\/* Laptop + tablet: ONLY 4-button variant selectors use a 2-column \u00d7 2-row grid.\n   2-button and 3-button selectors keep their existing layout. *\/\n@media (min-width:601px) and (max-width:1366px){\n    #sp-elci-gallery .sp-variant-toggle:has(> .sp-variant-toggle-btn:nth-child(4)):not(:has(> .sp-variant-toggle-btn:nth-child(5))){\n        display:grid;\n        grid-template-columns:repeat(2, minmax(0, 1fr));\n        grid-template-rows:repeat(2, minmax(32px, auto));\n    }\n\n    #sp-elci-gallery .sp-variant-toggle:has(> .sp-variant-toggle-btn:nth-child(4)):not(:has(> .sp-variant-toggle-btn:nth-child(5))) > .sp-variant-toggle-btn{\n        width:100%;\n        min-width:0;\n        flex:none;\n    }\n}\n\n\/* Fullscreen variation selector \u2014 shown only for variation slides. *\/\n#sp-elci-gallery .sp-fullscreen-variant-toggle-wrap{\n    display:none;\n    width:250px;\n    max-width:100%;\n    margin-top:12px;\n}\n\n#sp-elci-gallery .sp-fullscreen-variant-toggle-wrap.is-visible{\n    display:block;\n}\n\n#sp-elci-gallery .sp-fullscreen-variant-label{\n    margin-bottom:5px;\n    color:#777;\n    font-size:10px;\n    font-weight:700;\n    letter-spacing:.5px;\n    line-height:1.2;\n}\n\n#sp-elci-gallery .sp-fullscreen-variant-toggle{\n    display:flex;\n    width:100%;\n    max-width:100%;\n    border:1px solid #d8d8d8;\n    border-radius:6px;\n    overflow:hidden;\n    background:#fff;\n}\n#sp-elci-gallery .sp-fullscreen-variant-btn{\n    flex:1 1 50%;\n    min-height:32px;\n    padding:7px 10px;\n    border:0;\n    background:#fff;\n    color:#333;\n    font-family:\"Montserrat\",sans-serif;\n    font-size:11px;\n    font-weight:700;\n    cursor:pointer;\n    appearance:none;\n    -webkit-appearance:none;\n    transition:background .18s ease,color .18s ease;\n}\n#sp-elci-gallery .sp-fullscreen-variant-btn.active{\n    background:var(--sp-orange);\n    color:#fff;\n}\n@media (max-width:600px){\n    #sp-elci-gallery .sp-fullscreen-variant-toggle-wrap{\n        width:100%;\n        max-width:250px;\n        margin-top:8px;\n    }\n\n    #sp-elci-gallery .sp-fullscreen-variant-label{\n        font-size:9px;\n        margin-bottom:4px;\n    }\n\n    #sp-elci-gallery .sp-fullscreen-variant-btn{\n        min-height:30px;\n        padding:6px 8px;\n        font-size:10px;\n    }\n}\n\n\/* SECOND THUMBNAIL \u2014 NO SELECT VIEW \/ TOGGLE IN FULL SCREEN *\/\n#sp-elci-gallery .sp-fullscreen-modal.sp-second-thumbnail-no-controls .sp-fullscreen-variant-toggle-wrap {\n    display: none !important;\n}\n\n\n\/* =========================================================\n   KICKER REMOVAL \u2014 ALL VIEWS \/ ALL RESPONSIVE BREAKPOINTS\n   ========================================================= *\/\n#sp-elci-gallery .sp-slide-kicker,\n#sp-elci-gallery .sp-fullscreen-kicker{\n    display:none !important;\n}\n\n\/* =========================================================\n   TABLET FEATURE LAYOUT \u2014 reserve space for subtitle + fullscreen\n   button so the thumbnail strip cannot overlap the feature content.\n   ========================================================= *\/\n@media (min-width:601px) and (max-width:1024px){\n    #sp-elci-gallery .sp-main-view:has(.sp-gallery-slide:not(.sp-variant-slide).active){\n        height:460px;\n        min-height:460px;\n    }\n\n    #sp-elci-gallery .sp-gallery-slide:not(.sp-variant-slide).active{\n        height:460px;\n        min-height:460px;\n    }\n\n    #sp-elci-gallery .sp-gallery-slide:not(.sp-variant-slide) .sp-main-product{\n        width:100%;\n        height:360px;\n        min-height:360px;\n        flex:0 0 360px;\n    }\n\n    #sp-elci-gallery .sp-gallery-slide:not(.sp-variant-slide) > .sp-slide-info{\n        width:100%;\n        height:100px;\n        min-height:100px;\n        flex:0 0 100px;\n        margin:0;\n        padding:0 10px;\n        display:flex;\n        flex-direction:column;\n        align-items:center;\n        justify-content:flex-start;\n        text-align:center;\n        position:relative;\n        z-index:10;\n        overflow:visible;\n    }\n\n    #sp-elci-gallery .sp-gallery-slide:not(.sp-variant-slide) > .sp-slide-info .sp-slide-title{\n        margin-top:0;\n    }\n\n    #sp-elci-gallery .sp-gallery-slide:not(.sp-variant-slide) > .sp-slide-info .sp-slide-subtitle{\n        margin:4px 0 0;\n    }\n\n    #sp-elci-gallery .sp-gallery-slide:not(.sp-variant-slide) > .sp-slide-info .sp-feature-fullscreen-trigger{\n        margin:7px auto 0;\n        position:static;\n        z-index:20;\n    }\n\n    #sp-elci-gallery .sp-product-selector{\n        position:relative;\n        z-index:30;\n        margin-top:8px;\n    }\n}\n\n\/* =========================================================\n   DESKTOP \u2014 NO THUMBNAIL NAVIGATION ARROWS\n   Arrows are available only on laptop and mobile.\n   ========================================================= *\/\n@media (min-width:1367px){\n    #sp-elci-gallery .sp-thumb-nav{\n        display:none !important;\n    }\n}\n\n\/* =========================================================\n   TABLET VARIATION LAYOUT \u2014 601px\u20131024px\n   Matches the tablet reference: image on the left, product\n   information on the right, thumbnails below, with the zoom\n   preview opening beside the image.\n   ========================================================= *\/\n@media (min-width:601px) and (max-width:1024px){\n    \/* Reserve enough total height for the complete 430px viewing frame,\n       the full thumbnail cards, and pagination without clipping. *\/\n    #sp-elci-gallery{\n        height:570px !important;\n        min-height:570px !important;\n    }\n\n    \/* Keep the complete tablet variation content inside a dedicated\n       viewing frame. The thumbnail strip must start only after this\n       frame so it can never cover the title, controls, or fullscreen button. *\/\n    #sp-elci-gallery .sp-main-view:has(.sp-gallery-slide.sp-variant-slide.active){\n        height:430px;\n        min-height:430px;\n        margin-bottom:12px;\n        overflow:visible !important;\n    }\n\n    #sp-elci-gallery .sp-gallery-slide.sp-variant-slide.active{\n        height:430px;\n        min-height:430px;\n        overflow:visible !important;\n    }\n\n    #sp-elci-gallery .sp-variant-slide .sp-variant-layout{\n        width:100%;\n        height:430px;\n        min-height:430px;\n        display:grid;\n        grid-template-columns:minmax(0, 1.35fr) minmax(220px, .65fr);\n        align-items:center;\n        gap:18px;\n    }\n\n    #sp-elci-gallery .sp-variant-slide .sp-mobile-variant-title{\n        display:none !important;\n    }\n\n    #sp-elci-gallery .sp-variant-slide .sp-variant-image-wrap{\n        width:100%;\n        height:430px;\n        min-height:430px;\n        max-height:430px;\n        aspect-ratio:auto;\n        flex:0 0 430px;\n        order:initial;\n        overflow:visible;\n        display:flex;\n        align-items:center;\n        justify-content:center;\n        position:relative;\n    }\n\n    #sp-elci-gallery .sp-variant-slide .sp-variant-image-wrap img{\n        width:100%;\n        height:100%;\n        object-fit:contain;\n        display:block;\n        transform:\n            translate(var(--image-x-desktop), var(--image-y-desktop))\n            scale(var(--image-scale-desktop));\n        transform-origin:center center;\n    }\n\n    #sp-elci-gallery .sp-variant-slide .sp-side-info{\n        width:100%;\n        max-width:none;\n        height:auto;\n        min-height:220px;\n        padding:0 8px 0 0;\n        margin:0;\n        text-align:left;\n        display:flex;\n        flex-direction:column;\n        align-items:flex-start;\n        justify-content:center;\n        gap:0;\n        order:initial;\n    }\n\n    #sp-elci-gallery .sp-variant-slide .sp-side-info .sp-slide-title,\n    #sp-elci-gallery .sp-variant-slide .sp-side-info .sp-slide-subtitle{\n        display:block;\n    }\n\n    #sp-elci-gallery .sp-variant-slide .sp-side-info .sp-slide-title{\n        font-size:30px;\n        line-height:1;\n        letter-spacing:1.2px;\n        margin-top:0;\n    }\n\n    #sp-elci-gallery .sp-variant-slide .sp-side-info .sp-slide-subtitle{\n        font-size:12px;\n        line-height:1.35;\n        margin:5px 0 3px;\n    }\n\n    #sp-elci-gallery .sp-variant-slide .sp-side-info .sp-variant-toggle-wrap{\n        margin-top:10px;\n        width:250px;\n        max-width:100%;\n    }\n\n    #sp-elci-gallery .sp-variant-slide .sp-side-info .sp-part-number{\n        display:inline-block;\n        margin:8px 0 0;\n        padding:0;\n        font-size:10px;\n        line-height:1.15;\n        text-align:left;\n    }\n\n    #sp-elci-gallery .sp-variant-slide .sp-side-info .sp-fullscreen-trigger{\n        display:inline-flex;\n        align-self:flex-start;\n        margin:7px 0 0;\n        font-size:9px;\n        padding:6px 11px;\n    }\n\n    \/* Tablet hover-zoom preview sits beside the main image and\n       overlays the information column, matching the reference. *\/\n    #sp-elci-gallery .sp-variant-image-wrap .sp-zoom-preview{\n        left:calc(100% - 28px);\n        top:0;\n        width:78%;\n        height:100%;\n        z-index:80;\n    }\n\n    \/* Keep the full thumbnail cards inside the tablet selector.\n       The cards are 94px tall, so a 78px selector clips their bottoms. *\/\n    #sp-elci-gallery .sp-product-selector{\n        position:relative;\n        z-index:20;\n        margin-top:0;\n        height:100px;\n        min-height:100px;\n        max-height:100px;\n        box-sizing:border-box;\n        overflow:visible !important;\n        align-items:flex-start;\n    }\n\n    #sp-elci-gallery .sp-thumbnails{\n        height:100px;\n        min-height:100px;\n        max-height:100px;\n        overflow-x:auto;\n        overflow-y:visible !important;\n        align-items:flex-start;\n        padding:2px 0 4px;\n    }\n\n    #sp-elci-gallery .sp-thumb{\n        height:94px;\n        min-height:94px;\n        max-height:94px;\n    }\n\n    #sp-elci-gallery .sp-gallery-pagination{\n        margin-top:4px;\n    }\n}\n\n\n\n\/* =========================================================\n   MOBILE \u2014 ONE COMPACT FIXED VIEWING HEIGHT FOR FEATURE + VARIANTS\n   Keeps every slide inside the same reserved frame so switching\n   thumbnails never makes the gallery jump or change height.\n   ========================================================= *\/\n@media (max-width:600px){\n    #sp-elci-gallery .sp-main-view{\n        width:100%;\n        height:440px !important;\n        min-height:440px !important;\n        max-height:440px !important;\n        overflow:visible !important;\n    }\n\n    #sp-elci-gallery .sp-gallery-slide,\n    #sp-elci-gallery .sp-gallery-slide.active{\n        width:100%;\n        height:440px !important;\n        min-height:440px !important;\n        max-height:440px !important;\n        overflow:visible !important;\n    }\n\n    \/* FEATURE \u2014 fixed image + information footprint *\/\n    #sp-elci-gallery .sp-gallery-slide:not(.sp-variant-slide) .sp-main-product{\n        width:100%;\n        height:345px !important;\n        min-height:345px !important;\n        max-height:345px !important;\n        flex:0 0 345px !important;\n        aspect-ratio:auto !important;\n    }\n\n    #sp-elci-gallery .sp-gallery-slide:not(.sp-variant-slide) > .sp-slide-info{\n        width:100%;\n        height:95px !important;\n        min-height:95px !important;\n        max-height:95px !important;\n        flex:0 0 95px !important;\n        margin:0 !important;\n        padding:0 8px !important;\n        overflow:visible !important;\n        position:relative;\n        z-index:20;\n    }\n\n    #sp-elci-gallery .sp-gallery-slide:not(.sp-variant-slide) > .sp-slide-info .sp-feature-fullscreen-trigger{\n        display:inline-flex !important;\n        position:static;\n        margin:6px auto 0 !important;\n        z-index:30;\n    }\n\n    \/* VARIANTS \u2014 title + image + controls use the exact same 440px frame *\/\n    #sp-elci-gallery .sp-variant-slide .sp-variant-layout{\n        width:100%;\n        height:440px !important;\n        min-height:440px !important;\n        max-height:440px !important;\n        display:flex;\n        flex-direction:column;\n        align-items:center;\n        justify-content:flex-start;\n        gap:0;\n        overflow:visible;\n    }\n\n    #sp-elci-gallery .sp-variant-slide .sp-mobile-variant-title{\n        width:100%;\n        height:55px !important;\n        min-height:55px !important;\n        max-height:55px !important;\n        flex:0 0 55px !important;\n        overflow:hidden;\n    }\n\n    #sp-elci-gallery .sp-variant-slide .sp-variant-image-wrap{\n        width:100%;\n        height:265px !important;\n        min-height:265px !important;\n        max-height:265px !important;\n        flex:0 0 265px !important;\n        aspect-ratio:auto !important;\n        overflow:visible;\n    }\n\n    #sp-elci-gallery .sp-variant-slide .sp-side-info{\n        width:100%;\n        height:120px !important;\n        min-height:120px !important;\n        max-height:120px !important;\n        flex:0 0 120px !important;\n        overflow:visible !important;\n        position:relative;\n        z-index:5;\n    }\n\n    \/* Prevent text or controls from creating extra slide height. *\/\n    #sp-elci-gallery .sp-variant-slide .sp-side-info .sp-variant-toggle-wrap{\n        flex:0 0 auto;\n    }\n\n    #sp-elci-gallery .sp-variant-slide .sp-side-info .sp-fullscreen-trigger{\n        display:inline-flex !important;\n        flex:0 0 auto;\n        position:relative;\n        z-index:30;\n        margin-top:5px !important;\n        margin-bottom:2px !important;\n    }\n}\n\n<\/style>\n\n<script>\n(function () {\n    function initSmartPlugELCIGallery() {\n        const gallery = document.getElementById(\"sp-elci-gallery\");\n        if (!gallery || gallery.dataset.initialized === \"true\") return;\n        gallery.dataset.initialized = \"true\";\n\n        const slides = gallery.querySelectorAll(\".sp-gallery-slide\");\n        const thumbs = gallery.querySelectorAll(\".sp-thumb\");\n        const hotspots = gallery.querySelectorAll(\".sp-hotspot\");\n        const pageDots = gallery.querySelectorAll(\".sp-page-dot\");\n        const variantSlides = gallery.querySelectorAll(\".sp-variant-slide\");\n\n        \/* Hotspots use CSS breakpoint-specific coordinates. *\/\n\n        const thumbnailContainer = gallery.querySelector(\".sp-thumbnails\");\n        const thumbPrev = gallery.querySelector(\".sp-thumb-prev\");\n        const thumbNext = gallery.querySelector(\".sp-thumb-next\");\n\n        if (!slides.length || !thumbs.length) return;\n\n        let currentIndex = 0;\n\n        \/* =================================================\n           IMAGE-AWARE RESPONSIVE HOTSPOT POSITIONING\n           -------------------------------------------------\n           Each hotspot keeps one canonical percentage anchor.\n           JavaScript maps that anchor onto the actual rendered\n           object-fit: contain image, including the image's\n           responsive scale and X\/Y translation.\n           ================================================= *\/\n        function getResponsiveMode() {\n            const width = window.innerWidth || document.documentElement.clientWidth || 0;\n\n            if (width <= 600) return \"mobile\";\n            if (width <= 1024) return \"tablet\";\n            if (width <= 1366) return \"laptop\";\n            return \"desktop\";\n        }\n\n        function readCssNumber(element, name, fallback) {\n            if (!element) return fallback;\n\n            const inlineValue = element.style.getPropertyValue(name).trim();\n            const inlineNumber = parseFloat(inlineValue);\n\n            if (Number.isFinite(inlineNumber)) {\n                return inlineNumber;\n            }\n\n            const computedValue = window.getComputedStyle(element)\n                .getPropertyValue(name)\n                .trim();\n            const computedNumber = parseFloat(computedValue);\n\n            return Number.isFinite(computedNumber)\n                ? computedNumber\n                : fallback;\n        }\n\n        function syncFeatureHotspots() {\n            const featureSlide = slides[0];\n            if (!featureSlide) return;\n\n            const product = featureSlide.querySelector(\n                \".sp-main-product.sp-hotspot-image\"\n            );\n            const clip = featureSlide.querySelector(\n                \".sp-main-image-clip\"\n            );\n            const image = featureSlide.querySelector(\n                \".sp-main-image-clip > img\"\n            );\n            const featureHotspots = featureSlide.querySelectorAll(\n                \".sp-hotspot\"\n            );\n\n            if (!product || !clip || !image || !featureHotspots.length) {\n                return;\n            }\n\n            if (!image.naturalWidth || !image.naturalHeight) {\n                return;\n            }\n\n            const clipRect = clip.getBoundingClientRect();\n            const productRect = product.getBoundingClientRect();\n\n            if (\n                !clipRect.width ||\n                !clipRect.height ||\n                !productRect.width ||\n                !productRect.height\n            ) {\n                return;\n            }\n\n            const responsiveMode = getResponsiveMode();\n\n            \/* Existing image settings remain untouched. *\/\n            const imageX = readCssNumber(\n                image,\n                \"--image-x-\" + responsiveMode,\n                readCssNumber(\n                    product,\n                    \"--image-x-\" + responsiveMode,\n                    readCssNumber(product, \"--image-x-desktop\", 0)\n                )\n            );\n\n            const imageY = readCssNumber(\n                image,\n                \"--image-y-\" + responsiveMode,\n                readCssNumber(\n                    product,\n                    \"--image-y-\" + responsiveMode,\n                    readCssNumber(product, \"--image-y-desktop\", 0)\n                )\n            );\n\n            const imageScale = Math.max(\n                0.001,\n                readCssNumber(\n                    image,\n                    \"--image-scale-\" + responsiveMode,\n                    readCssNumber(\n                        product,\n                        \"--image-scale-\" + responsiveMode,\n                        readCssNumber(product, \"--image-scale-desktop\", 1)\n                    )\n                )\n            );\n\n            const imageRatio =\n                image.naturalWidth \/ image.naturalHeight;\n\n            const containerRatio =\n                clipRect.width \/ clipRect.height;\n\n            let containedWidth;\n            let containedHeight;\n\n            \/* Match object-fit: contain before the custom transform. *\/\n            if (imageRatio > containerRatio) {\n                containedWidth = clipRect.width;\n                containedHeight = containedWidth \/ imageRatio;\n            } else {\n                containedHeight = clipRect.height;\n                containedWidth = containedHeight * imageRatio;\n            }\n\n            \/* Match translate(X,Y) scale(S) with a centered origin. *\/\n            const renderedWidth = containedWidth * imageScale;\n            const renderedHeight = containedHeight * imageScale;\n\n            const renderedLeft =\n                (clipRect.width - renderedWidth) \/ 2 + imageX;\n\n            const renderedTop =\n                (clipRect.height - renderedHeight) \/ 2 + imageY;\n\n            featureHotspots.forEach(function (hotspot) {\n                const top = readCssNumber(hotspot, \"--top\", 50);\n                const left = readCssNumber(hotspot, \"--left\", 50);\n                const hotspotX = readCssNumber(hotspot, \"--hotspot-x\", 0);\n                const hotspotY = readCssNumber(hotspot, \"--hotspot-y\", 0);\n\n                if (!Number.isFinite(top) || !Number.isFinite(left)) {\n                    return;\n                }\n\n                const xInProduct =\n                    (clipRect.left - productRect.left) +\n                    renderedLeft +\n                    (renderedWidth * left \/ 100) +\n                    hotspotX;\n\n                const yInProduct =\n                    (clipRect.top - productRect.top) +\n                    renderedTop +\n                    (renderedHeight * top \/ 100) +\n                    hotspotY;\n\n                hotspot.style.setProperty(\n                    \"--sp-hotspot-left-px\",\n                    xInProduct + \"px\"\n                );\n\n                hotspot.style.setProperty(\n                    \"--sp-hotspot-top-px\",\n                    yInProduct + \"px\"\n                );\n\n                hotspot.setAttribute(\"data-responsive-zone\", responsiveMode);\n            });\n        }\n\n        let hotspotSyncFrame = null;\n\n        function scheduleFeatureHotspotSync() {\n            if (hotspotSyncFrame) {\n                cancelAnimationFrame(hotspotSyncFrame);\n            }\n\n            hotspotSyncFrame = requestAnimationFrame(function () {\n                hotspotSyncFrame = null;\n                syncFeatureHotspots();\n            });\n        }\n\n        function setupFeatureHotspotObservers() {\n            const featureImage = slides[0]\n                ? slides[0].querySelector(\".sp-main-image-clip > img\")\n                : null;\n            const featureClip = slides[0]\n                ? slides[0].querySelector(\".sp-main-image-clip\")\n                : null;\n            const featureProduct = slides[0]\n                ? slides[0].querySelector(\".sp-main-product.sp-hotspot-image\")\n                : null;\n\n            if (featureImage) {\n                featureImage.addEventListener(\"load\", scheduleFeatureHotspotSync);\n            }\n\n            window.addEventListener(\"resize\", scheduleFeatureHotspotSync, { passive: true });\n            window.addEventListener(\"orientationchange\", scheduleFeatureHotspotSync, { passive: true });\n\n            if (window.ResizeObserver) {\n                const observer = new ResizeObserver(scheduleFeatureHotspotSync);\n                if (featureClip) observer.observe(featureClip);\n                if (featureProduct) observer.observe(featureProduct);\n                if (featureImage) observer.observe(featureImage);\n            }\n\n            if (window.jQuery) {\n                jQuery(document).on(\n                    \"found_variation.spDockLiftHotspot reset_data.spDockLiftHotspot\",\n                    \"form.variations_form\",\n                    function () {\n                        scheduleFeatureHotspotSync();\n                    }\n                );\n            }\n        }\n\n        function showSlide(index) {\n            if (index < 0) index = slides.length - 1;\n            if (index >= slides.length) index = 0;\n\n            slides.forEach(function (slide, i) {\n                slide.classList.toggle(\"active\", i === index);\n            });\n\n            thumbs.forEach(function (thumb) {\n                const target = parseInt(thumb.getAttribute(\"data-target\"), 10);\n                thumb.classList.toggle(\"active\", target === index);\n            });\n\n            pageDots.forEach(function (dot, i) {\n                dot.classList.toggle(\"active\", i === index);\n            });\n\n            currentIndex = index;\n\n            if (index === 0) {\n                updateFeatureText();\n            } else {\n                const activeVariant = slides[index];\n                if (activeVariant) {\n                    updateVariantText(activeVariant, activeVariant.dataset.currentView || activeVariant.dataset.view || activeVariant.dataset.variant || \"\");\n                }\n            }\n\n            const activeThumb = Array.from(thumbs).find(function (thumb) {\n                return parseInt(thumb.getAttribute(\"data-target\"), 10) === index;\n            });\n\n            if (activeThumb && thumbnailContainer) {\n                const isMobile = window.matchMedia(\"(max-width: 600px)\").matches;\n\n                if (isMobile) {\n                    \/\/ Mobile\/laptop: always follow the active thumbnail and keep it centered.\n                    const targetLeft = activeThumb.offsetLeft\n                        - (thumbnailContainer.clientWidth \/ 2)\n                        + (activeThumb.offsetWidth \/ 2);\n                    const maxScroll = Math.max(0, thumbnailContainer.scrollWidth - thumbnailContainer.clientWidth);\n                    const clampedLeft = Math.max(0, Math.min(maxScroll, targetLeft));\n\n                    thumbnailContainer.scrollTo({\n                        left: clampedLeft,\n                        behavior: \"smooth\"\n                    });\n                } else {\n                    const left = activeThumb.offsetLeft;\n                    const right = left + activeThumb.offsetWidth;\n                    const viewLeft = thumbnailContainer.scrollLeft;\n                    const viewRight = viewLeft + thumbnailContainer.clientWidth;\n\n                    const targetLeft = left - (thumbnailContainer.clientWidth \/ 2) + (activeThumb.offsetWidth \/ 2);\n                const maxScroll = Math.max(0, thumbnailContainer.scrollWidth - thumbnailContainer.clientWidth);\n                const clampedLeft = Math.max(0, Math.min(maxScroll, targetLeft));\n\n                if (left < viewLeft || right > viewRight || Math.abs(clampedLeft - viewLeft) > 2) {\n                    thumbnailContainer.scrollTo({\n                        left: clampedLeft,\n                        behavior: \"smooth\"\n                    });\n                }\n                }\n            }\n\n            hotspots.forEach(function (hotspot) {\n                hotspot.classList.remove(\"is-open\");\n            });\n\n            scheduleFeatureHotspotSync();\n        }\n\n        thumbs.forEach(function (thumb) {\n            thumb.addEventListener(\"click\", function (event) {\n                event.preventDefault();\n                event.stopPropagation();\n\n                const target = parseInt(thumb.getAttribute(\"data-target\"), 10);\n                if (!isNaN(target)) showSlide(target);\n            });\n        });\n\n        window.addEventListener(\"resize\", function () {\n            if (!thumbnailContainer || !window.matchMedia(\"(max-width: 1366px)\").matches) return;\n            const activeThumb = thumbnailContainer.querySelector(\".sp-thumb.active\");\n            if (!activeThumb) return;\n\n            window.requestAnimationFrame(function () {\n                const left = activeThumb.offsetLeft;\n                const targetLeft = left - (thumbnailContainer.clientWidth \/ 2) + (activeThumb.offsetWidth \/ 2);\n                const maxScroll = Math.max(0, thumbnailContainer.scrollWidth - thumbnailContainer.clientWidth);\n                thumbnailContainer.scrollLeft = Math.max(0, Math.min(maxScroll, targetLeft));\n            });\n        });\n\n        pageDots.forEach(function (dot) {\n            dot.addEventListener(\"click\", function (event) {\n                event.preventDefault();\n                event.stopPropagation();\n\n                const target = parseInt(dot.getAttribute(\"data-page\"), 10);\n                if (!isNaN(target)) showSlide(target);\n            });\n        });\n\n        function scrollThumbnailStrip(direction) {\n            if (!thumbnailContainer || !window.matchMedia(\"(max-width: 1366px)\").matches) return;\n\n            const items = Array.from(thumbnailContainer.querySelectorAll(\".sp-thumb\"));\n            if (!items.length) return;\n\n            let activeIndex = items.findIndex(function (thumb) {\n                return thumb.classList.contains(\"active\");\n            });\n\n            if (activeIndex < 0) activeIndex = 0;\n\n            let targetIndex = activeIndex + (direction > 0 ? 1 : -1);\n            if (targetIndex < 0) targetIndex = items.length - 1;\n            if (targetIndex >= items.length) targetIndex = 0;\n\n            items[targetIndex].click();\n\n            window.requestAnimationFrame(function () {\n                const item = items[targetIndex];\n                const targetLeft = item.offsetLeft - (thumbnailContainer.clientWidth \/ 2) + (item.offsetWidth \/ 2);\n                const maxScroll = Math.max(0, thumbnailContainer.scrollWidth - thumbnailContainer.clientWidth);\n                thumbnailContainer.scrollTo({\n                    left: Math.max(0, Math.min(maxScroll, targetLeft)),\n                    behavior: \"smooth\"\n                });\n            });\n        }\n\n        if (thumbPrev) {\n            thumbPrev.addEventListener(\"click\", function (event) {\n                event.preventDefault();\n                event.stopPropagation();\n                scrollThumbnailStrip(-1);\n            });\n        }\n\n        if (thumbNext) {\n            thumbNext.addEventListener(\"click\", function (event) {\n                event.preventDefault();\n                event.stopPropagation();\n                scrollThumbnailStrip(1);\n            });\n        }\n\n        hotspots.forEach(function (hotspot) {\n            hotspot.addEventListener(\"click\", function (event) {\n                event.preventDefault();\n                event.stopPropagation();\n\n                const isOpen = hotspot.classList.contains(\"is-open\");\n\n                hotspots.forEach(function (item) {\n                    item.classList.remove(\"is-open\");\n                });\n\n                if (!isOpen) hotspot.classList.add(\"is-open\");\n            });\n        });\n\n        document.addEventListener(\"click\", function (event) {\n            if (!gallery.contains(event.target)) {\n                hotspots.forEach(function (hotspot) {\n                    hotspot.classList.remove(\"is-open\");\n                });\n            }\n        });\n\n        \/* =================================================\n           DYNAMIC EDITABLE TITLE \/ SUBTITLE \/ PART NUMBER\n           ================================================= *\/\n\n        function getViewDataAttributeName(view, field) {\n            if (!view) return \"data-\" + field;\n            return \"data-\" + view.replace(\/\\s+\/g, \"-\") + \"-\" + field;\n        }\n\n        function getViewCopy(slide, view) {\n            if (!slide) {\n                return {\n                    title: \"\",\n                    subtitle: \"\",\n                    partNumber: \"\"\n                };\n            }\n\n            const variationView = view || \"\";\n            const isVariation = slide.classList.contains(\"sp-variant-slide\");\n\n            if (isVariation && variationView) {\n                return {\n                    title: slide.getAttribute(getViewDataAttributeName(variationView, \"title\")) || \"\",\n                    subtitle: slide.getAttribute(getViewDataAttributeName(variationView, \"subtitle\")) || \"\",\n                    partNumber: slide.getAttribute(getViewDataAttributeName(variationView, \"part-number\")) || \"\"\n                };\n            }\n\n            return {\n                title: slide.getAttribute(\"data-title\") || \"\",\n                subtitle: slide.getAttribute(\"data-subtitle\") || \"\",\n                partNumber: slide.getAttribute(\"data-part-number\") || \"\"\n            };\n        }\n\n        function updateVariantText(slide, view) {\n            const copy = getViewCopy(slide, view);\n            const mobileTitle = slide.querySelector(\".sp-mobile-variant-title .sp-slide-title\");\n            const mobileSubtitle = slide.querySelector(\".sp-mobile-variant-title .sp-slide-subtitle\");\n            const desktopTitle = slide.querySelector(\".sp-side-info .sp-slide-title\");\n            const desktopSubtitle = slide.querySelector(\".sp-side-info .sp-slide-subtitle\");\n            const partNumber = slide.querySelector(\".sp-part-number-value\");\n            if (mobileTitle) mobileTitle.textContent = copy.title;\n            if (mobileSubtitle) mobileSubtitle.textContent = copy.subtitle;\n            if (desktopTitle) desktopTitle.textContent = copy.title;\n            if (desktopSubtitle) desktopSubtitle.textContent = copy.subtitle;\n            if (partNumber) partNumber.textContent = copy.partNumber;\n        }\n\n        function updateFeatureText() {\n            const featureSlide = slides[0];\n            if (!featureSlide) return;\n\n            const copy = getViewCopy(featureSlide, \"\");\n            const title = featureSlide.querySelector(\".sp-slide-info .sp-slide-title\");\n            const subtitle = featureSlide.querySelector(\".sp-slide-info .sp-slide-subtitle\");\n            const partNumber = featureSlide.querySelector(\".sp-part-number-value\");\n            if (title) title.textContent = copy.title;\n            if (subtitle) subtitle.textContent = copy.subtitle;\n            if (partNumber) partNumber.textContent = copy.partNumber;\n        }\n\n        \/* =================================================\n           VARIATION IMAGE \/ EDITABLE COPY\n           Each variation uses the existing state-based\n           configuration\/toggle architecture.\n           ================================================= *\/\n\n        variantSlides.forEach(function (slide) {\n            const image = slide.querySelector(\".sp-variant-image\");\n            if (!image) return;\n\n            const initialView = slide.dataset.view || slide.dataset.variant || \"\";\n            slide.dataset.currentView = initialView;\n\n            function updateImage(selectedView) {\n                const view = selectedView || slide.dataset.currentView || initialView;\n                const source = slide.getAttribute(\"data-\" + view) || \"\";\n\n                slide.dataset.currentView = view;\n                updateVariantText(slide, view);\n                image.style.opacity = \"0\";\n\n                window.setTimeout(function () {\n                    if (source) {\n                        image.src = source;\n                        image.classList.remove(\"is-empty\");\n                    } else {\n                        image.removeAttribute(\"src\");\n                        image.classList.add(\"is-empty\");\n                    }\n\n                    image.style.opacity = \"1\";\n\n                    slide.querySelectorAll(\".sp-variant-toggle-btn\").forEach(function (button) {\n                        button.classList.toggle(\"active\", button.dataset.view === view);\n                    });\n\n                    const showingValue = slide.querySelector(\".sp-variant-showing-value\");\n                    if (showingValue) {\n                        const activeButton = slide.querySelector('.sp-variant-toggle-btn[data-view=\"' + view + '\"]');\n                        showingValue.textContent = activeButton\n                            ? activeButton.textContent.trim()\n                            : view.charAt(0).toUpperCase() + view.slice(1);\n                    }\n\n                    const existingModal = gallery.querySelector(\".sp-fullscreen-modal\");\n                    if (existingModal && existingModal.classList.contains(\"is-open\")) {\n                        refreshFullscreenModal();\n                    }\n                }, 90);\n            }\n\n            slide._setView = function (selectedView) {\n                slide.dataset.currentView = selectedView || initialView;\n                updateImage(slide.dataset.currentView);\n            };\n\n            slide.querySelectorAll(\".sp-variant-toggle-btn\").forEach(function (button) {\n                button.addEventListener(\"click\", function (event) {\n                    event.preventDefault();\n                    event.stopPropagation();\n\n                    const selectedView = button.dataset.view || initialView;\n                    slide._setView(selectedView);\n                });\n            });\n\n            slide._setView(initialView);\n        });\n\n        \/* =================================================\n           VIEW FULL SCREEN + ACCURATE HOVER ZOOM\n           ================================================= *\/\n           \n        const fullscreenModal = document.createElement(\"div\");\n        fullscreenModal.className = \"sp-fullscreen-modal\";\n        fullscreenModal.setAttribute(\"aria-hidden\", \"true\");\n        fullscreenModal.innerHTML = `\n            <div class=\"sp-fullscreen-dialog\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Product full screen view\">\n                <button type=\"button\" class=\"sp-fullscreen-close\" aria-label=\"Close full screen\">&times;<\/button>\n                <div class=\"sp-fullscreen-image-area\">\n                    <img class=\"sp-fullscreen-image\" alt=\"\">\n                <\/div>\n                <div class=\"sp-fullscreen-info\">\n                    <div class=\"sp-fullscreen-title\"><\/div>\n                    <div class=\"sp-fullscreen-subtitle\"><\/div>\n                    <div class=\"sp-fullscreen-part-number\">PART NUMBER: <strong class=\"sp-fullscreen-part-number-value\"><\/strong><\/div>\n                    <div class=\"sp-fullscreen-variant-toggle-wrap\">\n                        <div class=\"sp-fullscreen-variant-label\">SELECT VIEW<\/div>\n                        <div class=\"sp-fullscreen-variant-toggle\" aria-label=\"Variation configuration\"><\/div>\n                    <\/div>\n                    <div class=\"sp-fullscreen-thumbnails\"><\/div>\n                <\/div>\n            <\/div>\n        `;\n\n        gallery.appendChild(fullscreenModal);\n\n        const fullscreenImage = fullscreenModal.querySelector(\".sp-fullscreen-image\");\n        const fullscreenTitle = fullscreenModal.querySelector(\".sp-fullscreen-title\");\n        const fullscreenSubtitle = fullscreenModal.querySelector(\".sp-fullscreen-subtitle\");\n        const fullscreenPartNumber = fullscreenModal.querySelector(\".sp-fullscreen-part-number-value\");\n        const fullscreenThumbs = fullscreenModal.querySelector(\".sp-fullscreen-thumbnails\");\n        const fullscreenVariantToggle = fullscreenModal.querySelector(\".sp-fullscreen-variant-toggle\");\n        const fullscreenClose = fullscreenModal.querySelector(\".sp-fullscreen-close\");\n\n        \/* =================================================\n           FEATURE IMAGE \u2014 NORMAL VIEW \/ FULL SCREEN VIEW\n           Normal view and full screen use separate images.\n           ================================================= *\/\n        const FEATURE_FULLSCREEN_IMAGE = \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Dock-Lift-Kits.png\";\n\n        function getActiveGalleryImage() {\n            const activeSlide = slides[currentIndex];\n            if (!activeSlide) return null;\n\n            if (currentIndex === 0) {\n                return activeSlide.querySelector(\".sp-main-image-clip img\");\n            }\n\n            return activeSlide.querySelector(\".sp-variant-image\");\n        }\n\n        function getActiveGalleryCopy() {\n            const activeSlide = slides[currentIndex];\n\n            if (!activeSlide) {\n                return {\n                    title: \"\",\n                    description: \"\",\n                    partNumber: \"\"\n                };\n            }\n\n            const view = activeSlide.classList.contains(\"sp-variant-slide\")\n                ? (activeSlide.dataset.currentView || activeSlide.dataset.view || activeSlide.dataset.variant || \"\")\n                : \"\";\n\n            const copy = getViewCopy(activeSlide, view);\n\n            return {\n                title: copy.title,\n                description: copy.subtitle,\n                partNumber: copy.partNumber\n            };\n        }\n\n        function applyFullscreenSettings() {\n            const dialog = fullscreenModal.querySelector(\".sp-fullscreen-dialog\");\n            if (!dialog) return;\n\n            dialog.style.setProperty(\"--sp-popup-width-desktop\", \"1100px\");\n            dialog.style.setProperty(\"--sp-popup-height-desktop\", \"520px\");\n            dialog.style.setProperty(\"--sp-popup-width-mobile\", \"calc(100vw - 16px)\");\n            dialog.style.setProperty(\"--sp-popup-height-mobile\", \"90vh\");\n            dialog.style.setProperty(\"--sp-popup-image-area-height-mobile\", \"54vh\");\n\n            fullscreenImage.style.setProperty(\"--sp-popup-image-width-desktop\", \"100%\");\n            fullscreenImage.style.setProperty(\"--sp-popup-image-height-desktop\", \"100%\");\n            fullscreenImage.style.setProperty(\"--sp-popup-image-x-desktop\", \"0px\");\n            fullscreenImage.style.setProperty(\"--sp-popup-image-y-desktop\", \"0px\");\n            fullscreenImage.style.setProperty(\"--sp-popup-image-width-mobile\", \"100%\");\n            fullscreenImage.style.setProperty(\"--sp-popup-image-height-mobile\", \"100%\");\n            fullscreenImage.style.setProperty(\"--sp-popup-image-x-mobile\", \"0px\");\n            fullscreenImage.style.setProperty(\"--sp-popup-image-y-mobile\", \"0px\");\n        }\n\n        function refreshFullscreenModal() {\n            const activeImage = getActiveGalleryImage();\n            if (!activeImage || !activeImage.src) return;\n\n            const copy = getActiveGalleryCopy();\n            const activeSlide = slides[currentIndex];\n            const isVariation = currentIndex >= 1 && activeSlide;\n            const view = isVariation\n                ? (activeSlide.dataset.currentView || activeSlide.dataset.view || activeSlide.dataset.variant || \"\")\n                : \"\";\n\n            const viewImage = isVariation\n                ? (activeSlide.getAttribute(\"data-\" + view) || \"\")\n                : FEATURE_FULLSCREEN_IMAGE;\n\n            applyFullscreenSettings();\n\n            fullscreenImage.src = viewImage || activeImage.currentSrc || activeImage.src;\n            fullscreenImage.alt = copy.title || activeImage.alt || \"\";\n            fullscreenTitle.textContent = copy.title || \"\";\n            fullscreenSubtitle.textContent = copy.description || \"\";\n\n            if (fullscreenPartNumber) {\n                fullscreenPartNumber.textContent = isVariation ? (copy.partNumber || \"\") : \"\";\n                fullscreenPartNumber.parentElement.style.display = isVariation ? \"\" : \"none\";\n            }\n\n            const isVariationSlide = currentIndex >= 1 && activeSlide && activeSlide.classList.contains(\"sp-variant-slide\");\n            fullscreenModal.classList.toggle(\n                \"sp-second-thumbnail-no-controls\",\n                currentIndex === 1\n            );\n\n            const fullscreenVariantToggleWrap = fullscreenModal.querySelector(\".sp-fullscreen-variant-toggle-wrap\");\n\n            if (fullscreenVariantToggle && fullscreenVariantToggleWrap) {\n                const sourceButtons = isVariationSlide\n                    ? Array.from(activeSlide.querySelectorAll(\".sp-variant-toggle-btn\"))\n                    : [];\n\n                fullscreenVariantToggle.innerHTML = \"\";\n                fullscreenVariantToggleWrap.classList.toggle(\n                    \"is-visible\",\n                    !!isVariationSlide && sourceButtons.length > 0\n                );\n\n                if (isVariationSlide && sourceButtons.length > 0) {\n                    sourceButtons.forEach(function (sourceButton) {\n                        const button = document.createElement(\"button\");\n                        button.type = \"button\";\n                        button.className = \"sp-fullscreen-variant-btn\";\n                        button.textContent = sourceButton.textContent.trim();\n                        button.dataset.view = sourceButton.dataset.view || \"\";\n                        button.classList.toggle(\"active\", button.dataset.view === view);\n\n                        button.addEventListener(\"click\", function (event) {\n                            event.preventDefault();\n                            event.stopPropagation();\n\n                            const selectedView = button.dataset.view || view;\n                            activeSlide.dataset.currentView = selectedView;\n\n                            if (typeof activeSlide._setView === \"function\") {\n                                activeSlide._setView(selectedView);\n                            }\n\n                            window.setTimeout(refreshFullscreenModal, 110);\n                        });\n\n                        fullscreenVariantToggle.appendChild(button);\n                    });\n\n                    fullscreenVariantToggle.setAttribute(\n                        \"aria-label\",\n                        activeSlide.dataset.variant || \"Variation configuration\"\n                    );\n                }\n            }\n\n            fullscreenThumbs.innerHTML = \"\";\n\n            thumbs.forEach(function (thumb) {\n                const sourceImage = thumb.querySelector(\"img\");\n                if (!sourceImage) return;\n\n                const modalThumb = document.createElement(\"button\");\n                modalThumb.type = \"button\";\n                modalThumb.className = \"sp-fullscreen-thumb\";\n                modalThumb.setAttribute(\"aria-label\", thumb.getAttribute(\"aria-label\") || \"View product image\");\n\n                const modalThumbImage = document.createElement(\"img\");\n                modalThumbImage.src = sourceImage.currentSrc || sourceImage.src;\n                modalThumbImage.alt = sourceImage.alt || \"\";\n                modalThumb.appendChild(modalThumbImage);\n\n                const thumbTarget = parseInt(thumb.getAttribute(\"data-target\"), 10);\n                if (thumbTarget === currentIndex) modalThumb.classList.add(\"active\");\n\n                modalThumb.addEventListener(\"click\", function (event) {\n                    event.preventDefault();\n                    event.stopPropagation();\n                    showSlide(thumbTarget);\n                    window.setTimeout(refreshFullscreenModal, 110);\n                });\n\n                fullscreenThumbs.appendChild(modalThumb);\n            });\n\n        }\n\n        let fullscreenScrollTop = 0;\n        let fullscreenScrollLeft = 0;\n        let fullscreenBodyPaddingRight = \"\";\n\n        function openFullscreenModal() {\n            refreshFullscreenModal();\n\n            fullscreenScrollTop = window.scrollY || window.pageYOffset || 0;\n            fullscreenScrollLeft = window.scrollX || window.pageXOffset || 0;\n            fullscreenBodyPaddingRight = document.body.style.paddingRight;\n\n            const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n            if (scrollbarWidth > 0) {\n                document.body.style.paddingRight = scrollbarWidth + \"px\";\n            }\n\n            fullscreenModal.classList.add(\"is-open\");\n            fullscreenModal.setAttribute(\"aria-hidden\", \"false\");\n            document.body.style.overflow = \"hidden\";\n        }\n\n        function closeFullscreenModal() {\n            fullscreenModal.classList.remove(\"is-open\");\n            fullscreenModal.setAttribute(\"aria-hidden\", \"true\");\n            document.body.style.overflow = \"\";\n            document.body.style.paddingRight = fullscreenBodyPaddingRight;\n\n            window.scrollTo({\n                top: fullscreenScrollTop,\n                left: fullscreenScrollLeft,\n                behavior: \"auto\"\n            });\n        }\n\n        fullscreenClose.addEventListener(\"click\", function (event) {\n            event.preventDefault();\n            closeFullscreenModal();\n        });\n\n        fullscreenModal.addEventListener(\"click\", function (event) {\n            if (event.target === fullscreenModal) closeFullscreenModal();\n        });\n\n        document.addEventListener(\"keydown\", function (event) {\n            if (event.key === \"Escape\" && fullscreenModal.classList.contains(\"is-open\")) {\n                closeFullscreenModal();\n            }\n        });\n\n        function addFeatureFullscreenButton() {\n            const featureSlide = slides[0];\n            if (!featureSlide || featureSlide.classList.contains(\"sp-variant-slide\")) return;\n\n            const button = featureSlide.querySelector(\".sp-feature-fullscreen-trigger\");\n            if (!button || button.dataset.bound === \"true\") return;\n\n            button.dataset.bound = \"true\";\n            button.addEventListener(\"click\", function (event) {\n                event.preventDefault();\n                event.stopPropagation();\n                openFullscreenModal();\n            });\n        }\n\n        function addFullscreenButtons() {\n            variantSlides.forEach(function (slide) {\n                const imageWrap = slide.querySelector(\".sp-variant-image-wrap\");\n                if (!imageWrap || slide.querySelector(\".sp-fullscreen-trigger\")) return;\n\n                const button = document.createElement(\"button\");\n                button.type = \"button\";\n                button.className = \"sp-fullscreen-trigger\";\n                button.textContent = \"View Full Screen\";\n                button.addEventListener(\"click\", function (event) {\n                    event.preventDefault();\n                    event.stopPropagation();\n                    openFullscreenModal();\n                });\n\n                const sideInfo = slide.querySelector(\".sp-side-info\");\n\n                if (sideInfo) {\n                    const partNumber = sideInfo.querySelector(\".sp-part-number\");\n                    if (partNumber) {\n                        partNumber.insertAdjacentElement(\"afterend\", button);\n                    } else {\n                        sideInfo.appendChild(button);\n                    }\n                } else {\n                    imageWrap.appendChild(button);\n                }\n            });\n        }\n\n        function setupHoverZoom() {\n            variantSlides.forEach(function (slide) {\n                const imageWrap = slide.querySelector(\".sp-variant-image-wrap\");\n                const image = slide.querySelector(\".sp-variant-image\");\n                if (!imageWrap || !image || imageWrap.dataset.zoomInitialized === \"true\") return;\n\n                imageWrap.dataset.zoomInitialized = \"true\";\n\n                const preview = document.createElement(\"div\");\n                preview.className = \"sp-zoom-preview\";\n\n                const previewImage = document.createElement(\"img\");\n                previewImage.alt = \"\";\n                preview.appendChild(previewImage);\n                imageWrap.appendChild(preview);\n\n                const ZOOM_FACTOR = 2;\n\n                function syncPreviewImage() {\n                    const source = image.currentSrc || image.src;\n                    if (source) previewImage.src = source;\n\n                    const imageRect = image.getBoundingClientRect();\n                    if (imageRect.width && imageRect.height) {\n                        previewImage.style.width = (imageRect.width * ZOOM_FACTOR) + \"px\";\n                        previewImage.style.height = (imageRect.height * ZOOM_FACTOR) + \"px\";\n                    }\n                }\n\n                function updatePreviewPosition(event) {\n                    if (window.innerWidth <= 600) return;\n\n                    const wrapRect = imageWrap.getBoundingClientRect();\n                    const previewRect = preview.getBoundingClientRect();\n\n                    if (!wrapRect.width || !wrapRect.height || !previewRect.width || !previewRect.height) return;\n\n                    const x = Math.max(0, Math.min(1, (event.clientX - wrapRect.left) \/ wrapRect.width));\n                    const y = Math.max(0, Math.min(1, (event.clientY - wrapRect.top) \/ wrapRect.height));\n\n                    const imageWidth = imageRectWidth();\n                    const imageHeight = imageRectHeight();\n\n                    const maxLeft = Math.max(0, imageWidth - previewRect.width);\n                    const maxTop = Math.max(0, imageHeight - previewRect.height);\n\n                    previewImage.style.left = (-x * maxLeft) + \"px\";\n                    previewImage.style.top = (-y * maxTop) + \"px\";\n                }\n\n                function imageRectWidth() {\n                    return parseFloat(previewImage.style.width) || imageWrap.getBoundingClientRect().width * ZOOM_FACTOR;\n                }\n\n                function imageRectHeight() {\n                    return parseFloat(previewImage.style.height) || imageWrap.getBoundingClientRect().height * ZOOM_FACTOR;\n                }\n\n                image.addEventListener(\"load\", function () {\n                    syncPreviewImage();\n                });\n\n                syncPreviewImage();\n\n                imageWrap.addEventListener(\"mouseenter\", function (event) {\n                    if (window.innerWidth <= 600) return;\n                    syncPreviewImage();\n                    imageWrap.classList.add(\"sp-zoom-active\");\n                    updatePreviewPosition(event);\n                });\n\n                imageWrap.addEventListener(\"mouseleave\", function () {\n                    imageWrap.classList.remove(\"sp-zoom-active\");\n                });\n\n                imageWrap.addEventListener(\"mousemove\", function (event) {\n                    updatePreviewPosition(event);\n                });\n\n                window.addEventListener(\"resize\", function () {\n                    if (imageWrap.classList.contains(\"sp-zoom-active\")) {\n                        syncPreviewImage();\n                    }\n                });\n            });\n        }\n\n        function centerActiveMobileThumbnail() {\n            if (!thumbnailContainer || !window.matchMedia(\"(max-width: 600px)\").matches) return;\n            const activeThumb = thumbnailContainer.querySelector(\".sp-thumb.active\");\n            if (!activeThumb) return;\n\n            const targetLeft = activeThumb.offsetLeft\n                - (thumbnailContainer.clientWidth \/ 2)\n                + (activeThumb.offsetWidth \/ 2);\n\n            thumbnailContainer.scrollTo({\n                left: Math.max(0, targetLeft),\n                behavior: \"auto\"\n            });\n        }\n\n        window.addEventListener(\"resize\", function () {\n            window.requestAnimationFrame(centerActiveMobileThumbnail);\n        });\n\n        setupFeatureHotspotObservers();\n        scheduleFeatureHotspotSync();\n\n        addFeatureFullscreenButton();\n        addFullscreenButtons();\n        setupHoverZoom();\n\n        \/* WooCommerce variation compatibility *\/\n        if (window.jQuery) {\n            jQuery(document).on(\n                \"found_variation.spELCIGallery\",\n                \"form.variations_form\",\n                function (event, variation) {\n                    if (!variation || !variation.image || !variation.image.src) return;\n\n                    const variationImage = variation.image.src;\n\n                    thumbs.forEach(function (thumb, index) {\n                        const image = thumb.querySelector(\"img\");\n                        if (!image) return;\n\n                        const thumbImage = image.currentSrc || image.src;\n\n                        if (\n                            thumbImage === variationImage ||\n                            thumbImage.includes(variationImage) ||\n                            variationImage.includes(thumbImage)\n                        ) {\n                            showSlide(index);\n                        }\n                    });\n                }\n            );\n        }\n\n        showSlide(0);\n    }\n\n    if (document.readyState === \"loading\") {\n        document.addEventListener(\"DOMContentLoaded\", initSmartPlugELCIGallery);\n    } else {\n        initSmartPlugELCIGallery();\n    }\n\n    if (window.jQuery) {\n        jQuery(window).on(\"elementor\/frontend\/init\", function () {\n            setTimeout(initSmartPlugELCIGallery, 150);\n        });\n    }\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-8fd309a e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child\" data-id=\"8fd309a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9f404ad elementor-widget elementor-widget-heading\" data-id=\"9f404ad\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Dock &amp; Lift Kit\n<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b747897 elementor-widget elementor-widget-text-editor\" data-id=\"b747897\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>The SmartPlug Dock &amp; Lift Kit is designed to provide a safer, more reliable shore power connection by reducing overheating through increased pin and clip surface area, which greatly improves electrical conductivity during high-amperage demand. Its unique plug body shape and push-in design eliminate the need for twisting while ensuring the plug can only be inserted the correct way every time, even in the dark. The kit also features a Multi-Point Locking System, where side clips securely lock the plug into the inlet to eliminate stress on the electrical pins caused by movement of the power cord. Superior Weatherproof Seals, with high-quality gaskets installed in the inlet cover and the interior of the plug body, help prevent moisture penetration for long-lasting performance in demanding marine environments.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-05e630e elementor-widget elementor-widget-button\" data-id=\"05e630e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/dev.smartplug.com\/staging\/where-to-buy\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">WHERE TO BUY<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>SmartPlug Dock &amp; Lift Kit 1 Weatherproof InletProtects the power inlet from moisture and debris. 2 SmartPlug ConnectorProvides a secure, weatherproof power connection. 3 Protective Outlet CoverShields the outlet when not in use. 4 Easy 4-Screw InstallationSimple mounting system makes setup fast and straightforward. 5 Heavy-Duty Power CordDelivers reliable power for everyday use. 6 Cord Storage BagKeeps the cord organized and protected. Dock &amp; Lift Kit View Full Screen Cordset Bag 25ft \/ 50ft Cordset Bag 25ft \/ 50ft PART NUMBER: Vertical You cannot use the Weatherdoor without the Receptacles Vertical You cannot use the Weatherdoor without the Receptacles SELECT VIEW Vertical Horizontal Showing Vertical PART NUMBER: Cordset with marina park power end 50A &#8211; 25ft Cordset with marina park power end 50A &#8211; 25ft SELECT VIEW 25ft 50ft Socket End Showing 25ft PART NUMBER: Stainless &#8211; STEEL 30A Stainless &#8211; STEEL 30A SELECT FINISH Stainless White Black Grey Showing Stainless PART NUMBER: Stainless &#8211; Steel 50A Stainless &#8211; Steel 50A SELECT FINISH Stainless White Black Grey Showing Stainless PART NUMBER: &#10094; Features Cordset Bag Weatherdoor Cordset 30A Inlet 50A Inlet &#10095; Dock &amp; Lift Kit The SmartPlug Dock &amp; Lift Kit is designed to provide a safer, more reliable shore power connection by reducing overheating through increased pin and clip surface area, which greatly improves electrical conductivity during high-amperage demand. Its unique plug body shape and push-in design eliminate the need for twisting while ensuring the plug can only be inserted the correct way every time, even in the dark. The kit also features a Multi-Point Locking System, where side clips securely lock the plug into the inlet to eliminate stress on the electrical pins caused by movement of the power cord. Superior Weatherproof Seals, with high-quality gaskets installed in the inlet cover and the interior of the plug body, help prevent moisture penetration for long-lasting performance in demanding marine environments. WHERE TO BUY<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-13883","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/dev.smartplug.com\/staging\/wp-json\/wp\/v2\/pages\/13883","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dev.smartplug.com\/staging\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/dev.smartplug.com\/staging\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/dev.smartplug.com\/staging\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/dev.smartplug.com\/staging\/wp-json\/wp\/v2\/comments?post=13883"}],"version-history":[{"count":57,"href":"https:\/\/dev.smartplug.com\/staging\/wp-json\/wp\/v2\/pages\/13883\/revisions"}],"predecessor-version":[{"id":19661,"href":"https:\/\/dev.smartplug.com\/staging\/wp-json\/wp\/v2\/pages\/13883\/revisions\/19661"}],"wp:attachment":[{"href":"https:\/\/dev.smartplug.com\/staging\/wp-json\/wp\/v2\/media?parent=13883"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}