{"id":2736,"date":"2025-12-19T21:11:25","date_gmt":"2025-12-19T21:11:25","guid":{"rendered":"https:\/\/dev.smartplug.com\/staging\/?page_id=2736"},"modified":"2026-10-07T13:20:39","modified_gmt":"2026-10-07T13:20:39","slug":"dockside","status":"publish","type":"page","link":"https:\/\/dev.smartplug.com\/staging\/categories\/dockside\/","title":{"rendered":"Dockside"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"2736\" class=\"elementor elementor-2736\">\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-9f58b5b 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=\"9f58b5b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e930429 elementor-widget elementor-widget-heading\" data-id=\"e930429\" 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\">Dockside<\/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-b641889 elementor-hidden-desktop elementor-hidden-laptop elementor-hidden-tablet elementor-hidden-mobile 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=\"b641889\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a53bee1 elementor-widget elementor-widget-html\" data-id=\"a53bee1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div class=\"custom-dock-wrapper\" id=\"custom-dock-wrapper\">\n\n    <div class=\"custom-dock-trigger\" id=\"custom-dock-trigger\">\n        \u2630\n        <span class=\"custom-dock-badge\" id=\"custom-dock-badge\">0<\/span>\n    <\/div>\n\n    <!-- Periodic hint bubble: nudges visitors who haven't opened the dock yet.\n         Pauses while the dock is open\/hovered, and restarts its 5s cycle\n         fresh the moment the dock is closed again. -->\n    <div class=\"custom-dock-hint\" id=\"custom-dock-hint\">\n        <small>Having trouble finding the right product?<\/small>\n        <strong>TRY PRODUCT FILTER<\/strong>\n    <\/div>\n\n    <div class=\"custom-dock-flyout\">\n\n        <div class=\"custom-dock-header-row\">\n            <span class=\"custom-dock-filter-label\">Product Filter<\/span>\n            <button type=\"button\" class=\"custom-dock-reset-btn\" id=\"custom-dock-reset-btn\">\n                Reset Filters\n            <\/button>\n        <\/div>\n\n        \n\n        <!-- Search box: lets someone jump straight to a product by name -->\n        <div class=\"custom-dock-search-row\">\n            <input\n                type=\"text\"\n                id=\"custom-dock-search\"\n                class=\"custom-dock-search-input\"\n                placeholder=\"Search products\u2026\"\n                autocomplete=\"off\"\n            >\n        <\/div>\n\n        <!-- Active filter chips: shows what's selected, removable at a glance -->\n        <div class=\"custom-dock-chips\" id=\"custom-dock-chips\"><\/div>\n\n        <!-- Application -->\n\n        <button class=\"custom-dock-cat-btn\">\n            Application\n        <\/button>\n\n        <div class=\"custom-dock-prod-list\">\n\n            <label class=\"custom-dock-prod-link\">\n                <input type=\"checkbox\" class=\"product-filter\" data-filter=\"application\" value=\"marine\">\n                Marine\n            <\/label>\n\n            <label class=\"custom-dock-prod-link\">\n                <input type=\"checkbox\" class=\"product-filter\" data-filter=\"application\" value=\"rv\">\n                RV\n            <\/label>\n\n            <label class=\"custom-dock-prod-link\">\n                <input type=\"checkbox\" class=\"product-filter\" data-filter=\"application\" value=\"dockside\">\n                Dockside\n            <\/label>\n\n            <label class=\"custom-dock-prod-link\">\n                <input type=\"checkbox\" class=\"product-filter\" data-filter=\"application\" value=\"specialty\">\n                Specialty\n            <\/label>\n\n        <\/div>\n\n        <!-- Product Type -->\n\n        <button class=\"custom-dock-cat-btn\">\n            Product Type\n        <\/button>\n\n        <div class=\"custom-dock-prod-list\">\n\n            <label class=\"custom-dock-prod-link\">\n                <input type=\"checkbox\" class=\"product-filter\" data-filter=\"type\" value=\"connector\">\n                Connector\n            <\/label>\n\n            <label class=\"custom-dock-prod-link\">\n                <input type=\"checkbox\" class=\"product-filter\" data-filter=\"type\" value=\"cordset\">\n                Cordset\n            <\/label>\n\n            <!-- Plain checkbox again \u2014 no nested panel here anymore.\n                 The color sub-filter now lives down in the results section,\n                 right under the \"Matching Products\" header. -->\n            <label class=\"custom-dock-prod-link\">\n                <input type=\"checkbox\" class=\"product-filter\" data-filter=\"type\" value=\"inlet\">\n                Inlet\n            <\/label>\n\n            <label class=\"custom-dock-prod-link\">\n                <input type=\"checkbox\" class=\"product-filter\" data-filter=\"type\" value=\"elci\">\n                ELCI\n            <\/label>\n\n            <label class=\"custom-dock-prod-link\">\n                <input type=\"checkbox\" class=\"product-filter\" data-filter=\"type\" value=\"service-kits\">\n                Service Kits\n            <\/label>\n\n            <label class=\"custom-dock-prod-link\">\n                <input type=\"checkbox\" class=\"product-filter\" data-filter=\"type\" value=\"combokit\">\n                Combokit\n            <\/label>\n\n            <label class=\"custom-dock-prod-link\">\n                <input type=\"checkbox\" class=\"product-filter\" data-filter=\"type\" value=\"data-ports\">\n                Data Ports\n            <\/label>\n\n        <\/div>\n\n        <!-- Amperage -->\n\n        <button class=\"custom-dock-cat-btn\">\n            Amperage\n        <\/button>\n\n        <div class=\"custom-dock-prod-list custom-dock-prod-list-amp\">\n\n            <label class=\"custom-dock-prod-link custom-dock-amp-link\">\n                <input type=\"checkbox\" class=\"product-filter\" data-filter=\"amp\" value=\"15\">\n                <span class=\"custom-dock-amp-text\">15A<small>Standard outlets<\/small><\/span>\n            <\/label>\n\n            <label class=\"custom-dock-prod-link custom-dock-amp-link\">\n                <input type=\"checkbox\" class=\"product-filter\" data-filter=\"amp\" value=\"16\">\n                <span class=\"custom-dock-amp-text\">16A<small>Compact setups<\/small><\/span>\n            <\/label>\n\n            <label class=\"custom-dock-prod-link custom-dock-amp-link\">\n                <input type=\"checkbox\" class=\"product-filter\" data-filter=\"amp\" value=\"30\">\n                <span class=\"custom-dock-amp-text\">30A<small>Most RVs<\/small><\/span>\n            <\/label>\n\n            <label class=\"custom-dock-prod-link custom-dock-amp-link\">\n                <input type=\"checkbox\" class=\"product-filter\" data-filter=\"amp\" value=\"32\">\n                <span class=\"custom-dock-amp-text\">32A<small>Larger boats<\/small><\/span>\n            <\/label>\n\n            <label class=\"custom-dock-prod-link custom-dock-amp-link\">\n                <input type=\"checkbox\" class=\"product-filter\" data-filter=\"amp\" value=\"50\">\n                <span class=\"custom-dock-amp-text\">50A<small>Large RVs &amp; boats<\/small><\/span>\n            <\/label>\n\n        <\/div>\n\n        <div class=\"custom-dock-results\">\n\n            <h4>Matching Products <span id=\"match-count\" class=\"custom-dock-match-count\"><\/span><\/h4>\n\n            <!-- Compact horizontal checkbox row (e.g. Color), no heading text.\n                 Sits right under \"Matching Products\" and above the cards.\n                 Populated by renderSubFilters(). -->\n            <div id=\"sub-filters-section\"><\/div>\n\n            <div id=\"recommended-products\">\n                <p class=\"custom-dock-empty-msg\">Check an attribute above to see matching products.<\/p>\n                <a href=\"https:\/\/dev.smartplug.com\/staging\/product-catalog\/\" class=\"custom-dock-browse-all-btn\"\n                    target=\"_blank\"\n                    rel=\"noopener noreferrer\">\n                    Browse All Products \u2192\n                <\/a>\n            <\/div>\n\n            <div id=\"related-products\"><\/div>\n\n        <\/div>\n\n    <\/div>\n\n<\/div>\n\n<script>\n\n\/\/ Swap these image\/url values for your real product data.\nconst products = [\n    {\n        \"name\": \"28V DC Power\",\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/28v-dc-power\/\",\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/08\/2-Carousel.png\",\n        \"sku\": \"MR28VDC, RF28VDC\",\n        \"attributes\": {\n            \"application\": [],\n            \"type\": [],\n            \"amp\": []\n        }\n    },\n    {\n        \"name\": \"SmartPlug Connector\",\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/smartplug-connector\/\",\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/SmartPlug-Connector.avif\",\n        \"sku\": \"BF30, BF50\",\n        \"attributes\": {\n            \"application\": [\n                \"rv\",\n                \"marine\"\n            ],\n            \"type\": [\n                \"connector\"\n            ],\n            \"amp\": []\n        }\n    },\n    {\n        \"name\": \"SmartPlug Inlet\",\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/smartplug-inlet\/\",\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/Updated-Inlets.png\",\n        \"sku\": \"BM30NT, BM30PB, BM30PG, BM30PW\",\n        \"attributes\": {\n            \"application\": [\n                \"rv\"\n            ],\n            \"type\": [\n                \"inlet\"\n            ],\n            \"amp\": [],\n            \"color\": [\n                \"stainless\",\n                \"white\",\n                \"grey\",\n                \"black\"\n            ]\n        }\n    },\n    {\n        \"name\": \"Angled RV Cordset 30 Amp\",\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/angled-rv-cordset-30-amp\/\",\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/Angled-RV-Cordset-30-Amp.avif\",\n        \"sku\": \"R30303A\",\n        \"attributes\": {\n            \"application\": [\n                \"marine\"\n            ],\n            \"type\": [\n                \"cordset\"\n            ],\n            \"amp\": [\n                \"30\"\n            ]\n        }\n    },\n    {\n        \"name\": \"Angled RV Cordset 50 Amp\",\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/angled-rv-cordset-50-amp\/\",\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/Angled-RV-Cordset-50-Amp.avif\",\n        \"sku\": \"R50503A\",\n        \"attributes\": {\n            \"application\": [\n                \"rv\"\n            ],\n            \"type\": [\n                \"cordset\"\n            ],\n            \"amp\": [\n                \"50\"\n            ]\n        }\n    },\n    {\n        \"name\": \"SmartPlug Combo Kit\",\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/smartplug-combokit\/\",\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/SmartPlug-Combo-Kit-2.avif\",\n        \"sku\": \"B30ASSYNT, B30ASSYPW, B30ASSYPB, B30ASSYPG, B50ASSYNT, B50ASSYPW, B50ASSYPB, B50ASSYPG\",\n        \"attributes\": {\n            \"application\": [\n                \"marine\",\n                \"rv\",\n                \"specialty\"\n            ],\n            \"type\": [\n                \"combokit\"\n            ],\n            \"amp\": [\n                \"15\",\n                \"16\",\n                \"30\",\n                \"32\",\n                \"50\"\n            ]\n        }\n    },\n    {\n        \"name\": \"SmartPlug TV\/Phone\/Internet Inlets\",\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/smartplug-tv-phone-internet-inlets\/\",\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/08\/Triple-Data-Port-2.png\",\n        \"sku\": \"BDBPB, BDBPB, BDBPW, BDBPG, BDBSS\",\n        \"attributes\": {\n            \"application\": [\n                \"marine\",\n                \"rv\"\n            ],\n            \"type\": [\n                \"data-ports\"\n            ],\n            \"amp\": []\n        }\n    },\n    {\n        \"name\": \"SmartPlug Cordset With Push-Type Park Power Connector\",\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/smartplug-cordset-with-push-type-park-power-connector\/\",\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/SmartPlug-Cordset-With-Push-Type-Park-Power-Connector.avif\",\n        \"sku\": \"R30304, R50304\",\n        \"attributes\": {\n            \"application\": [\n                \"rv\"\n            ],\n            \"type\": [\n                \"cordset\",\n                \"push-type\"\n            ],\n            \"amp\": [\n                \"30\",\n                \"50\"\n            ]\n        }\n    },\n    {\n        \"name\": \"SmartPlug Dual Configuration Cordset w\/SmartPlug Connector Shore Power End\",\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/smartplug-dual-configuration-smartplug-cordset-w-smartplug-connector-shore-power-end\/\",\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/SmartPlug-Dual-Configuration-Smartplug-Cordset-w_SmartPlug-Connector-Shore-Power-End.avif\",\n        \"sku\": \"CM30253, CM30503, CM50254, CM50504\",\n        \"attributes\": {\n            \"application\": [\n                \"marine\",\n                \"rv\",\n                \"dockside\",\n                \"specialty\"\n            ],\n            \"type\": [\n                \"cordset\",\n                \"connector\"\n            ],\n            \"amp\": [\n                \"30\",\n                \"50\"\n            ]\n        }\n    },\n    {\n        \"name\": \"15 Amp 115V \/ 30 Amp 125V \u2013 25\u2019 and 50\u2032 Cordset\",\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/15-amp-115v-30-amp-125v-25-and-50%E2%80%B2-cordset\/\",\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/15-Amp-115V-_-30-Amp-125V-%E2%80%93-25-and-50%E2%80%B2-Cordset.avif\",\n        \"sku\": \"C15253, C15503\",\n        \"attributes\": {\n            \"application\": [\n                \"marine\",\n                \"rv\"\n            ],\n            \"type\": [\n                \"cordset\"\n            ],\n            \"amp\": [\n                \"15\",\n                \"30\"\n            ]\n        }\n    },\n    {\n        \"name\": \"15 Amp 115V \/ 30 Amp 125V \u2013 4\u2019 Cordset\",\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/15-amp-115v-30-amp-125v-4-cordset\/\",\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/15-Amp-115V-_-30-Amp-125V-%E2%80%93-4-Cordset.avif\",\n        \"sku\": \"C15043\",\n        \"attributes\": {\n            \"application\": [\n                \"rv\",\n                \"dockside\",\n                \"marine\"\n            ],\n            \"type\": [\n                \"cordset\"\n            ],\n            \"amp\": [\n                \"15\",\n                \"30\"\n            ]\n        }\n    },\n    {\n        \"name\": \"SmartPlug Dual Configuration Cordset w\/ Shore Power Twist-Type Connector\",\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/dual-configuration-smartplug-cordset-w-shore-power-twist-type-connector\/\",\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/SmartPlug-Dual-Configuration-Smartplug-Cordset-w_-Shore-Power-Twist-Type-Connector-2.avif\",\n        \"sku\": \"C30253, C30503W, C50254, C50504\",\n        \"attributes\": {\n            \"application\": [\n                \"marine\",\n                \"specialty\"\n            ],\n            \"type\": [\n                \"cordset\",\n                \"twist-type\"\n            ],\n            \"amp\": [\n                \"30\",\n                \"50\"\n            ]\n        }\n    },\n    {\n        \"name\": \"SmartPlug Harmonized Cord w\/ SmartPlug Boat Side Connector w\/ Blunt End\",\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/harmonized-cord-w-smartplug-boat-side-connector-w-blunt-end\/\",\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/SmartPlug-Harmonized-Cord-w_-SmartPlug-Boat-Side-Connector-w_-Blunt-End.avif\",\n        \"sku\": \"C16123, C16253, C32153, C32253\",\n        \"attributes\": {\n            \"application\": [\n                \"marine\",\n                \"specialty\"\n            ],\n            \"type\": [\n                \"cordset\",\n                \"connector\"\n            ],\n            \"amp\": [\n                \"16\",\n                \"32\"\n            ]\n        }\n    },\n    {\n        \"name\": \"SmartPlug ELCI Sensor & Breaker Combo Kit \u2013 WHITE\",\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/elci-sensor-breaker-combo-kit-white\/\",\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/SmartPlug-ELCI-Sensor-Breaker-Combo-Kit-%E2%80%93-WHITE.avif\",\n        \"sku\": \"ELCISENSORNMW, ELCI30BRKERNMW, ELCI50BRKERNMW\",\n        \"attributes\": {\n            \"application\": [\n                \"marine\"\n            ],\n            \"type\": [\n                \"elci\"\n            ],\n            \"amp\": [\n                \"30\",\n                \"50\"\n            ],\n            \"color\": [\n                \"white\"\n            ]\n        }\n    },\n    {\n        \"name\": \"SmartPlug ELCI Breakers \u2013 WHITE\",\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/elci-breakers-white\/\",\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/SmartPlug-ELCI-Breakers-%E2%80%93-WHITE.avif\",\n        \"sku\": \"ELCIBRKR30PW, ELCIBRKR50PW\",\n        \"attributes\": {\n            \"application\": [\n                \"marine\"\n            ],\n            \"type\": [\n                \"elci\"\n            ],\n            \"amp\": [\n                \"30\",\n                \"50\"\n            ],\n            \"color\": [\n                \"white\"\n            ]\n        }\n    },\n    {\n        \"name\": \"SmartPlug Female Receptacle\",\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/smartplug-female-receptacle\/\",\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/SmartPlug-Female-Receptacle.avif\",\n        \"sku\": \"RF30, RF50\",\n        \"attributes\": {\n            \"application\": [\n                \"rv\",\n                \"marine\"\n            ],\n            \"type\": [\n                \"connector\"\n            ],\n            \"amp\": [\n                \"30\",\n                \"50\"\n            ]\n        }\n    },\n    {\n        \"name\": \"30A SmartPlug Female Connector to 30A Twist-type Male Connector\",\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/30a-smartplug-female-connector-to-30a-twist-type-male-connector\/\",\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/30A-SmartPlug-Female-Connector-to-30A-Twist-type-Male-Connector.avif\",\n        \"sku\": \"C30043\",\n        \"attributes\": {\n            \"application\": [\n                \"rv\",\n                \"marine\"\n            ],\n            \"type\": [\n                \"connector\"\n            ],\n            \"amp\": [\n                \"30\"\n            ]\n        }\n    },\n    {\n        \"name\": \"50A SmartPlug Female Connector to 15A STD Wall Plug Connector\",\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/50a-smartplug-female-connector-to-15a-std-wall-plug-connector\/\",\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/50A-SmartPlug-Female-Connector-to-15A-STD-Wall-Plug-Connector.avif\",\n        \"sku\": \"C50044L515P\",\n        \"attributes\": {\n            \"application\": [\n                \"rv\"\n            ],\n            \"type\": [\n                \"cordset\",\n                \"connector\"\n            ],\n            \"amp\": [\n                \"15\"\n            ]\n        }\n    },\n    {\n        \"name\": \"50A SmartPlug Female Connector to 50A Male 4ft Twist-type Connector\",\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/50a-smartplug-female-connector-to-50a-male-4ft-twist-type-connector\/\",\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/50A-SmartPlug-Female-Connector-to-50A-Male-4ft-Twist-type-Connector.avif\",\n        \"sku\": \"C50044\",\n        \"attributes\": {\n            \"application\": [\n                \"rv\"\n            ],\n            \"type\": [\n                \"cordset\",\n                \"connector\"\n            ],\n            \"amp\": [\n                \"50\"\n            ]\n        }\n    },\n    {\n        \"name\": \"50A SmartPlug Female Connector to 30A Male Twist-type Connector\",\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/50a-smartplug-female-connector-to-30a-male-twist-type-connector\/\",\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/04\/50A-SmartPlug-Female-Connector-to-30A-Male-Twist-type-Connector.webp\",\n        \"sku\": \"C50044L530P\",\n        \"attributes\": {\n            \"application\": [\n                \"rv\"\n            ],\n            \"type\": [\n                \"cordset\",\n                \"connector\"\n            ],\n            \"amp\": [\n                \"30\"\n            ]\n        }\n    },\n    {\n        \"name\": \"30A Female Twist-type Connector to 30A SmartPlug Male Connector\",\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/30a-female-twist-type-connector-to-30a-smartplug-male-connector\/\",\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/30A-Female-Twist-type-Connector-to-30A-SmartPlug-Male-Connector.avif\",\n        \"sku\": \"CM30043L530R\",\n        \"attributes\": {\n            \"application\": [\n                \"rv\"\n            ],\n            \"type\": [\n                \"cordset\",\n                \"connector\"\n            ],\n            \"amp\": [\n                \"30\"\n            ]\n        }\n    },\n    {\n        \"name\": \"50A SmartPlug Male Connector to 50A Female 4ft Twist-type Connector\",\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/50a-smartplug-male-connector-to-50a-female-4ft-twist-type-connector\/\",\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/50A-SmartPlug-Male-Connector-to-50A-Female-4ft-Twist-type-Connector.avif\",\n        \"sku\": \"CM5004460729R\",\n        \"attributes\": {\n            \"application\": [\n                \"rv\"\n            ],\n            \"type\": [\n                \"cordset\",\n                \"connector\"\n            ],\n            \"amp\": [\n                \"50\"\n            ]\n        }\n    },\n    {\n        \"name\": \"SmartPlug Dock & Lift Kit\",\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/sp-dock-lifts\/\",\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/SmartPlug-Dock-Lift-Kit.avif\",\n        \"sku\": \"CB001, RDPWP, RDPWL, CM50254, CM50504, BM30NT, BM30PW, BM30PB, BM30PG, BM50NT, BM50PW, BM50PB, BM50PG\",\n        \"attributes\": {\n            \"application\": [\n                \"dockside\"\n            ],\n            \"type\": [\n                \"service-kits\"\n            ],\n            \"amp\": []\n        }\n    },\n    {\n        \"name\": \"LEGACY Lighthouse Pedestal Mounting Bracket\",\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/legacy-lighthouse-pedestal-mounting-bracket\/\",\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/LEGACY-Lighthouse-Pedestal-Mounting-Bracket.avif\",\n        \"sku\": \"LHRBRKTL530, LHRBRKT60729\",\n        \"attributes\": {\n            \"application\": [\n                \"marine\",\n                \"dockside\"\n            ],\n            \"type\": [],\n            \"amp\": [\n                \"30\",\n                \"50\"\n            ]\n        }\n    },\n    {\n        \"name\": \"SmartPlug Cordset Storage Bag\",\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/cordset-storage-bag\/\",\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/SmartPlug-Cordset-Storage-Bag.avif\",\n        \"sku\": \"\",\n        \"attributes\": {\n            \"application\": [\n                \"specialty\"\n            ],\n            \"type\": [\n                \"cordset\"\n            ],\n            \"amp\": [\n                \"30\",\n                \"50\"\n            ],\n            \"color\": [\n                \"black\"\n            ]\n        }\n    },\n    {\n        \"name\": \"EATON Lighthouse Double Pedestal Retro-fit Conversion Kit\",\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/eaton-lighthouse-double-pedestal-retro-fit-conversion-kit\/\",\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/EATON-Lighthouse-Double-Pedestal-Retro-fit-Conversion-Kit.avif\",\n        \"sku\": \"LH2RF30ASSY, LH2RF50ASSY, LHRF3050ASSY\",\n        \"attributes\": {\n            \"application\": [\n                \"dockside\",\n                \"marine\"\n            ],\n            \"type\": [\n                \"service-kits\"\n            ],\n            \"amp\": [\n                \"15\",\n                \"30\"\n            ]\n        }\n    },\n    {\n        \"name\": \"EATON Lighthouse Pedestal Retro-fit Conversion Kit\",\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/lighthouse-pedestal-retro-fit-conversion-kit\",\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/EATON-Lighthouse-Pedestal-Retro-fit-Conversion-Kit.avif\",\n        \"sku\": \"LHRF30ASSY, LHRF50ASSY\",\n        \"attributes\": {\n            \"application\": [\n                \"dockside\",\n                \"marine\"\n            ],\n            \"type\": [\n                \"service-kits\"\n            ],\n            \"amp\": [\n                \"30\",\n                \"50\"\n            ]\n        }\n    },\n    {\n        \"name\": \"EATON Lighthouse Pedestal Mounting Bracket\",\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/lighthouse-pedestal-mounting-bracket\/\",\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/EATON-Lighthouse-Pedestal-Mounting-Bracket.avif\",\n        \"sku\": \"LHRBRKT, LHRBRKT30, LHRBRKT50, LHRBRKTB\",\n        \"attributes\": {\n            \"application\": [\n                \"dockside\",\n                \"marine\"\n            ],\n            \"type\": [],\n            \"amp\": [\n                \"30\",\n                \"50\"\n            ]\n        }\n    },\n    {\n        \"name\": \"SmartPlug Weathercap\",\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/smartplug-weathercap\/\",\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/SmartPlug-Weathercap.avif\",\n        \"sku\": \"A1001\",\n        \"attributes\": {\n            \"application\": [],\n            \"type\": [\n                \"inlet\"\n            ],\n            \"amp\": []\n        }\n    },\n    {\n        \"name\": \"SmartPlug Male Inlet Connector\",\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/smartplug-male-inlet-connector\/\",\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/SmartPlug-Male-Inlet-Connector.avif\",\n        \"sku\": \"BM30, BM50\",\n        \"attributes\": {\n            \"application\": [],\n            \"type\": [\n                \"service-kits\",\n                \"inlet\"\n            ],\n            \"amp\": [\n                \"30\",\n                \"50\"\n            ]\n        }\n    },\n    {\n        \"name\": \"SmartPlug Female Connector Inlet\",\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/smartplug-female-connector-inlet\/\",\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/SmartPlug-Female-Connector-Inlet.avif\",\n        \"sku\": \"PFK30\",\n        \"attributes\": {\n            \"application\": [],\n            \"type\": [\n                \"inlet\",\n                \"combokit\"\n            ],\n            \"amp\": [\n                \"30\",\n                \"50\"\n            ]\n        }\n    },\n    {\n        \"name\": \"SmartPlug Male Inlet Connector Strain Relief\",\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/smartplug-male-inlet-connector-strain-relief\/\",\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/SmartPlug-Male-Inlet-Connector-Strain-Relief.avif\",\n        \"sku\": \"PKMGKT\",\n        \"attributes\": {\n            \"application\": [],\n            \"type\": [\n                \"connector\",\n                \"inlet\",\n                \"service-kits\"\n            ],\n            \"amp\": [\n                \"30\",\n                \"50\"\n            ]\n        }\n    },\n    {\n        \"name\": \"SmartPlug Female Connector Gasket\",\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/smartplug-female-connector-gasket\/\",\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/SmartPlug-Female-Connector-Gasket.avif\",\n        \"sku\": \"PKF30G, PKF50G\",\n        \"attributes\": {\n            \"application\": [],\n            \"type\": [\n                \"connector\",\n                \"service-kits\"\n            ],\n            \"amp\": [\n                \"30\",\n                \"50\"\n            ]\n        }\n    },\n    {\n        \"name\": \"SmartPlug Male Connector Gasket\",\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/smartplug-male-connector-gasket\/\",\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/SmartPlug-Male-Connector-Gasket.avif\",\n        \"sku\": \"PKMGKT\",\n        \"attributes\": {\n            \"application\": [],\n            \"type\": [\n                \"connector\",\n                \"service-kits\"\n            ],\n            \"amp\": [\n                \"30\",\n                \"50\"\n            ]\n        }\n    },\n    {\n        \"name\": \"SmartPlug Weather Door Receptacle\",\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/smartplug-weather-door-receptacle\/\",\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/SmartPlug-Weather-Door-Receptacle.avif\",\n        \"sku\": \"RDPWP, RDPWL, RF30, RF50\",\n        \"attributes\": {\n            \"application\": [],\n            \"type\": [\n                \"service-kits\"\n            ],\n            \"amp\": []\n        }\n    },\n    {\n        \"name\": \"SmartPlug Side Lever Kit\",\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/smartplug-side-lever-kit\/\",\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/SmartPlug-Side-Lever-Kit.avif\",\n        \"sku\": \"PKFO1\",\n        \"attributes\": {\n            \"application\": [\n                \"marine\",\n                \"rv\"\n            ],\n            \"type\": [\n                \"service-kits\"\n            ],\n            \"amp\": [\n                \"16\",\n                \"30\",\n                \"32\",\n                \"50\"\n            ]\n        }\n    }\n];\n\n\nconst MAIN_FILTER_GROUPS = ['application', 'type', 'amp'];\n\nconst SUBFILTER_CONFIG = {\n    color: {\n        label: 'Color',\n        options: [\n            { value: 'stainless', label: 'Stainless' },\n            { value: 'white', label: 'White' },\n            { value: 'grey', label: 'Grey' },\n            { value: 'black', label: 'Black' },\n            { value: 'orange', label: 'Orange' },\n            { value: 'clear', label: 'Clear' }\n        ]\n    }\n    \n};\n\nconst VALUE_LABELS = {\n    marine: 'Marine',\n    rv: 'RV',\n    dockside: 'Dockside',\n    specialty: 'Specialty',\n    connector: 'Connector',\n    cordset: 'Cordset',\n    inlet: 'Inlet',\n    elci: 'ELCI',\n    'service-kits': 'Service Kits',\n    combokit: 'Combokit',\n    'data-ports': 'Data Ports',\n    '15': '15A',\n    '16': '16A',\n    '30': '30A',\n    '32': '32A',\n    '50': '50A',\n    stainless: 'Stainless',\n    white: 'White',\n    grey: 'Grey',\n    black: 'Black',\n    orange: 'Orange',\n    clear: 'Clear'\n};\n\nfunction labelFor(value) {\n    return VALUE_LABELS[value] || (value.charAt(0).toUpperCase() + value.slice(1));\n}\n\n\nlet activeSubFilters = {};\n\n\/\/ --- Accordion behaviour for the TOP-LEVEL category buttons ---\ndocument.querySelectorAll('.custom-dock-cat-btn').forEach(button => {\n    button.addEventListener('click', function () {\n        const list = this.nextElementSibling;\n\n        document.querySelectorAll('.custom-dock-prod-list').forEach(item => {\n            if (item !== list) item.style.display = \"none\";\n        });\n        document.querySelectorAll('.custom-dock-cat-btn').forEach(btn => {\n            if (btn !== this) btn.classList.remove(\"active\");\n        });\n\n        if (list.style.display === \"grid\") {\n            list.style.display = \"none\";\n            this.classList.remove(\"active\");\n        } else {\n            list.style.display = \"grid\";\n            this.classList.add(\"active\");\n        }\n    });\n});\n\n\/\/ --- Wire up the MAIN filter checkboxes ---\ndocument.querySelectorAll('.product-filter').forEach(filter => {\n    filter.addEventListener('change', updateRecommendations);\n});\n\n\/\/ --- Reset button ---\ndocument.getElementById('custom-dock-reset-btn').addEventListener('click', function () {\n    \/\/ Uncheck every main checkbox\n    document.querySelectorAll('.product-filter:checked').forEach(cb => {\n        cb.checked = false;\n    });\n\n    \/\/ Close every top-level accordion panel and clear active state\n    document.querySelectorAll('.custom-dock-prod-list').forEach(list => {\n        list.style.display = \"none\";\n    });\n    document.querySelectorAll('.custom-dock-cat-btn').forEach(btn => {\n        btn.classList.remove(\"active\");\n    });\n\n    \/\/ Clear sub-filter state and its rendered block entirely\n    activeSubFilters = {};\n    document.getElementById('sub-filters-section').innerHTML = '';\n\n    \/\/ Clear the search box too\n    const searchInput = document.getElementById('custom-dock-search');\n    if (searchInput) searchInput.value = '';\n\n    \/\/ Refresh the results back to the empty state\n    updateRecommendations();\n});\n\n\ndocument.querySelectorAll('.custom-dock-preset-btn').forEach(btn => {\n    btn.addEventListener('click', function () {\n        const appValue = this.dataset.app;\n        const target = document.querySelector(\n            `.product-filter[data-filter=\"application\"][value=\"${appValue}\"]`\n        );\n        if (!target) return;\n\n        target.checked = true;\n\n        \/\/ Open the Application panel so the person can see what got checked\n        const appList = target.closest('.custom-dock-prod-list');\n        const appBtn = appList ? appList.previousElementSibling : null;\n        document.querySelectorAll('.custom-dock-prod-list').forEach(list => {\n            list.style.display = (list === appList) ? \"grid\" : \"none\";\n        });\n        document.querySelectorAll('.custom-dock-cat-btn').forEach(b => {\n            b.classList.toggle('active', b === appBtn);\n        });\n\n        updateRecommendations();\n    });\n});\n\n\/\/ --- Search box: quick jump to a product by name, independent of filters ---\nconst searchInputEl = document.getElementById('custom-dock-search');\nif (searchInputEl) {\n    searchInputEl.addEventListener('input', updateRecommendations);\n}\n\n\n\nconst dockWrapper = document.getElementById('custom-dock-wrapper');\nconst dockTrigger = document.getElementById('custom-dock-trigger');\nconst dockHint = document.getElementById('custom-dock-hint');\n\n\/\/ How long the bubble stays visible per pulse, and how long it waits\n\/\/ (fully hidden) before showing again. Tweak these two numbers only.\nconst HINT_VISIBLE_MS = 20000; \/\/ stays on screen ~8s each time it appears\nconst HINT_HIDDEN_MS = 10000; \/\/ waits 10s after hiding before showing again\n\nlet dockHintShowTimer = null;  \/\/ timer that hides the bubble after it's shown\nlet dockHintWaitTimer = null;  \/\/ timer that re-shows the bubble after the gap\nlet isDockOpen = false; \/\/ tracks open state, whether via tap or hover\n\n\/\/ Shows the bubble, keeps it up for HINT_VISIBLE_MS, then hides it and\n\/\/ schedules the next appearance after HINT_HIDDEN_MS. Recursive by design\n\/\/ so \"visible time\" and \"gap time\" can differ (a plain setInterval can't\n\/\/ do that cleanly).\nfunction showDockHintOnce() {\n    if (!dockHint || isDockOpen) return;\n\n    dockHint.classList.add('custom-dock-hint-show');\n\n    dockHintShowTimer = setTimeout(() => {\n        dockHint.classList.remove('custom-dock-hint-show');\n        dockHintShowTimer = null;\n\n        dockHintWaitTimer = setTimeout(() => {\n            dockHintWaitTimer = null;\n            showDockHintOnce();\n        }, HINT_HIDDEN_MS);\n    }, HINT_VISIBLE_MS);\n}\n\n\/\/ Wipes any pending hint + timers. Called whenever the dock opens.\nfunction pauseDockHint() {\n    if (dockHintShowTimer) {\n        clearTimeout(dockHintShowTimer);\n        dockHintShowTimer = null;\n    }\n    if (dockHintWaitTimer) {\n        clearTimeout(dockHintWaitTimer);\n        dockHintWaitTimer = null;\n    }\n    if (dockHint) dockHint.classList.remove('custom-dock-hint-show');\n}\n\n\/\/ Starts the show\/wait cycle fresh. Called on page load, and again every\n\/\/ time the dock closes (so it \"starts again as it is\") \u2014 always beginning\n\/\/ with a fresh HINT_HIDDEN_MS wait before the next appearance, so closing\n\/\/ the dock never triggers an instant re-pop.\nfunction resumeDockHintCycle() {\n    pauseDockHint();\n    if (!dockHint) return;\n    dockHintWaitTimer = setTimeout(() => {\n        dockHintWaitTimer = null;\n        showDockHintOnce();\n    }, HINT_HIDDEN_MS);\n}\n\nif (dockTrigger && dockWrapper) {\n\n    dockTrigger.addEventListener('click', function (e) {\n        e.stopPropagation();\n        dockWrapper.classList.toggle('custom-dock-open');\n\n        if (dockWrapper.classList.contains('custom-dock-open')) {\n            isDockOpen = true;\n            pauseDockHint();\n        } else {\n            isDockOpen = false;\n            resumeDockHintCycle();\n        }\n    });\n\n    document.addEventListener('click', function (e) {\n        if (!dockWrapper.contains(e.target)) {\n            if (dockWrapper.classList.contains('custom-dock-open')) {\n                dockWrapper.classList.remove('custom-dock-open');\n                isDockOpen = false;\n                resumeDockHintCycle();\n            }\n        }\n    });\n\n    \/\/ Desktop hover: opens\/closes the flyout via CSS, but JS still needs to\n    \/\/ know about it so the hint pauses\/resumes at the right moments.\n    dockWrapper.addEventListener('mouseenter', function () {\n        isDockOpen = true;\n        pauseDockHint();\n    });\n\n    dockWrapper.addEventListener('mouseleave', function () {\n        \/\/ Only truly \"closed\" if it's not pinned open by a tap\n        if (!dockWrapper.classList.contains('custom-dock-open')) {\n            isDockOpen = false;\n            resumeDockHintCycle();\n        }\n    });\n\n    \/\/ First-visit attention pulse: draws the eye once, then stops so it\n    \/\/ never feels naggy on repeat visits.\n    setTimeout(() => dockTrigger.classList.add('custom-dock-pulse'), 800);\n    dockTrigger.addEventListener('click', () => dockTrigger.classList.remove('custom-dock-pulse'), { once: true });\n\n    \/\/ Kick off the hint cycle on load\n    resumeDockHintCycle();\n}\n\n\/\/ Reads only the MAIN checkboxes into { application: ['rv'], type: ['inlet'], ... }\nfunction getMainSelectedFilters() {\n    const selected = {};\n    document.querySelectorAll('.product-filter:checked').forEach(cb => {\n        const group = cb.dataset.filter;\n        if (!MAIN_FILTER_GROUPS.includes(group)) return; \/\/ sub-filter checkboxes are handled separately\n        if (!selected[group]) selected[group] = [];\n        selected[group].push(cb.value);\n    });\n    return selected;\n}\n\n\/\/ A product \"matches\" a filter group if it has at least one value in common with the checked\n\/\/ boxes for that group. It's a full match if it satisfies every group that has a selection.\n\/\/ Works the same whether \"selected\" contains main groups, sub-filter groups, or both.\nfunction matchScore(product, selected) {\n    const groups = Object.keys(selected);\n    if (groups.length === 0) return { full: false, partial: false, hits: 0 };\n\n    let hits = 0;\n    groups.forEach(group => {\n        const productValues = product.attributes[group] || [];\n        const overlap = productValues.some(v => selected[group].includes(v));\n        if (overlap) hits++;\n    });\n\n    return {\n        full: hits === groups.length,\n        partial: hits > 0,\n        hits\n    };\n}\n\nfunction renderProductCard(product, matchLabel) {\n    const link = document.createElement('a');\n    link.className = 'custom-dock-prod-link';\n    link.href = product.url;\n    link.target = '_blank';\n    link.rel = 'noopener noreferrer';\n\n    link.innerHTML = `\n        <img decoding=\"async\" src=\"${product.image}\" alt=\"${product.name}\">\n        <span>\n            ${product.name}\n            ${product.sku ? `<small class=\"custom-dock-sku\">SKU: ${product.sku}<\/small>` : ''}\n            ${matchLabel ? `<span class=\"custom-dock-match-tag\">${matchLabel}<\/span>` : ''}\n        <\/span>\n    `;\n    return link;\n}\n\n\/\/ Builds the dynamic sub-filter checkbox row(s) that sit right under\n\/\/ \"Matching Products\". baseMatches = whatever currently satisfies the\n\/\/ MAIN filters only (before any sub-filter is applied). A sub-filter\n\/\/ group shows up if at least one of those products actually has that\n\/\/ attribute defined \u2014 so it only appears when it'd be useful, e.g.\n\/\/ Color only shows once Inlet-type products are in the results.\n\/\/ Rendered as a compact horizontal row of pill checkboxes with no\n\/\/ heading text.\nfunction renderSubFilters(baseMatches) {\n    const container = document.getElementById('sub-filters-section');\n    container.innerHTML = '';\n\n    const relevantGroups = Object.keys(SUBFILTER_CONFIG).filter(key => {\n        return baseMatches.some(p => (p.attributes[key] || []).length > 0);\n    });\n\n    \/\/ Drop stale selections for sub-filters that are no longer relevant,\n    \/\/ so a hidden checkbox can never silently keep narrowing results.\n    Object.keys(activeSubFilters).forEach(key => {\n        if (!relevantGroups.includes(key)) delete activeSubFilters[key];\n    });\n\n    if (relevantGroups.length === 0) return;\n\n    relevantGroups.forEach(key => {\n        const config = SUBFILTER_CONFIG[key];\n\n        const block = document.createElement('div');\n        block.className = 'custom-dock-subfilter-block';\n\n        const list = document.createElement('div');\n        list.className = 'custom-dock-subfilter-list';\n\n        config.options.forEach(opt => {\n            const label = document.createElement('label');\n            label.className = 'custom-dock-subitem';\n\n            const input = document.createElement('input');\n            input.type = 'checkbox';\n            input.className = 'product-filter';\n            input.dataset.filter = key;\n            input.value = opt.value;\n            input.checked = (activeSubFilters[key] || []).includes(opt.value);\n\n            input.addEventListener('change', function () {\n                if (!activeSubFilters[key]) activeSubFilters[key] = [];\n                if (this.checked) {\n                    if (!activeSubFilters[key].includes(opt.value)) {\n                        activeSubFilters[key].push(opt.value);\n                    }\n                } else {\n                    activeSubFilters[key] = activeSubFilters[key].filter(v => v !== opt.value);\n                    if (activeSubFilters[key].length === 0) delete activeSubFilters[key];\n                }\n                updateRecommendations();\n            });\n\n            label.appendChild(input);\n            label.appendChild(document.createTextNode(opt.label));\n            list.appendChild(label);\n        });\n\n        block.appendChild(list);\n        container.appendChild(block);\n    });\n}\n\n\/\/ Renders removable chips for every active main + sub filter, and keeps\n\/\/ the trigger badge count in sync. Clicking a chip's \u00d7 unchecks the\n\/\/ matching checkbox and re-runs the filter \u2014 no need to reopen an accordion\n\/\/ just to undo one choice.\nfunction renderChipsAndBadge(mainSelected) {\n    const chipsEl = document.getElementById('custom-dock-chips');\n    const badgeEl = document.getElementById('custom-dock-badge');\n    chipsEl.innerHTML = '';\n\n    let totalCount = 0;\n\n    Object.keys(mainSelected).forEach(group => {\n        mainSelected[group].forEach(value => {\n            totalCount++;\n            chipsEl.appendChild(buildChip(group, value));\n        });\n    });\n\n    Object.keys(activeSubFilters).forEach(group => {\n        (activeSubFilters[group] || []).forEach(value => {\n            totalCount++;\n            chipsEl.appendChild(buildChip(group, value));\n        });\n    });\n\n    if (badgeEl) {\n        badgeEl.textContent = totalCount;\n        badgeEl.style.display = totalCount > 0 ? 'flex' : 'none';\n    }\n}\n\nfunction buildChip(group, value) {\n    const chip = document.createElement('span');\n    chip.className = 'custom-dock-chip';\n    chip.innerHTML = `${labelFor(value)} <button type=\"button\" aria-label=\"Remove ${labelFor(value)} filter\">\u2715<\/button>`;\n\n    chip.querySelector('button').addEventListener('click', () => {\n        const cb = document.querySelector(`.product-filter[data-filter=\"${group}\"][value=\"${value}\"]`);\n        if (cb) {\n            cb.checked = false;\n            cb.dispatchEvent(new Event('change'));\n        } else {\n            \/\/ Sub-filter checkbox may not currently be rendered \u2014 clear state directly\n            if (activeSubFilters[group]) {\n                activeSubFilters[group] = activeSubFilters[group].filter(v => v !== value);\n                if (activeSubFilters[group].length === 0) delete activeSubFilters[group];\n            }\n            updateRecommendations();\n        }\n    });\n\n    return chip;\n}\n\nfunction updateRecommendations() {\n    const mainSelected = getMainSelectedFilters();\n    const recommendedEl = document.getElementById('recommended-products');\n    const relatedEl = document.getElementById('related-products');\n    const matchCountEl = document.getElementById('match-count');\n    const searchTerm = (document.getElementById('custom-dock-search') || {}).value || '';\n    const trimmedSearch = searchTerm.trim().toLowerCase();\n\n    recommendedEl.innerHTML = '';\n    relatedEl.innerHTML = '';\n\n    \/\/ Search takes priority: if someone's typing, show name matches across\n    \/\/ the whole catalog immediately rather than making them also manage filters.\n    if (trimmedSearch.length > 0) {\n        renderChipsAndBadge(mainSelected);\n        const nameMatches = products.filter(p => {\n            const searchable = [p.name, p.sku]\n                .filter(Boolean)\n                .join(\" \")\n                .toLowerCase();\n\n            return searchable.includes(trimmedSearch);\n        });\n        matchCountEl.textContent = nameMatches.length > 0 ? `(${nameMatches.length})` : '';\n        if (nameMatches.length > 0) {\n            nameMatches.forEach(p => recommendedEl.appendChild(renderProductCard(p)));\n        } else {\n            recommendedEl.innerHTML = `<p class=\"custom-dock-empty-msg\">No products matched \"${searchTerm}\". Try a different term or check an attribute above.<\/p>`;\n        }\n        document.getElementById('sub-filters-section').innerHTML = '';\n        return;\n    }\n\n    if (Object.keys(mainSelected).length === 0) {\n        recommendedEl.innerHTML = `\n            <p class=\"custom-dock-empty-msg\">Check an attribute above to see matching products.<\/p>\n            <a href=\"https:\/\/dev.smartplug.com\/staging\/shop\/\" class=\"custom-dock-browse-all-btn\">Browse All Products \u2192<\/a>\n        `;\n        matchCountEl.textContent = '';\n        activeSubFilters = {};\n        document.getElementById('sub-filters-section').innerHTML = '';\n        renderChipsAndBadge(mainSelected);\n        return;\n    }\n\n    \/\/ What matches on MAIN filters alone \u2014 used to decide which sub-filters to show\n    const baseMatches = products.filter(p => matchScore(p, mainSelected).full);\n\n    \/\/ Sub-filters (e.g. Color) should only ever appear when EVERY main\n    \/\/ group currently has at most one box checked. The moment any single\n    \/\/ group (Application, Product Type, Amperage) has 2+ checked, we\n    \/\/ suppress sub-filters entirely \u2014 pass an empty array so\n    \/\/ renderSubFilters finds no relevant groups and clears any active\n    \/\/ sub-filter selections along with it.\n    const anyGroupHasMultiple = Object.values(mainSelected).some(vals => vals.length > 1);\n    renderSubFilters(anyGroupHasMultiple ? [] : baseMatches);\n\n    \/\/ Combine main + active sub-filters for the actual results shown\n    const fullSelected = { ...mainSelected };\n    Object.keys(activeSubFilters).forEach(key => {\n        if (activeSubFilters[key] && activeSubFilters[key].length > 0) {\n            fullSelected[key] = activeSubFilters[key];\n        }\n    });\n\n    renderChipsAndBadge(mainSelected);\n\n    \/\/ \"Matching Products\" must satisfy main filters AND any active sub-filter (e.g. Color).\n    const scoredFull = products.map(p => ({ product: p, score: matchScore(p, fullSelected) }));\n    const fullMatches = scoredFull.filter(s => s.score.full);\n\n    matchCountEl.textContent = fullMatches.length > 0 ? `(${fullMatches.length})` : '';\n\n    \/\/ \"You Might Also Like\" and its \"Shares N attribute(s)\" label are scored\n    \/\/ against MAIN filters ONLY. Sub-filters (Color, etc.) should never count\n    \/\/ as a \"shared attribute\" and should never by themselves decide whether\n    \/\/ something is related \u2014 only the top-level filter groups do.\n    const fullMatchProducts = new Set(fullMatches.map(s => s.product));\n    const mainScored = products.map(p => ({ product: p, score: matchScore(p, mainSelected) }));\n    const relatedMatches = mainScored\n        .filter(s => s.score.partial && !fullMatchProducts.has(s.product))\n        .sort((a, b) => b.score.hits - a.score.hits);\n\n    if (fullMatches.length > 0) {\n        fullMatches.forEach(s => {\n            recommendedEl.appendChild(renderProductCard(s.product));\n        });\n    } else {\n        recommendedEl.innerHTML = `\n            <p class=\"custom-dock-empty-msg\">No exact match yet \u2014 try fewer attributes, or see related products below.<\/p>\n        `;\n    }\n\n    if (relatedMatches.length > 0) {\n        const heading = document.createElement('h4');\n        heading.textContent = 'You Might Also Like';\n        relatedEl.appendChild(heading);\n\n        relatedMatches.slice(0, 4).forEach(s => {\n            const sharedLabel = `Shares ${s.score.hits} attribute${s.score.hits > 1 ? 's' : ''}`;\n            relatedEl.appendChild(renderProductCard(s.product, sharedLabel));\n        });\n    }\n}\n\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-59709d6 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=\"59709d6\" 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-14eab6b 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=\"14eab6b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2baf9d8 elementor-widget elementor-widget-html\" data-id=\"2baf9d8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- =========================================================\r\n     SMARTPLUG PRODUCT CATALOG\r\n     SELECTED PRODUCTS ONLY \u2014 FILTERS REMOVED\r\n     ========================================================= -->\r\n\r\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\r\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\r\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Bebas+Neue&family=Montserrat:wght@400;500;600;700;800&display=swap\" rel=\"stylesheet\">\r\n\r\n<style>\r\n\r\n\/* =========================================================\r\n   BASE\r\n   ========================================================= *\/\r\n\r\n.sp-catalog,\r\n.sp-catalog * {\r\n  box-sizing: border-box;\r\n}\r\n\r\n.sp-catalog {\r\n  width: 100%;\r\n  background: #ffffff;\r\n  color: #000000;\r\n  font-family: 'Montserrat', sans-serif;\r\n}\/* =========================================================\r\n   PRODUCT GRID\r\n   ========================================================= *\/\r\n\r\n.sp-products {\r\n  width: 100%;\r\n  max-width: 1500px;\r\n\r\n  margin: 0 auto;\r\n\r\n  display: grid;\r\n\r\n  grid-template-columns:\r\n    repeat(3, minmax(0, 1fr));\r\n\r\n  gap: 26px;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   PRODUCT CARD\r\n   ========================================================= *\/\r\n\r\n.sp-card {\r\n  min-width: 0;\r\n\r\n  display: flex;\r\n  flex-direction: column;\r\n\r\n  padding: 26px 26px 26px;\r\n\r\n  background: #F3F5F7;\r\n\r\n  border-radius: 16px;\r\n\r\n  overflow: hidden;\r\n\r\n  transition:\r\n    transform .2s ease,\r\n    box-shadow .2s ease;\r\n}\r\n\r\n.sp-card:hover {\r\n  transform: none;\r\n  box-shadow: none;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   PRODUCT IMAGE\r\n   ========================================================= *\/\r\n\r\n.sp-card-image {\r\n  width: 100%;\r\n  height: 220px;\r\n\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n\r\n  margin: 0 0 18px;\r\n}\r\n\r\n.sp-card-image img {\r\n  display: block;\r\n  width: 100%;\r\n  height: 100%;\r\n  max-width: 360px;\r\n\r\n  object-fit: contain;\r\n\r\n  transition: transform .35s ease;\r\n  transform-origin: center center;\r\n}\r\n\r\n.sp-card-image img:hover {\r\n  transform: scale(1.24);\r\n}\r\n\r\n\/* =========================================================\r\n   TITLE\r\n   ========================================================= *\/\r\n\r\n\r\n\r\n.sp-card-title {\r\n  width: 100%;\r\n\r\n\r\n  margin: 0 0 4px;\r\n\r\n  color: #000000;\r\n\r\n  font-family: 'Bebas Neue', sans-serif;\r\n  font-size: 32px;\r\n  font-weight: 500;\r\n\r\n  line-height: 1;\r\n\r\n  letter-spacing: .35px;\r\n\r\n  text-transform: uppercase;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   DESCRIPTION\r\n   ========================================================= *\/\r\n\r\n.sp-card-description {\r\n  margin: 0 0 0px;\r\n\r\n  color: #000000;\r\n\r\n  font-family: 'Montserrat', sans-serif;\r\n  font-size: 14px;\r\n  font-weight: 400;\r\n\r\n  line-height: 1.5;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   BULLET LIST\r\n   ========================================================= *\/\r\n\r\n.sp-card-list {\r\n  list-style: none;\r\n\r\n  padding: 0;\r\n  margin: 0 0 22px;\r\n\r\n  flex: 1 1 auto;\r\n}\r\n\r\n.sp-card-list li {\r\n  position: relative;\r\n\r\n  padding-left: 20px;\r\n  margin-bottom: 0px;\r\n\r\n  color: #000000;\r\n\r\n  font-family: 'Montserrat', sans-serif;\r\n  font-size: 14px;\r\n  font-weight: 400;\r\n\r\n  line-height: 1.6;\r\n}\r\n\r\n.sp-card-list li:last-child {\r\n  margin-bottom: 0;\r\n}\r\n\r\n\r\n.sp-card-list li::before {\r\n  content: \"\";\r\n  position: absolute;\r\n  left: 0;\r\n  top: 5px;\r\n  width: 15px;\r\n  height: 15px;\r\n  background-image: url(\"https:\/\/smartplug.com\/wp-content\/uploads\/2026\/08\/Check-Symbol-4.png\");\r\n  background-size: contain;\r\n  background-repeat: no-repeat;\r\n  filter: drop-shadow(0 0 0.5px currentColor) drop-shadow(0 0 0.5px currentColor);\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   BUTTON\r\n   ========================================================= *\/\r\n\r\n.sp-card-button {\r\n  width: 100%;\r\n  min-height: 44px;\r\n\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n\r\n  gap: 10px;\r\n\r\n  padding: 11px 18px;\r\n\r\n  border-radius: 6px;\r\n\r\n  background: #ED6D25;\r\n  color: #ffffff !important;\r\n\r\n  font-family: 'Montserrat', sans-serif;\r\n  font-size: 14px;\r\n  font-weight: 600;\r\n  letter-spacing: 0.5px;\r\n\r\n  line-height: 1;\r\n\r\n  text-decoration: none !important;\r\n\r\n  transition:\r\n    background .18s ease;\r\n}\r\n\r\n.sp-card-button:hover {\r\n  background: #D95E1A;\r\n  color: #ffffff !important;\r\n\r\n}\r\n\r\n.sp-arrow {\r\n  position: relative;\r\n  display: inline-block;\r\n \r\n\r\n  font-size: 0;\r\n  line-height: 0;\r\n  margin-left: 1px;\r\n}\r\n\r\n.sp-arrow::before {\r\n  content: \"\";\r\n  position: absolute;\r\n  left: 0;\r\n  top: 50%;\r\n  width: 16px;\r\n  height: 3.5px;\r\n  border-radius: 16px;\r\n  background: #ffffff;\r\n  transform: translateY(-50%);\r\n}\r\n\r\n.sp-arrow::after {\r\n  content: \"\";\r\n  position: absolute;\r\n  left: 5px;\r\n  top: 50%;\r\n  width: 12px;\r\n  height: 12px;\r\n\r\n  border-top: 3px solid #ffffff;\r\n  border-right: 3px solid #ffffff;\r\n\r\n  transform: translateY(-50%) rotate(45deg);\r\n  transform-origin: center;\r\n}\/* =========================================================\r\n   TABLET\r\n   ========================================================= *\/\r\n\r\n@media (max-width: 1100px) {\r\n\r\n  .sp-products {\r\n    grid-template-columns:\r\n      repeat(2, minmax(0, 1fr));\r\n  }\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   MOBILE\r\n   ========================================================= *\/\r\n\r\n@media (max-width: 680px) {\r\n\r\n  .sp-products {\r\n    grid-template-columns: 1fr;\r\n    gap: 20px;\r\n  }\r\n\r\n  .sp-card {\r\n    padding: 22px 20px 18px;\r\n  }\r\n\r\n  .sp-card-title {\r\n    min-height: auto;\r\n    margin-bottom: 18px;\r\n\r\n    font-size: 30px;\r\n  }\r\n\r\n  .sp-card-description {\r\n    font-size: 14px;\r\n  }\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   SMALL MOBILE\r\n   ========================================================= *\/\r\n\r\n@media (max-width: 400px) {\r\n\r\n  .sp-card-title {\r\n    font-size: 28px;\r\n  }\r\n\r\n}\r\n\r\n<\/style>\r\n\r\n<!-- SELECTED PRODUCTS IN REQUESTED ORDER -->\r\n<div class=\"sp-catalog\">\r\n  <div class=\"sp-products\" id=\"spProductGrid\">\r\n<article\r\n      class=\"sp-card\"\r\n    >\r\n      <div class=\"sp-card-image\">\r\n        <a href=\"https:\/\/smartplug.com\/15-amp-115v-30-amp-125v-4-cordset-dockside\/\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"display: contents;\">\r\n<img decoding=\"async\"\r\n          src=\"https:\/\/smartplug.com\/wp-content\/uploads\/2026\/07\/15-Amp-115V-_-30-Amp-125V-%E2%80%93-4-Cordset.avif\"\r\n          alt=\"15 AMP 115V \/ 30 AMP 125V - 4&#x27; CORDSET\"\r\n          loading=\"lazy\"\r\n        >\r\n      <\/a>\r\n<\/div>\r\n\r\n\r\n\r\n      <h3 class=\"sp-card-title\">\r\n        15 AMP 115V - 4' CORDSET\r\n      <\/h3>\r\n\r\n      <p class=\"sp-card-description\">\r\n        Easy one-handed engagement and dis-engagement of your RV power connection.\r\n      <\/p>\r\n\r\n      <ul class=\"sp-card-list\">\r\n        <li>Safe and simple shore power connection.<\/li>\r\n        <li>Multi-point clips secure plug firmly.<\/li>\r\n        <li>Weatherproof seals help keep moisture out.<\/li>\r\n      <\/ul>\r\n\r\n      <a\r\n        class=\"sp-card-button\"\r\n        href=\"https:\/\/smartplug.com\/15-amp-115v-30-amp-125v-4-cordset-dockside\/\"\r\n        target=\"_blank\"\r\n        rel=\"noopener noreferrer\"\r\n      >\r\n        Learn More\r\n\r\n      <\/a>\r\n\r\n    <\/article>\r\n<article\r\n      class=\"sp-card\"\r\n    >\r\n\r\n      <div class=\"sp-card-image\">\r\n        <a href=\"https:\/\/smartplug.com\/smartplug-dual-configuration-smartplug-cordset-w-smartplug-connector-shore-power-end-dockside\/\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"display: contents;\">\r\n<img decoding=\"async\"\r\n          src=\"https:\/\/smartplug.com\/wp-content\/uploads\/2026\/07\/SmartPlug-Dual-Configuration-Smartplug-Cordset-w_SmartPlug-Connector-Shore-Power-End.avif\"\r\n          alt=\"DUAL CONFIGURATION CORDSET WITH CONNECTOR SHORE POWER END\"\r\n          loading=\"lazy\"\r\n        >\r\n      <\/a>\r\n<\/div>\r\n\r\n\r\n      <h3 class=\"sp-card-title\">\r\n        DUAL CONFIGURATION CORDSET WITH CONNECTOR SHORE POWER END\r\n      <\/h3>\r\n\r\n      <p class=\"sp-card-description\">\r\n        Secure multi-point locking and weatherproof seals provide dependable shore power connections.\r\n      <\/p>\r\n\r\n      <ul class=\"sp-card-list\">\r\n        <li>Multi-point clips secure the plug.<\/li>\r\n        <li>Locking system reduces cord stress.<\/li>\r\n        <li>Weatherproof protection.<\/li>\r\n      <\/ul>\r\n\r\n      <a\r\n        class=\"sp-card-button\"\r\n        href=\"https:\/\/smartplug.com\/smartplug-dual-configuration-smartplug-cordset-w-smartplug-connector-shore-power-end-dockside\/\"\r\n        target=\"_blank\"\r\n        rel=\"noopener noreferrer\"\r\n      >\r\n        Learn More\r\n\r\n      <\/a>\r\n\r\n    <\/article>\r\n<article\r\n      class=\"sp-card\"\r\n    >\r\n\r\n      <div class=\"sp-card-image\">\r\n        <a href=\"https:\/\/smartplug.com\/30a-smartplug-female-connector-to-30a-twist-type-male-connector\/\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"display: contents;\">\r\n<img decoding=\"async\"\r\n          src=\"https:\/\/smartplug.com\/wp-content\/uploads\/2026\/07\/30A-SmartPlug-Female-Connector-to-30A-Twist-type-Male-Connector.avif\"\r\n          alt=\"30A FEMALE CONNECTOR TO 30A TWIST-TYPE MALE CONNECTOR\"\r\n          loading=\"lazy\"\r\n        >\r\n      <\/a>\r\n<\/div>\r\n\r\n\r\n      <h3 class=\"sp-card-title\">\r\n        30A FEMALE CONNECTOR TO 30A TWIST-TYPE MALE CONNECTOR\r\n      <\/h3>\r\n\r\n      <p class=\"sp-card-description\">\r\n        Adapter configuration connecting a SmartPlug female connector to a 30A twist-type male connector.\r\n      <\/p>\r\n\r\n      <ul class=\"sp-card-list\">\r\n        <li>30A configuration.<\/li>\r\n        <li>Convenient connector conversion.<\/li>\r\n        <li>Secure power connection.<\/li>\r\n      <\/ul>\r\n\r\n      <a\r\n        class=\"sp-card-button\"\r\n        href=\"https:\/\/smartplug.com\/30a-smartplug-female-connector-to-30a-twist-type-male-connector\/\"\r\n        target=\"_blank\"\r\n        rel=\"noopener noreferrer\"\r\n      >\r\n        Learn More\r\n\r\n      <\/a>\r\n\r\n    <\/article>\r\n<article\r\n      class=\"sp-card\"\r\n    >\r\n\r\n      <div class=\"sp-card-image\">\r\n        <a href=\"https:\/\/smartplug.com\/50a-smartplug-female-connector-to-15a-std-wall-plug-connector\/\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"display: contents;\">\r\n<img decoding=\"async\"\r\n          src=\"https:\/\/smartplug.com\/wp-content\/uploads\/2026\/07\/50A-SmartPlug-Female-Connector-to-15A-STD-Wall-Plug-Connector.avif\"\r\n          alt=\"50A FEMALE CONNECTOR TO 15A STANDARD WALL PLUG CONNECTOR\"\r\n          loading=\"lazy\"\r\n        >\r\n      <\/a>\r\n<\/div>\r\n\r\n\r\n      <h3 class=\"sp-card-title\">\r\n        50A FEMALE CONNECTOR TO 15A STANDARD WALL PLUG CONNECTOR\r\n      <\/h3>\r\n\r\n      <p class=\"sp-card-description\">\r\n        Adapter configuration providing a SmartPlug connection to a standard 15A wall plug.\r\n      <\/p>\r\n\r\n      <ul class=\"sp-card-list\">\r\n        <li>50A SmartPlug female connector.<\/li>\r\n        <li>15A standard wall plug end.<\/li>\r\n        <li>Convenient power conversion.<\/li>\r\n      <\/ul>\r\n\r\n      <a\r\n        class=\"sp-card-button\"\r\n        href=\"https:\/\/smartplug.com\/50a-smartplug-female-connector-to-15a-std-wall-plug-connector\/\"\r\n        target=\"_blank\"\r\n        rel=\"noopener noreferrer\"\r\n      >\r\n        Learn More\r\n\r\n      <\/a>\r\n\r\n    <\/article>\r\n<article\r\n      class=\"sp-card\"\r\n    >\r\n\r\n      <div class=\"sp-card-image\">\r\n        <a href=\"https:\/\/smartplug.com\/50a-smartplug-female-connector-to-50a-male-4ft-twist-type-connector\/\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"display: contents;\">\r\n<img decoding=\"async\"\r\n          src=\"https:\/\/smartplug.com\/wp-content\/uploads\/2026\/07\/50A-SmartPlug-Female-Connector-to-50A-Male-4ft-Twist-type-Connector.avif\"\r\n          alt=\"50A FEMALE CONNECTOR TO 50A MALE 4FT TWIST-TYPE CONNECTOR\"\r\n          loading=\"lazy\"\r\n        >\r\n      <\/a>\r\n<\/div>\r\n\r\n\r\n      <h3 class=\"sp-card-title\">\r\n        50A FEMALE CONNECTOR TO 50A MALE 4FT TWIST-TYPE CONNECTOR\r\n      <\/h3>\r\n\r\n      <p class=\"sp-card-description\">\r\n        A 50A connector configuration with a 4-foot twist-type male connector for compatible shore power systems.\r\n      <\/p>\r\n\r\n      <ul class=\"sp-card-list\">\r\n        <li>50A configuration.<\/li>\r\n        <li>4-foot twist-type connector.<\/li>\r\n        <li>Secure connection design.<\/li>\r\n      <\/ul>\r\n\r\n      <a\r\n        class=\"sp-card-button\"\r\n        href=\"https:\/\/smartplug.com\/50a-smartplug-female-connector-to-50a-male-4ft-twist-type-connector\/\"\r\n        target=\"_blank\"\r\n        rel=\"noopener noreferrer\"\r\n      >\r\n        Learn More\r\n\r\n      <\/a>\r\n\r\n    <\/article>\r\n<article\r\n      class=\"sp-card\"\r\n    >\r\n\r\n      <div class=\"sp-card-image\">\r\n        <a href=\"https:\/\/smartplug.com\/50a-smartplug-female-connector-to-30a-male-twist-type-connector\/\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"display: contents;\">\r\n<img decoding=\"async\"\r\n          src=\"https:\/\/smartplug.com\/wp-content\/uploads\/2026\/04\/50A-SmartPlug-Female-Connector-to-30A-Male-Twist-type-Connector.webp\"\r\n          alt=\"50A FEMALE CONNECTOR TO 30A MALE TWIST-TYPE CONNECTOR\"\r\n          loading=\"lazy\"\r\n        >\r\n      <\/a>\r\n<\/div>\r\n\r\n\r\n      <h3 class=\"sp-card-title\">\r\n        50A FEMALE CONNECTOR TO 30A MALE TWIST-TYPE CONNECTOR\r\n      <\/h3>\r\n\r\n      <p class=\"sp-card-description\">\r\n        Connector adapter designed to connect a 50A SmartPlug female connection with a 30A twist-type male connection.\r\n      <\/p>\r\n\r\n      <ul class=\"sp-card-list\">\r\n        <li>50A SmartPlug female connection.<\/li>\r\n        <li>30A twist-type male connection.<\/li>\r\n        <li>Convenient adapter configuration.<\/li>\r\n      <\/ul>\r\n\r\n      <a\r\n        class=\"sp-card-button\"\r\n        href=\"https:\/\/smartplug.com\/50a-smartplug-female-connector-to-30a-male-twist-type-connector\/\"\r\n        target=\"_blank\"\r\n        rel=\"noopener noreferrer\"\r\n      >\r\n        Learn More\r\n\r\n      <\/a>\r\n\r\n    <\/article>\r\n<article\r\n      class=\"sp-card\"\r\n    >\r\n\r\n      <div class=\"sp-card-image\">\r\n        <a href=\"https:\/\/smartplug.com\/30a-female-twist-type-connector-to-30a-smartplug-male-connector\/\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"display: contents;\">\r\n<img decoding=\"async\"\r\n          src=\"https:\/\/smartplug.com\/wp-content\/uploads\/2026\/07\/30A-Female-Twist-type-Connector-to-30A-SmartPlug-Male-Connector.avif\"\r\n          alt=\"30A FEMALE TWIST-TYPE CONNECTOR TO 30A MALE CONNECTOR\"\r\n          loading=\"lazy\"\r\n        >\r\n      <\/a>\r\n<\/div>\r\n\r\n\r\n      <h3 class=\"sp-card-title\">\r\n        30A FEMALE TWIST-TYPE CONNECTOR TO 30A MALE CONNECTOR\r\n      <\/h3>\r\n\r\n      <p class=\"sp-card-description\">\r\n        Adapter configuration connecting a 30A female twist-type connector to a SmartPlug male connector.\r\n      <\/p>\r\n\r\n      <ul class=\"sp-card-list\">\r\n        <li>30A configuration.<\/li>\r\n        <li>Twist-type female connection.<\/li>\r\n        <li>SmartPlug male connection.<\/li>\r\n      <\/ul>\r\n\r\n      <a\r\n        class=\"sp-card-button\"\r\n        href=\"https:\/\/smartplug.com\/30a-female-twist-type-connector-to-30a-smartplug-male-connector\/\"\r\n        target=\"_blank\"\r\n        rel=\"noopener noreferrer\"\r\n      >\r\n        Learn More\r\n\r\n      <\/a>\r\n\r\n    <\/article>\r\n<article\r\n      class=\"sp-card\"\r\n    >\r\n\r\n      <div class=\"sp-card-image\">\r\n        <a href=\"https:\/\/smartplug.com\/50a-smartplug-male-connector-to-50a-female-4ft-twist-type-connector\/\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"display: contents;\">\r\n<img decoding=\"async\"\r\n          src=\"https:\/\/smartplug.com\/wp-content\/uploads\/2026\/07\/50A-SmartPlug-Male-Connector-to-50A-Female-4ft-Twist-type-Connector.avif\"\r\n          alt=\"50A MALE CONNECTOR TO 50A FEMALE 4FT TWIST-TYPE CONNECTOR\"\r\n          loading=\"lazy\"\r\n        >\r\n      <\/a>\r\n<\/div>\r\n\r\n\r\n      <h3 class=\"sp-card-title\">\r\n        50A MALE CONNECTOR TO 50A FEMALE 4FT TWIST-TYPE CONNECTOR\r\n      <\/h3>\r\n\r\n      <p class=\"sp-card-description\">\r\n        A 50A adapter configuration designed to connect SmartPlug and twist-type power systems.\r\n      <\/p>\r\n\r\n      <ul class=\"sp-card-list\">\r\n        <li>50A configuration.<\/li>\r\n        <li>4-foot twist-type connector.<\/li>\r\n        <li>Secure connection design.<\/li>\r\n      <\/ul>\r\n\r\n      <a\r\n        class=\"sp-card-button\"\r\n        href=\"https:\/\/smartplug.com\/50a-smartplug-male-connector-to-50a-female-4ft-twist-type-connector\/\"\r\n        target=\"_blank\"\r\n        rel=\"noopener noreferrer\"\r\n      >\r\n        Learn More\r\n\r\n      <\/a>\r\n\r\n    <\/article>\r\n<article\r\n      class=\"sp-card\"\r\n    >\r\n\r\n      <div class=\"sp-card-image\">\r\n        <a href=\"https:\/\/smartplug.com\/sp-dock-lifts\/\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"display: contents;\">\r\n<img decoding=\"async\"\r\n          src=\"https:\/\/smartplug.com\/wp-content\/uploads\/2026\/07\/SmartPlug-Dock-Lift-Kit.avif\"\r\n          alt=\"SP DOCK LIFTS\"\r\n          loading=\"lazy\"\r\n        >\r\n      <\/a>\r\n<\/div>\r\n\r\n\r\n      <h3 class=\"sp-card-title\">\r\n        DOCK LIFTS\r\n      <\/h3>\r\n\r\n      <p class=\"sp-card-description\">\r\n        Dockside mounting equipment designed to support convenient SmartPlug installation and positioning.\r\n      <\/p>\r\n\r\n      <ul class=\"sp-card-list\">\r\n        <li>Designed for dockside applications.<\/li>\r\n        <li>Durable mounting hardware.<\/li>\r\n        <li>Supports SmartPlug installations.<\/li>\r\n      <\/ul>\r\n\r\n      <a\r\n        class=\"sp-card-button\"\r\n        href=\"https:\/\/smartplug.com\/sp-dock-lifts\/\"\r\n        target=\"_blank\"\r\n        rel=\"noopener noreferrer\"\r\n      >\r\n        Learn More\r\n\r\n      <\/a>\r\n\r\n    <\/article>\r\n<article\r\n      class=\"sp-card\"\r\n    >\r\n      <div class=\"sp-card-image\">\r\n        <a href=\"https:\/\/smartplug.com\/lighthouse-pedestal-retro-fit-conversion-kit\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"display: contents;\">\r\n<img decoding=\"async\"\r\n          src=\"https:\/\/smartplug.com\/wp-content\/uploads\/2026\/07\/EATON-Lighthouse-Pedestal-Retro-fit-Conversion-Kit.avif\"\r\n          alt=\"EATON LIGHTHOUSE PEDESTAL RETRO-FIT CONVERSION KIT\"\r\n          loading=\"lazy\"\r\n        >\r\n      <\/a>\r\n<\/div>\r\n\r\n\r\n\r\n      <h3 class=\"sp-card-title\">\r\n        EATON LIGHTHOUSE PEDESTAL RETRO-FIT CONVERSION KIT\r\n      <\/h3>\r\n\r\n      <p class=\"sp-card-description\">\r\n        Retrofit hardware designed to convert compatible Eaton Lighthouse pedestal installations for SmartPlug equipment.\r\n      <\/p>\r\n\r\n      <ul class=\"sp-card-list\">\r\n        <li>Retrofit-ready design.<\/li>\r\n        <li>Pedestal installation hardware.<\/li>\r\n        <li>Durable construction.<\/li>\r\n      <\/ul>\r\n\r\n      <a\r\n        class=\"sp-card-button\"\r\n        href=\"https:\/\/smartplug.com\/lighthouse-pedestal-retro-fit-conversion-kit\"\r\n        target=\"_blank\"\r\n        rel=\"noopener noreferrer\"\r\n      >\r\n        Learn More\r\n\r\n      <\/a>\r\n\r\n    <\/article>\r\n<article\r\n      class=\"sp-card\"\r\n    >\r\n      <div class=\"sp-card-image\">\r\n        <a href=\"https:\/\/smartplug.com\/eaton-lighthouse-double-pedestal-retro-fit-conversion-kit\/\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"display: contents;\">\r\n<img decoding=\"async\"\r\n          src=\"https:\/\/smartplug.com\/wp-content\/uploads\/2026\/07\/EATON-Lighthouse-Double-Pedestal-Retro-fit-Conversion-Kit.avif\"\r\n          alt=\"EATON LIGHTHOUSE DOUBLE PEDESTAL RETRO-FIT CONVERSION KIT\"\r\n          loading=\"lazy\"\r\n        >\r\n      <\/a>\r\n<\/div>\r\n\r\n\r\n\r\n      <h3 class=\"sp-card-title\">\r\n        EATON LIGHTHOUSE DOUBLE PEDESTAL RETRO-FIT CONVERSION KIT\r\n      <\/h3>\r\n\r\n      <p class=\"sp-card-description\">\r\n        Retrofit conversion hardware designed for upgrading compatible Eaton Lighthouse double pedestal systems.\r\n      <\/p>\r\n\r\n      <ul class=\"sp-card-list\">\r\n        <li>Designed for retrofit installations.<\/li>\r\n        <li>Supports double pedestal applications.<\/li>\r\n        <li>Durable mounting components.<\/li>\r\n      <\/ul>\r\n\r\n      <a\r\n        class=\"sp-card-button\"\r\n        href=\"https:\/\/smartplug.com\/eaton-lighthouse-double-pedestal-retro-fit-conversion-kit\/\"\r\n        target=\"_blank\"\r\n        rel=\"noopener noreferrer\"\r\n      >\r\n        Learn More\r\n\r\n      <\/a>\r\n\r\n    <\/article>\r\n<article\r\n      class=\"sp-card\"\r\n    >\r\n      <div class=\"sp-card-image\">\r\n        <a href=\"https:\/\/smartplug.com\/lighthouse-pedestal-mounting-bracket\/\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"display: contents;\">\r\n<img decoding=\"async\"\r\n          src=\"https:\/\/smartplug.com\/wp-content\/uploads\/2026\/07\/EATON-Lighthouse-Pedestal-Mounting-Bracket.avif\"\r\n          alt=\"EATON LIGHTHOUSE PEDESTAL MOUNTING BRACKET\"\r\n          loading=\"lazy\"\r\n        >\r\n      <\/a>\r\n<\/div>\r\n\r\n\r\n\r\n      <h3 class=\"sp-card-title\">\r\n        EATON LIGHTHOUSE PEDESTAL MOUNTING BRACKET\r\n      <\/h3>\r\n\r\n      <p class=\"sp-card-description\">\r\n        Mounting hardware designed for installing SmartPlug equipment on compatible Eaton Lighthouse pedestal systems.\r\n      <\/p>\r\n\r\n      <ul class=\"sp-card-list\">\r\n        <li>Pedestal mounting solution.<\/li>\r\n        <li>Durable construction.<\/li>\r\n        <li>Designed for SmartPlug installations.<\/li>\r\n      <\/ul>\r\n\r\n      <a\r\n        class=\"sp-card-button\"\r\n        href=\"https:\/\/smartplug.com\/lighthouse-pedestal-mounting-bracket\/\"\r\n        target=\"_blank\"\r\n        rel=\"noopener noreferrer\"\r\n      >\r\n        Learn More\r\n\r\n      <\/a>\r\n\r\n    <\/article>\r\n<article\r\n      class=\"sp-card\"\r\n    >\r\n      <div class=\"sp-card-image\">\r\n        <a href=\"https:\/\/smartplug.com\/legacy-lighthouse-pedestal-mounting-bracket\/\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"display: contents;\">\r\n<img decoding=\"async\"\r\n          src=\"https:\/\/smartplug.com\/wp-content\/uploads\/2026\/07\/LEGACY-Lighthouse-Pedestal-Mounting-Bracket.avif\"\r\n          alt=\"LEGACY LIGHTHOUSE PEDESTAL MOUNTING BRACKET\"\r\n          loading=\"lazy\"\r\n        >\r\n      <\/a>\r\n<\/div>\r\n\r\n\r\n\r\n      <h3 class=\"sp-card-title\">\r\n        LEGACY LIGHTHOUSE PEDESTAL MOUNTING BRACKET\r\n      <\/h3>\r\n\r\n      <p class=\"sp-card-description\">\r\n        Mounting hardware designed to support SmartPlug installations on Lighthouse pedestal systems.\r\n      <\/p>\r\n\r\n      <ul class=\"sp-card-list\">\r\n        <li>Designed for pedestal installations.<\/li>\r\n        <li>Durable mounting construction.<\/li>\r\n        <li>Helps simplify SmartPlug installation.<\/li>\r\n      <\/ul>\r\n\r\n      <a\r\n        class=\"sp-card-button\"\r\n        href=\"https:\/\/smartplug.com\/legacy-lighthouse-pedestal-mounting-bracket\/\"\r\n        target=\"_blank\"\r\n        rel=\"noopener noreferrer\"\r\n      >\r\n        Learn More\r\n\r\n      <\/a>\r\n\r\n    <\/article>\r\n<article\r\n      class=\"sp-card\"\r\n    >\r\n\r\n      <div class=\"sp-card-image\">\r\n        <a href=\"https:\/\/smartplug.com\/smartplug-weathercap\/\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"display: contents;\">\r\n<img decoding=\"async\"\r\n          src=\"https:\/\/smartplug.com\/wp-content\/uploads\/2026\/07\/SmartPlug-Weathercap.avif\"\r\n          alt=\"WEATHERCAP\"\r\n          loading=\"lazy\"\r\n        >\r\n      <\/a>\r\n<\/div>\r\n\r\n\r\n      <h3 class=\"sp-card-title\">\r\n        WEATHERCAP\r\n      <\/h3>\r\n\r\n      <p class=\"sp-card-description\">\r\n        Protective cover that shields an unused SmartPlug connection from moisture and debris.\r\n      <\/p>\r\n\r\n      <ul class=\"sp-card-list\">\r\n        <li>Protects open connections.<\/li>\r\n        <li>Helps prevent moisture and dirt.<\/li>\r\n        <li>Tethered protective design.<\/li>\r\n      <\/ul>\r\n\r\n      <a\r\n        class=\"sp-card-button\"\r\n        href=\"https:\/\/smartplug.com\/smartplug-weathercap\/\"\r\n        target=\"_blank\"\r\n        rel=\"noopener noreferrer\"\r\n      >\r\n        Learn More\r\n\r\n      <\/a>\r\n\r\n    <\/article>\r\n<article\r\n      class=\"sp-card\"\r\n    >\r\n\r\n      <div class=\"sp-card-image\">\r\n        <a href=\"https:\/\/smartplug.com\/smartplug-female-receptacle\/\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"display: contents;\">\r\n<img decoding=\"async\"\r\n          src=\"https:\/\/smartplug.com\/wp-content\/uploads\/2026\/07\/SmartPlug-Female-Receptacle.avif\"\r\n          alt=\"FEMALE RECEPTACLE\"\r\n          loading=\"lazy\"\r\n        >\r\n      <\/a>\r\n<\/div>\r\n\r\n\r\n      <h3 class=\"sp-card-title\">\r\n        FEMALE RECEPTACLE\r\n      <\/h3>\r\n\r\n      <p class=\"sp-card-description\">\r\n        A SmartPlug female receptacle designed to provide a secure connection point for compatible power equipment.\r\n      <\/p>\r\n\r\n      <ul class=\"sp-card-list\">\r\n        <li>Secure electrical connection.<\/li>\r\n        <li>Designed for SmartPlug systems.<\/li>\r\n        <li>Durable construction.<\/li>\r\n      <\/ul>\r\n\r\n      <a\r\n        class=\"sp-card-button\"\r\n        href=\"https:\/\/smartplug.com\/smartplug-female-receptacle\/\"\r\n        target=\"_blank\"\r\n        rel=\"noopener noreferrer\"\r\n      >\r\n        Learn More\r\n\r\n      <\/a>\r\n\r\n    <\/article>\r\n<article\r\n      class=\"sp-card\"\r\n    >\r\n\r\n      <div class=\"sp-card-image\">\r\n        <a href=\"https:\/\/smartplug.com\/smartplug-weather-door-receptacle\/\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"display: contents;\">\r\n<img decoding=\"async\"\r\n          src=\"https:\/\/smartplug.com\/wp-content\/uploads\/2026\/07\/SmartPlug-Weather-Door-Receptacle.avif\"\r\n          alt=\"WEATHER DOOR RECEPTACLE\"\r\n          loading=\"lazy\"\r\n        >\r\n      <\/a>\r\n<\/div>\r\n\r\n\r\n      <h3 class=\"sp-card-title\">\r\n        WEATHER DOOR RECEPTACLE\r\n      <\/h3>\r\n\r\n      <p class=\"sp-card-description\">\r\n        Weather-protective receptacle component designed to help shield compatible electrical connections.\r\n      <\/p>\r\n\r\n      <ul class=\"sp-card-list\">\r\n        <li>Helps protect against weather.<\/li>\r\n        <li>Designed for exterior installations.<\/li>\r\n        <li>SmartPlug-compatible component.<\/li>\r\n      <\/ul>\r\n\r\n      <a\r\n        class=\"sp-card-button\"\r\n        href=\"https:\/\/smartplug.com\/smartplug-weather-door-receptacle\/\"\r\n        target=\"_blank\"\r\n        rel=\"noopener noreferrer\"\r\n      >\r\n        Learn More\r\n\r\n      <\/a>\r\n\r\n    <\/article>\r\n  <\/div>\r\n<\/div>\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<div class=\"elementor-element elementor-element-7e8e95d elementor-hidden-desktop elementor-hidden-laptop elementor-hidden-tablet elementor-hidden-mobile 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=\"7e8e95d\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1cbc9f9 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"1cbc9f9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-3a92e76 elementor-hidden-desktop elementor-hidden-laptop elementor-hidden-tablet elementor-hidden-mobile 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=\"3a92e76\" 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-81cef4a 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=\"81cef4a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-9164a08 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=\"9164a08\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9ecf884 elementor-widget elementor-widget-text-editor\" data-id=\"9ecf884\" 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>Why Smartplug<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-51951a9 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"51951a9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5096584 elementor-widget elementor-widget-text-editor\" data-id=\"5096584\" 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><strong>The difference is clear.<\/strong><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b94366c elementor-widget elementor-widget-text-editor\" data-id=\"b94366c\" 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 class=\"sp-clarity-copy\">Shore power connectors have barely changed since 1938. Twist-lock pins offer almost no contact area, so they work loose, arc, and overheat \u2014 long before a breaker ever trips. SmartPlug&#8217;s straight-in pin design fixes the actual problem: the connection itself.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-5541ba7 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=\"5541ba7\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b2ed57e elementor-mobile-align-center elementor-widget elementor-widget-button\" data-id=\"b2ed57e\" 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\/uncategorized\/hot-or-not-2\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-arrow-right\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M190.5 66.9l22.2-22.2c9.4-9.4 24.6-9.4 33.9 0L441 239c9.4 9.4 9.4 24.6 0 33.9L246.6 467.3c-9.4 9.4-24.6 9.4-33.9 0l-22.2-22.2c-9.5-9.5-9.3-25 .4-34.3L311.4 296H24c-13.3 0-24-10.7-24-24v-32c0-13.3 10.7-24 24-24h287.4L190.9 101.2c-9.8-9.3-10-24.8-.4-34.3z\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Explore The Technology<\/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<div class=\"elementor-element elementor-element-9d8334a 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=\"9d8334a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f18e7da elementor-widget elementor-widget-html\" data-id=\"f18e7da\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div class=\"sp-compare-wrap\">\r\n  <div class=\"sp-compare\" id=\"spCompare\">\r\n    <!-- After Image (Bottom Layer, full-bleed) -->\r\n    <div class=\"sp-compare-img sp-compare-after\">\r\n      <img decoding=\"async\"\r\n        src=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/08\/new-after.png\"\r\n        alt=\"SmartPlug secure connection\"\r\n      >\r\n    <\/div>\r\n    <!-- Before Image (Top Layer, clipped, full-bleed) -->\r\n    <div class=\"sp-compare-img sp-compare-before\" id=\"spCompareBefore\">\r\n      <img decoding=\"async\"\r\n        src=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/08\/new-before.png\"\r\n        alt=\"Traditional twist-lock overheating\"\r\n      >\r\n    <\/div>\r\n    <!-- Tags: centered at bottom, toggle visibility via JS -->\r\n    <span class=\"sp-tag sp-tag-after\" id=\"spTagAfter\">SmartPlug<\/span>\r\n    <span class=\"sp-tag sp-tag-before\" id=\"spTagBefore\">Twist-Lock<\/span>\r\n    <!-- Drag Handle -->\r\n    <div class=\"sp-compare-handle\" id=\"spCompareHandle\">\r\n      <div class=\"sp-compare-handle-label\" id=\"spHandleLabel\">Drag<\/div>\r\n      <div class=\"sp-compare-handle-line\"><\/div>\r\n      <div class=\"sp-compare-handle-btn\">\r\n        <svg viewBox=\"0 0 24 24\" fill=\"none\">\r\n          <path d=\"M8 6L2 12L8 18\" stroke=\"#102141\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\r\n          <path d=\"M16 6L22 12L16 18\" stroke=\"#102141\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\r\n        <\/svg>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n<script>\r\n(function () {\r\n  const compare = document.getElementById(\"spCompare\");\r\n  const before = document.getElementById(\"spCompareBefore\");\r\n  const handle = document.getElementById(\"spCompareHandle\");\r\n  const tagAfter = document.getElementById(\"spTagAfter\");\r\n  const tagBefore = document.getElementById(\"spTagBefore\");\r\n  const handleLabel = document.getElementById(\"spHandleLabel\");\r\n  let dragging = false;\r\n  let labelTimer = null;\r\n\r\n  const START_POSITION = 88; \/\/ handle starts near the right edge\r\n  const LABEL_IDLE_DELAY = 3000; \/\/ ms of no interaction before \"Drag\" reappears\r\n\r\n  function hideLabel() {\r\n    handleLabel.classList.remove(\"sp-label-visible\");\r\n  }\r\n  function showLabel() {\r\n    handleLabel.classList.add(\"sp-label-visible\");\r\n  }\r\n  function scheduleLabel() {\r\n    clearTimeout(labelTimer);\r\n    labelTimer = setTimeout(showLabel, LABEL_IDLE_DELAY);\r\n  }\r\n\r\n  function setPosition(percent) {\r\n    percent = Math.max(0, Math.min(100, percent));\r\n    before.style.clipPath = `inset(0 ${100 - percent}% 0 0)`;\r\n    handle.style.left = `${percent}%`;\r\n    \/\/ Toggle labels based on which image occupies more than half the frame\r\n    if (percent > 50) {\r\n      tagBefore.classList.add(\"sp-tag-visible\");\r\n      tagAfter.classList.remove(\"sp-tag-visible\");\r\n    } else {\r\n      tagAfter.classList.add(\"sp-tag-visible\");\r\n      tagBefore.classList.remove(\"sp-tag-visible\");\r\n    }\r\n  }\r\n  function getPercentFromEvent(clientX) {\r\n    const rect = compare.getBoundingClientRect();\r\n    return ((clientX - rect.left) \/ rect.width) * 100;\r\n  }\r\n  function onMove(e) {\r\n    if (!dragging) return;\r\n    const clientX = e.touches ? e.touches[0].clientX : e.clientX;\r\n    setPosition(getPercentFromEvent(clientX));\r\n  }\r\n  function startDrag() {\r\n    dragging = true;\r\n    compare.classList.add(\"sp-dragging\");\r\n    hideLabel();\r\n    clearTimeout(labelTimer);\r\n  }\r\n  function endDrag() {\r\n    if (!dragging) return;\r\n    dragging = false;\r\n    compare.classList.remove(\"sp-dragging\");\r\n    scheduleLabel();\r\n  }\r\n  handle.addEventListener(\"mousedown\", startDrag);\r\n  handle.addEventListener(\"touchstart\", startDrag, { passive: true });\r\n  window.addEventListener(\"mousemove\", onMove);\r\n  window.addEventListener(\"touchmove\", onMove, { passive: true });\r\n  window.addEventListener(\"mouseup\", endDrag);\r\n  window.addEventListener(\"touchend\", endDrag);\r\n  compare.addEventListener(\"click\", function (e) {\r\n    if (e.target.closest(\".sp-compare-handle\")) return;\r\n    setPosition(getPercentFromEvent(e.clientX));\r\n    hideLabel();\r\n    scheduleLabel();\r\n  });\r\n\r\n  setPosition(START_POSITION);\r\n\r\n  window.addEventListener(\"load\", function () {\r\n    setTimeout(function () {\r\n      setPosition(START_POSITION - 20);\r\n      setTimeout(function () {\r\n        setPosition(START_POSITION);\r\n        scheduleLabel();\r\n      }, 500);\r\n    }, 600);\r\n  });\r\n})();\r\n<\/script>\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<div class=\"elementor-element elementor-element-2362cab elementor-hidden-desktop elementor-hidden-laptop elementor-hidden-tablet elementor-hidden-mobile 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=\"2362cab\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b8144a5 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"b8144a5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\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>Dockside \u2630 0 Having trouble finding the right product? TRY PRODUCT FILTER Product Filter Reset Filters Application Marine RV Dockside Specialty Product Type Connector Cordset Inlet ELCI Service Kits Combokit Data Ports Amperage 15AStandard outlets 16ACompact setups 30AMost RVs 32ALarger boats 50ALarge RVs &amp; boats Matching Products Check an attribute above to see matching products. Browse All Products \u2192 15 AMP 115V &#8211; 4&#8242; CORDSET Easy one-handed engagement and dis-engagement of your RV power connection. Safe and simple shore power connection. Multi-point clips secure plug firmly. Weatherproof seals help keep moisture out. Learn More DUAL CONFIGURATION CORDSET WITH CONNECTOR SHORE POWER END Secure multi-point locking and weatherproof seals provide dependable shore power connections. Multi-point clips secure the plug. Locking system reduces cord stress. Weatherproof protection. Learn More 30A FEMALE CONNECTOR TO 30A TWIST-TYPE MALE CONNECTOR Adapter configuration connecting a SmartPlug female connector to a 30A twist-type male connector. 30A configuration. Convenient connector conversion. Secure power connection. Learn More 50A FEMALE CONNECTOR TO 15A STANDARD WALL PLUG CONNECTOR Adapter configuration providing a SmartPlug connection to a standard 15A wall plug. 50A SmartPlug female connector. 15A standard wall plug end. Convenient power conversion. Learn More 50A FEMALE CONNECTOR TO 50A MALE 4FT TWIST-TYPE CONNECTOR A 50A connector configuration with a 4-foot twist-type male connector for compatible shore power systems. 50A configuration. 4-foot twist-type connector. Secure connection design. Learn More 50A FEMALE CONNECTOR TO 30A MALE TWIST-TYPE CONNECTOR Connector adapter designed to connect a 50A SmartPlug female connection with a 30A twist-type male connection. 50A SmartPlug female connection. 30A twist-type male connection. Convenient adapter configuration. Learn More 30A FEMALE TWIST-TYPE CONNECTOR TO 30A MALE CONNECTOR Adapter configuration connecting a 30A female twist-type connector to a SmartPlug male connector. 30A configuration. Twist-type female connection. SmartPlug male connection. Learn More 50A MALE CONNECTOR TO 50A FEMALE 4FT TWIST-TYPE CONNECTOR A 50A adapter configuration designed to connect SmartPlug and twist-type power systems. 50A configuration. 4-foot twist-type connector. Secure connection design. Learn More DOCK LIFTS Dockside mounting equipment designed to support convenient SmartPlug installation and positioning. Designed for dockside applications. Durable mounting hardware. Supports SmartPlug installations. Learn More EATON LIGHTHOUSE PEDESTAL RETRO-FIT CONVERSION KIT Retrofit hardware designed to convert compatible Eaton Lighthouse pedestal installations for SmartPlug equipment. Retrofit-ready design. Pedestal installation hardware. Durable construction. Learn More EATON LIGHTHOUSE DOUBLE PEDESTAL RETRO-FIT CONVERSION KIT Retrofit conversion hardware designed for upgrading compatible Eaton Lighthouse double pedestal systems. Designed for retrofit installations. Supports double pedestal applications. Durable mounting components. Learn More EATON LIGHTHOUSE PEDESTAL MOUNTING BRACKET Mounting hardware designed for installing SmartPlug equipment on compatible Eaton Lighthouse pedestal systems. Pedestal mounting solution. Durable construction. Designed for SmartPlug installations. Learn More LEGACY LIGHTHOUSE PEDESTAL MOUNTING BRACKET Mounting hardware designed to support SmartPlug installations on Lighthouse pedestal systems. Designed for pedestal installations. Durable mounting construction. Helps simplify SmartPlug installation. Learn More WEATHERCAP Protective cover that shields an unused SmartPlug connection from moisture and debris. Protects open connections. Helps prevent moisture and dirt. Tethered protective design. Learn More FEMALE RECEPTACLE A SmartPlug female receptacle designed to provide a secure connection point for compatible power equipment. Secure electrical connection. Designed for SmartPlug systems. Durable construction. Learn More WEATHER DOOR RECEPTACLE Weather-protective receptacle component designed to help shield compatible electrical connections. Helps protect against weather. Designed for exterior installations. SmartPlug-compatible component. Learn More Why Smartplug The difference is clear. Shore power connectors have barely changed since 1938. Twist-lock pins offer almost no contact area, so they work loose, arc, and overheat \u2014 long before a breaker ever trips. SmartPlug&#8217;s straight-in pin design fixes the actual problem: the connection itself. Explore The Technology SmartPlug Twist-Lock Drag<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":14240,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-2736","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/dev.smartplug.com\/staging\/wp-json\/wp\/v2\/pages\/2736","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=2736"}],"version-history":[{"count":253,"href":"https:\/\/dev.smartplug.com\/staging\/wp-json\/wp\/v2\/pages\/2736\/revisions"}],"predecessor-version":[{"id":20809,"href":"https:\/\/dev.smartplug.com\/staging\/wp-json\/wp\/v2\/pages\/2736\/revisions\/20809"}],"up":[{"embeddable":true,"href":"https:\/\/dev.smartplug.com\/staging\/wp-json\/wp\/v2\/pages\/14240"}],"wp:attachment":[{"href":"https:\/\/dev.smartplug.com\/staging\/wp-json\/wp\/v2\/media?parent=2736"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}