{"id":3208,"date":"2025-08-04T23:37:05","date_gmt":"2025-08-04T23:37:05","guid":{"rendered":"https:\/\/construction-gs.com\/?page_id=3208"},"modified":"2025-09-03T01:48:02","modified_gmt":"2025-09-03T01:48:02","slug":"gallery","status":"publish","type":"page","link":"https:\/\/construction-gs.com\/es\/gallery\/","title":{"rendered":"Galeria"},"content":{"rendered":"<p>[et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;4.21.2&#8243; _module_preset=&#8221;default&#8221; width=&#8221;100%&#8221; custom_padding=&#8221;0px||51px|||&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_row _builder_version=&#8221;4.21.2&#8243; _module_preset=&#8221;default&#8221; width=&#8221;90%&#8221; min_height=&#8221;80vh&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.21.2&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_code disabled_on=&#8221;on|on|on&#8221; _builder_version=&#8221;4.21.2&#8243; _module_preset=&#8221;default&#8221; disabled=&#8221;on&#8221; global_colors_info=&#8221;{}&#8221;]<!-- [et_pb_line_break_holder] -->     <\/p>\n<style><!-- [et_pb_line_break_holder] -->        .container {<!-- [et_pb_line_break_holder] -->            width: 1400px;<!-- [et_pb_line_break_holder] -->            margin: auto;<!-- [et_pb_line_break_holder] -->            columns: 6;<!-- [et_pb_line_break_holder] -->            column-gap: 20px;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->  <!-- [et_pb_line_break_holder] -->  \t\t\tbody:not(.et-tb) #main-content .container, body:not(.et-tb-has-header) #main-content .container{<!-- [et_pb_line_break_holder] -->          padding-top: 0px !important<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .container .box {<!-- [et_pb_line_break_holder] -->            width: 100%;<!-- [et_pb_line_break_holder] -->            margin-bottom: 10px;<!-- [et_pb_line_break_holder] -->            break-inside: avoid;<!-- [et_pb_line_break_holder] -->            border-radius: 15px;<!-- [et_pb_line_break_holder] -->            cursor: pointer;<!-- [et_pb_line_break_holder] -->            opacity: 0;<!-- [et_pb_line_break_holder] -->            transform: translateY(30px);<!-- [et_pb_line_break_holder] -->            animation: fadeInUp 0.6s ease forwards;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .container .box:nth-child(1) {<!-- [et_pb_line_break_holder] -->            animation-delay: 0.1s;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .container .box:nth-child(2) {<!-- [et_pb_line_break_holder] -->            animation-delay: 0.2s;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .container .box:nth-child(3) {<!-- [et_pb_line_break_holder] -->            animation-delay: 0.3s;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .container .box:nth-child(4) {<!-- [et_pb_line_break_holder] -->            animation-delay: 0.4s;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .container .box:nth-child(5) {<!-- [et_pb_line_break_holder] -->            animation-delay: 0.5s;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .container .box:nth-child(6) {<!-- [et_pb_line_break_holder] -->            animation-delay: 0.6s;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .container .box:nth-child(7) {<!-- [et_pb_line_break_holder] -->            animation-delay: 0.7s;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .container .box:nth-child(8) {<!-- [et_pb_line_break_holder] -->            animation-delay: 0.8s;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .container .box:nth-child(9) {<!-- [et_pb_line_break_holder] -->            animation-delay: 0.9s;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .container .box:nth-child(10) {<!-- [et_pb_line_break_holder] -->            animation-delay: 1.0s;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .container .box:nth-child(11) {<!-- [et_pb_line_break_holder] -->            animation-delay: 1.1s;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .container .box:nth-child(12) {<!-- [et_pb_line_break_holder] -->            animation-delay: 1.2s;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        @keyframes fadeInUp {<!-- [et_pb_line_break_holder] -->            to {<!-- [et_pb_line_break_holder] -->                opacity: 1;<!-- [et_pb_line_break_holder] -->                transform: translateY(0);<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .container .box {<!-- [et_pb_line_break_holder] -->            position: relative;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .container .box img {<!-- [et_pb_line_break_holder] -->            max-width: 100%;<!-- [et_pb_line_break_holder] -->            min-width: 100%;<!-- [et_pb_line_break_holder] -->            border-radius: 10px;<!-- [et_pb_line_break_holder] -->            opacity: 0;<!-- [et_pb_line_break_holder] -->            transition: all 0.4s ease-in-out;<!-- [et_pb_line_break_holder] -->            transform: scale(0.95);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .city-text {<!-- [et_pb_line_break_holder] -->            position: absolute;<!-- [et_pb_line_break_holder] -->            bottom: 10px;<!-- [et_pb_line_break_holder] -->            right: 10px;<!-- [et_pb_line_break_holder] -->            color: white;<!-- [et_pb_line_break_holder] -->            font-family: Arial, Helvetica, sans-serif;<!-- [et_pb_line_break_holder] -->            font-size: 12px;<!-- [et_pb_line_break_holder] -->            font-weight: bold;<!-- [et_pb_line_break_holder] -->            text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.8);<!-- [et_pb_line_break_holder] -->            z-index: 2;<!-- [et_pb_line_break_holder] -->            opacity: 0;<!-- [et_pb_line_break_holder] -->            transition: opacity 0.3s ease;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .container .box:hover .city-text {<!-- [et_pb_line_break_holder] -->            opacity: 1;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .container .box img.loaded {<!-- [et_pb_line_break_holder] -->            opacity: 1;<!-- [et_pb_line_break_holder] -->            transform: scale(1);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        img:hover {<!-- [et_pb_line_break_holder] -->            opacity: .95;<!-- [et_pb_line_break_holder] -->            box-shadow: 0 0 20px rgba(255, 255, 255, 0.8);<!-- [et_pb_line_break_holder] -->            transform: scale(1.05) !important;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .caption {<!-- [et_pb_line_break_holder] -->            font-family: Arial, Helvetica, sans-serif;<!-- [et_pb_line_break_holder] -->            padding: 2px;<!-- [et_pb_line_break_holder] -->            opacity: 0;<!-- [et_pb_line_break_holder] -->            transform: translateY(10px);<!-- [et_pb_line_break_holder] -->            transition: all 0.3s ease;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .container .box:hover .caption {<!-- [et_pb_line_break_holder] -->            opacity: 1;<!-- [et_pb_line_break_holder] -->            transform: translateY(0);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/* Filter Styles *\/<!-- [et_pb_line_break_holder] -->        .filter-container {<!-- [et_pb_line_break_holder] -->            margin: 0 auto 30px auto;<!-- [et_pb_line_break_holder] -->            padding: 20px 0;<!-- [et_pb_line_break_holder] -->            text-align: center;<!-- [et_pb_line_break_holder] -->            opacity: 0;<!-- [et_pb_line_break_holder] -->            transform: translateY(-20px);<!-- [et_pb_line_break_holder] -->            animation: slideDown 0.8s ease forwards;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        @keyframes slideDown {<!-- [et_pb_line_break_holder] -->            to {<!-- [et_pb_line_break_holder] -->                opacity: 1;<!-- [et_pb_line_break_holder] -->                transform: translateY(0);<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .filter-badge {<!-- [et_pb_line_break_holder] -->            display: inline-block;<!-- [et_pb_line_break_holder] -->            padding: 8px 16px;<!-- [et_pb_line_break_holder] -->            margin: 5px;<!-- [et_pb_line_break_holder] -->            background-color: #f0f0f0;<!-- [et_pb_line_break_holder] -->            color: #333;<!-- [et_pb_line_break_holder] -->            border-radius: 20px;<!-- [et_pb_line_break_holder] -->            cursor: pointer;<!-- [et_pb_line_break_holder] -->            transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);<!-- [et_pb_line_break_holder] -->            font-size: 14px;<!-- [et_pb_line_break_holder] -->            border: 2px solid transparent;<!-- [et_pb_line_break_holder] -->            opacity: 0;<!-- [et_pb_line_break_holder] -->            transform: scale(0.8) translateY(20px);<!-- [et_pb_line_break_holder] -->            animation: badgePop 0.6s ease forwards;<!-- [et_pb_line_break_holder] -->            font-weight: bold;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .filter-badge:nth-child(1) {<!-- [et_pb_line_break_holder] -->            animation-delay: 0.2s;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .filter-badge:nth-child(2) {<!-- [et_pb_line_break_holder] -->            animation-delay: 0.3s;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .filter-badge:nth-child(3) {<!-- [et_pb_line_break_holder] -->            animation-delay: 0.4s;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .filter-badge:nth-child(4) {<!-- [et_pb_line_break_holder] -->            animation-delay: 0.5s;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        @keyframes badgePop {<!-- [et_pb_line_break_holder] -->            to {<!-- [et_pb_line_break_holder] -->                opacity: 1;<!-- [et_pb_line_break_holder] -->                transform: scale(1) translateY(0);<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .filter-badge:hover {<!-- [et_pb_line_break_holder] -->            background-color: #e0e0e0;<!-- [et_pb_line_break_holder] -->            transform: translateY(-3px) scale(1.05);<!-- [et_pb_line_break_holder] -->            box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .filter-badge.active {<!-- [et_pb_line_break_holder] -->            background-color: #ffbd00;<!-- [et_pb_line_break_holder] -->            color: white;<!-- [et_pb_line_break_holder] -->            border-color: #ffbd00;<!-- [et_pb_line_break_holder] -->            transform: translateY(-2px) scale(1.1);<!-- [et_pb_line_break_holder] -->            box-shadow: 0 4px 12px rgba(0, 123, 255, 0.4);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .filter-badge.all {<!-- [et_pb_line_break_holder] -->            background-color: #ffbd00;<!-- [et_pb_line_break_holder] -->            color: white;<!-- [et_pb_line_break_holder] -->            border-color: #ffbd00;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .filter-badge.all:hover {<!-- [et_pb_line_break_holder] -->            background-color: #ffbd00;<!-- [et_pb_line_break_holder] -->            transform: translateY(-3px) scale(1.05);<!-- [et_pb_line_break_holder] -->            box-shadow: 0 5px 15px rgba(40, 167, 69, 0.4);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .filter-badge.all.active {<!-- [et_pb_line_break_holder] -->            background-color: #ffbd00;<!-- [et_pb_line_break_holder] -->            transform: translateY(-2px) scale(1.1);<!-- [et_pb_line_break_holder] -->            box-shadow: 0 4px 12px rgba(40, 167, 69, 0.4);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/* Modal Styles *\/<!-- [et_pb_line_break_holder] -->        .modal {<!-- [et_pb_line_break_holder] -->            display: none;<!-- [et_pb_line_break_holder] -->            position: fixed;<!-- [et_pb_line_break_holder] -->            z-index: 999999;<!-- [et_pb_line_break_holder] -->            left: 0;<!-- [et_pb_line_break_holder] -->            top: 0;<!-- [et_pb_line_break_holder] -->            width: 100%;<!-- [et_pb_line_break_holder] -->            height: 100%;<!-- [et_pb_line_break_holder] -->            background-color: rgba(0, 0, 0, 0.9);<!-- [et_pb_line_break_holder] -->            backdrop-filter: blur(5px);<!-- [et_pb_line_break_holder] -->            opacity: 0;<!-- [et_pb_line_break_holder] -->            transition: opacity 0.4s ease;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal.show {<!-- [et_pb_line_break_holder] -->            opacity: 1;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal-content {<!-- [et_pb_line_break_holder] -->            position: relative;<!-- [et_pb_line_break_holder] -->            margin: auto;<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            flex-direction: column;<!-- [et_pb_line_break_holder] -->            align-items: center;<!-- [et_pb_line_break_holder] -->            justify-content: center;<!-- [et_pb_line_break_holder] -->            width: 90%;<!-- [et_pb_line_break_holder] -->            height: 90%;<!-- [et_pb_line_break_holder] -->            max-width: 1200px;<!-- [et_pb_line_break_holder] -->            opacity: 0;<!-- [et_pb_line_break_holder] -->            transform: scale(0.8) translateY(50px);<!-- [et_pb_line_break_holder] -->            transition: all 0.5s cubic-bezier(0.4, 0, 0.2, 1);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal.show .modal-content {<!-- [et_pb_line_break_holder] -->            opacity: 1;<!-- [et_pb_line_break_holder] -->            transform: scale(1) translateY(0);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal-image {<!-- [et_pb_line_break_holder] -->            max-width: 100%;<!-- [et_pb_line_break_holder] -->            max-height: 100%;<!-- [et_pb_line_break_holder] -->            object-fit: contain;<!-- [et_pb_line_break_holder] -->            border-radius: 10px;<!-- [et_pb_line_break_holder] -->            box-shadow: 0 0 30px rgba(255, 255, 255, 0.3);<!-- [et_pb_line_break_holder] -->            opacity: 0;<!-- [et_pb_line_break_holder] -->            transform: scale(0.9);<!-- [et_pb_line_break_holder] -->            transition: all 0.6s ease 0.2s;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal-image-container {<!-- [et_pb_line_break_holder] -->            position: relative;<!-- [et_pb_line_break_holder] -->            display: inline-block;<!-- [et_pb_line_break_holder] -->            max-width: 90vw;<!-- [et_pb_line_break_holder] -->            max-height: 80vh;<!-- [et_pb_line_break_holder] -->            text-align: center;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal-city-text {<!-- [et_pb_line_break_holder] -->            position: absolute;<!-- [et_pb_line_break_holder] -->            bottom: 15px;<!-- [et_pb_line_break_holder] -->            right: 15px;<!-- [et_pb_line_break_holder] -->            color: white;<!-- [et_pb_line_break_holder] -->            font-family: Arial, Helvetica, sans-serif;<!-- [et_pb_line_break_holder] -->            font-size: 16px;<!-- [et_pb_line_break_holder] -->            font-weight: bold;<!-- [et_pb_line_break_holder] -->            text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.8);<!-- [et_pb_line_break_holder] -->            z-index: 3;<!-- [et_pb_line_break_holder] -->            opacity: 0;<!-- [et_pb_line_break_holder] -->            transform: translateY(10px);<!-- [et_pb_line_break_holder] -->            transition: all 0.5s ease 0.6s;<!-- [et_pb_line_break_holder] -->            pointer-events: none;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal.show .modal-city-text {<!-- [et_pb_line_break_holder] -->            opacity: 1;<!-- [et_pb_line_break_holder] -->            transform: translateY(0);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal.show .modal-image {<!-- [et_pb_line_break_holder] -->            opacity: 1;<!-- [et_pb_line_break_holder] -->            transform: scale(1);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal-caption {<!-- [et_pb_line_break_holder] -->            position: absolute;<!-- [et_pb_line_break_holder] -->            top: 15px;<!-- [et_pb_line_break_holder] -->            left: 15px;<!-- [et_pb_line_break_holder] -->            color: white;<!-- [et_pb_line_break_holder] -->            font-family: Arial, Helvetica, sans-serif;<!-- [et_pb_line_break_holder] -->            font-size: 16px;<!-- [et_pb_line_break_holder] -->            font-weight: bold;<!-- [et_pb_line_break_holder] -->            text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.8);<!-- [et_pb_line_break_holder] -->            z-index: 3;<!-- [et_pb_line_break_holder] -->            opacity: 0;<!-- [et_pb_line_break_holder] -->            transform: translateY(-10px);<!-- [et_pb_line_break_holder] -->            transition: all 0.5s ease 0.4s;<!-- [et_pb_line_break_holder] -->            pointer-events: none;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal.show .modal-caption {<!-- [et_pb_line_break_holder] -->            opacity: 1;<!-- [et_pb_line_break_holder] -->            transform: translateY(0);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .close {<!-- [et_pb_line_break_holder] -->            position: absolute;<!-- [et_pb_line_break_holder] -->            top: 15px;<!-- [et_pb_line_break_holder] -->            right: 35px;<!-- [et_pb_line_break_holder] -->            color: #f1f1f1;<!-- [et_pb_line_break_holder] -->            font-size: 40px;<!-- [et_pb_line_break_holder] -->            font-weight: bold;<!-- [et_pb_line_break_holder] -->            cursor: pointer;<!-- [et_pb_line_break_holder] -->            z-index: 1001;<!-- [et_pb_line_break_holder] -->            transition: all 0.3s ease;<!-- [et_pb_line_break_holder] -->            opacity: 0;<!-- [et_pb_line_break_holder] -->            transform: rotate(90deg) scale(0.8);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal.show .close {<!-- [et_pb_line_break_holder] -->            opacity: 1;<!-- [et_pb_line_break_holder] -->            transform: rotate(0deg) scale(1);<!-- [et_pb_line_break_holder] -->            transition-delay: 0.3s;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .close:hover,<!-- [et_pb_line_break_holder] -->        .close:focus {<!-- [et_pb_line_break_holder] -->            color: #bbb;<!-- [et_pb_line_break_holder] -->            text-decoration: none;<!-- [et_pb_line_break_holder] -->            transform: rotate(90deg) scale(1.1);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal-nav {<!-- [et_pb_line_break_holder] -->            position: absolute;<!-- [et_pb_line_break_holder] -->            top: 50%;<!-- [et_pb_line_break_holder] -->            transform: translateY(-50%);<!-- [et_pb_line_break_holder] -->            color: white;<!-- [et_pb_line_break_holder] -->            font-size: 30px;<!-- [et_pb_line_break_holder] -->            cursor: pointer;<!-- [et_pb_line_break_holder] -->            padding: 20px;<!-- [et_pb_line_break_holder] -->            background-color: rgba(0, 0, 0, 0.5);<!-- [et_pb_line_break_holder] -->            border-radius: 50%;<!-- [et_pb_line_break_holder] -->            transition: all 0.3s ease;<!-- [et_pb_line_break_holder] -->            opacity: 0;<!-- [et_pb_line_break_holder] -->            transform: scale(0.8);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal.show .modal-nav {<!-- [et_pb_line_break_holder] -->            opacity: 1;<!-- [et_pb_line_break_holder] -->            transform: scale(1);<!-- [et_pb_line_break_holder] -->            transition-delay: 0.4s;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal-nav:hover {<!-- [et_pb_line_break_holder] -->            background-color: rgba(0, 0, 0, 0.8);<!-- [et_pb_line_break_holder] -->            transform: scale(1.1);<!-- [et_pb_line_break_holder] -->            box-shadow: 0 0 20px rgba(255, 255, 255, 0.3);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal-prev {<!-- [et_pb_line_break_holder] -->            left: 20px;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal-next {<!-- [et_pb_line_break_holder] -->            right: 20px;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/* Loading animation *\/<!-- [et_pb_line_break_holder] -->        .loading {<!-- [et_pb_line_break_holder] -->            position: fixed;<!-- [et_pb_line_break_holder] -->            top: 50%;<!-- [et_pb_line_break_holder] -->            left: 50%;<!-- [et_pb_line_break_holder] -->            transform: translate(-50%, -50%);<!-- [et_pb_line_break_holder] -->            z-index: 9999;<!-- [et_pb_line_break_holder] -->            opacity: 1;<!-- [et_pb_line_break_holder] -->            transition: opacity 0.5s ease;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .loading.hidden {<!-- [et_pb_line_break_holder] -->            opacity: 0;<!-- [et_pb_line_break_holder] -->            pointer-events: none;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .spinner {<!-- [et_pb_line_break_holder] -->            width: 50px;<!-- [et_pb_line_break_holder] -->            height: 50px;<!-- [et_pb_line_break_holder] -->            border: 4px solid #f3f3f3;<!-- [et_pb_line_break_holder] -->            border-top: 4px solid #007bff;<!-- [et_pb_line_break_holder] -->            border-radius: 50%;<!-- [et_pb_line_break_holder] -->            animation: spin 1s linear infinite;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        @keyframes spin {<!-- [et_pb_line_break_holder] -->            0% {<!-- [et_pb_line_break_holder] -->                transform: rotate(0deg);<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            100% {<!-- [et_pb_line_break_holder] -->                transform: rotate(360deg);<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/* Gallery transition animations *\/<!-- [et_pb_line_break_holder] -->        .gallery-transition {<!-- [et_pb_line_break_holder] -->            transition: all 0.5s cubic-bezier(0.4, 0, 0.2, 1);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .fade-out {<!-- [et_pb_line_break_holder] -->            opacity: 0;<!-- [et_pb_line_break_holder] -->            transform: scale(0.95);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .fade-in {<!-- [et_pb_line_break_holder] -->            opacity: 1;<!-- [et_pb_line_break_holder] -->            transform: scale(1);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        @media (max-width: 1427px) {<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            .container,<!-- [et_pb_line_break_holder] -->            .filter-container {<!-- [et_pb_line_break_holder] -->                width: calc(100% - 40px);<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        @media (max-width: 1200px) {<!-- [et_pb_line_break_holder] -->            .container {<!-- [et_pb_line_break_holder] -->                columns: 4;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        @media (max-width: 1000px) {<!-- [et_pb_line_break_holder] -->            .container {<!-- [et_pb_line_break_holder] -->                columns: 3;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            body {<!-- [et_pb_line_break_holder] -->                overflow-x: hidden;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            .navLink {<!-- [et_pb_line_break_holder] -->                position: absolute;<!-- [et_pb_line_break_holder] -->                right: 0px;<!-- [et_pb_line_break_holder] -->                height: 20vh;<!-- [et_pb_line_break_holder] -->                top: 10vh;<!-- [et_pb_line_break_holder] -->                background-color: #000;<!-- [et_pb_line_break_holder] -->                display: flex;<!-- [et_pb_line_break_holder] -->                flex-direction: column;<!-- [et_pb_line_break_holder] -->                align-items: center;<!-- [et_pb_line_break_holder] -->                width: 100%;<!-- [et_pb_line_break_holder] -->                transform: translateX(100%);<!-- [et_pb_line_break_holder] -->                transition: transform 0.3s ease-in;<!-- [et_pb_line_break_holder] -->                opacity: 0.9;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            .navLink li {<!-- [et_pb_line_break_holder] -->                opacity: 1;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            .lines {<!-- [et_pb_line_break_holder] -->                display: block;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            .nav-active {<!-- [et_pb_line_break_holder] -->                transform: translateX(0%);<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            @keyframes navLinkFade {<!-- [et_pb_line_break_holder] -->                from {<!-- [et_pb_line_break_holder] -->                    opacity: 0;<!-- [et_pb_line_break_holder] -->                    transform: translateX(50px);<!-- [et_pb_line_break_holder] -->                }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                to {<!-- [et_pb_line_break_holder] -->                    opacity: 1;<!-- [et_pb_line_break_holder] -->                    transform: translateX(0px);<!-- [et_pb_line_break_holder] -->                }<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            .toggle .l1 {<!-- [et_pb_line_break_holder] -->                transform: rotate(-45deg) translate(-5px, 6px);<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            .toggle .l2 {<!-- [et_pb_line_break_holder] -->                opacity: 0;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            .toggle .l3 {<!-- [et_pb_line_break_holder] -->                transform: rotate(45deg) translate(-5px, -6px);<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        @media (max-width: 786px) {<!-- [et_pb_line_break_holder] -->            .container {<!-- [et_pb_line_break_holder] -->                columns: 2;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            h1 {<!-- [et_pb_line_break_holder] -->                font-size: 1.3em;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            h2 {<!-- [et_pb_line_break_holder] -->                font-size: 1em;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            .modal-nav {<!-- [et_pb_line_break_holder] -->                font-size: 20px;<!-- [et_pb_line_break_holder] -->                padding: 15px;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            .modal-caption {<!-- [et_pb_line_break_holder] -->                font-size: 16px;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            .filter-badge {<!-- [et_pb_line_break_holder] -->                padding: 6px 12px;<!-- [et_pb_line_break_holder] -->                font-size: 12px;<!-- [et_pb_line_break_holder] -->                margin: 3px;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        @media (max-width: 480px) {<!-- [et_pb_line_break_holder] -->            .container {<!-- [et_pb_line_break_holder] -->                columns: 1;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            .modal-nav {<!-- [et_pb_line_break_holder] -->                font-size: 18px;<!-- [et_pb_line_break_holder] -->                padding: 10px;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            .modal-caption {<!-- [et_pb_line_break_holder] -->                font-size: 14px;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            .filter-badge {<!-- [et_pb_line_break_holder] -->                padding: 5px 10px;<!-- [et_pb_line_break_holder] -->                font-size: 11px;<!-- [et_pb_line_break_holder] -->                margin: 2px;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->    <\/style>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <\/p>\n<div><!-- [et_pb_line_break_holder] -->        <!-- Loading Animation --><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"loading\" id=\"loading\"><!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"spinner\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        <!-- Filter Container --><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"filter-container\" id=\"filterContainer\"><!-- [et_pb_line_break_holder] -->            <!-- Filter badges will be generated here --><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                 <!-- Modal will be created dynamically and appended to body --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"container\" id=\"galleryContainer\"><!-- [et_pb_line_break_holder] -->            <!-- Gallery items will be generated here --><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <script><!-- [et_pb_line_break_holder] -->        \/\/ Gallery data array with categories<!-- [et_pb_line_break_holder] -->        const galleryData = [<!-- [et_pb_line_break_holder] -->            {<!-- [et_pb_line_break_holder] -->                id: 1,<!-- [et_pb_line_break_holder] -->                src: \"https:\/\/construction-gs.com\/wp-content\/uploads\/2025\/07\/REFINISHING5-1.jpg\",<!-- [et_pb_line_break_holder] -->                alt: \"image\",<!-- [et_pb_line_break_holder] -->                caption: \"Kitchen\",<!-- [et_pb_line_break_holder] -->                title: \"Kitchen\",<!-- [et_pb_line_break_holder] -->                category: \"Refinishing\",<!-- [et_pb_line_break_holder] -->                city: \"Eagan, MN\"<!-- [et_pb_line_break_holder] -->            },<!-- [et_pb_line_break_holder] -->          \t{<!-- [et_pb_line_break_holder] -->                id: 2,<!-- [et_pb_line_break_holder] -->                src: \"https:\/\/construction-gs.com\/wp-content\/uploads\/2025\/07\/REFINISHING6-1.jpg\",<!-- [et_pb_line_break_holder] -->                alt: \"image\",<!-- [et_pb_line_break_holder] -->                caption: \"Bathroom\",<!-- [et_pb_line_break_holder] -->                title: \"Bathroom\",<!-- [et_pb_line_break_holder] -->                category: \"Refinishing\",<!-- [et_pb_line_break_holder] -->                city: \"Eagan, MN\"<!-- [et_pb_line_break_holder] -->            },<!-- [et_pb_line_break_holder] -->          \t{<!-- [et_pb_line_break_holder] -->                id: 3,<!-- [et_pb_line_break_holder] -->                src: \"https:\/\/construction-gs.com\/wp-content\/uploads\/2025\/07\/PAINT2-1.jpg\",<!-- [et_pb_line_break_holder] -->                alt: \"image\",<!-- [et_pb_line_break_holder] -->                caption: \"Painting wall\",<!-- [et_pb_line_break_holder] -->                title: \"Painting wall\",<!-- [et_pb_line_break_holder] -->                category: \"Interior Painting\",<!-- [et_pb_line_break_holder] -->                city: \"Eagan, MN\"<!-- [et_pb_line_break_holder] -->            },<!-- [et_pb_line_break_holder] -->          \t{<!-- [et_pb_line_break_holder] -->                id: 4,<!-- [et_pb_line_break_holder] -->                src: \"https:\/\/construction-gs.com\/wp-content\/uploads\/2025\/07\/PAINT4-1.jpg\",<!-- [et_pb_line_break_holder] -->                alt: \"image\",<!-- [et_pb_line_break_holder] -->                caption: \"Painting wall\",<!-- [et_pb_line_break_holder] -->                title: \"Painting wall\",<!-- [et_pb_line_break_holder] -->                category: \"Interior Painting\",<!-- [et_pb_line_break_holder] -->                city: \"Eagan, MN\"<!-- [et_pb_line_break_holder] -->            },<!-- [et_pb_line_break_holder] -->          \t{<!-- [et_pb_line_break_holder] -->                id: 5,<!-- [et_pb_line_break_holder] -->                src: \"https:\/\/construction-gs.com\/wp-content\/uploads\/2025\/07\/PAINT5-2.jpg\",<!-- [et_pb_line_break_holder] -->                alt: \"image\",<!-- [et_pb_line_break_holder] -->                caption: \"Wall\",<!-- [et_pb_line_break_holder] -->                title: \"Wall\",<!-- [et_pb_line_break_holder] -->                category: \"Interior Painting\",<!-- [et_pb_line_break_holder] -->                city: \"Eagan, MN\"<!-- [et_pb_line_break_holder] -->            },<!-- [et_pb_line_break_holder] -->          \t{<!-- [et_pb_line_break_holder] -->                id: 6,<!-- [et_pb_line_break_holder] -->                src: \"https:\/\/construction-gs.com\/wp-content\/uploads\/2025\/07\/PAINT_CABINET5.jpg\",<!-- [et_pb_line_break_holder] -->                alt: \"image\",<!-- [et_pb_line_break_holder] -->                caption: \"Kitchen\",<!-- [et_pb_line_break_holder] -->                title: \"Kitchen\",<!-- [et_pb_line_break_holder] -->                category: \"Refinishing\",<!-- [et_pb_line_break_holder] -->                city: \"Eagan, MN\"<!-- [et_pb_line_break_holder] -->            },<!-- [et_pb_line_break_holder] -->          \t{<!-- [et_pb_line_break_holder] -->                id: 7,<!-- [et_pb_line_break_holder] -->                src: \"https:\/\/construction-gs.com\/wp-content\/uploads\/2025\/07\/PAINT6-1.jpg\",<!-- [et_pb_line_break_holder] -->                alt: \"image\",<!-- [et_pb_line_break_holder] -->                caption: \"Bathroom\",<!-- [et_pb_line_break_holder] -->                title: \"Bathroom\",<!-- [et_pb_line_break_holder] -->                category: \"Refinishing\",<!-- [et_pb_line_break_holder] -->                city: \"Eagan, MN\"<!-- [et_pb_line_break_holder] -->            },<!-- [et_pb_line_break_holder] -->          \t{<!-- [et_pb_line_break_holder] -->                id: 8,<!-- [et_pb_line_break_holder] -->                src: \"https:\/\/construction-gs.com\/wp-content\/uploads\/2025\/07\/PAINT9-2-scaled.jpg\",<!-- [et_pb_line_break_holder] -->                alt: \"image\",<!-- [et_pb_line_break_holder] -->                caption: \"Wall\",<!-- [et_pb_line_break_holder] -->                title: \"Wall\",<!-- [et_pb_line_break_holder] -->                category: \"Interior Painting\",<!-- [et_pb_line_break_holder] -->                city: \"Eagan, MN\"<!-- [et_pb_line_break_holder] -->            },<!-- [et_pb_line_break_holder] -->          \t{<!-- [et_pb_line_break_holder] -->                id: 9,<!-- [et_pb_line_break_holder] -->                src: \"https:\/\/construction-gs.com\/wp-content\/uploads\/2025\/07\/CEILING1-1.jpg\",<!-- [et_pb_line_break_holder] -->                alt: \"image\",<!-- [et_pb_line_break_holder] -->                caption: \"Repair Ceiling\",<!-- [et_pb_line_break_holder] -->                title: \"Repair Ceiling\",<!-- [et_pb_line_break_holder] -->                category: \"Repair\",<!-- [et_pb_line_break_holder] -->                city: \"Eagan, MN\"<!-- [et_pb_line_break_holder] -->            },<!-- [et_pb_line_break_holder] -->          \t{<!-- [et_pb_line_break_holder] -->                id: 10,<!-- [et_pb_line_break_holder] -->                src: \"https:\/\/construction-gs.com\/wp-content\/uploads\/2025\/07\/CEILING5-scaled.jpg\",<!-- [et_pb_line_break_holder] -->                alt: \"image\",<!-- [et_pb_line_break_holder] -->                caption: \"Repair Ceiling\",<!-- [et_pb_line_break_holder] -->                title: \"Repair Ceiling\",<!-- [et_pb_line_break_holder] -->                category: \"Repair\",<!-- [et_pb_line_break_holder] -->                city: \"Eagan, MN\"<!-- [et_pb_line_break_holder] -->            },<!-- [et_pb_line_break_holder] -->          \t{<!-- [et_pb_line_break_holder] -->                id: 11,<!-- [et_pb_line_break_holder] -->                src: \"https:\/\/construction-gs.com\/wp-content\/uploads\/2025\/07\/DOOR2-1.jpg\",<!-- [et_pb_line_break_holder] -->                alt: \"image\",<!-- [et_pb_line_break_holder] -->                caption: \"Installation Door\",<!-- [et_pb_line_break_holder] -->                title: \"Installation Door\",<!-- [et_pb_line_break_holder] -->                category: \"Installation\",<!-- [et_pb_line_break_holder] -->                city: \"Eagan, MN\"<!-- [et_pb_line_break_holder] -->            },<!-- [et_pb_line_break_holder] -->          \t{<!-- [et_pb_line_break_holder] -->                id: 12,<!-- [et_pb_line_break_holder] -->                src: \"https:\/\/construction-gs.com\/wp-content\/uploads\/2025\/07\/DOOR3-scaled.jpg\",<!-- [et_pb_line_break_holder] -->                alt: \"image\",<!-- [et_pb_line_break_holder] -->                caption: \"Installation Door\",<!-- [et_pb_line_break_holder] -->                title: \"Installation Door\",<!-- [et_pb_line_break_holder] -->                category: \"Installation\",<!-- [et_pb_line_break_holder] -->                city: \"Eagan, MN\"<!-- [et_pb_line_break_holder] -->            },<!-- [et_pb_line_break_holder] -->          \t{<!-- [et_pb_line_break_holder] -->                id: 13,<!-- [et_pb_line_break_holder] -->                src: \"https:\/\/construction-gs.com\/wp-content\/uploads\/2025\/07\/REPAIR14-1-scaled.jpg\",<!-- [et_pb_line_break_holder] -->                alt: \"image\",<!-- [et_pb_line_break_holder] -->                caption: \"Repair Ceiling\",<!-- [et_pb_line_break_holder] -->                title: \"Repair Ceiling\",<!-- [et_pb_line_break_holder] -->                category: \"Repair\",<!-- [et_pb_line_break_holder] -->                city: \"Eagan, MN\"<!-- [et_pb_line_break_holder] -->            },<!-- [et_pb_line_break_holder] -->          \t{<!-- [et_pb_line_break_holder] -->                id: 14,<!-- [et_pb_line_break_holder] -->                src: \"https:\/\/construction-gs.com\/wp-content\/uploads\/2025\/08\/IMG-20250820-WA0020.jpg\",<!-- [et_pb_line_break_holder] -->                alt: \"image\",<!-- [et_pb_line_break_holder] -->                caption: \"Interior Painting\",<!-- [et_pb_line_break_holder] -->                title: \"Interior Painting\",<!-- [et_pb_line_break_holder] -->                category: \"Interior Painting\",<!-- [et_pb_line_break_holder] -->                city: \"Eagan, MN\"<!-- [et_pb_line_break_holder] -->            },<!-- [et_pb_line_break_holder] -->          {<!-- [et_pb_line_break_holder] -->                id: 15,<!-- [et_pb_line_break_holder] -->                src: \"https:\/\/construction-gs.com\/wp-content\/uploads\/2025\/08\/IMG-20250820-WA0021-2.jpg\",<!-- [et_pb_line_break_holder] -->                alt: \"image\",<!-- [et_pb_line_break_holder] -->                caption: \"Refinishing\",<!-- [et_pb_line_break_holder] -->                title: \"Refinishing\",<!-- [et_pb_line_break_holder] -->                category: \"Refinishing\",<!-- [et_pb_line_break_holder] -->                city: \"Eagan, MN\"<!-- [et_pb_line_break_holder] -->            },<!-- [et_pb_line_break_holder] -->          {<!-- [et_pb_line_break_holder] -->                id: 16,<!-- [et_pb_line_break_holder] -->                src: \"https:\/\/construction-gs.com\/wp-content\/uploads\/2025\/08\/IMG-20250820-WA0023.jpg\",<!-- [et_pb_line_break_holder] -->                alt: \"image\",<!-- [et_pb_line_break_holder] -->                caption: \"Refinishing\",<!-- [et_pb_line_break_holder] -->                title: \"Refinishing\",<!-- [et_pb_line_break_holder] -->                category: \"Refinishing\",<!-- [et_pb_line_break_holder] -->                city: \"Eagan, MN\"<!-- [et_pb_line_break_holder] -->            },<!-- [et_pb_line_break_holder] -->          {<!-- [et_pb_line_break_holder] -->                id: 17,<!-- [et_pb_line_break_holder] -->                src: \"https:\/\/construction-gs.com\/wp-content\/uploads\/2025\/08\/IMG-20250820-WA0025.jpg\",<!-- [et_pb_line_break_holder] -->                alt: \"image\",<!-- [et_pb_line_break_holder] -->                caption: \"Interior Painting\",<!-- [et_pb_line_break_holder] -->                title: \"Interior Painting\",<!-- [et_pb_line_break_holder] -->                category: \"Interior Painting\",<!-- [et_pb_line_break_holder] -->                city: \"Eagan, MN\"<!-- [et_pb_line_break_holder] -->            },<!-- [et_pb_line_break_holder] -->          \t{<!-- [et_pb_line_break_holder] -->                id: 18,<!-- [et_pb_line_break_holder] -->                src: \"https:\/\/construction-gs.com\/wp-content\/uploads\/2025\/08\/IMG-20250820-WA0051.jpg\",<!-- [et_pb_line_break_holder] -->                alt: \"image\",<!-- [et_pb_line_break_holder] -->                caption: \"Refinishing\",<!-- [et_pb_line_break_holder] -->                title: \"Refinishing\",<!-- [et_pb_line_break_holder] -->                category: \"Refinishing\",<!-- [et_pb_line_break_holder] -->                city: \"Eagan, MN\"<!-- [et_pb_line_break_holder] -->            },<!-- [et_pb_line_break_holder] -->          \t{<!-- [et_pb_line_break_holder] -->                id: 19,<!-- [et_pb_line_break_holder] -->                src: \"https:\/\/construction-gs.com\/wp-content\/uploads\/2025\/08\/IMG-20250820-WA0053.jpg\",<!-- [et_pb_line_break_holder] -->                alt: \"image\",<!-- [et_pb_line_break_holder] -->                caption: \"Interior Painting\",<!-- [et_pb_line_break_holder] -->                title: \"Interior Painting\",<!-- [et_pb_line_break_holder] -->                category: \"Interior Painting\",<!-- [et_pb_line_break_holder] -->                city: \"Eagan, MN\"<!-- [et_pb_line_break_holder] -->            },<!-- [et_pb_line_break_holder] -->            {<!-- [et_pb_line_break_holder] -->                  id: 20,<!-- [et_pb_line_break_holder] -->                  src: \"https:\/\/construction-gs.com\/wp-content\/uploads\/2025\/08\/IMG-20250820-WA0056.jpg\",<!-- [et_pb_line_break_holder] -->                  alt: \"image\",<!-- [et_pb_line_break_holder] -->                  caption: \"Repair Ceiling\",<!-- [et_pb_line_break_holder] -->                  title: \"Repair Ceiling\",<!-- [et_pb_line_break_holder] -->                  category: \"Repair\",<!-- [et_pb_line_break_holder] -->                  city: \"Eagan, MN\"<!-- [et_pb_line_break_holder] -->              },<!-- [et_pb_line_break_holder] -->            {<!-- [et_pb_line_break_holder] -->                  id: 21,<!-- [et_pb_line_break_holder] -->                  src: \"https:\/\/construction-gs.com\/wp-content\/uploads\/2025\/08\/IMG-20250820-WA0057.jpg\",<!-- [et_pb_line_break_holder] -->                  alt: \"image\",<!-- [et_pb_line_break_holder] -->                  caption: \"Repair\",<!-- [et_pb_line_break_holder] -->                  title: \"Repair\",<!-- [et_pb_line_break_holder] -->                  category: \"Repair\",<!-- [et_pb_line_break_holder] -->                  city: \"Eagan, MN\"<!-- [et_pb_line_break_holder] -->              },<!-- [et_pb_line_break_holder] -->          \t\t{<!-- [et_pb_line_break_holder] -->                  id: 22,<!-- [et_pb_line_break_holder] -->                  src: \"https:\/\/construction-gs.com\/wp-content\/uploads\/2025\/08\/IMG-20250820-WA0059.jpg\",<!-- [et_pb_line_break_holder] -->                  alt: \"image\",<!-- [et_pb_line_break_holder] -->                  caption: \"Refinishing\",<!-- [et_pb_line_break_holder] -->                  title: \"Refinishing\",<!-- [et_pb_line_break_holder] -->                  category: \"Refinishing\",<!-- [et_pb_line_break_holder] -->                  city: \"Eagan, MN\"<!-- [et_pb_line_break_holder] -->              },<!-- [et_pb_line_break_holder] -->          \t\t{<!-- [et_pb_line_break_holder] -->                  id: 23,<!-- [et_pb_line_break_holder] -->                  src: \"https:\/\/construction-gs.com\/wp-content\/uploads\/2025\/08\/IMG-20250820-WA0060.jpg\",<!-- [et_pb_line_break_holder] -->                  alt: \"image\",<!-- [et_pb_line_break_holder] -->                  caption: \"Refinishing\",<!-- [et_pb_line_break_holder] -->                  title: \"Refinishing\",<!-- [et_pb_line_break_holder] -->                  category: \"Refinishing\",<!-- [et_pb_line_break_holder] -->                  city: \"Eagan, MN\"<!-- [et_pb_line_break_holder] -->              },<!-- [et_pb_line_break_holder] -->          \t\t{<!-- [et_pb_line_break_holder] -->                  id: 24,<!-- [et_pb_line_break_holder] -->                  src: \"https:\/\/construction-gs.com\/wp-content\/uploads\/2025\/08\/IMG-20250820-WA0015.jpg\",<!-- [et_pb_line_break_holder] -->                  alt: \"image\",<!-- [et_pb_line_break_holder] -->                  caption: \"Refinishing\",<!-- [et_pb_line_break_holder] -->                  title: \"Refinishing\",<!-- [et_pb_line_break_holder] -->                  category: \"Refinishing\",<!-- [et_pb_line_break_holder] -->                  city: \"Eagan, MN\"<!-- [et_pb_line_break_holder] -->              },<!-- [et_pb_line_break_holder] -->          \t\t{<!-- [et_pb_line_break_holder] -->                  id: 25,<!-- [et_pb_line_break_holder] -->                  src: \"https:\/\/construction-gs.com\/wp-content\/uploads\/2025\/08\/IMG-20250820-WA0017.jpg\",<!-- [et_pb_line_break_holder] -->                  alt: \"image\",<!-- [et_pb_line_break_holder] -->                  caption: \"Refinishing\",<!-- [et_pb_line_break_holder] -->                  title: \"Refinishing\",<!-- [et_pb_line_break_holder] -->                  category: \"Refinishing\",<!-- [et_pb_line_break_holder] -->                  city: \"Eagan, MN\"<!-- [et_pb_line_break_holder] -->              },<!-- [et_pb_line_break_holder] -->          \t\t{<!-- [et_pb_line_break_holder] -->                  id: 26,<!-- [et_pb_line_break_holder] -->                  src: \"https:\/\/construction-gs.com\/wp-content\/uploads\/2025\/08\/IMG-20250820-WA0019.jpg\",<!-- [et_pb_line_break_holder] -->                  alt: \"image\",<!-- [et_pb_line_break_holder] -->                  caption: \"Installation and painting\",<!-- [et_pb_line_break_holder] -->                  title: \"Door installation and painting\",<!-- [et_pb_line_break_holder] -->                  category: \"Installation\",<!-- [et_pb_line_break_holder] -->                  city: \"Eagan, MN\"<!-- [et_pb_line_break_holder] -->              },<!-- [et_pb_line_break_holder] -->          <!-- [et_pb_line_break_holder] -->          <!-- [et_pb_line_break_holder] -->        ];<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Gallery class to manage the gallery functionality<!-- [et_pb_line_break_holder] -->        class Gallery {<!-- [et_pb_line_break_holder] -->            constructor(containerId, data) {<!-- [et_pb_line_break_holder] -->                this.container = document.getElementById(containerId);<!-- [et_pb_line_break_holder] -->                this.filterContainer = document.getElementById('filterContainer');<!-- [et_pb_line_break_holder] -->                this.loading = document.getElementById('loading');<!-- [et_pb_line_break_holder] -->                this.data = data;<!-- [et_pb_line_break_holder] -->                this.filteredData = [...data];<!-- [et_pb_line_break_holder] -->                this.currentImageIndex = 0;<!-- [et_pb_line_break_holder] -->                this.currentFilter = 'all';<!-- [et_pb_line_break_holder] -->                this.modal = null;<!-- [et_pb_line_break_holder] -->                this.modalImage = null;<!-- [et_pb_line_break_holder] -->                this.modalCaption = null;<!-- [et_pb_line_break_holder] -->                this.closeBtn = null;<!-- [et_pb_line_break_holder] -->                this.prevBtn = null;<!-- [et_pb_line_break_holder] -->                this.nextBtn = null;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                this.init();<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Initialize the gallery<!-- [et_pb_line_break_holder] -->            async init() {<!-- [et_pb_line_break_holder] -->                await this.hideLoading();<!-- [et_pb_line_break_holder] -->                this.createModal();<!-- [et_pb_line_break_holder] -->                this.renderFilters();<!-- [et_pb_line_break_holder] -->                this.renderGallery();<!-- [et_pb_line_break_holder] -->                this.setupEventListeners();<!-- [et_pb_line_break_holder] -->                this.setupLazyLoading();<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Create modal and append to body<!-- [et_pb_line_break_holder] -->            createModal() {<!-- [et_pb_line_break_holder] -->                const modalHTML = `<!-- [et_pb_line_break_holder] -->                    <\/p>\n<div id=\"imageModal\" class=\"modal\"><!-- [et_pb_line_break_holder] -->                        <span class=\"close\">\u00d7<\/span><!-- [et_pb_line_break_holder] -->                        <\/p>\n<div class=\"modal-content\"><!-- [et_pb_line_break_holder] -->                            <\/p>\n<div class=\"modal-image-container\"><!-- [et_pb_line_break_holder] -->                                <img decoding=\"async\" class=\"modal-image\" id=\"modalImage\" src=\"\" alt=\"\"><!-- [et_pb_line_break_holder] -->                                <\/p>\n<div class=\"modal-caption\" id=\"modalCaption\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->                                <\/p>\n<div class=\"modal-city-text\" id=\"modalCityText\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->                            <\/div>\n<p><!-- [et_pb_line_break_holder] -->                        <\/div>\n<p><!-- [et_pb_line_break_holder] -->                        <\/p>\n<div class=\"modal-nav modal-prev\" id=\"modalPrev\">\u276e<\/div>\n<p><!-- [et_pb_line_break_holder] -->                        <\/p>\n<div class=\"modal-nav modal-next\" id=\"modalNext\">\u276f<\/div>\n<p><!-- [et_pb_line_break_holder] -->                    <\/div>\n<p><!-- [et_pb_line_break_holder] -->                `;<!-- [et_pb_line_break_holder] -->                <!-- [et_pb_line_break_holder] -->                \/\/ Append modal to body<!-- [et_pb_line_break_holder] -->                document.body.insertAdjacentHTML('beforeend', modalHTML);<!-- [et_pb_line_break_holder] -->                <!-- [et_pb_line_break_holder] -->                \/\/ Get modal elements<!-- [et_pb_line_break_holder] -->                this.modal = document.getElementById('imageModal');<!-- [et_pb_line_break_holder] -->                this.modalImage = document.getElementById('modalImage');<!-- [et_pb_line_break_holder] -->                this.modalCaption = document.getElementById('modalCaption');<!-- [et_pb_line_break_holder] -->                this.modalCityText = document.getElementById('modalCityText');<!-- [et_pb_line_break_holder] -->                this.closeBtn = document.querySelector('.close');<!-- [et_pb_line_break_holder] -->                this.prevBtn = document.getElementById('modalPrev');<!-- [et_pb_line_break_holder] -->                this.nextBtn = document.getElementById('modalNext');<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Hide loading animation<!-- [et_pb_line_break_holder] -->            async hideLoading() {<!-- [et_pb_line_break_holder] -->                await new Promise(resolve => setTimeout(resolve, 1000));<!-- [et_pb_line_break_holder] -->                this.loading.classList.add('hidden');<!-- [et_pb_line_break_holder] -->                setTimeout(() => {<!-- [et_pb_line_break_holder] -->                    this.loading.style.display = 'none';<!-- [et_pb_line_break_holder] -->                }, 500);<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Get unique categories<!-- [et_pb_line_break_holder] -->            getCategories() {<!-- [et_pb_line_break_holder] -->                const categories = [...new Set(this.data.map(item => item.category))];<!-- [et_pb_line_break_holder] -->                return categories;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Render filter badges<!-- [et_pb_line_break_holder] -->            renderFilters() {<!-- [et_pb_line_break_holder] -->                const categories = this.getCategories();<!-- [et_pb_line_break_holder] -->                const filterHTML = `<!-- [et_pb_line_break_holder] -->                    <\/p>\n<div class=\"filter-badge all active\" data-filter=\"all\">All<\/div>\n<p><!-- [et_pb_line_break_holder] -->                    ${categories.map(category => `<!-- [et_pb_line_break_holder] -->                        <\/p>\n<div class=\"filter-badge\" data-filter=\"${category}\">${this.capitalizeFirst(category)}<\/div>\n<p><!-- [et_pb_line_break_holder] -->                    `).join('')}<!-- [et_pb_line_break_holder] -->                `;<!-- [et_pb_line_break_holder] -->                this.filterContainer.innerHTML = filterHTML;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Capitalize first letter<!-- [et_pb_line_break_holder] -->            capitalizeFirst(string) {<!-- [et_pb_line_break_holder] -->                return string.charAt(0).toUpperCase() + string.slice(1);<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Filter gallery by category with animation<!-- [et_pb_line_break_holder] -->            async filterByCategory(category) {<!-- [et_pb_line_break_holder] -->                this.currentFilter = category;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                \/\/ Animate out current items<!-- [et_pb_line_break_holder] -->                const currentItems = this.container.querySelectorAll('.box');<!-- [et_pb_line_break_holder] -->                currentItems.forEach((item, index) => {<!-- [et_pb_line_break_holder] -->                    setTimeout(() => {<!-- [et_pb_line_break_holder] -->                        item.style.opacity = '0';<!-- [et_pb_line_break_holder] -->                        item.style.transform = 'scale(0.8) translateY(20px)';<!-- [et_pb_line_break_holder] -->                    }, index * 50);<!-- [et_pb_line_break_holder] -->                });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                \/\/ Wait for fade out animation<!-- [et_pb_line_break_holder] -->                \/\/ await new Promise(resolve => setTimeout(resolve, currentItems.length * 50 + 300));<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                \/\/ Update filtered data<!-- [et_pb_line_break_holder] -->                this.filteredData = category === 'all'<!-- [et_pb_line_break_holder] -->                    ? [...this.data]<!-- [et_pb_line_break_holder] -->                    : this.data.filter(item => item.category === category);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                this.renderGallery();<!-- [et_pb_line_break_holder] -->                this.setupLazyLoading();<!-- [et_pb_line_break_holder] -->                this.updateFilterBadges();<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Update filter badge states<!-- [et_pb_line_break_holder] -->            updateFilterBadges() {<!-- [et_pb_line_break_holder] -->                const badges = this.filterContainer.querySelectorAll('.filter-badge');<!-- [et_pb_line_break_holder] -->                badges.forEach(badge => {<!-- [et_pb_line_break_holder] -->                    badge.classList.remove('active');<!-- [et_pb_line_break_holder] -->                    if (badge.getAttribute('data-filter') === this.currentFilter) {<!-- [et_pb_line_break_holder] -->                        badge.classList.add('active');<!-- [et_pb_line_break_holder] -->                    }<!-- [et_pb_line_break_holder] -->                });<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Render gallery items with animation<!-- [et_pb_line_break_holder] -->            renderGallery() {<!-- [et_pb_line_break_holder] -->                \/\/ Shuffle the filtered data to randomize order<!-- [et_pb_line_break_holder] -->                const shuffledData = this.shuffleArray([...this.filteredData]);<!-- [et_pb_line_break_holder] -->                <!-- [et_pb_line_break_holder] -->                    this.container.innerHTML = shuffledData.map((item, index) => `<!-- [et_pb_line_break_holder] -->                        <\/p>\n<div class=\"box\" data-id=\"${item.id}\" data-index=\"${index}\" data-image=\"${item.src}\" data-caption=\"${item.caption}\" style=\"animation-delay: ${index * 0.1}s;\"><!-- [et_pb_line_break_holder] -->                            <img decoding=\"async\" src=\"${item.src}\" alt=\"${item.alt}\" loading=\"lazy\"><!-- [et_pb_line_break_holder] -->                            <\/p>\n<div class=\"city-text\">${item.city}<\/div>\n<p><!-- [et_pb_line_break_holder] -->                            <\/p>\n<div class=\"caption\">${item.title}<\/div>\n<p><!-- [et_pb_line_break_holder] -->                        <\/div>\n<p><!-- [et_pb_line_break_holder] -->                    `).join('');<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Shuffle array function (Fisher-Yates algorithm)<!-- [et_pb_line_break_holder] -->            shuffleArray(array) {<!-- [et_pb_line_break_holder] -->                const shuffled = [...array];<!-- [et_pb_line_break_holder] -->                for (let i = shuffled.length - 1; i > 0; i--) {<!-- [et_pb_line_break_holder] -->                    const j = Math.floor(Math.random() * (i + 1));<!-- [et_pb_line_break_holder] -->                    [shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]];<!-- [et_pb_line_break_holder] -->                }<!-- [et_pb_line_break_holder] -->                return shuffled;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Setup event listeners<!-- [et_pb_line_break_holder] -->            setupEventListeners() {<!-- [et_pb_line_break_holder] -->                \/\/ Filter clicks<!-- [et_pb_line_break_holder] -->                this.filterContainer.addEventListener('click', async (e) => {<!-- [et_pb_line_break_holder] -->                    const badge = e.target.closest('.filter-badge');<!-- [et_pb_line_break_holder] -->                    if (badge) {<!-- [et_pb_line_break_holder] -->                        const filter = badge.getAttribute('data-filter');<!-- [et_pb_line_break_holder] -->                        await this.filterByCategory(filter);<!-- [et_pb_line_break_holder] -->                    }<!-- [et_pb_line_break_holder] -->                });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                    \/\/ Gallery item clicks<!-- [et_pb_line_break_holder] -->                    this.container.addEventListener('click', (e) => {<!-- [et_pb_line_break_holder] -->                        const box = e.target.closest('.box');<!-- [et_pb_line_break_holder] -->                        if (box) {<!-- [et_pb_line_break_holder] -->                            e.preventDefault();<!-- [et_pb_line_break_holder] -->                            const id = parseInt(box.getAttribute('data-id'));<!-- [et_pb_line_break_holder] -->                            \/\/ Buscar el \u00edndice real en filteredData<!-- [et_pb_line_break_holder] -->                            const index = this.filteredData.findIndex(item => item.id === id);<!-- [et_pb_line_break_holder] -->                            if (index !== -1) {<!-- [et_pb_line_break_holder] -->                                this.openModal(index);<!-- [et_pb_line_break_holder] -->                            }<!-- [et_pb_line_break_holder] -->                        }<!-- [et_pb_line_break_holder] -->                    });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                \/\/ Modal controls<!-- [et_pb_line_break_holder] -->                this.closeBtn.addEventListener('click', () => this.closeModal());<!-- [et_pb_line_break_holder] -->                this.prevBtn.addEventListener('click', () => this.prevImage());<!-- [et_pb_line_break_holder] -->                this.nextBtn.addEventListener('click', () => this.nextImage());<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                \/\/ Close modal when clicking outside<!-- [et_pb_line_break_holder] -->                this.modal.addEventListener('click', (e) => {<!-- [et_pb_line_break_holder] -->                    if (e.target === this.modal) {<!-- [et_pb_line_break_holder] -->                        this.closeModal();<!-- [et_pb_line_break_holder] -->                    }<!-- [et_pb_line_break_holder] -->                });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                \/\/ Keyboard navigation<!-- [et_pb_line_break_holder] -->                document.addEventListener('keydown', (e) => {<!-- [et_pb_line_break_holder] -->                    if (this.modal.style.display === 'block') {<!-- [et_pb_line_break_holder] -->                        switch (e.key) {<!-- [et_pb_line_break_holder] -->                            case 'Escape':<!-- [et_pb_line_break_holder] -->                                this.closeModal();<!-- [et_pb_line_break_holder] -->                                break;<!-- [et_pb_line_break_holder] -->                            case 'ArrowLeft':<!-- [et_pb_line_break_holder] -->                                this.prevImage();<!-- [et_pb_line_break_holder] -->                                break;<!-- [et_pb_line_break_holder] -->                            case 'ArrowRight':<!-- [et_pb_line_break_holder] -->                                this.nextImage();<!-- [et_pb_line_break_holder] -->                                break;<!-- [et_pb_line_break_holder] -->                        }<!-- [et_pb_line_break_holder] -->                    }<!-- [et_pb_line_break_holder] -->                });<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Open modal with animation<!-- [et_pb_line_break_holder] -->            openModal(index) {<!-- [et_pb_line_break_holder] -->                this.currentImageIndex = index;<!-- [et_pb_line_break_holder] -->                const item = this.filteredData[index];<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                this.modalImage.src = item.src;<!-- [et_pb_line_break_holder] -->                this.modalCaption.textContent = item.caption;<!-- [et_pb_line_break_holder] -->                this.modalCityText.textContent = item.city;<!-- [et_pb_line_break_holder] -->                this.modal.style.display = 'block';<!-- [et_pb_line_break_holder] -->                document.body.style.overflow = 'hidden';<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                \/\/ Trigger animations<!-- [et_pb_line_break_holder] -->                setTimeout(() => {<!-- [et_pb_line_break_holder] -->                    this.modal.classList.add('show');<!-- [et_pb_line_break_holder] -->                }, 10);<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Close modal with animation<!-- [et_pb_line_break_holder] -->            closeModal() {<!-- [et_pb_line_break_holder] -->                this.modal.classList.remove('show');<!-- [et_pb_line_break_holder] -->                setTimeout(() => {<!-- [et_pb_line_break_holder] -->                    this.modal.style.display = 'none';<!-- [et_pb_line_break_holder] -->                    document.body.style.overflow = 'auto';<!-- [et_pb_line_break_holder] -->                }, 400);<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Navigate to previous image<!-- [et_pb_line_break_holder] -->            prevImage() {<!-- [et_pb_line_break_holder] -->                this.currentImageIndex = (this.currentImageIndex - 1 + this.filteredData.length) % this.filteredData.length;<!-- [et_pb_line_break_holder] -->                this.openModal(this.currentImageIndex);<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Navigate to next image<!-- [et_pb_line_break_holder] -->            nextImage() {<!-- [et_pb_line_break_holder] -->                this.currentImageIndex = (this.currentImageIndex + 1) % this.filteredData.length;<!-- [et_pb_line_break_holder] -->                this.openModal(this.currentImageIndex);<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Setup lazy loading<!-- [et_pb_line_break_holder] -->            setupLazyLoading() {<!-- [et_pb_line_break_holder] -->                \/\/ Check if native lazy loading is supported<!-- [et_pb_line_break_holder] -->                if ('loading' in HTMLImageElement.prototype) {<!-- [et_pb_line_break_holder] -->                    console.log('Native lazy loading supported');<!-- [et_pb_line_break_holder] -->                } else {<!-- [et_pb_line_break_holder] -->                    console.log('Using fallback lazy loading');<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                    const images = this.container.querySelectorAll('img[loading=\"lazy\"]');<!-- [et_pb_line_break_holder] -->                    const imageObserver = new IntersectionObserver((entries, observer) => {<!-- [et_pb_line_break_holder] -->                        entries.forEach(entry => {<!-- [et_pb_line_break_holder] -->                            if (entry.isIntersecting) {<!-- [et_pb_line_break_holder] -->                                const img = entry.target;<!-- [et_pb_line_break_holder] -->                                img.src = img.dataset.src || img.src;<!-- [et_pb_line_break_holder] -->                                img.classList.add('loaded');<!-- [et_pb_line_break_holder] -->                                observer.unobserve(img);<!-- [et_pb_line_break_holder] -->                            }<!-- [et_pb_line_break_holder] -->                        });<!-- [et_pb_line_break_holder] -->                    });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                    images.forEach(img => {<!-- [et_pb_line_break_holder] -->                        img.dataset.src = img.src;<!-- [et_pb_line_break_holder] -->                        img.src = 'data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';<!-- [et_pb_line_break_holder] -->                        imageObserver.observe(img);<!-- [et_pb_line_break_holder] -->                    });<!-- [et_pb_line_break_holder] -->                }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                \/\/ Add fade-in effect for all images<!-- [et_pb_line_break_holder] -->                const allImages = this.container.querySelectorAll('img');<!-- [et_pb_line_break_holder] -->                allImages.forEach(img => {<!-- [et_pb_line_break_holder] -->                    img.addEventListener('load', function () {<!-- [et_pb_line_break_holder] -->                        this.classList.add('loaded');<!-- [et_pb_line_break_holder] -->                    });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                    if (img.complete) {<!-- [et_pb_line_break_holder] -->                        img.classList.add('loaded');<!-- [et_pb_line_break_holder] -->                    }<!-- [et_pb_line_break_holder] -->                });<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Add new image to gallery<!-- [et_pb_line_break_holder] -->            addImage(imageData) {<!-- [et_pb_line_break_holder] -->                this.data.push(imageData);<!-- [et_pb_line_break_holder] -->                this.filteredData = [...this.data];<!-- [et_pb_line_break_holder] -->                this.renderFilters();<!-- [et_pb_line_break_holder] -->                this.renderGallery();<!-- [et_pb_line_break_holder] -->                this.setupLazyLoading();<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Remove image from gallery<!-- [et_pb_line_break_holder] -->            removeImage(id) {<!-- [et_pb_line_break_holder] -->                this.data = this.data.filter(item => item.id !== id);<!-- [et_pb_line_break_holder] -->                this.filteredData = this.filteredData.filter(item => item.id !== id);<!-- [et_pb_line_break_holder] -->                this.renderFilters();<!-- [et_pb_line_break_holder] -->                this.renderGallery();<!-- [et_pb_line_break_holder] -->                this.setupLazyLoading();<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Update image data<!-- [et_pb_line_break_holder] -->            updateImage(id, newData) {<!-- [et_pb_line_break_holder] -->                const index = this.data.findIndex(item => item.id === id);<!-- [et_pb_line_break_holder] -->                if (index !== -1) {<!-- [et_pb_line_break_holder] -->                    this.data[index] = { ...this.data[index], ...newData };<!-- [et_pb_line_break_holder] -->                    this.filteredData = [...this.data];<!-- [et_pb_line_break_holder] -->                    this.renderFilters();<!-- [et_pb_line_break_holder] -->                    this.renderGallery();<!-- [et_pb_line_break_holder] -->                    this.setupLazyLoading();<!-- [et_pb_line_break_holder] -->                }<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Get gallery data<!-- [et_pb_line_break_holder] -->            getData() {<!-- [et_pb_line_break_holder] -->                return this.data;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Set new gallery data<!-- [et_pb_line_break_holder] -->            setData(newData) {<!-- [et_pb_line_break_holder] -->                this.data = newData;<!-- [et_pb_line_break_holder] -->                this.filteredData = [...this.data];<!-- [et_pb_line_break_holder] -->                this.renderFilters();<!-- [et_pb_line_break_holder] -->                this.renderGallery();<!-- [et_pb_line_break_holder] -->                this.setupLazyLoading();<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Get current filter<!-- [et_pb_line_break_holder] -->            getCurrentFilter() {<!-- [et_pb_line_break_holder] -->                return this.currentFilter;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Get filtered data<!-- [et_pb_line_break_holder] -->            getFilteredData() {<!-- [et_pb_line_break_holder] -->                return this.filteredData;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Initialize gallery when DOM is loaded<!-- [et_pb_line_break_holder] -->        document.addEventListener('DOMContentLoaded', function () {<!-- [et_pb_line_break_holder] -->            const gallery = new Gallery('galleryContainer', galleryData);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Make gallery available globally for external access<!-- [et_pb_line_break_holder] -->            window.gallery = gallery;<!-- [et_pb_line_break_holder] -->        });<!-- [et_pb_line_break_holder] -->    <\/script><!-- [et_pb_line_break_holder] -->[\/et_pb_code][et_pb_text _builder_version=&#8221;4.21.2&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;]        <div class=\"wpa-gallery-wrapper\"\r\n             data-wpa-id=\"wpa_6a1b841025848\"\r\n             style=\"--wpa-width:1400px; --wpa-gap:20px;\">\r\n                            <div class=\"filter-container\" id=\"filterContainer-wpa_6a1b841025848\"><\/div>\r\n                        <div class=\"container\" id=\"galleryContainer-wpa_6a1b841025848\"><\/div>\r\n        <\/div>\r\n        [\/et_pb_text][\/et_pb_column][\/et_pb_row][\/et_pb_section]<\/p>","protected":false},"excerpt":{"rendered":"<p>[et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;4.21.2&#8243; _module_preset=&#8221;default&#8221; width=&#8221;100%&#8221; custom_padding=&#8221;0px||51px|||&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_row _builder_version=&#8221;4.21.2&#8243; _module_preset=&#8221;default&#8221; width=&#8221;90%&#8221; min_height=&#8221;80vh&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.21.2&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_code disabled_on=&#8221;on|on|on&#8221; _builder_version=&#8221;4.21.2&#8243; _module_preset=&#8221;default&#8221; disabled=&#8221;on&#8221; global_colors_info=&#8221;{}&#8221;] [\/et_pb_code][et_pb_text _builder_version=&#8221;4.21.2&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_text][\/et_pb_column][\/et_pb_row][\/et_pb_section]<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_et_pb_use_builder":"on","_et_pb_old_content":"<!-- wp:divi\/placeholder \/-->","_et_gb_content_width":"","footnotes":""},"class_list":["post-3208","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Gallery - GS Construction<\/title>\n<meta name=\"description\" content=\"% %\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/construction-gs.com\/es\/gallery\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Gallery - GS Construction\" \/>\n<meta property=\"og:description\" content=\"% %\" \/>\n<meta property=\"og:url\" content=\"https:\/\/construction-gs.com\/es\/gallery\/\" \/>\n<meta property=\"og:site_name\" content=\"GS Construction\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/profile.php?id=61579813133271\" \/>\n<meta property=\"article:modified_time\" content=\"2025-09-03T01:48:02+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/construction-gs.com\/wp-content\/uploads\/2025\/07\/logo-gs-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"466\" \/>\n\t<meta property=\"og:image:height\" content=\"289\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/construction-gs.com\/gallery\/\",\"url\":\"https:\/\/construction-gs.com\/gallery\/\",\"name\":\"Gallery - GS Construction\",\"isPartOf\":{\"@id\":\"https:\/\/construction-gs.com\/#website\"},\"datePublished\":\"2025-08-04T23:37:05+00:00\",\"dateModified\":\"2025-09-03T01:48:02+00:00\",\"description\":\"% %\",\"breadcrumb\":{\"@id\":\"https:\/\/construction-gs.com\/gallery\/#breadcrumb\"},\"inLanguage\":\"es-CO\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/construction-gs.com\/gallery\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/construction-gs.com\/gallery\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/construction-gs.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Gallery\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/construction-gs.com\/#website\",\"url\":\"https:\/\/construction-gs.com\/\",\"name\":\"GS Construction\",\"description\":\"GS Construction: Home Repair, Remodeling &amp; Construction Services.\",\"publisher\":{\"@id\":\"https:\/\/construction-gs.com\/#organization\"},\"alternateName\":\"Construction GS\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/construction-gs.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es-CO\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/construction-gs.com\/#organization\",\"name\":\"GS Construction\",\"alternateName\":\"Construction GS\",\"url\":\"https:\/\/construction-gs.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es-CO\",\"@id\":\"https:\/\/construction-gs.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/construction-gs.com\/wp-content\/uploads\/2025\/07\/logo-gs-1.png\",\"contentUrl\":\"https:\/\/construction-gs.com\/wp-content\/uploads\/2025\/07\/logo-gs-1.png\",\"width\":466,\"height\":289,\"caption\":\"GS Construction\"},\"image\":{\"@id\":\"https:\/\/construction-gs.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/profile.php?id=61579813133271\",\"https:\/\/www.instagram.com\/gsconstructionmn\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Gallery - GS Construction","description":"% %","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/construction-gs.com\/es\/gallery\/","og_locale":"es_ES","og_type":"article","og_title":"Gallery - GS Construction","og_description":"% %","og_url":"https:\/\/construction-gs.com\/es\/gallery\/","og_site_name":"GS Construction","article_publisher":"https:\/\/www.facebook.com\/profile.php?id=61579813133271","article_modified_time":"2025-09-03T01:48:02+00:00","og_image":[{"width":466,"height":289,"url":"https:\/\/construction-gs.com\/wp-content\/uploads\/2025\/07\/logo-gs-1.png","type":"image\/png"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/construction-gs.com\/gallery\/","url":"https:\/\/construction-gs.com\/gallery\/","name":"Gallery - GS Construction","isPartOf":{"@id":"https:\/\/construction-gs.com\/#website"},"datePublished":"2025-08-04T23:37:05+00:00","dateModified":"2025-09-03T01:48:02+00:00","description":"% %","breadcrumb":{"@id":"https:\/\/construction-gs.com\/gallery\/#breadcrumb"},"inLanguage":"es-CO","potentialAction":[{"@type":"ReadAction","target":["https:\/\/construction-gs.com\/gallery\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/construction-gs.com\/gallery\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/construction-gs.com\/"},{"@type":"ListItem","position":2,"name":"Gallery"}]},{"@type":"WebSite","@id":"https:\/\/construction-gs.com\/#website","url":"https:\/\/construction-gs.com\/","name":"GS Construction","description":"GS Construction: Home Repair, Remodeling &amp; Construction Services.","publisher":{"@id":"https:\/\/construction-gs.com\/#organization"},"alternateName":"Construction GS","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/construction-gs.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es-CO"},{"@type":"Organization","@id":"https:\/\/construction-gs.com\/#organization","name":"GS Construction","alternateName":"Construction GS","url":"https:\/\/construction-gs.com\/","logo":{"@type":"ImageObject","inLanguage":"es-CO","@id":"https:\/\/construction-gs.com\/#\/schema\/logo\/image\/","url":"https:\/\/construction-gs.com\/wp-content\/uploads\/2025\/07\/logo-gs-1.png","contentUrl":"https:\/\/construction-gs.com\/wp-content\/uploads\/2025\/07\/logo-gs-1.png","width":466,"height":289,"caption":"GS Construction"},"image":{"@id":"https:\/\/construction-gs.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/profile.php?id=61579813133271","https:\/\/www.instagram.com\/gsconstructionmn\/"]}]}},"_links":{"self":[{"href":"https:\/\/construction-gs.com\/es\/wp-json\/wp\/v2\/pages\/3208","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/construction-gs.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/construction-gs.com\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/construction-gs.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/construction-gs.com\/es\/wp-json\/wp\/v2\/comments?post=3208"}],"version-history":[{"count":38,"href":"https:\/\/construction-gs.com\/es\/wp-json\/wp\/v2\/pages\/3208\/revisions"}],"predecessor-version":[{"id":3461,"href":"https:\/\/construction-gs.com\/es\/wp-json\/wp\/v2\/pages\/3208\/revisions\/3461"}],"wp:attachment":[{"href":"https:\/\/construction-gs.com\/es\/wp-json\/wp\/v2\/media?parent=3208"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}