{"id":12412,"date":"2025-12-19T21:11:25","date_gmt":"2025-12-19T21:11:25","guid":{"rendered":"https:\/\/dev.smartplug.com\/staging\/?page_id=12412"},"modified":"2026-10-07T13:09:49","modified_gmt":"2026-10-07T13:09:49","slug":"boat","status":"publish","type":"page","link":"https:\/\/dev.smartplug.com\/staging\/categories\/boat\/","title":{"rendered":"Boat"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"12412\" class=\"elementor elementor-12412\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3bca2de e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-parent\" data-id=\"3bca2de\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-a6fee19 e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child\" data-id=\"a6fee19\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-0037da4 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child\" data-id=\"0037da4\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7fe139b elementor-widget elementor-widget-heading\" data-id=\"7fe139b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">BOAT<\/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-a90df31 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=\"a90df31\" 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-c61bfee elementor-widget elementor-widget-html\" data-id=\"c61bfee\" 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\">\r\n\r\n    <div class=\"custom-dock-trigger\" id=\"custom-dock-trigger\">\r\n        \u2630\r\n        <span class=\"custom-dock-badge\" id=\"custom-dock-badge\">0<\/span>\r\n    <\/div>\r\n\r\n    <!-- Periodic hint bubble: nudges visitors who haven't opened the dock yet.\r\n         Pauses while the dock is open\/hovered, and restarts its 5s cycle\r\n         fresh the moment the dock is closed again. -->\r\n    <div class=\"custom-dock-hint\" id=\"custom-dock-hint\">\r\n        <small>Having trouble finding the right product?<\/small>\r\n        <strong>TRY PRODUCT FILTER<\/strong>\r\n    <\/div>\r\n\r\n    <div class=\"custom-dock-flyout\">\r\n\r\n        <div class=\"custom-dock-header-row\">\r\n            <span class=\"custom-dock-filter-label\">Product Filter<\/span>\r\n            <button type=\"button\" class=\"custom-dock-reset-btn\" id=\"custom-dock-reset-btn\">\r\n                Reset Filters\r\n            <\/button>\r\n        <\/div>\r\n\r\n        \r\n\r\n        <!-- Search box: lets someone jump straight to a product by name -->\r\n        <div class=\"custom-dock-search-row\">\r\n            <input\r\n                type=\"text\"\r\n                id=\"custom-dock-search\"\r\n                class=\"custom-dock-search-input\"\r\n                placeholder=\"Search products\u2026\"\r\n                autocomplete=\"off\"\r\n            >\r\n        <\/div>\r\n\r\n        <!-- Active filter chips: shows what's selected, removable at a glance -->\r\n        <div class=\"custom-dock-chips\" id=\"custom-dock-chips\"><\/div>\r\n\r\n        <!-- Application -->\r\n\r\n        <button class=\"custom-dock-cat-btn\">\r\n            Application\r\n        <\/button>\r\n\r\n        <div class=\"custom-dock-prod-list\">\r\n\r\n            <label class=\"custom-dock-prod-link\">\r\n                <input type=\"checkbox\" class=\"product-filter\" data-filter=\"application\" value=\"marine\">\r\n                Marine\r\n            <\/label>\r\n\r\n            <label class=\"custom-dock-prod-link\">\r\n                <input type=\"checkbox\" class=\"product-filter\" data-filter=\"application\" value=\"rv\">\r\n                RV\r\n            <\/label>\r\n\r\n            <label class=\"custom-dock-prod-link\">\r\n                <input type=\"checkbox\" class=\"product-filter\" data-filter=\"application\" value=\"dockside\">\r\n                Dockside\r\n            <\/label>\r\n\r\n            <label class=\"custom-dock-prod-link\">\r\n                <input type=\"checkbox\" class=\"product-filter\" data-filter=\"application\" value=\"specialty\">\r\n                Specialty\r\n            <\/label>\r\n\r\n        <\/div>\r\n\r\n        <!-- Product Type -->\r\n\r\n        <button class=\"custom-dock-cat-btn\">\r\n            Product Type\r\n        <\/button>\r\n\r\n        <div class=\"custom-dock-prod-list\">\r\n\r\n            <label class=\"custom-dock-prod-link\">\r\n                <input type=\"checkbox\" class=\"product-filter\" data-filter=\"type\" value=\"connector\">\r\n                Connector\r\n            <\/label>\r\n\r\n            <label class=\"custom-dock-prod-link\">\r\n                <input type=\"checkbox\" class=\"product-filter\" data-filter=\"type\" value=\"cordset\">\r\n                Cordset\r\n            <\/label>\r\n\r\n            <!-- Plain checkbox again \u2014 no nested panel here anymore.\r\n                 The color sub-filter now lives down in the results section,\r\n                 right under the \"Matching Products\" header. -->\r\n            <label class=\"custom-dock-prod-link\">\r\n                <input type=\"checkbox\" class=\"product-filter\" data-filter=\"type\" value=\"inlet\">\r\n                Inlet\r\n            <\/label>\r\n\r\n            <label class=\"custom-dock-prod-link\">\r\n                <input type=\"checkbox\" class=\"product-filter\" data-filter=\"type\" value=\"elci\">\r\n                ELCI\r\n            <\/label>\r\n\r\n            <label class=\"custom-dock-prod-link\">\r\n                <input type=\"checkbox\" class=\"product-filter\" data-filter=\"type\" value=\"service-kits\">\r\n                Service Kits\r\n            <\/label>\r\n\r\n            <label class=\"custom-dock-prod-link\">\r\n                <input type=\"checkbox\" class=\"product-filter\" data-filter=\"type\" value=\"combokit\">\r\n                Combokit\r\n            <\/label>\r\n\r\n            <label class=\"custom-dock-prod-link\">\r\n                <input type=\"checkbox\" class=\"product-filter\" data-filter=\"type\" value=\"data-ports\">\r\n                Data Ports\r\n            <\/label>\r\n\r\n        <\/div>\r\n\r\n        <!-- Amperage -->\r\n\r\n        <button class=\"custom-dock-cat-btn\">\r\n            Amperage\r\n        <\/button>\r\n\r\n        <div class=\"custom-dock-prod-list custom-dock-prod-list-amp\">\r\n\r\n            <label class=\"custom-dock-prod-link custom-dock-amp-link\">\r\n                <input type=\"checkbox\" class=\"product-filter\" data-filter=\"amp\" value=\"15\">\r\n                <span class=\"custom-dock-amp-text\">15A<small>Standard outlets<\/small><\/span>\r\n            <\/label>\r\n\r\n            <label class=\"custom-dock-prod-link custom-dock-amp-link\">\r\n                <input type=\"checkbox\" class=\"product-filter\" data-filter=\"amp\" value=\"16\">\r\n                <span class=\"custom-dock-amp-text\">16A<small>Compact setups<\/small><\/span>\r\n            <\/label>\r\n\r\n            <label class=\"custom-dock-prod-link custom-dock-amp-link\">\r\n                <input type=\"checkbox\" class=\"product-filter\" data-filter=\"amp\" value=\"30\">\r\n                <span class=\"custom-dock-amp-text\">30A<small>Most RVs<\/small><\/span>\r\n            <\/label>\r\n\r\n            <label class=\"custom-dock-prod-link custom-dock-amp-link\">\r\n                <input type=\"checkbox\" class=\"product-filter\" data-filter=\"amp\" value=\"32\">\r\n                <span class=\"custom-dock-amp-text\">32A<small>Larger boats<\/small><\/span>\r\n            <\/label>\r\n\r\n            <label class=\"custom-dock-prod-link custom-dock-amp-link\">\r\n                <input type=\"checkbox\" class=\"product-filter\" data-filter=\"amp\" value=\"50\">\r\n                <span class=\"custom-dock-amp-text\">50A<small>Large RVs &amp; boats<\/small><\/span>\r\n            <\/label>\r\n\r\n        <\/div>\r\n\r\n        <div class=\"custom-dock-results\">\r\n\r\n            <h4>Matching Products <span id=\"match-count\" class=\"custom-dock-match-count\"><\/span><\/h4>\r\n\r\n            <!-- Compact horizontal checkbox row (e.g. Color), no heading text.\r\n                 Sits right under \"Matching Products\" and above the cards.\r\n                 Populated by renderSubFilters(). -->\r\n            <div id=\"sub-filters-section\"><\/div>\r\n\r\n            <div id=\"recommended-products\">\r\n                <p class=\"custom-dock-empty-msg\">Check an attribute above to see matching products.<\/p>\r\n                <a href=\"https:\/\/dev.smartplug.com\/staging\/product-catalog\/\" class=\"custom-dock-browse-all-btn\"\r\n                    target=\"_blank\"\r\n                    rel=\"noopener noreferrer\">\r\n                    Browse All Products \u2192\r\n                <\/a>\r\n            <\/div>\r\n\r\n            <div id=\"related-products\"><\/div>\r\n\r\n        <\/div>\r\n\r\n    <\/div>\r\n\r\n<\/div>\r\n\r\n<script>\r\n\r\n\/\/ Product catalog used by the filter\/search UI.\r\n\/\/ Search can use name, URL, SKU, and attributes, so incomplete manual\r\n\/\/ attribute tagging will not prevent a product from being discovered.\r\nconst products = [\r\n    {\r\n        \"name\": \"28V DC Power\",\r\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/28v-dc-power\/\",\r\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/08\/2-Carousel.png\",\r\n        \"sku\": \"MR28VDC, RF28VDC\",\r\n        \"attributes\": {\r\n            \"application\": [],\r\n            \"type\": [],\r\n            \"amp\": []\r\n        }\r\n    },\r\n    {\r\n        \"name\": \"SmartPlug Connector\",\r\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/smartplug-connector\/\",\r\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/SmartPlug-Connector.avif\",\r\n        \"sku\": \"BF30, BF50\",\r\n        \"attributes\": {\r\n            \"application\": [\r\n                \"rv\",\r\n                \"marine\"\r\n            ],\r\n            \"type\": [\r\n                \"connector\"\r\n            ],\r\n            \"amp\": []\r\n        }\r\n    },\r\n    {\r\n        \"name\": \"SmartPlug Inlet\",\r\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/smartplug-inlet\/\",\r\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/Updated-Inlets.png\",\r\n        \"sku\": \"BM30NT, BM30PB, BM30PG, BM30PW\",\r\n        \"attributes\": {\r\n            \"application\": [\r\n                \"rv\"\r\n            ],\r\n            \"type\": [\r\n                \"inlet\"\r\n            ],\r\n            \"amp\": [],\r\n            \"color\": [\r\n                \"stainless\",\r\n                \"white\",\r\n                \"grey\",\r\n                \"black\"\r\n            ]\r\n        }\r\n    },\r\n    {\r\n        \"name\": \"Angled RV Cordset 30 Amp\",\r\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/angled-rv-cordset-30-amp\/\",\r\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/Angled-RV-Cordset-30-Amp.avif\",\r\n        \"sku\": \"R30303A\",\r\n        \"attributes\": {\r\n            \"application\": [\r\n                \"marine\"\r\n            ],\r\n            \"type\": [\r\n                \"cordset\"\r\n            ],\r\n            \"amp\": [\r\n                \"30\"\r\n            ]\r\n        }\r\n    },\r\n    {\r\n        \"name\": \"Angled RV Cordset 50 Amp\",\r\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/angled-rv-cordset-50-amp\/\",\r\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/Angled-RV-Cordset-50-Amp.avif\",\r\n        \"sku\": \"R50503A\",\r\n        \"attributes\": {\r\n            \"application\": [\r\n                \"rv\"\r\n            ],\r\n            \"type\": [\r\n                \"cordset\"\r\n            ],\r\n            \"amp\": [\r\n                \"50\"\r\n            ]\r\n        }\r\n    },\r\n    {\r\n        \"name\": \"SmartPlug Combo Kit\",\r\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/smartplug-combokit\/\",\r\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/SmartPlug-Combo-Kit-2.avif\",\r\n        \"sku\": \"B30ASSYNT, B30ASSYPW, B30ASSYPB, B30ASSYPG, B50ASSYNT, B50ASSYPW, B50ASSYPB, B50ASSYPG\",\r\n        \"attributes\": {\r\n            \"application\": [\r\n                \"marine\",\r\n                \"rv\",\r\n                \"specialty\"\r\n            ],\r\n            \"type\": [\r\n                \"combokit\"\r\n            ],\r\n            \"amp\": [\r\n                \"15\",\r\n                \"16\",\r\n                \"30\",\r\n                \"32\",\r\n                \"50\"\r\n            ]\r\n        }\r\n    },\r\n    {\r\n        \"name\": \"SmartPlug TV\/Phone\/Internet Inlets\",\r\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/smartplug-tv-phone-internet-inlets\/\",\r\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/08\/Triple-Data-Port-2.png\",\r\n        \"sku\": \"BDBPB, BDBPB, BDBPW, BDBPG, BDBSS\",\r\n        \"attributes\": {\r\n            \"application\": [\r\n                \"marine\",\r\n                \"rv\"\r\n            ],\r\n            \"type\": [\r\n                \"data-ports\"\r\n            ],\r\n            \"amp\": []\r\n        }\r\n    },\r\n    {\r\n        \"name\": \"SmartPlug Cordset With Push-Type Park Power Connector\",\r\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/smartplug-cordset-with-push-type-park-power-connector\/\",\r\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/SmartPlug-Cordset-With-Push-Type-Park-Power-Connector.avif\",\r\n        \"sku\": \"R30304, R50304\",\r\n        \"attributes\": {\r\n            \"application\": [\r\n                \"rv\"\r\n            ],\r\n            \"type\": [\r\n                \"cordset\",\r\n                \"push-type\"\r\n            ],\r\n            \"amp\": [\r\n                \"30\",\r\n                \"50\"\r\n            ]\r\n        }\r\n    },\r\n    {\r\n        \"name\": \"SmartPlug Dual Configuration Cordset w\/SmartPlug Connector Shore Power End\",\r\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/smartplug-dual-configuration-smartplug-cordset-w-smartplug-connector-shore-power-end\/\",\r\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/SmartPlug-Dual-Configuration-Smartplug-Cordset-w_SmartPlug-Connector-Shore-Power-End.avif\",\r\n        \"sku\": \"CM30253, CM30503, CM50254, CM50504\",\r\n        \"attributes\": {\r\n            \"application\": [\r\n                \"marine\",\r\n                \"rv\",\r\n                \"dockside\",\r\n                \"specialty\"\r\n            ],\r\n            \"type\": [\r\n                \"cordset\",\r\n                \"connector\"\r\n            ],\r\n            \"amp\": [\r\n                \"30\",\r\n                \"50\"\r\n            ]\r\n        }\r\n    },\r\n    {\r\n        \"name\": \"15 Amp 115V \/ 30 Amp 125V \u2013 25\u2019 and 50\u2032 Cordset\",\r\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/15-amp-115v-30-amp-125v-25-and-50%E2%80%B2-cordset\/\",\r\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\",\r\n        \"sku\": \"C15253, C15503\",\r\n        \"attributes\": {\r\n            \"application\": [\r\n                \"marine\",\r\n                \"rv\"\r\n            ],\r\n            \"type\": [\r\n                \"cordset\"\r\n            ],\r\n            \"amp\": [\r\n                \"15\",\r\n                \"30\"\r\n            ]\r\n        }\r\n    },\r\n    {\r\n        \"name\": \"15 Amp 115V \/ 30 Amp 125V \u2013 4\u2019 Cordset\",\r\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/15-amp-115v-30-amp-125v-4-cordset\/\",\r\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/15-Amp-115V-_-30-Amp-125V-%E2%80%93-4-Cordset.avif\",\r\n        \"sku\": \"C15043\",\r\n        \"attributes\": {\r\n            \"application\": [\r\n                \"rv\",\r\n                \"dockside\",\r\n                \"marine\"\r\n            ],\r\n            \"type\": [\r\n                \"cordset\"\r\n            ],\r\n            \"amp\": [\r\n                \"15\",\r\n                \"30\"\r\n            ]\r\n        }\r\n    },\r\n    {\r\n        \"name\": \"SmartPlug Dual Configuration Cordset w\/ Shore Power Twist-Type Connector\",\r\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/dual-configuration-smartplug-cordset-w-shore-power-twist-type-connector\/\",\r\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\",\r\n        \"sku\": \"C30253, C30503W, C50254, C50504\",\r\n        \"attributes\": {\r\n            \"application\": [\r\n                \"marine\",\r\n                \"specialty\"\r\n            ],\r\n            \"type\": [\r\n                \"cordset\",\r\n                \"twist-type\"\r\n            ],\r\n            \"amp\": [\r\n                \"30\",\r\n                \"50\"\r\n            ]\r\n        }\r\n    },\r\n    {\r\n        \"name\": \"SmartPlug Harmonized Cord w\/ SmartPlug Boat Side Connector w\/ Blunt End\",\r\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/harmonized-cord-w-smartplug-boat-side-connector-w-blunt-end\/\",\r\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/SmartPlug-Harmonized-Cord-w_-SmartPlug-Boat-Side-Connector-w_-Blunt-End.avif\",\r\n        \"sku\": \"C16123, C16253, C32153, C32253\",\r\n        \"attributes\": {\r\n            \"application\": [\r\n                \"marine\",\r\n                \"specialty\"\r\n            ],\r\n            \"type\": [\r\n                \"cordset\",\r\n                \"connector\"\r\n            ],\r\n            \"amp\": [\r\n                \"16\",\r\n                \"32\"\r\n            ]\r\n        }\r\n    },\r\n    {\r\n        \"name\": \"SmartPlug ELCI Sensor & Breaker Combo Kit \u2013 WHITE\",\r\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/elci-sensor-breaker-combo-kit-white\/\",\r\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/SmartPlug-ELCI-Sensor-Breaker-Combo-Kit-%E2%80%93-WHITE.avif\",\r\n        \"sku\": \"ELCISENSORNMW, ELCI30BRKERNMW, ELCI50BRKERNMW\",\r\n        \"attributes\": {\r\n            \"application\": [\r\n                \"marine\"\r\n            ],\r\n            \"type\": [\r\n                \"elci\"\r\n            ],\r\n            \"amp\": [\r\n                \"30\",\r\n                \"50\"\r\n            ],\r\n            \"color\": [\r\n                \"white\"\r\n            ]\r\n        }\r\n    },\r\n    {\r\n        \"name\": \"SmartPlug ELCI Breakers \u2013 WHITE\",\r\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/elci-breakers-white\/\",\r\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/SmartPlug-ELCI-Breakers-%E2%80%93-WHITE.avif\",\r\n        \"sku\": \"ELCIBRKR30PW, ELCIBRKR50PW\",\r\n        \"attributes\": {\r\n            \"application\": [\r\n                \"marine\"\r\n            ],\r\n            \"type\": [\r\n                \"elci\"\r\n            ],\r\n            \"amp\": [\r\n                \"30\",\r\n                \"50\"\r\n            ],\r\n            \"color\": [\r\n                \"white\"\r\n            ]\r\n        }\r\n    },\r\n    {\r\n        \"name\": \"SmartPlug Female Receptacle\",\r\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/smartplug-female-receptacle\/\",\r\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/SmartPlug-Female-Receptacle.avif\",\r\n        \"sku\": \"RF30, RF50\",\r\n        \"attributes\": {\r\n            \"application\": [\r\n                \"rv\",\r\n                \"marine\"\r\n            ],\r\n            \"type\": [\r\n                \"connector\"\r\n            ],\r\n            \"amp\": [\r\n                \"30\",\r\n                \"50\"\r\n            ]\r\n        }\r\n    },\r\n    {\r\n        \"name\": \"30A SmartPlug Female Connector to 30A Twist-type Male Connector\",\r\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/30a-smartplug-female-connector-to-30a-twist-type-male-connector\/\",\r\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/30A-SmartPlug-Female-Connector-to-30A-Twist-type-Male-Connector.avif\",\r\n        \"sku\": \"C30043\",\r\n        \"attributes\": {\r\n            \"application\": [\r\n                \"rv\",\r\n                \"marine\"\r\n            ],\r\n            \"type\": [\r\n                \"connector\"\r\n            ],\r\n            \"amp\": [\r\n                \"30\"\r\n            ]\r\n        }\r\n    },\r\n    {\r\n        \"name\": \"50A SmartPlug Female Connector to 15A STD Wall Plug Connector\",\r\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/50a-smartplug-female-connector-to-15a-std-wall-plug-connector\/\",\r\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/50A-SmartPlug-Female-Connector-to-15A-STD-Wall-Plug-Connector.avif\",\r\n        \"sku\": \"C50044L515P\",\r\n        \"attributes\": {\r\n            \"application\": [\r\n                \"rv\"\r\n            ],\r\n            \"type\": [\r\n                \"cordset\",\r\n                \"connector\"\r\n            ],\r\n            \"amp\": [\r\n                \"15\"\r\n            ]\r\n        }\r\n    },\r\n    {\r\n        \"name\": \"50A SmartPlug Female Connector to 50A Male 4ft Twist-type Connector\",\r\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/50a-smartplug-female-connector-to-50a-male-4ft-twist-type-connector\/\",\r\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/50A-SmartPlug-Female-Connector-to-50A-Male-4ft-Twist-type-Connector.avif\",\r\n        \"sku\": \"C50044\",\r\n        \"attributes\": {\r\n            \"application\": [\r\n                \"rv\"\r\n            ],\r\n            \"type\": [\r\n                \"cordset\",\r\n                \"connector\"\r\n            ],\r\n            \"amp\": [\r\n                \"50\"\r\n            ]\r\n        }\r\n    },\r\n    {\r\n        \"name\": \"50A SmartPlug Female Connector to 30A Male Twist-type Connector\",\r\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/50a-smartplug-female-connector-to-30a-male-twist-type-connector\/\",\r\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/04\/50A-SmartPlug-Female-Connector-to-30A-Male-Twist-type-Connector.webp\",\r\n        \"sku\": \"C50044L530P\",\r\n        \"attributes\": {\r\n            \"application\": [\r\n                \"rv\"\r\n            ],\r\n            \"type\": [\r\n                \"cordset\",\r\n                \"connector\"\r\n            ],\r\n            \"amp\": [\r\n                \"30\"\r\n            ]\r\n        }\r\n    },\r\n    {\r\n        \"name\": \"30A Female Twist-type Connector to 30A SmartPlug Male Connector\",\r\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/30a-female-twist-type-connector-to-30a-smartplug-male-connector\/\",\r\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/30A-Female-Twist-type-Connector-to-30A-SmartPlug-Male-Connector.avif\",\r\n        \"sku\": \"CM30043L530R\",\r\n        \"attributes\": {\r\n            \"application\": [\r\n                \"rv\"\r\n            ],\r\n            \"type\": [\r\n                \"cordset\",\r\n                \"connector\"\r\n            ],\r\n            \"amp\": [\r\n                \"30\"\r\n            ]\r\n        }\r\n    },\r\n    {\r\n        \"name\": \"50A SmartPlug Male Connector to 50A Female 4ft Twist-type Connector\",\r\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/50a-smartplug-male-connector-to-50a-female-4ft-twist-type-connector\/\",\r\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/50A-SmartPlug-Male-Connector-to-50A-Female-4ft-Twist-type-Connector.avif\",\r\n        \"sku\": \"CM5004460729R\",\r\n        \"attributes\": {\r\n            \"application\": [\r\n                \"rv\"\r\n            ],\r\n            \"type\": [\r\n                \"cordset\",\r\n                \"connector\"\r\n            ],\r\n            \"amp\": [\r\n                \"50\"\r\n            ]\r\n        }\r\n    },\r\n    {\r\n        \"name\": \"SmartPlug Dock & Lift Kit\",\r\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/sp-dock-lifts\/\",\r\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/SmartPlug-Dock-Lift-Kit.avif\",\r\n        \"sku\": \"CB001, RDPWP, RDPWL, CM50254, CM50504, BM30NT, BM30PW, BM30PB, BM30PG, BM50NT, BM50PW, BM50PB, BM50PG\",\r\n        \"attributes\": {\r\n            \"application\": [\r\n                \"dockside\"\r\n            ],\r\n            \"type\": [\r\n                \"service-kits\"\r\n            ],\r\n            \"amp\": []\r\n        }\r\n    },\r\n    {\r\n        \"name\": \"LEGACY Lighthouse Pedestal Mounting Bracket\",\r\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/legacy-lighthouse-pedestal-mounting-bracket\/\",\r\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/LEGACY-Lighthouse-Pedestal-Mounting-Bracket.avif\",\r\n        \"sku\": \"LHRBRKTL530, LHRBRKT60729\",\r\n        \"attributes\": {\r\n            \"application\": [\r\n                \"marine\",\r\n                \"dockside\"\r\n            ],\r\n            \"type\": [],\r\n            \"amp\": [\r\n                \"30\",\r\n                \"50\"\r\n            ]\r\n        }\r\n    },\r\n    {\r\n        \"name\": \"SmartPlug Cordset Storage Bag\",\r\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/cordset-storage-bag\/\",\r\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/SmartPlug-Cordset-Storage-Bag.avif\",\r\n        \"sku\": \"\",\r\n        \"attributes\": {\r\n            \"application\": [\r\n                \"specialty\"\r\n            ],\r\n            \"type\": [\r\n                \"cordset\"\r\n            ],\r\n            \"amp\": [\r\n                \"30\",\r\n                \"50\"\r\n            ],\r\n            \"color\": [\r\n                \"black\"\r\n            ]\r\n        }\r\n    },\r\n    {\r\n        \"name\": \"EATON Lighthouse Double Pedestal Retro-fit Conversion Kit\",\r\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/eaton-lighthouse-double-pedestal-retro-fit-conversion-kit\/\",\r\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/EATON-Lighthouse-Double-Pedestal-Retro-fit-Conversion-Kit.avif\",\r\n        \"sku\": \"LH2RF30ASSY, LH2RF50ASSY, LHRF3050ASSY\",\r\n        \"attributes\": {\r\n            \"application\": [\r\n                \"dockside\",\r\n                \"marine\"\r\n            ],\r\n            \"type\": [\r\n                \"service-kits\"\r\n            ],\r\n            \"amp\": [\r\n                \"15\",\r\n                \"30\"\r\n            ]\r\n        }\r\n    },\r\n    {\r\n        \"name\": \"EATON Lighthouse Pedestal Retro-fit Conversion Kit\",\r\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/lighthouse-pedestal-retro-fit-conversion-kit\",\r\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/EATON-Lighthouse-Pedestal-Retro-fit-Conversion-Kit.avif\",\r\n        \"sku\": \"LHRF30ASSY, LHRF50ASSY\",\r\n        \"attributes\": {\r\n            \"application\": [\r\n                \"dockside\",\r\n                \"marine\"\r\n            ],\r\n            \"type\": [\r\n                \"service-kits\"\r\n            ],\r\n            \"amp\": [\r\n                \"30\",\r\n                \"50\"\r\n            ]\r\n        }\r\n    },\r\n    {\r\n        \"name\": \"EATON Lighthouse Pedestal Mounting Bracket\",\r\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/lighthouse-pedestal-mounting-bracket\/\",\r\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/EATON-Lighthouse-Pedestal-Mounting-Bracket.avif\",\r\n        \"sku\": \"LHRBRKT, LHRBRKT30, LHRBRKT50, LHRBRKTB\",\r\n        \"attributes\": {\r\n            \"application\": [\r\n                \"dockside\",\r\n                \"marine\"\r\n            ],\r\n            \"type\": [],\r\n            \"amp\": [\r\n                \"30\",\r\n                \"50\"\r\n            ]\r\n        }\r\n    },\r\n    {\r\n        \"name\": \"SmartPlug Weathercap\",\r\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/smartplug-weathercap\/\",\r\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/SmartPlug-Weathercap.avif\",\r\n        \"sku\": \"A1001\",\r\n        \"attributes\": {\r\n            \"application\": [],\r\n            \"type\": [\r\n                \"inlet\"\r\n            ],\r\n            \"amp\": []\r\n        }\r\n    },\r\n    {\r\n        \"name\": \"SmartPlug Male Inlet Connector\",\r\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/smartplug-male-inlet-connector\/\",\r\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/SmartPlug-Male-Inlet-Connector.avif\",\r\n        \"sku\": \"BM30, BM50\",\r\n        \"attributes\": {\r\n            \"application\": [],\r\n            \"type\": [\r\n                \"service-kits\",\r\n                \"inlet\"\r\n            ],\r\n            \"amp\": [\r\n                \"30\",\r\n                \"50\"\r\n            ]\r\n        }\r\n    },\r\n    {\r\n        \"name\": \"SmartPlug Female Connector Inlet\",\r\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/smartplug-female-connector-inlet\/\",\r\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/SmartPlug-Female-Connector-Inlet.avif\",\r\n        \"sku\": \"PFK30\",\r\n        \"attributes\": {\r\n            \"application\": [],\r\n            \"type\": [\r\n                \"inlet\",\r\n                \"combokit\"\r\n            ],\r\n            \"amp\": [\r\n                \"30\",\r\n                \"50\"\r\n            ]\r\n        }\r\n    },\r\n    {\r\n        \"name\": \"SmartPlug Male Inlet Connector Strain Relief\",\r\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/smartplug-male-inlet-connector-strain-relief\/\",\r\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/SmartPlug-Male-Inlet-Connector-Strain-Relief.avif\",\r\n        \"sku\": \"PKMGKT\",\r\n        \"attributes\": {\r\n            \"application\": [],\r\n            \"type\": [\r\n                \"connector\",\r\n                \"inlet\",\r\n                \"service-kits\"\r\n            ],\r\n            \"amp\": [\r\n                \"30\",\r\n                \"50\"\r\n            ]\r\n        }\r\n    },\r\n    {\r\n        \"name\": \"SmartPlug Female Connector Gasket\",\r\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/smartplug-female-connector-gasket\/\",\r\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/SmartPlug-Female-Connector-Gasket.avif\",\r\n        \"sku\": \"PKF30G, PKF50G\",\r\n        \"attributes\": {\r\n            \"application\": [],\r\n            \"type\": [\r\n                \"connector\",\r\n                \"service-kits\"\r\n            ],\r\n            \"amp\": [\r\n                \"30\",\r\n                \"50\"\r\n            ]\r\n        }\r\n    },\r\n    {\r\n        \"name\": \"SmartPlug Male Connector Gasket\",\r\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/smartplug-male-connector-gasket\/\",\r\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/SmartPlug-Male-Connector-Gasket.avif\",\r\n        \"sku\": \"PKMGKT\",\r\n        \"attributes\": {\r\n            \"application\": [],\r\n            \"type\": [\r\n                \"connector\",\r\n                \"service-kits\"\r\n            ],\r\n            \"amp\": [\r\n                \"30\",\r\n                \"50\"\r\n            ]\r\n        }\r\n    },\r\n    {\r\n        \"name\": \"SmartPlug Weather Door Receptacle\",\r\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/smartplug-weather-door-receptacle\/\",\r\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/SmartPlug-Weather-Door-Receptacle.avif\",\r\n        \"sku\": \"RDPWP, RDPWL, RF30, RF50\",\r\n        \"attributes\": {\r\n            \"application\": [],\r\n            \"type\": [\r\n                \"service-kits\"\r\n            ],\r\n            \"amp\": []\r\n        }\r\n    },\r\n    {\r\n        \"name\": \"SmartPlug Side Lever Kit\",\r\n        \"url\": \"https:\/\/dev.smartplug.com\/staging\/smartplug-side-lever-kit\/\",\r\n        \"image\": \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/07\/SmartPlug-Side-Lever-Kit.avif\",\r\n        \"sku\": \"PKFO1\",\r\n        \"attributes\": {\r\n            \"application\": [\r\n                \"marine\",\r\n                \"rv\"\r\n            ],\r\n            \"type\": [\r\n                \"service-kits\"\r\n            ],\r\n            \"amp\": [\r\n                \"16\",\r\n                \"30\",\r\n                \"32\",\r\n                \"50\"\r\n            ]\r\n        }\r\n    }\r\n];\r\n\r\n\r\nconst MAIN_FILTER_GROUPS = ['application', 'type', 'amp'];\r\n\r\nconst SUBFILTER_CONFIG = {\r\n    color: {\r\n        label: 'Color',\r\n        options: [\r\n            { value: 'stainless', label: 'Stainless' },\r\n            { value: 'white', label: 'White' },\r\n            { value: 'grey', label: 'Grey' },\r\n            { value: 'black', label: 'Black' },\r\n            { value: 'orange', label: 'Orange' },\r\n            { value: 'clear', label: 'Clear' }\r\n        ]\r\n    }\r\n    \r\n};\r\n\r\nconst VALUE_LABELS = {\r\n    marine: 'Marine',\r\n    rv: 'RV',\r\n    dockside: 'Dockside',\r\n    specialty: 'Specialty',\r\n    connector: 'Connector',\r\n    cordset: 'Cordset',\r\n    inlet: 'Inlet',\r\n    elci: 'ELCI',\r\n    'service-kits': 'Service Kits',\r\n    combokit: 'Combokit',\r\n    'data-ports': 'Data Ports',\r\n    '15': '15A',\r\n    '16': '16A',\r\n    '30': '30A',\r\n    '32': '32A',\r\n    '50': '50A',\r\n    stainless: 'Stainless',\r\n    white: 'White',\r\n    grey: 'Grey',\r\n    black: 'Black',\r\n    orange: 'Orange',\r\n    clear: 'Clear'\r\n};\r\n\r\nfunction labelFor(value) {\r\n    return VALUE_LABELS[value] || (value.charAt(0).toUpperCase() + value.slice(1));\r\n}\r\n\r\n\/*\r\n * SEARCH \/ MATCHING HELPERS\r\n * -------------------------\r\n * The catalog is maintained manually, so some products do not have every\r\n * possible filter attribute filled in. The helpers below make matching more\r\n * forgiving by also looking at the product name, URL and SKU.\r\n *\r\n * Examples that now resolve to the same product:\r\n *   \"cord set\"  -> \"cordset\"\r\n *   \"30 amp\"    -> \"30a\"\r\n *   \"50A\"       -> \"50a\"\r\n *   \"female connector\" -> \"female connector\"\r\n *   \"weather door\" -> \"weather-door\"\r\n *   \"service kit\" -> \"service-kits\"\r\n *\/\r\nfunction normalizeSearchText(value) {\r\n    return String(value || '')\r\n        .toLowerCase()\r\n        .normalize('NFKD')\r\n        .replace(\/[\\u0300-\\u036f]\/g, '')\r\n        .replace(\/&\/g, ' and ')\r\n        .replace(\/[^a-z0-9]+\/g, ' ')\r\n        .replace(\/\\s+\/g, ' ')\r\n        .trim();\r\n}\r\n\r\nfunction compactSearchText(value) {\r\n    return normalizeSearchText(value).replace(\/\\s+\/g, '');\r\n}\r\n\r\nconst SEARCH_SYNONYMS = {\r\n    'cord set': 'cordset',\r\n    'cordsets': 'cordset',\r\n    'service kit': 'service kits',\r\n    'service kits': 'service kit',\r\n    'combo kit': 'combokit',\r\n    'combo kits': 'combokit',\r\n    'combokit': 'combo kit',\r\n    'data port': 'data ports',\r\n    'data ports': 'data port',\r\n    'inlets': 'inlet',\r\n    'connectors': 'connector',\r\n    'gaskets': 'gasket',\r\n    'receptacles': 'receptacle',\r\n    'weather door': 'weather door receptacle',\r\n    'weather door receptacle': 'weather door',\r\n    '30 amp': '30a',\r\n    '50 amp': '50a',\r\n    '15 amp': '15a',\r\n    '16 amp': '16a',\r\n    '32 amp': '32a'\r\n};\r\n\r\nfunction expandSearchTerms(value) {\r\n    const normalized = normalizeSearchText(value);\r\n    const terms = new Set();\r\n\r\n    if (!normalized) return [];\r\n\r\n    terms.add(normalized);\r\n    terms.add(compactSearchText(normalized));\r\n\r\n    const synonym = SEARCH_SYNONYMS[normalized];\r\n    if (synonym) {\r\n        terms.add(normalizeSearchText(synonym));\r\n        terms.add(compactSearchText(synonym));\r\n    }\r\n\r\n    \/\/ Add singular\/plural-friendly variants.\r\n    normalized.split(' ').forEach(word => {\r\n        if (word.length > 3 && word.endsWith('s')) {\r\n            terms.add(word.slice(0, -1));\r\n        } else if (word.length > 2 && !word.endsWith('s')) {\r\n            terms.add(word + 's');\r\n        }\r\n    });\r\n\r\n    return [...terms].filter(Boolean);\r\n}\r\n\r\nfunction getProductSearchText(product) {\r\n    const attributes = Object.values(product.attributes || {})\r\n        .flat()\r\n        .filter(Boolean)\r\n        .join(' ');\r\n\r\n    return normalizeSearchText([\r\n        product.name,\r\n        product.sku,\r\n        product.url,\r\n        attributes\r\n    ].filter(Boolean).join(' '));\r\n}\r\n\r\nfunction productSearchScore(product, query) {\r\n    const terms = expandSearchTerms(query);\r\n    if (!terms.length) return 0;\r\n\r\n    const searchable = getProductSearchText(product);\r\n    const compact = searchable.replace(\/\\s+\/g, '');\r\n    const name = normalizeSearchText(product.name);\r\n    const sku = normalizeSearchText(product.sku);\r\n\r\n    let score = 0;\r\n\r\n    terms.forEach(term => {\r\n        const compactTerm = compactSearchText(term);\r\n\r\n        if (name === term) score += 100;\r\n        else if (name.includes(term)) score += 40;\r\n\r\n        if (sku.includes(term) || sku.replace(\/\\s+\/g, '').includes(compactTerm)) {\r\n            score += 35;\r\n        }\r\n\r\n        if (searchable.includes(term)) score += 15;\r\n        if (compact.includes(compactTerm)) score += 10;\r\n    });\r\n\r\n    \/\/ Token matching helps with searches such as \"smart plug female connector\".\r\n    const queryTokens = normalizeSearchText(query).split(' ').filter(Boolean);\r\n    const searchableTokens = new Set(searchable.split(' '));\r\n\r\n    queryTokens.forEach(token => {\r\n        if (searchableTokens.has(token)) score += 12;\r\n    });\r\n\r\n    return score;\r\n}\r\n\r\nfunction productMatchesSearch(product, query) {\r\n    return productSearchScore(product, query) > 0;\r\n}\r\n\r\n\/*\r\n * A filter value can also be inferred from product text when the manually\r\n * assigned attribute is missing. This prevents a product from disappearing\r\n * simply because its data entry was incomplete.\r\n *\/\r\nconst FILTER_TEXT_ALIASES = {\r\n    application: {\r\n        marine: ['marine', 'boat', 'boating'],\r\n        rv: ['rv', 'recreational vehicle'],\r\n        dockside: ['dockside', 'dock', 'pedestal'],\r\n        specialty: ['specialty']\r\n    },\r\n    type: {\r\n        connector: ['connector'],\r\n        cordset: ['cordset', 'cord set'],\r\n        inlet: ['inlet'],\r\n        elci: ['elci'],\r\n        'service-kits': ['service kit', 'service kits', 'kit'],\r\n        combokit: ['combo kit', 'combokit', 'combo'],\r\n        'data-ports': ['data port', 'data ports', 'tv phone internet']\r\n    },\r\n    amp: {\r\n        '15': ['15a', '15 amp', '15amp'],\r\n        '16': ['16a', '16 amp', '16amp'],\r\n        '30': ['30a', '30 amp', '30amp'],\r\n        '32': ['32a', '32 amp', '32amp'],\r\n        '50': ['50a', '50 amp', '50amp']\r\n    }\r\n};\r\n\r\nfunction productHasFilterValue(product, group, value) {\r\n    const explicitValues = product.attributes && product.attributes[group];\r\n    if (Array.isArray(explicitValues) && explicitValues.includes(value)) return true;\r\n\r\n    const aliases = FILTER_TEXT_ALIASES[group] && FILTER_TEXT_ALIASES[group][value];\r\n    if (!aliases || !aliases.length) return false;\r\n\r\n    const searchable = getProductSearchText(product);\r\n    return aliases.some(alias => {\r\n        const normalizedAlias = normalizeSearchText(alias);\r\n        return searchable.includes(normalizedAlias);\r\n    });\r\n}\r\n\r\nlet activeSubFilters = {};\r\n\r\n\/\/ --- Accordion behaviour for the TOP-LEVEL category buttons ---\r\ndocument.querySelectorAll('.custom-dock-cat-btn').forEach(button => {\r\n    button.addEventListener('click', function () {\r\n        const list = this.nextElementSibling;\r\n\r\n        document.querySelectorAll('.custom-dock-prod-list').forEach(item => {\r\n            if (item !== list) item.style.display = \"none\";\r\n        });\r\n        document.querySelectorAll('.custom-dock-cat-btn').forEach(btn => {\r\n            if (btn !== this) btn.classList.remove(\"active\");\r\n        });\r\n\r\n        if (list.style.display === \"grid\") {\r\n            list.style.display = \"none\";\r\n            this.classList.remove(\"active\");\r\n        } else {\r\n            list.style.display = \"grid\";\r\n            this.classList.add(\"active\");\r\n        }\r\n    });\r\n});\r\n\r\n\/\/ --- Wire up the MAIN filter checkboxes ---\r\ndocument.querySelectorAll('.product-filter').forEach(filter => {\r\n    filter.addEventListener('change', updateRecommendations);\r\n});\r\n\r\n\/\/ --- Reset button ---\r\ndocument.getElementById('custom-dock-reset-btn').addEventListener('click', function () {\r\n    \/\/ Uncheck every main checkbox\r\n    document.querySelectorAll('.product-filter:checked').forEach(cb => {\r\n        cb.checked = false;\r\n    });\r\n\r\n    \/\/ Close every top-level accordion panel and clear active state\r\n    document.querySelectorAll('.custom-dock-prod-list').forEach(list => {\r\n        list.style.display = \"none\";\r\n    });\r\n    document.querySelectorAll('.custom-dock-cat-btn').forEach(btn => {\r\n        btn.classList.remove(\"active\");\r\n    });\r\n\r\n    \/\/ Clear sub-filter state and its rendered block entirely\r\n    activeSubFilters = {};\r\n    document.getElementById('sub-filters-section').innerHTML = '';\r\n\r\n    \/\/ Clear the search box too\r\n    const searchInput = document.getElementById('custom-dock-search');\r\n    if (searchInput) searchInput.value = '';\r\n\r\n    \/\/ Refresh the results back to the empty state\r\n    updateRecommendations();\r\n});\r\n\r\n\r\ndocument.querySelectorAll('.custom-dock-preset-btn').forEach(btn => {\r\n    btn.addEventListener('click', function () {\r\n        const appValue = this.dataset.app;\r\n        const target = document.querySelector(\r\n            `.product-filter[data-filter=\"application\"][value=\"${appValue}\"]`\r\n        );\r\n        if (!target) return;\r\n\r\n        target.checked = true;\r\n\r\n        \/\/ Open the Application panel so the person can see what got checked\r\n        const appList = target.closest('.custom-dock-prod-list');\r\n        const appBtn = appList ? appList.previousElementSibling : null;\r\n        document.querySelectorAll('.custom-dock-prod-list').forEach(list => {\r\n            list.style.display = (list === appList) ? \"grid\" : \"none\";\r\n        });\r\n        document.querySelectorAll('.custom-dock-cat-btn').forEach(b => {\r\n            b.classList.toggle('active', b === appBtn);\r\n        });\r\n\r\n        updateRecommendations();\r\n    });\r\n});\r\n\r\n\/\/ --- Search box: quick jump to a product by name, independent of filters ---\r\nconst searchInputEl = document.getElementById('custom-dock-search');\r\nif (searchInputEl) {\r\n    searchInputEl.addEventListener('input', updateRecommendations);\r\n}\r\n\r\n\r\n\r\nconst dockWrapper = document.getElementById('custom-dock-wrapper');\r\nconst dockTrigger = document.getElementById('custom-dock-trigger');\r\nconst dockHint = document.getElementById('custom-dock-hint');\r\n\r\n\/\/ How long the bubble stays visible per pulse, and how long it waits\r\n\/\/ (fully hidden) before showing again. Tweak these two numbers only.\r\nconst HINT_VISIBLE_MS = 20000; \/\/ stays on screen ~8s each time it appears\r\nconst HINT_HIDDEN_MS = 10000; \/\/ waits 10s after hiding before showing again\r\n\r\nlet dockHintShowTimer = null;  \/\/ timer that hides the bubble after it's shown\r\nlet dockHintWaitTimer = null;  \/\/ timer that re-shows the bubble after the gap\r\nlet isDockOpen = false; \/\/ tracks open state, whether via tap or hover\r\n\r\n\/\/ Shows the bubble, keeps it up for HINT_VISIBLE_MS, then hides it and\r\n\/\/ schedules the next appearance after HINT_HIDDEN_MS. Recursive by design\r\n\/\/ so \"visible time\" and \"gap time\" can differ (a plain setInterval can't\r\n\/\/ do that cleanly).\r\nfunction showDockHintOnce() {\r\n    if (!dockHint || isDockOpen) return;\r\n\r\n    dockHint.classList.add('custom-dock-hint-show');\r\n\r\n    dockHintShowTimer = setTimeout(() => {\r\n        dockHint.classList.remove('custom-dock-hint-show');\r\n        dockHintShowTimer = null;\r\n\r\n        dockHintWaitTimer = setTimeout(() => {\r\n            dockHintWaitTimer = null;\r\n            showDockHintOnce();\r\n        }, HINT_HIDDEN_MS);\r\n    }, HINT_VISIBLE_MS);\r\n}\r\n\r\n\/\/ Wipes any pending hint + timers. Called whenever the dock opens.\r\nfunction pauseDockHint() {\r\n    if (dockHintShowTimer) {\r\n        clearTimeout(dockHintShowTimer);\r\n        dockHintShowTimer = null;\r\n    }\r\n    if (dockHintWaitTimer) {\r\n        clearTimeout(dockHintWaitTimer);\r\n        dockHintWaitTimer = null;\r\n    }\r\n    if (dockHint) dockHint.classList.remove('custom-dock-hint-show');\r\n}\r\n\r\n\/\/ Starts the show\/wait cycle fresh. Called on page load, and again every\r\n\/\/ time the dock closes (so it \"starts again as it is\") \u2014 always beginning\r\n\/\/ with a fresh HINT_HIDDEN_MS wait before the next appearance, so closing\r\n\/\/ the dock never triggers an instant re-pop.\r\nfunction resumeDockHintCycle() {\r\n    pauseDockHint();\r\n    if (!dockHint) return;\r\n    dockHintWaitTimer = setTimeout(() => {\r\n        dockHintWaitTimer = null;\r\n        showDockHintOnce();\r\n    }, HINT_HIDDEN_MS);\r\n}\r\n\r\nif (dockTrigger && dockWrapper) {\r\n\r\n    dockTrigger.addEventListener('click', function (e) {\r\n        e.stopPropagation();\r\n        dockWrapper.classList.toggle('custom-dock-open');\r\n\r\n        if (dockWrapper.classList.contains('custom-dock-open')) {\r\n            isDockOpen = true;\r\n            pauseDockHint();\r\n        } else {\r\n            isDockOpen = false;\r\n            resumeDockHintCycle();\r\n        }\r\n    });\r\n\r\n    document.addEventListener('click', function (e) {\r\n        if (!dockWrapper.contains(e.target)) {\r\n            if (dockWrapper.classList.contains('custom-dock-open')) {\r\n                dockWrapper.classList.remove('custom-dock-open');\r\n                isDockOpen = false;\r\n                resumeDockHintCycle();\r\n            }\r\n        }\r\n    });\r\n\r\n    \/\/ Desktop hover: opens\/closes the flyout via CSS, but JS still needs to\r\n    \/\/ know about it so the hint pauses\/resumes at the right moments.\r\n    dockWrapper.addEventListener('mouseenter', function () {\r\n        isDockOpen = true;\r\n        pauseDockHint();\r\n    });\r\n\r\n    dockWrapper.addEventListener('mouseleave', function () {\r\n        \/\/ Only truly \"closed\" if it's not pinned open by a tap\r\n        if (!dockWrapper.classList.contains('custom-dock-open')) {\r\n            isDockOpen = false;\r\n            resumeDockHintCycle();\r\n        }\r\n    });\r\n\r\n    \/\/ First-visit attention pulse: draws the eye once, then stops so it\r\n    \/\/ never feels naggy on repeat visits.\r\n    setTimeout(() => dockTrigger.classList.add('custom-dock-pulse'), 800);\r\n    dockTrigger.addEventListener('click', () => dockTrigger.classList.remove('custom-dock-pulse'), { once: true });\r\n\r\n    \/\/ Kick off the hint cycle on load\r\n    resumeDockHintCycle();\r\n}\r\n\r\n\/\/ Reads only the MAIN checkboxes into { application: ['rv'], type: ['inlet'], ... }\r\nfunction getMainSelectedFilters() {\r\n    const selected = {};\r\n    document.querySelectorAll('.product-filter:checked').forEach(cb => {\r\n        const group = cb.dataset.filter;\r\n        if (!MAIN_FILTER_GROUPS.includes(group)) return; \/\/ sub-filter checkboxes are handled separately\r\n        if (!selected[group]) selected[group] = [];\r\n        selected[group].push(cb.value);\r\n    });\r\n    return selected;\r\n}\r\n\r\n\/\/ A product \"matches\" a filter group if it has at least one value in common with the checked\r\n\/\/ boxes for that group. It's a full match if it satisfies every group that has a selection.\r\n\/\/ Works the same whether \"selected\" contains main groups, sub-filter groups, or both.\r\nfunction matchScore(product, selected) {\r\n    const groups = Object.keys(selected);\r\n    if (groups.length === 0) return { full: false, partial: false, hits: 0 };\r\n\r\n    let hits = 0;\r\n    groups.forEach(group => {\r\n        const selectedValues = selected[group] || [];\r\n        const overlap = selectedValues.some(value => {\r\n            return productHasFilterValue(product, group, value);\r\n        });\r\n        if (overlap) hits++;\r\n    });\r\n\r\n    return {\r\n        full: hits === groups.length,\r\n        partial: hits > 0,\r\n        hits\r\n    };\r\n}\r\n\r\nfunction renderProductCard(product, matchLabel) {\r\n    const link = document.createElement('a');\r\n    link.className = 'custom-dock-prod-link';\r\n    link.href = product.url;\r\n    link.target = '_blank';\r\n    link.rel = 'noopener noreferrer';\r\n\r\n    link.innerHTML = `\r\n        <img decoding=\"async\" src=\"${product.image}\" alt=\"${product.name}\">\r\n        <span>\r\n            ${product.name}\r\n            ${product.sku ? `<small class=\"custom-dock-sku\">SKU: ${product.sku}<\/small>` : ''}\r\n            ${matchLabel ? `<span class=\"custom-dock-match-tag\">${matchLabel}<\/span>` : ''}\r\n        <\/span>\r\n    `;\r\n    return link;\r\n}\r\n\r\n\/\/ Builds the dynamic sub-filter checkbox row(s) that sit right under\r\n\/\/ \"Matching Products\". baseMatches = whatever currently satisfies the\r\n\/\/ MAIN filters only (before any sub-filter is applied). A sub-filter\r\n\/\/ group shows up if at least one of those products actually has that\r\n\/\/ attribute defined \u2014 so it only appears when it'd be useful, e.g.\r\n\/\/ Color only shows once Inlet-type products are in the results.\r\n\/\/ Rendered as a compact horizontal row of pill checkboxes with no\r\n\/\/ heading text.\r\nfunction renderSubFilters(baseMatches) {\r\n    const container = document.getElementById('sub-filters-section');\r\n    container.innerHTML = '';\r\n\r\n    const relevantGroups = Object.keys(SUBFILTER_CONFIG).filter(key => {\r\n        return baseMatches.some(p => (p.attributes[key] || []).length > 0);\r\n    });\r\n\r\n    \/\/ Drop stale selections for sub-filters that are no longer relevant,\r\n    \/\/ so a hidden checkbox can never silently keep narrowing results.\r\n    Object.keys(activeSubFilters).forEach(key => {\r\n        if (!relevantGroups.includes(key)) delete activeSubFilters[key];\r\n    });\r\n\r\n    if (relevantGroups.length === 0) return;\r\n\r\n    relevantGroups.forEach(key => {\r\n        const config = SUBFILTER_CONFIG[key];\r\n\r\n        const block = document.createElement('div');\r\n        block.className = 'custom-dock-subfilter-block';\r\n\r\n        const list = document.createElement('div');\r\n        list.className = 'custom-dock-subfilter-list';\r\n\r\n        config.options.forEach(opt => {\r\n            const label = document.createElement('label');\r\n            label.className = 'custom-dock-subitem';\r\n\r\n            const input = document.createElement('input');\r\n            input.type = 'checkbox';\r\n            input.className = 'product-filter';\r\n            input.dataset.filter = key;\r\n            input.value = opt.value;\r\n            input.checked = (activeSubFilters[key] || []).includes(opt.value);\r\n\r\n            input.addEventListener('change', function () {\r\n                if (!activeSubFilters[key]) activeSubFilters[key] = [];\r\n                if (this.checked) {\r\n                    if (!activeSubFilters[key].includes(opt.value)) {\r\n                        activeSubFilters[key].push(opt.value);\r\n                    }\r\n                } else {\r\n                    activeSubFilters[key] = activeSubFilters[key].filter(v => v !== opt.value);\r\n                    if (activeSubFilters[key].length === 0) delete activeSubFilters[key];\r\n                }\r\n                updateRecommendations();\r\n            });\r\n\r\n            label.appendChild(input);\r\n            label.appendChild(document.createTextNode(opt.label));\r\n            list.appendChild(label);\r\n        });\r\n\r\n        block.appendChild(list);\r\n        container.appendChild(block);\r\n    });\r\n}\r\n\r\n\/\/ Renders removable chips for every active main + sub filter, and keeps\r\n\/\/ the trigger badge count in sync. Clicking a chip's \u00d7 unchecks the\r\n\/\/ matching checkbox and re-runs the filter \u2014 no need to reopen an accordion\r\n\/\/ just to undo one choice.\r\nfunction renderChipsAndBadge(mainSelected) {\r\n    const chipsEl = document.getElementById('custom-dock-chips');\r\n    const badgeEl = document.getElementById('custom-dock-badge');\r\n    chipsEl.innerHTML = '';\r\n\r\n    let totalCount = 0;\r\n\r\n    Object.keys(mainSelected).forEach(group => {\r\n        mainSelected[group].forEach(value => {\r\n            totalCount++;\r\n            chipsEl.appendChild(buildChip(group, value));\r\n        });\r\n    });\r\n\r\n    Object.keys(activeSubFilters).forEach(group => {\r\n        (activeSubFilters[group] || []).forEach(value => {\r\n            totalCount++;\r\n            chipsEl.appendChild(buildChip(group, value));\r\n        });\r\n    });\r\n\r\n    if (badgeEl) {\r\n        badgeEl.textContent = totalCount;\r\n        badgeEl.style.display = totalCount > 0 ? 'flex' : 'none';\r\n    }\r\n}\r\n\r\nfunction buildChip(group, value) {\r\n    const chip = document.createElement('span');\r\n    chip.className = 'custom-dock-chip';\r\n    chip.innerHTML = `${labelFor(value)} <button type=\"button\" aria-label=\"Remove ${labelFor(value)} filter\">\u2715<\/button>`;\r\n\r\n    chip.querySelector('button').addEventListener('click', () => {\r\n        const cb = document.querySelector(`.product-filter[data-filter=\"${group}\"][value=\"${value}\"]`);\r\n        if (cb) {\r\n            cb.checked = false;\r\n            cb.dispatchEvent(new Event('change'));\r\n        } else {\r\n            \/\/ Sub-filter checkbox may not currently be rendered \u2014 clear state directly\r\n            if (activeSubFilters[group]) {\r\n                activeSubFilters[group] = activeSubFilters[group].filter(v => v !== value);\r\n                if (activeSubFilters[group].length === 0) delete activeSubFilters[group];\r\n            }\r\n            updateRecommendations();\r\n        }\r\n    });\r\n\r\n    return chip;\r\n}\r\n\r\nfunction updateRecommendations() {\r\n    const mainSelected = getMainSelectedFilters();\r\n    const recommendedEl = document.getElementById('recommended-products');\r\n    const relatedEl = document.getElementById('related-products');\r\n    const matchCountEl = document.getElementById('match-count');\r\n    const searchTerm = (document.getElementById('custom-dock-search') || {}).value || '';\r\n    const trimmedSearch = searchTerm.trim().toLowerCase();\r\n\r\n    recommendedEl.innerHTML = '';\r\n    relatedEl.innerHTML = '';\r\n\r\n    \/\/ Search takes priority: if someone's typing, show name matches across\r\n    \/\/ the whole catalog immediately rather than making them also manage filters.\r\n    if (trimmedSearch.length > 0) {\r\n        renderChipsAndBadge(mainSelected);\r\n        const nameMatches = products\r\n            .map(p => ({ product: p, score: productSearchScore(p, trimmedSearch) }))\r\n            .filter(item => item.score > 0)\r\n            .sort((a, b) => b.score - a.score)\r\n            .map(item => item.product);\r\n        matchCountEl.textContent = nameMatches.length > 0 ? `(${nameMatches.length})` : '';\r\n        if (nameMatches.length > 0) {\r\n            nameMatches.forEach(p => recommendedEl.appendChild(renderProductCard(p)));\r\n        } else {\r\n            recommendedEl.innerHTML = `\r\n                <p class=\"custom-dock-empty-msg\">\r\n                    No products matched \"${searchTerm}\".\r\n                    Try a product name, part number\/SKU, product type, or a simpler term\r\n                    such as \"connector\", \"inlet\", \"cordset\", \"30A\", or \"50A\".\r\n                <\/p>\r\n            `;\r\n        }\r\n        document.getElementById('sub-filters-section').innerHTML = '';\r\n        return;\r\n    }\r\n\r\n    if (Object.keys(mainSelected).length === 0) {\r\n        recommendedEl.innerHTML = `\r\n            <p class=\"custom-dock-empty-msg\">Check an attribute above to see matching products.<\/p>\r\n            <a href=\"https:\/\/dev.smartplug.com\/staging\/shop\/\" class=\"custom-dock-browse-all-btn\">Browse All Products \u2192<\/a>\r\n        `;\r\n        matchCountEl.textContent = '';\r\n        activeSubFilters = {};\r\n        document.getElementById('sub-filters-section').innerHTML = '';\r\n        renderChipsAndBadge(mainSelected);\r\n        return;\r\n    }\r\n\r\n    \/\/ What matches on MAIN filters alone \u2014 used to decide which sub-filters to show\r\n    const baseMatches = products.filter(p => matchScore(p, mainSelected).full);\r\n\r\n    \/\/ Sub-filters (e.g. Color) should only ever appear when EVERY main\r\n    \/\/ group currently has at most one box checked. The moment any single\r\n    \/\/ group (Application, Product Type, Amperage) has 2+ checked, we\r\n    \/\/ suppress sub-filters entirely \u2014 pass an empty array so\r\n    \/\/ renderSubFilters finds no relevant groups and clears any active\r\n    \/\/ sub-filter selections along with it.\r\n    const anyGroupHasMultiple = Object.values(mainSelected).some(vals => vals.length > 1);\r\n    renderSubFilters(anyGroupHasMultiple ? [] : baseMatches);\r\n\r\n    \/\/ Combine main + active sub-filters for the actual results shown\r\n    const fullSelected = { ...mainSelected };\r\n    Object.keys(activeSubFilters).forEach(key => {\r\n        if (activeSubFilters[key] && activeSubFilters[key].length > 0) {\r\n            fullSelected[key] = activeSubFilters[key];\r\n        }\r\n    });\r\n\r\n    renderChipsAndBadge(mainSelected);\r\n\r\n    \/\/ \"Matching Products\" must satisfy main filters AND any active sub-filter (e.g. Color).\r\n    const scoredFull = products.map(p => ({ product: p, score: matchScore(p, fullSelected) }));\r\n    const fullMatches = scoredFull.filter(s => s.score.full);\r\n\r\n    matchCountEl.textContent = fullMatches.length > 0 ? `(${fullMatches.length})` : '';\r\n\r\n    \/\/ \"You Might Also Like\" and its \"Shares N attribute(s)\" label are scored\r\n    \/\/ against MAIN filters ONLY. Sub-filters (Color, etc.) should never count\r\n    \/\/ as a \"shared attribute\" and should never by themselves decide whether\r\n    \/\/ something is related \u2014 only the top-level filter groups do.\r\n    const fullMatchProducts = new Set(fullMatches.map(s => s.product));\r\n    const mainScored = products.map(p => ({ product: p, score: matchScore(p, mainSelected) }));\r\n    const relatedMatches = mainScored\r\n        .filter(s => s.score.partial && !fullMatchProducts.has(s.product))\r\n        .sort((a, b) => b.score.hits - a.score.hits);\r\n\r\n    if (fullMatches.length > 0) {\r\n        fullMatches.forEach(s => {\r\n            recommendedEl.appendChild(renderProductCard(s.product));\r\n        });\r\n    } else {\r\n        recommendedEl.innerHTML = `\r\n            <p class=\"custom-dock-empty-msg\">No exact match yet \u2014 try fewer attributes, or see related products below.<\/p>\r\n        `;\r\n    }\r\n\r\n    if (relatedMatches.length > 0) {\r\n        const heading = document.createElement('h4');\r\n        heading.textContent = 'You Might Also Like';\r\n        relatedEl.appendChild(heading);\r\n\r\n        relatedMatches.slice(0, 4).forEach(s => {\r\n            const sharedLabel = `Shares ${s.score.hits} attribute${s.score.hits > 1 ? 's' : ''}`;\r\n            relatedEl.appendChild(renderProductCard(s.product, sharedLabel));\r\n        });\r\n    }\r\n}\r\n\r\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-f9c3d38 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=\"f9c3d38\" 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-62e7dca 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=\"62e7dca\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f2f3e8e elementor-widget elementor-widget-html\" data-id=\"f2f3e8e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- =========================================================\r\n     SMARTPLUG PRODUCT CATALOG \u2014 SELECTED PRODUCTS ONLY\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   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\r\n\r\n\r\n\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\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\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\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\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\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\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\r\n\r\n\r\n\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\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\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\r\n<\/style>\r\n\r\n<div class=\"sp-catalog\">\r\n\r\n  <!-- =======================================================\r\n       SELECTED PRODUCT GRID \u2014 12 PRODUCTS\r\n       ======================================================= -->\r\n\r\n  <div class=\"sp-products\" id=\"spProductGrid\">\r\n\r\n<article\r\n      class=\"sp-card\"\r\n      data-type=\"Connectors\"\r\n      data-applications=\"Boat RV Dockside Commercial\"\r\n      data-amperage=\"30-50\"\r\n      data-sku=\"MR28VDC, RF28VDC\"\r\n      data-search=\"28V - DC Power MR28VDC RF28VDC\"\r\n    >\r\n\r\n      <div class=\"sp-card-image\">\r\n        <a href=\"https:\/\/smartplug.com\/28v-dc-power\/\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"display: contents;\">\r\n<img decoding=\"async\"\r\n          src=\"https:\/\/smartplug.com\/wp-content\/uploads\/2026\/08\/2-Carousel.png\"\r\n          alt=\"DC Power\"\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        28V - DC Power\r\n      <\/h3>\r\n\r\n      <p class=\"sp-card-description\">\r\n        The SmartPlug 28V DC Power system delivers reliable power for electric reels with a straight-in, locking connection built for continuous DC loads.\r\n      <\/p>\r\n\r\n      <ul class=\"sp-card-list\">\r\n        <li>Marine-grade, corrosion-resistant construction.<\/li>\r\n        <li>IP56 weather protection when properly mated.<\/li>\r\n        <li>Designed for electric reels and pot pullers.<\/li>\r\n      <\/ul>\r\n\r\n      <a\r\n        class=\"sp-card-button\"\r\n        href=\"https:\/\/smartplug.com\/28v-dc-power\/\"\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\r\n<article\r\n      class=\"sp-card\"\r\n      data-type=\"Combo Kits\"\r\n      data-applications=\"Boat RV Dockside\"\r\n      data-amperage=\"30-50\"\r\n      data-sku=\"B30ASSYNT, B30ASSYPW, B30ASSYPB, B30ASSYPG, B50ASSYNT, B50ASSYPW, B50ASSYPB, B50ASSYPG\"\r\n      data-search=\"smartplug combo kit smartplug combokit B30ASSYNT B30ASSYPW B30ASSYPB B30ASSYPG B50ASSYNT B50ASSYPW B50ASSYPB B50ASSYPG\"\r\n    >\r\n\r\n      <div class=\"sp-card-image\">\r\n        <a href=\"https:\/\/smartplug.com\/smartplug-combokit\/\" 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-Combo-Kit-2.avif\"\r\n          alt=\"COMBO KIT\"\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        COMBO KIT\r\n      <\/h3>\r\n\r\n      <p class=\"sp-card-description\">\r\n        The SmartPlug Combo Kit combines a SmartPlug inlet and connector for a complete shore power connection.\r\n      <\/p>\r\n\r\n      <ul class=\"sp-card-list\">\r\n        <li>Larger contact surface reduces overheating.<\/li>\r\n        <li>Weatherproof seals protect against moisture.<\/li>\r\n        <li>Installs quickly using standard mounting holes.<\/li>\r\n      <\/ul>\r\n\r\n      <a\r\n        class=\"sp-card-button\"\r\n        href=\"https:\/\/smartplug.com\/smartplug-combokit\/\"\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\r\n<article\r\n      class=\"sp-card\"\r\n      data-type=\"Connectors\"\r\n      data-applications=\"Boat RV Dockside Commercial\"\r\n      data-amperage=\"30-50\"\r\n      data-sku=\"BF30, BF50\"\r\n      data-search=\"smartplug connector BF30 BF50\"\r\n    >\r\n\r\n      <div class=\"sp-card-image\">\r\n        <a href=\"https:\/\/smartplug.com\/smartplug-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\/SmartPlug-Connector.avif\"\r\n          alt=\"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        CONNECTOR\r\n      <\/h3>\r\n\r\n      <p class=\"sp-card-description\">\r\n        The SmartPlug Connector delivers safer, hassle-free power with enhanced conductivity, secure locking, and weatherproof protection.\r\n      <\/p>\r\n\r\n      <ul class=\"sp-card-list\">\r\n        <li>Twist-free push-in design.<\/li>\r\n        <li>Weatherproof seals block moisture.<\/li>\r\n        <li>Easier to store and coil.<\/li>\r\n      <\/ul>\r\n\r\n      <a\r\n        class=\"sp-card-button\"\r\n        href=\"https:\/\/smartplug.com\/smartplug-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\r\n<article\r\n      class=\"sp-card\"\r\n      data-type=\"Inlets\"\r\n      data-applications=\"Boat RV Commercial\"\r\n      data-amperage=\"30-50\"\r\n      data-sku=\"BM30NT, BM30PB, BM30PG, BM30PW\"\r\n      data-search=\"smartplug inlet shore power inlet BM30NT BM30PB BM30PG BM30PW\"\r\n    >\r\n\r\n      <div class=\"sp-card-image\">\r\n        <a href=\"https:\/\/smartplug.com\/smartplug-inlet\/\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"display: contents;\">\r\n<img decoding=\"async\"\r\n          src=\"https:\/\/smartplug.com\/wp-content\/uploads\/2026\/07\/Updated-Inlets.png\"\r\n          alt=\"INLET\"\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        INLET\r\n      <\/h3>\r\n\r\n      <p class=\"sp-card-description\">\r\n        Reduces overheating with increased pin and clip surface area for reliable high-amp shore power.\r\n      <\/p>\r\n\r\n      <ul class=\"sp-card-list\">\r\n        <li>Marine-grade construction.<\/li>\r\n        <li>Hinged flip lid for easy access.<\/li>\r\n        <li>Matches standard mounting patterns.<\/li>\r\n      <\/ul>\r\n\r\n      <a\r\n        class=\"sp-card-button\"\r\n        href=\"https:\/\/smartplug.com\/smartplug-inlet\/\"\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\r\n<article\r\n      class=\"sp-card\"\r\n      data-type=\"Inlets\"\r\n      data-applications=\"RV Commercial\"\r\n      data-amperage=\"other\"\r\n      data-sku=\"\"\r\n      data-search=\"smartplug tv phone internet inlets\"\r\n    >\r\n\r\n      <div class=\"sp-card-image\">\r\n        <a href=\"https:\/\/smartplug.com\/smartplug-tv-phone-internet-inlets\/\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"display: contents;\">\r\n<img decoding=\"async\"\r\n          src=\"https:\/\/smartplug.com\/wp-content\/uploads\/2026\/08\/Triple-Data-Port-2.png\"\r\n          alt=\"TV \/ PHONE \/ INTERNET INLETS\"\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        TV \/ PHONE \/ INTERNET INLETS\r\n      <\/h3>\r\n\r\n      <p class=\"sp-card-description\">\r\n        Weatherproof exterior inlets for routing TV, phone, and internet connections into an RV or vessel.\r\n      <\/p>\r\n\r\n      <ul class=\"sp-card-list\">\r\n        <li>Spring-loaded weatherproof cover.<\/li>\r\n        <li>Color-coded ports.<\/li>\r\n        <li>Flush-mount design.<\/li>\r\n      <\/ul>\r\n\r\n      <a\r\n        class=\"sp-card-button\"\r\n        href=\"https:\/\/smartplug.com\/smartplug-tv-phone-internet-inlets\/\"\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\r\n\r\n\r\n<article\r\n      class=\"sp-card\"\r\n      data-type=\"Cordsets\"\r\n      data-applications=\"Boat RV\"\r\n      data-amperage=\"30\"\r\n      data-sku=\"C15253, C15503\"\r\n      data-search=\"15 amp 115v 30 amp 125v 25 50 cordset C15253 C15503\"\r\n    >\r\n      <div class=\"sp-card-image\">\r\n        <a href=\"https:\/\/smartplug.com\/15-amp-115v-30-amp-125v-25-and-50%E2%80%B2-cordset\/\" 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-25-and-50%E2%80%B2-Cordset.avif\"\r\n          alt=\"15 AMP 115V \/ 30 AMP 125V - 25&#x27; AND 50&#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        30 AMP 125V - 25' AND 50' CORDSET\r\n      <\/h3>\r\n\r\n      <p class=\"sp-card-description\">\r\n        Longer-run SmartPlug cordsets designed for sites farther from the power pedestal.\r\n      <\/p>\r\n\r\n      <ul class=\"sp-card-list\">\r\n        <li>Available in 25' and 50' lengths.<\/li>\r\n        <li>Multi-point locking system.<\/li>\r\n        <li>Weatherproof seals.<\/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-25-and-50%E2%80%B2-cordset\/\"\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\r\n<article\r\n      class=\"sp-card\"\r\n      data-type=\"Cordsets\"\r\n      data-applications=\"Boat RV Dockside\"\r\n      data-amperage=\"30\"\r\n      data-sku=\"C15043\"\r\n      data-search=\"15 amp 115v 30 amp 125v 4 foot cordset C15043\"\r\n    >\r\n      <div class=\"sp-card-image\">\r\n        <a href=\"https:\/\/smartplug.com\/15-amp-115v-30-amp-125v-4-cordset\/\" 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\/\"\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\r\n<article\r\n      class=\"sp-card\"\r\n      data-type=\"Cordsets\"\r\n      data-applications=\"Boat RV Dockside\"\r\n      data-amperage=\"30-50\"\r\n      data-sku=\"CM30253, CM30503, CM50254, CM50504\"\r\n      data-search=\"smartplug dual configuration cordset connector shore power end CM30253 CM30503 CM50254 CM50504\"\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\/\" 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\/\"\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\r\n<article\r\n      class=\"sp-card\"\r\n      data-type=\"Connectors\"\r\n      data-applications=\"Boat RV Dockside\"\r\n      data-amperage=\"30-50\"\r\n      data-sku=\"C30253, C30503W, C50254, C50504\"\r\n      data-search=\"dual configuration smartplug cordset shore power twist type connector C30253 C30503W C50254 C50504\"\r\n    >\r\n\r\n      <div class=\"sp-card-image\">\r\n        <a href=\"https:\/\/smartplug.com\/dual-configuration-smartplug-cordset-w-shore-power-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\/SmartPlug-Dual-Configuration-Smartplug-Cordset-w_-Shore-Power-Twist-Type-Connector-2.avif\"\r\n          alt=\"DUAL CONFIGURATION CORDSET WITH SHORE POWER 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        DUAL CONFIGURATION CORDSET WITH SHORE POWER TWIST-TYPE CONNECTOR\r\n      <\/h3>\r\n\r\n      <p class=\"sp-card-description\">\r\n        A versatile shore power cordset combining SmartPlug connectivity with a twist-type shore power connector.\r\n      <\/p>\r\n\r\n      <ul class=\"sp-card-list\">\r\n        <li>Secure locking connection.<\/li>\r\n        <li>Designed for dependable shore power.<\/li>\r\n        <li>Weather-resistant construction.<\/li>\r\n      <\/ul>\r\n\r\n      <a\r\n        class=\"sp-card-button\"\r\n        href=\"https:\/\/smartplug.com\/dual-configuration-smartplug-cordset-w-shore-power-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\r\n<article\r\n      class=\"sp-card\"\r\n      data-type=\"Cordsets\"\r\n      data-applications=\"Boat RV\"\r\n      data-amperage=\"30-50\"\r\n      data-sku=\"C16123, C16253, C32153, C32253\"\r\n      data-search=\"smartplug harmonized cord boat side connector blunt end C16123 C16253 C32153 C32253\"\r\n    >\r\n\r\n      <div class=\"sp-card-image\">\r\n        <a href=\"https:\/\/smartplug.com\/harmonized-cord-w-smartplug-boat-side-connector-w-blunt-end\/\" 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-Harmonized-Cord-w_-SmartPlug-Boat-Side-Connector-w_-Blunt-End.avif\"\r\n          alt=\"HARMONIZED CORD WITH BOAT-SIDE CONNECTOR AND BLUNT 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        HARMONIZED CORD WITH BOAT-SIDE CONNECTOR AND BLUNT END\r\n      <\/h3>\r\n\r\n      <p class=\"sp-card-description\">\r\n        A flexible harmonized cord configuration designed for SmartPlug boat-side shore power installations.\r\n      <\/p>\r\n\r\n      <ul class=\"sp-card-list\">\r\n        <li>Flexible cord construction.<\/li>\r\n        <li>SmartPlug boat-side connection.<\/li>\r\n        <li>Blunt-end configuration for installation.<\/li>\r\n      <\/ul>\r\n\r\n      <a\r\n        class=\"sp-card-button\"\r\n        href=\"https:\/\/smartplug.com\/harmonized-cord-w-smartplug-boat-side-connector-w-blunt-end\/\"\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\r\n<article\r\n      class=\"sp-card\"\r\n      data-type=\"Breakers\"\r\n      data-applications=\"Boat Commercial\"\r\n      data-amperage=\"30-50\"\r\n      data-sku=\"ELCISENSORNMW, ELCI30BRKERNMW, ELCI50BRKERNMW,\"\r\n      data-search=\"smartplug elci sensor breaker combo kit white ELCISENSORNMW ELCI30BRKERNMW ELCI50BRKERNMW\"\r\n    >\r\n\r\n      <div class=\"sp-card-image\">\r\n        <a href=\"https:\/\/smartplug.com\/elci-sensor-breaker-combo-kit-white\/\" 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-ELCI-Sensor-Breaker-Combo-Kit-%E2%80%93-WHITE.avif\"\r\n          alt=\"ELCI SENSOR BREAKER COMBO KIT\"\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        ELCI SENSOR BREAKER COMBO KIT\r\n      <\/h3>\r\n\r\n      <p class=\"sp-card-description\">\r\n        Pairs SmartPlug shore power equipment with ELCI protection for added electrical safety.\r\n      <\/p>\r\n\r\n      <ul class=\"sp-card-list\">\r\n        <li>Helps monitor leakage current.<\/li>\r\n        <li>Designed for shore power installations.<\/li>\r\n        <li>White housing.<\/li>\r\n      <\/ul>\r\n\r\n      <a\r\n        class=\"sp-card-button\"\r\n        href=\"https:\/\/smartplug.com\/elci-sensor-breaker-combo-kit-white\/\"\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\r\n<article\r\n      class=\"sp-card\"\r\n      data-type=\"Breakers\"\r\n      data-applications=\"Boat Commercial\"\r\n      data-amperage=\"30-50\"\r\n      data-sku=\"ELCIBRKR30PW, ELCIBRKR50PW\"\r\n      data-search=\"elci breakers white ELCIBRKR30PW ELCIBRKR50PW\"\r\n    >\r\n\r\n      <div class=\"sp-card-image\">\r\n        <a href=\"https:\/\/smartplug.com\/elci-breakers-white\/\" 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-ELCI-Breakers-%E2%80%93-WHITE.avif\"\r\n          alt=\"ELCI BREAKERS - WHITE\"\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        ELCI BREAKERS - WHITE\r\n      <\/h3>\r\n\r\n      <p class=\"sp-card-description\">\r\n        White ELCI breaker components designed for SmartPlug shore power electrical protection applications.\r\n      <\/p>\r\n\r\n      <ul class=\"sp-card-list\">\r\n        <li>Designed for electrical protection.<\/li>\r\n        <li>Suitable for shore power systems.<\/li>\r\n        <li>White finish.<\/li>\r\n      <\/ul>\r\n\r\n      <a\r\n        class=\"sp-card-button\"\r\n        href=\"https:\/\/smartplug.com\/elci-breakers-white\/\"\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\r\n  <\/div>\r\n\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\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>BOAT \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 28V &#8211; DC Power The SmartPlug 28V DC Power system delivers reliable power for electric reels with a straight-in, locking connection built for continuous DC loads. Marine-grade, corrosion-resistant construction. IP56 weather protection when properly mated. Designed for electric reels and pot pullers. Learn More COMBO KIT The SmartPlug Combo Kit combines a SmartPlug inlet and connector for a complete shore power connection. Larger contact surface reduces overheating. Weatherproof seals protect against moisture. Installs quickly using standard mounting holes. Learn More CONNECTOR The SmartPlug Connector delivers safer, hassle-free power with enhanced conductivity, secure locking, and weatherproof protection. Twist-free push-in design. Weatherproof seals block moisture. Easier to store and coil. Learn More INLET Reduces overheating with increased pin and clip surface area for reliable high-amp shore power. Marine-grade construction. Hinged flip lid for easy access. Matches standard mounting patterns. Learn More TV \/ PHONE \/ INTERNET INLETS Weatherproof exterior inlets for routing TV, phone, and internet connections into an RV or vessel. Spring-loaded weatherproof cover. Color-coded ports. Flush-mount design. Learn More 30 AMP 125V &#8211; 25&#8242; AND 50&#8242; CORDSET Longer-run SmartPlug cordsets designed for sites farther from the power pedestal. Available in 25&#8242; and 50&#8242; lengths. Multi-point locking system. Weatherproof seals. Learn More 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 DUAL CONFIGURATION CORDSET WITH SHORE POWER TWIST-TYPE CONNECTOR A versatile shore power cordset combining SmartPlug connectivity with a twist-type shore power connector. Secure locking connection. Designed for dependable shore power. Weather-resistant construction. Learn More HARMONIZED CORD WITH BOAT-SIDE CONNECTOR AND BLUNT END A flexible harmonized cord configuration designed for SmartPlug boat-side shore power installations. Flexible cord construction. SmartPlug boat-side connection. Blunt-end configuration for installation. Learn More ELCI SENSOR BREAKER COMBO KIT Pairs SmartPlug shore power equipment with ELCI protection for added electrical safety. Helps monitor leakage current. Designed for shore power installations. White housing. Learn More ELCI BREAKERS &#8211; WHITE White ELCI breaker components designed for SmartPlug shore power electrical protection applications. Designed for electrical protection. Suitable for shore power systems. White finish. Learn More<\/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-12412","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/dev.smartplug.com\/staging\/wp-json\/wp\/v2\/pages\/12412","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=12412"}],"version-history":[{"count":297,"href":"https:\/\/dev.smartplug.com\/staging\/wp-json\/wp\/v2\/pages\/12412\/revisions"}],"predecessor-version":[{"id":20803,"href":"https:\/\/dev.smartplug.com\/staging\/wp-json\/wp\/v2\/pages\/12412\/revisions\/20803"}],"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=12412"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}