{"id":10686,"date":"2025-12-19T21:11:25","date_gmt":"2025-12-19T21:11:25","guid":{"rendered":"https:\/\/dev.smartplug.com\/staging\/?page_id=10686"},"modified":"2026-10-05T21:29:25","modified_gmt":"2026-10-05T21:29:25","slug":"smartplug-tv-phone-internet-inlets","status":"publish","type":"page","link":"https:\/\/dev.smartplug.com\/staging\/smartplug-tv-phone-internet-inlets\/","title":{"rendered":"SmartPlug TV\/Phone\/Internet Inlets &#8211; Boat"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"10686\" class=\"elementor elementor-10686\">\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\">TV\/Phone\/Internet Inlets<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-88192ed e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-parent\" data-id=\"88192ed\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-4723124 e-grid e-con-full wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child\" data-id=\"4723124\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-75c0c77 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child\" data-id=\"75c0c77\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-060b172 sp-hotspot-image elementor-widget elementor-widget-html\" data-id=\"060b172\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- SMARTPLUG DATA PORT GALLERY -->\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Bebas+Neue&family=Montserrat:wght@400;500;600;700&display=swap\" rel=\"stylesheet\">\n\n<div id=\"sp-data-port-gallery\">\n\n    <div class=\"sp-main-view\">\n\n        <!-- FEATURE \/ HOTSPOT SLIDE -->\n        <div class=\"sp-gallery-slide active\" data-slide=\"0\">\n            <div class=\"sp-product-image-wrap sp-main-product sp-hotspot-image\">\n                <div class=\"sp-main-image-clip\">\n                    <img decoding=\"async\"\n                    src=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/08\/Triple-Data-Port-w-hotspots.png\"\n                    alt=\"SmartPlug Data Port Features\"\n                    style=\"\n                    --image-x-desktop:0px;\n                    --image-y-desktop:4px;\n                    --image-scale-desktop:1.08;\n\n                    --image-x-mobile:0px;\n                    --image-y-mobile:0px;\n                    --image-scale-mobile:1.5\n                    \"\n                    >\n                <\/div>\n\n                <div\n                class=\"sp-hotspot\"\n                tabindex=\"0\"\n                style=\"\n                    --top:23%;\n                    --left:26%;\n                    --hotspot-x:0px;\n                    --hotspot-y:0px;\n\n--hotspot-scale-desktop:1;\n--hotspot-scale-mobile:0.8;\n\n                --tooltip-x-desktop:0px;\n                --tooltip-y-desktop:0px;\n                --tooltip-scale-desktop:1;\n\n                --tooltip-x-mobile:30px;\n                --tooltip-y-mobile:0px;\n                --tooltip-scale-mobile:1;\n\n                --dot-color:#DF6B30;\n                --number-color:#fff;\n                --tooltip-bg:#DF6B30;\n                \"\n                >\n                <div class=\"sp-dot\"><span class=\"sp-number\">1<\/span><\/div>\n                <div class=\"sp-tooltip\">\n                    <strong>Protective Weatherproof Lid<\/strong><br>\n                    Keeps the inlet fully covered when not in use to block water, dirt, and salt exposure.\n                <\/div>\n                <\/div>\n\n                <div\n                class=\"sp-hotspot\"\n                tabindex=\"0\"\n                style=\"\n                    --top:42%;\n                    --left:68%;\n                    --hotspot-x:0px;\n                    --hotspot-y:0px;\n\n--hotspot-scale-desktop:1;\n--hotspot-scale-mobile:0.8;\n\n                --tooltip-x-desktop:-20px;\n                --tooltip-y-desktop:0px;\n                --tooltip-scale-desktop:1;\n\n                --tooltip-x-mobile:20px;\n                --tooltip-y-mobile:0px;\n                --tooltip-scale-mobile:1;\n\n                --dot-color:#DF6B30;\n                --number-color:#fff;\n                --tooltip-bg:#DF6B30;\n                \"\n                >\n                <div class=\"sp-dot\"><span class=\"sp-number\">2<\/span><\/div>\n                <div class=\"sp-tooltip\">\n                    <strong>Easy 4-Screw Installation<\/strong><br>\n                    Simple mounting system makes setup fast and straightforward.\n                <\/div>\n                <\/div>\n\n                <div\n                class=\"sp-hotspot\"\n                tabindex=\"0\"\n                style=\"\n                    --top:56%;\n                    --left:36%;\n                    --hotspot-x:0px;\n                    --hotspot-y:0px;\n\n--hotspot-scale-desktop:1;\n--hotspot-scale-mobile:0.8;\n\n                --tooltip-x-desktop:0px;\n                --tooltip-y-desktop:0px;\n                --tooltip-scale-desktop:1;\n\n                --tooltip-x-mobile:0px;\n                --tooltip-y-mobile:0px;\n                --tooltip-scale-mobile:1;\n\n                --dot-color:#DF6B30;\n                --number-color:#fff;\n                --tooltip-bg:#DF6B30;\n                \"\n                >\n                <div class=\"sp-dot\"><span class=\"sp-number\">3<\/span><\/div>\n                <div class=\"sp-tooltip\">\n                    <strong>USB Data Port<\/strong><br>\n                    The upper USB port provides convenient data connectivity for compatible devices and accessories.\n                <\/div>\n                <\/div>\n\n                <div\n                class=\"sp-hotspot\"\n                tabindex=\"0\"\n                style=\"\n                    --top:71%;\n                    --left:33%;\n                    --hotspot-x:0px;\n                    --hotspot-y:0px;\n\n--hotspot-scale-desktop:1;\n--hotspot-scale-mobile:0.8;\n\n                --tooltip-x-desktop:0px;\n                --tooltip-y-desktop:0px;\n                --tooltip-scale-desktop:1;\n\n                --tooltip-x-mobile:0px;\n                --tooltip-y-mobile:0px;\n                --tooltip-scale-mobile:1;\n\n                --dot-color:#DF6B30;\n                --number-color:#fff;\n                --tooltip-bg:#DF6B30;\n                \"\n                >\n                <div class=\"sp-dot\"><span class=\"sp-number\">4<\/span><\/div>\n                <div class=\"sp-tooltip\">\n                    <strong>Ethernet Connection<\/strong><br>\n                    The center Ethernet port provides a convenient connection for network and internet-enabled devices.\n                <\/div>\n                <\/div>\n\n                <div\n                class=\"sp-hotspot\"\n                tabindex=\"0\"\n                style=\"\n                    --top:80%;\n                    --left:71%;\n                    --hotspot-x:0px;\n                    --hotspot-y:0px;\n\n--hotspot-scale-desktop:1;\n--hotspot-scale-mobile:0.8;\n\n                --tooltip-x-desktop:0px;\n                --tooltip-y-desktop:0px;\n                --tooltip-scale-desktop:1;\n\n                --tooltip-x-mobile:0px;\n                --tooltip-y-mobile:0px;\n                --tooltip-scale-mobile:1;\n\n                --dot-color:#DF6B30;\n                --number-color:#fff;\n                --tooltip-bg:#DF6B30;\n                \"\n                >\n                <div class=\"sp-dot\"><span class=\"sp-number\">5<\/span><\/div>\n                <div class=\"sp-tooltip\">\n                    <strong>Additional USB Data Port<\/strong><br>\n                    The lower USB port adds another convenient data connection, allowing multiple supported devices to connect through one compact outlet.\n                <\/div>\n                <\/div>\n            <\/div>\n\n            <div class=\"sp-slide-info\">\n                <div class=\"sp-slide-title\">Key Features<\/div>\n                <div class=\"sp-slide-subtitle\">Click the numbered points to explore the data port.<\/div>\n            <\/div>\n        <\/div>\n\n        <!-- =====================================================\n        PRODUCT VARIANTS \u2014 DATA PORT TYPES\n        ===================================================== -->\n        \n        <div class=\"sp-gallery-slide sp-variant-slide\" data-slide=\"1\" data-variant=\"Triple Data Port\" data-front=\"\" data-open=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Data-port-Triple-Data-Port.png\">\n            <div class=\"sp-variant-layout\">\n\n                <div class=\"sp-mobile-variant-title\">\n                    <div class=\"sp-slide-title\">Triple Port - Steel<\/div>\n                    <div class=\"sp-slide-subtitle\">Blank & Open Port<\/div>\n                <\/div>\n\n                <div class=\"sp-variant-image-wrap\"><img decoding=\"async\" class=\"sp-variant-image\" src=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Data-port-Triple-Data-Port.png\" alt=\"SmartPlug Triple Data Port\"\n                    style=\"\n                    --image-x-desktop:0px;\n                    --image-y-desktop:0px;\n                    --image-scale-desktop:1;\n\n                    --image-x-mobile:0px;\n                    --image-y-mobile:-10px;\n                    --image-scale-mobile:1;\n                    \"\n                    ><\/div>\n\n                <div class=\"sp-slide-info sp-side-info\">\n                    <div class=\"sp-slide-title\">Triple Port - Steel<\/div>\n                    <div class=\"sp-slide-subtitle\">Blank & Open Port<\/div>\n                    \n                    <div class=\"sp-part-number\">PART NUMBER: <strong class=\"sp-part-number-value\">BDBPB<\/strong><\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <div class=\"sp-gallery-slide sp-variant-slide\" data-slide=\"1\" data-variant=\"coax\" data-front=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Data-Port-FrontBlack-Backside.png\" data-open=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Data-port-Black-w-Jacks.png\">\n            <div class=\"sp-variant-layout\">\n\n                <div class=\"sp-mobile-variant-title\">\n                    <div class=\"sp-slide-title\">Non-Metallic - Black<\/div>\n                    <div class=\"sp-slide-subtitle\">Blank & Open Port<\/div>\n                <\/div>\n\n                <div class=\"sp-variant-image-wrap\"><img decoding=\"async\" class=\"sp-variant-image\" src=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Data-port-Black-w-Jacks.png\" alt=\"SmartPlug Data Port Black\"\n                    style=\"\n                    --image-x-desktop:0px;\n                    --image-y-desktop:0px;\n                    --image-scale-desktop:1;\n\n                    --image-x-mobile:0px;\n                    --image-y-mobile:-20px;\n                    --image-scale-mobile:1;\n                    \"\n                    ><\/div>\n\n                <div class=\"sp-slide-info sp-side-info\">\n                    <div class=\"sp-slide-title\">Non-Metallic - Black<\/div>\n                    <div class=\"sp-slide-subtitle\">Blank & Open Port<\/div>\n                    <div class=\"sp-amp-label\">SELECT VIEW<\/div>\n                    <div class=\"sp-amp-toggle\" role=\"group\" aria-label=\"Data Port Coax view\">\n                        <button type=\"button\" class=\"sp-amp-btn\" data-view=\"open\">Jacks & Door<\/button>\n                        <button type=\"button\" class=\"sp-amp-btn active\" data-view=\"front\">Front &amp; Back<\/button>\n                    <\/div>\n                    <div class=\"sp-current-amp\" aria-live=\"polite\">Showing <strong>Jacks & Door<\/strong><\/div>\n                    <div class=\"sp-part-number\">PART NUMBER: <strong class=\"sp-part-number-value\">BDBPB<\/strong><\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <div class=\"sp-gallery-slide sp-variant-slide\" data-slide=\"2\" data-variant=\"usb-c\" data-front=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Data-Port-FrontWhite-Backside.png\" data-open=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Data-port-White-w-Jacks.png\">\n            <div class=\"sp-variant-layout\">\n\n                <div class=\"sp-mobile-variant-title\">\n                    <div class=\"sp-slide-title\">Non-Metallic - White<\/div>\n                    <div class=\"sp-slide-subtitle\">Blank & Open Port<\/div>\n                <\/div>\n\n                <div class=\"sp-variant-image-wrap\"><img decoding=\"async\" class=\"sp-variant-image\" src=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Data-port-White-w-Jacks.png\" alt=\"SmartPlug Data Port White\"\n                    style=\"\n                    --image-x-desktop:0px;\n                    --image-y-desktop:0px;\n                    --image-scale-desktop:1;\n\n                    --image-x-mobile:0px;\n                    --image-y-mobile:-20px;\n                    --image-scale-mobile:1;\n                    \"\n                    ><\/div>\n\n                <div class=\"sp-slide-info sp-side-info\">\n                    <div class=\"sp-slide-title\">Non-Metallic - White<\/div>\n                    <div class=\"sp-slide-subtitle\">Blank & Open Port<\/div>\n                    <div class=\"sp-amp-label\">SELECT VIEW<\/div>\n                    <div class=\"sp-amp-toggle\" role=\"group\" aria-label=\"USB-C view\">\n                        <button type=\"button\" class=\"sp-amp-btn\" data-view=\"open\">Jacks & Door<\/button>\n                        <button type=\"button\" class=\"sp-amp-btn active\" data-view=\"front\">Front &amp; Back<\/button>\n                    <\/div>\n                    <div class=\"sp-current-amp\" aria-live=\"polite\">Showing <strong>Jacks & Door<\/strong><\/div>\n                    <div class=\"sp-part-number\">PART NUMBER: <strong class=\"sp-part-number-value\">BDBPW<\/strong><\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <div class=\"sp-gallery-slide sp-variant-slide\" data-slide=\"3\" data-variant=\"usb-d\" data-front=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Data-Port-FrontGrey-Backside.png\" data-open=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Data-port-Grey-w-Jacks.png\">\n            <div class=\"sp-variant-layout\">\n\n                <div class=\"sp-mobile-variant-title\">\n                    <div class=\"sp-slide-title\">Non-Metallic - Grey<\/div>\n                    <div class=\"sp-slide-subtitle\">Blank & Open Port<\/div>\n                <\/div>\n\n                <div class=\"sp-variant-image-wrap\"><img decoding=\"async\" class=\"sp-variant-image\" src=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Data-port-Grey-w-Jacks.png\" alt=\"SmartPlug USB-D Data Port\"\n                    style=\"\n                    --image-x-desktop:0px;\n                    --image-y-desktop:0px;\n                    --image-scale-desktop:1;\n\n                    --image-x-mobile:0px;\n                    --image-y-mobile:-20px;\n                    --image-scale-mobile:1;\n                    \"\n                    ><\/div>\n\n                <div class=\"sp-slide-info sp-side-info\">\n                    <div class=\"sp-slide-title\">Non-Metallic - Grey<\/div>\n                    <div class=\"sp-slide-subtitle\">Blank & Open Port<\/div>\n                    <div class=\"sp-amp-label\">SELECT VIEW<\/div>\n                    <div class=\"sp-amp-toggle\" role=\"group\" aria-label=\"USB-D view\">\n                        <button type=\"button\" class=\"sp-amp-btn\" data-view=\"open\">Jacks & Door<\/button>\n                        <button type=\"button\" class=\"sp-amp-btn active\" data-view=\"front\">Front &amp; Back<\/button>\n                    <\/div>\n                    <div class=\"sp-current-amp\" aria-live=\"polite\">Showing <strong>Jacks & Door<\/strong><\/div>\n                    <div class=\"sp-part-number\">PART NUMBER: <strong class=\"sp-part-number-value\">BDBPG<\/strong><\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <div class=\"sp-gallery-slide sp-variant-slide\" data-slide=\"4\" data-variant=\"hdmi\" data-front=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Data-Port-FrontStainless-Backside.png\" data-open=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Data-port-Stainless-Steel-w-Jacks.png\">\n            <div class=\"sp-variant-layout\">\n\n                <div class=\"sp-mobile-variant-title\">\n                    <div class=\"sp-slide-title\">Stainless - Steel<\/div>\n                    <div class=\"sp-slide-subtitle\">Blank & Open Port<\/div>\n                <\/div>\n\n                <div class=\"sp-variant-image-wrap\"><img decoding=\"async\" class=\"sp-variant-image\" src=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Data-port-Stainless-Steel-w-Jacks.png\" alt=\"SmartPlug Data Port Stainless Steel\"\n                    style=\"\n                    --image-x-desktop:0px;\n                    --image-y-desktop:0px;\n                    --image-scale-desktop:1;\n\n                    --image-x-mobile:0px;\n                    --image-y-mobile:-20px;\n                    --image-scale-mobile:1;\n                    \"\n                    ><\/div>\n\n                <div class=\"sp-slide-info sp-side-info\">\n                    <div class=\"sp-slide-title\">Stainless - Steel <\/div>\n                    <div class=\"sp-slide-subtitle\">Blank & Open Port<\/div>\n                    <div class=\"sp-amp-label\">SELECT VIEW<\/div>\n                    <div class=\"sp-amp-toggle\" role=\"group\" aria-label=\"HDMI view\">\n                        <button type=\"button\" class=\"sp-amp-btn\" data-view=\"open\">Jacks & Open Port<\/button>\n                        <button type=\"button\" class=\"sp-amp-btn active\" data-view=\"front\">Front &amp; Back<\/button>\n                    <\/div>\n                    <div class=\"sp-current-amp\" aria-live=\"polite\">Showing <strong>Jacks & Open Port<\/strong><\/div>\n                    <div class=\"sp-part-number\">PART NUMBER: <strong class=\"sp-part-number-value\">BDBSS<\/strong><\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n\n        \n\n    <\/div>\n\n    <!-- AMAZON-STYLE CLICKABLE PRODUCT STRIP -->\n    <div class=\"sp-product-selector\">\n\n        <button type=\"button\" class=\"sp-thumb-nav sp-thumb-prev\" aria-label=\"Previous product image\">&#10094;<\/button>\n\n        <div class=\"sp-thumbnails\">\n\n            <button type=\"button\" class=\"sp-thumb sp-feature-thumb active\" data-target=\"0\" aria-label=\"View SmartPlug Data Port features\">\n                <span class=\"sp-thumb-image\">\n                    <img decoding=\"async\" src=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/08\/Triple-Data-Port-2.png\" alt=\"SmartPlug Data Port Features\">\n                <\/span>\n                <span class=\"sp-thumb-label\">Features<\/span>\n            <\/button>\n            \n            <button type=\"button\" class=\"sp-thumb\" data-target=\"1\" aria-label=\"View Triple Data Port\">\n                <span class=\"sp-thumb-image\">\n                    <img decoding=\"async\" src=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Data-port-Triple-Data-Port.png\" alt=\"Triple Data Port\">\n                <\/span>\n                <span class=\"sp-thumb-label\">Triple Data Port<\/span>\n            <\/button>\n            \n            <button type=\"button\" class=\"sp-thumb\" data-target=\"2\" aria-label=\"View Data Port Coax\">\n                <span class=\"sp-thumb-image\">\n                    <img decoding=\"async\" src=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Data-port-Black-w-Jacks.png\" alt=\"Data Port Black\">\n                <\/span>\n                <span class=\"sp-thumb-label\">Black<\/span>\n            <\/button>\n\n            <button type=\"button\" class=\"sp-thumb\" data-target=\"3\" aria-label=\"View USB-C\">\n                <span class=\"sp-thumb-image\">\n                    <img decoding=\"async\" src=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Data-port-White-w-Jacks.png\" alt=\"Data Port White\">\n                <\/span>\n                <span class=\"sp-thumb-label\">White<\/span>\n            <\/button>\n\n            <button type=\"button\" class=\"sp-thumb\" data-target=\"4\" aria-label=\"View USB-D\">\n                <span class=\"sp-thumb-image\">\n                    <img decoding=\"async\" src=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Data-port-Grey-w-Jacks.png\" alt=\"Data Port Grey\">\n                <\/span>\n                <span class=\"sp-thumb-label\">Grey<\/span>\n            <\/button>\n\n            <button type=\"button\" class=\"sp-thumb\" data-target=\"5\" aria-label=\"View HDMI\">\n                <span class=\"sp-thumb-image\">\n                    <img decoding=\"async\" src=\"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/09\/Data-port-Stainless-Steel-w-Jacks.png\" alt=\"Data Port Stainless Steel\">\n                <\/span>\n                <span class=\"sp-thumb-label\">Stainless Steel<\/span>\n            <\/button>\n        <\/div>\n\n        <button type=\"button\" class=\"sp-thumb-nav sp-thumb-next\" aria-label=\"Next product image\">&#10095;<\/button>\n    <\/div>\n\n    <div class=\"sp-gallery-pagination\" aria-label=\"Product gallery pagination\">\n        <button type=\"button\" class=\"sp-page-dot active\" data-page=\"0\" aria-label=\"Go to features\"><\/button>\n        <button type=\"button\" class=\"sp-page-dot\" data-page=\"1\" aria-label=\"Go to Data Port Coax\"><\/button>\n        <button type=\"button\" class=\"sp-page-dot\" data-page=\"2\" aria-label=\"Go to USB-C\"><\/button>\n        <button type=\"button\" class=\"sp-page-dot\" data-page=\"3\" aria-label=\"Go to USB-D\"><\/button>\n        <button type=\"button\" class=\"sp-page-dot\" data-page=\"4\" aria-label=\"Go to HDMI\"><\/button>\n        <button type=\"button\" class=\"sp-page-dot\" data-page=\"5\" aria-label=\"Go to HDMI\"><\/button>\n    <\/div>\n\n<\/div>\n\n<style>\n\/* =========================================================\nSMARTPLUG DATA PORT GALLERY\nAmazon-inspired product selector\n========================================================= *\/\n\n#sp-data-port-gallery {\n    --sp-orange: #DF6B30;\n    --sp-dark: #1c1c1c;\n    --sp-muted: #666;\n    --sp-border: #dedede;\n    --sp-soft: #f7f7f7;\n\n    width: 100%;\n    height: 560px;\n    margin: 0 auto;\n    font-family: \"Montserrat\", sans-serif;\n    box-sizing: border-box;\n    overflow: visible;\n}\n\n#sp-data-port-gallery *,\n#sp-data-port-gallery *::before,\n#sp-data-port-gallery *::after {\n    box-sizing: border-box;\n}\n\n\/* =========================================================\nMAIN VIEW\n========================================================= *\/\n\n#sp-data-port-gallery .sp-main-view {\n    position: relative;\n    width: 100%;\n    height: 430px;\n    overflow: visible;\n}\n\n#sp-data-port-gallery .sp-gallery-slide {\n    display: none;\n    width: 100%;\n    height: 100%;\n    position: relative;\n    overflow: visible;\n    flex-direction: column;\n    align-items: center;\n    justify-content: flex-start;\n}\n\n#sp-data-port-gallery .sp-gallery-slide.active {\n    display: flex;\n}\n\n\/* =========================================================\nFEATURE IMAGE\n========================================================= *\/\n\n#sp-data-port-gallery .sp-main-product {\n    position: relative;\n    width: 100%;\n    height: 400px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n}\n\n#sp-data-port-gallery .sp-main-image-clip {\n    position: absolute;\n    inset: 0;\n    overflow: hidden;\n    pointer-events: none;\n    z-index: 1;\n}\n\n#sp-data-port-gallery .sp-main-image-clip > img {\n    width: 100%;\n    height: 100%;\n    max-width: none;\n    object-fit: contain;\n    display: block;\n    transform:\n    translate(var(--image-x-desktop), var(--image-y-desktop))\n    scale(var(--image-scale-desktop));\n    transform-origin: center center;\n    transition: transform .18s ease;\n}\n\n\/* =========================================================\nVARIANT IMAGE\n========================================================= *\/\n\n#sp-data-port-gallery .sp-variant-layout {\n    width: 100%;\n    height: 100%;\n    display: grid;\n    grid-template-columns: minmax(0, 1.1fr) minmax(180px, .65fr);\n    align-items: center;\n    gap: 12px;\n}\n\n#sp-data-port-gallery .sp-variant-image-wrap {\n    width: 100%;\n    height: 400px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    position: relative;\n    min-width: 0;\n}\n\n#sp-data-port-gallery .sp-variant-image-wrap img {\n    width: 100%;\n    height: 100%;\n    object-fit: contain;\n    display: block;\n    transform:\n    translate(var(--image-x-desktop), var(--image-y-desktop))\n    scale(var(--image-scale-desktop));\n    transform-origin: center center;\n    transition: opacity .16s ease, transform .18s ease;\n}\n\n\/* =========================================================\nPRODUCT INFORMATION\n========================================================= *\/\n\n#sp-data-port-gallery .sp-slide-info {\n    width: 100%;\n    max-width: 400px;\n    margin-top: -2px;\n    padding: 0 12px;\n    text-align: center;\n    transition: none;\n}\n\n#sp-data-port-gallery .sp-side-info {\n    max-width: none;\n    margin: 0;\n    padding: 2px 2px 2px 2px;\n    text-align: left;\n}\n\n#sp-data-port-gallery .sp-side-info .sp-slide-title {\n    font-size: 30px;\n    font-family: \"Bebas Neue\", sans-serif;\n    font-weight: 600;\n    letter-spacing: 1.5px;\n}\n\n#sp-data-port-gallery .sp-amp-label {\n    margin-top: 17px;\n    color: #777;\n    font-size: 11px;\n    font-weight: 700;\n    letter-spacing: .5px;\n}\n\n#sp-data-port-gallery .sp-amp-toggle {\n    display: flex;\n    width: 100%;\n    max-width: 300px;\n    margin-top: 6px;\n    border: 1px solid #d8d8d8;\n    border-radius: 6px;\n    overflow: hidden;\n    background: #fff;\n}\n\n#sp-data-port-gallery .sp-amp-btn {\n    flex: 1 1 50%;\n    min-height: 30px;\n    padding: 7px 10px;\n    border: 0;\n    border-right: 0px solid #d8d8d8;\n    background: #fff;\n    color: #333;\n    font-family: \"Montserrat\", sans-serif;\n    font-size: 12px;\n    font-weight: 700;\n    cursor: pointer;\n    appearance: none;\n    -webkit-appearance: none;\n    transition: background .18s ease, color .18s ease;\n}\n\n#sp-data-port-gallery .sp-amp-btn:last-child { border-right: 0; }\n#sp-data-port-gallery .sp-amp-btn.active { background: var(--sp-orange); color: #fff; }\n#sp-data-port-gallery .sp-amp-btn:disabled { background: #f2f2f2; color: #aaa; cursor: not-allowed; }\n\n#sp-data-port-gallery .sp-current-amp {\n    margin-top: 8px;\n    color: #555;\n    font-size: 12px;\n}\n\n#sp-data-port-gallery .sp-side-info .sp-part-number { margin-top: 10px; }\n\n#sp-data-port-gallery .sp-mobile-variant-title {\n    display: none;\n}\n\n#sp-data-port-gallery .sp-slide-kicker {\n    color: var(--sp-orange);\n    font-size: 10px;\n    font-weight: 700;\n    letter-spacing: .9px;\n    text-transform: uppercase;\n    line-height: 1.2;\n}\n\n#sp-data-port-gallery .sp-slide-title {\n    margin-top: 3px;\n    color: var(--sp-dark);\n    font-family: \"Bebas Neue\", sans-serif;\n    font-size: 25px;\n    line-height: 1;\n    letter-spacing: .4px;\n}\n\n#sp-data-port-gallery .sp-slide-subtitle {\n    margin-top: 3px;\n    margin-bottom: 3px;\n    color: var(--sp-muted);\n    font-size: 12px;\n    font-weight: 500;\n    line-height: 1.35;\n}\n\n#sp-data-port-gallery .sp-variant-image.is-empty {\n    visibility: hidden;\n}\n\n#sp-data-port-gallery .sp-part-number {\n    display: inline-block;\n    margin-top: 7px;\n    color: #555;\n    font-size: 12px;\n    font-weight: 600;\n    letter-spacing: .5px;\n}\n\n#sp-data-port-gallery .sp-part-number strong {\n    color: var(--sp-dark);\n}\n\n\/* =========================================================\nHOTSPOTS\n========================================================= *\/\n\n#sp-data-port-gallery .sp-hotspot {\n    position: absolute;\n    z-index: 1;\n    top: var(--sp-hotspot-top-px, var(--top));\n    left: var(--sp-hotspot-left-px, var(--left));\n    transform:\n    translate(-50%, -50%)\n    scale(var(--hotspot-scale-desktop));\n    transform-origin: center center;\n    outline: none;\n    transition: top .18s ease, left .18s ease, transform .18s ease;\n}\n\n#sp-data-port-gallery .sp-dot {\n    width: 32px;\n    height: 32px;\n    border-radius: 50%;\n    background: var(--dot-color);\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    cursor: pointer;\n    box-shadow: 0 2px 8px rgba(0,0,0,.18);\n}\n\n#sp-data-port-gallery .sp-number {\n    color: var(--number-color);\n    font-size: 13px;\n    font-weight: 700;\n    line-height: 1;\n}\n\n#sp-data-port-gallery .sp-tooltip {\n    position: absolute;\n    z-index: 81;\n    bottom: calc(100% + 7px - var(--tooltip-y-desktop));\n    left: calc(50% + var(--tooltip-x-desktop));\n    transform:\n    translateX(-50%)\n    scale(var(--tooltip-scale-desktop));\n    transform-origin: center bottom;\n    width: 230px;\n    padding: 10px;\n    border-radius: 7px;\n    background: var(--tooltip-bg);\n    color: #fff;\n    font-size: 10px;\n    line-height: 1.45;\n    text-align: left;\n    opacity: 0;\n    visibility: hidden;\n    transition:\n    opacity .18s ease,\n    visibility .18s ease,\n    left .18s ease,\n    bottom .18s ease,\n    transform .18s ease;\n    pointer-events: none;\n    z-index:10;\n    box-shadow: 0 4px 14px rgba(0,0,0,.14);\n}\n\n#sp-data-port-gallery .sp-hotspot:hover .sp-tooltip,\n#sp-data-port-gallery .sp-hotspot:focus-visible .sp-tooltip,\n#sp-data-port-gallery .sp-hotspot.is-open .sp-tooltip {\n    opacity: 1;\n    visibility: visible;\n}\n\n\/* =========================================================\nAMAZON-STYLE PRODUCT SELECTOR\n========================================================= *\/\n\n#sp-data-port-gallery .sp-product-selector {\n    width: 100%;\n    display: flex;\n    align-items: stretch;\n    gap: 6px;\n    margin-top: 4px;\n}\n\n#sp-data-port-gallery .sp-thumbnails {\n    flex: 1 1 auto;\n    min-width: 0;\n    display: flex;\n    align-items: stretch;\n    justify-content: center;\n    gap: 7px;\n    overflow-x: auto;\n    overflow-y: hidden;\n    scroll-behavior: smooth;\n    scrollbar-width: none;\n    padding: 2px 0;\n}\n\n#sp-data-port-gallery .sp-thumbnails::-webkit-scrollbar {\n    display: none;\n}\n\n#sp-data-port-gallery .sp-thumb {\n    flex: 0 0 82px;\n    width: 82px;\n    min-height: 94px;\n    padding: 5px 5px 6px;\n    border: 1px solid var(--sp-border);\n    border-radius: 7px;\n    background: #fff;\n    cursor: pointer;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: flex-start;\n    gap: 3px;\n    appearance: none;\n    -webkit-appearance: none;\n    transition: border-color .18s ease, box-shadow .18s ease, transform .15s ease;\n}\n\n#sp-data-port-gallery .sp-thumb:hover {\n    border-color: var(--sp-orange);\n    transform: translateY(-1px);\n}\n\n#sp-data-port-gallery .sp-thumb.active {\n    border: 2px solid var(--sp-orange);\n    box-shadow: 0 2px 8px rgba(223,107,48,.13);\n}\n\n#sp-data-port-gallery .sp-thumb:focus {\n    outline: none;\n}\n\n#sp-data-port-gallery .sp-thumb:focus-visible {\n    border-color: var(--sp-orange);\n    box-shadow: 0 0 0 2px rgba(223,107,48,.18);\n}\n\n#sp-data-port-gallery .sp-thumb-image {\n    width: 100%;\n    height: 57px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    overflow: hidden;\n    border-radius: 4px;\n    background: #fff;\n}\n\n#sp-data-port-gallery .sp-thumb img {\n    width: 100%;\n    height: 100%;\n    object-fit: contain;\n    display: block;\n    pointer-events: none;\n}\n\n#sp-data-port-gallery .sp-thumb-label {\n    display: block;\n    width: 100%;\n    color: var(--sp-dark);\n    font-size: 9px;\n    font-weight: 700;\n    line-height: 1.15;\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n}\n\n#sp-data-port-gallery .sp-thumb-part {\n    display: block;\n    color: #777;\n    font-size: 8px;\n    font-weight: 600;\n    line-height: 1;\n}\n\n#sp-data-port-gallery .sp-thumb-view {\n    display: block;\n    color: #777;\n    font-size: 8px;\n    font-weight: 600;\n    line-height: 1;\n}\n\n#sp-data-port-gallery .sp-feature-thumb .sp-thumb-part {\n    visibility: hidden;\n}\n\n\/* =========================================================\nTHUMBNAIL ARROWS\n========================================================= *\/\n\n#sp-data-port-gallery .sp-thumb-nav {\n    display: none;\n    width: 26px;\n    min-width: 26px;\n    height: 26px;\n    align-self: center;\n    padding: 0;\n    border: 0;\n    border-radius: 50%;\n    background: #fff;\n    color: #222;\n    font-family: Arial, sans-serif;\n    font-size: 16px;\n    line-height: 26px;\n    text-align: center;\n    cursor: pointer;\n    appearance: none;\n    -webkit-appearance: none;\n}\n\n\/* =========================================================\nPAGINATION\n========================================================= *\/\n\n#sp-data-port-gallery .sp-gallery-pagination {\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    gap: 6px;\n    margin-top: 7px;\n}\n\n#sp-data-port-gallery .sp-page-dot {\n    width: 6px;\n    height: 6px;\n    padding: 0;\n    border: 0;\n    border-radius: 50%;\n    background: #c7c7c7;\n    cursor: pointer;\n    appearance: none;\n    -webkit-appearance: none;\n    transition: background .2s ease, transform .2s ease;\n}\n\n#sp-data-port-gallery .sp-page-dot:hover,\n#sp-data-port-gallery .sp-page-dot.active {\n    background: var(--sp-orange);\n}\n\n#sp-data-port-gallery .sp-page-dot.active {\n    transform: scale(1.25);\n}\n\n\/* =========================================================\nFULL SCREEN VIEW + HOVER ZOOM\n========================================================= *\/\n\n#sp-data-port-gallery .sp-fullscreen-trigger {\n    position: static;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    margin-top: 7px;\n    transform: none;\n    z-index: 10;\n    border: 1px solid #d7d7d7;\n    border-radius: 4px;\n    background: #fff;\n    color: #333;\n    padding: 6px 11px;\n    font-family: \"Montserrat\", sans-serif;\n    font-size: 9px;\n    font-weight: 700;\n    letter-spacing: .2px;\n    line-height: 1;\n    cursor: pointer;\n    white-space: nowrap;\n    appearance: none;\n    -webkit-appearance: none;\n    box-shadow: 0 1px 4px rgba(0,0,0,.08);\n    transition: border-color .18s ease, color .18s ease, background .18s ease;\n}\n\n#sp-data-port-gallery .sp-mobile-variant-title .sp-fullscreen-trigger {\n    display: none;\n}\n\n#sp-data-port-gallery .sp-fullscreen-trigger:hover {\n    border-color: var(--sp-orange);\n    color: var(--sp-orange);\n}\n\n#sp-data-port-gallery .sp-zoom-preview {\n    position: absolute;\n    top: 0;\n    left: calc(100% + 12px);\n    width: 78%;\n    height: 100%;\n    background: #fff;\n    border: 1px solid #e3e3e3;\n    border-radius: 8px;\n    box-shadow: 0 6px 20px rgba(0,0,0,.18);\n    overflow: hidden;\n    opacity: 0;\n    visibility: hidden;\n    pointer-events: none;\n    z-index: 1;\n    transition: opacity .12s ease, visibility .12s ease;\n}\n\n#sp-data-port-gallery .sp-zoom-preview img {\n    position: absolute;\n    width: 200%;\n    height: 200%;\n    max-width: none;\n    object-fit: contain;\n    display: block;\n    pointer-events: none;\n    transform-origin: top left;\n}\n\n#sp-data-port-gallery .sp-variant-image-wrap.sp-zoom-active .sp-zoom-preview {\n    opacity: 1;\n    visibility: visible;\n}\n\n\/* Full-screen product popup *\/\n#sp-data-port-gallery .sp-fullscreen-modal {\n    position: fixed;\n    inset: 0;\n    z-index: 999999;\n    display: none;\n    align-items: center;\n    justify-content: center;\n    padding: 20px;\n    background: rgba(0,0,0,.38);\n}\n\n#sp-data-port-gallery .sp-fullscreen-modal.is-open {\n    display: flex;\n}\n\n#sp-data-port-gallery .sp-fullscreen-dialog {\n    position: relative;\n\n    \/* =====================================================\n       FULL SCREEN POPUP SIZE \u2014 EDIT HERE\n       Change these values for the desktop popup size.\n       ===================================================== *\/\n    width: var(--sp-popup-width-desktop, 1100px);\n    height: var(--sp-popup-height-desktop, 520px);\n    max-width: calc(100vw - 30px);\n    max-height: calc(100vh - 40px);\n\n    display: grid;\n    grid-template-columns: minmax(0, 1.55fr) minmax(260px, .75fr);\n    gap: 28px;\n    padding: 24px 28px;\n    background: #fff;\n    border-radius: 7px;\n    box-shadow: 0 8px 35px rgba(0,0,0,.25);\n    overflow: hidden;\n}\n\n#sp-data-port-gallery .sp-fullscreen-close {\n    position: absolute;\n    top: 8px;\n    right: 10px;\n    width: 28px;\n    height: 28px;\n    padding: 0;\n    border: 0;\n    background: transparent;\n    color: #222;\n    font-family: Arial, sans-serif;\n    font-size: 24px;\n    line-height: 28px;\n    cursor: pointer;\n    z-index: 5;\n}\n\n#sp-data-port-gallery .sp-fullscreen-image-area {\n    min-width: 0;\n    min-height: 0;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    overflow: hidden;\n}\n\n#sp-data-port-gallery .sp-fullscreen-image {\n    \/*\n     * Popup image size and position are controlled by the\n     * FULLSCREEN_CONTENT settings below.\n     *\/\n    width: var(--sp-popup-image-width-desktop, 100%);\n    height: var(--sp-popup-image-height-desktop, 100%);\n    max-width: none;\n    max-height: none;\n    object-fit: contain;\n    display: block;\n    transform: translate(\n        var(--sp-popup-image-x-desktop, 0px),\n        var(--sp-popup-image-y-desktop, 0px)\n    );\n}\n\n#sp-data-port-gallery .sp-fullscreen-info {\n    min-width: 0;\n    padding: 8px 8px 8px 0;\n    display: flex;\n    flex-direction: column;\n    align-items: flex-start;\n    overflow-y: auto;\n}\n\n#sp-data-port-gallery .sp-fullscreen-kicker {\n    color: var(--sp-orange);\n    font-size: 11px;\n    font-weight: 700;\n    letter-spacing: .7px;\n    text-transform: uppercase;\n}\n\n#sp-data-port-gallery .sp-fullscreen-title {\n    margin-top: 5px;\n    color: var(--sp-dark);\n    font-family: \"Bebas Neue\", sans-serif;\n    font-size: 31px;\n    line-height: 1;\n    letter-spacing: 1px;\n}\n\n#sp-data-port-gallery .sp-fullscreen-description {\n    margin-top: 8px;\n    color: #666;\n    font-size: 12px;\n    line-height: 1.45;\n}\n\n#sp-data-port-gallery .sp-fullscreen-part-number {\n    margin-top: 10px;\n    color: #555;\n    font-size: 12px;\n    font-weight: 600;\n    letter-spacing: .5px;\n    line-height: 1.25;\n}\n\n#sp-data-port-gallery .sp-fullscreen-part-number strong {\n    color: var(--sp-dark);\n    font-size: 14px;\n    font-weight: 700;\n}\n\n#sp-data-port-gallery .sp-fullscreen-amp-wrap {\n    display: none;\n    margin-top: 14px;\n}\n\n#sp-data-port-gallery .sp-fullscreen-amp-wrap.is-visible {\n    display: block;\n}\n\n#sp-data-port-gallery .sp-fullscreen-amp-label {\n    margin-bottom: 5px;\n    color: #777;\n    font-size: 10px;\n    font-weight: 700;\n    letter-spacing: .5px;\n}\n\n#sp-data-port-gallery .sp-fullscreen-amp-toggle {\n    display: flex;\n    width: 250px;\n    max-width: 100%;\n    border: 1px solid #d8d8d8;\n    border-radius: 6px;\n    overflow: hidden;\n    background: #fff;\n}\n\n#sp-data-port-gallery .sp-fullscreen-amp-btn {\n    flex: 1 1 50%;\n    min-height: 32px;\n    padding: 7px 10px;\n    border: 0;\n    background: #fff;\n    color: #333;\n    font-family: \"Montserrat\", sans-serif;\n    font-size: 11px;\n    font-weight: 700;\n    cursor: pointer;\n    appearance: none;\n    -webkit-appearance: none;\n    transition: background .18s ease, color .18s ease;\n}\n\n#sp-data-port-gallery .sp-fullscreen-amp-btn.active {\n    background: var(--sp-orange);\n    color: #fff;\n}\n\n#sp-data-port-gallery .sp-fullscreen-amp-btn:disabled {\n    background: #f2f2f2;\n    color: #aaa;\n    cursor: not-allowed;\n}\n\n#sp-data-port-gallery .sp-fullscreen-thumbnails {\n    width: 100%;\n    margin-top: 18px;\n    display: grid;\n    grid-template-columns: repeat(4, minmax(0, 1fr));\n    gap: 8px;\n}\n\n#sp-data-port-gallery .sp-fullscreen-thumb {\n    width: 100%;\n    height: 72px;\n    padding: 4px;\n    border: 1px solid var(--sp-border);\n    border-radius: 4px;\n    background: #fff;\n    cursor: pointer;\n    overflow: hidden;\n}\n\n#sp-data-port-gallery .sp-fullscreen-thumb.active {\n    border: 2px solid var(--sp-orange);\n}\n\n#sp-data-port-gallery .sp-fullscreen-thumb img {\n    width: 100%;\n    height: 100%;\n    object-fit: contain;\n    display: block;\n}\n\n\/* =========================================================\nLAPTOP\n- Navigation arrows only on laptop.\n- View toggle becomes one column \/ two rows.\n========================================================= *\/\n\n@media (min-width: 1025px) and (max-width: 1366px) {\n\n    #sp-data-port-gallery .sp-thumb-nav {\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        flex: 0 0 26px;\n        width: 26px;\n        min-width: 26px;\n        height: 26px;\n        min-height: 26px;\n        padding: 0;\n        border: 0;\n        border-radius: 50%;\n        background: #fff;\n        color: #222;\n        font-family: Arial, sans-serif;\n        font-size: 16px;\n        line-height: 26px;\n        text-align: center;\n        cursor: pointer;\n        appearance: none;\n        -webkit-appearance: none;\n        z-index: 3;\n    }\n\n    #sp-data-port-gallery .sp-thumbnails {\n        flex: 1 1 auto;\n        width: auto;\n        max-width: calc(100% - 58px);\n        min-width: 0;\n        display: flex;\n        align-items: stretch;\n        justify-content: flex-start;\n        gap: 6px;\n        overflow-x: auto;\n        overflow-y: hidden;\n        scroll-behavior: smooth;\n        scrollbar-width: none;\n    }\n\n    #sp-data-port-gallery .sp-thumbnails::-webkit-scrollbar {\n        display: none;\n    }\n\n    \/* Laptop view toggle: one column, two rows *\/\n    #sp-data-port-gallery .sp-side-info .sp-amp-toggle {\n        display: grid;\n        grid-template-columns: 1fr;\n        grid-template-rows: repeat(2, minmax(30px, auto));\n        width: 240px;\n        max-width: 100%;\n        height: auto;\n        gap: 5px;\n        border: none;\n        border-radius: 0;\n        background: transparent;\n        overflow: visible;\n    }\n\n    #sp-data-port-gallery .sp-side-info .sp-amp-btn {\n        width: 100%;\n        min-width: 0;\n        min-height: 30px;\n        padding: 7px 10px;\n        border: 1px solid #d8d8d8;\n        border-radius: 6px;\n        white-space: nowrap;\n    }\n}\n\n\/* =========================================================\nMOBILE\n========================================================= *\/\n\n@media (max-width: 600px) {\n\n    #sp-data-port-gallery .sp-fullscreen-trigger {\n        position: static;\n        display: inline-flex;\n        margin-top: 6px;\n        transform: none;\n        font-size: 8px;\n        padding: 6px 10px;\n    }\n\n    #sp-data-port-gallery .sp-zoom-preview {\n        display: none;\n    }\n\n    #sp-data-port-gallery .sp-fullscreen-modal {\n        padding: 8px;\n    }\n\n    #sp-data-port-gallery .sp-fullscreen-dialog {\n        \/*\n         * FULL SCREEN POPUP SIZE \u2014 MOBILE EDIT HERE\n         *\/\n        width: var(--sp-popup-width-mobile, calc(100vw - 16px));\n        height: var(--sp-popup-height-mobile, 90vh);\n        max-width: calc(100vw - 16px);\n        max-height: calc(100vh - 16px);\n        min-height: 0;\n        grid-template-columns: 1fr;\n        gap: 8px;\n        padding: 18px 12px 12px;\n        border-radius: 8px;\n        box-shadow: 0 8px 30px rgba(0,0,0,.22);\n        overflow-y: auto;\n    }\n\n    #sp-data-port-gallery .sp-fullscreen-image-area {\n        height: var(--sp-popup-image-area-height-mobile, 54vh);\n        min-height: 260px;\n        overflow: hidden;\n    }\n\n    #sp-data-port-gallery .sp-fullscreen-image {\n        width: var(--sp-popup-image-width-mobile, 100%);\n        height: var(--sp-popup-image-height-mobile, 100%);\n        transform: translate(\n            var(--sp-popup-image-x-mobile, 0px),\n            var(--sp-popup-image-y-mobile, 0px)\n        );\n    }\n\n    #sp-data-port-gallery .sp-fullscreen-info {\n        padding: 0 4px 4px;\n        overflow: visible;\n    }\n\n    #sp-data-port-gallery .sp-fullscreen-title {\n        font-size: 25px;\n    }\n\n    #sp-data-port-gallery .sp-fullscreen-description {\n        font-size: 10px;\n    }\n\n    #sp-data-port-gallery .sp-fullscreen-part-number {\n        margin-top: 7px;\n        font-size: 9px;\n    }\n\n    #sp-data-port-gallery .sp-fullscreen-part-number strong {\n        font-size: 11px;\n    }\n\n    #sp-data-port-gallery .sp-fullscreen-amp-wrap {\n        margin-top: 8px;\n    }\n\n    #sp-data-port-gallery .sp-fullscreen-amp-label {\n        font-size: 9px;\n        margin-bottom: 4px;\n    }\n\n    #sp-data-port-gallery .sp-fullscreen-amp-toggle {\n        width: 250px;\n    }\n\n    #sp-data-port-gallery .sp-fullscreen-amp-btn {\n        min-height: 30px;\n        padding: 6px 8px;\n        font-size: 10px;\n    }\n\n    #sp-data-port-gallery .sp-fullscreen-thumbnails {\n        margin-top: 10px;\n        grid-template-columns: repeat(4, minmax(0, 1fr));\n        gap: 5px;\n    }\n\n    #sp-data-port-gallery .sp-fullscreen-thumb {\n        height: 58px;\n    }\n\n    \/* =====================================================\n       MOBILE PRODUCT GALLERY\n       Compact Amazon-style vertical product layout\n       ===================================================== *\/\n\n    #sp-data-port-gallery {\n        width: 100%;\n        max-width: 100%;\n        height: auto;\n        min-height: 0;\n        margin: 0 auto;\n        overflow: visible;\n    }\n\n    #sp-data-port-gallery .sp-main-view {\n        width: 100%;\n        height: auto;\n        min-height: 0;\n        overflow: visible;\n    }\n\n    #sp-data-port-gallery .sp-gallery-slide {\n        width: 100%;\n        height: auto;\n        min-height: 0;\n        display: none;\n        position: relative;\n        overflow: visible;\n        flex-direction: column;\n        align-items: center;\n        justify-content: flex-start;\n    }\n\n    #sp-data-port-gallery .sp-gallery-slide.active {\n        display: flex;\n    }\n\n    \/* FEATURE IMAGE\n       The main\/features image uses the same responsive viewing frame. *\/\n    #sp-data-port-gallery .sp-main-product {\n        width: 100%;\n        height: auto;\n        aspect-ratio: 2.94\/ 3;\n        flex: 0 0 auto;\n        order: 1;\n    }\n\n    #sp-data-port-gallery .sp-main-image-clip {\n        inset: 0;\n    }\n\n    #sp-data-port-gallery .sp-main-image-clip > img {\n        width: 100%;\n        height: 100%;\n        object-fit: contain;\n        transform:\n            translate(var(--image-x-mobile), var(--image-y-mobile))\n            scale(var(--image-scale-mobile));\n    }\n\n    \/* VARIANT LAYOUT *\/\n    #sp-data-port-gallery .sp-variant-layout {\n        width: 100%;\n        height: auto;\n        min-height: 0;\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n        justify-content: flex-start;\n        gap: 0;\n    }\n\n    \/* Title at the top *\/\n    #sp-data-port-gallery .sp-mobile-variant-title {\n        display: block;\n        width: 100%;\n        min-height: 46px;\n        padding: 0 8px;\n        text-align: center;\n        order: 1;\n        margin: 0;\n        position: relative;\n        z-index: 2;\n    }\n\n    #sp-data-port-gallery .sp-mobile-variant-title .sp-slide-kicker {\n        margin: 0;\n        font-size: 8px;\n        line-height: 1.1;\n    }\n\n    #sp-data-port-gallery .sp-mobile-variant-title .sp-slide-title {\n        margin: 2px 0 0;\n        font-size: 23px;\n        line-height: .95;\n        letter-spacing: .8px;\n    }\n\n    #sp-data-port-gallery .sp-mobile-variant-title .sp-slide-subtitle {\n        margin: 3px 0 0;\n        font-size: 10px;\n        line-height: 1.2;\n    }\n\n    #sp-data-port-gallery .sp-side-info .sp-fullscreen-trigger {\n        display: inline-flex;\n        margin-left: auto;\n        margin-right: auto;\n    }\n\n    #sp-data-port-gallery .sp-mobile-variant-title .sp-fullscreen-trigger {\n        display: none;\n    }\n\n    \/* PRODUCT IMAGEEvery variation uses the responsive viewing frame. *\/\n    #sp-data-port-gallery .sp-variant-image-wrap {\n        width: 100%;\n        height: auto;\n        aspect-ratio: 5 \/ 3;\n        min-height: 0;\n        flex: 0 0 auto;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        order: 2;\n        position: relative;\n        overflow: visible;\n    }\n\n    #sp-data-port-gallery .sp-variant-image-wrap img {\n        width: 100%;\n        height: 100%;\n        object-fit: contain;\n        display: block;\n        transform:\n            translate(var(--image-x-mobile), var(--image-y-mobile))\n            scale(var(--image-scale-mobile));\n        transform-origin: center center;\n        transition: opacity .16s ease, transform .18s ease;\n    }\n\n    #sp-data-port-gallery .sp-slide-info .sp-fullscreen-trigger {\n        margin-left: auto;\n        margin-right: auto;\n    }\n\n    \/* PRODUCT INFORMATION \/ CONTROLS *\/\n    #sp-data-port-gallery .sp-side-info {\n        width: 100%;\n        max-width: 100%;\n        height: auto;\n        min-height: 0;\n        padding: 0;\n        margin: 0;\n        text-align: center;\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n        justify-content: flex-start;\n        gap: 0;\n        order: 3;\n    }\n\n    \/* Hide duplicate desktop title. *\/\n    #sp-data-port-gallery .sp-side-info .sp-slide-kicker,\n    #sp-data-port-gallery .sp-side-info .sp-slide-title,\n    #sp-data-port-gallery .sp-side-info .sp-slide-subtitle {\n        display: none;\n    }\n\n    \/* View selector label *\/\n    #sp-data-port-gallery .sp-side-info .sp-amp-label {\n        display: block;\n        width: 100%;\n        margin: 0 0 4px;\n        color: #777;\n        font-size: 10px;\n        line-height: 1.1;\n        font-weight: 700;\n        letter-spacing: .5px;\n        text-align: center;\n    }\n\n    #sp-data-port-gallery .sp-side-info .sp-amp-toggle {\n        display: grid;\n        grid-template-columns: 1fr;\n        grid-template-rows: 1fr 1fr;\n        width: 180px;\n        height: 75px;\n        max-height: none;\n        gap: 5px;\n        border: none;\n        background: transparent;\n        overflow: visible;\n    }\n\n    #sp-data-port-gallery .sp-side-info .sp-amp-btn {\n        width: 100%;\n        height: 35px;\n        min-height: 35px;\n        padding: 5px 10px;\n        font-size: 11px;\n    }\n\n    \/* Keep the existing view switching fully functional. *\/\n    #sp-data-port-gallery .sp-side-info .sp-current-amp {\n        display: block;\n        width: 100%;\n        margin: 5px 0 0;\n        color: #666;\n        font-size: 11px;\n        line-height: 1.15;\n        text-align: center;\n    }\n\n    \/* Part number *\/\n    #sp-data-port-gallery .sp-side-info .sp-part-number {\n        display: inline-block;\n        margin: 5px auto 0;\n        padding: 0;\n        color: #555;\n        font-size: 8px;\n        letter-spacing: .4px;\n        text-align: center;\n    }\n\n    #sp-data-port-gallery .sp-part-number strong {\n        color: var(--sp-dark);\n    }\n\n    #sp-data-port-gallery .sp-variant-image.is-empty {\n        visibility: hidden;\n    }\n\n    \/* HOTSPOTS\n       Position remains JavaScript-calculated from the actual rendered image.\n       Only the existing mobile bubble scale is preserved here. *\/\n    #sp-data-port-gallery .sp-hotspot {\n        top: var(--sp-hotspot-top-px, var(--top));\n        left: var(--sp-hotspot-left-px, var(--left));\n        transform:\n            translate(-50%, -50%)\n            scale(var(--hotspot-scale-mobile));\n    }\n\n    #sp-data-port-gallery .sp-tooltip {\n        bottom: calc(100% + 7px - var(--tooltip-y-mobile));\n        left: calc(50% + var(--tooltip-x-mobile));\n        transform:\n            translateX(-50%)\n            scale(var(--tooltip-scale-mobile));\n        width: min(190px, calc(100vw - 22px));\n        padding: 8px;\n        font-size: 9px;\n    }\n\n    \/* MOBILE THUMBNAIL STRIP *\/\n    #sp-data-port-gallery .sp-product-selector {\n        width: 100%;\n        display: flex;\n        align-items: center;\n        gap: 3px;\n        margin-top: 7px;\n    }\n\n    #sp-data-port-gallery .sp-thumb-nav {\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        flex: 0 0 26px;\n        width: 26px;\n        min-width: 26px;\n        height: 26px;\n        min-height: 26px;\n        padding: 0;\n        border: 0;\n        border-radius: 50%;\n        background: #fff;\n        color: #222;\n        font-size: 16px;\n        line-height: 26px;\n        cursor: pointer;\n        z-index: 3;\n    }\n\n    #sp-data-port-gallery .sp-thumbnails {\n        flex: 1 1 auto;\n        width: auto;\n        max-width: calc(100% - 58px);\n        min-width: 0;\n        display: flex;\n        align-items: stretch;\n        justify-content: flex-start;\n        gap: 4px;\n        overflow-x: auto;\n        overflow-y: hidden;\n        scroll-behavior: smooth;\n        scrollbar-width: none;\n        padding: 1px 0;\n    }\n\n    #sp-data-port-gallery .sp-thumbnails::-webkit-scrollbar {\n        display: none;\n    }\n\n    #sp-data-port-gallery .sp-thumb {\n        flex: 0 0 62px;\n        width: 62px;\n        min-width: 62px;\n        min-height: 75px;\n        height: 75px;\n        padding: 3px;\n        border: 1px solid var(--sp-border);\n        border-radius: 5px;\n        gap: 2px;\n    }\n\n    #sp-data-port-gallery .sp-thumb.active {\n        border: 2px solid var(--sp-orange);\n    }\n\n    #sp-data-port-gallery .sp-thumb-image {\n        width: 100%;\n        height: 45px;\n        min-height: 45px;\n        border-radius: 3px;\n    }\n\n    #sp-data-port-gallery .sp-thumb-label {\n        font-size: 8px;\n        line-height: 1.05;\n    }\n\n    #sp-data-port-gallery .sp-thumb-part {\n        font-size: 7px;\n        line-height: 1;\n    }\n\n    #sp-data-port-gallery .sp-thumb-view {\n        font-size: 7px;\n        line-height: 1;\n    }\n\n    \/* PAGINATION *\/\n    #sp-data-port-gallery .sp-gallery-pagination {\n        display: flex;\n        justify-content: center;\n        align-items: center;\n        gap: 5px;\n        margin-top: 4px;\n        height: 7px;\n    }\n\n    #sp-data-port-gallery .sp-page-dot {\n        width: 6px;\n        height: 6px;\n    }\n\n    \/* DATA PORT VIEW TOGGLE *\/\n    #sp-data-port-gallery .sp-side-info .sp-amp-toggle {\n        width: 240px;\n        max-width: 240px;\n    }\n\n    #sp-data-port-gallery .sp-side-info .sp-amp-btn {\n        min-width: 0;\n        white-space: nowrap;\n    }\n\n    \/* LOCKED RESPONSIVE VIEWING FRAME *\/\n    #sp-data-port-gallery .sp-main-view {\n        overflow: visible;\n    }\n\n    #sp-data-port-gallery .sp-gallery-slide {\n        height: 100%;\n        min-height: 0;\n    }\n\n    #sp-data-port-gallery .sp-main-product,\n    #sp-data-port-gallery .sp-variant-image-wrap {\n        flex-shrink: 0;\n    }\n\n}\n\/* Elementor containers must not clip hotspot tooltips *\/\n.sp-gallery-overflow,\n.sp-gallery-overflow > .e-con,\n.sp-gallery-overflow > .elementor-widget-container {\n    overflow: visible !important;\n}\n\n\/* =========================================================\n   FINAL 2ND PIGTAIL \/ BOUNDLESS RESPONSIVE PATCH\n   Applied to Triple Data Port\n   ========================================================= *\/\n\n\/* Elementor wrappers must never clip hotspot tooltips. *\/\n.sp-gallery-overflow,\n.sp-gallery-overflow > .e-con,\n.sp-gallery-overflow > .elementor-widget-container {\n    overflow: visible !important;\n}\n\n\/* =========================================================\n   BOUNDLESS HOTSPOT TOOLTIPS\n   Tooltips may extend outside the gallery frame and must\n   always paint above neighboring hotspot bubbles.\n   ========================================================= *\/\n#sp-data-port-gallery .sp-hotspot:hover,\n#sp-data-port-gallery .sp-hotspot:focus-visible,\n#sp-data-port-gallery .sp-hotspot.is-open {\n    z-index: 10000 !important;\n}\n\n#sp-data-port-gallery .sp-hotspot .sp-tooltip {\n    z-index: 10001 !important;\n    position: absolute !important;\n    pointer-events: none;\n}\n\n@media (max-width: 767px) {\n    #sp-data-port-gallery,\n    #sp-data-port-gallery .sp-main-view,\n    #sp-data-port-gallery .sp-gallery-slide,\n    #sp-data-port-gallery .sp-main-product,\n    #sp-data-port-gallery .sp-main-image-clip,\n    #sp-data-port-gallery .sp-variant-layout,\n    #sp-data-port-gallery .sp-variant-image-wrap {\n        overflow: visible !important;\n    }\n\n    html,\n    body {\n        overflow-x: hidden !important;\n    }\n\n    #sp-data-port-gallery .sp-hotspot:hover,\n    #sp-data-port-gallery .sp-hotspot:focus-visible,\n    #sp-data-port-gallery .sp-hotspot.is-open {\n        z-index: 10000 !important;\n    }\n\n    #sp-data-port-gallery .sp-hotspot .sp-tooltip {\n        z-index: 10001 !important;\n        position: absolute !important;\n        pointer-events: none;\n    }\n}\n\n\/* =========================================================\n   LOCKED DESKTOP VIEWING FRAME\n   Image swaps do not change the reserved gallery area.\n   ========================================================= *\/\n#sp-data-port-gallery .sp-main-view {\n    height: 430px;\n    min-height: 430px;\n    overflow: visible;\n}\n\n#sp-data-port-gallery .sp-gallery-slide {\n    height: 100%;\n    min-height: 430px;\n}\n\n#sp-data-port-gallery .sp-variant-layout {\n    height: 100%;\n    min-height: 0;\n}\n\n#sp-data-port-gallery .sp-variant-image-wrap {\n    height: 400px;\n    min-height: 400px;\n    flex: 0 0 400px;\n}\n\n#sp-data-port-gallery .sp-side-info {\n    min-height: 220px;\n}\n\n#sp-data-port-gallery .sp-fullscreen-trigger {\n    display: inline-flex;\n    position: static;\n}\n\n\/* =========================================================\n   MOBILE \u2014 FIXED 430px VIEWING FRAME\n   Title -> image -> controls -> thumbnails.\n   The thumbnails stay pinned so image swaps cannot push them.\n   ========================================================= *\/\n@media (max-width: 600px) {\n    #sp-data-port-gallery {\n        height: 525px !important;\n        min-height: 525px !important;\n        position: relative;\n        overflow: visible !important;\n    }\n\n    #sp-data-port-gallery .sp-main-view {\n        height: 430px !important;\n        min-height: 430px !important;\n        position: relative;\n        overflow: visible !important;\n    }\n\n    #sp-data-port-gallery .sp-gallery-slide {\n        height: 430px !important;\n        min-height: 430px !important;\n        position: relative;\n        overflow: visible !important;\n    }\n\n    #sp-data-port-gallery .sp-variant-layout {\n        height: 430px !important;\n        min-height: 430px !important;\n        position: relative;\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n        justify-content: flex-start;\n    }\n\n    \/* Same title reservation for every variation. *\/\n    #sp-data-port-gallery .sp-mobile-variant-title {\n        height: 76px !important;\n        min-height: 76px !important;\n        max-height: 76px !important;\n        flex: 0 0 76px !important;\n        overflow: visible !important;\n        padding: 0 8px;\n        order: 1;\n        position: relative;\n        z-index: 2;\n    }\n\n    #sp-data-port-gallery .sp-mobile-variant-title .sp-slide-title {\n        margin-top: 2px;\n        line-height: .95;\n    }\n\n    #sp-data-port-gallery .sp-mobile-variant-title .sp-slide-subtitle {\n        margin-top: 3px;\n        line-height: 1.2;\n    }\n\n    \/* Dedicated image area. It never changes height between views. *\/\n    #sp-data-port-gallery .sp-variant-image-wrap {\n        width: 100%;\n        height: 210px !important;\n        min-height: 210px !important;\n        max-height: 210px !important;\n        flex: 0 0 210px !important;\n        aspect-ratio: auto !important;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        order: 2;\n        position: absolute;\n        top: 76px;\n        left: 0;\n        right: 0;\n        margin: 0;\n        overflow: visible !important;\n    }\n\n    #sp-data-port-gallery .sp-variant-image-wrap img {\n        width: auto !important;\n        height: auto !important;\n        max-width: 92% !important;\n        max-height: 190px !important;\n        object-fit: contain !important;\n        display: block;\n        flex: 0 0 auto;\n        transform:\n            translate(var(--image-x-mobile), var(--image-y-mobile))\n            scale(var(--image-scale-mobile));\n        transform-origin: center center;\n    }\n\n    \/* Controls have a reserved area above the thumbnails. *\/\n    #sp-data-port-gallery .sp-side-info {\n        width: 100%;\n        height: 112px !important;\n        min-height: 112px !important;\n        max-height: 112px !important;\n        flex: 0 0 112px !important;\n        position: absolute;\n        left: 0;\n        right: 0;\n        top: 278px;\n        bottom: auto;\n        order: 3;\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n        justify-content: flex-start;\n        overflow: visible !important;\n        padding: 0;\n        margin: 0;\n        z-index: 12;\n    }\n\n    #sp-data-port-gallery .sp-side-info .sp-amp-label {\n        margin: 0 0 4px;\n    }\n\n    #sp-data-port-gallery .sp-side-info .sp-amp-toggle {\n        margin-top: 0;\n    }\n\n    #sp-data-port-gallery .sp-side-info .sp-current-amp {\n        margin: 3px 0 0;\n        line-height: 1.1;\n    }\n\n    #sp-data-port-gallery .sp-side-info .sp-part-number {\n        margin: 3px auto 0;\n        line-height: 1.05;\n    }\n\n    #sp-data-port-gallery .sp-side-info .sp-fullscreen-trigger {\n        display: inline-flex !important;\n        position: static !important;\n        margin: 5px auto 0;\n        order: initial;\n    }\n\n    \/* Feature slide uses the same locked middle area. *\/\n    #sp-data-port-gallery .sp-main-product {\n        width: 100%;\n        height: 238px !important;\n        min-height: 238px !important;\n        max-height: 238px !important;\n        aspect-ratio: auto !important;\n        flex: 0 0 238px !important;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        position: relative;\n        order: 1;\n        overflow: visible !important;\n    }\n\n    #sp-data-port-gallery .sp-main-image-clip {\n        inset: 0;\n        overflow: visible !important;\n    }\n\n    #sp-data-port-gallery .sp-main-image-clip > img {\n        width: 100%;\n        height: 100%;\n        max-width: 100%;\n        max-height: 100%;\n        object-fit: contain;\n        display: block;\n        transform:\n            translate(var(--image-x-mobile), var(--image-y-mobile))\n            scale(var(--image-scale-mobile));\n        transform-origin: center center;\n    }\n\n    \/* No unused gap between Full Screen and thumbnails. *\/\n    #sp-data-port-gallery .sp-product-selector {\n        position: absolute !important;\n        left: 0;\n        right: 0;\n        bottom: 18px;\n        width: 100% !important;\n        max-width: 100% !important;\n        margin: 0 !important;\n        z-index: 20;\n    }\n\n    #sp-data-port-gallery .sp-thumbnails {\n        justify-content: center;\n        overflow-x: hidden;\n        overflow-y: hidden;\n    }\n\n    #sp-data-port-gallery .sp-gallery-pagination {\n        position: absolute !important;\n        left: 0;\n        right: 0;\n        bottom: 4px;\n        margin: 0 !important;\n        z-index: 20;\n    }\n\n    \/* Keep arrows clickable above the thumbnail strip. *\/\n    #sp-data-port-gallery .sp-thumb-nav {\n        position: relative;\n        z-index: 30 !important;\n        pointer-events: auto !important;\n    }\n}\n\n\/* =========================================================\n   LAPTOP \u2014 KEEP ARROWS + 2-ROW TOGGLE\n   ========================================================= *\/\n@media (min-width: 1025px) and (max-width: 1366px) {\n    #sp-data-port-gallery .sp-thumb-nav {\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        flex: 0 0 26px;\n        width: 26px;\n        min-width: 26px;\n        height: 26px;\n        min-height: 26px;\n        padding: 0;\n        border: 0;\n        border-radius: 50%;\n        background: #fff;\n        color: #222;\n        font-family: Arial, sans-serif;\n        font-size: 16px;\n        line-height: 26px;\n        text-align: center;\n        cursor: pointer;\n        appearance: none;\n        -webkit-appearance: none;\n        z-index: 30;\n        pointer-events: auto;\n    }\n\n    #sp-data-port-gallery .sp-thumbnails {\n        flex: 1 1 auto;\n        width: auto;\n        max-width: calc(100% - 58px);\n        min-width: 0;\n        display: flex;\n        align-items: stretch;\n        justify-content: flex-start;\n        gap: 6px;\n        overflow-x: auto;\n        overflow-y: hidden;\n        scroll-behavior: smooth;\n        scrollbar-width: none;\n    }\n\n    #sp-data-port-gallery .sp-thumbnails::-webkit-scrollbar {\n        display: none;\n    }\n\n    #sp-data-port-gallery .sp-side-info .sp-amp-toggle {\n        display: grid;\n        grid-template-columns: 1fr;\n        grid-template-rows: repeat(2, minmax(30px, auto));\n        width: 240px;\n        max-width: 100%;\n        height: auto;\n        gap: 5px;\n        border: none;\n        border-radius: 0;\n        background: transparent;\n        overflow: visible;\n    }\n\n    #sp-data-port-gallery .sp-side-info .sp-amp-btn {\n        width: 100%;\n        min-width: 0;\n        min-height: 30px;\n        padding: 7px 10px;\n        border: 1px solid #d8d8d8;\n        border-radius: 6px;\n        white-space: nowrap;\n    }\n}\n\n<\/style>\n<script>\n(function () {\n    function initSmartPlugDataPortGallery() {\n\n        const gallery = document.getElementById(\"sp-data-port-gallery\");\n        if (!gallery || gallery.dataset.initialized === \"true\") return;\n\n        gallery.dataset.initialized = \"true\";\n\n        const slides = gallery.querySelectorAll(\".sp-gallery-slide\");\n        const thumbs = gallery.querySelectorAll(\".sp-thumb\");\n        const hotspots = gallery.querySelectorAll(\".sp-hotspot\");\n        const pageDots = gallery.querySelectorAll(\".sp-page-dot\");\n        const variantSlides = gallery.querySelectorAll(\".sp-variant-slide\");\n        const thumbnailContainer = gallery.querySelector(\".sp-thumbnails\");\n        const thumbPrev = gallery.querySelector(\".sp-thumb-prev\");\n        const thumbNext = gallery.querySelector(\".sp-thumb-next\");\n\n        if (!slides.length || !thumbs.length) return;\n\n        let currentIndex = 0;\n\n        \/* =================================================\n        RESPONSIVE HOTSPOT POSITIONING\n        Maps the existing hotspot percentages to the actual\n        rendered image produced by object-fit: contain.\n        ================================================= *\/\n        function readCssNumber(element, name, fallback) {\n            const inlineValue = element.style.getPropertyValue(name).trim();\n            if (inlineValue) {\n                const parsedInline = parseFloat(inlineValue);\n                if (Number.isFinite(parsedInline)) return parsedInline;\n            }\n\n            const computedValue = window.getComputedStyle(element)\n                .getPropertyValue(name)\n                .trim();\n\n            const parsedComputed = parseFloat(computedValue);\n            return Number.isFinite(parsedComputed) ? parsedComputed : fallback;\n        }\n\n        \/*\n         * RESPONSIVE HOTSPOT POSITIONING\n         * Each hotspot stores one canonical product-relative percentage anchor.\n         * The feature image may use different responsive scale\/X\/Y values.\n         * Calculate the actual object-fit:contain image rectangle, apply its\n         * responsive scale\/translation, map the hotspot anchor into that image,\n         * and write final pixel coordinates relative to the hotspot wrapper.\n         *\/\n        function syncFeatureHotspots() {\n            const featureSlide = slides[0];\n            if (!featureSlide) return;\n\n            const imageWrap = featureSlide.querySelector(\n                \".sp-main-product.sp-hotspot-image\"\n            );\n            const imageClip = featureSlide.querySelector(\n                \".sp-main-image-clip\"\n            );\n            const image = featureSlide.querySelector(\n                \".sp-main-image-clip > img\"\n            );\n            const featureHotspots = featureSlide.querySelectorAll(\n                \".sp-hotspot\"\n            );\n\n            if (\n                !imageWrap ||\n                !imageClip ||\n                !image ||\n                !featureHotspots.length ||\n                !image.naturalWidth ||\n                !image.naturalHeight\n            ) {\n                return;\n            }\n\n            const clipRect = imageClip.getBoundingClientRect();\n            const wrapRect = imageWrap.getBoundingClientRect();\n\n            if (\n                !clipRect.width ||\n                !clipRect.height ||\n                !wrapRect.width ||\n                !wrapRect.height\n            ) {\n                return;\n            }\n\n            \/* Match the image's existing CSS breakpoint behavior.\n             * This gallery provides desktop + mobile image controls;\n             * laptop\/tablet therefore continue using the existing desktop\n             * image settings exactly as the current CSS does.\n             *\/\n            const isMobile = window.matchMedia(\n                \"(max-width: 600px)\"\n            ).matches;\n\n            const zone = isMobile ? \"mobile\" : \"desktop\";\n\n            const imageX = readCssNumber(\n                image,\n                \"--image-x-\" + zone,\n                readCssNumber(image, \"--image-x-desktop\", 0)\n            );\n\n            const imageY = readCssNumber(\n                image,\n                \"--image-y-\" + zone,\n                readCssNumber(image, \"--image-y-desktop\", 0)\n            );\n\n            const imageScale = Math.max(\n                0.001,\n                readCssNumber(\n                    image,\n                    \"--image-scale-\" + zone,\n                    readCssNumber(image, \"--image-scale-desktop\", 1)\n                )\n            );\n\n            \/* Recreate object-fit: contain using the image's natural aspect ratio. *\/\n            const imageRatio =\n                image.naturalWidth \/ image.naturalHeight;\n\n            const containerRatio =\n                clipRect.width \/ clipRect.height;\n\n            let renderedWidth;\n            let renderedHeight;\n\n            if (imageRatio > containerRatio) {\n                renderedWidth = clipRect.width;\n                renderedHeight = renderedWidth \/ imageRatio;\n            } else {\n                renderedHeight = clipRect.height;\n                renderedWidth = renderedHeight * imageRatio;\n            }\n\n            \/* Apply the same scale used by the actual image transform. *\/\n            renderedWidth *= imageScale;\n            renderedHeight *= imageScale;\n\n            \/* Apply the same centered transform-origin used by the CSS image. *\/\n            const renderedLeft =\n                clipRect.left +\n                (clipRect.width - renderedWidth) \/ 2 +\n                imageX;\n\n            const renderedTop =\n                clipRect.top +\n                (clipRect.height - renderedHeight) \/ 2 +\n                imageY;\n\n            featureHotspots.forEach(function (hotspot) {\n                \/* One canonical hotspot anchor; no breakpoint-specific\n                 * hotspot coordinates are required.\n                 *\/\n                const topPercent = readCssNumber(\n                    hotspot,\n                    \"--top\",\n                    50\n                );\n\n                const leftPercent = readCssNumber(\n                    hotspot,\n                    \"--left\",\n                    50\n                );\n\n                const hotspotX = readCssNumber(\n                    hotspot,\n                    \"--hotspot-x\",\n                    0\n                );\n\n                const hotspotY = readCssNumber(\n                    hotspot,\n                    \"--hotspot-y\",\n                    0\n                );\n\n                const leftPx =\n                    renderedLeft -\n                    wrapRect.left +\n                    (renderedWidth * leftPercent \/ 100) +\n                    hotspotX;\n\n                const topPx =\n                    renderedTop -\n                    wrapRect.top +\n                    (renderedHeight * topPercent \/ 100) +\n                    hotspotY;\n\n                hotspot.style.setProperty(\n                    \"--sp-hotspot-left-px\",\n                    leftPx + \"px\"\n                );\n\n                hotspot.style.setProperty(\n                    \"--sp-hotspot-top-px\",\n                    topPx + \"px\"\n                );\n\n                hotspot.setAttribute(\n                    \"data-responsive-zone\",\n                    zone\n                );\n            });\n        }\n\n        let hotspotFrame = null;\n\n        function scheduleFeatureHotspotSync() {\n            if (hotspotFrame) cancelAnimationFrame(hotspotFrame);\n\n            hotspotFrame = requestAnimationFrame(function () {\n                hotspotFrame = null;\n                syncFeatureHotspots();\n            });\n        }\n\n        function showSlide(index) {\n            if (index < 0) index = slides.length - 1;\n            if (index >= slides.length) index = 0;\n\n            slides.forEach(function (slide, i) {\n                slide.classList.toggle(\"active\", i === index);\n            });\n\n            thumbs.forEach(function (thumb) {\n                const target = parseInt(thumb.getAttribute(\"data-target\"), 10);\n                thumb.classList.toggle(\"active\", target === index);\n            });\n\n            pageDots.forEach(function (dot, i) {\n                dot.classList.toggle(\"active\", i === index);\n            });\n\n            currentIndex = index;\n            scheduleFeatureHotspotSync();\n\n            const activeThumb = Array.from(thumbs).find(function (thumb) {\n                return parseInt(thumb.getAttribute(\"data-target\"), 10) === index;\n            });\n\n            if (activeThumb && thumbnailContainer) {\n                const left = activeThumb.offsetLeft;\n                const right = left + activeThumb.offsetWidth;\n                const viewLeft = thumbnailContainer.scrollLeft;\n                const viewRight = viewLeft + thumbnailContainer.clientWidth;\n\n                if (left < viewLeft || right > viewRight) {\n                    thumbnailContainer.scrollTo({\n                        left: left - (thumbnailContainer.clientWidth \/ 2) + (activeThumb.offsetWidth \/ 2),\n                        behavior: \"smooth\"\n                    });\n                }\n            }\n\n            hotspots.forEach(function (hotspot) {\n                hotspot.classList.remove(\"is-open\");\n            });\n        }\n\n        thumbs.forEach(function (thumb) {\n            thumb.addEventListener(\"click\", function (event) {\n                event.preventDefault();\n                event.stopPropagation();\n\n                const target = parseInt(thumb.getAttribute(\"data-target\"), 10);\n                if (!isNaN(target)) showSlide(target);\n            });\n        });\n\n        pageDots.forEach(function (dot) {\n            dot.addEventListener(\"click\", function (event) {\n                event.preventDefault();\n                event.stopPropagation();\n\n                const target = parseInt(dot.getAttribute(\"data-page\"), 10);\n                if (!isNaN(target)) showSlide(target);\n            });\n        });\n\n        function scrollThumbnailStrip(direction) {\n            if (!thumbnailContainer) return;\n\n            \/*\n             * The arrows are hidden by CSS on breakpoints where they should\n             * not be used. Do not gate the click handler by viewport width;\n             * this keeps the visible Mobile\/Laptop arrows functional even\n             * when Elementor or a responsive preview reports a slightly\n             * different viewport width.\n             *\/\n            const items = Array.from(thumbnailContainer.querySelectorAll(\".sp-thumb\"));\n            if (!items.length) return;\n\n            let activeIndex = items.findIndex(function (thumb) {\n                return thumb.classList.contains(\"active\");\n            });\n\n            if (activeIndex < 0) activeIndex = 0;\n\n            let targetIndex = activeIndex + (direction > 0 ? 1 : -1);\n            if (targetIndex < 0) targetIndex = items.length - 1;\n            if (targetIndex >= items.length) targetIndex = 0;\n\n            items[targetIndex].click();\n            items[targetIndex].scrollIntoView({\n                behavior: \"smooth\",\n                block: \"nearest\",\n                inline: \"center\"\n            });\n        }\n\n        if (thumbPrev) {\n            thumbPrev.addEventListener(\"click\", function (event) {\n                event.preventDefault();\n                event.stopPropagation();\n                scrollThumbnailStrip(-1);\n            });\n        }\n\n        if (thumbNext) {\n            thumbNext.addEventListener(\"click\", function (event) {\n                event.preventDefault();\n                event.stopPropagation();\n                scrollThumbnailStrip(1);\n            });\n        }\n\n        hotspots.forEach(function (hotspot) {\n            hotspot.addEventListener(\"click\", function (event) {\n                event.preventDefault();\n                event.stopPropagation();\n\n                const isOpen = hotspot.classList.contains(\"is-open\");\n\n                hotspots.forEach(function (item) {\n                    item.classList.remove(\"is-open\");\n                });\n\n                if (!isOpen) hotspot.classList.add(\"is-open\");\n            });\n        });\n\n        document.addEventListener(\"click\", function (event) {\n            if (!gallery.contains(event.target)) {\n                hotspots.forEach(function (hotspot) {\n                    hotspot.classList.remove(\"is-open\");\n                });\n            }\n        });\n\n        \/* =================================================\n           FRONT & BACK \/ CONNECTOR & OPEN VIEW\n           ================================================= *\/\n\n        variantSlides.forEach(function (slide) {\n            const image = slide.querySelector(\".sp-variant-image\");\n            const viewButtons = slide.querySelectorAll(\".sp-amp-btn\");\n            const currentView = slide.querySelector(\".sp-current-amp\");\n\n            if (!image) return;\n\n            slide.dataset.currentView = \"front\";\n\n            function updateImage() {\n                const view = slide.dataset.currentView === \"open\" ? \"open\" : \"front\";\n                const source = slide.getAttribute(\"data-\" + view) || \"\";\n\n                image.style.opacity = \"0\";\n\n                window.setTimeout(function () {\n                    if (source) {\n                        image.src = source;\n                        image.classList.remove(\"is-empty\");\n                    } else {\n                        image.removeAttribute(\"src\");\n                        image.classList.add(\"is-empty\");\n                    }\n\n                    image.style.opacity = \"1\";\n\n                    if (fullscreenModal.classList.contains(\"is-open\")) {\n                        refreshFullscreenModal();\n                    }\n                }, 90);\n\n                viewButtons.forEach(function (button) {\n                    button.classList.toggle(\n                        \"active\",\n                        button.getAttribute(\"data-view\") === view\n                    );\n                });\n\n                if (currentView) {\n                    currentView.innerHTML = \"Showing <strong>\" +\n                        (view === \"open\" ? \"Jacks & Door\" : \"Front &amp; Back\") +\n                        \"<\/strong>\";\n                }\n            }\n\n            function setView(view) {\n                slide.dataset.currentView = view === \"open\" ? \"open\" : \"front\";\n                updateImage();\n            }\n\n            slide._setView = setView;\n\n            viewButtons.forEach(function (button) {\n                button.addEventListener(\"click\", function (event) {\n                    event.preventDefault();\n                    event.stopPropagation();\n                    setView(button.getAttribute(\"data-view\"));\n                });\n            });\n\n            \/* Initialize every variant to Front & Back.\n               data-front is always the default\/initial state; data-open is the alternative. *\/\n            setView(\"open\");\n        });\n\n        \/* =================================================\n           VIEW FULL SCREEN + HOVER ZOOM\n           ================================================= *\/\n\n        const FULLSCREEN_CONTENT = {\n            0: {\n                image: \"https:\/\/dev.smartplug.com\/staging\/wp-content\/uploads\/2026\/08\/Triple-Data-Port-2.png\",\n                title: \"KEY FEATURES\",\n                description: \"Click the numbered points to explore the data port.\"\n            },\n            1: {\n                title: \"Triple Port - Steel\",\n                description: \"Blank & Open Port\"\n            },\n            2: {\n                title: \"Non-Metallic - Black\",\n                description: \"Blank & Open Port\"\n            },\n            3: {\n                title: \"Non-Metallic - White\",\n                description: \"Blank & Open Port\"\n            },\n            4: {\n                title: \"Non-Metallic - Grey\",\n                description: \"Blank & Open Port\"\n            },\n            5: {\n                title: \"Stainless - Steel\",\n                description: \"Blank & Open Port\"\n            }\n        };\n\n        const fullscreenModal = document.createElement(\"div\");\n        fullscreenModal.className = \"sp-fullscreen-modal\";\n        fullscreenModal.setAttribute(\"aria-hidden\", \"true\");\n        fullscreenModal.innerHTML = `\n            <div class=\"sp-fullscreen-dialog\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Product full screen view\">\n                <button type=\"button\" class=\"sp-fullscreen-close\" aria-label=\"Close full screen\">&times;<\/button>\n                <div class=\"sp-fullscreen-image-area\">\n                    <img class=\"sp-fullscreen-image\" alt=\"\">\n                <\/div>\n                <div class=\"sp-fullscreen-info\">\n                    <div class=\"sp-fullscreen-kicker\"><\/div>\n                    <div class=\"sp-fullscreen-title\"><\/div>\n                    <div class=\"sp-fullscreen-description\"><\/div>\n                    <div class=\"sp-fullscreen-part-number\"><\/div>\n                    <div class=\"sp-fullscreen-amp-wrap\">\n                        <div class=\"sp-fullscreen-amp-label\">SELECT VIEW<\/div>\n                        <div class=\"sp-fullscreen-amp-toggle\" role=\"group\" aria-label=\"Fullscreen product view\">\n                            <button type=\"button\" class=\"sp-fullscreen-amp-btn\" data-view=\"open\">Jacks & Door<\/button>\n                            <button type=\"button\" class=\"sp-fullscreen-amp-btn active\" data-view=\"front\">Front &amp; Back<\/button>\n                        <\/div>\n                    <\/div>\n                    <div class=\"sp-fullscreen-thumbnails\"><\/div>\n                <\/div>\n            <\/div>\n        `;\n\n        gallery.appendChild(fullscreenModal);\n\n        const fullscreenImage = fullscreenModal.querySelector(\".sp-fullscreen-image\");\n        const fullscreenKicker = fullscreenModal.querySelector(\".sp-fullscreen-kicker\");\n        const fullscreenTitle = fullscreenModal.querySelector(\".sp-fullscreen-title\");\n        const fullscreenDescription = fullscreenModal.querySelector(\".sp-fullscreen-description\");\n        const fullscreenPartNumber = fullscreenModal.querySelector(\".sp-fullscreen-part-number\");\n        const fullscreenViewWrap = fullscreenModal.querySelector(\".sp-fullscreen-amp-wrap\");\n        const fullscreenViewButtons = fullscreenModal.querySelectorAll(\".sp-fullscreen-amp-btn\");\n        const fullscreenThumbs = fullscreenModal.querySelector(\".sp-fullscreen-thumbnails\");\n        const fullscreenClose = fullscreenModal.querySelector(\".sp-fullscreen-close\");\n\n        function getActiveGalleryImage() {\n            const activeSlide = slides[currentIndex];\n            if (!activeSlide) return null;\n\n            if (currentIndex === 0) {\n                return activeSlide.querySelector(\".sp-main-image-clip img\");\n            }\n\n            return activeSlide.querySelector(\".sp-variant-image\");\n        }\n\n        function getActiveGalleryCopy() {\n            const custom = FULLSCREEN_CONTENT[currentIndex];\n            if (custom) return custom;\n\n            return {\n                kicker: \"\",\n                title: \"\",\n                description: \"\"\n            };\n        }\n\n        function applyFullscreenSettings() {\n            const dialog = fullscreenModal.querySelector(\".sp-fullscreen-dialog\");\n            if (!dialog) return;\n\n            dialog.style.setProperty(\"--sp-popup-width-desktop\", \"1100px\");\n            dialog.style.setProperty(\"--sp-popup-height-desktop\", \"520px\");\n            dialog.style.setProperty(\"--sp-popup-width-mobile\", \"calc(100vw - 16px)\");\n            dialog.style.setProperty(\"--sp-popup-height-mobile\", \"90vh\");\n            dialog.style.setProperty(\"--sp-popup-image-area-height-mobile\", \"54vh\");\n\n            fullscreenImage.style.setProperty(\"--sp-popup-image-width-desktop\", \"100%\");\n            fullscreenImage.style.setProperty(\"--sp-popup-image-height-desktop\", \"100%\");\n            fullscreenImage.style.setProperty(\"--sp-popup-image-x-desktop\", \"0px\");\n            fullscreenImage.style.setProperty(\"--sp-popup-image-y-desktop\", \"0px\");\n            fullscreenImage.style.setProperty(\"--sp-popup-image-width-mobile\", \"100%\");\n            fullscreenImage.style.setProperty(\"--sp-popup-image-height-mobile\", \"100%\");\n            fullscreenImage.style.setProperty(\"--sp-popup-image-x-mobile\", \"0px\");\n            fullscreenImage.style.setProperty(\"--sp-popup-image-y-mobile\", \"0px\");\n        }\n\n        function refreshFullscreenModal() {\n            const activeImage = getActiveGalleryImage();\n            if (!activeImage || !activeImage.src) return;\n\n            const copy = getActiveGalleryCopy();\n            const activeSlide = slides[currentIndex];\n            const isVariation = currentIndex >= 1 && activeSlide;\n            \/\/ Variant state is normalized to Front & Back by default.\n            \/\/ data-front = Front & Back; data-open = Connector & Open.\n            const view = isVariation\n                ? (activeSlide.dataset.currentView === \"open\" ? \"open\" : \"front\")\n                : \"front\";\n\n            const viewImage = isVariation\n                ? (activeSlide.getAttribute(\"data-\" + view) || \"\")\n                : ((FULLSCREEN_CONTENT[0] && FULLSCREEN_CONTENT[0].image) || activeImage.currentSrc || activeImage.src);\n\n            applyFullscreenSettings();\n\n            fullscreenImage.src = viewImage || activeImage.currentSrc || activeImage.src;\n            fullscreenImage.alt = copy.title || activeImage.alt || \"\";\n            fullscreenKicker.textContent = copy.kicker || \"\";\n            fullscreenTitle.textContent = copy.title || \"\";\n            fullscreenDescription.textContent = copy.description || \"\";\n\n            \/* Pull the part number directly from the normal-view variant.\n               The featured slide intentionally has no part number. *\/\n            const normalPartNumber = isVariation\n                ? activeSlide.querySelector(\".sp-part-number-value\")\n                : null;\n\n            fullscreenPartNumber.innerHTML = normalPartNumber && normalPartNumber.textContent.trim()\n                ? \"PART NUMBER: <strong>\" + normalPartNumber.textContent.trim() + \"<\/strong>\"\n                : \"\";\n\n            \/\/ Triple Port - Steel does not use the fullscreen Select View controls.\n            \/\/ Keep the controls available for the other variants.\n            const hideFullscreenViewControls = currentIndex === 1;\n            fullscreenViewWrap.classList.toggle(\"is-visible\", !!isVariation && !hideFullscreenViewControls);\n\n            fullscreenViewButtons.forEach(function (button) {\n                const buttonView = button.getAttribute(\"data-view\");\n                button.classList.toggle(\"active\", buttonView === view);\n                button.disabled = !isVariation;\n            });\n\n            fullscreenThumbs.innerHTML = \"\";\n\n            thumbs.forEach(function (thumb) {\n                const sourceImage = thumb.querySelector(\"img\");\n                if (!sourceImage) return;\n\n                const modalThumb = document.createElement(\"button\");\n                modalThumb.type = \"button\";\n                modalThumb.className = \"sp-fullscreen-thumb\";\n                modalThumb.setAttribute(\"aria-label\", thumb.getAttribute(\"aria-label\") || \"View product image\");\n\n                const modalThumbImage = document.createElement(\"img\");\n                modalThumbImage.src = sourceImage.currentSrc || sourceImage.src;\n                modalThumbImage.alt = sourceImage.alt || \"\";\n                modalThumb.appendChild(modalThumbImage);\n\n                const thumbTarget = parseInt(thumb.getAttribute(\"data-target\"), 10);\n                if (thumbTarget === currentIndex) modalThumb.classList.add(\"active\");\n\n                modalThumb.addEventListener(\"click\", function (event) {\n                    event.preventDefault();\n                    event.stopPropagation();\n\n                    showSlide(thumbTarget);\n                    window.setTimeout(refreshFullscreenModal, 110);\n                });\n\n                fullscreenThumbs.appendChild(modalThumb);\n            });\n        }\n\n        fullscreenViewButtons.forEach(function (button) {\n            button.addEventListener(\"click\", function (event) {\n                event.preventDefault();\n                event.stopPropagation();\n\n                if (!fullscreenModal.classList.contains(\"is-open\")) return;\n\n                const activeSlide = slides[currentIndex];\n                if (!activeSlide || currentIndex < 1) return;\n\n                if (typeof activeSlide._setView === \"function\") {\n                    activeSlide._setView(button.getAttribute(\"data-view\"));\n                    window.setTimeout(refreshFullscreenModal, 110);\n                }\n            });\n        });\n\n        let fullscreenScrollTop = 0;\n        let fullscreenScrollLeft = 0;\n        let fullscreenBodyPaddingRight = \"\";\n\n        function openFullscreenModal() {\n            refreshFullscreenModal();\n\n            fullscreenScrollTop = window.scrollY || window.pageYOffset || 0;\n            fullscreenScrollLeft = window.scrollX || window.pageXOffset || 0;\n            fullscreenBodyPaddingRight = document.body.style.paddingRight;\n\n            const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n            if (scrollbarWidth > 0) {\n                document.body.style.paddingRight = scrollbarWidth + \"px\";\n            }\n\n            fullscreenModal.classList.add(\"is-open\");\n            fullscreenModal.setAttribute(\"aria-hidden\", \"false\");\n            document.body.style.overflow = \"hidden\";\n        }\n\n        function closeFullscreenModal() {\n            fullscreenModal.classList.remove(\"is-open\");\n            fullscreenModal.setAttribute(\"aria-hidden\", \"true\");\n            document.body.style.overflow = \"\";\n            document.body.style.paddingRight = fullscreenBodyPaddingRight;\n\n            window.scrollTo({\n                top: fullscreenScrollTop,\n                left: fullscreenScrollLeft,\n                behavior: \"auto\"\n            });\n        }\n\n        fullscreenClose.addEventListener(\"click\", function (event) {\n            event.preventDefault();\n            closeFullscreenModal();\n        });\n\n        fullscreenModal.addEventListener(\"click\", function (event) {\n            if (event.target === fullscreenModal) closeFullscreenModal();\n        });\n\n        document.addEventListener(\"keydown\", function (event) {\n            if (event.key === \"Escape\" && fullscreenModal.classList.contains(\"is-open\")) {\n                closeFullscreenModal();\n            }\n        });\n\n        function addFullscreenButtons() {\n            const featureWrap = gallery.querySelector(\".sp-main-product\");\n\n            if (featureWrap && !featureWrap.closest(\".sp-gallery-slide\").querySelector(\".sp-fullscreen-trigger\")) {\n                const button = document.createElement(\"button\");\n                button.type = \"button\";\n                button.className = \"sp-fullscreen-trigger\";\n                button.textContent = \"VIEW FULL SCREEN\";\n                button.addEventListener(\"click\", function (event) {\n                    event.preventDefault();\n                    event.stopPropagation();\n                    openFullscreenModal();\n                });\n\n                const featureInfo = featureWrap.closest(\".sp-gallery-slide\").querySelector(\".sp-slide-info\");\n                if (featureInfo) {\n                    featureInfo.appendChild(button);\n                } else {\n                    featureWrap.appendChild(button);\n                }\n            }\n\n            variantSlides.forEach(function (slide) {\n                const imageWrap = slide.querySelector(\".sp-variant-image-wrap\");\n                if (!imageWrap || slide.querySelector(\".sp-fullscreen-trigger\")) return;\n\n                const button = document.createElement(\"button\");\n                button.type = \"button\";\n                button.className = \"sp-fullscreen-trigger\";\n                button.textContent = \"VIEW FULL SCREEN\";\n                button.addEventListener(\"click\", function (event) {\n                    event.preventDefault();\n                    event.stopPropagation();\n                    openFullscreenModal();\n                });\n\n                const sideInfo = slide.querySelector(\".sp-side-info\");\n\n                \/* Button is appended after the part-number element,\n                   keeping it directly at the bottom of the part number. *\/\n                if (sideInfo) {\n                    sideInfo.appendChild(button);\n                } else {\n                    imageWrap.appendChild(button);\n                }\n            });\n        }\n\n        function setupHoverZoom() {\n            variantSlides.forEach(function (slide) {\n                const imageWrap = slide.querySelector(\".sp-variant-image-wrap\");\n                const image = slide.querySelector(\".sp-variant-image\");\n                if (!imageWrap || !image || imageWrap.dataset.zoomInitialized === \"true\") return;\n\n                imageWrap.dataset.zoomInitialized = \"true\";\n\n                const preview = document.createElement(\"div\");\n                preview.className = \"sp-zoom-preview\";\n\n                const previewImage = document.createElement(\"img\");\n                previewImage.alt = \"\";\n                preview.appendChild(previewImage);\n                imageWrap.appendChild(preview);\n\n                function syncPreviewImage() {\n                    const source = image.currentSrc || image.src;\n                    if (source) previewImage.src = source;\n                }\n\n                image.addEventListener(\"load\", syncPreviewImage);\n                syncPreviewImage();\n\n                imageWrap.addEventListener(\"mouseenter\", function () {\n                    syncPreviewImage();\n                    imageWrap.classList.add(\"sp-zoom-active\");\n                });\n\n                imageWrap.addEventListener(\"mouseleave\", function () {\n                    imageWrap.classList.remove(\"sp-zoom-active\");\n                });\n\n                imageWrap.addEventListener(\"mousemove\", function (event) {\n                    if (window.innerWidth <= 600) return;\n\n                    const rect = imageWrap.getBoundingClientRect();\n                    const x = Math.max(0, Math.min(1, (event.clientX - rect.left) \/ rect.width));\n                    const y = Math.max(0, Math.min(1, (event.clientY - rect.top) \/ rect.height));\n\n                    previewImage.style.left = (-x * 100) + \"%\";\n                    previewImage.style.top = (-y * 100) + \"%\";\n                });\n            });\n        }\n\n        addFullscreenButtons();\n        setupHoverZoom();\n\n        \/* WooCommerce variation compatibility *\/\n        if (window.jQuery) {\n            jQuery(document).on(\n                \"found_variation.spDataPortGallery\",\n                \"form.variations_form\",\n                function (event, variation) {\n\n                    if (!variation || !variation.image || !variation.image.src) return;\n\n                    const variationImage = variation.image.src;\n\n                    thumbs.forEach(function (thumb, index) {\n                        const image = thumb.querySelector(\"img\");\n                        if (!image) return;\n\n                        const thumbImage = image.currentSrc || image.src;\n\n                        if (\n                            thumbImage === variationImage ||\n                            thumbImage.includes(variationImage) ||\n                            variationImage.includes(thumbImage)\n                        ) {\n                            showSlide(index);\n                        }\n                    });\n                }\n            );\n        }\n\n        showSlide(0);\n\n        const featureImage = slides[0]?.querySelector(\n            \".sp-main-image-clip > img\"\n        );\n\n        if (featureImage) {\n            if (featureImage.complete) {\n                scheduleFeatureHotspotSync();\n            } else {\n                featureImage.addEventListener(\n                    \"load\",\n                    scheduleFeatureHotspotSync\n                );\n            }\n        }\n\n        window.addEventListener(\n            \"resize\",\n            scheduleFeatureHotspotSync\n        );\n\n        window.addEventListener(\n            \"orientationchange\",\n            scheduleFeatureHotspotSync\n        );\n\n        if (window.ResizeObserver) {\n            const observer = new ResizeObserver(\n                scheduleFeatureHotspotSync\n            );\n\n            const featureSlide = slides[0];\n\n            const clip = featureSlide?.querySelector(\n                \".sp-main-image-clip\"\n            );\n\n            const imageWrap = featureSlide?.querySelector(\n                \".sp-main-product.sp-hotspot-image\"\n            );\n\n            if (clip) observer.observe(clip);\n            if (imageWrap) observer.observe(imageWrap);\n        }\n    }\n\n    if (document.readyState === \"loading\") {\n        document.addEventListener(\"DOMContentLoaded\", initSmartPlugDataPortGallery);\n    } else {\n        initSmartPlugDataPortGallery();\n    }\n\n    if (window.jQuery) {\n        jQuery(window).on(\"elementor\/frontend\/init\", function () {\n            setTimeout(initSmartPlugDataPortGallery, 150);\n        });\n    }\n\n})();\n<\/script>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-8fd309a e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child\" data-id=\"8fd309a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9f404ad elementor-widget elementor-widget-heading\" data-id=\"9f404ad\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">tv\/phone\/internet inlets<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b747897 elementor-widget elementor-widget-text-editor\" data-id=\"b747897\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p class=\"textbox\" dir=\"ltr\">SmartPlug Data Ports are the perfect complement to our stainless steel shore power inlets, offering the same appearance and high-quality marine-grade stainless steel construction. They feature a weatherproof seal that uses a closed-cell foam gasket in the inlet lid to help keep out moisture. The ports also provide ease of use by locking securely into the edge of the SmartPlug mounting flange. Installation is simple, requiring only four screws to mount, and each unit includes a silicone mounting gasket, eliminating the need for messy caulk.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f79334f elementor-widget elementor-widget-button\" data-id=\"f79334f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/dev.smartplug.com\/staging\/where-to-buy\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">WHERE TO BUY<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>TV\/Phone\/Internet Inlets 1 Protective Weatherproof Lid Keeps the inlet fully covered when not in use to block water, dirt, and salt exposure. 2 Easy 4-Screw Installation Simple mounting system makes setup fast and straightforward. 3 USB Data Port The upper USB port provides convenient data connectivity for compatible devices and accessories. 4 Ethernet Connection The center Ethernet port provides a convenient connection for network and internet-enabled devices. 5 Additional USB Data Port The lower USB port adds another convenient data connection, allowing multiple supported devices to connect through one compact outlet. Key Features Click the numbered points to explore the data port. Triple Port &#8211; Steel Blank &#038; Open Port Triple Port &#8211; Steel Blank &#038; Open Port PART NUMBER: BDBPB Non-Metallic &#8211; Black Blank &#038; Open Port Non-Metallic &#8211; Black Blank &#038; Open Port SELECT VIEW Jacks &#038; Door Front &amp; Back Showing Jacks &#038; Door PART NUMBER: BDBPB Non-Metallic &#8211; White Blank &#038; Open Port Non-Metallic &#8211; White Blank &#038; Open Port SELECT VIEW Jacks &#038; Door Front &amp; Back Showing Jacks &#038; Door PART NUMBER: BDBPW Non-Metallic &#8211; Grey Blank &#038; Open Port Non-Metallic &#8211; Grey Blank &#038; Open Port SELECT VIEW Jacks &#038; Door Front &amp; Back Showing Jacks &#038; Door PART NUMBER: BDBPG Stainless &#8211; Steel Blank &#038; Open Port Stainless &#8211; Steel Blank &#038; Open Port SELECT VIEW Jacks &#038; Open Port Front &amp; Back Showing Jacks &#038; Open Port PART NUMBER: BDBSS &#10094; Features Triple Data Port Black White Grey Stainless Steel &#10095; tv\/phone\/internet inlets SmartPlug Data Ports are the perfect complement to our stainless steel shore power inlets, offering the same appearance and high-quality marine-grade stainless steel construction. They feature a weatherproof seal that uses a closed-cell foam gasket in the inlet lid to help keep out moisture. The ports also provide ease of use by locking securely into the edge of the SmartPlug mounting flange. Installation is simple, requiring only four screws to mount, and each unit includes a silicone mounting gasket, eliminating the need for messy caulk. WHERE TO BUY<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-10686","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/dev.smartplug.com\/staging\/wp-json\/wp\/v2\/pages\/10686","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=10686"}],"version-history":[{"count":150,"href":"https:\/\/dev.smartplug.com\/staging\/wp-json\/wp\/v2\/pages\/10686\/revisions"}],"predecessor-version":[{"id":20451,"href":"https:\/\/dev.smartplug.com\/staging\/wp-json\/wp\/v2\/pages\/10686\/revisions\/20451"}],"wp:attachment":[{"href":"https:\/\/dev.smartplug.com\/staging\/wp-json\/wp\/v2\/media?parent=10686"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}