1<!DOCTYPE html> 2<html class="no-js" lang=en> 3<head> 4 <meta charset="utf-8"> 5 <meta http-equiv="x-ua-compatible" content="ie=edge"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 <meta name="twitter:card" content="summary_large_image"> 8 <meta property="og:type" content="website"> 9 <title>Real Estate & Community Blog | Josh Nelson, MI Real Estate</title> 10 <meta property="og:title" content="Real Estate & Community Blog | Josh Nelson, MI Real Estate"> 11 <meta name="twitter:title" content="Real Estate & Community Blog | Josh Nelson, MI Real Estate"> 12 <meta name="description" content="Welcome to Josh Nelson's Real Estate & Community Blog! Discover exciting updates, expert tips & local insights on Michigan real estate. Stay informed with us!"> 13 <meta property="og:description" content="Welcome to Josh Nelson's Real Estate & Community Blog! Discover exciting updates, expert tips & local insights on Michigan real estate. Stay informed with us!"> 14 <meta name="twitter:description" content="Welcome to Josh Nelson's Real Estate & Community Blog! Discover exciting updates, expert tips & local insights on Michigan real estate. Stay informed with us!"> 15 <meta property="og:image" content="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1920/https://media-production.lp-cdn.com/media/d4ae2c61-4f2e-43ec-b57e-1fd858f66b0c"> 16 <meta name="twitter:image" content="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1920/https://media-production.lp-cdn.com/media/d4ae2c61-4f2e-43ec-b57e-1fd858f66b0c"> 17 <meta property="og:url" content="https://joshnelsonrealty.com/blog"> 18 <link rel="canonical" href="https://joshnelsonrealty.com/blog"> 19
19<script>(function(html){html.className = html.className.replace(/\bno-js\b/,'js')})(document.documentElement);</script>
19 20 <link rel="preconnect" href="https://fonts.googleapis.com"> 21 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 22 <style>@font-face {font-family: 'MercuryDisplayRoman';src: url('https://d1e1jt2fj4r8r.cloudfront.net/fonts/MercuryDisplayRoman/MercuryDisplay-Roman.woff2') format('woff2'),url('https://d1e1jt2fj4r8r.cloudfront.net/fonts/MercuryDisplayRoman/MercuryDisplay-Roman.woff') format('woff');font-weight: 400;font-style: normal;}</style><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open%20Sans:300,400,500,600,700,800,300i,400i,500i,600i,700i,800i"> 23 <link rel="preload" href="https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/css/ion.rangeSlider.min.css" as="style" onload="this.onload=null;this.rel='stylesheet'"> 24 <noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/css/ion.rangeSlider.min.css"></noscript> 25 <link rel="icon" type="image/x-icon" href="/favicon.ico"> 26 <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"> 27 <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"> 28 <link rel="icon" type="image/png" sizes="48x48" href="/favicon-48x48.png"> 29 <style id="global-css">:root{--global-primary-font-family:MercuryDisplayRoman,serif;--global-primary-font-family-short:MercuryDisplayRoman;--global-secondary-font-family:'Open Sans',sans-serif;--global-secondary-font-family-short:Open Sans;--global-body-padding:0px;--global-background-color:#000;--global-body-font-size:14px;--global-h1-font-size:60px;--global-h2-font-size:48px;--global-h3-font-size:26px;--global-h4-font-size:13px;--global-h5-font-size:13px;--global-h6-font-size:13px;--global-section-padding:96px;}@media (max-width: 768px){:root{--global-section-padding:64px;}}body{padding:0px;background-color:#000;font-family:'Open Sans',sans-serif;font-size:14px;}@media (min-width: 768px){body{padding:0px 0px 0px 0px;}}h1,h2,h3,h4,h5,h6,button{font-family:MercuryDisplayRoman,serif;}h1{font-size:60px;}h2{font-size:48px;}h3{font-size:26px;}h4{font-size:13px;}h5{font-size:13px;}h6{font-size:13px;}</style> 30 <link rel="stylesheet" type="text/css" href="https://styles.luxurypresence.com/influencer/index.css" /> 31 <style id="website-css">@font-face{font-family:"CompassSans";src:url('d1hqn9onx2xuha.cloudfront.net/fonts/compass/CompassSans/CompassSans-Regular.eot?#iefix') format('embedded-opentype'),url('https://s3-us-west-2.amazonaws.com/static-lp/fonts/compass/CompassSans/CompassSans-Regular.woff2') format('woff2'),url('https://s3-us-west-2.amazonaws.com/static-lp/fonts/compass/CompassSans/CompassSans-Regular.woff') format('woff'),url('https://s3-us-west-2.amazonaws.com/static-lp/fonts/compass/CompassSans/CompassSans-Regular.ttf') format('truetype');font-weight:400;font-style:normal;}@font-face{font-family:"CompassSans";src:url('d1hqn9onx2xuha.cloudfront.net/fonts/compass/CompassSans/CompassSans-Bold.eot?#iefix') format('embedded-opentype'),url('https://s3-us-west-2.amazonaws.com/static-lp/fonts/compass/CompassSans/CompassSans-Bold.woff2') format('woff2'),url('https://s3-us-west-2.amazonaws.com/static-lp/fonts/compass/CompassSans/CompassSans-Bold.woff') format('woff'),url('https://s3-us-west-2.amazonaws.com/static-lp/fonts/compass/CompassSans/CompassSans-Bold.ttf') format('truetype');font-weight:700;font-style:normal;}@font-face{font-family:'Bebas Kai';font-style:normal;font-weight:normal;src:url('https://d1e1jt2fj4r8r.cloudfront.net/fonts/BebasKai-Regular.woff') format('woff');}#modal-global-contact-us.modal.visible div.modal-content div.contact-popup{padding:0;}span.lp-i--podcast:before{-webkit-mask-image:url("https://media-production.lp-cdn.com/media/03431732-84b9-45e3-83a9-d6be7f1e6e2f");-webkit-mask-image:url("https://media-production.lp-cdn.com/media/11119145-5fdb-4fe2-93e1-3631735ecf81");mask-image:url("https://media-production.lp-cdn.com/media/11119145-5fdb-4fe2-93e1-3631735ecf81");}:root{--primary:#002349;--secondary:#E0E0E0;--accent:#C4A965;--dark:#363636;}div#global-mobile-contact .connect-btn{background-color:var(--primary)!important;color:#FFF!important;}div#global-mobile-contact .lp-h3{color:var(--primary)!important;}div#global-mobile-contact .lp-btn{background-color:var(--primary)!important;border-color:var(--primary)!important;}div#global-mobile-contact .lp-btn:hover{background-color:transparent!important;color:var(--primary)!important;}div#modal-global-contact-us .contact-popup__info a{-webkit-text-decoration:underline;text-decoration:underline;text-underline-offset:3px;-webkit-transition:.3s all;transition:.3s all;}div#modal-global-contact-us .contact-popup__info a:before,div#modal-global-contact-us .contact-popup__info a:after{display:none!important;}div#modal-global-contact-us div.contact-popup__info a{position:relative!important;}div#modal-global-contact-us div.contact-popup__info a:before,div#modal-global-contact-us div.contact-popup__info a:after{-webkit-transition:0.4s;transition:0.4s;-webkit-text-decoration:none!important;text-decoration:none!important;line-height:1;content:"";height:1px;position:absolute!important;bottom:0;left:0;}div#modal-global-contact-us div.contact-popup__info a:before{width:100%!important;background-color:var(--dark)!important;}div#modal-global-contact-us div.contact-popup__info a:after{width:0%!important;background-color:var(--accent)!important;}div#modal-global-contact-us div.contact-popup__info a:hover{color:var(--accent);}div#modal-global-contact-us div.contact-popup__info a:hover:after{width:100%!important;}div#modal-global-contact-us .contact-popup__title{color:var(--primary);}div#modal-global-contact-us h3{color:var(--primary);}div#modal-global-contact-us .contact-popup__close:before,div#modal-global-contact-us .contact-popup__close:after{background-color:var(--primary);}nav#global-navbar .navigation__link{font-size:15px!important;}nav#global-navbar .sub-nav .nav-link{font-size:15px!important;}nav#global-navbar .header__container{padding-top:35px;padding-bottom:35px;}nav#global-navbar header.header .navigation__item.sub-nav-container .sub-nav{background-color:#FFF;}nav#global-navbar header.header .navigation__item.sub-nav-container .sub-nav ul li .nav-link{color:var(--dark)!important;}nav#global-navbar header.header .navigation__item.sub-nav-container .sub-nav ul li .nav-link:hover{background-color:var(--primary);color:#FFF!important;}nav#global-navbar header.header .navigation__link:before{background-color:#FFFFFF40!important;}nav#global-navbar header.header .navigation__link:after{background-color:#FFF!important;}nav#global-navbar header.header div.header__container{border-bottom:2px solid rgba(255, 255, 255, 1);}nav#global-navbar header.header.scroll{background-color:#FFF!important;box-shadow:0 4px 30px rgba(0, 0, 0, 0.1);}nav#global-navbar header.header.scroll button.hamburger:before,nav#global-navbar header.header.scroll button.hamburger:after{border-color:var(--dark);}nav#global-navbar header.header.scroll div.header__container{border-bottom:2px solid transparent;}nav#global-navbar .navigation__item.sub-nav-container .sub-nav{width:190px;}nav#global-navbar li.navigation__item{margin-left:15px;}nav#global-navbar a.navigation__link{position:relative!important;font-weight:400;}nav#global-navbar a.navigation__link:before,nav#global-navbar a.navigation__link:after{-webkit-transition:0.4s;transition:0.4s;-webkit-text-decoration:none!important;text-decoration:none!important;line-height:1;content:"";height:1px;position:absolute!important;bottom:0;left:0;}nav#global-navbar a.navigation__link:before{width:100%!important;background-color:#000!important;}nav#global-navbar a.navigation__link:after{width:0%!important;background-color:#FFF!important;}nav#global-navbar a.navigation__link:hover:after{width:100%!important;}nav#global-navbar header.scroll a.navigation__link:hover{color:var(--accent)!important;}nav#global-navbar header.scroll a.navigation__link:before{background-color:#36363660!important;}nav#global-navbar header.scroll a.navigation__link:hover:after{background-color:var(--accent)!important;}nav#global-navbar .container{max-width:1300px;}@media (min-width: 376px){nav#global-navbar .logo img{max-width:100%;max-height:100%;height:45px;image-rendering:auto;image-rendering:crisp-edges;}}footer#global-footer a:not(.socials__item){-webkit-text-decoration:none;text-decoration:none;position:relative!important;line-height:1.7;color:var(--dark)!important;}footer#global-footer a:not(.socials__item):before,footer#global-footer a:not(.socials__item):after{-webkit-transition:0.4s;transition:0.4s;-webkit-text-decoration:none!important;text-decoration:none!important;line-height:1;content:"";height:1px;position:absolute!important;bottom:0;left:0;}footer#global-footer a:not(.socials__item):hover{color:var(--accent)!important;}footer#global-footer a:not(.socials__item):before{width:100%!important;background-color:#ddd!important;}footer#global-footer a:not(.socials__item):after{width:0%!important;background-color:var(--accent)!important;}footer#global-footer a:not(.socials__item):hover:after{width:100%!important;}
31footer#global-footer .footer__copyright .link{-webkit-text-decoration:none;text-decoration:none;}footer#global-footer .footer__menu-item{text-transform:unset;}footer#global-footer .footer__copyright .img-wrap img{-webkit-filter:invert(100%)!important;filter:invert(100%)!important;}footer#global-footer .footer__disclaimer{opacity:1!important;}footer#global-footer .footer__disclaimer div:first-child{display:none!important;}</style> 32 <style id="wow-hide-elements">.wow{visibility:hidden!important}</style> 33 <style id="page-css"> 34 #section-42227948-5841-4e0e-a993-4f76d3586e7b{color:#ffffff;--fontColor:#ffffff;--fontColor_H:0;--fontColor_S:0%;--fontColor_L:100%;--fontColor_A:1;--fontColor_darkenDir:-1;--bgColor:transparent;--bgColor_H:0;--bgColor_S:0%;--bgColor_L:0%;--bgColor_A:0;--bgColor_darkenDir:1;background-color:transparent;--gradient-color:var(--overlay-color, rgba(0, 0, 0, 0.30));background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1280/https://media-production.lp-cdn.com/media/d4ae2c61-4f2e-43ec-b57e-1fd858f66b0c');background-repeat:no-repeat;-webkit-background-position:center;background-position:center;-webkit-background-size:cover;background-size:cover;}#section-42227948-5841-4e0e-a993-4f76d3586e7b .simple-opening{text-align:center;padding-top:275px;}#section-42227948-5841-4e0e-a993-4f76d3586e7b .simple-opening__content{max-width:815px;margin:0 auto;}#section-42227948-5841-4e0e-a993-4f76d3586e7b .simple-opening h1{margin-bottom:48px;}#section-42227948-5841-4e0e-a993-4f76d3586e7b .simple-opening__socials{margin-top:22px;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;padding-bottom:48px;}@media (min-width: 960px) and (orientation: landscape){#section-42227948-5841-4e0e-a993-4f76d3586e7b{background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1280/https://media-production.lp-cdn.com/media/d4ae2c61-4f2e-43ec-b57e-1fd858f66b0c');}}@media (min-width: 1280px) and (orientation: landscape){#section-42227948-5841-4e0e-a993-4f76d3586e7b{background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1920/https://media-production.lp-cdn.com/media/d4ae2c61-4f2e-43ec-b57e-1fd858f66b0c');}}@media (min-width: 1920px) and (orientation: landscape){#section-42227948-5841-4e0e-a993-4f76d3586e7b{background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/d4ae2c61-4f2e-43ec-b57e-1fd858f66b0c');}}@media (min-width: 2560px) and (orientation: landscape){#section-42227948-5841-4e0e-a993-4f76d3586e7b{background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/d4ae2c61-4f2e-43ec-b57e-1fd858f66b0c');}}#section-f42f1a44-b353-4560-ac1a-1df3ec5b642b{color:#363636;--fontColor:#363636;--fontColor_H:0;--fontColor_S:0%;--fontColor_L:21%;--fontColor_A:1;--fontColor_darkenDir:1;--bgColor:#FFFFFF;--bgColor_H:0;--bgColor_S:0%;--bgColor_L:100%;--bgColor_A:1;--bgColor_darkenDir:-1;background-color:#FFFFFF;}#section-f42f1a44-b353-4560-ac1a-1df3ec5b642b .lp-title-group{margin-bottom:0px!important;}#section-f42f1a44-b353-4560-ac1a-1df3ec5b642b .lp-title-group .lp-h2{margin-bottom:0px;}#section-f42f1a44-b353-4560-ac1a-1df3ec5b642b .boxed-text__description{margin-bottom:50px;text-align:center;}@media (max-width: 768px){#section-f42f1a44-b353-4560-ac1a-1df3ec5b642b .boxed-text__description{margin-bottom:30px;}}.redesign #section-f42f1a44-b353-4560-ac1a-1df3ec5b642b .boxed-text__heading:not(h2){text-rendering:optimizeLegibility;white-space:normal;}#section-f42f1a44-b353-4560-ac1a-1df3ec5b642b .lp-title-group .lp-h2{margin-top:0;}#section-f42f1a44-b353-4560-ac1a-1df3ec5b642b .button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;
34-webkit-justify-content:center;justify-content:center;}@media(max-width: 600px){#section-f42f1a44-b353-4560-ac1a-1df3ec5b642b .button-container{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}}#section-f42f1a44-b353-4560-ac1a-1df3ec5b642b .button-container .lp-btn{margin-right:20px;}#section-f42f1a44-b353-4560-ac1a-1df3ec5b642b .button-container .lp-btn:last-of-type{margin-right:0;}@media(max-width: 600px){#section-f42f1a44-b353-4560-ac1a-1df3ec5b642b .button-container .lp-btn{margin-right:0px;margin-bottom:20px;width:100%;}#section-f42f1a44-b353-4560-ac1a-1df3ec5b642b .button-container .lp-btn:last-of-type{margin-bottom:0;}}#section-f42f1a44-b353-4560-ac1a-1df3ec5b642b .lp-text--subtitle{margin-left:auto;margin-right:auto;text-transform:none;}#section-f42f1a44-b353-4560-ac1a-1df3ec5b642b .redesign p:not(:where(.boxed-text__heading)){margin-bottom:1.666rem;}#section-f42f1a44-b353-4560-ac1a-1df3ec5b642b h1{color:#002349;}#section-f42f1a44-b353-4560-ac1a-1df3ec5b642b h2{color:#002349;}#section-f42f1a44-b353-4560-ac1a-1df3ec5b642b h3{color:#002349;}#section-f42f1a44-b353-4560-ac1a-1df3ec5b642b p{color:#363636;}#section-5bb14518-9a5a-4131-b654-087e692a51d7{color:#363636;--fontColor:#363636;--fontColor_H:0;--fontColor_S:0%;--fontColor_L:21%;--fontColor_A:1;--fontColor_darkenDir:1;--bgColor:#FFFFFF;--bgColor_H:0;--bgColor_S:0%;--bgColor_L:100%;--bgColor_A:1;--bgColor_darkenDir:-1;background-color:#FFFFFF;}#section-5bb14518-9a5a-4131-b654-087e692a51d7 .blog-list{padding-top:96px;padding-bottom:96px;}@media(max-width: 768px){#section-5bb14518-9a5a-4131-b654-087e692a51d7 .blog-list{padding-top:60px;padding-bottom:60px;}}#section-5bb14518-9a5a-4131-b654-087e692a51d7 .blog-list h3{margin:0;}#section-5bb14518-9a5a-4131-b654-087e692a51d7 .blog-list .posts-container{display:-ms-grid;display:grid;-ms-grid-columns:1fr 1fr;grid-template-columns:1fr 1fr;-ms-grid-rows:1fr;grid-template-rows:1fr;gap:60px 60px;grid-template-areas:". .";}@media(max-width: 768px){#section-5bb14518-9a5a-4131-b654-087e692a51d7 .blog-list .posts-container{-ms-grid-columns:1fr;grid-template-columns:1fr;grid-template-areas:".";gap:36px 36px;}}#section-5bb14518-9a5a-4131-b654-087e692a51d7 .blog-list .posts-container .post-item .image-holder{padding-bottom:65%;position:relative;cursor:pointer;overflow:hidden;}#section-5bb14518-9a5a-4131-b654-087e692a51d7 .blog-list .posts-container .post-item .image-holder .image-item{position:absolute;background:no-repeat center;-webkit-background-size:cover;background-size:cover;left:0;right:0;top:0;bottom:0;-webkit-transition:all .3s;transition:all .3s;}#section-5bb14518-9a5a-4131-b654-087e692a51d7 .blog-list .posts-container .post-item .image-holder .category{position:absolute;right:0;bottom:0;background-color:rgba(255,255,255, 0.7);color:#000;text-transform:uppercase;font-weight:700;padding:0px 8px;}#section-5bb14518-9a5a-4131-b654-087e692a51d7 .blog-list .posts-container .post-item .image-holder .overlay{opacity:0;position:absolute;right:0;left:0;bottom:0;top:0;background-color:rgba(0, 0, 0, 0.6);-webkit-transition:all .3s;transition:all .3s;}#section-5bb14518-9a5a-4131-b654-087e692a51d7 .blog-list .posts-container .post-item .image-holder .button-wrapper{opacity:0;position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%, -50%);-moz-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);-webkit-transition:all .3s;transition:all .3s;}#section-5bb14518-9a5a-4131-b654-087e692a51d7 .blog-list .posts-container .post-item .post-details .title{margin-top:35px;}#section-5bb14518-9a5a-4131-b654-087e692a51d7 .blog-list .posts-container .post-item .post-details .author-date{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-top:15px;}#section-5bb14518-9a5a-4131-b654-087e692a51d7 .blog-list .posts-container .post-item .post-details .author-date .date{padding-right:8px;margin-right:8px;position:relative;}#section-5bb14518-9a5a-4131-b654-087e692a51d7 .blog-list .posts-container .post-item .post-details .author-date .date:after{position:absolute;content:'';right:0;height:9px;width:1px;background-color:currentColor;top:50%;-webkit-transform:translate(0, -50%);-moz-transform:translate(0, -50%);-ms-transform:translate(0, -50%);transform:translate(0, -50%);}#section-5bb14518-9a5a-4131-b654-087e692a51d7 .blog-list .posts-container .post-item .post-details .description{margin-top:10px;}#section-5bb14518-9a5a-4131-b654-087e692a51d7 .blog-list .posts-container .post-item:hover .image-holder .image-item{-webkit-transform:scale(1.1);-moz-transform:scale(1.1);-ms-transform:scale(1.1);transform:scale(1.1);}#section-5bb14518-9a5a-4131-b654-087e692a51d7 .blog-list .posts-container .post-item:hover .image-holder .overlay,#section-5bb14518-9a5a-4131-b654-087e692a51d7 .blog-list .posts-container .post-item:hover .image-holder .button-wrapper{opacity:1;}#section-5bb14518-9a5a-4131-b654-087e692a51d7 .blog-list .posts-container.hide-date .post-item .post-details .author-date .date{display:none;}#section-5bb14518-9a5a-4131-b654-087e692a51d7 .blog-list .posts-container.hide-author .post-item .post-details .author-date .date:after{display:none;}#section-5bb14518-9a5a-4131-b654-087e692a51d7 .blog-list .posts-container.hide-author .post-item .post-details .author-date .author{display:none;}#section-5bb14518-9a5a-4131-b654-087e692a51d7 .blog-list .pagination-container{margin-top:120px;}@media(max-width: 768px){#section-5bb14518-9a5a-4131-b654-087e692a51d7 .blog-list .pagination-container{margin-top:70px;}}#section-5bb14518-9a5a-4131-b654-087e692a51d7 .pagination-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;
34-webkit-justify-content:center;justify-content:center;}#section-5bb14518-9a5a-4131-b654-087e692a51d7 .pagination-container .paginationjs{box-sizing:border-box;font-family:inherit;}#section-5bb14518-9a5a-4131-b654-087e692a51d7 .pagination-container .paginationjs .paginationjs-pages ul{float:none;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-weight:400;}#section-5bb14518-9a5a-4131-b654-087e692a51d7 .pagination-container .paginationjs .paginationjs-pages li{float:none;margin:0 9px;border:none;}#section-5bb14518-9a5a-4131-b654-087e692a51d7 .pagination-container .paginationjs .paginationjs-pages li a{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;min-width:40px;height:40px;background-color:hsla(0, 0%, 100%, 0.08);border-radius:40px;color:#fff;line-height:24px;font-weight:400;text-align:center;vertical-align:middle;padding:5px;border:solid 1px transparent;cursor:pointer;-webkit-transition:all .3s;transition:all .3s;}#section-5bb14518-9a5a-4131-b654-087e692a51d7 .pagination-container .paginationjs .paginationjs-pages li a:hover{background-color:hsla(0, 0%, 100%, 0.3);color:#fff;}#section-5bb14518-9a5a-4131-b654-087e692a51d7 .pagination-container .paginationjs .paginationjs-pages li:first-of-type a,#section-5bb14518-9a5a-4131-b654-087e692a51d7 .pagination-container .paginationjs .paginationjs-pages li:last-of-type a{display:block;}#section-5bb14518-9a5a-4131-b654-087e692a51d7 .pagination-container .paginationjs .paginationjs-pages li.active a{height:40px;line-height:24px;background-color:hsla(0, 0%, 100%, 0.17);border-color:#fff;color:#fff;}#section-5bb14518-9a5a-4131-b654-087e692a51d7 .pagination-container .paginationjs .paginationjs-pages li.disabled{cursor:auto;}#section-5bb14518-9a5a-4131-b654-087e692a51d7 .pagination-container .paginationjs .paginationjs-pages li.disabled a{pointer-events:none;}#section-5bb14518-9a5a-4131-b654-087e692a51d7 .pagination-container .paginationjs .paginationjs-pages li.paginationjs-prev,#section-5bb14518-9a5a-4131-b654-087e692a51d7 .pagination-container .paginationjs .paginationjs-pages li.paginationjs-next{border:none;border-radius:0;}#section-5bb14518-9a5a-4131-b654-087e692a51d7 .pagination-container .paginationjs .paginationjs-pages li.paginationjs-prev a,#section-5bb14518-9a5a-4131-b654-087e692a51d7 .pagination-container .paginationjs .paginationjs-pages li.paginationjs-next a{min-width:24px;height:24px;border-radius:0;font-size:0;background-color:transparent;color:inherit;}#section-5bb14518-9a5a-4131-b654-087e692a51d7 .pagination-container .paginationjs .paginationjs-pages li.paginationjs-prev a:before,#section-5bb14518-9a5a-4131-b654-087e692a51d7 .pagination-container .paginationjs .paginationjs-pages li.paginationjs-next a:before{content:"";position:absolute;left:50%;top:50%;display:block;width:10px;height:10px;border-bottom:2px solid currentColor;border-left:2px solid currentColor;}#section-5bb14518-9a5a-4131-b654-087e692a51d7 .pagination-container .paginationjs .paginationjs-pages li.paginationjs-prev a:hover,#section-5bb14518-9a5a-4131-b654-087e692a51d7 .pagination-container .paginationjs .paginationjs-pages li.paginationjs-next a:hover{background-color:transparent;border-color:transparent;}#section-5bb14518-9a5a-4131-b654-087e692a51d7 .pagination-container .paginationjs .paginationjs-pages li.paginationjs-prev.disabled a,#section-5bb14518-9a5a-4131-b654-087e692a51d7 .pagination-container .paginationjs .paginationjs-pages li.paginationjs-next.disabled a{text-indent:-9999px;pointer-events:none;}#section-5bb14518-9a5a-4131-b654-087e692a51d7 .pagination-container .paginationjs .paginationjs-pages li.paginationjs-prev.disabled a:before,#section-5bb14518-9a5a-4131-b654-087e692a51d7 .pagination-container .paginationjs .paginationjs-pages li.paginationjs-next.disabled a:before{border-color:#757575;}@media (max-width: 767px){#section-5bb14518-9a5a-4131-b654-087e692a51d7 .pagination-container .paginationjs .paginationjs-pages li.paginationjs-prev.disabled a:after,#section-5bb14518-9a5a-4131-b654-087e692a51d7 .pagination-container .paginationjs .paginationjs-pages li.paginationjs-next.disabled a:after{background:#757575;}}#section-5bb14518-9a5a-4131-b654-087e692a51d7 .pagination-container .paginationjs .paginationjs-pages li:first-child a:before{-webkit-transform:translate(-50%, -50%) rotate(45deg);-moz-transform:translate(-50%, -50%) rotate(45deg);-ms-transform:translate(-50%, -50%) rotate(45deg);transform:translate(-50%, -50%) rotate(45deg);}@media (max-width: 767px){#section-5bb14518-9a5a-4131-b654-087e692a51d7 .pagination-container .paginationjs .paginationjs-pages li:first-child a:before{left:3px;-webkit-transform:translate(0, -50%) rotate(45deg);-moz-transform:translate(0, -50%) rotate(45deg);-ms-transform:translate(0, -50%) rotate(45deg);transform:translate(0, -50%) rotate(45deg);}}@media (max-width: 767px){#section-5bb14518-9a5a-4131-b654-087e692a51d7 .pagination-container .paginationjs .paginationjs-pages li:first-child a:after{left:13px;-webkit-transform:translateX(-50%);-moz-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);}}#section-5bb14518-9a5a-4131-b654-087e692a51d7 .pagination-container .paginationjs .paginationjs-pages li:last-child a:before{-webkit-transform:translate(-50%, -50%) rotate(225deg);-moz-transform:translate(-50%, -50%) rotate(225deg);-ms-transform:translate(-50%, -50%) rotate(225deg);transform:translate(-50%, -50%) rotate(225deg);}@media (max-width: 767px){#section-5bb14518-9a5a-4131-b654-087e692a51d7 .pagination-container .paginationjs .paginationjs-pages li:last-child a:before{right:0;-webkit-transform:translate(0, -50%) rotate(225deg);-moz-transform:translate(0, -50%) rotate(225deg);-ms-transform:translate(0, -50%) rotate(225deg);transform:translate(0, -50%) rotate(225deg);}}@media (max-width: 767px){#section-5bb14518-9a5a-4131-b654-087e692a51d7 .pagination-container .paginationjs .paginationjs-pages li:last-child a:after{right:4px;}}#section-5bb14518-9a5a-4131-b654-087e692a51d7 h1{color:#002349;}#section-5bb14518-9a5a-4131-b654-087e692a51d7 h2{color:#002349;}#section-5bb14518-9a5a-4131-b654-087e692a51d7 h3{color:#002349;}#section-5bb14518-9a5a-4131-b654-087e692a51d7 p{color:#363636;}#section-d4307d3d-7cb0-461b-9790-4cbaf461428c{color:#FFFFFF;--fontColor:#FFFFFF;--fontColor_H:0;--fontColor_S:0%;--fontColor_L:100%;--fontColor_A:1;--fontColor_darkenDir:-1;--bgColor:#002349;--bgColor_H:211;--bgColor_S:100%;--bgColor_L:14%;--bgColor_A:1;--bgColor_darkenDir:1;background-color:#002349;}#section-d4307d3d-7cb0-461b-9790-4cbaf461428c .newsletter-signup{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;
34-webkit-justify-content:center;justify-content:center;}@media (max-width: 768px){#section-d4307d3d-7cb0-461b-9790-4cbaf461428c .newsletter-signup{min-height:80vh;}#section-d4307d3d-7cb0-461b-9790-4cbaf461428c .newsletter-signup .lp-container-custom{padding:0 25px;}}#section-d4307d3d-7cb0-461b-9790-4cbaf461428c .newsletter-signup__form{margin:0;}#section-d4307d3d-7cb0-461b-9790-4cbaf461428c .newsletter-signup__form.success .newsletter-signup__form-container{display:none;}#section-d4307d3d-7cb0-461b-9790-4cbaf461428c .newsletter-signup__form.success .success-block{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}#section-d4307d3d-7cb0-461b-9790-4cbaf461428c .newsletter-signup__inputs-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;}@media (max-width: 768px){#section-d4307d3d-7cb0-461b-9790-4cbaf461428c .newsletter-signup__inputs-container{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}}#section-d4307d3d-7cb0-461b-9790-4cbaf461428c .newsletter-signup__form-container{position:relative;z-index:1;}@media (max-width: 768px){#section-d4307d3d-7cb0-461b-9790-4cbaf461428c .newsletter-signup__form-container .lp-h2{margin-bottom:32px;}}@media (max-width: 768px){#section-d4307d3d-7cb0-461b-9790-4cbaf461428c .newsletter-signup__form-container .lp-text--subtitle{margin-bottom:32px;}}#section-d4307d3d-7cb0-461b-9790-4cbaf461428c .newsletter-signup__form-item +.newsletter-signup__form-item{margin-left:16px;}@media (max-width: 768px){#section-d4307d3d-7cb0-461b-9790-4cbaf461428c .newsletter-signup__form-item +.newsletter-signup__form-item{margin-left:0px;margin-top:32px;}}@media (min-width: 769px){#section-d4307d3d-7cb0-461b-9790-4cbaf461428c .newsletter-signup__form-item.lp-input{padding-top:0;padding-bottom:0;width:250px;}}#section-d4307d3d-7cb0-461b-9790-4cbaf461428c .newsletter-signup__form-item.lp-btn{text-transform:uppercase;font-weight:700;}@media (min-width: 769px){#section-d4307d3d-7cb0-461b-9790-4cbaf461428c .newsletter-signup__form-item.lp-btn{width:200px;}}#section-d4307d3d-7cb0-461b-9790-4cbaf461428c .newsletter-signup .success-block{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;visibility:visible;opacity:1;z-index:2;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:none;text-align:center;}#section-d4307d3d-7cb0-461b-9790-4cbaf461428c .newsletter-signup .success-block.hide{display:none;}#section-d4307d3d-7cb0-461b-9790-4cbaf461428c .lp-text--subtitle{margin-left:auto;margin-right:auto;text-transform:none;}#section-d4307d3d-7cb0-461b-9790-4cbaf461428c .lp-h-pot{max-width:1px;}#section-d4307d3d-7cb0-461b-9790-4cbaf461428c .lp-title-group{max-width:unset;padding:0 20px;}#section-d4307d3d-7cb0-461b-9790-4cbaf461428c input:-webkit-autofill,#section-d4307d3d-7cb0-461b-9790-4cbaf461428c input:-webkit-autofill:hover,#section-d4307d3d-7cb0-461b-9790-4cbaf461428c input:-webkit-autofill:focus,#section-d4307d3d-7cb0-461b-9790-4cbaf461428c input:-webkit-autofill:active{-webkit-text-fill-color:var(--fontColor);-webkit-box-shadow:0 0 0px 1000px var(--bgColor) inset;-webkit-transition:background-color 5000s ease-in-out 0s;transition:background-color 5000s ease-in-out 0s;}#section-d4307d3d-7cb0-461b-9790-4cbaf461428c .lp-disclaimer{max-width:730px;margin:20px auto 0 auto;}#section-d4307d3d-7cb0-461b-9790-4cbaf461428c h1{color:#FFFFFF;}#section-d4307d3d-7cb0-461b-9790-4cbaf461428c h2{color:#FFFFFF;}#section-d4307d3d-7cb0-461b-9790-4cbaf461428c h3{color:#FFFFFF;}#section-d4307d3d-7cb0-461b-9790-4cbaf461428c p{color:#FFFFFF;}#section-800648be-b1a1-4e21-a1a6-e04b85375975{color:#ffffff;--fontColor:#ffffff;--fontColor_H:0;--fontColor_S:0%;--fontColor_L:100%;--fontColor_A:1;--fontColor_darkenDir:-1;--bgColor:#000000;--bgColor_H:0;--bgColor_S:0%;--bgColor_L:0%;--bgColor_A:1;--bgColor_darkenDir:1;background-color:#000000;--gradient-color:var(--overlay-color, rgba(0, 0, 0, 0.4));background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1280/https://media-production.lp-cdn.com/media/99777ba1-3bf0-4531-824e-451eee0f7cd6');background-repeat:no-repeat;-webkit-background-position:center;background-position:center;-webkit-background-size:cover;background-size:cover;}#section-800648be-b1a1-4e21-a1a6-e04b85375975{background-attachment:fixed;-webkit-background-position:center;background-position:center;background-repeat:no-repeat;-webkit-background-size:cover;background-size:cover;}@media only screen and (max-width: 768px){#section-800648be-b1a1-4e21-a1a6-e04b85375975{background-attachment:unset;}}#section-800648be-b1a1-4e21-a1a6-e04b85375975 .work-with-us{padding:160px 0 100px;}#section-800648be-b1a1-4e21-a1a6-e04b85375975 .work-with-us h1,#section-800648be-b1a1-4e21-a1a6-e04b85375975 .work-with-us h2,#section-800648be-b1a1-4e21-a1a6-e04b85375975 .work-with-us h3,#section-800648be-b1a1-4e21-a1a6-e04b85375975 .work-with-us p{white-space:pre-wrap;}#section-800648be-b1a1-4e21-a1a6-e04b85375975 .work-with-us .container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;
34-webkit-justify-content:center;justify-content:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;text-align:center;}#section-800648be-b1a1-4e21-a1a6-e04b85375975 .work-with-us__content{position:relative;max-width:490px;}#section-800648be-b1a1-4e21-a1a6-e04b85375975 .work-with-us__content h2,#section-800648be-b1a1-4e21-a1a6-e04b85375975 .work-with-us__content p{margin:0 0 28px;}#section-800648be-b1a1-4e21-a1a6-e04b85375975 .work-with-us__content:before{content:'';position:absolute;left:50%;top:-100px;height:60px;width:2px;background-image:linear-gradient(to bottom, #fff 70%, transparent 0 );-webkit-background-size:100% 15px;background-size:100% 15px;}#section-800648be-b1a1-4e21-a1a6-e04b85375975 .work-with-us .btn{-webkit-text-decoration:none;text-decoration:none;}@media (min-width: 960px) and (orientation: landscape){#section-800648be-b1a1-4e21-a1a6-e04b85375975{background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1280/https://media-production.lp-cdn.com/media/99777ba1-3bf0-4531-824e-451eee0f7cd6');}}@media (min-width: 1280px) and (orientation: landscape){#section-800648be-b1a1-4e21-a1a6-e04b85375975{background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1920/https://media-production.lp-cdn.com/media/99777ba1-3bf0-4531-824e-451eee0f7cd6');}}@media (min-width: 1920px) and (orientation: landscape){#section-800648be-b1a1-4e21-a1a6-e04b85375975{background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/99777ba1-3bf0-4531-824e-451eee0f7cd6');}}@media (min-width: 2560px) and (orientation: landscape){#section-800648be-b1a1-4e21-a1a6-e04b85375975{background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/99777ba1-3bf0-4531-824e-451eee0f7cd6');}}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3{color:#000000;--fontColor:#000000;--fontColor_H:0;--fontColor_S:0%;--fontColor_L:0%;--fontColor_A:1;--fontColor_darkenDir:1;--bgColor:#fff;--bgColor_H:0;--bgColor_S:0%;--bgColor_L:100%;--bgColor_A:1;--bgColor_darkenDir:-1;background-color:#fff;}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .ig-feed{padding:80px 0;}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .title{margin:0 20px 0 0;}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .instagram-link{display:block;margin:0 20px 0 0;color:var(--global-primary-font-color);}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .instagram-link .instagram-name{display:inline;margin:0;}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .title+.instagram-link{margin-top:5px;}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .top-wrapper{margin-bottom:20px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-align-items:flex-end;-webkit-box-align:flex-end;-ms-flex-align:flex-end;align-items:flex-end;}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .top-right{margin-left:auto;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:stretch;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .follow-button{margin:20px 0 0 0;display:block;}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .nav-button{margin-top:20px;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;
34-webkit-justify-content:center;justify-content:center;width:42px;color:#1a1a1a;border:1px solid currentColor;cursor:pointer;transition-property:color,background-color,border-color;transition-duration:.3s;transition-timing-function:ease;}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .nav-button.slick-disabled{opacity:0.6;pointer-events:none;cursor:default;}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .nav-button:not(.slick-disabled):hover{background-color:#1a1a1a;border-color:#1a1a1a;color:#fff;}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .top-nav-prev{margin-left:30px;}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .top-nav-next{margin-left:10px;}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .hidden-control{display:none;}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .slide-single,#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .slide-multi{position:relative;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:calc(100% / 3);padding:10px;}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .slide-single:first-child,#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .slide-multi:first-child{margin-left:auto;}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .slide-single:last-child,#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .slide-multi:last-child{margin-right:auto;}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .slide-single.type2,#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .slide-multi.type2{width:calc(100% / 5 * 2);}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .slide-single.type3,#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .slide-multi.type3{width:calc(100% / 2);}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .slide-single.type4,#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .slide-multi.type4{width:calc(100% / 2);}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .slide-single.type5,#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .slide-multi.type5{width:100%;}@media (max-width: 440px){#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .ig-feed-container{padding:0;width:100%;}}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .ig-feed-feed{width:calc(100% + 20px);position:relative;left:-10px;overflow:hidden;}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .ig-feed-slider{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .ig-feed-item__img{position:absolute;left:-1px;top:-1px;bottom:-1px;right:-1px;background:center/cover no-repeat;}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .ig-feed-item__info{position:absolute;top:0;left:0;bottom:0;right:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;padding:10%;overflow:hidden;color:#fff;text-align:center;background-color:rgba(0, 0, 0, 0.8);opacity:0;-webkit-transition:opacity .3s ease;transition:opacity .3s ease;}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .ig-feed-item:hover .ig-feed-item__info{opacity:1;}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .ig-feed-item__caption{text-overflow:ellipsis;-webkit-line-clamp:4;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .video-icon{position:absolute;width:50px;height:50px;background-color:#fff;left:50%;top:50%;-webkit-transform:translate(-50%, -50%);-moz-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);border-radius:50%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-transition:opacity .2s ease;transition:opacity .2s ease;opacity:1;}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .video-icon::before{content:'';display:block;width:0px;height:0px;border-style:solid;position:relative;left:1px;border-width:7.5px 0px 7.5px 11px;border-color:transparent transparent transparent #292826;}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .ig-feed-item:hover .video-icon{opacity:0;}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .slide-single .ig-feed-item__info{padding:15%;}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .slide-single .ig-feed-item__caption{-webkit-line-clamp:7;}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .ig-feed-item{background-color:var(--tileColor, #000);display:block;width:100%;padding-bottom:125%;overflow:hidden;position:relative;}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .slide-multi::before{content:'';display:block;width:100%;padding-bottom:125%;}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .slide-multi-content{padding:10px;position:absolute;width:100%;height:100%;left:0;top:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;
34-webkit-justify-content:space-between;justify-content:space-between;-webkit-align-items:flex-start;-webkit-box-align:flex-start;-ms-flex-align:flex-start;align-items:flex-start;overflow:hidden;}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .slide-multi-content .ig-feed-item{width:calc(50% - 10px);padding-bottom:calc(62.5% - 12.5px);}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .slide-multi-content .ig-feed-item:nth-child(n + 3){-webkit-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end;}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .bottom-controls{width:100%;display:none;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .bottom-nav-button{-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;margin:20px 10px 0;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;width:48px;height:48px;color:#1a1a1a;border:1px solid currentColor;cursor:pointer;}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .bottom-nav-button.slick-disabled{opacity:0.6;pointer-events:none;cursor:default;}@media (max-width: 767px){#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .top-right,#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .top-left{width:100%;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .title,#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .instagram-link{margin-right:0;text-align:center;}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .top-nav-prev,#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .top-nav-next{display:none;}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .bottom-controls{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .ig-feed{display:none;}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3 .has-data .ig-feed{display:block;}#section-aab683fa-2e6b-49e8-9307-d1c895d542e3.has-data .ig-feed,#section-aab683fa-2e6b-49e8-9307-d1c895d542e3#section-temp .ig-feed{display:block;}#modal-global-contact-us>button.close{display:none;}#modal-global-contact-us.visible .contact-popup__container{padding:60px 140px;}@media (max-width: 992px){#modal-global-contact-us.visible .contact-popup__container{padding:50px;}}@media (max-width: 767px){#modal-global-contact-us.visible .contact-popup__container{padding:75px 22px 60px;}}#modal-global-contact-us .contact-popup .hide{display:none;}#modal-global-contact-us .contact-popup__container{background-color:#fff;position:relative;height:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow-y:auto;}@media (max-width: 767px){#modal-global-contact-us .contact-popup__container{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}}#modal-global-contact-us .contact-popup__close{width:30px;height:30px;position:absolute;right:40px;top:40px;background-color:transparent;border:none;padding:0;cursor:pointer;}@media (max-width: 767px){#modal-global-contact-us .contact-popup__close{right:10px;top:10px;}}#modal-global-contact-us .contact-popup__close:before,#modal-global-contact-us .contact-popup__close:after{content:'';display:block;position:absolute;width:18px;height:2px;left:50%;top:50%;background-color:#000000;}#modal-global-contact-us .contact-popup__close:before{-webkit-transform:translate(-50%, -50%) rotate(45deg);-moz-transform:translate(-50%, -50%) rotate(45deg);-ms-transform:translate(-50%, -50%) rotate(45deg);transform:translate(-50%, -50%) rotate(45deg);}#modal-global-contact-us .contact-popup__close:after{-webkit-transform:translate(-50%, -50%) rotate(-45deg);-moz-transform:translate(-50%, -50%) rotate(-45deg);-ms-transform:translate(-50%, -50%) rotate(-45deg);transform:translate(-50%, -50%) rotate(-45deg);}#modal-global-contact-us .contact-popup__col{width:50%;}@media (max-width: 767px){#modal-global-contact-us .contact-popup__col{width:100%;}}#modal-global-contact-us .contact-popup__col:first-of-type{padding-right:55px;}@media (max-width: 992px){#modal-global-contact-us .contact-popup__col:first-of-type{padding-right:15px;}}@media (max-width: 767px){#modal-global-contact-us .contact-popup__col:first-of-type{padding:0;}}#modal-global-contact-us .contact-popup__col:last-of-type{padding-left:55px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}@media (max-width: 992px){#modal-global-contact-us .contact-popup__col:last-of-type{padding-left:15px;}}@media (max-width: 767px){#modal-global-contact-us .contact-popup__col:last-of-type{padding:0;}}#modal-global-contact-us .contact-popup__col p{margin-bottom:25px;}#modal-global-contact-us .contact-popup__title{margin:0 0 20px 0;font-size:70px;font-weight:400;line-height:0.9;}@media (max-width: 992px){#modal-global-contact-us .contact-popup__title{font-size:64px;line-height:1;}}@media (max-width: 767px){#modal-global-contact-us .contact-popup__title{font-size:46px;}}#modal-global-contact-us .contact-popup__input{display:block;width:100%;margin-bottom:13px;}#modal-global-contact-us .contact-popup__input::-webkit-input-placeholder{color:#000000;}#modal-global-contact-us .contact-popup__input::-moz-placeholder{color:#000000;}#modal-global-contact-us .contact-popup__input:-ms-input-placeholder{color:#000000;}#modal-global-contact-us .contact-popup__input:-moz-placeholder{color:#000000;}#modal-global-contact-us .contact-popup textarea.contact-popup__input{height:100px;resize:none;}#modal-global-contact-us .contact-popup__submit{display:block;width:100%;}#modal-global-contact-us .contact-popup__info{padding-top:85px;}@media (max-width: 767px){#modal-global-contact-us .contact-popup__info{padding-top:40px;}}#modal-global-contact-us .contact-popup__info div{margin:0;}
34#modal-global-contact-us .contact-popup__info div a{display:block;}#modal-global-contact-us .contact-popup__info div a:hover{-webkit-text-decoration:underline;text-decoration:underline;}#modal-global-contact-us .contact-popup__subtitle{margin:0 0 15px 0;font-weight:400;}#modal-global-contact-us .contact-popup__socials.socials{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end;margin-top:auto;}@media (max-width: 768px){#modal-global-contact-us .contact-popup__socials.socials{margin-top:70px;}}@media (max-width: 580px){#modal-global-contact-us .contact-popup__socials.socials{margin-top:70px;}}#modal-global-contact-us .contact-popup__socials.socials>li{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto;margin:10px 0 10px 30px;}@media (max-width: 767px){#modal-global-contact-us .contact-popup__socials.socials>li{margin:10px 20px;}}@media (max-width: 580px){#modal-global-contact-us .contact-popup__socials.socials>li{margin:10px;}}#modal-global-contact-us .contact-popup__socials.socials .socials__item{color:#999999;-webkit-transition:0.3s all ease;transition:0.3s all ease;background-color:transparent;border-color:transparent;position:relative;}#modal-global-contact-us .contact-popup__socials.socials .socials__item:hover{color:#000000;background-color:transparent;border-color:transparent;}#modal-global-contact-us .h-pot{height:0;width:0;overflow:hidden;visibility:hidden;line-height:0;font-size:0;position:absolute;}#modal-global-contact-us .contact-popup__input::-webkit-input-placeholder{color:#000000;}#modal-global-contact-us .contact-popup__input::-moz-placeholder{color:#000000;}#modal-global-contact-us .contact-popup__input:-ms-input-placeholder{color:#000000;}#modal-global-contact-us .contact-popup__input::placeholder{color:#000000;}nav.theme-light{color:#fff;}nav.theme-light .logo__img.dark{display:none;}nav.theme-light .logo__img.light{display:block;}nav .header{z-index:900;-webkit-transition:0.3s all ease;transition:0.3s all ease;color:#fff;position:fixed;left:0;top:0;right:0;}nav .header__container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border-bottom:2px solid rgba(151, 151, 151, 0.49);padding-top:20px;padding-bottom:20px;}nav .header__right{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}@media (max-width: 1200px){nav .header__right{padding-left:30px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;}}nav .header.header-animation-off .navigation__item{visibility:visible!important;-webkit-animation-delay:0s!important;animation-delay:0s!important;-webkit-animation-name:none!important;animation-name:none!important;}nav .header.theme-light:not(.scroll){color:#fff!important;}nav .header.theme-light:not(.scroll) .logo .logo__img--light{display:block;}nav .header.theme-light:not(.scroll) .logo .logo__img--dark{display:none;}nav .header.theme-light:not(.scroll) .hamburger:before,nav .header.theme-light:not(.scroll) .hamburger:after{border-color:#fff!important;}
34nav .header.theme-dark:not(.scroll){color:#000!important;}nav .header.theme-dark:not(.scroll) .logo .logo__img--light{display:none;}nav .header.theme-dark:not(.scroll) .logo .logo__img--dark{display:block;}nav .header.theme-dark:not(.scroll) .hamburger:before,nav .header.theme-dark:not(.scroll) .hamburger:after{border-color:#000!important;}nav .header.scroll .hamburger:before,nav .header.scroll .hamburger:after{border-color:#000000;}nav .header.scroll .logo__img--light{display:none;}nav .header.scroll .logo__img--dark{display:block;}nav .header.scroll .header__container{border-bottom-color:transparent;}nav .header.scroll .sub-nav{color:white;}nav .logo{display:block;z-index:911;position:relative;}nav .logo img{max-height:50px;max-width:200px;}@media (max-width: 992px){nav .logo img{max-width:150px;}}nav .logo__wrap{text-align:center;-webkit-animation-duration:1s;animation-duration:1s;}nav .logo__img--light{display:block;}nav .logo__img--dark{display:none;}@media (max-width: 1024px){nav .navigation{display:none;}}@media (max-width: 1200px){nav .navigation{width:100%;}}nav .navigation >ul{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;}@media (max-width: 1200px){nav .navigation >ul{-webkit-box-pack:space-around;-ms-flex-pack:space-around;-webkit-justify-content:space-around;justify-content:space-around;}}nav .navigation__item{padding:10px;margin-left:25px;}nav .navigation__item.sub-nav-container{position:relative;cursor:pointer;}nav .navigation__item.sub-nav-container:hover .navigation__link:after{width:100%;}nav .navigation__item.sub-nav-container:hover .sub-nav{display:block;}nav .navigation__item.sub-nav-container:hover .width-maker{display:block;}nav .navigation__item.sub-nav-container .width-maker{display:none;cursor:pointer;position:absolute;left:0;right:0;height:41px;}nav .navigation__item.sub-nav-container .sub-nav{display:none;position:absolute;bottom:-30px;width:175px;background-color:black;-webkit-transform:translateY(100%);-moz-transform:translateY(100%);-ms-transform:translateY(100%);transform:translateY(100%);}nav .navigation__item.sub-nav-container .sub-nav ul{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}nav .navigation__item.sub-nav-container .sub-nav ul li .nav-link{display:block;padding:12px 23px;}nav .navigation__item.sub-nav-container .sub-nav ul li .nav-link:hover{background-color:#262222;}@media (max-width: 992px){nav .navigation__item{padding:10px 15px;font-size:16px;}}@media (max-width: 1200px){nav .navigation__item{margin-left:0;}}nav .navigation__item.active .navigation__link{font-weight:700;}nav .navigation__link{color:inherit;display:block;position:relative;font-size:13px;line-height:1.2;background-color:transparent;border:none;cursor:pointer;transition-property:all;white-space:nowrap;}nav .navigation__link:after{position:absolute;content:'';display:block;width:0;height:1px;bottom:-2px;left:0;-webkit-transition:0.3s all ease;transition:0.3s all ease;background-color:#ffffff;}nav .navigation__link:hover:after{width:100%;}nav .hamburger{border:none;background-color:transparent;cursor:pointer;outline:none;z-index:915;-webkit-transition:0.3s all ease;transition:0.3s all ease;position:relative;padding:0;margin-left:25px;width:21px;height:21px;}nav .hamburger:before,nav .hamburger:after{position:absolute;content:'';height:3px;left:5px;right:5px;border-left:3px solid #ffffff;border-right:3px solid #ffffff;}nav .hamburger:before{top:5px;}nav .hamburger:after{bottom:5px;}body>div.sidemenu{background-color:rgba(0, 35, 73, 1);color:rgba(255, 255, 255, 1);--fontColor:rgba(255, 255, 255, 1);--fontColor_H:0;--fontColor_S:0%;--fontColor_L:100%;--fontColor_A:1;--fontColor_darkenDir:-1;--bgColor:rgba(0, 35, 73, 1);--bgColor_H:211;--bgColor_S:100%;--bgColor_L:14%;--bgColor_A:1;--bgColor_darkenDir:1;}body>div.sidemenu{position:fixed;z-index:950;left:50%;top:0;height:0;width:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;-webkit-transition:0.3s all ease;transition:0.3s all ease;min-height:auto;color:var(--fontColor, #ffffff);background-color:var(--bgColor, rgba(0,0,0,0.94));--socialColor:hsla(var(--fontColor_H), var(--fontColor_S), var(--fontColor_L), .6);}body>div.sidemenu.visible,body>div.sidemenu.in-pb{top:0;bottom:0;left:0;right:0;height:100vh;width:100vw;}body>div.sidemenu.in-pb{-webkit-transition:none;transition:none;}body>div.sidemenu body{color:var(--fontColor, #ffffff);background-color:var(--bgColor, rgba(0,0,0,0.94));--socialColor:hsla(var(--fontColor_H), var(--fontColor_S), var(--fontColor_L), .6);}body>div.sidemenu .sidemenu__header{padding:45px 0 35px;border-bottom:2px solid rgba(255, 255, 255, 0.24);display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;
34-webkit-justify-content:space-between;justify-content:space-between;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}body>div.sidemenu .sidemenu__close{width:20px;height:20px;position:relative;background-color:transparent;border:none;padding:0;cursor:pointer;}@media (max-width: 767px){body>div.sidemenu .sidemenu__close{margin-right:20px;}}body>div.sidemenu .sidemenu__close:before,body>div.sidemenu .sidemenu__close:after{content:'';display:block;position:absolute;width:18px;height:2px;left:50%;top:50%;background-color:var(--fontColor, #fff);}body>div.sidemenu .sidemenu__close:before{-webkit-transform:translate(-50%, -50%) rotate(45deg);-moz-transform:translate(-50%, -50%) rotate(45deg);-ms-transform:translate(-50%, -50%) rotate(45deg);transform:translate(-50%, -50%) rotate(45deg);}body>div.sidemenu .sidemenu__close:after{-webkit-transform:translate(-50%, -50%) rotate(-45deg);-moz-transform:translate(-50%, -50%) rotate(-45deg);-ms-transform:translate(-50%, -50%) rotate(-45deg);transform:translate(-50%, -50%) rotate(-45deg);}body>div.sidemenu .sidemenu__nav{margin:0;padding:50px 0;overflow-y:scroll;}body>div.sidemenu .sidemenu__nav::-webkit-scrollbar{width:6px;}body>div.sidemenu .sidemenu__nav::-webkit-scrollbar-track{background-color:rgba(32, 32, 32, 0.05);}body>div.sidemenu .sidemenu__nav::-webkit-scrollbar-button{background-color:transparent;height:0;}body>div.sidemenu .sidemenu__nav::-webkit-scrollbar-thumb{background-color:#535353;border-radius:3px;}@media (max-width: 767px){body>div.sidemenu .sidemenu__nav{padding:30px 0;}}body>div.sidemenu .sidemenu__nav ul{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;}@media (max-width: 767px){body>div.sidemenu .sidemenu__nav ul{-webkit-box-flex-wrap:nowrap;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;max-height:none;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}}body>div.sidemenu .sidemenu__item{padding:29px 0;display:block;width:50%;}@media (max-width: 767px){body>div.sidemenu .sidemenu__item{padding:13px 0;width:100%;}}body>div.sidemenu .sidemenu__link,body>div.sidemenu .sidemenu__grouped .title,body>div.sidemenu .sidemenu__grouped .title:after{color:var(--fontColor, #ffffff);font-size:36px;font-family:var(--global-primary-font-family);display:inline;padding:0;border:none;background-color:transparent;line-height:1.6;cursor:pointer;}@media (max-width: 767px){body>div.sidemenu .sidemenu__link,body>div.sidemenu .sidemenu__grouped .title,body>div.sidemenu .sidemenu__grouped .title:after{font-size:24px;}}body>div.sidemenu .sidemenu__grouped{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}body>div.sidemenu .sidemenu__grouped__wrapper{position:relative;}body>div.sidemenu .sidemenu__grouped__wrapper .title{padding-right:55px;border-bottom:1px solid currentColor;}@media(max-width: 768px){body>div.sidemenu .sidemenu__grouped__wrapper .title{border-bottom:none;}}body>div.sidemenu .sidemenu__grouped__wrapper .title:after{content:'+';position:absolute;right:0;}body>div.sidemenu .sidemenu__grouped__wrapper .sub-nav{max-height:0;overflow:hidden;opacity:0;-webkit-transition:max-height 0.2s linear;transition:max-height 0.2s linear;}body>div.sidemenu .sidemenu__grouped__wrapper .sub-nav ul{color:var(--fontColor, white);display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;margin-left:28px;}@media(max-width: 768px){body>div.sidemenu .sidemenu__grouped__wrapper .sub-nav ul{margin-left:20px;}}body>div.sidemenu .sidemenu__grouped__wrapper .sub-nav ul li{list-style:none;margin-bottom:17px;}body>div.sidemenu .sidemenu__grouped__wrapper .sub-nav ul li a{cursor:pointer;}body>div.sidemenu .sidemenu__grouped__wrapper .sub-nav ul li:last-of-type{margin-bottom:0;}body>div.sidemenu .sidemenu__grouped__wrapper:hover .title:after{content:'-';}body>
34div.sidemenu .sidemenu__grouped__wrapper:hover .sub-nav{margin-top:20px;max-height:120px;opacity:1;}body>div.sidemenu .sidemenu__grouped__wrapper:hover .sub-nav.three{max-height:170px;}body>div.sidemenu .sidemenu__grouped__wrapper:hover .sub-nav.four{max-height:230px;}body>div.sidemenu .sidemenu__grouped__wrapper:hover .sub-nav.five{max-height:280px;}body>div.sidemenu .sidemenu__grouped__wrapper:hover .sub-nav.more{max-height:450px;}body>div.sidemenu .sidemenu__footer{padding:40px 0 60px;border-top:2px solid rgba(255, 255, 255, 0.24);overflow:hidden;}@media (max-width: 767px){body>div.sidemenu .sidemenu__footer{padding:30px 0 50px;}}@media (max-width: 767px){body>div.sidemenu .sidemenu__footer{padding:30px 0 90px;}}body>div.sidemenu .sidemenu__socials{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end;}@media (max-width: 767px){body>div.sidemenu .sidemenu__socials{-webkit-box-pack:start;-ms-flex-pack:start;-webkit-justify-content:start;justify-content:start;}}body>div.sidemenu .sidemenu__socials.socials>li{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto;margin:10px 0 10px 30px;}@media (max-width: 767px){body>div.sidemenu .sidemenu__socials.socials>li{margin:10px 20px;}}@media (max-width: 580px){body>div.sidemenu .sidemenu__socials.socials>li{margin:10px;}}body>div.sidemenu .sidemenu__socials.socials .socials__item{color:#999999;color:var(--socialColor, #999);-webkit-transition:0.3s all ease;transition:0.3s all ease;background-color:transparent;border-color:transparent;font-size:unset;}body>div.sidemenu .sidemenu__socials.socials .socials__item:hover{color:var(--fontColor, #ffffff);background-color:transparent;border-color:transparent;}body>div.sidemenu .sidemenu .container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}@media (max-width: 767px){body>div.sidemenu .sidemenu .container{overflow-y:auto;}}body>div.sidemenu .logo{display:block;z-index:911;position:relative;}body>div.sidemenu .logo img{max-height:50px;max-width:200px;}@media (max-width: 992px){body>div.sidemenu .logo img{max-width:150px;}}body>div.sidemenu .logo__wrap{text-align:center;-webkit-animation-duration:1s;animation-duration:1s;}body>div.sidemenu .logo__img--light{display:block;}body>div.sidemenu .logo__img--dark{display:none;}body>div.sidemenu .body-fixed{overflow:hidden;}body>div.sidemenu .overflow-sidemenu{height:100vh;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;overflow:auto;}footer{background-color:rgba(255, 255, 255, 1);color:rgba(54, 54, 54, 1);--fontColor:rgba(54, 54, 54, 1);--fontColor_H:0;--fontColor_S:0%;--fontColor_L:21%;--fontColor_A:1;--fontColor_darkenDir:1;--bgColor:rgba(255, 255, 255, 1);--bgColor_H:0;--bgColor_S:0%;--bgColor_L:100%;--bgColor_A:1;--bgColor_darkenDir:-1;}footer .footer{padding:90px 0;background-color:inherit;color:inherit;overflow-y:hidden;}@media (max-width: 768px){footer .footer{padding:60px 0;}}footer .footer h4{margin:0;font-weight:bold;letter-spacing:1px;}footer .footer__logo{max-height:50px;max-width:200px;margin-bottom:20px;}footer .footer__info{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:10px;}@media (max-width: 768px){footer .footer__info{-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;}}footer .footer__info-column{-webkit-flex-basis:300px;-ms-flex-preferred-size:300px;flex-basis:300px;margin-bottom:30px;}footer .footer__info-column:first-child{margin-right:80px;}@media (max-width: 1024px){footer .footer__info-column:first-child{margin-right:0;}}@media (max-width: 768px){footer .footer__info-column:first-child{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto;}}footer .footer__info-column:nth-child(2n){margin-left:50px;margin-right:50px;}@media (max-width: 768px){footer .footer__info-column:nth-child(2n){margin-left:0;}}footer .footer__info-column:not(:first-child){-webkit-flex-basis:240p
34x;-ms-flex-preferred-size:240px;flex-basis:240px;}footer .footer__info-column:not(:first-child) div{color:inherit;}footer .footer__info-column h4{margin-top:10px;}@media (max-width: 768px){footer .footer__info-column h4{margin-bottom:5px;}}footer .footer__contact{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;}footer .footer__contact h4{margin-bottom:10px;}footer .footer__contact-column{margin-bottom:30px;}@media (max-width: 768px){footer .footer__contact-column{width:100%;}}footer .footer__contact-column:first-child{width:100%;max-width:595px;margin-right:125px;}@media (max-width: 768px){footer .footer__contact-column:first-child{margin-right:0;}}footer .footer__contact-form{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}@media (max-width: 540px){footer .footer__contact-form{-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;}}footer .footer__contact .loading input{pointer-events:none;}footer .footer__contact-input{-webkit-flex:1;-ms-flex:1;flex:1;border-right-width:0;padding:0 12px;}@media (max-width: 540px){footer .footer__contact-input{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;border-right-width:1px;margin-bottom:15px;}}@media (max-width: 540px){footer .footer__contact-submit{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;}}footer .footer__copyright{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-align-items:baseline;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline;border-top:2px solid #E0E0E0;padding-top:30px;margin-top:20px;}@media (max-width: 768px){footer .footer__copyright{-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;margin-top:10px;padding-top:20px;}}footer .footer__copyright a:hover{-webkit-text-decoration:underline;text-decoration:underline;}footer .footer__copyright .link{-webkit-text-decoration:underline;text-decoration:underline;}footer .footer__copyright p,footer .footer__copyright div{color:inherit;font-size:13px;line-height:1.54;margin-right:34px;}@media (max-width: 768px){footer .footer__copyright p,footer .footer__copyright div{font-size:14px;margin-top:10px;}}footer .footer__menu{margin-top:50px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end;}@media (max-width: 540px){footer .footer__menu{-webkit-box-pack:start;-ms-flex-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start;}}@media (max-width: 768px){footer .footer__menu{margin-top:15px;}}@media (max-width: 540px){footer .footer__menu{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;}}footer .footer__menu-item{cursor:pointer;font-size:13px;line-height:2.54;color:inherit;text-transform:capitalize;}@media (max-width: 540px){footer .footer__menu-item{margin-right:15px;margin-top:10px;}}footer .footer__menu-item:not(:first-child){margin-left:34px;}@media (max-width: 540px){footer .footer__menu-item:not(:first-child){margin-left:0;}}footer .footer__menu-item--active{font-weight:bold;}footer .footer .footer__design{font-size:18px;}footer .footer__disclaimer{margin-top:20px;opacity:0.6;}footer .footer__disclaimer>div{margin-top:20px;}footer .socials{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}footer .socials>li{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto;margin:4px 10px 4px 0;}@media (max-width: 768px){footer .socials>li{margin-right:25px;}}footer .socials__item{background-color:inherit;border:1px solid #eee;border-radius:100%;color:inherit;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;
34-webkit-justify-content:center;justify-content:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:36px;height:36px;font-size:14px;-webkit-transition:all 0.5s ease;transition:all 0.5s ease;}@media (hover: hover) and (pointer: fine) and (min-width: 1025px){footer .socials__item:hover{background:#eee;}}footer .thank-you-modal{position:fixed;z-index:101;left:0;right:0;top:0;bottom:0;background-color:rgba(0, 0, 0, 0.7);color:white;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;text-align:center;}footer .thank-you-modal h2{white-space:pre-wrap;margin-bottom:45px;}footer .thank-you-modal.closed{display:none;}footer .h-pot{height:0;width:0;overflow:hidden;visibility:hidden;line-height:0;font-size:0;position:absolute;}footer .logo-light{display:none;}footer.is-background-color-dark .logo-dark{display:none;}footer.is-background-color-dark .logo-light{display:inline;}footer .img-wrap{max-width:100px;width:100%;display:block;}footer .img-wrap img{width:100%;object-fit:cover;}@media(max-width: 768px){footer .img-wrap{-webkit-order:1;-ms-flex-order:1;order:1;}}footer .lp-footer-disclaimers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;gap:20px;padding-top:30px;margin-top:20px;}@media (max-width: 768px){footer .lp-footer-disclaimers{-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;margin-top:10px;padding-top:20px;}}body>div.mobile-contact-wrapper{z-index:200;position:relative;}body>div.mobile-contact-wrapper .lp-ico:before{content:'';width:1em;height:1em;background-color:currentColor;-webkit-background-size:cover;background-size:cover;display:block;-webkit-mask-position:center;-webkit-mask-position:center;mask-position:center;-webkit-mask-size:contain;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-transition:all .3s;transition:all .3s;}body>div.mobile-contact-wrapper .lp-ico-search:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='25' height='25' viewB
34ox='0 0 25 25' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21.6231 21.3002L17.1372 16.8143M19.5606 10.9877C19.5606 15.5441 15.8669 19.2377 11.3106 19.2377C6.75421 19.2377 3.06055 15.5441 3.06055 10.9877C3.06055 6.43135 6.75421 2.73769 11.3106 2.73769C15.8669 2.73769 19.5606 6.43135 19.5606 10.9877Z' stroke='black' stroke-width='1.82813' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='25' height='25' viewBox='0 0 25 25' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21.6231 21.3002L17.1372 16.8143M19.5606 10.9877C19.5606 15.5441 15.8669 19.2377 11.3106 19.2377C6.75421 19.2377 3.06055 15.5441 3.06055 10.9877C3.06055 6.43135 6.75421 2.73769 11.3106 2.73769C15.8669 2.73769 19.5606 6.43135 19.5606 10.9877Z' stroke='black' stroke-width='1.82813' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='25' height='25' viewBox='0 0 25 25' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21.6231 21.3002L17.1372 16.8143M19.5606 10.9877C19.5606 15.5441 15.8669 19.2377 11.3106 19.2377C6.75421 19.2377 3.06055 15.5441 3.06055 10.9877C3.06055 6.43135 6.75421 2.73769 11.3106 2.73769C15.8669 2.73769 19.5606 6.43135 19.5606 10.9877Z' stroke='black' stroke-width='1.82813' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");}body>div.mobile-contact-wrapper .lp-ico-arrow-top:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='17' height='16' viewBox='0 0 17 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.8716 9.99976L8.87158 5.99976L4.87158 9.99976' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='17' height='16' viewBox='0 0 17 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.8716 9.99976L8.87158 5.99976L4.87158 9.99976' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='17' height='16' viewBox='0 0 17 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.8716 9.99976L8.87158 5.99976L4.87158 9.99976' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");}body>div.mobile-contact-wrapper .lp-ico-scroll-top:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21 3H3M12 21V7M12 7L5 14M12 7L19 14' stroke='white' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E ");-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21 3H3M12 21V7M12 7L5 14M12 7L19 14' stroke='white' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E ");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21 3H3M12 21V7M12 7L5 14M12 7L19 14' stroke='white' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E ");}body>div.mobile-contact-wrapper .lp-ico-close:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M17.5986 6.32617L5.59863 18.3262M5.59863 6.32617L17.5986 18.3262' stroke='white' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E ");-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M17.5986 6.32617L5.59863 18.3262M5.59863 6.32617L17.5986 18.3262' stroke='white' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E ");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M17.5986 6.32617L5.59863 18.3262M5.59863 6.32617L17.5986 18.3262' stroke='white' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E ");}body>div.mobile-contact-wrapper .lp-ico-phone:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M13.8
34699 6.57142C14.7459 6.74157 15.551 7.16808 16.1821 7.79637C16.8132 8.42465 17.2416 9.22612 17.4126 10.0982M13.8699 3C15.6899 3.20128 17.3871 4.01265 18.6827 5.3009C19.9784 6.58914 20.7955 8.27768 21 10.0893M10.4412 13.592C9.36357 12.5192 8.51264 11.3061 7.88843 10.0118C7.83474 9.90047 7.80789 9.84481 7.78726 9.77437C7.71397 9.52405 7.76662 9.21668 7.91909 9.00469C7.962 8.94504 8.01326 8.894 8.11578 8.79194C8.42933 8.47979 8.58611 8.32372 8.6886 8.16677C9.07515 7.57491 9.07515 6.81189 8.6886 6.22002C8.58611 6.06308 8.42933 5.90701 8.11578 5.59486L7.94101 5.42087C7.46438 4.94637 7.22607 4.70912 6.97012 4.58024C6.4611 4.32392 5.85996 4.32392 5.35093 4.58024C5.09499 4.70912 4.85667 4.94637 4.38004 5.42087L4.23867 5.56161C3.76367 6.03449 3.52617 6.27093 3.34478 6.59239C3.1435 6.94909 2.99878 7.5031 3.00001 7.91222C3.00111 8.28092 3.07295 8.53291 3.21664 9.03688C3.98881 11.7453 5.44574 14.3009 7.58743 16.4331C9.72911 18.5652 12.2963 20.0156 15.0168 20.7843C15.523 20.9274 15.7761 20.9989 16.1465 21C16.5575 21.0012 17.114 20.8571 17.4723 20.6568C17.7952 20.4762 18.0327 20.2397 18.5077 19.7669L18.649 19.6261C19.1257 19.1516 19.364 18.9144 19.4934 18.6596C19.7509 18.1528 19.7509 17.5544 19.4934 17.0476C19.364 16.7928 19.1257 16.5556 18.649 16.0811L18.4743 15.9071C18.1607 15.5949 18.0039 15.4388 17.8463 15.3368C17.2518 14.952 16.4853 14.952 15.8908 15.3368C15.7332 15.4388 15.5764 15.5949 15.2628 15.9071C15.1603 16.0091 15.1091 16.0602 15.0491 16.1029C14.8362 16.2547 14.5274 16.3071 14.276 16.2341C14.2052 16.2136 14.1493 16.1869 14.0375 16.1334C12.7374 15.512 11.5189 14.6648 10.4412 13.592Z' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M13.8699 6.57142C14.7459 6.74157 15.551 7.16808 16.1821 7.79637C16.8132 8.42465 17.2416 9.22612 17.4126 10.0982M13.8699 3C15.6899 3.20128 17.3871 4.01265 18.6827 5.3009C19.9784 6.58914 20.7955 8.27768 21 10.0893M10.4412 13.592C9.36357 12.5192 8.51264 11.3061 7.88843 10.0118C7.83474 9.90047 7.80789 9.84481 7.78726 9.77437C7.71397 9.52405 7.76662 9.21668 7.91909 9.00469C7.962 8.94504 8.01326 8.894 8.11578 8.79194C8.42933 8.47979 8.58611 8.32372 8.6886 8.16677C9.07515 7.57491 9.07515 6.81189 8.6886 6.22002C8.58611 6.06308 8.42933 5.90701 8.11578 5.59486L7.94101 5.42087C7.46438 4.94637 7.22607 4.70912 6.97012 4.58024C6.4611 4.32392 5.85996 4.32392 5.35093 4.58024C5.09499 4.70912 4.85667 4.94637 4.38004 5.42087L4.23867 5.56161C3.76367 6.03449 3.52617 6.27093 3.34478 6.59239C3.1435 6.94909 2.99878 7.5031 3.00001 7.91222C3.00111 8.28092 3.07295 8.53291 3.21664 9.03688C3.98881 11.7453 5.44574 14.3009 7.58743 16.4331C9.72911 18.5652 12.2963 20.0156 15.0168 20.7843C15.523 20.9274 15.7761 20.9989 16.1465 21C16.5575 21.0012 17.114 20.8571 17.4723 20.6568C17.7952 20.4762 18.0327 20.2397 18.5077 19.7669L18.649 19.6261C19.1257 19.1516 19.364 18.9144 19.4934 18.6596C19.7509 18.1528 19.7509 17.5544 19.4934 17.0476C19.364 16.7928 19.1257 16.5556 18.649 16.0811L18.4743 15.9071C18.1607 15.5949 18.0039 15.4388 17.8463 15.3368C17.2518 14.952 16.4853 14.952 15.8908 15.3368C15.7332 15.4388 15.5764 15.5949 15.2628 15.9071C15.1603 16.0091 15.1091 16.0602 15.0491 16.1029C14.8362 16.2547 14.5274 16.3071 14.276 16.2341C14.2052 16.2136 14.1493 16.1869 14.0375 16.1334C12.7374 15.512 11.5189 14.6648 10.4412 13.592Z' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M13.8699 6.57142C14.7459 6.74157 15.551 7.16808 16.1821 7.79637C16.8132 8.42465 17.2416 9.22612 17.4126 10.0982M13.8699 3C15.6899 3.20128 17.3871 4.01265 18.6827 5.3009C19.9784 6.58914 20.7955 8.27768 21 10.0893M10.4412 13.592C9.36357 12.5192 8.51264 11.3061 7.88843 10.0118C7.83474 9.90047 7.80789 9.84481 7.78726 9.77437C7.71397 9.52405 7.76662 9.21668 7.91909 9.00469C7.962 8.94504 8.01326 8.894 8.11578 8.79194C8.42933 8.47979 8.58611 8.32372 8.6886 8.16677C9.07515 7.57491 9.07515 6.81189 8.6886 6.22002C8.58611 6.06308 8.42933 5.90701 8.11578 5.59486L7.94101 5.42087C7.46438 4.94637 7.22607 4.70912 6.97012 4.58024C6.4611 4.32392 5.85996 4.32392 5.35093 4.58024C5.09499 4.70912 4.85667 4.94637 4.38004 5.42087L4.23867 5.56161C3.76367 6.03449 3.52617 6.27093 3.34478 6.59239C3.1435 6.94909 2.99878 7.5031 3.00001 7.91222C3.00111 8.28092 3.07295 8.53291 3.21664 9.03688C3.98881 11.7453 5.44574 14.3009 7.58743 16.4331C9.72911 18.5652 12.2963 20.0156 15.0168 20.7843C15.523 20.9274 15.7761 20.9989 16.1465 21C16.5575 21.0012 17.114 20.8571 17.4723 20.6568C17.7952 20.4762 18.0327 20.2397 18.5077 19.7669L18.649 19.6261C19.1257 19.1516 19.364 18.9144 19.4934 18.6596C19.7509 18.1528 19.7509 17.5544 19.4934 17.0476C19.364 16.7928 19.1257 16.5556 18.649 16.0811L18.4743 15.9071C18.1607 15.5949 18.0039 15.4388 17.8463 15.3368C17.2518 14.952 16.4853 14.952 15.8908 15.3368C15.7332 15.4388 15.5764 15.5949 15.2628 15.9071C15.1603 16.0091 15.1091 16.0602 15.0491 16.1029C14.8362 16.2547 14.5274 16.3071 14.276 16.2341C14.2052 16.2136 14.1493 16.1869 14.0375 16.1334C12.7374 15.512 11.5189 14.6648 10.4412 13.592Z' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");}body>div.mobile-contact-wrapper .lp-ico-sms:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21 11.5C21.0034 12.8199 20.6951 14.1219 20.1 15.3C19.3944 16.7117 18.3098 17.8992 16.9674 18.7293C15.6251 19.5594 14.0782 19.9994 12.5 20C11.1801 20.0034 9.87812 19.6951 8.7 19.1L3 21L4.9 15.3C4.30493 14.1219 3.99656 12.8199 4 11.5C4.00061 9.92176 4.44061 8.37485 5.27072 7.03255C6.10083 5.69025 7.28825 4.60557 8.7 3.9C9.87812 3.30493 11.1801 2.99656 12.5 3H13C15.0843 3.11499 17.053 3.99476 18.5291 5.47086C20.0052 6.94695 20.885 8.91565 21 11V11.5Z' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21 11.5C21.0034 12.8199 20.6951 14.1219 20.1 15.3C19.3944 16.7117 18.3098 17.8992 16.9674 18.7293C15.6251 19.5594 14.0782 19.9994 12.5 20C11.1801 20.0034 9.87812 19.6951 8.7 19.1L3 21L4.9 15.3C4.30493 14.1219 3.99656 12.8199 4 11.5C4.00061 9.92176 4.44061 8.37485 5.27072 7.03255C6.10083 5.69025 7.28825 4.60557 8.7 3.9C9.87812 3.30493 11.1801 2.99656 12.5 3H13C15.0843 3.11499 17.053 3.99476 18.5291 5.47086C20.0052 6.94695 20.885 8.91565 21 11V11.5Z' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21 11.5C21.0034 12.8199 20.6951 14.1219 20.1 15.3C19.3944 16.7117 18.3098 17.8992 16.9674 18.7293C15.6251 19.5594 14.0782 19.9994 12.5 20C11.1801 20.0034 9.87812 19.6951 8.7 19.1L3 21L4.9 15.3C4.30493 14.1219 3.99656 12.8199 4 11.5C4.00061 9.92176 4.44061 8.37485 5.27072 7.03255C6.10083 5.69025 7.28825 4.60557 8.7 3.9C9.87812 3.30493 11.1801 2.99656 12.5 3H13C15.0843 3.11499 17.053 3.99476 18.5291 5.47086C20.0052 6.94695 20.885 8.91565 21 11V11.5Z' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");}body>div.mobile-contact-wrapper .lp-ico-email:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21.5 18L14.85
3471 12M9.14286 12L2.50003 18M2 7L10.1649 12.7154C10.8261 13.1783 11.1567 13.4097 11.5163 13.4993C11.8339 13.5785 12.1661 13.5785 12.4837 13.4993C12.8433 13.4097 13.1739 13.1783 13.8351 12.7154L22 7M6.8 20H17.2C18.8802 20 19.7202 20 20.362 19.673C20.9265 19.3854 21.3854 18.9265 21.673 18.362C22 17.7202 22 16.8802 22 15.2V8.8C22 7.11984 22 6.27976 21.673 5.63803C21.3854 5.07354 20.9265 4.6146 20.362 4.32698C19.7202 4 18.8802 4 17.2 4H6.8C5.11984 4 4.27976 4 3.63803 4.32698C3.07354 4.6146 2.6146 5.07354 2.32698 5.63803C2 6.27976 2 7.11984 2 8.8V15.2C2 16.8802 2 17.7202 2.32698 18.362C2.6146 18.9265 3.07354 19.3854 3.63803 19.673C4.27976 20 5.11984 20 6.8 20Z' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21.5 18L14.8571 12M9.14286 12L2.50003 18M2 7L10.1649 12.7154C10.8261 13.1783 11.1567 13.4097 11.5163 13.4993C11.8339 13.5785 12.1661 13.5785 12.4837 13.4993C12.8433 13.4097 13.1739 13.1783 13.8351 12.7154L22 7M6.8 20H17.2C18.8802 20 19.7202 20 20.362 19.673C20.9265 19.3854 21.3854 18.9265 21.673 18.362C22 17.7202 22 16.8802 22 15.2V8.8C22 7.11984 22 6.27976 21.673 5.63803C21.3854 5.07354 20.9265 4.6146 20.362 4.32698C19.7202 4 18.8802 4 17.2 4H6.8C5.11984 4 4.27976 4 3.63803 4.32698C3.07354 4.6146 2.6146 5.07354 2.32698 5.63803C2 6.27976 2 7.11984 2 8.8V15.2C2 16.8802 2 17.7202 2.32698 18.362C2.6146 18.9265 3.07354 19.3854 3.63803 19.673C4.27976 20 5.11984 20 6.8 20Z' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21.5 18L14.8571 12M9.14286 12L2.50003 18M2 7L10.1649 12.7154C10.8261 13.1783 11.1567 13.4097 11.5163 13.4993C11.8339 13.5785 12.1661 13.5785 12.4837 13.4993C12.8433 13.4097 13.1739 13.1783 13.8351 12.7154L22 7M6.8 20H17.2C18.8802 20 19.7202 20 20.362 19.673C20.9265 19.3854 21.3854 18.9265 21.673 18.362C22 17.7202 22 16.8802 22 15.2V8.8C22 7.11984 22 6.27976 21.673 5.63803C21.3854 5.07354 20.9265 4.6146 20.362 4.32698C19.7202 4 18.8802 4 17.2 4H6.8C5.11984 4 4.27976 4 3.63803 4.32698C3.07354 4.6146 2.6146 5.07354 2.32698 5.63803C2 6.27976 2 7.11984 2 8.8V15.2C2 16.8802 2 17.7202 2.32698 18.362C2.6146 18.9265 3.07354 19.3854 3.63803 19.673C4.27976 20 5.11984 20 6.8 20Z' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");}body>div.mobile-contact-wrapper a{-webkit-text-decoration:none;text-decoration:none;}body>div.mobile-contact-wrapper .btn-holder{bottom:-50px;left:19px;position:fixed;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;gap:13px;opacity:0;-webkit-transition:all .3s;transition:all .3s;}@media (max-width: 1024px){body>div.mobile-contact-wrapper .btn-holder{right:19px;padding:0 48px;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;}}body>div.mobile-contact-wrapper .btn-holder.visible{bottom:28px;opacity:1;}body>div.mobile-contact-wrapper .search-btn{width:48px;height:48px;border-radius:999px;font-size:0;line-height:0;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-transition:all .3s;transition:all .3s;padding:12px;color:#141414;background:#fff;}@media (max-width: 1024px){body>div.mobile-contact-wrapper .search-btn{position:absolute;left:0;bottom:0;}}body>div.mobile-contact-wrapper .search-btn:before{width:24px;height:24px;}body>div.mobile-contact-wrapper .connect-btn{height:48px;padding:0 24px;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:4px;text-transform:uppercase;border-radius:25px;color:var(--pillTextColor);background:var(--pillBackgroundColor);border:1px solid rgba(255, 255, 255, 0.2);cursor:pointer;font-size:10px;font-style:normal;font-weight:500;line-height:16px;letter-spacing:0.4px;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-webkit-transition:all .4s;transition:all .4s;box-shadow:0 0 0 0 rgba(255, 255, 255, 0.2);-webkit-animation:pulsate 2s ease infinite;animation:pulsate 2s ease infinite;}body>div.mobile-contact-wrapper .connect-btn:before{width:16px;height:16px;}body>div.mobile-contact-wrapper .pop-up{display:none;position:fixed;bottom:0;left:0;width:100%;-webkit-transition:all .3s;transition:all .3s;border-radius:16px 16px 0 0;color:var(--textColor);background:var(--backgroundColor);}@media (max-height: 850px){body>div.mobile-contact-wrapper .pop-up{max-height:85vh;overflow-y:auto;}}@media (min-width: 1025px){body>div.mobile-contact-wrapper .pop-up{max-height:none;overflow-y:initial;max-width:637px;border-radius:16px;bottom:28px;left:19px;}}body>div.mobile-contact-wrapper .pop-up .lp-container{padding-top:24px;padding-bottom:24px;-webkit-box-pack:center;-ms-flex-pack:center;
34-webkit-justify-content:center;justify-content:center;}@media (min-width: 1025px){body>div.mobile-contact-wrapper .pop-up .lp-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding-top:40px;padding-bottom:40px;min-height:450px;padding-left:56px;padding-right:56px;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}}body>div.mobile-contact-wrapper .pop-up .close-btn{width:44px;height:44px;background-color:transparent;border-color:transparent;display:block;margin:24px auto 0;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:var(--textColor);cursor:pointer;padding:10px;border:0;}body>div.mobile-contact-wrapper .pop-up .close-btn:before{width:24px;height:24px;}@media (min-width: 1025px){body>div.mobile-contact-wrapper .pop-up .close-btn{position:absolute;top:14px;right:12px;margin:0;}}body>div.mobile-contact-wrapper .pop-up .icon-btn{width:44px;height:44px;border-radius:999px;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-left:8px;color:var(--textColor);position:relative;}body>div.mobile-contact-wrapper .pop-up .icon-btn:after{position:absolute;bottom:0;width:100%;left:0;border-radius:999px;
34height:100%;content:'';border:solid 1px var(--textColor);opacity:.3;}body>div.mobile-contact-wrapper .pop-up .icon-btn:before{width:24px;height:24px;}body>div.mobile-contact-wrapper .success-block{display:none;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}@media (min-width: 1025px){body>div.mobile-contact-wrapper .success-block{-webkit-align-items:flex-start;-webkit-box-align:flex-start;-ms-flex-align:flex-start;align-items:flex-start;}}body>div.mobile-contact-wrapper .success-block .lp-btn{margin-top:24px;}body>div.mobile-contact-wrapper .contact-form{margin:0;}@media (max-width: 1024px){body>div.mobile-contact-wrapper .contact-form__item{width:100%;}}body>div.mobile-contact-wrapper .contact-form__item .lp-input{width:100%;}body>div.mobile-contact-wrapper .contact-form__item .is-placeholder{color:#818181;}body>div.mobile-contact-wrapper .contact-form__item+.contact-form__item{margin-top:16px;}body>div.mobile-contact-wrapper .contact-form.show-success .contact-form__container,body>div.mobile-contact-wrapper .contact-form.success .contact-form__container{display:none;}body>div.mobile-contact-wrapper .contact-form.show-success .success-block,body>div.mobile-contact-wrapper .contact-form.success .success-block{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}body>div.mobile-contact-wrapper .contact-form .lp-disclaimer{margin-top:16px;}body>div.mobile-contact-wrapper .contact-form .lp-h3{margin-bottom:16px;}body>div.mobile-contact-wrapper .success-message{font-size:22px;}@-webkit-keyframes pulsate{0%{box-shadow:0 0 0 0 rgba(255, 255, 255, 0.2);}50%{box-shadow:0 0 4px 6px rgba(255, 255, 255, .5);}100%{box-shadow:0 0 12px 12px rgba(255, 255, 255, 0);}} 35 </style> 36 <style id="custom-style-css">.hyperlink-style-1{color:#363636!important;}.hyperlink-style-1:hover{color:#C4A965!important;}.social_icons-style-1 a{border-color:rgba(255, 255, 255, 1)!important;background-color:rgba(255, 255, 255, 0)!important;color:rgba(255, 255, 255, 1)!important;}.social_icons-style-1 a:hover{border-color:#FFFFFF!important;background-color:#FFFFFF!important;color:#002349!important;}.social_icons-style-1 a i{color:inherit!important;}
36.social_icons-style-1 a svg,.social_icons-style-1 a svg path{fill:currentColor!important;}.pagination-style-1 li a{color:#002349!important;background-color:rgba(255, 255, 255, 0.08)!important;border-color:rgba(0, 0, 0, 0)!important;}.pagination-style-1 li a:hover{color:rgba(255, 255, 255, 1)!important;background-color:#002349!important;border-color:#002349!important;}.pagination-style-1 li.active a{color:rgba(255, 255, 255, 1)!important;background-color:#002349!important;border-color:#002349!important;}.button-style-1{color:rgba(255, 255, 255, 1)!important;background-color:#002349!important;border-color:#002349!important;}.button-style-1:hover{color:#002349!important;background-color:rgba(0, 0, 0, 0)!important;border-color:#002349!important;}.hyperlink-style-2{color:rgba(255, 255, 255, 1)!important;}.hyperlink-style-2:hover{color:#FFFFFF!important;}.social_icons-style-2 a{border-color:#002349!important;background-color:rgba(255, 255, 255, 0)!important;color:#002349!important;}.social_icons-style-2 a:hover{border-color:#002349!important;background-color:#002349!important;color:rgba(255,255,255,1)!important;}.social_icons-style-2 a i{color:inherit!important;}
36.social_icons-style-2 a svg,.social_icons-style-2 a svg path{fill:currentColor!important;}.button-style-2{color:#002349!important;background-color:rgba(255,255,255,1)!important;border-color:#FFFFFF!important;}.button-style-2:hover{color:#FFFFFF!important;background-color:rgba(0, 0, 0, 0)!important;border-color:rgba(255, 255, 255, 1)!important;}.pagination-style-2 li a{color:rgba(255, 255, 255, 1)!important;background-color:rgba(255, 255, 255, 0.08)!important;border-color:rgba(0, 0, 0, 0)!important;}.pagination-style-2 li a:hover{color:#002349!important;background-color:rgba(255, 255, 255, 1)!important;border-color:rgba(255, 255, 255, 0.98)!important;}.pagination-style-2 li.active a{color:#002349!important;background-color:rgba(255, 255, 255, 1)!important;border-color:rgba(255, 255, 255, 0.98)!important;}.button-style-3{color:#002349!important;background-color:rgba(0, 0, 0, 0)!important;border-color:#002349!important;}.button-style-3:hover{color:#FFFFFF!important;background-color:#002349!important;border-color:#002349!important;}.button-style-4{color:rgba(255, 255, 255, 1)!important;background-color:rgba(0, 0, 0, 0)!important;border-color:rgba(255, 255, 255, 1)!important;}.button-style-4:hover{color:#002349!important;background-color:#FFFFFF!important;border-color:rgba(255, 255, 255, 1)!important;}</style> 37 <!-- LP Consent bootstrap: blocking; resolves consent state, pushes Consent Mode 38 defaults, and dynamically loads the locale + main (and banner if needed). --> 39
39<script src="https://cdn.luxurypresence.com/scripts/lp-consent/latest/lp-consent-boot.js" data-website-id="d1c655e7-3a6b-4818-8bf8-e4b0b6f106a0"></script>
39 40 41 42
42<script> 43 (function utmParse() { 44 const url = new URL(window.location.href); 45 if (url.search) { 46 const utm = url.search.split(/\?|&/g).reduce((acc, current) => { 47 const matched = current.match(/utm_(content|campaign|medium|source|term|id)|gclid/g); 48 if (matched) { 49 acc[matched[0]] = current.replace(`${matched[0]}=`, ''); 50 } 51 return acc; 52 }, {}); 53 if (Object.keys(utm).length) { 54 window.localStorage.setItem('utm_vars', JSON.stringify(utm)); 55 } else { 56 // Remove old utm vars 57 window.localStorage.removeItem('utm_vars'); 58 } 59 } 60 // Set referrer in local storage 61 // This is meant to be stored once to avoid self-referrals and to have the first referrer only. 62 if (!window.localStorage.getItem('referrer')) { 63 // Capture the Referrer URL 64 const referrer = document.referrer; 65 if (referrer) { 66 // Only store the referrer if it comes from outside the current domain (to avoid self-referrals) 67 const currentDomain = window.location.hostname; 68 const referrerDomain = new URL(referrer).hostname; 69 70 if (referrerDomain !== currentDomain) { 71 // Store it in localStorage 72 localStorage.setItem('referrer', referrer); 73 } 74 } 75 } 76 })(); 77 </script>
77 78 <!-- Bing Webmaster Tools Verification -->
79<script> 80 // Check if on the homepage before the body loads 81 if (window.location.pathname === '/' || window.location.pathname === '/index.html') { 82 document.write('<meta name="msvalidate.01" content="9444E455BC3D007F3F70BCA3F6F54DD2" />'); 83 } 84</script>
84 85 <!-- GOOGLE TRANSLATE STYLES are moved to external CSS --> 86</head> 87<body> 88 <div id="google_translate_element" style="display: none"></div> 89 90 <nav id="global-navbar" data-el-id="c6df654b-56d8-483a-8f3d-5581e27f1aa6"> 91 <header class="header theme-auto"> 92 <div class="container"> 93 <div class="header__container"> 94 <div class="logo__wrap fadeInUp"> 95 <a href="/" class="logo"> 96 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1280/https://media-production.lp-cdn.com/media/8c22713d-b8ce-47c3-8d0a-662f7cb1f19f" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=320/https://media-production.lp-cdn.com/media/8c22713d-b8ce-47c3-8d0a-662f7cb1f19f 320w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/8c22713d-b8ce-47c3-8d0a-662f7cb1f19f 960w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1280/https://media-production.lp-cdn.com/media/8c22713d-b8ce-47c3-8d0a-662f7cb1f19f 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1920/https://media-production.lp-cdn.com/media/8c22713d-b8ce-47c3-8d0a-662f7cb1f19f 1920w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=2560/https://media-production.lp-cdn.com/media/8c22713d-b8ce-47c3-8d0a-662f7cb1f19f 2560w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=3456/https://media-production.lp-cdn.com/media/8c22713d-b8ce-47c3-8d0a-662f7cb1f19f 3456w" alt="Dark Logo" sizes="250px" class="logo__img--dark"> 97 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1280/https://media-production.lp-cdn.com/media/de18bfb5-2a1b-46cd-aa0e-077c7cb3c82c" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=320/https://media-production.lp-cdn.com/media/de18bfb5-2a1b-46cd-aa0e-077c7cb3c82c 320w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/de18bfb5-2a1b-46cd-aa0e-077c7cb3c82c 960w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1280/https://media-production.lp-cdn.com/media/de18bfb5-2a1b-46cd-aa0e-077c7cb3c82c 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1920/https://media-production.lp-cdn.com/media/de18bfb5-2a1b-46cd-aa0e-077c7cb3c82c 1920w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=2560/https://media-production.lp-cdn.com/media/de18bfb5-2a1b-46cd-aa0e-077c7cb3c82c 2560w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=3456/https://media-production.lp-cdn.com/media/de18bfb5-2a1b-46cd-aa0e-077c7cb3c82c 3456w" alt="Light Logo" sizes="250px" class="logo__img--light"> 98 </a> 99 </div> 100 <div class="header__right"> 101 <div class="navigation"> 102 <ul> 103 <li class="navigation__item sub-nav-container wow fadeInUp" data-wow-delay="1.0s"> 104 <a href="#" class="navigation__link">Properties</a> 105 <div class="width-maker"></div> 106 <div class="sub-nav"> 107 <ul> 108 <li><a href="/properties/sale" class="nav-link">Featured Properties</a></li> 109 <li><a href="/properties/sold" class="nav-link">Past Transactions</a></li> 110 </ul> 111 </div> 112 </li> 113 <li class="navigation__item wow fadeInUp" data-wow-delay="1.1s"> 114 <a href="/home-search/listings" class="navigation__link"> 115 Home Search 116 </a> 117 </li> 118 <li class="navigation__item wow fadeInUp" data-wow-delay="1.2s"> 119 <a href="/home-valuation" class="navigation__link"> 120 Home Valuation 121 </a> 122 </li> 123 <li class="navigation__item wow fadeInUp" data-wow-delay="1.3s"> 124 <a href="/neighborhoods" class="navigation__link"> 125 Neighborhoods 126 </a> 127 </li> 128 <li class="navigation__item sub-nav-container wow fadeInUp" data-wow-delay="1.4s"> 129 <a href="#" class="navigation__link">Contact</a> 130 <div class="width-maker"></div> 131 <div class="sub-nav"> 132 <ul> 133 <li><a href="tel:6166440819" class="nav-link">M: 616.644.0819</a></li> 134 <li><a href="tel:5177778224" class="nav-link">O: 517.777.8224</a></li> 135 <li><a class="nav-link" data-type="CONTACT_US">Let's Connect</a></li> 136 </ul> 137 </div> 138 </li> 139 </ul> 140 </div> 141 142 <button class="hamburger hamburger-component"></button> 143 </div> 144 </div> 145 </div> 146</header> 147 </nav> 148 <div id="global-sidemenu" class="sidemenu" data-el-id="658e5a45-06d4-4ed8-9889-e0ecffb58567"> 149 <div class="container overflow-sidemenu"> 150 <header class="sidemenu__header"> 151 <a href="/" class="logo"> 152 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1280/https://media-production.lp-cdn.com/media/de18bfb5-2a1b-46cd-aa0e-077c7cb3c82c" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=320/https://media-production.lp-cdn.com/media/de18bfb5-2a1b-46cd-aa0e-077c7cb3c82c 320w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/de18bfb5-2a1b-46cd-aa0e-077c7cb3c82c 960w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1280/https://media-production.lp-cdn.com/media/de18bfb5-2a1b-46cd-aa0e-077c7cb3c82c 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1920/https://media-production.lp-cdn.com/media/de18bfb5-2a1b-46cd-aa0e-077c7cb3c82c 1920w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=2560/https://media-production.lp-cdn.com/media/de18bfb5-2a1b-46cd-aa0e-077c7cb3c82c 2560w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=3456/https://media-production.lp-cdn.com/media/de18bfb5-2a1b-46cd-aa0e-077c7cb3c82c 3456w" alt="logo" sizes="200px" class="logo__img--light"> 153 </a> 154 155 <button class="sidemenu__close toggle"></button> 156 </header> 157 158 <div class="sidemenu__nav"> 159 <ul> 160 <li class="sidemenu__item"> 161 <a href="/" class="sidemenu__link">Home</a> 162 </li> 163 <li class="sidemenu__item"> 164 <a href="/about" class="sidemenu__link">About Josh</a> 165 </li> 166 <li class="sidemenu__item"> 167 <!--Onclick is added to make work hover on iPhone--> 168 <div class="sidemenu__grouped" onclick=""> 169 <div class="sidemenu__grouped__wrapper"> 170 <div class="title">Properties</div> 171 <div class="sub-nav "> 172 <ul> 173 <li><a href="/properties/sale" class="nav-link primary-font">Featured Properties</a></li> 174 <li><a href="/properties/sold" class="nav-link primary-font">Past Transactions</a></li> 175 </ul> 176 </div> 177 </div> 178 </div> 179 </li> 180 <li class="sidemenu__item"> 181 <a href="/home-search/listings" class="sidemenu__link">Home Search</a> 182 </li> 183 <li class="sidemenu__item"> 184 <a href="/home-valuation" class="sidemenu__link">Home Valuation</a> 185 </li> 186 <li class="sidemenu__item"> 187 <a href="/neighborhoods" class="sidemenu__link">Neighborhoods</a> 188 </li> 189 <li class="sidemenu__item"> 190 <a href="/testimonials" class="sidemenu__link">Testimonials</a> 191 </li> 192 <li class="sidemenu__item"> 193 <!--Onclick is added to make work hover on iPhone--> 194 <div class="sidemenu__grouped" onclick=""> 195 <div class="sidemenu__grouped__wrapper"> 196 <div class="title">Resources</div> 197 <div class="sub-nav "> 198 <ul> 199 <li><a href="/about-sir" class="nav-link primary-font">About the Brand</a></li> 200 <li><a href="/auction" class="nav-link primary-font">Sotheby'
200s Auction House</a></li> 201 </ul> 202 </div> 203 </div> 204 </div> 205 </li> 206 <li class="sidemenu__item"> 207 <a href="/blog" class="sidemenu__link">Blog</a> 208 </li> 209 <li class="sidemenu__item"> 210 <a href="/contact" class="sidemenu__link">Let's Connect</a> 211 </li> 212 <li class="sidemenu__item"> 213 <a href="/home-search/account" class="sidemenu__link">My Search Portal</a> 214 </li> 215 </ul> 216 </div> 217 218 <div class="sidemenu__footer "> 219 <ul class="lp-socials social_icons-style-1 sidemenu__socials socials"> 220 221 <li> 222 <a 223 href="https://www.instagram.com/jnelsonrealtor1/" 224 class="lp-socials__link socials__item" 225 data-wow-delay="0s" 226 target="_blank" 227 aria-label="INSTAGRAM" 228 > 229 <span class="lp-i lp-i--instagram" aria-hidden="true"></span> 230 </a> 231 </li> 232 <li> 233 <a 234 href="https://www.linkedin.com/in/joshua-nelson-58138470/" 235 class="lp-socials__link socials__item" 236 data-wow-delay="0.1s" 237 target="_blank" 238 aria-label="LINKEDIN" 239 > 240 <span class="lp-i lp-i--linkedin" aria-hidden="true"></span> 241 </a> 242 </li> 243 <li> 244 <a 245 href="https://www.zillow.com/profile/Josh%20Nelson5" 246 class="lp-socials__link socials__item" 247 data-wow-delay="0.2s" 248 target="_blank" 249 aria-label="ZILLOW" 250 > 251 <span class="lp-i lp-i--zillow" aria-hidden="true"></span> 252 </a> 253 </li> 254 <li> 255 <a 256 href="https://www.biggerpockets.com/users/joshn93" 257 class="lp-socials__link socials__item" 258 data-wow-delay="0.3s" 259 target="_blank" 260 aria-label="PODCAST" 261 > 262 <span class="lp-i lp-i--podcast" aria-hidden="true"></span> 263 </a> 264 </li> 265 </ul> </div> 266</div> 267 </div> 268 <div id="global-mobile-contact" class="mobile-contact-wrapper" data-el-id="befe5af2-a6ca-4119-924a-a85d96d36b51"> 269 <div class="btn-holder" 270style=" 271--backgroundColor: rgba(255, 255, 255, 1); 272--textColor: rgba(54, 54, 54, 1); 273--pillTextColor: rgba(54, 54, 54, 1); 274--pillBackgroundColor: rgba(255, 255, 255, 1);"> 275 276 <button type="button" class="connect-btn lp-ico lp-ico-arrow-top visible">Let's Connect</button> 277</div> 278 279 280<div class="pop-up" style="--backgroundColor: rgba(255, 255, 255, 1); --textColor: rgba(54, 54, 54, 1);"> 281 <div class="lp-container"> 282 <form data-type="contact-form" class="contact-form"> 283 <div class="contact-form__container"> 284 <h3 class="lp-h3">Leave a Message</h3> 285 286 <div class="contact-form__content"> 287 <div class="contact-form__inputs-container"> 288 <div class="contact-form__item"> 289 <input 290 id="__FullName" 291 type="text" name="name" 292 class="lp-input lp-input--light" 293 required 294 placeholder="Full Name"> 295 </div> 296 <div class="contact-form__item"> 297 <input 298 id="__Email" 299 type="email" name="email" 300 class="lp-input js-email-input lp-input--light" 301 required 302 placeholder="Email"> 303 </div> 304 <div class="contact-form__item"> 305 <input 306 class="lp-input lp-input--light" 307 type="tel" 308 placeholder="Phone" 309 id="__Phone" 310 name="phone" 311 required> 312 </div> 313 314 <div class="contact-form__item input-group-select"> 315 <select name="interest" id="-field-interest" placeholder="Interest" 316 class="lp-input dropdown-select js-select js-form-element lp-input--light" required> 317 <option value="" disabled selected data-label="Interest">Interested in...</option> 318 <option value="Selling & Buying">Selling & Buying</option> 319 <option value="Selling">Selling</option> 320 <option value="Buying">Buying</option> 321 <option value="Renting">Renting</option> 322 <option value="Other">Other</option> 323 </select> 324 <label for="-field-interest" class="lp-label sr-only">Interest</label> 325 </div> 326 327 <div class="contact-form__item"> 328 <textarea 329 name="message" 330 rows="4" 331 id="__Message"
332 class="lp-input lp-input--light" 333 placeholder="Message" 334 required></textarea> 335 </div> 336 <div class="lp-disclaimer"> <label style='display: none;' for='-termsAccepted'>Opt In/Disclaimer Consent:</label> 337 <label class='lp-tcr-content'> 338 <span class='lp-tcr-checkbox'> 339 <input 340 type='checkbox' 341 id='-termsAccepted' 342 name='termsAccepted' 343 oninvalid="this.setCustomValidity('Please accept the terms and conditions')" 344 oninput="this.setCustomValidity('')" 345 required 346 /></span> 347 <span class='lp-tcr-message'> 348 349 I agree to be contacted by 350 Josh Nelson 351 via call, email, and text for real estate services. To opt out, you can reply 'stop' at any time or reply 'help' for assistance. 352 You can also click the unsubscribe link in the emails. Message and data rates may apply. Message frequency may vary. 353 <a href='/terms-and-conditions' target='_blank'>Privacy Policy</a>. 354 </span> 355 </label> 356 357</div> 358 <button type="submit" class="lp-btn lp-btn--filled lp-btn--dark submit contact-form__item">Submit</button> 359 360 <div class="lp-h-pot"> 361 <input id="__newsSignMiddleName" name="middleName" value="" autocomplete="off" tabindex="-1"> 362 </div> 363 364 <input style="display: none;" type="text" name="source" value="CONTACT_INQUIRY" /> 365 <input type="hidden" name="button_text" value="Let's Connect"> 366 </div> 367 </div> 368 </div> 369 370 371 <div class="success-block"> 372 <h3 class="lp-h3 success-message">Thank you for your message. I will be in touch with you shortly.</h3> 373 374 </div> 375 </form> 376 377 <button type="button" class="close-btn lp-ico lp-ico-close"></button> 378 379 380 </div> 381</div> 382 383 384 </div> 385 <section class="image-section is-font-color-light is-background-color-dark" id="section-42227948-5841-4e0e-a993-4f76d3586e7b" data-el-id="f6e6e2eb-ad74-4f8a-a5a3-64b4908be089"> 386 <div class="simple-opening"> 387 <div class="container"> 388 <div class="simple-opening__content"> 389 <h1 class="hero-heading pre-line">Blog</h1> 390 <ul class="lp-socials social_icons-style-1 socials simple-opening__socials"> 391 392 </ul> </div> 393 </div> 394</div> 395</section> 396<section id="section-f42f1a44-b353-4560-ac1a-1df3ec5b642b" class="solid-section is-font-color-dark is-background-color-light" data-el-id="21c5a117-61cb-4f43-8635-2da86e3ae7dd"> 397 398</section> 399<section id="section-5bb14518-9a5a-4131-b654-087e692a51d7" class="solid-section is-font-color-dark is-background-color-light" data-el-id="522799fa-e972-4350-aa43-fc38d92be683">
400<script type="text/x-handlebars-template" class="blogItem pagination-script"><a class="post-item" href="/blog/{{slug}}"> 401 <div class="image-holder"> 402 <div class="image-item" style="background-image: url('{{media.0.mediumUrl}}')"></div> 403 {{#if categories.0.name}} 404 <div class="category">{{categories.0.name}}</div> 405 {{/if}} 406 <div class="overlay"></div> 407 <div class="button-wrapper"> 408 <span class="btn btn--solid-white button-style-1">Read More</span> 409 </div> 410 </div> 411 <div class="post-details"> 412 <div class="title"> 413 <h3>{{title}}</h3> 414 </div> 415 <div class="author-date"> 416 <div class="date">{{hbFormatDate publishedAt}}</div> 417 {{#if (or createdBy.firstName customAuthor)}} 418 <div class="author">{{#if customAuthor}}{{customAuthor}}{{else}}{{createdBy.firstName}} {{createdBy.lastName}}{{/if}}</div> 419 {{/if}} 420 </div> 421 {{#if subtitle}} 422 <div class="description"> 423 {{truncate subtitle 226 '...'}} 424 </div> 425 {{/if}} 426 </div> 427</a> 428</script>
428<div class="blog-list redesign"> 429 <div class="container"> 430 <div class="posts-container data-container"> 431 <a class="post-item" href="/blog/the-inspection-every-haslett-lake-cottage-has-to-pass-before-it-can-close"> 432 <div class="image-holder"> 433 <div class="image-item" style="background-image: url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1280/https://media-production.lp-cdn.com/media/ba762ecb-5635-4ed4-9a37-badc7452f8c3')"></div> 434 <div class="overlay"></div> 435 <div class="button-wrapper"> 436 <span class="btn btn--solid-white button-style-1">Read More</span> 437 </div> 438 </div> 439 <div class="post-details"> 440 <div class="title"> 441 <h3>The Inspection Every Haslett Lake Cottage Has to Pass Before It Can Close</h3> 442 </div> 443 <div class="author-date"> 444 <div class="date">October 1, 2026</div> 445 </div> 446 </div> 447 </a> 448 <a class="post-item" href="/blog/the-east-lansing-rental-license-doesnt-always-transfer-with-the-deed"> 449 <div class="image-holder"> 450 <div class="image-item" style="background-image: url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1280/https://media-production.lp-cdn.com/media/37a2e35a-de6a-4706-aa4d-77f971197e1a')"></div> 451 <div class="overlay"></div> 452 <div class="button-wrapper"> 453 <span class="btn btn--solid-white button-style-1">Read More</span> 454 </div> 455 </div> 456 <div class="post-details"> 457 <div class="title"> 458 <h3>The East Lansing Rental License Doesn't Always Transfer With the Deed</h3> 459 </div> 460 <div class="author-date"> 461 <div class="date">September 24, 2026</div> 462 </div> 463 </div> 464 </a> 465 <a class="post-item" href="/blog/the-20th-season-party-left-putnam-street-the-season-didnt"> 466 <div class="image-holder"> 467 <div class="image-item" style="background-image: url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1280/https://media-production.lp-cdn.com/media/fde9f2bf-f7d3-4512-a588-b6aa98e5aa22')"></div> 468 <div class="overlay"></div> 469 <div class="button-wrapper"> 470 <span class="btn btn--solid-white button-style-1">Read More</span> 471 </div> 472 </div> 473 <div class="post-details"> 474 <div class="title"> 475 <h3>The 20th-Season Party Left Putnam Street. The Season Didn't.</h3> 476 </div> 477 <div class="author-date"> 478 <div class="date">September 17, 2026</div> 479 </div> 480 </div> 481 </a> 482 <a class="post-item" href="/blog/the-two-acres-carrying-baths-whole-calendar"> 483 <div class="image-holder"> 484 <div class="image-item" style="background-image: url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1280/https://media-production.lp-cdn.com/media/34d1aca3-beff-47bd-a642-007bd19bbf20')"></div> 485 <div class="overlay"></div> 486 <div class="button-wrapper"> 487 <span class="btn btn--solid-white button-style-1">Read More</span> 488 </div> 489 </div> 490 <div class="post-details"> 491 <div class="title"> 492 <h3>The Two Acres Carrying Bath's Whole Calendar</h3> 493 </div> 494 <div class="author-date"> 495 <div class="date">September 10, 2026</div> 496 </div> 497 </div> 498 </a> 499 <a class="post-item" href="/blog/the-trailhead-is-closed-the-corner-isnt"> 500 <div class="image-holder"> 501 <div class="image-item" style="background-image: url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1280/https://media-production.lp-cdn.com/media/c06f0c7d-164a-4871-aad8-e7260087d5fc')"></div> 502 <div class="overlay"></div> 503 <div class="button-wrapper">
504 <span class="btn btn--solid-white button-style-1">Read More</span> 505 </div> 506 </div> 507 <div class="post-details"> 508 <div class="title"> 509 <h3>The Trailhead Is Closed. The Corner Isn't.</h3> 510 </div> 511 <div class="author-date"> 512 <div class="date">September 3, 2026</div> 513 </div> 514 </div> 515 </a> 516 <a class="post-item" href="/blog/east-lansings-summer-rule-you-can-open-downtown-just-dont-touch-the-parking"> 517 <div class="image-holder"> 518 <div class="image-item" style="background-image: url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1280/https://media-production.lp-cdn.com/media/761cff62-89dd-4693-a8a3-4909684d9d44')"></div> 519 <div class="overlay"></div> 520 <div class="button-wrapper"> 521 <span class="btn btn--solid-white button-style-1">Read More</span> 522 </div> 523 </div> 524 <div class="post-details"> 525 <div class="title"> 526 <h3>East Lansing's Summer Rule: You Can Open Downtown, Just Don't Touch the Parking</h3> 527 </div> 528 <div class="author-date"> 529 <div class="date">August 27, 2026</div> 530 </div> 531 </div> 532 </a> 533 <a class="post-item" href="/blog/the-five-weekends-that-take-over-downtown-mason-this-fall"> 534 <div class="image-holder"> 535 <div class="image-item" style="background-image: url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1280/https://media-production.lp-cdn.com/media/39357b64-690b-4025-b783-7cd4ca2cbd61')"></div> 536 <div class="overlay"></div> 537 <div class="button-wrapper"> 538 <span class="btn btn--solid-white button-style-1">Read More</span> 539 </div> 540 </div> 541 <div class="post-details"> 542 <div class="title"> 543 <h3>The Five Weekends That Take Over Downtown Mason This Fall</h3> 544 </div> 545 <div class="author-date"> 546 <div class="date">August 20, 2026</div> 547 </div> 548 </div> 549 </a> 550 <a class="post-item" href="/blog/okemos-doesnt-have-a-downtown-it-has-a-wednesday-night"> 551 <div class="image-holder"> 552 <div class="image-item" style="background-image: url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1280/https://media-production.lp-cdn.com/media/b0ae0558-ddac-458f-a292-b621b044a333')"></div> 553 <div class="overlay"></div> 554 <div class="button-wrapper"> 555 <span class="btn btn--solid-white button-style-1">Read More</span> 556 </div> 557 </div> 558 <div class="post-details"> 559 <div class="title"> 560 <h3>Okemos Doesn't Have a Downtown. It Has a Wednesday Night.</h3> 561 </div> 562 <div class="author-date"> 563 <div class="date">August 13, 2026</div> 564 </div> 565 </div> 566 </a> 567 </div> 568 <div class="pagination-container pagination-style-1"></div> </div> 569</div> 570</section> 571<section id="section-d4307d3d-7cb0-461b-9790-4cbaf461428c" class="solid-section is-font-color-dark is-background-color-light" data-el-id="19e4a145-7cee-4338-8873-657ce2636b4c"> 572 573<div class="newsletter-signup lp-vertical-paddings redesign"> 574 <div class="lp-container-custom"> 575 <form data-type="contact-form" class="newsletter-signup__form"> 576 <div class="newsletter-signup__form-container"> 577 <div class="lp-title-group"> 578 <h2 class="lp-h2">Receive Exclusive Listings in Your Inbox</h2> 579 <div class="lp-text--subtitle"><p>Are you interested in buying a home? Look no further than working with a real estate expert.</p></div> 580 </div> 581 <div class="newsletter-signup-form"> 582 <div class="newsletter-signup__inputs-container"> 583 <input id="section-d4307d3d-7cb0-461b-9790-4cbaf461428c__newsSignFirstName" type="text" name="name" class="lp-in
583put lp-input--light newsletter-signup__form-item" required placeholder="Name"> 584 585 <input id="section-d4307d3d-7cb0-461b-9790-4cbaf461428c__newsSignEmail" type="email" name="email" class="lp-input lp-input--light newsletter-signup__form-item" required placeholder="Email" pattern="[a-zA-Z0-9.!#$%&â*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)+"> 586 587 <button type="submit" class="lp-btn lp-btn--filled lp-btn--light submit button-style-2 newsletter-signup__form-item lp-btn--mob-full-width">Submit</button> 588 589 <div class="lp-h-pot"> 590 <input id="section-d4307d3d-7cb0-461b-9790-4cbaf461428c__newsSignMiddleName" name="middleName" value="" autocomplete="off" tabindex="-1"> 591 </div> 592 593 <input style="display: none;" type="text" name="source" value="NEWSLETTER_SIGNUP" /> 594 </div> 595 </div> 596 <div class="lp-disclaimer"> <label style='display: none;' for='section-d4307d3d-7cb0-461b-9790-4cbaf461428c-termsAccepted'>Opt In/Disclaimer Consent:</label> 597 <label class='lp-tcr-content'> 598 <span class='lp-tcr-checkbox'> 599 <input 600 type='checkbox' 601 id='section-d4307d3d-7cb0-461b-9790-4cbaf461428c-termsAccepted' 602 name='termsAccepted' 603 oninvalid="this.setCustomValidity('Please accept the terms and conditions')" 604 oninput="this.setCustomValidity('')" 605 required 606 /></span> 607 <span class='lp-tcr-message'> 608 609 I agree to be contacted by 610 Josh Nelson 611 via call, email, and text for real estate services. To opt out, you can reply 'stop' at any time or reply 'help' for assistance. 612 You can also click the unsubscribe link in the emails. Message and data rates may apply. Message frequency may vary. 613 <a href='/terms-and-conditions' target='_blank'>Privacy Policy</a>. 614 </span> 615 </label> 616 617</div> 618 </div> 619 <div class="success-block"> 620 <div class="lp-title-group"> 621 <h2 class="lp-h2">Thank You</h2> 622 <div class="lp-text--subtitle"><p>You have successfully been added to our Newsletter. Stay tuned for the latest updates sent straight to your inbox!</p></div> 623 </div> 624 </div> 625 </form> 626 627 </div> 628</div> 629</section> 630<section class="image-section is-font-color-light is-background-color-dark" id="section-800648be-b1a1-4e21-a1a6-e04b85375975" data-el-id="3b9aa9ac-f534-49a3-b661-d2cda775b424"> 631 <div class="work-with-us"> 632 <div class="container"> 633 <div class="work-with-us__content"> 634 <h2 class="wow fadeInUp" data-wow-delay=".1s">Work With Josh</h2> 635 <p class="wow fadeInUp" data-wow-delay=".2s">Dedicated to you. It has been always my mission to bring my clients home. Contact me today!</p> 636 <a 637 role="button" 638 data-type="CONTACT_US" 639 class="btn wow fadeInUp button-style-2" 640 641 642 643 644 645 > 646 Let's Connect 647 </a> 648 </div> 649 </div> 650</div> 651</section> 652<section id="section-aab683fa-2e6b-49e8-9307-d1c895d542e3" class="solid-section is-font-color-dark is-background-color-light" data-el-id="5db65d6a-01e9-4ee3-babf-2748e074a284"> 653
653<script type="text/x-handlebars-template" class="jsIGItem"> 654 <a href="{{permalink}}" target="_blank" class="ig-feed-item insta-type-{{mediaType}}"> 655 <div class="ig-feed-item__img" style="background-image: url('{{#ifEquals mediaType 'VIDEO'}}{{thumbnailUrl}}{{^}}{{mediaUrl}}{{/ifEquals}}');"></div> 656 <div class="ig-feed-item__info"><div class="ig-feed-item__caption">{{caption}}</div></div> 657 {{#ifEquals mediaType 'VIDEO'}}<div class="video-icon"></div>{{/ifEquals}} 658 </a> 659</script>
659 660<div class="ig-feed redesign"> 661 <div class="ig-feed-top lp-container"> 662 <div class="top-wrapper"> 663 <div class="top-left"> 664 <h3 class="lp-h3 title">Follow Me On Instagram</h3> 665 <a href="#" target="_blank" class="instagram-link jsIGLink"><h4 class="lp-h4 instagram-name jsIGName"></h4></a> 666 </div> 667 <div class="top-right"> 668 <a href="#" target="_blank" class="lp-btn lp-btn--dark lp-btn--outline lp-btn--mob-full-width follow-button jsIGLink ">Follow Us</a> 669 <a class="nav-button top-nav-prev hidden-control "> 670 <svg width="9" height="15" viewBox="0 0 9 15" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M7.099 13.25l-5.25-5.775L7.099 1.7" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg> 671 </a> 672 <a class="nav-button top-nav-next hidden-control "> 673 <svg width="9" height="15" viewBox="0 0 9 15" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1.90137 1.75L7.15137 7.525L1.90137 13.3" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg> 674 </a> 675 </div> 676 </div> 677 </div> 678 <div class="lp-container ig-feed-container "> 679 <div class="ig-feed-feed" data-limit="33"> 680 </div> 681 </div> 682 <div class="bottom-controls"> 683 <a class="bottom-nav-button bottom-nav-prev "> 684 <svg width="9" height="15" viewBox="0 0 9 15" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M7.099 13.25l-5.25-5.775L7.099 1.7" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg> 685 </a> 686 <a class="bottom-nav-button bottom-nav-next "> 687 <svg width="9" height="15" viewBox="0 0 9 15" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1.90137 1.75L7.15137 7.525L1.90137 13.3" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg> 688 </a> 689 </div> 690</div> 691 692</section> 693 694 <div id="modals" class="modals"></div> 695 <footer id="global-footer" class="is-font-color-dark is-background-color-light" data-el-id="e518e474-22a5-4efd-a5c6-0a3b09f783c2"> 696 <div class="footer"> 697 <div class="container"> 698 <div class="footer__info"> 699 <div class="footer__info-column wow fadeInUp" data-wow-delay=".1s"> 700 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1280/https://media-production.lp-cdn.com/media/8c22713d-b8ce-47c3-8d0a-662f7cb1f19f" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=320/https://media-production.lp-cdn.com/media/8c22713d-b8ce-47c3-8d0a-662f7cb1f19f 320w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/8c22713d-b8ce-47c3-8d0a-662f7cb1f19f 960w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1280/https://media-production.lp-cdn.com/media/8c22713d-b8ce-47c3-8d0a-662f7cb1f19f 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1920/https://media-production.lp-cdn.com/media/8c22713d-b8ce-47c3-8d0a-662f7cb1f19f 1920w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=2560/https://media-production.lp-cdn.com/media/8c22713d-b8ce-47c3-8d0a-662f7cb1f19f 2560w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=3456/https://media-production.lp-cdn.com/media/8c22713d-b8ce-47c3-8d0a-662f7cb1f19f 3456w" alt="Dark Logo" sizes="250px" class="footer__logo logo-dark"> 701 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1280/https://media-production.lp-cdn.com/media/de18bfb5-2a1b-46cd-aa0e-077c7cb3c82c" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=320/https://media-production.lp-cdn.com/media/de18bfb5-2a1b-46cd-aa0e-077c7cb3c82c 320w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/de18bfb5-2a1b-46cd-aa0e-077c7cb3c82c 960w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1280/https://media-production.lp-cdn.com/media/de18bfb5-2a1b-46cd-aa0e-077c7cb3c82c 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1920/https://media-production.lp-cdn.com/media/de18bfb5-2a1b-46cd-aa0e-077c7cb3c82c 1920w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=2560/https://media-production.lp-cdn.com/media/de18bfb5-2a1b-46cd-aa0e-077c7cb3c82c 2560w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=3456/https://media-production.lp-cdn.com/media/de18bfb5-2a1b-46cd-aa0e-077c7cb3c82c 3456w" alt="Light Logo" sizes="250px" class="footer__logo logo-light"> 702 <p> 703 A Reputation for unrelenting work ethic, integrity, and honesty backed up by unparalleled knowledge of the marketplace. 704 </p> 705 </div> 706 <div class="footer__info-column wow fadeInUp" data-wow-delay=".3s"> 707 <h4>Address</h4> 708 <div> 709 <div class="c2299"> 710<p>2421 W Grand River Ave<br>Okemos MI 48864</p> 711</div> 712<style>* { box-sizing: border-box; } body {margin: 0;}.c2299{padding:0 0 0 0;border:none black;}</style> 713 </div> 714 </div> 715 <div class="footer__info-column wow fadeInUp" data-wow-delay=".6s"> 716 <h4>Contact</h4> 717 <div> 718 <div class="c2407"> 719<p><a class="hyperlink-style-1" href="tel:6166440819">M:616.644.0819</a><br><a class="hyperlink-style-1" href="tel:5177778224">O:517.777.8224</a><br><a class="hyperlink-style-1" href="/cdn-cgi/l/email-protection#53393c203b2632133b3
719c3e36203636383621207d3d3627"><span class="__cf_email__" data-cfemail="c3a9acb0abb6a283abacaea6b0a6a6a8a6b1b0edada6b7">[email protected]</span></a></p> 720</div> 721<style>* { box-sizing: border-box; } body {margin: 0;}.c2407{padding:0 0 0 0;border:none black;}</style> 722 </div> 723 </div> 724 </div> 725 <div class="footer__contact"> 726 <div class="footer__contact-column"> 727 <h4>Connect With Me</h4> 728 <ul class="lp-socials social_icons-style-2 socials"> 729 730 <li> 731 <a 732 href="https://www.instagram.com/jnelsonrealtor1/" 733 class="lp-socials__link socials__item wow fadeInUp" 734 data-wow-delay="0s" 735 target="_blank" 736 aria-label="INSTAGRAM" 737 > 738 <span class="lp-i lp-i--instagram" aria-hidden="true"></span> 739 </a> 740 </li> 741 <li> 742 <a 743 href="https://www.linkedin.com/in/joshua-nelson-58138470/" 744 class="lp-socials__link socials__item wow fadeInUp" 745 data-wow-delay="0.1s" 746 target="_blank" 747 aria-label="LINKEDIN" 748 > 749 <span class="lp-i lp-i--linkedin" aria-hidden="true"></span> 750 </a> 751 </li> 752 <li> 753 <a 754 href="https://www.zillow.com/profile/Josh%20Nelson5" 755 class="lp-socials__link socials__item wow fadeInUp" 756 data-wow-delay="0.2s" 757 target="_blank" 758 aria-label="ZILLOW" 759 > 760 <span class="lp-i lp-i--zillow" aria-hidden="true"></span> 761 </a> 762 </li> 763 <li> 764 <a 765 href="https://www.biggerpockets.com/users/joshn93" 766 class="lp-socials__link socials__item wow fadeInUp" 767 data-wow-delay="0.3s" 768 target="_blank" 769 aria-label="PODCAST" 770 > 771 <span class="lp-i lp-i--podcast" aria-hidden="true"></span> 772 </a> 773 </li> 774 </ul> </div> 775 </div> 776 <div class="footer__copyright wow fadeInUp" data-wow-delay=".6s"> 777 <span class="img-wrap"><img src="https://media-production.lp-cdn.com/media/20574221-e126-4c05-aa86-444398b09530" alt=""></span> 778 <div class="footer__design">Real Estate Website Design by <a href="https://www.luxurypresence.com/real-estate-website-design/" target="_blank" class="link hyperlink-style-1">Luxury Presence</a> 779</div> 780 <p class="footer__design"> 781 Copyright © <span class="auto-year-update">2026</span> | <span><a href="/terms-and-conditions" class="hyperlink-style-1">Privacy Policy</a></span> 782 </p> 783 </div> 784 785 <div class="footer__disclaimer"> 786 <div class="wow fadeInUp" data-wow-delay=".6s"> 787 This Website is not the official website of Sothebyâs International Realty, Inc. Sothebyâs International Realty, Inc. does not make any representation or warranty regarding any information, including without limitation its accuracy or completeness, contained on this Website. 788 </div> 789 <div class="wow fadeInUp" data-wow-delay=".6s"> 790 <p style="font-size: 12px;">âââââSotheby’s International Realty® and the Sotheby’s International Realty Logo are service marks licensed to Sotheby’s International Realty Affiliates LLC and used with permission. White Pine Sotheby’s International Realty fully supports the principles of the Fair Housing Act and the Equal Opportunity Act. Each office is independently owned and operated. Any services or products provided by independently owned and operated franchisees are not provided by, affiliated with or related to Sotheby’s International Realty Affiliates LLC nor any of its affiliated companies.<br><br></p> 791<p><img src="https://res.cloudinary.com/luxuryp/images/f_auto,q_auto/g5qzbyky8ifp5w0ex0ik/realtor-eho-logo-07232021-update-dark" alt="" width="100px"></p> 792 </div> 793 </div> 794 795 796 <div class="footer__menu wow fadeInUp" data-wow-delay=".6s"> 797 <a href="/" class="footer__menu-item hyperlink-style-1">Home</a> 798 <a href="/about" class="footer__menu-item hyperlink-style-1">About Josh</a> 799 <a href="/properties/sale" class="footer__menu-item hyperlink-style-1">Featured Properties</a> 800 <a href="/testimonials" class="footer__menu-item hyperlink-style-1">Testimonials</a> 801 <a data-type="CONTACT_US" class="footer__menu-item hyperlink-style-1">Let's Connect</a> 802 </div> 803 804 </div> 805 806</div> 807 808<div class="thank-you-modal closed"> 809 <div> 810 <h2>Email Added To 811 Subscription List</h2> 812 </div> 813 <div> 814 <button class="btn">Okay</button> 815 </div> 816</div> 817 </footer> 818 819 <div id="modal-global-contact-us" class="modal " 820 data-el-id="" 821 style="background-color: ;" 822 > 823 <div class="modal-content"> 824 <div class="contact-popup"> 825 <div class="contact-popup__container"> 826 <button class="contact-popup__close close"></button> 827 <div class="contact-popup__col"> 828 <h1 class="contact-popup__title">Get in Touch</h1> 829 <p> 830 831 </p> 832 <form class="contact-popup__form contact-us-form" data-type="contact-form"> 833 <input required name="name" type="text" class="inp contact-popup__input" placeholder="Full Name"> 834 <input required type="email" name="email" 835 pattern="[a-zA-Z0-9.!#$%&â*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)+" class="inp contact-popup__input" placeholder="Email"> 836 <input name="phone" required type="tel" class="inp contact-popup__input" placeholder="Phone"> 837 <div class="h-pot"> 838 <label for="__ebookMiddleName">Middle Name</label> 839 <input id="__ebookMiddleName" name="middleName" value="" autocomplete="off" tabindex="-1"> 840 </div> 841 <textarea name="message" required class="inp contact-popup__input" placeholder="Message"></textarea> 842 <div class="lp-disclaimer"> <label style='display: none;' for='-termsAccepted'>Opt In/Disclaimer Consent:</label> 843 <label class='lp-tcr-content'>
844 <span class='lp-tcr-checkbox'> 845 <input 846 type='checkbox' 847 id='-termsAccepted' 848 name='termsAccepted' 849 oninvalid="this.setCustomValidity('Please accept the terms and conditions')" 850 oninput="this.setCustomValidity('')" 851 required 852 /></span> 853 <span class='lp-tcr-message'> 854 855 I agree to be contacted by 856 Josh Nelson 857 via call, email, and text for real estate services. To opt out, you can reply 'stop' at any time or reply 'help' for assistance. 858 You can also click the unsubscribe link in the emails. Message and data rates may apply. Message frequency may vary. 859 <a href='/terms-and-conditions' target='_blank'>Privacy Policy</a>. 860 </span> 861 </label> 862 863 </div> 864 <button class="btn btn--solid-black contact-popup__submit button-style-1" type="submit">SUBMIT</button> 865 <p class="success hide"> 866 Message sent successfully! 867 </p> 868 </form> 869 870 </div> 871 872 <div class="contact-popup__col"> 873 874 875 <div class="contact-popup__info"> 876 <h3 class="contact-popup__subtitle"></h3> 877 <div> 878 <div id="ityb"><h3 class="contact-popup__subtitle">Josh Nelson 879 </h3><p><a href="tel:6166440819" class="hyperlink-style-1">M:616.644.0819</a><a href="tel:5177778224" class="hyperlink-style-1">O:517.777.8224</a><a href="/cdn-cgi/l/email-protection#ddb7b2aeb5a8bc9db5b2b0b8aeb8b8b6b8afaef3b3b8a9" class="hyperlink-style-1"><span class="__cf_email__" data-cfemail="0c66637f64796d4c646361697f696967697e7f22626978">[email protected]</span></a></p></div><div id="i47ls"><h3 class="contact-popup__subtitle">Address 880 </h3><p id="in0a">2421 W Grand River Ave<br>Okemos MI 48864</p></div><style>* { box-sizing: border-box; } body {margin: 0;}ul{list-style:inherit;}</style> 881 </div> 882 </div> 883 884 <ul class="lp-socials social_icons-style-2 contact-popup__socials socials"> 885 886 <li> 887 <a 888 href="https://www.instagram.com/jnelsonrealtor1/" 889 class="lp-socials__link socials__item" 890 data-wow-delay="0s" 891 target="_blank" 892 aria-label="INSTAGRAM" 893 > 894 <span class="lp-i lp-i--instagram" aria-hidden="true"></span> 895 </a> 896 </li> 897 <li> 898 <a 899 href="https://www.linkedin.com/in/joshua-nelson-58138470/" 900 class="lp-socials__link socials__item" 901 data-wow-delay="0.1s" 902 target="_blank" 903 aria-label="LINKEDIN" 904 > 905 <span class="lp-i lp-i--linkedin" aria-hidden="true"></span> 906 </a> 907 </li> 908 <li> 909 <a 910 href="https://www.zillow.com/profile/Josh%20Nelson5" 911 class="lp-socials__link socials__item" 912 data-wow-delay="0.2s" 913 target="_blank" 914 aria-label="ZILLOW" 915 > 916 <span class="lp-i lp-i--zillow" aria-hidden="true"></span> 917 </a> 918 </li> 919 <li> 920 <a 921 href="https://www.biggerpockets.com/users/joshn93" 922 class="lp-socials__link socials__item" 923 data-wow-delay="0.3s" 924 target="_blank" 925 aria-label="PODCAST" 926 >
927 <span class="lp-i lp-i--podcast" aria-hidden="true"></span> 928 </a> 929 </li> 930 </ul> </div> 931 </div> 932 933 </div> 934 </div> 935 <button class="close lp-close" type="button" aria-label="close modal"> 936 <span class="lp-close-icon" aria-hidden="true"></span> 937 </button> 938 </div> 939 <div id="qualifying-questions-modal" tabindex="-1" role="dialog" aria-modal="true" aria-labelledby="qualifying-questions-modal-title" aria-hidden="true" style="position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.7); z-index: 1050; display: none; align-items: center; justify-content: center;"> 940 <style> 941 #qualifying-questions-modal .custom-select-toggle { 942 border: 1px solid #848484; 943 border-radius: 8px; 944 padding: 12px 16px; 945 } 946 947 #qualifying-questions-modal .custom-select-toggle.is-placeholder { 948 color: #848484; 949 } 950 951 #qualifying-questions-modal #qualifying-questions-modal-phoneNumber::placeholder { 952 color: #848484; 953 opacity: 1; 954 } 955 956 #qualifying-questions-modal .disclaimer-more { 957 display: none; 958 } 959 960 #qualifying-questions-modal #qualifying-questions-modal-disclaimer-text:not(.collapsed) .disclaimer-more { 961 display: inline; 962 } 963 964 #qualifying-questions-modal #qualifying-questions-modal-disclaimer-text:not(.collapsed) .disclaimer-ellipsis { 965 display: none; 966 } 967 </style>
vendor: 119 bytes, lines 967-968
967 968 <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
968<script> 969 function toggleDisclaimerQualifyingQuestionsModal() { 970 const disclaimerText = document.getElementById('qualifying-questions-modal-disclaimer-text'); 971 const toggleButton = document.getElementById('qualifying-questions-modal-toggle-disclaimer'); 972 973 if (disclaimerText.classList.contains('collapsed')) { 974 disclaimerText.classList.remove('collapsed'); 975 toggleButton.textContent = 'Read less'; 976 toggleButton.setAttribute('aria-expanded', 'true'); 977 } else { 978 disclaimerText.classList.add('collapsed'); 979 toggleButton.textContent = 'Read more'; 980 toggleButton.setAttribute('aria-expanded', 'false'); 981 } 982 } 983 </script>
983 984 <div style="max-width: 400px; width: 95%; margin: 0 auto;"> 985 <div style="background: #fff; border: none; border-radius: 16px; color: black; box-shadow: none; position: relative;"> 986 <button type="button" data-dismiss="modal" aria-label="Close" style="position: absolute; right: 20px; top: 10px; font-size: 28px; font-weight: 300; color: black; opacity: 1; background: none; border: none; padding: 0; width: auto; height: auto; cursor: pointer; z-index: 10;"> 987 <span aria-hidden="true">×</span> 988 </button> 989 <div style="padding: 40px 30px 32px;"> 990 <div style="text-align: left; margin-bottom: 32px;"> 991 <h2 id="qualifying-questions-modal-title" style="margin: 0; color: #333; font-size: 18px; line-height: 1.4; text-transform: uppercase; letter-spacing: 0.5px; font-weight: normal;"> 992 Thanks, please provide more information to help serve you 993 </h2> 994 </div> 995 <form id="qualifying-questions-modal-form" data-type="contact-form"> 996 <input type="hidden" name="source" value="PROFILE_UPDATE" /> 997 <input type="hidden" name="email" value="" id="qualifying-questions-modal-email" /> 998 <input type="hidden" name="triggerSource" id="qualifying-questions-modal-triggerSource" value="" /> 999 <label for="qualifying-questions-modal-email" style="display:none;"> 1000 Email 1001 </label> 1002 <label for="qualifying-questions-modal-triggerSource" style="display:none;"> 1003 Trigger Source 1004 </label> 1005 1006 <div style="margin-bottom: 20px;"> 1007 <label for="qualifying-questions-modal-phoneNumber" style="display:none;"> 1008 Phone Number 1009 </label> 1010 <input 1011 type="tel" 1012 id="qualifying-questions-modal-phoneNumber" 1013 name="phoneNumber" 1014 style="padding: 12px 16px; font-size: 16px; border: 1px solid #848484; border-radius: 8px; background: transparent; color: black; width: 100%; box-sizing: border-box; outline: none;" 1015 pattern="^\+?1?[-.\s]?\(?[0-9]{3}\)?[-.\s]?[0-9]{3}[-.\s]?[0-9]{4}$" 1016 required 1017 placeholder="Phone" 1018 aria-label="Phone Number" 1019 inputmode="tel" 1020 autocomplete="tel" 1021 onfocus="this.style.borderColor='black';" 1022 onblur="this.style.borderColor='#848484';" 1023 /> 1024 </div> 1025 1026 <div style="margin-bottom: 20px;"> 1027 <label for="qualifying-questions-modal-interest" style="display:none;"> 1028 Interest 1029 </label> 1030 <select 1031 id="qualifying-questions-modal-interest" 1032 name="interest" 1033 required 1034 data-label="Interest" 1035 aria-label="Interest" 1036 style="padding: 12px 16px; font-size: 16px; border: 1px solid #848484; border-radius: 8px; background: #fff; color: #848484; width: 100%; box-sizing: border-box; outline: none; appearance: none; -webkit-appearance: none; -moz-appearance: none; background-image: url('data:image/svg+xml;charset=utf8,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 16 16%22%3E%3Cpath fill=%22%23666%22 d=%22M4.427 7.427l3.396 3.396a.25.25 0 00.354 0l3.396-3.396A.25.25 0 0011.396 7H4.604a.25.25 0 00-.177.427z%22/%3E%3C/svg%3E'); background-repeat: no-repeat; background-position: right 16px center; background-size: 16px;" 1037 onfocus="this.style.borderColor='black'; this.style.color='black';" 1038 onblur="this.style.borderColor='#848484'; if(this.value === '') this.style.color='#848484'; else this.style.color='black';" 1039 > 1040 <option value="" style="background: #fff; color: #848484;" disabled selected>Interested in...</option> 1041 <option value="Selling & Buying" style="background: #fff; color: black;">Selling & Buying</option> 1042 <option value="Selling" style="background: #fff; color: black;">Selling</option> 1043 <option value="Buying" style="background: #fff; color: black;">Buying</option> 1044 <option value="Renting" style="background: #fff; color: black;">Renting</option> 1045 <option value="Other" style="background: #fff; color: black;">Other</option> 1046 </select> 1047 </div> 1048 1049 <div style="margin-bottom: 32px; font-size: 12px; line-height: 1.2;"> 1050 <label style='display: none;' for='qualifying-questions-modal-qualifying-questions-termsAccepted'>Opt In/Disclaimer Consent:</label> 1051 <label class='lp-tcr-content'>
1052 <span class='lp-tcr-checkbox'> 1053 <input 1054 type='checkbox' 1055 id='qualifying-questions-modal-qualifying-questions-termsAccepted' 1056 name='termsAccepted' 1057 aria-describedby='qualifying-questions-modal-disclaimer-text' 1058 oninvalid="this.setCustomValidity('Please accept the terms and conditions')" 1059 oninput="this.setCustomValidity('')" 1060 required 1061 /></span> 1062 <span class='lp-tcr-message'> 1063 <div id="qualifying-questions-modal-disclaimer-text" class="collapsed" style="color: #848484;"> 1064 1065 I agree to be contacted by 1066 <strong>Josh Nelson</strong> 1067 via call, email, and text <span class="disclaimer-more">for real estate services. 1068 To opt out, you can reply 'stop' at any time or reply 'help' for assistance. 1069 You can also click the unsubscribe link in the emails. 1070 Message and data rates may apply. Message frequency may vary.</span> 1071 <span class="disclaimer-ellipsis">...</span> 1072 <a href='/terms-and-conditions' target='_blank' rel='noopener noreferrer' style='text-decoration: underline;'>Privacy Policy</a>. 1073 </div> 1074 <button 1075 id="qualifying-questions-modal-toggle-disclaimer" 1076 type="button" 1077 style="background: none; border: none; color: #848484; font-size: inherit; font-weight: bold; padding: 0; margin-top: 4px; cursor: pointer;" 1078 aria-expanded="false" 1079 onclick="toggleDisclaimerQualifyingQuestionsModal()" 1080 > 1081 Read more 1082 </button> 1083 </span> 1084 </label> 1085 </div> 1086 1087 <div> 1088 <button 1089 type="submit" 1090 style="padding: 12px 24px; font-size: 16px; font-weight: normal; border-radius: 8px; border: 1px solid black; background: black; color: white; width: 100%; cursor: pointer; transition: all 0.2s ease; text-transform: uppercase; letter-spacing: 0.5px;" 1091 onmouseover="this.style.background='transparent'; this.style.color='black';" 1092 onmouseout="this.style.background='black'; this.style.color='white';" 1093 > 1094 Submit 1095 </button> 1096 </div> 1097 </form> 1098 </div> 1099 </div> 1100 </div> 1101 </div> 1102 1103
1103<script> 1104 (function() { 1105 var lazyVideos = [].slice.call(document.querySelectorAll("video.lazy")); 1106 1107 if ("IntersectionObserver" in window && lazyVideos.length > 0) { 1108 var lazyVideoObserver = new IntersectionObserver(function(entries, observer) { 1109 entries.forEach(function(video) { 1110 if (video.isIntersecting) { 1111 for (var source in video.target.children) { 1112 var videoSource = video.target.children[source]; 1113 if (typeof videoSource.tagName === "string" && videoSource.tagName === "SOURCE") { 1114 videoSource.src = videoSource.dataset.src; 1115 } 1116 } 1117 1118 video.target.load(); 1119 video.target.classList.remove("lazy"); 1120 lazyVideoObserver.unobserve(video.target); 1121 } 1122 }); 1123 }); 1124 1125 lazyVideos.forEach(function(lazyVideo) { 1126 lazyVideoObserver.observe(lazyVideo); 1127 }); 1128 } 1129 })(); 1130 </script>
1130 1131 1132 <!-- Global site tag (gtag.js) - Google Analytics --> 1133
1133<script defer src="https://www.googletagmanager.com/gtag/js"></script>
1133 1134 1135 <!-- Google Tag Manager --> 1136
1136<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 1137 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 1138 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.defer=true;j.async=false;j.src= 1139 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 1140 })(window,document,'script','dataLayer','GTM-T9SFQGHZ');</script>
1140 1141 <!-- End Google Tag Manager --> 1142 1143 1144 <!-- LP Tracker (divolte.js) - LP Divolte --> 1145
1145<script>window.divolteLp=window.divolteLp||function(){(divolteLp.q=divolteLp.q||[]).push(arguments)}</script>
1145 1146 <!-- LP Tracker (eventBus) - LP EventBus --> 1147
1147<script>window.eventBusLp=window.eventBusLp||function(){(eventBusLp.q=eventBusLp.q||[]).push(arguments)}</script>
1147 1148 1149
1149<script> 1150 window.dataLayer = window.dataLayer || []; 1151 document.sendGoogleTagManagerEvent = function() { 1152 /* Honor GPC-enabled browsers and prevent GTM event if GPC is enabled. More details: https://global-privacy-control.glitch.me/ */ 1153 if (window.navigator.globalPrivacyControl) { 1154 return; 1155 } 1156 1157 dataLayer.push(arguments); 1158 } 1159 1160 document.sendGoogleTagManagerEvent('js', new Date()); 1161 document.sendGoogleTagManagerEvent('config', 'G-P0SQ1LKZWY', { page: location.pathname, location: location.href }); 1162 document.sendGoogleAnalyticsEvent = function(googleEvent) { 1163 document.sendGoogleTagManagerEvent('event', googleEvent.eventAction || googleEvent.hitType, { 1164 event_category: googleEvent.eventCategory, 1165 event_label: googleEvent.eventLabel, 1166 value: googleEvent.eventValue, 1167 page: googleEvent.page, 1168 location: googleEvent.location 1169 }) 1170 }; 1171 1172 document.addEventListener("DOMContentLoaded", function() { 1173 (function() { 1174 //If the page has an element with ID of auto-year-update the element will be populated with the current year. 1175 var date = new Date(); 1176 var elements = document.getElementsByClassName('auto-year-update'); 1177 var i; 1178 for (i = 0; i < elements.length; i++) { 1179 elements[i].innerText = date.getFullYear(); 1180 } 1181 })(); 1182 if (window.divolteLp) { 1183 window.divolteLp('sendLpPageView', {}); 1184 } 1185 if (window.eventBusLp) { 1186 window.eventBusLp('sendLpPageView', {}); 1187 } 1188 }); 1189 </script>
1189 1190 1191 1192
1192<script> 1193 // Function to dynamically load a script 1194 function loadScript(url, callback) { 1195 var script = document.createElement('script'); 1196 script.type = 'text/javascript'; 1197 script.src = url; 1198 script.defer = true; 1199 script.async = true; 1200 script.onload = callback; 1201 document.head.appendChild(script); 1202 } 1203 1204 // Function to dynamically load CSS file 1205 function loadCSS(url) { 1206 var link = document.createElement("link"); 1207 link.rel = "stylesheet"; 1208 link.href = url; 1209 document.head.appendChild(link); 1210 } 1211 1212 // Global methods / variables that can be accessed by element js 1213 window.luxuryPresence = { 1214 libs: { 1215 loadJs: loadScript, 1216 loadCss: loadCSS, 1217 jsLibsMap: { 1218 paroller: { 1219 jsSrc: 'https://d1e1jt2fj4r8r.cloudfront.net/javascript/jquery.paroller.min.js', 1220 isLoaded: false, 1221 }, 1222 ionRangeSlider: { 1223 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/js/ion.rangeSlider.min.js', 1224 cssSrc: 'https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/css/ion.rangeSlider.min.css', 1225 isLoaded: false, 1226 requires: ['jquery'], 1227 }, 1228 splide: { 1229 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/splidejs/4.1.4/js/splide.min.js', 1230 cssSrc: 'https://cdnjs.cloudflare.com/ajax/libs/splidejs/4.1.4/css/splide-core.min.css', 1231 isLoaded: false, 1232 }, 1233 wow: { 1234 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/wow/1.1.2/wow.min.js', 1235 isLoaded: false, 1236 }, 1237 jquery: { 1238 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js', 1239 isLoaded: false, 1240 }, 1241 slick: { 1242 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick.min.js', 1243 isLoaded: false, 1244 requires: ['jquery'], 1245 }, 1246 libphonenumber: { 1247 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/libphonenumber-js/1.11.8/libphonenumber-js.min.js', 1248 isLoaded: false, 1249 }, 1250 }, 1251 }, 1252 }; 1253 </script>
1253 1254
1254<script defer src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js" integrity="sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g==" crossorigin="anonymous" referrerpolicy="no-referrer" onload="window.luxuryPresence.libs.jsLibsMap.jquery.isLoaded = true"></script>
1254 1255
1255<script defer src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.7.8/handlebars.min.js"></script>
1255 1256
1256<script defer src="https://cdn.jsdelivr.net/npm/[email protected]/dist/handlebars-intl.min.js"></script>
1256 1257
1257<script defer src="https://cdnjs.cloudflare.com/ajax/libs/superagent/4.1.0/superagent.min.js"></script>
1257 1258
1258<script defer src="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick.min.js" onload="window.luxuryPresence.libs.jsLibsMap.slick.isLoaded = true"></script>
1258 1259
1259<script defer src="https://cdnjs.cloudflare.com/ajax/libs/wow/1.1.2/wow.min.js" onload="window.luxuryPresence.libs.jsLibsMap.wow.isLoaded = true"></script>
1259 1260
1260<script defer src="https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/js/ion.rangeSlider.min.js" onload="window.luxuryPresence.libs.jsLibsMap.ionRangeSlider.isLoaded = true"></script>
1260 1261 1262 <!-- GOOGLE TRANSLATE SCRIPT --> 1263
1263<script> 1264 function googleTranslateElementInit() { 1265 // list of languages can be overridden by setting window.customLanguages in the head JS. example `window.customLanguages = 'en,de,fr,ro,sk,pl'` 1266 // Language codes can be taken from here https://cloud.google.com/translate/docs/languages 1267 const DEFAULT_LANGUAGES = 'en,es,zh-CN,zh-TW,tl,vi,ar,ko,ru,de,fr,hi,pt'; 1268 document.querySelectorAll('[data-type="TRANSLATE"]').forEach(function(translate){ 1269 translate.innerText = ''; 1270 new google.translate.TranslateElement({ 1271 pageLanguage: 'en', 1272 layout: google.translate.TranslateElement.InlineLayout.SIMPLE, 1273 includedLanguages: window.customLanguages || DEFAULT_LANGUAGES, 1274 }, translate); 1275 }); 1276 } 1277 </script>
1277 1278
1278<script defer src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>
1278 1279
1279<script defer src="https://accounts.google.com/gsi/intermediate"></script>
1279 1280 1281 <!-- GOOGLE TRANSLATE SCRIPT END--> 1282
1282<script> 1283 1284 // UI helpers 1285 (function () { 1286 1287 function getSideMenu () { 1288 return document.querySelector('body > div.sidemenu'); 1289 } 1290 1291 function sideMenuHide (instant) { 1292 var sideMenu = getSideMenu(); 1293 if (!sideMenu || !sideMenu.classList.contains('visible')) { 1294 return; 1295 } 1296 sideMenu.classList.remove('visible'); 1297 sideMenu.dispatchEvent(new CustomEvent('lpui-hide', { detail: { instant: !!instant } })); 1298 window.dispatchEvent(new CustomEvent('lpui-sidemenu-hide', { detail: {instant: !!instant} })); 1299 } 1300 1301 function sideMenuShow () { 1302 var sideMenu = getSideMenu(); 1303 if (!sideMenu || sideMenu.classList.contains('visible')) { 1304 return; 1305 } 1306 sideMenu.classList.add('visible'); 1307 sideMenu.dispatchEvent(new Event('lpui-show')); 1308 window.dispatchEvent(new Event('lpui-sidemenu-show')); 1309 } 1310 1311 function sideMenuToggle () { 1312 var sideMenu = getSideMenu(); 1313 if (!sideMenu) { 1314 return; 1315 } 1316 var isSideMenuVisible = sideMenu.classList.contains('visible'); 1317 if (isSideMenuVisible) { 1318 sideMenuHide(); 1319 } else { 1320 sideMenuShow(); 1321 } 1322 } 1323 1324 var scrollLockRequests = {}; 1325 window.__debug_scrollLockRequests = scrollLockRequests; 1326 var hideScrollStyles = ''+ 1327 'body {'+ 1328 'overflow: hidden;' + 1329 '}'; 1330 var hideScrollId = 'hide-body-scroll-style'; 1331 1332 function scrollLock () { 1333 var style = document.createElement('style'); 1334 style.id = hideScrollId; 1335 style.textContent = hideScrollStyles; 1336 document.head.appendChild(style); 1337 window.dispatchEvent(new Event('lpui-scroll-locked')); 1338 } 1339 1340 function scrollUnlock () { 1341 document.getElementById(hideScrollId)?.remove(); 1342 window.dispatchEvent(new Event('lpui-scroll-unlocked')); 1343 } 1344 1345 function requestScrollLock (lockId) { 1346 var wasLocked = Object.keys(scrollLockRequests).length > 0; 1347 scrollLockRequests[lockId || '__anonymous_lock'] = true; 1348 if (!wasLocked) { 1349 scrollLock(); 1350 } 1351 } 1352 1353 function releaseScrollLock (lockId) { 1354 if (lockId) { 1355 delete scrollLockRequests[lockId]; 1356 if (!Object.keys(scrollLockRequests).length) { 1357 scrollUnlock(); 1358 } 1359 } else { 1360 scrollLockRequests = {}; 1361 window.__debug_scrollLockRequests = scrollLockRequests; 1362 scrollUnlock(); 1363 } 1364 } 1365 1366 function showModal (modalId, options) { 1367 var modal = document.getElementById(modalId); 1368 if (!modal) { 1369 return; 1370 } 1371 1372 if (!modal.classList.contains('visible')) { 1373 modal.classList.add('visible'); 1374 if (options && options.scrollLock) { 1375 window.lpUI.requestScrollLock(modalId); 1376 } 1377 modal.dispatchEvent(new Event('lpui-show')); 1378 window.dispatchEvent(new CustomEvent('lpui-modal-show', { detail: { id: modalId } })); 1379 } 1380 1381 const visibleModals = document.querySelectorAll('.modal.visible'); 1382 1383 if (visibleModals.length > 1) { 1384 1385 const maxZIndex = Array.from(visibleModals).reduce((maxZIndex, modal) => { 1386 const zIndex = window.getComputedStyle(modal).zIndex; 1387 const parsedZIndex = zIndex !== 'auto' ? parseInt(zIndex) : 0; 1388 return Math.max(maxZIndex, parsedZIndex); 1389 }, 0); 1390 1391 modal.style.zIndex = maxZIndex + 1; 1392 } 1393 1394 } 1395 1396 function _hideModal (modalEl) { 1397 if (!modalEl) { 1398 return; 1399 } 1400 if (!modalEl.classList.contains('visible')) { 1401 return; 1402 } 1403 modalEl.classList.remove('visible'); 1404 modalEl.style.zIndex = '';
1405 modalEl.dispatchEvent(new Event('lpui-hide')); 1406 var modalId = modalEl.getAttribute('id'); 1407 if (modalId) { 1408 window.lpUI.releaseScrollLock(modalId); 1409 window.dispatchEvent(new CustomEvent('lpui-modal-hide', { detail: { id: modalId } })); 1410 } 1411 } 1412 1413 function hideModal (modalId) { 1414 _hideModal(document.getElementById(modalId)); 1415 } 1416 1417 function hideClosestModal (el) { 1418 const modal = el?.closest('.modal'); 1419 if (!modal) { 1420 return; 1421 } 1422 if (modal.classList) { 1423 _hideModal(modal); 1424 return; 1425 } 1426 if (modal.length && modal[0].classList) { 1427 _hideModal(modal[0]); 1428 } 1429 } 1430 1431 window.lpUI = { 1432 sideMenuHide: sideMenuHide, 1433 sideMenuShow: sideMenuShow, 1434 sideMenuToggle: sideMenuToggle, 1435 requestScrollLock: requestScrollLock, 1436 releaseScrollLock: releaseScrollLock, 1437 showModal: showModal, 1438 hideModal: hideModal, 1439 hideClosestModal: hideClosestModal 1440 } 1441 })(); 1442 1443 var stringifyPrimitive = function(v) { 1444 switch (typeof v) { 1445 case 'string': 1446 return v; 1447 1448 case 'boolean': 1449 return v ? 'true' : 'false'; 1450 1451 case 'number': 1452 return isFinite(v) ? v : ''; 1453 1454 default: 1455 return ''; 1456 } 1457 }; 1458 1459 function objectToQuerystring(obj, sep, eq, name) { 1460 // https://github.com/Gozala/querystring/blob/master/encode.js 1461 sep = sep || '&'; 1462 eq = eq || '='; 1463 if (obj === null) { 1464 obj = undefined; 1465 } 1466 1467 if (typeof obj === 'object') { 1468 return Object.keys(obj).map(function(k) { 1469 var ks = encodeURIComponent(stringifyPrimitive(k)) + eq; 1470 if (Array.isArray(obj[k])) { 1471 return obj[k].map(function(v) { 1472 return ks + encodeURIComponent(stringifyPrimitive(v)); 1473 }).join(sep); 1474 } else { 1475 return ks + encodeURIComponent(stringifyPrimitive(obj[k])); 1476 } 1477 }).filter(Boolean).join(sep); 1478 1479 } 1480 1481 if (!name) return ''; 1482 return encodeURIComponent(stringifyPrimitive(name)) + eq + 1483 encodeURIComponent(stringifyPrimitive(obj)); 1484 } 1485 1486 function getPath(url, options) { 1487 var parser = document.createElement('a'); 1488 parser.href = url || ''; 1489 var path = parser.pathname || ''; 1490 if (path[0] !== '/') { 1491 // IE does not return path starting with a slash 1492 path = '/' + path; 1493 } 1494 1495 if (options && options.queryString) { 1496 path += parser.search; 1497 } 1498 1499 return path; 1500 } 1501 1502 function getMLSAutocomplete(keyword) { 1503 var searchURL = window.location.protocol + '//' + window.location.hostname + '/home-search/auto_complete'; 1504 var query = { 1505 kind: 'listings', 1506 query: keyword 1507 }; 1508 1509 return superagent 1510 .get(searchURL) 1511 .query(query) 1512 .then(function(res) { 1513 var data = res.body || []; 1514 // Array of listing_auto_complete documents: id, display_address, city, state, 1515 // price, sold_price, status, status_modified_at, photo_urls (array of URLs). 1516 1517 return data; 1518 }); 1519 } 1520 1521 function getMLSAutocompleteWithFilters(keyword, filters = {}) { 1522 var searchURL = window.location.protocol + '//' + window.location.hostname + '/home-search/auto_complete'; 1523 1524 return superagent 1525 .get(searchURL) 1526 .query({ kind: 'listings', query: keyword, ...filters }) 1527 .then(function(res) { 1528 // Same response shape as getMLSAutocomplete. 1529 return res.body || []; 1530 }); 1531 } 1532 1533 function makeMlsLink(data) { 1534 // Code Dupe from utils/googlePlace 1535 // mapping of google data type to mls data type 1536 var mapping = { 1537 neighborhood: 'neighborhood', 1538 locality: 'place', 1539 administrative_area_level_2: 'county', 1540 administrative_area_level_1: 'state', 1541 postal_code: 'postalcode', 1542 }; 1543 1544 function _filterTypes(types) { 1545 return types.filter(function(type) { return type !== 'political' }); 1546 } 1547 1548 if (!data || !Object.keys(data).length) { 1549 return '/home-search/listings'; 1550 } 1551 1552 var newData = {};
1553 _filterTypes(data.types).forEach(function(type) { 1554 if (mapping[type]) { 1555 newData.search_type = mapping[type]; 1556 } 1557 }); 1558 newData.omnibox = data.formatted_address; 1559 data.address_components.forEach(function(component) { 1560 _filterTypes(component.types).forEach(function(type) { 1561 if (mapping[type]) { 1562 newData[mapping[type]] = component.long_name; 1563 } 1564 }); 1565 }); 1566 var bounds = data.geometry.bounds; 1567 var convertedData = Object.assign(bounds, newData); 1568 1569 return '/home-search/listings?' + objectToQuerystring(convertedData); 1570 } 1571 1572 function debounce(func, wait) { 1573 let timeout; 1574 return function(...args) { 1575 const context = this; 1576 clearTimeout(timeout); 1577 timeout = setTimeout(() => func.apply(context, args), wait) 1578 } 1579 } 1580 1581 // Global methods / variables that can be accessed by element js 1582 window.luxuryPresence = { 1583 ...window.luxuryPresence, 1584 defaults: { 1585 companyId: 'bda25091-f9eb-4ebc-b64e-6a6cfd5df967', 1586 apiGatewayUrl: '/api-gw', 1587 routerUrl: '/api-nv', 1588 gql: {"agents":"\n query Agents (\n $agentId: ID\n $agentIds: [ID!]\n $companyId: String\n $network: Boolean\n $networkId: String\n $officeId: [ID!]\n $excludeOfficeId: [ID!]\n $offset: Int\n $limit: Int\n $sort: String\n $sortDir: SortDirectionEnum\n $search: String\n $tags: [String]\n $tagsMode: TagsModeEnum\n $teamId: [ID!]\n $developmentId: [ID!]\n $prioritizeIds: Boolean\n ) {\n agents (\n agentId: $agentId\n agentIds: $agentIds\n companyId: $companyId\n network: $network\n networkId: $networkId\n officeId: $officeId\n excludeOfficeId: $excludeOfficeId\n offset: $offset\n limit: $limit\n sort: $sort\n sortDir: $sortDir\n search: $search\n tags: $tags\n tagsMode: $tagsMode\n teamId: $teamId\n developmentId: $developmentId\n prioritizeIds: $prioritizeIds\n ) {\n id\n firstName\n lastName\n avatar {\n smallUrl\n mediumUrl\n largeUrl\n height\n width\n }\n position\n bioLong\n bioShort\n seoTitle\n seoDescription\n slug\n phoneNumber\n phoneNumber2\n license\n email\n leadAgent\n greaterArea\n tags\n }\n agentsCount(\n agentIds: $agentIds\n companyId: $companyId\n network: $network\n networkId: $networkId\n officeId: $officeId\n excludeOfficeId: $excludeOfficeId\n search: $search\n tags: $tags\n tagsMode: $tagsMode\n teamId: $teamId\n developmentId: $developmentId\n prioritizeIds: $prioritizeIds\n ) {\n count\n }\n }\n","properties":"\n query Properties(\n $agentIds: [ID!]\n $teamIds: [ID!]\n $neighborhoodIds: [ID!]\n $officeIds: [ID!]\n $propertyId: ID\n $companyId: String\n $networkId: String\n $network: Boolean\n $statusId: String\n $propertyIds: [ID!]\n $prioritizeIds: Boolean\n $statusIds: [String!]\n $excludeStatusId: [String!]\n $neighborhoodId: String\n $addressState: [String!]\n $addressCity: [String!]\n $relatedNeighborhoodPropertyId: String\n $developmentId: String\n $featuredListing: Boolean\n $leaseProperty: Boolean\n $search: String\n $searchTermMode: SearchTermModeEnum\n $globalProperty: Boolean\n $archived: Boolean\n $salesPriceGTE: Float\n $salesPriceLTE: Float\n $leasePriceGTE: Float\n $leasePriceLTE: Float\n $livingSpaceSizeGTE: Float\n $livingSpaceSizeLTE: Float\n $bathCountGTE: Float\n $bathCountLTE: Float\n $bedroomCountGTE: Float\n $bedroomCountLTE: Float\n $architectureStyle: String\n $lifestyle: String\n $propertyTypeId: String\n $propertyTypeIds: [String!]\n $spaceTypeIds: [ID!]\n $tag: String\n $backfillMLSResults: Boolean\n $displayMLSListings: String\n $hostname: String\n $websiteId: ID\n $backfillProviders: [String!]\n $backfillMLSListingIds: [String!]\n $backfillMLSAgentIds: [String!]\n $backfillMLSOfficeIds: [String!]\n $backfillBoundary: JSON\n $openHouse: Boolean\n $withGeo: Boolean\n $advancedFilters: JSON\n $seasonalPriceId: ID\n $offset: Int\n $limit: Int\n $sort: String\n $sortDir: SortDirectionEnum\n ) {\n properties(\n \n agentIds: $agentIds\n teamIds: $teamIds\n propertyId: $propertyId\n propertyIds: $propertyIds\n prioritizeIds: $prioritizeIds\n companyId: $companyId\n network: $network\n networkId: $networkId\n statusId: $statusId\n statusIds: $statusIds\n excludeStatusId: $excludeStatusId\n neighborhoodId: $neighborhoodId\n neighborhoodIds: $neighborhoodIds\n officeIds: $officeIds\n addressState: $addressState\n addressCity: $addressCity\n developmentId: $developmentId\n featuredListing: $featuredListing\n leaseProperty: $leaseProperty\n search: $search\n searchTermMode: $searchTermMode\n salesPriceGTE: $salesPriceGTE\n salesPriceLTE: $salesPriceLTE\n leasePriceGTE: $leasePriceGTE\n leasePriceLTE: $leasePriceLTE\n livingSpaceSizeGTE: $livingSpaceSizeGTE\n livingSpaceSizeLTE: $livingSpaceSizeLTE\n bathCountGTE: $bathCountGTE\n bathCountLTE: $bathCountLTE\n bedroomCountGTE: $bedroomCountGTE\n bedroomCountLTE: $bedroomCountLTE\n architectureStyle: $architectureStyle\n lifestyle: $lifestyle\n propertyTypeId: $propertyTypeId\n propertyTypeIds: $propertyTypeIds\n spaceTypeIds: $spaceTypeIds\n tag: $tag\n archived: $archived\n globalProperty: $globalProperty\n withGeo: $withGeo\n openHouse: $openHouse\n displayMLSListings: $displayMLSListings\n advancedFilters: $advancedFilters\n seasonalPriceId: $seasonalPriceId\n\n relatedNeighborhoodPropertyId: $relatedNeighborhoodPropertyId\n backfillMLSResults: $backfillMLSResults\n hostname: $hostname\n websiteId: $websiteId\n backfillProviders: $backfillProviders\n backfillMLSListingIds: $backfillMLSListingIds\n backfillMLSAgentIds: $backfillMLSAgentIds\n backfillMLSOfficeIds: $backfillMLSOfficeIds\n backfillBoundary: $backfillBoundary\n offset: $offset\n limit: $limit\n sort: $sort,\n sortDir: $sortDir\n ){\n id\n name\n status\n originalStatus {\n id\n name\n }\n salesPrice\n reducedPrice\n isPasswordProtected\n bedroomCount\n bathCount\n fullBathCount\n halfBathCount\n threeQuarterBathCount\n fullAddress\n addressLine1\n addressLine2\n addressCity\n addressState\n addressCountry\n postalCode\n description\n syncedAt\n officeName\n attributionContact\n neighborhood {\n id\n }\n media {\n smallUrl\n mediumUrl\n largeUrl\n xLargeUrl\n xxLargeUrl\n height\n width\n }\n seoTitle\n seoDescription\n slug\n fromMLS\n mlsId\n mlsLogo\n mlsAttribution\n openHouse\n openHouseHours\n priceUponRequest\n privateAddress\n leaseProperty\n leasePrice\n currency\n leaseTermFrequencyInterval\n leaseTermFrequencyCount\n leasePeriod\n livingSpaceSize\n livingSpaceUnits\n lotAreaSize\n lotAreaUnits\n tags\n latitude\n longitude\n soldDate\n timeZone\n buyerAgencyCompensation\n buyerAgencyCompensationType\n landIdUrl\
1588n }\n propertiesCount(\n \n agentIds: $agentIds\n teamIds: $teamIds\n propertyId: $propertyId\n propertyIds: $propertyIds\n prioritizeIds: $prioritizeIds\n companyId: $companyId\n network: $network\n networkId: $networkId\n statusId: $statusId\n statusIds: $statusIds\n excludeStatusId: $excludeStatusId\n neighborhoodId: $neighborhoodId\n neighborhoodIds: $neighborhoodIds\n officeIds: $officeIds\n addressState: $addressState\n addressCity: $addressCity\n developmentId: $developmentId\n featuredListing: $featuredListing\n leaseProperty: $leaseProperty\n search: $search\n searchTermMode: $searchTermMode\n salesPriceGTE: $salesPriceGTE\n salesPriceLTE: $salesPriceLTE\n leasePriceGTE: $leasePriceGTE\n leasePriceLTE: $leasePriceLTE\n livingSpaceSizeGTE: $livingSpaceSizeGTE\n livingSpaceSizeLTE: $livingSpaceSizeLTE\n bathCountGTE: $bathCountGTE\n bathCountLTE: $bathCountLTE\n bedroomCountGTE: $bedroomCountGTE\n bedroomCountLTE: $bedroomCountLTE\n architectureStyle: $architectureStyle\n lifestyle: $lifestyle\n propertyTypeId: $propertyTypeId\n propertyTypeIds: $propertyTypeIds\n spaceTypeIds: $spaceTypeIds\n tag: $tag\n archived: $archived\n globalProperty: $globalProperty\n withGeo: $withGeo\n openHouse: $openHouse\n displayMLSListings: $displayMLSListings\n advancedFilters: $advancedFilters\n seasonalPriceId: $seasonalPriceId\n\n ) {\n count\n }\n }\n","pressReleases":"\n query PressReleases (\n $companyId: ID\n $pressReleaseIds: [ID!]\n $offset: Int\n $limit: Int\n $sort: String\n $sortDir: String\n $search: String\n $categories: [String!]\n $propertyId: [ID!]\n $developmentId: [ID!]\n $agentId: [ID!]\n $teamId: [ID!]\n $year: [Int!]\n ) {\n pressReleases (\n companyId: $companyId\n pressReleaseIds: $pressReleaseIds\n offset: $offset\n limit: $limit\n sort: $sort\n sortDir: $sortDir\n search: $search\n categories: $categories\n propertyId: $propertyId\n developmentId: $developmentId\n agentId: $agentId\n teamId: $teamId\n year: $year\n ) {\n items {\n id\n title\n description\n author\n externalUrl\n media {\n smallUrl\n mediumUrl\n largeUrl\n xLargeUrl\n xxLargeUrl\n height\n width\n altTagText\n }\n publishedAt\n categories\n }\n total\n }\n }\n","posts":"\n query Posts (\n $companyId: String\n $postId: [ID!]\n $slug: String\n $offset: Int\n $limit: Int\n $sort: String\n $sortDir: String\n $search: String\n $featured: Boolean\n $categoryId: [String!]\n $neighborhoodId: [String!]\n ) {\n posts (\n companyId: $companyId\n postId: $postId\n slug: $slug\n offset: $offset\n limit: $limit\n sort: $sort\n sortDir: $sortDir\n search: $search\n featured: $featured\n postStatusId: \"5f528253-abb7-484e-95c3-330269ac1102\"\n categoryId: $categoryId\n neighborhoodId: $neighborhoodId\n ) {\n items {\n id\n postId\n title\n subtitle\n description\n status: postStatus\n featured\n slug\n categories {\n id\n name\n }\n createdAt\n publishedAt\n scheduledAt\n createdBy {\n ... on Agent {\n firstName\n lastName\n }\n }\n customAuthor\n media {\n smallUrl\n mediumUrl\n largeUrl\n xLargeUrl\n xxLargeUrl\n height\n width\n altTagText\n }\n seoTitle\n seoDescription\n }\n total\n }\n }\n","testimonials":"\n query Testimonials (\n $companyId: String\n $agentId: ID\n $teamId: ID\n $testimonialIds: [ID!]\n $offset: Int\n $limit: Int\n $sort: String\n $sortDir: String\n $search: String\n ) {\n testimonials (\n companyId: $companyId\n agentId: $agentId\n teamId: $teamId\n testimonialIds: $testimonialIds\n offset: $offset\n limit: $limit\n sort: $sort\n sortDir: $sortDir\n search: $search\n ) {\n items {\n id\n testimonialId\n body\n author\n position\n media {\n smallUrl\n mediumUrl\n largeUrl\n xLargeUrl\n xxLargeUrl\n height\n width\n altTagText\n }\n seoTitle\n seoDescription\n agents {\n slug\n email\n firstName\n lastName\n avatar {\n smallUrl\n height\n width\n }\n }\n }\n total\n }\n }\n","neighborhoods":"\n query Neighborhoods (\n $neighborhoodId: ID\n $companyId: String\n $search: String\n $tag: String\n $offset: Int\n $limit: Int\n $sort: String\n $sortDir: SortDirectionEnum\n ) {\n neighborhoods (\n neighborhoodId: $neighborhoodId\n companyId: $companyId\n search: $search\n tag: $tag\n offset: $offset\n limit: $limit\n sort: $sort\n sortDir: $sortDir\n ) {\n id\n name\n description\n descriptionShort\n slug\n tags\n googlePlaceData\n mlsLink\n createdAt\n media {\n smallUrl\n mediumUrl\n largeUrl\n xLargeUrl\n xxLargeUrl\n height\n width\n }\n seoTitle\n seoDescription\n }\n neighborhoodsCount(\n companyId: $companyId\n search: $search\n tag: $tag\n ) {\n count\n }\n }\n","developments":"\n query Developments (\n $developmentId: ID\n $companyId: String\n $offset: Int\n $limit: Int\n $sort: String\n $sortDir: SortDirectionEnum\n $search: String\n $tag: [String!]\n $agentId: [ID!]\n $neighborhoodId: ID\n $neighborhoodIds: [ID!]\n ) {\n developments (\n developmentId: $developmentId\n companyId: $companyId\n offset: $offset\n limit: $limit\n sort: $sort\n sortDir: $sortDir\n search: $search\n tag: $tag\n agentId: $agentId\n neighborhoodId: $neighborhoodId\n neighborhoodIds: $neighborhoodIds\n ) {\n id\n name\n description\n descriptionShort\n slug\n createdAt\n media {\n smallUrl\n mediumUrl\n largeUrl\n xLargeUrl\n xxLargeUrl\n height\n width\n }\n googlePlaceData\n seoTitle\n seoDescription\n tags\n }\n developmentsCount(\n companyId: $companyId\n search: $search\n tag: $tag\n agentId: $agentId\n neighborhoodId: $neighborhoodId\n neighborhoodIds: $neighborhoodIds\n ) {\n count\n }\n }\n","pois":"\n query PointsOfInterest (\n $regionId: UUID!\n $radiu
1588s: Int\n $offset: Int\n $limit: Int\n $categories: [AreasOfInterestCategories!]\n $sortBy: AreasOfInterestSorting\n ) {\n pois: areasOfInterest (\n input: {\n regionId: $regionId\n radius: $radius\n offset: $offset\n limit: $limit\n categories: $categories\n sortBy: $sortBy\n }\n ) {\n items {\n name\n imageUrl\n url\n reviewCount\n rating\n price\n displayPhone\n distance\n category\n location {\n address1\n address2\n address3\n city\n zipCode\n country\n state\n }\n }\n total\n }\n }\n","offices":"\n query Offices (\n $companyId: ID!\n $officeIds: [ID!]\n $officeMlsIds: [String!]\n $externalIds: [String!]\n $externalSource: String\n $agentId: ID\n $archived: Boolean\n $tags: [String!]\n $slug: String\n $search: String\n $sort: String\n $sortDir: SortDirection\n $offset: Int\n $limit: Int\n ) {\n offices (\n companyId: $companyId\n officeIds: $officeIds\n officeMlsIds: $officeMlsIds\n externalIds: $externalIds\n externalSource: $externalSource\n agentId: $agentId\n archived: $archived\n tags: $tags\n slug: $slug\n search: $search\n sort: $sort\n sortDir: $sortDir\n offset: $offset\n limit: $limit\n ) {\n items {\n id\n companyId\n name\n slug\n officeMlsId\n shortDescription\n fullDescription\n addressLine1\n addressLine2\n addressCity\n addressState\n addressPostalCode\n addressCountry\n phone\n email\n officeHours\n coordinates\n googlePlaceData\n seoTitle\n seoDescription\n fullAddress\n tags\n media {\n id\n originalUrl\n thumbnailUrl\n smallUrl\n mediumUrl\n largeUrl\n xLargeUrl\n xxLargeUrl\n }\n }\n total\n }\n }\n","teams":"\n query Teams (\n $companyId: ID\n $teamIds: [ID!]\n $agentId: ID\n $externalIds: [String!]\n $externalSource: String\n $slug: String\n $search: String\n $sort: String\n $sortDir: String\n $offset: Int\n $limit: Int\n ) {\n teams (\n companyId: $companyId\n teamIds: $teamIds\n agentId: $agentId\n externalIds: $externalIds\n externalSource: $externalSource\n slug: $slug\n search: $search\n sort: $sort\n sortDir: $sortDir\n offset: $offset\n limit: $limit\n ) {\n items {\n id\n companyId\n name\n email\n shortBio\n addressLine1\n addressLine2\n addressCity\n addressState\n addressCountry\n phoneNumber1\n phoneNumber2\n postalCode\n avatar {\n id\n thumbnailUrl\n smallUrl\n mediumUrl\n largeUrl\n }\n urlWebsite\n socialLinks\n socialLinksArray\n tags\n seoTitle\n seoDesc\n slug\n displayOrder\n }\n total\n }\n }\n"}, 1589 propertyPlaceholderImage: {"id":"9f3498d1-ef24-47cb-bcdb-24d136de5b79","alt":null,"bytes":146953,"width":1920,"format":"png","height":1200,"pngUrl":"","shared":true,"curated":false,"duration":null,"largeUrl":"https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/2e2cec43-6316-47a0-b8a8-2584fce09016","smallUrl":"https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/2e2cec43-6316-47a0-b8a8-2584fce09016","authorUrl":null,"createdAt":"2025-08-01T14:51:04.075Z","mediumUrl":"https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1280/https://media-production.lp-cdn.com/media/2e2cec43-6316-47a0-b8a8-2584fce09016","sourceUrl":null,"updatedAt":"2025-08-01T14:51:04.075Z","xLargeUrl":"https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/2e2cec43-6316-47a0-b8a8-2584fce09016","__typename":"Media","altTagText":null,"authorName":null,"sourceName":"r2","xxLargeUrl":"https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/2e2cec43-6316-47a0-b8a8-2584fce09016","description":null,"displayName":"property-whiteplain-sir","originalUrl":"https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/2e2cec43-6316-47a0-b8a8-2584fce09016","resourceType":"image","thumbnailUrl":"https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=320/https://media-production.lp-cdn.com/media/2e2cec43-6316-47a0-b8a8-2584fce09016","originalFileName":"Property -whiteplain SIR","cloudinaryPublicId":"2e2cec43-6316-47a0-b8a8-2584fce09016"} 1590 }, 1591 objectToQuerystring: objectToQuerystring, 1592 getPath: getPath, 1593 getMLSAutocomplete: getMLSAutocomplete, 1594 getMLSAutocompleteWithFilters: getMLSAutocompleteWithFilters, 1595 makeMlsLink: makeMlsLink, 1596 debounce: debounce, 1597 }; 1598 1599 var wowOffset = 100; 1600 </script>
1600 1601
1601<script> 1602 (()=>{function e(e){return e&&e.__esModule?e.default:e}var t={},i={};i={getVideoFirstFrame(e){let t="https://res.cloudinary.com/";if(!e||!e.startsWith(t))return null;let i=e.replace(t,"").replace("f_auto:video","f_auto").split("/");if(-1===i[1].toLowerCase().indexOf("video"))return null;let s=i[i.length-1];s.lastIndexOf(".")>-1?s=`${s.slice(0,s.lastIndexOf("."))}.jpg`:s+=".jpg",i[i.length-1]=s;let r=3;"videos"===i[1].toLowerCase()&&""!==i[2]&&(r=2);let a=/^(?:[a-z]{1,3}|\$\w+)_\S+$/;for(;r<i.length-1&&a.test(i[r]);)r++;return i.splice(r,0,"so_0,eo_0"),t+i.join("/")}},t=function(e,{isEqual:t}){let s=[{field:"thumbnailUrl",w:320},{field:"smallUrl",w:960},{field:"mediumUrl",w:1280},{field:"largeUrl",w:1920},{field:"xLargeUrl",w:2560},{field:"xxLargeUrl",w:3456}],r=function(e,t,i){let s="en-US";if(!e)return"";if("string"==typeof e){let t=e.trim();if(/[^+\-0-9.]/.test(t))return e;if(!(e=parseFloat(t)))return""}let r="number"==typeof i?i:0,a=Number.isInteger(e)?0:r,o={minimumFractionDigits:a,maximumFractionDigits:a};return"USD"===t?`$${e.toLocaleString(s,o)}`:"CAD"===t?`$${e.toLocaleString(s,o)} CAD`:"EUR"===t?`\u{20AC}${e.toLocaleString(s,o)}`:"GBP"===t?`\xa3${e.toLocaleString(s,o)}`:"PERCENT"===t?`${e}%`:"number"==typeof i&&i>-1?e.toLocaleString(s,{maximumFractionDigits:i}):e.toLocaleString(s)},a=function(e){switch(e){case"DAY":return"daily";case"MONTH":return"monthly";case"WEEK":return"weekly";case"YEAR":return"yearly";case"QUARTER":return"quarterly";case"HALF_YEAR":return"semi-annually";case"NIGHTLY":return"nightly";case"SEASONAL":return"seasonally";default:return""}},o=function(e){switch(e){case"DAY":return"day";case"WEEK":return"wk";case"MONTH":return"mo";case"YEAR":return"yr";case"QUARTER":return"3 mos";case"HALF_YEAR":return"6 mos";case"NIGHTLY":return"night";case"SEASONAL":return"season";default:return""}},n=function(e){switch(e){case"DAY":return"day";case"WEEK":return"week";case"MONTH":return"month";case"YEAR":return"year";case"QUARTER":return"quarter";case"HALF_YEAR":return"6 months";case"NIGHTLY":return"night";case"SEASONAL":return"season";default:return""}},l=function(e,t){let i,s,r=t||{};switch(r.mode){case"short":i=o(e),s=r.frequencySeparator||"/";break;case"standard":case"std":i=n(e),s=r.frequencySeparator||"/";break;default:i=a(e),s=r.frequencySeparator||" "}return i?r.frequencyTag||r.frequencyClass?`${s}<${r.frequencyTag||"span"}${r.frequencyClass?` class="${r.frequencyClass}"`:""}>${i}</${r.frequencyTag||"span"}>`:s+i:""};return{isEmpty(e,t){let i=!e||"string"==typeof e&&!e.trim()||!Object.keys(e).length;return t.fn?i?t.fn(this):t.inverse(this):i},ifEquals(e,i,s){return t(e,i)?s.fn(this):s.inverse(this)},"raw-helper":function(e){return e.fn()},striptags:e=>e?(e=(e=(e=e.replace(/<\!--(.|[\r\n])*?-\->/g,"")).replace(/<(xml|style|svg)("[^"]*"|'[^']*'|[^>])*>(.|[\r\n])*?<\/\1>/gi,"")).replace(/ /g," ")).replace(/<\/?("[^"]*"|'[^']*'|[^>])*(>|$)/g,""):"",striptagsLineBreaks:e=>e?(e=(e=(e=(e=e.replace(/<\!--(.|[\r\n])*?-\->/g,"")).replace(/<(xml|style|svg)("[^"]*"|'[^']*'|[^>])*>(.|[\r\n])*?<\/\1>/gi,"")).replace(/(<br\s*\/?>)|(<\/p\s*>)(?=.*(<\/p\s*>|<br\s*\/?>))/g," ")).replace(/ /g," ")).replace(/<\/?("[^"]*"|'[^']*'|[^>])*(>|$)/g,""):"",truncate:(e,t,i)=>e?e.length>t?"string"==typeof i?e.slice(0,t-i.length)+i:e.slice(0,t):e:"",setSubArray(e=[],t,i,s,r){r.data.root[s]=e.slice(t,i)},formatAreaUnit(e){switch(e){case"ACRE":return"Acres";case"SQUARE_METER":return"Sq.M.";case"SQUARE_YARD":return"Sq.Yd.";default:return"Sq.Ft."}},formatFrequency:a,formatFrequencyShort:o,lpFormatFrequency:(e,t)=>l(e,t&&t.hash),subArray(e,t,i,s){return e>=t&&e<i?s.fn(this):s.inverse(this)},formatPropertyStatus(e,t,i){let s="";switch(e){case"SOLD":s="Sold";break;case"FOR_SALE":s="For Sale";break;case"COMING_SOON":s="Coming Soon";break;case"INACTIVE":s="Inactive";break;case"POCKET_LISTING":s="Pocket Listing";break;case"PENDING":s="Pending";break;case"UNDER_CONTRACT":s="Under Contract";break;case"ACTIVE_UNDER_CONTRACT":s="Active Under Contract";break;default:s=e}return("Sold"===s||"Leased"===s)&&t&&"string"==typeof i&&i&&(s+=` on ${i}`),s},formatGrade(e){switch(e){case"UNDERGRADUATE_COURSES":return"Undergrad";case"PRE_KINDERGARTEN":return"PreK";case"KINDERGARTEN":return"K";case"FIRST_GRADE":return"1st";case"SECOND_GRADE":return"2nd";case"THIRD_GRADE":return"3rd";case"FOURTH_GRADE":return"4th";case"FIFTH_GRADE":return"5th";case"SIXTH_GRADE":return"6th";case"SEVENTH_GRADE":return"7th";case"EIGHTH_GRADE":return"8th";case"NINTH_GRADE":return"9th";case"TENTH_GRADE":return"10th";case"ELEVENTH_GRADE":return"11th";case"TWELFTH_GRADE":return"12th";default:return""}},encodeURI:e=>encodeURI(e),encodeURIComponent:e=>encodeURIComponent(e),hbFormatDate(e,t){if(!e)return"";let i="current"===e?new Date:new Date(e);if(Number.isNaN(i.getTime()))return"";if("YYYY"===t||"year"===t)return`${i.getFullYear()}`;if("MM/DD/YY"===t){let e=i.getMonth()+1;return e<10&&(e=`0${e.toString()}`),`${e}/${i.getDate()}/${i.getFullYear().toString().substr(-2)}`}return`${["January","February","March","April","May","June","July","August","September","October","November","December"][i.getMonth()]} ${i.getDate()}, ${i.getFullYear()}`},openHousesFormat(e,t,i){if(!e||!t)return"";let s=e=>{let t=e.getHours();t>12&&(t-=12);let i=`${t}:${e.getMinutes()>9?e.getMinutes():"0"+e.getMinutes()}`;return e.getHours()>11?i+="PM":i+="AM",i},r="",a=e,o=t;
1602i&&(a=new Date(e).toLocaleString("en-US",{timeZone:i}),o=new Date(t).toLocaleString("en-US",{timeZone:i}),[,,,r]=new Date(t).toLocaleString("en-US",{timeZone:i,timeZoneName:"short"}).split(" "));let n=new Date(a),l=n.toLocaleDateString("en-US"),d=s(n),c=s(new Date(o));return`${l} ${d} - ${c} ${r}`},math:(e,t,i)=>(e=parseFloat(e),({"+":e+(i=parseFloat(i)),"-":e-i,"*":e*i,"/":e/i,"%":e%i})[t]),findByKey(e,t,i,s){let r=(e||[]).find(e=>e[t]===i);return s.fn(r)},capitalize(e,t,i){let s;return"string"==typeof e&&e.length&&(s=e.toLowerCase().split(t).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ").toString()),s},and:(...e)=>Array.prototype.slice.call(e).every(Boolean),or:(...e)=>Array.prototype.slice.call(e,0,-1).some(Boolean),not:e=>!e,orderByIds(t,i,s){let r="",a=null;s.data&&(a=e.createFrame(s.data));let o=(i||[]).filter(Boolean);if(o&&o.length){let e=0;r=o.reduce((i,r,o)=>{let n=(t||[]).find(e=>e.id===r);return n?(a&&(a.index=o-e),i+s.fn(n,{data:a})):(e+=1,i)},"")}else for(let e=0,i=(t||[]).length;e<i;e++)a&&(a.index=e),r+=s.fn(t[e],{data:a});return r},ifIn(e,t,i){return t&&t.indexOf(e)>-1?i.fn(this):i.inverse(this)},partial:(t,i)=>(e.registerPartial(t,e.compile(i.fn())),`
1602<script type="text/x-handlebars-template" class="${t} pagination-script">${i.fn()}<\/script>`),numCompare(e,t,i,s){return({"==":function(e,t){return e==t},"===":function(e,t){return e===t},"!=":function(e,t){return e!=t},"<":function(e,t){return e<t},">":function(e,t){return e>t},"<=":function(e,t){return e<=t},">=":function(e,t){return e>=t}})[i](e,t)?!s.fn||s.fn(this):!!s.fn&&s.inverse(this)},lpFormatNumber:r,arrayToHtmlList:(e,t)=>e.reduce((e,t)=>{try{if("object"==typeof t||null===t)return e;return e+=`<li>${t}</li>`}catch(e){}},""),join:(e,t,i)=>e&&e.join?e.join("string"==typeof t?t:", "):"",dedupe(t,i,s){let r=null,a=0,o=new Set;return s.data&&(r=e.createFrame(s.data)),(t||[]).reduce((e,t,n)=>{let l=i?t[i]:t;return!o.has(l)||i&&void 0===l?(o.add(l),r&&(r.index=n-a),e+s.fn(t,{data:r})):(a+=1,e)},"")},JSONstringify:(e,t)=>JSON.stringify(e),formatPropertyPrice(...t){let i=t[t.length-1].hash,s=t.length>1?t[0]:i.property,a=i.precision||0;t.length>2&&(i.mode=t[1]),i.mode||(i.mode="short");let o=t.length>3?t[2]:i.separator;if("string"!=typeof o&&(o=" | "),s.isPasswordProtected)return"Exclusive Listing";let n=t.length>4?t[3]:i.priceUponRequestText;if("string"!=typeof n&&(n="Price Upon Request"),s.priceUponRequest)return n;let d=s.salesPrice,c=null;"SOLD"!==s.status&&"Leased"!==s.status&&s.reducedPrice&&(i.reducedClass?c=s.reducedPrice:d=s.reducedPrice);let u="";c&&(u+=`<${i.reducedTag||"span"} class="${i.reducedClass}">${r(c,s.currency,a)}</${i.reducedTag||"span"}>`),d&&(d=r(d,s.currency,a),i.priceTag||i.priceClass?u+=`<${i.priceTag||"span"}${i.priceClass?` class="${i.priceClass}"`:""}>${d}</${i.priceTag||"span"}>`:u+=d);let h=s.leasePrice&&r(s.leasePrice,s.currency,a);if(h){u&&(u+=o);let e=`${h}${l(s.leasePeriod,i)}`;i.leaseTag||i.leaseClass?u+=`<${i.leaseTag||"span"}${i.leaseClass?` class="${i.leaseClass}"`:""}>${e}</${i.leaseTag||"span"}>`:u+=e}
1602return new e.SafeString(u)},mediaImage(t,i={}){if(!t)return;let{lazy:r,...a}=i.hash,o="",n="";if("string"==typeof t)o=t;else{let e={},{height:r,width:l,altTagText:d}=t;s.forEach(i=>{t[i.field]&&!e[t[i.field]]&&(e[t[i.field]]=i.w)});let c=Object.keys(e);if(!c.length)return;if(d&&(a.alt=d),r&&l&&(r>=l&&(a.class?a.class+=" portrait":a.class="portrait"),"setDims"in i.hash&&(a.width=l,a.height=r)),c.length>1&&l&&l<e[c[c.length-1]]){let t=c.findIndex(t=>e[t]>=l);c.splice(t+1),e[c[c.length-1]]=l}c.length>1&&(n=c.map(t=>`${t} ${e[t]}w`).join(", "),c.sort((t,i)=>Math.abs(e[t]-1280)-Math.abs(e[i]-1280))),o=c[0]}delete a.setDims,n||delete a.sizes,"alt"in a||(a.alt=""),!("loading"in a)&&(i?.data?.root?.sectionIndex>1||r)&&(a.loading="lazy");let l=Object.keys(a).map(t=>`${e.escapeExpression(t)}="${e.escapeExpression(a[t])}"`).join(" ");return new e.SafeString(`<img src="${o}"${n?` srcset="${n}"`:""}${l?` ${l}`:""}>`)},bgImage:e=>e?"string"==typeof e?e:e.largeUrl||e.url||"":"",concat(...e){let t="";for(let i in e)null!==e[i]&&void 0!==e[i]&&"object"!=typeof e[i]&&(t+=e[i]);return t},setVideoExtension(e,t){if(!e||!t)return"";let i=new URL(e);if("res.cloudinary.com"!==i.host)return i.pathname.endsWith(`.${t}`)?e:"";let s=i.pathname.lastIndexOf("."),r=i.pathname;return -1!==s&&(r=i.pathname.substr(0,s)),i.pathname=`${r}.${t}`,i.toString()},addVideoSources(e){if(!e)return"";if(!e.includes("res.cloudinary.com"))return`<source data-src="${e}">`;let t=e.replace(/\.(?:3gp|mpeg|mp4|m4v|m4p|ogv|ogg|mov|webm)$/,"");return[{format:"webm",codec:"vp9",htmlCodecs:";codecs=vp9"},{format:"mp4",codec:"h265",htmlCodecs:";codecs=hvc1"},{format:"mp4",codec:"h264",htmlCodecs:""}].map(e=>{let i=`${t.replace(/f_auto(?::video)?(?:,q_auto(?::\w+)?)?/,`f_${e.format},vc_${e.codec},q_auto:best,w_1920,c_limit`)}.${e.format}`;return`<source data-src="${i}" type="video/${e.format}${e.htmlCodecs}">`}).join("\n")},cloudinaryVideoFirstFrame:i.getVideoFirstFrame,initials(e,t){if(!e)return"";t?.hash?.endChar&&(e=e.split(t.hash.endChar)[0]);let i=+t?.hash?.maxChars||2,s=e.match(/\b\w/g)?.slice(0,i);return s?(t?.hash?.addText&&(s=s.map(e=>e+t.hash.addText)),s.join(t?.hash?.joinWith||"").toUpperCase()):""},normalizePhone(e){if(!e)return"";let t=String(e).trim();return(t.startsWith("+")?"+":"")+t.replace(/\D/g,"")}}};class s{constructor(e,t,i){if(this.config=e,this.window=t,this.document=i,!this.destroy)throw Error("Controllers must implement a deconstructor")}}let r="lp_lead_form_conversion_fired";function a(e,t){if(e&&t&&"function"==typeof t.sendGoogleTagManagerEvent&&!function(e){try{return"true"===e.sessionStorage.getItem(r)}catch{return!1}}(e))try{t.sendGoogleTagManagerEvent("event","generate_lead");try{e.sessionStorage.setItem(r,"true")}catch{}}catch{}}function o(e){return!!e&&(!!e.expired||Date.now()>=e.expiresAt)}let n="/api/v1/home-valuation";class l extends s{destroy(){}_cleanAddressString(e){if(!e||"string"!=typeof e)return"";let t=e.trim();if(t.includes("User entered address:")){let e=t.match(/User entered address:\s*\n?\s*([^\n]+)/);e&&e[1]&&(t=e[1].trim())}let i=t.indexOf(", call time frame:");return -1!==i&&(t=t.substring(0,i).trim()),t}_transformAddressComponents(e){let t=t=>(e.find(e=>e.componentType===t)||{}).componentName?.text,i={},s=t("street_number"),r=t("route"),a=t("administrative_area_level_1"),o=t("postal_code"),n=t("subpremise"),l=t("locality")||t("sublocality_level_1")||t("neighborhood");return s&&(i.streetNumber=s),r&&(i.streetName=r),l&&(i.city=l),a&&(i.state=a),o&&(i.zipcode=o),n&&(i.addressLine2=n),i}_extractAddressAndCoordinates(e){let t=null,i=null;if(e?.result){let{result:s}=e;s.address?.addressComponents&&(t=this._transformAddressComponents(s.address.addressComponents)),s.geocode?.location&&(i={latitude:s.geocode.location.latitude,longitude:s.geocode.location.longitude})}return{structuredAddress:t,coordinates:i}}_filterEmptyStrings(e){let t={};for(let[i,s]of Object.entries(e))""!==s&&null!=s&&(t[i]=s);return t}_getRawAddress(e){let t=e.activity.content||{},i=e.activity.comments_attributes?.[0]?.text;return[t.address,t["property-address"],t.property_address,t.Property_Address,i,t.message,t.homeValuationAddress,t.propertyAddress].map(e=>e&&this._cleanAddressString(e)).find(Boolean)||""}_logLeadEvent(e,t,i=null){let s={event:e,companyId:this.config.companyId,websiteId:this.config.websiteId,timestamp:new Date().toISOString(),hasEmail:!!t.activity?.author_email,hasAddress:!!this._getRawAddress(t)};if(i&&(s.errorMessage=i.userMessage||(i.status?`Request failed with status ${i.status}`:"An error occurred"),s.errorName=i.name,s.errorStatus=i.status),console.error(`[HomeValuation] ${e}`,JSON.stringify(s)),this.window.posthog)try{this.window.posthog.capture(e,s)}catch(e){console.error("[HomeValuation] PostHog capture failed:",e)}}_getUserFriendlyErrorMessage(e){return"AbortError"===e.name||e.message?.includes("timeout")?"Connection timed out. Please try again.":"TypeError"===e.name&&e.message?.includes("fetch")?"Unable to connect. Please check your internet connection and try again.":503===e.status||502===e.status||504===e.status?"Service temporarily unavailable. Please try again in a moment.":400===e.status?"Please check your information and try again.":"Something went wrong. Please try again or c
1602ontact us directly."}_formatStructuredAddress(e){if(!e||0===Object.keys(e).length)return"";let t=[];return t.push([e.streetNumber,e.streetName,e.addressLine2].filter(Boolean).join(" ")),t.push([[e.city,e.state].filter(Boolean).join(", "),e.zipcode].filter(Boolean).join(" ")),t.filter(Boolean).join(", ")}_buildHomeValuationData(e,t,i,s){let r=this._formatStructuredAddress(i)||this._getRawAddress(e);if(!r)throw Error("Unable to extract home valuation address from form data");let a={companyId:e.companyId,homeValuationAddress:r,homeValuationEstimate:t?new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",maximumFractionDigits:0,minimumFractionDigits:0}).format(t):null,websiteId:e.page.websiteId,sourceUrl:e.activity.source_url},o={leadEmailAddress:e.activity.author_email,leadFullName:e.activity.author_name,leadFirstName:e.activity.firstName,leadLastName:e.activity.lastName,leadPhoneNumber:e.activity.author_phone,parcelId:e.activity.content?.parcelId,resourceId:e.page.pageMeta?.resourceId,pageId:e.page.pageId,sourceResource:e.page.pageMeta?.s
1602ourceResource,pageElementId:e.page.pageMeta?.pageElementId,formId:e.page.pageMeta?.formId,utmSource:e.activity.content?.utm_source,utmMedium:e.activity.content?.utm_medium,utmCampaign:e.activity.content?.utm_campaign,utmTerm:e.activity.content?.utm_term,utmContent:e.activity.content?.utm_content,utmId:e.activity.content?.utm_id,timeToSell:e.activity.content?.timeToSell,lookingToBuy:e.activity.content?.lookingToBuy,consented:!!e.activity.content?.termsAccepted,referrer:e.referrer,content:e.activity.content||{},fields:e.fields||{}},n=this._filterEmptyStrings(o);return{...a,...n,...i&&{address:i},...s&&{coordinates:s}}}async _validateAddressSafely(e){if(!e)return console.error("Home valuation: No address found in form data"),null;try{return await this._validateAddressWithGoogleMaps(e)}catch(e){throw console.error("Error validating address with Google Maps:",e),e.userMessage=this._getUserFriendlyErrorMessage(e),e}}async _getHomeValuationEstimateSafely(e){try{return await this._getHomeValuationEstimate(e)}catch(e){throw console.error("Error getting home valuation estimate:",e),e.userMessage=this._getUserFriendlyErrorMessage(e),e}}_isSafeRedirectUrl(e){try{let{protocol:t}=new URL(e,this.window.location.href);return"https:"===t||"http:"===t}catch{return!1}}_parseResponsePayload(e){try{return e?JSON.parse(e):{}}catch{return{raw:e}}}_createResponseError(e,t){let i=Error(e&&"object"==typeof e&&Object.keys(e).length?e.message||JSON.stringify(e):"Request failed");return e&&"object"==typeof e&&Object.keys(e).length&&Object.assign(i,e),i.status=t,i}_resolveValuationApiBase(){let{config:e}=this;if(void 0!==e.valuationApiBase&&null!==e.valuationApiBase&&(""!==e.valuationApiBase||!e.isBuilder))return e.valuationApiBase;if(e.websiteApiGatewayUrl)return e.websiteApiGatewayUrl;throw Error("websiteApiGatewayUrl/valuationApiBase not configured for home valuation")}async _submitLead(e,t,i){let s=new AbortController,r=setTimeout(()=>s.abort(),1e4);try{let a=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t),signal:s.signal});clearTimeout(r);let n=await a.text(),l=this._parseResponsePayload(n);if(!a.ok)throw this._createResponseError(l,a.status);if(l&&"success"===l.status&&l.redirectUrl){if(o(i))return l;if(!this._isSafeRedirectUrl(l.redirectUrl))return console.error("Home valuation: refusing redirect to unsupported protocol"),l;return this.window.location.href=l.redirectUrl,{redirected:!0,url:l.redirectUrl}}return l}catch(e){throw clearTimeout(r),e}}async _submitHomeValuationRequest(e){let t=this._resolveValuationApiBase();this._logLeadEvent("home_valuation_submission_started",e);try{let i=this._getRawAddress(e),s=null;try{s=await this._validateAddressSafely(i)}catch(t){throw this._logLeadEvent("home_valuation_address_validation_failed",e,t),t}let r=null;try{r=await this._getHomeValuationEstimateSafely(s)}catch(t){this._logLeadEvent("home_valuation_estimate_failed",e,t),r=null}let{structuredAddress:a,coordinates:o}=this._extractAddressAndCoordinates(s),l=`${t}${n}`,d=this._buildHomeValuationData(e,r,a,o),c=await this._submitLead(l,d,e.deadline);return this._logLeadEvent("home_valuation_submission_success",e),c}catch(t){throw t.userMessage||(t.userMessage=this._getUserFriendlyErrorMessage(t)),this._logLeadEvent("home_valuation_submission_failed",e,t),t}}async _validateAddressWithGoogleMaps(e){let{config:t,window:i}=this,s=t.googleMapsAPIKey;if(!s&&i.luxuryPresence?.mapApiLoader&&(s=await i.luxuryPresence.mapApiLoader.getMapApiKey()),!s)throw Error("Google Maps API key not configured");let r=new AbortController,a=setTimeout(()=>r.abort(),1e4);try{let t=await fetch(`https://addressvalidation.googleapis.com/v1:validateAddress?key=${s}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({address:{addressLines:[e]},enableUspsCass:!1}),signal:r.signal});if(clearTimeout(a),!t.ok){let e=Error(`Address validation failed: ${t.status}`);throw e.status=t.status,e}return t.json()}catch(e){throw clearTimeout(a),e}}_hasMandatoryAddressFields(e){return!!(e.streetNumber&&e.streetName&&e.city&&e.state&&e.zipcode)}_logMissingAddressFields(e){let t=[];e.streetNumber||t.push("streetNumber"),e.streetName||t.push("streetName"),e.city||t.push("city"),e.state||t.push("state"),e.zipcode||t.push("zipcode"),console.log("Home valuation estimate skipped - missing required fields:",t.join(", "),"Available fields:",Object.keys(e).join(", "))}_buildAddressQueryString(e){return Object.entries(e).map(([e,t])=>`${encodeURIComponent(e)}=${encodeURIComponent(t)}`).join("&")}async _getHomeValuationEstimate(e=null){let t=`${this._resolveValuationApiBase()}${n}`;if(!e?.result?.address?.addressComponents)return null;let i=this._transformAddressComponents(e.result.address.addressComponents);if(!this._hasMandatoryAddressFields(i))return this._logMissingAddressFields(i),null;let s=this._buildAddressQueryString(i),r=`${t}?${s}`,a=new AbortController,o=setTimeout(()=>a.abort(),1e4);try{let e=await fetch(r,{headers:{Accept:"application/json"},signal:a.signal});if(clearTimeout(o),!e.ok){let t=Error(`Home valuation estimate failed: ${e.status}`);throw t.status=e.status,t}let t=await e.json();return t?.valueDollars??null}catch(e){throw clearTimeout(o),e}}}let d="middleName",c="redirect-pending",u=["name","firstName","lastName",d,"email","phone","phoneNumber","source","message","mlsId","sourceUrl"],h="lp_map_key_failed",p="oauthSuccess",m={cookieyes:{eventName:"cookieyes_consent_update",hasAnalyticsConsent:e=>(function(e){let t=e.cookie.match(/cookieyes-consent=([^;
1602]+)/);if(!t)return!1;try{let e=decodeURIComponent(t[1]);if(e.includes(",")){let t=e.split(",").map(e=>e.trim());if(t.some(e=>e.includes(":")))return t.some(e=>"analytics:yes"===e);return t.includes("analytics")}return e.includes("analytics")}catch(e){return!1}})(e),isAnalyticsAccepted:e=>Array.isArray(e?.accepted)&&e.accepted.includes("analytics")},"lp-consent":{eventName:"lp_consent_update",hasAnalyticsConsent:(e,t)=>!!t.__lpConsent?.state?.c?.analytics,isAnalyticsAccepted:e=>!!e?.choices?.analytics}};function g(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function y(e,t){t.forEach(t=>{let i=e[t];Array.isArray(i)&&0===i.length&&delete e[t]})}function f(e,t,i,s){let r=t.map(t=>(function e(t){return Array.isArray(t)?t.flatMap(t=>e(t)):"string"==typeof t?t.split(/\s+/).filter(Boolean):null==t?[]:[t]})(e[t])),a=s?.merge?r.flat():r.find(e=>e.length>0)??[];t.forEach(t=>{delete e[t]}),a.length>0&&(e[i]=[...new Set(a)])}function v(e){let t={...e};if(t.urlWebsite||(t.urlWebsite=null),t.urlYoutube=null,t.urlFacebook=null,t.urlInstagram=null,t.urlLinkedin=null,t.urlPodcast=null,t.urlTwitter=null,Array.isArray(e.socialLinks)){let i=[...e.socialLinks].sort((e,t)=>{let i=e.type?.toLowerCase()||"",s=t.type?.toLowerCase()||"";return i.localeCompare(s)});t.socialLinks=i;let s={youtube:"urlYoutube",facebook:"urlFacebook",instagram:"urlInstagram",linkedin:"urlLinkedin",podcast:"urlPodcast",twitter:"urlTwitter"};i.forEach(e=>{let i=s[e.type?.toLowerCase()??""];i&&(t[i]=e.link)})}return t}function w(e){return e&&Array.isArray(e)?e.map(e=>v(e)):e}function b(e){let{region:t}=e;if(!g(t))return e;let{schools:i,pois:s,...r}=t,a={...r,schools:g(i)?i.data??[]:[],...Array.isArray(s)?{pois:s.map(e=>({...e,category:"string"==typeof e.category?e.category.toUpperCase():e.category}))}:{}};return{...e,region:a}}function S(e){return e&&Array.isArray(e)?e.map(e=>b(e)):e}function _(e){let t=e.featuresAndAmenities;if(!Array.isArray(t))return e;let i=t.map(e=>({featureIds:e.featureIds??[],features:e.features??[],description:e.description}));return{...e,featuresAndAmenities:i}}function E(e){return e&&Array.isArray(e)?e.map(e=>_(e)):e}function I(e,t){return g(e)?t(e):e}function A(e,t){return Array.isArray(e)?t(e):e}var L={};L=` 1603 query PropertyDisclaimers($input: PropertyDisclaimersInput!) { 1604 propertyDisclaimers(input: $input) { 1605 feedId 1606 listingId 1607 resolvedFromListing 1608 listingCardAttribution 1609 listingDetailCourtesy 1610 listingDetailFooter 1611 logo 1612 } 1613 } 1614`;let $={mlsAttribution:"listingCardAttribution",mlsLogo:"logo",listingDetailCourtesy:"listingDetailCourtesy",listingDetailFooter:"listingDetailFooter"},x=new class{constructor(e){this.isBuilder=!1,this.companyId=null,this.websiteId=null,this.pageId=null,this.shareId=null,this.pageMeta=null,this.websiteApiGatewayUrl=null,this.buyerSellerServiceUrl=null,this.leadIngesterUrl=null,this.divolteServiceUrl=null,this.eventBus=null,this.templateId=null,this.myhomeDashboardEnabled=!1,this.mlsEnabled=!1,this.hstValuationRedirectEnabled=!1,this.hvStepTwoCaptureEnabled=!1,this.googleMapsAPIKey=null}get valuationApiBase(){return this.isBuilder?this.websiteApiGatewayUrl:""}destroy(){}setPage(e,t={}){this.pageId=e,this.shareId=t.shareId||null,this.pageMeta={sourceResource:t.sourceResource,pageElementId:t.pageElementId,pageQueryVariables:t.pageQueryVariables||{}}}setIsBuilder(e){this.isBuilder=e}setCompany(e,t={}){this.companyId=e}setWebsite(e,t={}){this.websiteId=e,t.myhomeDashboardEnabled&&(this.myhomeDashboardEnabled=t.myhomeDashboardEnabled),t.mlsEnabled&&(this.mlsEnabled=t.mlsEnabled),t.hstValuationRedirectEnabled&&(this.hstValuationRedirectEnabled=t.hstValuationRedirectEnabled),t.hvStepTwoCaptureEnabled&&(this.hvStepTwoCaptureEnabled=t.hvStepTwoCaptureEnabled)}setWebsiteApiGatewayUrl(e,t={}){this.websiteApiGatewayUrl=e}setBuyerSellerServiceUrl(e,t={}){this.buyerSellerServiceUrl=e}setDivolteServiceUrl(e,t={}){this.divolteServiceUrl=e}setEventBusUrl(e,t={}){this.eventBusUrl=e}setTemplateId(e,t={}){this.templateId=e}setLeadIngesterUrl(e,t={}){this.leadIngesterUrl=e}setGoogleMapsAPIKey(e,t={}){this.googleMapsAPIKey=e}setEventBus({enabled:e,apiKey:t,url:i}){this.eventBus={enabled:e,apiKey:t,url:i}}}({}),T=new class extends s{constructor(e,t,i){super(e,t,i),this.setLoginState=this.setLoginState.bind(this),this.pageId=null,this.modals=[],this.exitModalTriggered={},this.exitModalEventListeners=[]}initialize(e){try{let{config:t,document:i}=this;this.pageId=t.pageId,this.modals=i.querySelectorAll("body > #modals >
1614 .modal"),e.modals.forEach(e=>{this._attachModalHandler(e)})}catch(e){console.log(e)}}destroy(){let{document:e}=this;this.exitModalEventListeners.forEach(t=>{e.removeEventListener("mouseout",t)}),this.modals=[],this.exitModalTriggered={},this.exitModalEventListeners=[]}setModalWithExpiry(e){let{window:t}=this,i=new Date().getTime()+864e5,s=`modal-controller-${e}`;try{t.localStorage.setItem(s,JSON.stringify(i))}catch(e){}}setLoginState(){let{window:e}=this;try{e.localStorage.setItem("isSignedUp","true")}catch(e){}}getModalWithExpiry(e){let{window:t}=this,i=t.localStorage,s=i.getItem(`modal-controller-${e}`);if(!s)return!1;let r=JSON.parse(s);return!(new Date().getTime()>r)||(i.removeItem(`modal-controller-${e}`),!1)}show(e,t={}){let{window:i}=this,s=this.getModalWithExpiry(e);(e&&!s||!0===t.forced)&&(i.lpUI.showModal(`modal-${e}`,t),this.setModalWithExpiry(e))}_attachModalHandler(e){let{pageId:t}=this,{trigger:i,pageSpecific:s}=e;(!s||e.pages.map(e=>e.pageId).includes(t))&&("EXIT"===i?this._exitModalHandler(e):"TIMER"===i?this._timerModalHandler(e):"FORCED"===i&&this._forcedModalHandler(e))}_exitModalHandler(e){let t=this,{document:i,exitModalTriggered:s}=this,{modalId:r}=e;function a(e){!s[r]&&(e.toElement||e.relatedTarget||(t.show(r),s[r]=!0))}i.addEventListener("mouseout",a),this.exitModalEventListeners.push(a)}_timerModalHandler(e){let{modalId:t,timerDelay:i}=e;setTimeout(()=>{this.show(t)},i)}_forcedModalHandler(e){let{modalId:t}=e,{window:i,document:s}=this;if("true"!==i.localStorage.getItem("isSignedUp")){let e=s.querySelector(`#modal-${t}`),r=e?.querySelector("form"),a=r?.dataset.delay||2e3;r.addEventListener("formsubmitted",()=>{this.setLoginState()}),i.addEventListener("oauthSuccess",()=>{this.setLoginState(),r.classList.add("success"),setTimeout(()=>{i.lpUI.hideModal(`modal-${t}`),r.reset(),r.classList.remove("success")},a)}),this.show(t,{forced:!0})}}}(x,window,document),C=new class extends s{constructor(e,t,i){super(e,t,i),this._boundClickHandler=this._buttonClickHandler.bind(this)}initialize(e={}){try{let{document:e}=this;e.body.removeEventListener("click",this._boundClickHandler),e.body.addEventListener("click",this._boundClickHandler)}catch(e){console.error(e)}}destroy(){let{document:e}=this;e.body.removeEventListener("click",this._boundClickHandler)}_buttonClickHandler(e){this._handleButtonClick(e).catch(e=>console.error(e))}async _handleButtonClick(e){let{window:t,document:i}=this,s=e.target.closest("button, a");if(!s)return;let r=s.dataset.type||"",a=s.href||s.dataset.href||"",o=s.target||"",{submit:n}=s.dataset;if(n){try{await this._handleSubmit(s)}catch(e){console.error(e)}((e,t=!1)=>{if(e){if(t)return window.open(e);window.location.assign(e)}})(a,"_blank"===o)}if(this._trackConversion(s),"VIDEO"===r)return void this._handleVideoButton(s);if("CONTACT_US"===r)return void this._handleContactUsButton(s);if("SUBSCRIBE"===r)return void t.lpUI.showModal("modal-global-subscribe");if("MY_ACCOUNT"===r)return void t.lpUI.showModal("modal-global-my-account");if("SHARE_POPUP"===r){let t=s.querySelector(".share-popup");t&&(t.style.display="flex"),e.stopPropagation();return}if("MODAL_"===r.substring(0,6)){let e=r.substring(6);t.lpUI.showModal(`modal-${e}`);return}if(a?.startsWith("mailto:")){let e=a.substring(7);i.sendGoogleAnalyticsEvent({hitType:"event",eventCategory:"button",eventAction:"click",eventLabel:"Email",eventValue:e})}else if(a?.startsWith("tel:")){let e=a.substring(4);i.sendGoogleAnalyticsEvent({hitType:"event",eventCategory:"button",eventAction:"click",eventLabel:"Phone",eventValue:e})}}async _handleSubmit(e){let t=e.closest("form"),{window:i}=this;return t?await i.luxuryPresence.contactForms.submitForm(t):null}_getVimeoSrc(e){if(!e||!e.includes("vimeo.com")||e.length>2e3)return null;let t=e.match(/(?:(?:www\.)?vimeo\.com\/(?:showcase\/\d+(?:\/video\/|\?video[=/])|channels\/(?:\w+\/)?|groups\/(?:[^/]*)\/videos\/|)|player\.vimeo\.com\/video\/)(\d+)(?:(?:\?.*&*h=|\/)+([\d,a-f]+))?/);if(!t)return null;let[,i,s]=t,r=`https://player.vimeo.com/video/${i}?`;return s&&(r+=`h=${s}&`),r+="autoplay=1"}_handleVideoButton(e){let{document:t}=this,i=e.closest("section"),{src:s}=e.dataset,r="";if(s&&(s.includes("youtube.com")||s.includes("youtu.be"))&&!s.includes("youtube.com/embed")){let e=s.match(/(?:youtube\.com\/\S*(?:(?:\/e(?:mbed))?\/|watch\?(?:\S*?&?v=)
1614)|youtu.be\/)([a-zA-Z0-9_-]{6,11})/);e&&(r=e[1])}let a=this._getVimeoSrc(s);if(r?s=`https://youtube.com/embed/${r}?autoplay=1&controls=0`:a&&(s=a),!s||!i)return;let o=s.endsWith(".mp4")||s.endsWith(".webm")||s.includes("cloudinary.com"),n=` 1615 <div id="modal-${i.id}" class="modal visible"> 1616 <div class="modal-content"> 1617 <div class="lightbox-video"> 1618 <div class="video-player"> 1619 <div class="embed-container"> 1620 ${o?`<video controls autoplay src="${s}"></video>`:`<iframe frameborder="0" allowfullscreen="1" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" title="YouTube video player" width="100%" height="100%" src="${s}"></iframe>`} 1621 </div> 1622 </div> 1623 </div> 1624 </div> 1625 <button class="close lp-close" type="button" aria-label="close modal"><span class="lp-close-icon" aria-hidden="true"></span></button> 1626 </div> 1627 `;t.body.insertAdjacentHTML("beforeend",n);let l=t.getElementById(`modal-${i.id}`);l.querySelector(".close").addEventListener("click",()=>{l.remove()})}_handleContactUsButton(e){let{window:t,document:i}=this;i.sendGoogleAnalyticsEvent({hitType:"event",eventCategory:"button",eventAction:"click",eventLabel:"contact"}),t.lpUI.showModal("modal-global-contact-us",{scrollLock:!0})}_trackConversion(e){let{window:t,document:i}=this,{gtagConversionId:s,gtagConversionLabel:r,fbEventName:a}=e.dataset;if(s&&r){t.dataLayer&&t.dataLayer.length&&(t.dataLayer.some(e=>e.length&&"config"===e[0]&&e[1]===s)||i.sendGoogleTagManagerEvent("config",s));let e=`${s}/${r}`;i.sendGoogleTagManagerEvent("event","conversion",{send_to:e})}t.fbq&&a&&t.fbq("track",a,{})}}(x,window,document),k=new class extends s{constructor(e,t,i){super(e,t,i),this.validatedForms=[]}initialize(e={}){try{let{window:t,document:i}=this,{selector:s}=e,r=[];if(r=s?i.querySelectorAll(`${s} form[data-type="contact-form"]`):i.querySelectorAll('form[data-type="contact-form"]'),i.querySelectorAll('input[type="tel"]').length&&!t.libphonenumber&&t?.luxuryPresence?.libs){let{loadJs:e,jsLibsMap:i}=t.luxuryPresence.libs,{libphonenumber:s}=i;e(s.jsSrc,this.attachValidation.bind(this,r))}else this.attachValidation(r);this.validatedForms=this.validatedForms.concat(r)}catch(e){console.log(e)}}destroy(){this.validatedForms=[]}attachValidation(e){e.forEach(e=>{e.querySelectorAll("input, select, textarea").forEach(e=>{this.applyFieldValidation(e)})})}applyFieldValidation(e){"tel"===e.getAttribute("type")&&this._applyPhoneValidation(e)}_applyPhoneValidation(e){let{window:t}=this;if(t.libphonenumber){let i=t.libphonenumber.isValidPhoneNumber;e.addEventListener("keyup",function(){if(this.hasAttribute("required")||this.value.replace(/\s/g,"").length)try{let e=this.value;i(e,"US")?this.setCustomValidity(""):this.setCustomValidity("Please enter a valid phone number.")}catch(e){this.setCustomValidity("Please enter a valid phone number.")}else this.setCustomValidity("")})}}}(x,window,document),M=new class extends s{constructor(e,t,i){super(e,t,i),this.forms=[],this.homeValuationService=new l(e,t,i)}initialize(e={}){try{let{document:t}=this,{selector:i}=e,s=[];(s=i?t.querySelectorAll(`${i} form[data-type="contact-form"]`):t.querySelectorAll('form[data-type="contact-form"]')).forEach(e=>{this._attachSubmitHandler(e)}),this.forms=this.forms.concat(s)}catch(e){console.log(e)}}destroy(){this.forms=[]}submitForm(e){this._handleSubmit(null,e).catch(e=>console.error(e))}_attachValidation(e){let{window:t}=this;e.querySelectorAll("input, select, textarea").forEach(e=>{t.luxuryPresence.validation.applyFieldValidation(e)})}_attachSubmitHandler(e){e.addEventListener("submit",t=>this._handleSubmit(t,e))}_extractFormValues(e){let t=new FormData(e),i={},s=[],r=/^name(?:-\d+)?$/;return t.forEach((e,t)=>{if("string"==typeof e){let a=e.trim();r.test(t)&&a&&s.push(a);let o=i[t];i[t]=o?`${o} ${a}`:a}else i[t]=e}),s.length?i.name=s.join(" ").trim():!i.name&&i.firstName&&(i.name=i.firstName,i.lastName&&(i.name+=` ${i.lastName}`)),this._deriveNameParts(i)}_deriveNameParts(e){if(e.firstName||!e.name)return e;let t=e.name.indexOf(" ");return -1===t?{...e,firstName:e.name}:{...e,firstName:e.name.slice(0,t),lastName:e.lastName||e.name.slice(t+1).trim()}}_buildSubmissionData(e,t,i){let{window:s,config:r}=this,a=Object.keys(e).filter(e=>!u.includes(e)).reduce((t,i)=>(t[i]=e[i],t),{}),{pageId:o,companyId:n,websiteId:l,pageMeta:d}=r,c=s.localStorage.getItem("utm_vars")||"{}",h=s.localStorage.getItem("referrer")||"",p=this._getFormId(i);return{activity:{author_email:e.email,author_name:e.name,firstName:e.firstName||void 0,lastName:e.lastName||void 0,author_phone:e.phone||e.phoneNumber,activity_source:e.source||"CONTACT_INQUIRY",comments_attributes:[{text:e.message||void 0}],source_url:s.location.href,content:{...a,...JSON.parse(c)}},page:{pageId:o,companyId:n,websiteId:l,pageMeta:{...d,formId:p}},companyId:n,referrer:h,fields:t}}_handleSubmissionSuccess(e){let{window:t}=this,i=e.dataset.delay||2e3;e.classList.remove("loading"),e.classList.remove("error"),e.classList.add("success"),e.querySelectorAll(".success").forEach(e
1627=>e.classList.remove("hide")),e.dispatchEvent(new Event("formsubmitted")),setTimeout(()=>{t.lpUI.hideClosestModal(e),e.reset(),t.lpUI.sideMenuHide(),e.querySelectorAll(".success").forEach(e=>e.classList.add("hide")),e.classList.remove("success")},i)}async _handleSubmit(e,t){if(e&&e.preventDefault(),!t.classList.contains("loading")){this._hideSubmissionError(t),t.classList.remove("error"),t.classList.add("loading");try{let e=this._extractFormValues(t);if(e.middleName)return void t.classList.remove("loading");let i=this._getFields(t),s=this._buildSubmissionData(e,i,t);a(this.window,this.document);let r=await this._waitForLeadSubmit(e=>this._submitLeadRequest(s,e));if(this._sendGAEvent(s),r?.redirected)return void this._showRedirectPending(t);this._handleSubmissionSuccess(t)}catch(e){console.error("Form submission failed:",e),t.dispatchEvent(new Event("formsubmiterror")),t.classList.remove("loading"),t.classList.add("error"),e.userMessage?this._showSubmissionError(t,e.userMessage):this._showSubmissionError(t,"Something went wrong. Please try again.")}}}async _waitForLeadSubmit(e){let t,i={expired:!1,expiresAt:Date.now()+6e3},s=new Promise(e=>{t=setTimeout(()=>{i.expired=!0,e(null)},6e3)}),r=e(i).catch(e=>{if(o(i))return null;throw e});try{return await Promise.race([r,s])}finally{clearTimeout(t)}}_showRedirectPending(e){if(e.classList.add(c),e.querySelector(`.${c}__indicator`))return;let t=this.document.createElement("div");t.className=`${c}__indicator`,t.setAttribute("role","status"),t.setAttribute("aria-label","Loading"),t.innerHTML='<span class="lp-i lp-i--spinner lp-i--pulse" aria-hidden="true"></span>',e.appendChild(t)}_aliasUserWithEventBus(e){try{if(!this.window.eventBusProvider?.alias||!this.window.eventBusProvider?.isIdentified||!this.window.eventBusProvider?.getDistinctId||!this.window.LuxuryPresenceEventBus?.generateUUIDv5FromCompanyEmail)return;if(this.window.eventBusProvider.isIdentified())return void console.log("[EventBus] User already identified, skipping alias");let t=e.activity?.author_email,{companyId:i}=this.config;if(!t||!i)return void console.warn("[EventBus] Missing required data for user alias");let s=this.window.eventBusProvider.getDistinctId();if(!s)return void console.warn("[EventBus] No anonymous ID available for alias");let r=this.window.LuxuryPresenceEventBus.generateUUIDv5FromCompanyEmail(i,t);this.window.eventBusProvider.alias({anonId:s,canonicalId:r}),console.log("[EventBus] User aliased with canonical ID")}catch(e){console.error("[EventBus] User alias failed:",e)}}async _submitLeadRequest(e,t){let{config:i}=this;return(this._aliasUserWithEventBus(e),i.myhomeDashboardEnabled&&(e.activity?.activity_source==="HOME_VALUATION"||e.activity?.activity_source==="HOME_VALUE"))?this.homeValuationService._submitHomeValuationRequest({...e,deadline:t}):fetch(`${i.leadIngesterUrl}/api/v1/leads`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}).then(e=>e.ok?e.json():e.json().then(e=>{throw e}))}_sendGAEvent(e){let{document:t}=this,i={hitType:"event",eventCategory:"button",eventAction:"click"};switch(e.activity.activity_source){case"NEWSLETTER_SIGNUP":i.eventLabel="Newsletter",t.sendGoogleTagManagerEvent("event","newsletter_signup");break;case"HOME_SEARCH":i.eventLabel="HomeSearch",t.sendGoogleTagManagerEvent("event","home_search");break;case"HOME_VALUE":case"HOME_VALUATION":i.eventLabel="HomeValue",t.sendGoogleTagManagerEvent("event","home_valuation");break;case"EBOOK":i.eventLabel="Ebook",t.sendGoogleTagManagerEvent("event","ebook_download");break;default:i={hitType:"pageview",page:"/thank-you"},t.sendGoogleTagManagerEvent("event","contact_inquiry")}t.sendGoogleAnalyticsEvent(i)}_getFields(e){let t=e.querySelectorAll("input, select, textarea"),i={};return t.forEach(t=>{let{id:s,name:r,type:a}=t;if(r===d)return!0;let o="";if(s){let i=e.querySelector(`label[for='${s}']`);i?o=i.textContent.trim():t.placeholder&&(o=t.placeholder.trim())}i[r]={label:o,type:t.tagName,inputType:"INPUT"===t.tagName?a:"text"}}),i}_getFormId(e){let t=e.closest("section[id^='section-'], footer[id], .modal[id^='modal-']");return t?.id?this._cleanFormId(t.id):""}_cleanFormId(e){for(let t of["section-","modal-"])if(e.startsWith(t))return e.substring(t.length);return e}_showSubmissionError(e,t){let i=e.querySelector(".submission-error-message");i||((i=this.document.createElement("div")).className="submission-error-message",i.setAttribute("role","alert"),e.appendChild(i)),i.textContent=t||"Something went wrong. Please try again.",i.style.display="block"}_hideSubmissionError(e){let t=e.querySelector(".submission-error-message");t&&(t.style.display="none")}}(x,window,document),P=new class extends s{constructor(e,t,i){super(e,t,i),this.retries=3,this.callbacks=[],this.id=`__googleMapsScriptId${Date.now()}`,this._apiKey="",this.reset()}set apiKey(e){this._apiKey=e,this.config.setGoogleMapsAPIKey(e)}get apiKey(){return this._apiKey}reset(){this.deleteScript(),this.done=!1,this.loading=!1,this.failed=!1,this.errors=[],this.onerrorEvent=null}destroy(){this.reset()}async getMapApiKey(){if(this.apiKey)return this.apiKey;let e=this._hadPreviousFailure(),t=!1;for(let i=1;i<=3;i+=1){let s=e&&!t;try{let e=await fetch(this._getMapKeyUrl(i,s));if(t=t||s,this._setFailureFlag(!1),!e.ok)throw Error(`Failed to fetch API key: ${e.status}`);let r=await e.text();if(!r)return"";return this.apiKey=r,this.apiKey}catch(e){console.error(e),i<3&&await this._delay(300*2**(i-1))}}return this._setFailureFlag(!0),""}_getMapKeyUrl(e,t){let i=[];e>1&&i.push(`attempt=${e}`),t&&i.push("recovered_after_failure=1");let s=i.length?`?${i.join("&")}`:"";return`${this._getBaseUrl()}/api/v1/map${s}`}_hadPreviousFailure(){try{return"1"===this.window.sessionStorage.getItem(h)}catch(e){return!1}}_setFailureFlag(e){try{e?this.window.sessionStorage.setItem(h,"1"):this.window.sessionStorage.removeItem(h)}catch(e){}}_delay(e){return new Promise(t=>{this.window.setTimeout(t,e)})}async createUrl(){let e=await this.getMapApiKey();if(!e)throw Error("Refusing to load Google Maps without an API key");
1627let t="https://maps.googleapis.com/maps/api/js";return t+`?callback=__googleMapsCallback&key=${e}&libraries=places`}async setScript(){let e;if(this.document.getElementById(this.id))return void this.callback();try{e=await this.createUrl()}catch(e){console.error(e),this.failed=!0,this.loading=!1,this.onerrorEvent=e,this.callback();return}let t=this.document.createElement("script");t.id=this.id,t.type="text/javascript",t.src=e,t.onerror=this.loadErrorCallback.bind(this),t.defer=!0,t.async=!0,this.document.head.appendChild(t)}loadErrorCallback(e){if(this.errors.push(e),this.errors.length<=this.retries){let e=this.errors.length*2**this.errors.length;console.log(`Failed to load Google Maps script, retrying in ${e} ms.`),setTimeout(()=>{this.deleteScript(),this.setScript().catch(e=>console.error(e))},e)}else this.failed=!0,this.onerrorEvent=e,this.callback()}deleteScript(){let e=this.document.getElementById(this.id);e&&e.remove()}load(){return this.loadPromise()}loadPromise(){return new Promise((e,t)=>{this.loadCallback(i=>{i?t(i):e()})})}loadCallback(e){this.callbacks.push(e),this.execute()}setCallback(){this.window.__googleMapsCallback=this.callback.bind(this)}resetIfRetryingFailed(){this.failed&&this.reset()}callback(){this.done=!0,this.loading=!1,this.callbacks.forEach(e=>{e(this.onerrorEvent)}),this.callbacks=[]}execute(){this.window.google&&this.window.google.maps&&this.window.google.maps.version&&this.callback(),this.resetIfRetryingFailed(),this.done?this.callback():this.loading||(this.loading=!0,this.setCallback(),this.setScript().catch(e=>console.error(e)))}_getBaseUrl(){let{isBuilder:e,websiteApiGatewayUrl:t}=this.config;return e?t:""}resizeStaticMapDimensions(e,t){if(e<=1024&&t<=1024)return{width:e,height:t};let i=Math.min(1024/e,1024/t);return{width:parseInt(e*i),height:parseInt(t*i)}}convertThemeToStaticApiUrl(e){return e.map(e=>{let t=e.stylers.reduce((e,t)=>{let i=t.visibility?`visibility:${t.visibility}`:"",s=t.color?`color:${t.color.replace("#","0x")}`:"",r=t.lightness?`lightness:${t.lightness}`:"";return`${e}|${i}${s}${r}`},""),i=e.elementType?`|element:${e.elementType}`:"";return`feature:${e.featureType}${i}${t}`})}async getMapApiSignedUrl(e){try{let t=await fetch(`${this._getBaseUrl()}/api/v1/map/signature?${e}`);if(!t.ok)throw Error("Failed to fetch signed URL");let{url:i}=await t.json();return i}catch(e){return console.error(e),""}}generateStaticMapUrl(e,t,i,s,r,a){let{width:o,height:n}=this.resizeStaticMapDimensions(r,a),l={center:`${e},${t}`,zoom:i,scale:2,size:`${o}x${n}`,key:this.apiKey};s&&(l.style=this.convertThemeToStaticApiUrl(s));let d=new URLSearchParams;return Object.entries(l).forEach(([e,t])=>{Array.isArray(t)?t.forEach(t=>d.append(e,t.toString())):d.append(e,t.toString())}),`https://maps.googleapis.com/maps/api/staticmap?${d.toString()}`}async generateDigitallySignedStaticMapUrl({srcWidth:e,srcHeight:t,theme:i,...s}){let{width:r,height:a}=this.resizeStaticMapDimensions(e,t),o={...s,size:`${r}x${a}`};i&&(o.style=this.convertThemeToStaticApiUrl(i));let n=new URLSearchParams;Object.entries(o).forEach(([e,t])=>{Array.isArray(t)?t.forEach(t=>n.append(e,t.toString())):n.append(e,t.toString())});let l=n.toString();try{return await this.getMapApiSignedUrl(l)}catch(e){return console.error(e),""}}}(x,window,document),U=new class extends s{destroy(){}updateQueryString(e,t,i){i||(i=this.window.location.href);let s=RegExp(`([?&])${e}=.*?(&|#|$)`,"i"),r="";null!=t&&(Array.isArray(t)?t.length&&(r=this.serializeArray(e,t)):"object"==typeof t?(s=RegExp(`([?&])${e}\\[[^=]*\\]=.*?(&|#|$)`,"i"),r=this.serializeObj(t,"",e)):r=`${e}=${encodeURIComponent(t)}`);let a=i.split("#"),o=a[0];if(s.test(i)){let e=o;for(r=r?`$1${r}$2`:"$1";s.test(e);)o=e.replace(s,r),e=e.replace(s,"$1");o=o.replace(/(&|\?)$/,"")}else if(r){let e=-1!==o.indexOf("?")?"&":"?";o+=`${e}${r}`}return void 0!==a[1]&&null!==a[1]&&(o+=`#${a[1]}`),o}getParameterByName(e,t){t||(t=this.window.location.href),e=e.replace(/[[\]]/g,"\\$&");let i=RegExp(`[?&]${e}(=([^&#]*)|&|#|$)`),s=Array.from(RegExp.prototype[Symbol.matchAll].call(i,t)).flat();if(!s.length){let i=RegExp(`[?&]${e}(\\[.*?\\])=(.*?)(?=&|#|$)`,"g");return s=Array.from(RegExp.prototype[Symbol.matchAll].call(i,t)).flat(),this._parseParamToObject(s,"advancedFilters"===e)}return s.length>3?s.reduce((e,t,i)=>((i+1)%3==0&&e.push(decodeURIComponent(t.replace(/\+/g," "))),e),[]):s[2]?decode
1627URIComponent(s[2].replace(/\+/g," ")):""}makePageKey(e){return e.replace("section-","").replace(/-/g,"")}makeParamKey(e,t){return e.global?e.urlKey:`${t}-${e.urlKey}`}deserializeParams(e,t){let i={},s=this.makePageKey(t),r=this.getParameterByName(s);return r&&(i.page=parseInt(r)),Array.isArray(e)&&e.forEach(e=>{let t=this.makeParamKey(e,s),r=this.getParameterByName(t);if("int"===e.type)isFinite(r=parseInt(r))||(r=null);else if("bool"===e.type||"boolean"===e.type)r="true"===r||"false"!==r&&null;else if("json"===e.type)try{r=JSON.parse(r)}catch(e){}i[e.formKey||e.param]=r}),i}serializeParams(e,t,i){let s=this.window.location.href,r=this.makePageKey(t);return s=this.updateQueryString(r,i.page,s),Array.isArray(e)&&e.forEach(e=>{let t=this.makeParamKey(e,r),a=i[e.formKey||e.param];"json"===e.type&&null!=a&&(a=JSON.stringify(a)),s=this.updateQueryString(t,a,s)}),s}formatSliderAtom(e,t=""){return t+(Number.isInteger(e)?e:e.toFixed(2))}formatSliderValue(e,t="",i=""){return e<1e3?this.formatSliderAtom(e,t):e<1e6?`${this.formatSliderAtom(e/1e3,t)}${i}K`:`${this.formatSliderAtom(e/1e6,t)}${i}M`}formatSliderPriceRange(e,t,i,s){return t.min===e&&0!==e?`${s.lowPrefix}${this.formatSliderValue(e,i," ")}`:t.max===e?`${this.formatSliderValue(e,i," ")}${s.highSuffix}`:`${this.formatSliderValue(e,i," ")}`}formatSliderAreaRange(e,t,i,s){return t.min===e&&0!==e?`${s.lowPrefix}${this.formatSliderValue(e)} ${i}`:t.max===e?`${this.formatSliderValue(e)}${s.highSuffix} ${i}`:`${this.formatSliderValue(e)} ${i}`}getSearchFormValues(e){let{queryElement:t,priceSliderElement:i,areaSliderElement:s,neighborhoodSelect:r}=e,a={};if(t&&(a.search=t.value||null),i){let e=i.value.split(";"),t=parseInt(i.dataset.min),s=parseInt(i.dataset.max),r=parseInt(e[0]),o=parseInt(e[1]);a.priceMin=r!==t?r:null,a.priceMax=o!==s?o:null}if(s){let e=s.value.split(";"),t=parseInt(s.dataset.min),i=parseInt(s.dataset.max),r=parseInt(e[0]),o=parseInt(e[1]);a.areaMin=r!==t?r:null,a.areaMax=o!==i?o:null}return r&&(a.neighborhoodId=r.value||null),a}serializeObj(e,t="",i=""){let s=[];for(let r in e)if(e.hasOwnProperty(r)){let a,o=e[r];if(i){let e=t?`[${t}][${r}]`:`[${r}]`;a=`${i}${e}`}else a=t?`${t}[${r}]`:r;null!==o&&Array.isArray(o)?o.length&&s.push(this.serializeArray(a,o)):null!==o&&"object"==typeof o?s.push(this.serializeObj(o,a)):s.push(`${a}=${encodeURIComponent(o)}`)}return s.join("&")}serializeArray(e,t,i=""){let s=[];return t.forEach(t=>{let r=i?`${i}${e}`:e;s.push(`${r}=${encodeURIComponent(t)}`)}),s.join("&")}_parseParamToObject(e,t=!1){if(!e.length)return null;let i={};for(let s=0;s<e.length;s++)if((s+1)%3==0){let r=decodeURIComponent(e[s].replace(/\+/g," ")),a=e[s-1];Object.assign(i,this._setObjectPath(a,r,i,t))}return i}_setObjectPath(e,t,i,s=!1){let r=e.split(/[\[\]]/).filter(Boolean),a=["in","nin","btw","ciin","cinin"],o={},n=o,l=((e,t,i)=>{if(!t)return;let s=(Array.isArray(t)?t:t.match(/([^[.\]])+/g)).reduce((e,t)=>e&&e[t],e);return void 0===s?i:s})(i,r.join("."));return r.forEach((e,o)=>{o===r.length-1?l?n[e]=Array.isArray(l)?[...l,t]:[l,t]:n[e]=s&&a.includes(e)?[t]:t:(n[e]=i[e]?i[e]:{},n=n[e])}),o}}(x,window,document),N=new class extends s{constructor(e,t,i){super(e,t,i),this._createLightbox=this._createLightbox.bind(this),this.expandSliders=[]}initialize(e={}){try{let{document:e}=this,t=e.querySelectorAll(".has-mobile-expand");t.forEach(e=>{this._addExpandButton(e)}),this.expandSliders=this.expandSliders.concat(t)}catch(e){console.log(e)}}destroy(){let{document:e}=this;e.querySelectorAll(".lp-expand-btn, .lp-expand-btn-wrapper").forEach(e=>e.remove()),this.expandSliders=[]}_addExpandButton(e){let{document:t}=this,i=e.closest("section[id]"),s=e.dataset.append,r=i.querySelector(".lp-expand-btn");if(!r)if((r=t.createElement("button")).className="lp-expand-btn",r.setAttribute("aria-label","Open a lightbox"),r.innerHTML='<span class="lp-i lp-i--expand-alt" aria-hidden="true"></span>',s){let e=i.querySelector(s);e&&e.appendChild(r)}else{let i=t.createElement("div");i.className="lp-expand-btn-wrapper",i.style.position="relative",i.appendChild(r),e.parentNode.insertBefore(i,e.nextSibling)}r.addEventListener("click",()=>{this._createLightbox({slider:e,section:i})})}_createLightbox({slider:e,section:t,initialIndex:i}){let{window:s,document:r}=this,a=`lightbox-for-${t?.id}`,o=s.$&&s.$.fn.slick,n=o&&e.slick,l="function"==typeof s.Splide,d=e.classList.contains("is-initialized")&&e.classList.contains("splide");function c(){let t=r.createElement("div");t.id=a,t.className="lp-lightbox",t.setAttribute("tabindex","-1"),t.setAttribute("role","dialog"),t.setAttribute("aria-modal","true"),t.innerHTML=` 1628 <button class="lp-lightbox__close" aria-label="close modal"></button> 1629 <div class="lp-lightbox__content"> 1630 <div class="lp-lightbox__carousel splide" role="group" aria-label="Image Gallery"> 1631 <div class="splide__arrows"> 1632 <button class="splide__arrow splide__arrow--prev lp-lightbox-arrow lp-lightbox-arrow--prev"></button> 1633 <button class="splide__arrow splide__arrow--next lp-lightbox-arrow lp-lightbox-arrow--next"></button> 1634 </div> 1635 <div class="splide__track"> 1636 <ul class="splide__list"></ul> 1637 </div> 1638 </div> 1639 </div> 1640 `,"function"==typeof s.lpUI.requestScrollLock?s.lpUI.requestScrollLock(a):r.body.style.overflow="hidden",r.body.appendChild(t);let o=t.querySelector(".lp-lightbox__carousel"),n=o.querySelector(".splide__list");t.classList.add("show"),(d?e.querySelectorAll(".splide__slide:not(.splide__slide--clone) img"):e.querySelectorAll("img")).forEac
1640h(e=>{let t=e.cloneNode(!0);t.removeAttribute("style");let i=r.createElement("li");i.className="lp-lightbox__slide splide__slide",i.appendChild(t),n.appendChild(i)});let l=new s.Splide(o,{rewind:!0,arrows:!0,arrowPath:"",type:"loop",clones:1,pagination:!1,perPage:1,perMove:1});l.mount(),void 0!==i&&i>=0&&l.go(i),setTimeout(()=>{t.focus()},100);let c=e=>{if(!t.classList.contains("show"))return;let i=t.querySelector(".splide__arrow--prev"),s=t.querySelector(".splide__arrow--next"),r=t.querySelector(".lp-lightbox__close");"ArrowLeft"===e.key&&i?(e.preventDefault(),i.click()):"ArrowRight"===e.key&&s?(e.preventDefault(),s.click()):"Escape"===e.key&&r&&(e.preventDefault(),r.click())};r.addEventListener("keydown",c),t.querySelector(".lp-lightbox__close").addEventListener("click",()=>{r.removeEventListener("keydown",c),t.classList.remove("show"),l&&l.destroy(),"function"==typeof s.lpUI.releaseScrollLock?s.lpUI.releaseScrollLock(a):r.body.style.overflow="",t.remove()})}if("function"==typeof s.lpUI.requestScrollLock?s.lpUI.requestScrollLock(a):r.body.style.overflow="hidden",o&&!d){let t,i,o,l,d;i={arrows:!0,dots:!1,infinite:!0,draggable:!0,prevArrow:'<button type="button" class="lp-lightbox-arrow--prev lp-lightbox-arrow" aria-label="Previous"></button>',nextArrow:'<button type="button" class="lp-lightbox-arrow--next lp-lightbox-arrow" aria-label="Next"></button>'},(o=r.createElement("div")).id=a,o.className="lp-lightbox",o.setAttribute("tabindex","-1"),o.setAttribute("role","dialog"),o.setAttribute("aria-modal","true"),o.innerHTML=` 1641 <button class="lp-lightbox__close" aria-label="close modal"></button> 1642 <div class="lp-lightbox__content"> 1643 <div class="lp-lightbox__carousel"></div> 1644 </div> 1645 `,r.body.appendChild(o),l=o.querySelector(".lp-lightbox__carousel"),o.classList.add("show"),n?(t=e.slick.$slides.find("img"),i.initialSlide=e.slick?.currentSlide||0,t.each(function(){s.$(".lp-lightbox__carousel").append(s.$(this).clone(!1).removeAttr("style").wrap('<div class="lp-lightbox__slide"></div>').parent())})):(t=e.querySelectorAll("img")).forEach(e=>{let t=e.cloneNode(!0);t.removeAttribute("style");let i=r.createElement("div");i.className="lp-lightbox__slide",i.appendChild(t),l.appendChild(i)}),s.$(l).slick(i),setTimeout(()=>{o.focus()},100),d=e=>{if(!o.classList.contains("show"))return;let t=o.querySelector(".lp-lightbox-arrow--prev"),i=o.querySelector(".lp-lightbox-arrow--next"),s=o.querySelector(".lp-lightbox__close");"ArrowLeft"===e.key&&t?(e.preventDefault(),t.click()):"ArrowRight"===e.key&&i?(e.preventDefault(),i.click()):"Escape"===e.key&&s&&(e.preventDefault(),s.click())},r.addEventListener("keydown",d),o.querySelector(".lp-lightbox__close").addEventListener("click",()=>{r.removeEventListener("keydown",d),o.classList.remove("show");let t=l?.slick?s.$(l).slick("slickCurrentSlide"):0;l?.slick&&s.$(l).slick("unslick"),n&&s.$(e).slick("slickGoTo",t),"function"==typeof s.lpUI.releaseScrollLock?s.lpUI.releaseScrollLock(a):r.body.style.overflow="",o.remove()})}else l?c():(s.luxuryPresence.libs.loadCss(s.luxuryPresence.libs.jsLibsMap.splide.cssSrc),s.luxuryPresence.libs.loadJs(s.luxuryPresence.libs.jsLibsMap.splide.jsSrc,()=>{c(),s.luxuryPresence.libs.jsLibsMap.splide.isLoaded=!0}))}}(x,window,document),R=new class extends s{destroy(){this.window.divolte||(this.window.divolteLp=function(){(this.window.divolteLp.q=this.window.divolteLp.q||[]).push(arguments)})}initialize(e={}){let{divolteServiceUrl:t}=this.config;t&&!this.window.divolte&&this.loadScript()}loadScript(){let{divolteServiceUrl:e}=this.config,t=this.document.createElement("script");t.id="divolte-script",t.type="text/javascript",t.defer=!0,t.async=!0,t.src=`${e}/divolte.js`,this.document.head.appendChild(t),t.addEventListener("load",this.executeQueue.bind(this))}executeQueue(){(this.window.divolteLp.q||[]).forEach(([e,t])=>{this[e](t)}),this.window.divolteLp=this.divolteLp.bind(this)}divolteLp(e,t){try{this[e](t)}catch(e){console.log(e)}}sendLpEvent(e,t){if(!e.includes("pageView"))return void console.log(`${e} IS NOT SUPPORTED`);let{companyId:i,templateId:s,websiteId:r,pageId:a,shareId:o,pageMeta:n}=this.config;this.window.divolte.signal(e,Object.assign({companyId:i,templateId:s,websiteId:r,pageId:a,shareId:o,pageMeta:n},t))}sendLpPageView(){this.sendLpEvent("pageView",{})}}(x,window,document),B=new class extends s{constructor(e,t,i){super(e,t,i)}initialize(e={}){(void 0!==e.enabled?e.enabled:this.config.eventBus?.enabled)&&this.config.eventBus?.apiKey&&this.config.eventBus?.url&&this.loadScript()}loadScript(){let{eventBusUrl:e}=this.config,t=this.document.createElement("script");t.id="posthog-script",t.type="text/javascript",t.defer=!0,t.async=!0,t.src=`${e}/v2.8.0/event-bus-js.js`,this.document.head.appendChild(t),t.addEventListener("load",this.executeQueue.bind(this))}executeQueue(){this.window.LuxuryPresenceEventBus&&(this.window.eventBusProvider=this.window.LuxuryPresenceEventBus.createEventBusProvider({apiKey:this.config.eventBus.apiKey,host:this.config.eventBus.url,defaultSource:"frontend://website-render-engine"}
1645)),(this.window.eventBusLp.q||[]).forEach(([e,t])=>{this[e](t)}),this.window.eventBusLp=this.eventBusLp.bind(this)}destroy(){if(!this.window.eventBusProvider){this.window.eventBusLp=function(){(this.window.eventBusLp.q=this.window.eventBusLp.q||[]).push(arguments)};return}this.window.eventBusProvider.shutdown()}sendLpEvent(e,t){if("user.activity.page.viewed"!==e)return void console.log(`${e} IS NOT SUPPORTED`);if(!this.window.eventBusProvider)return;let{companyId:i}=this.config;try{this.window.eventBusProvider.capture(e,{company:i,data:{}})}catch(e){console.log("EventBus capture error:",e)}}eventBusLp(e,t){try{this[e](t)}catch(e){console.log(e)}}sendLpPageView(){this.sendLpEvent("user.activity.page.viewed",{})}}(x,window,document),D=new class extends s{constructor(e,t,i){super(e,t,i),this.successListeners=[],this._listenToMessages=this._listenToMessages.bind(this),this._listenToOneTapMessage=this._listenToOneTapMessage.bind(this)}initialize(e={}){try{e.googleSignOnEnabled&&!e.iframe&&this._renderGoogleOneTap(),this.document.querySelectorAll('div[data-signin-type="google-sign-in"]').forEach(e=>this._convertGoogleSignIn(e)),this.document.querySelectorAll('div[data-signin-type="facebook-sign-in"]').forEach(e=>this._convertFacebookSignIn(e))}catch(e){console.log(e)}}destroy(){this.successListeners.forEach(e=>{this.window.removeEventListener("message",this._listenToMessages),this.window.removeEventListener("message",this._listenToOneTapMessage),this.window.removeEventListener(p,this.window[e])})}_renderGoogleOneTap(){if(!this._isGoogleOneTapOnCooldown()){let e=this.document.createElement("div");google.accounts.id.initializeIntermediate({src:this._buildUrlAndCopyAttributes(e,e,"googleOneTap")}),this.window.localStorage.removeItem("googleOneTapExpiration"),this.window.addEventListener("message",this._listenToOneTapMessage)}}_listenToOneTapMessage(e){let t="show_intermediate_iframe",{buyerSellerServiceUrl:i}=this.config,{data:s,origin:r}=e,{type:a,height:o,event:n,source:l,token:d}=s;if(a===t||"hide_intermediate_iframe"===a){let e=this.document.getElementById("onetap_google_intermediate_iframe");e&&(e.style.height=o,e.style.display=a===t?"unset":"none")}r===i&&"GOOGLE_SIGN_ON"===l&&("success"===n?(this._setExpirationLsItem(864e5),this._handleQualifyingQuestionsModal(d)):"cancel"===n&&this._setExpirationLsItem(72e5))}_setExpirationLsItem(e){let t=new Date().getTime()+e;this.window.localStorage.setItem("googleOneTapExpiration",t)}_isGoogleOneTapOnCooldown(){return Number(this.window.localStorage.getItem("googleOneTapExpiration"))>new Date().getTime()}_convertGoogleSignIn(e){this._replaceWithIframe("googleSignIn",e)}_convertFacebookSignIn(e){this._replaceWithIframe("facebookSignIn",e)}_replaceWithIframe(e,t){this._attachSuccessCallback(t);let i=this.document.createElement("iframe");i.src=this._buildUrlAndCopyAttributes(t,i,e),i.dataset.isSocialOauthButton=!0,t.replaceWith(i)}_listenToMessages(e){let{buyerSellerServiceUrl:t}=this.config;if(e.origin===t&&"success"===e.data.event){let e=new Event(p);this.window.dispatchEvent(e),a(this.window,this.document),this.successListeners.forEach(t=>{this.window[t]?this.window[t](e):console.error(`Callback function ${t} not found on window object`)}),this.document.documentElement.classList.add("is-login-success")}}_attachSuccessCallback(e){this.window.addEventListener("message",this._listenToMessages);let t=e.dataset.onSuccessFunctionName;t&&this.successListeners.push(t)}_buildUrlAndCopyAttributes(e,t,i){let{buyerSellerServiceUrl:s,companyId:r,websiteId:a,pageId:o,pageMeta:n}=this.config,{location:l}=this.window,d=l.origin+l.pathname,c=new URL(`${s}/buttons/${i}`),u=this.window.localStorage.getItem("utm_vars"),h=this.window.localStorage.getItem("referrer");c.searchParams.append("companyId",r),c.searchParams.append("websiteId",a),c.searchParams.append("pageId",o),c.searchParams.append("sourceUrl",d),c.searchParams.append("pageMeta",JSON.stringify(n)),u&&c.searchParams.append("utm",u),h&&c.searchParams.append("referrer",h);let p=["data-size","data-width","data-text","data-button-type","data-shape","data-layout","data-max-rows","data-use-continue-as","data-type","data-theme","data-logo_alignment","data-locale"];
1645return Array.from(e.attributes).forEach(e=>{p.includes(e.nodeName)?c.searchParams.append(e.nodeName,e.nodeValue):t.setAttribute("id"===e.nodeName?"data-id":e.nodeName,e.nodeValue)}),c.toString()}_decodeToken(e){try{let t=e.split(".")[1].replace(/-/g,"+").replace(/_/g,"/"),i=4-t.length%4,s=4===i?t:t+"=".repeat(i);return JSON.parse(atob(s))}catch(e){return null}}_handleQualifyingQuestionsModal(e){if(e&&this.window.luxuryPresence&&this.window.luxuryPresence.qualifyingQuestionsModal){let t=this._decodeToken(e);t&&t.email&&this.window.luxuryPresence.qualifyingQuestionsModal.showModal(t.email,"Google Sign On")}}}(x,window,document),O=new class extends s{constructor(e,t,i){super(e,t,i),this.showModal=this.showModal.bind(this),this.hasModalBeenSubmitted=this.hasModalBeenSubmitted.bind(this),this.modalId="qualifying-questions-modal",this.cookieKey="qualifyingQuestionsModalSubmitted",this.qualifyingQuestionsModalEnabled=!0,this.eventListeners=[],this.timeouts=[]}initialize(e={}){this.qualifyingQuestionsModalEnabled=e.qualifyingQuestionsModalEnabled??this.qualifyingQuestionsModalEnabled,this.qualifyingQuestionsModalEnabled&&this.attachModalCloseListeners()}destroy(){this.eventListeners.forEach(({element:e,event:t,handler:i})=>{e&&e.removeEventListener&&e.removeEventListener(t,i)}),this.timeouts.forEach(e=>{clearTimeout(e)}),this.restoreBodyScroll(),this.eventListeners=[],this.timeouts=[]}hasModalBeenSubmitted(){return"true"===this.getCookie(this.cookieKey)}setModalSubmittedCookie(){this.setCookie(this.cookieKey,"true",365)}showModal(e,t){!this.qualifyingQuestionsModalEnabled||this.hasModalBeenSubmitted()||(this.updateEmailValue(e),this.updateTriggerSourceValue(t),this.showModalElement())}getModalElement(){let e=this.document.getElementById(this.modalId);return e||console.error("Modal element not found:",this.modalId),e}updateEmailValue(e){let t=this.getModalElement();if(!t)return;let i=t.querySelector('input[name="email"]');i&&"string"==typeof e&&(i.value=e)}updateTriggerSourceValue(e){let t=this.getModalElement();if(!t)return;let i=t.querySelector(`#${this.modalId}-triggerSource`);i&&"string"==typeof e&&(i.value=e)}showModalElement(){let e=this.getModalElement();e&&(e.style.display="flex",this.blockBodyScroll())}getCookie(e){let t=`; ${this.document.cookie}`.split(`; ${e}=`);return 2===t.length?decodeURIComponent(t.pop().split(";").shift()):null}setCookie(e,t,i){let s="";if(i){let e=new Date;e.setTime(e.getTime()+864e5*i),s=`; expires=${e.toUTCString()}`}let r="; path=/; SameSite=Lax";this.window&&this.window.location&&"https:"===this.window.location.protocol&&(r+="; Secure"),this.document.cookie=`${e}=${encodeURIComponent(t||"")}${s}${r}`}blockBodyScroll(){this._prevOverflow=this.document.body.style.overflow,this.document.body.style.overflow="hidden"}restoreBodyScroll(){this.document.body.style.overflow=this._prevOverflow||"",this._prevOverflow=null}attachModalCloseListeners(){let e=this.getModalElement();if(!e)return;let t=this.document.getElementById(`${this.modalId}-form`);if(t){let i=()=>{this.setModalSubmittedCookie();let t=setTimeout(()=>{e.style.display="none",this.restoreBodyScroll()},100);this.timeouts.push(t)};t.addEventListener("formsubmitted",i),this.eventListeners.push({element:t,event:"formsubmitted",handler:i})}let i=e.querySelector('[data-dismiss="modal"]');if(i){let t=()=>{e.style.display="none",this.restoreBodyScroll()};i.addEventListener("click",t),this.eventListeners.push({element:i,event:"click",handler:t})}let s=t=>{(t.target===e||t.target.id===this.modalId)&&(e.style.display="none",this.restoreBodyScroll())};e.addEventListener("click",s),this.eventListeners.push({element:e,event:"click",handler:s})}}(x,window,document),q=new class extends s{constructor(e,t,i){super(e,t,i),this.isValidating=!1,this.lastValidationResult=null,this.lastValidationTime=null,this.validationCacheDuration=3e5}destroy(){this.isValidating=!1,this.lastValidationResult=null,this.lastValidationTime=null}async validateSession(e={}){let{useCache:t=!0}=e;if(t&&null!==this.lastValidationResult&&this.lastValidationTime&&Date.now()-this.lastValidationTime<this.validationCacheDuration)return this.lastValidationResult;if(this.isValidating)return null!==this.lastValidationResult&&this.lastValidationResult;this.isValidating=!0;let i=` 1646 query { 1647 validSession { 1648 success 1649 } 1650 } 1651 `;try{let e=await this.window.fetch("/graphql",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({query:i})});if(!e.ok)return console.error("SessionController: HTTP error during session validation",e.status),this.lastValidationResult=!1,this.lastValidationTime=Date.now(),!1;let t=await e.json();if(t.errors)return this.lastValidationResult=!1,this.lastValidationTime=Date.now(),!1;let s=t.data?.validSession?.success===!0;return this.lastValidationResult=s,this.lastValidationTime=Date.now(),s}catch(e){return console.error("SessionController: Error validating session",e),this.lastValidationResult=!1,this.lastValidationTime=Date.now(),!1}finally{this.isValidating=!1}}clearCache(){this.lastValidationResult=null,this.lastValidationTime=null}}(x,window,document),V=new class extends s{constructor(e,t,i){super(e,t,i),this.consentListener=null,this.eventName=null}destroy(){this.consentListener&&this.eventName&&(this.document.removeEventListener(this.eventName,this.consentListener),this.consentListener=null)}loadScript(){this.document.getElementById("posthog-script")||this.window.luxuryPresence.eventBus.initialize({enabled:this.config.eventBus?.enabled}),this.document.getElementById("divolte-script")||this.window.luxuryPresence.divolte.initialize({})}removeScripts(){this.window.luxuryPresence?.eventBus?.destroy?.(),this.window.luxuryPresence?.divolte?.destroy?.(),this.document.getElementById("posthog-script")?.remove(),this.document.getElementById("divolte-script")?.remove()}async initialize(e={}){let t=m[e.provider];if(!t)return;this.eventName=t.eventName;let i=await this.window.luxuryPresence.session.validateSession();(t.hasAnalyticsConsent(this.document,this.window)||i)&&this.loadScript(),this.consentListener||(this.consentListener=e=>{t.isAnalyticsAccepted(e.detail)?this.loadScript():this.removeScripts()},this.document.addEventListener(t.eventName,this.consentListener))}}(x,window,document),F=new class extends s{destroy(){}transformVariables(e,t){let i;return y(i={...t},["testimonialId"]),f(i,["testimonialId"],"testimonialIds"),0===i.limit&&delete i.limit,(void 0===i.limit||null===i.limit)&&(("testimonials"===e||"testimonialsCount"===e)&&(i.limit=50),("agents"===e||"agentsCount"===e||"developments"===e||"developmentsCount"===e||"neighborhoods"===e||"neighborhoodsCount"===e||"posts"===e||"postsCount"===e||"pressReleases"===e||"pressReleasesCount"===e)&&(i.limit=100)),!function(e){let{sortDir:t}=e;"string"==typeof t&&t.includes("_")&&(e.sortDir=t.replace(/_/g," "))}(i),!function(e,t){switch(t){case"agent":break;case"testimonials":case"testimonialsCount":y(e,["testimonialIds"]);break;case"agents":case"agentsCount":y(e,["officeId","teamId","developmentId","agentIds","tags"]),f(e,["officeId"],"officeIds"),f(e,["teamId"],"teamIds"),f(e,["developmentId"],"developmentIds");break;case"neighborhoods":case"neighborhoodsCount":y(e,["neighborhoodIds","neighborhoodId"]),f(e,["neighborhoodIds","neighborhoodId"],"neighborhoodId");break;case"developments":case"developmentsCount":y(e,["agentId","neighborhoodIds","neighborhoodId","developmentIds","tag"]),e.agentId&&Array.isArray(e.agentId)&&([e.agentId]=e.agentId),f(e,["neighborhoodIds","neighborhoodId"],"neighborhoodIds");break;case"properties":case"propertiesCount":y(e,["statusIds","statusId","propertyTypeIds","propertyTypeId","propertyId","networkId","propertyIds","agentIds","teamIds","officeIds","neighborhoodIds","
1651spaceTypeIds","addressState","addressCity","backfillProviders","backfillMLSListingIds","backfillMLSAgentIds","backfillMLSOfficeIds"]),["propertyIds","agentIds","teamIds","officeIds","neighborhoodIds","spaceTypeIds","backfillMLSListingIds","backfillMLSAgentIds","backfillMLSOfficeIds"].forEach(t=>f(e,[t],t)),f(e,["statusIds","statusId"],"propertyStatusId"),e.excludeStatusId&&(e.excludePropertyStatusId=e.excludeStatusId,delete e.excludeStatusId),f(e,["propertyTypeIds","propertyTypeId"],"propertyTypeId"),f(e,["networkId"],"networkId"),f(e,["propertyId"],"propertyIds"),["salesPriceGTE","salesPriceLTE","leasePriceGTE","leasePriceLTE","livingSpaceSizeGTE","livingSpaceSizeLTE"].forEach(t=>{null!=e[t]&&(e[t]=Math.trunc(Number(e[t])))});break;case"posts":case"postsCount":y(e,["categoryIds","categoryId","neighborhoodId"]),void 0!==e.order&&(e.sort=e.order,delete e.order),f(e,["categoryIds","categoryId"],"categoryId");break;case"postCategories":y(e,["categoryId","categoryIds"]),void 0!==e.order&&(e.sort=e.order,delete e.order),f(e,["categoryIds","categoryId"],"categoryId");break;case"pressReleases":case"pressReleasesCount":y(e,["pressReleaseId","categories","propertyId","developmentId","agentId","teamId"]),f(e,["pressReleaseId"],"pressReleaseIds");break;case"offices":case"officesCount":y(e,["officeId","officeIds","tags"]),f(e,["officeId"],"officeIds");break;case"teams":case"teamsCount":y(e,["teamId","teamIds"]),f(e,["teamId"],"teamIds");break;case"pois":y(e,["categories"]),Array.isArray(e.categories)&&(e.categories=e.categories.map(e=>e.toLowerCase())),"string"==typeof e.sortBy&&(e.sortBy=e.sortBy.toLowerCase())}}(i,e),i}transformResponse(e,t){return"agent"===e?I(t,v):"agents"===e||"agentsCount"===e?A(t,w):"neighborhood"===e?I(t,b):"neighborhoods"===e||"neighborhoodsCount"===e?A(t,S):"development"===e?I(t,_):"developments"===e||"developmentsCount"===e?A(t,E):t}transformPage(e){return{items:e&&e.items||[],count:e&&e.total||0}}applyPropertyDisclaimers(t,i){if(!Array.isArray(t)||!t.length||!i||!i.length)return Promise.resolve(t);let s=t.filter(e=>e&&e.vendorId&&e.mlsId).map(e=>({feedId:e.vendorId,listingId:e.mlsId,officeName:e.officeName??null,agentMlsId:e.mlsAgentId??null,officeMlsId:e.mlsOfficeId??null,attributionContact:e.attributionContact??null,status:e.status??null,syncedAt:e.syncedAt??null})),r=e=>{let s={};return(e||[]).forEach(e=>{s[`${e.feedId}:${e.listingId}`]=e}),t.map(e=>{let t=e&&s[`${e.vendorId}:${e.mlsId}`],r={};return i.forEach(e=>{let i=t?t[$[e]]:void 0;r[e]=i??null}),{...e,...r}})};if(!s.length)return Promise.resolve(r([]));let{websiteId:a}=this.config;return this.window.superagent?this.window.superagent.post(`${this.window.luxuryPresence.defaults.routerUrl}/graphql`).withCredentials().send({query:e(L),variables:{input:{websiteId:"string"==typeof a?a:void 0,properties:s}}}).then(e=>r(e.body&&e.body.data&&e.body.data.propertyDisclaimers),e=>(console.warn("[RouterApiController] propertyDisclaimers lookup failed:",e),r([]))):Promise.resolve(r([]))}}(x,window,document);function j(e,t){if(window.luxuryPresence[e])try{window.luxuryPresence[e].destroy()}catch(e){console.log(e)}window.luxuryPresence[e]=t}j("config",x),j("modals",T),j("buttons",C),j("validation",k),j("contactForms",M),j("mapApiLoader",P),j("pagination",U),j("expandSliders",N),j("divolte",R),j("eventBus",B),j("oauth",D),j("qualifyingQuestionsModal",O),j("session",q),j("consent",V),j("redirects",{checkHstRedirect:function(e){let{config:t}=window.luxuryPresence;return!t.hvStepTwoCaptureEnabled&&!!t.hstValuationRedirectEnabled&&!!t.mlsEnabled&&!!t.myhomeDashboardEnabled&&(window.location.href=`/home-search/home-valuation?address=${encodeURIComponent(e)}`,!0)},destroy(){}}),j("routerApi",F),window.luxuryPresence.formatSliderPriceRange=U.formatSliderPriceRange.bind(U),window.luxuryPresence.formatSliderAreaRange=U.formatSliderAreaRange.bind(U),window.luxuryPresence.getSearchFormValues=U.getSearchFormValues.bind(U),window.luxuryPresence.handlebarsHelpersFactory=function(i){return e(t)(i,{isEqual:(e,t)=>e==t})}})(); 1652//# sourceMappingURL=lp-sdk.js.map 1653 1654 </script>
1654 1655 1656
1656<script> 1657 var lpGlobalInitialized = false; 1658 1659 function lpGlobalInit () { 1660 if (lpGlobalInitialized) { 1661 return; 1662 } 1663 lpGlobalInitialized = true; 1664 // Initialize wow animation plugin only according to turbolinks 1665 var wow; 1666 if (window.WOW) { 1667 wow = new WOW({ 1668 animateClass: 'animated', 1669 offset: wowOffset, 1670 live: false, 1671 callback: function(box) {} 1672 }); 1673 } 1674 // Initialize handlebar helpers only once 1675 function handlebarsInit() { 1676 if (!window.Handlebars) { 1677 return; 1678 } 1679 HandlebarsIntl.registerWith(Handlebars); 1680 Handlebars.registerHelper(window.luxuryPresence.handlebarsHelpersFactory(Handlebars)); 1681 } 1682 1683 handlebarsInit(); 1684 1685 var modalContentUrl = "/modals.html"; 1686 const modalsContainer = document.getElementById('modals'); 1687 if (modalsContainer) { 1688 fetch(modalContentUrl).then(function(res) { 1689 if (!res.ok) { 1690 throw new Error(`HTTP error! Status: ${res.status}`); 1691 } 1692 return res.text(); 1693 }).then(function(resultText) { 1694 modalsContainer.innerHTML = resultText; 1695 1696 // now we need to execute all script elements 1697 Array.from(modalsContainer.getElementsByTagName('script')).forEach(function (s) { 1698 const script = document.createElement("script"); 1699 script.text = s.innerHTML; 1700 Array.from(s.attributes).forEach(function (a) { 1701 script.setAttribute(a.name, a.value); 1702 }) 1703 s.parentNode.replaceChild(script, s); 1704 }); 1705 1706 try { 1707 window.luxuryPresence.modals.initialize(window.luxuryPresence._modalIncludes); 1708 window.luxuryPresence.contactForms.initialize({ selector: '#modals' }); 1709 window.luxuryPresence.validation.initialize({ selector: '#modals' }); 1710 window.luxuryPresence.oauth.initialize({ 1711 googleSignOnEnabled: true, 1712 iframe: false }); 1713 } catch (e) { 1714 console.log(e); 1715 } 1716 document.querySelectorAll('.modals > .modal .close').forEach(closeModalBtn => { 1717 closeModalBtn.addEventListener('click', function() { 1718 window.lpUI.hideClosestModal(closeModalBtn); 1719 }); 1720 }); 1721 }).catch((e) => console.log(e)); 1722 } 1723 /* Initialize Luxury Presence SDK */ 1724 try { 1725 window.luxuryPresence.config.setCompany("bda25091-f9eb-4ebc-b64e-6a6cfd5df967", {}); 1726 window.luxuryPresence.config.setWebsite("d1c655e7-3a6b-4818-8bf8-e4b0b6f106a0", { 1727 myhomeDashboardEnabled: true, 1728 mlsEnabled: true, 1729 hstValuationRedirectEnabled: true, 1730 hvStepTwoCaptureEnabled: false 1731 }); 1732 const url = new URL(window.location.href); 1733 const shareId = url.searchParams.get('shareId'); 1734 window.luxuryPresence.config.setPage("07ef5348-01a5-43d0-b535-2fff7c0025fe", { 1735 sourceResource: "", 1736 pageElementId: "", 1737 pageQueryVariables: {}, 1738 shareId: "", 1739 }); 1740 window.luxuryPresence.config.setWebsiteApiGatewayUrl("https://wgw.luxurypresence.com", {}); 1741 window.luxuryPresence.config.setBuyerSellerServiceUrl("https://bss.luxurypresence.com", {}); 1742 window.luxuryPresence.config.setDivolteServiceUrl("https://t.luxurypresence.com", {}); 1743 window.luxuryPresence.config.setEventBusUrl("https://cdn.luxurypresence.com/scripts/event-bus-js", {}); 1744 window.luxuryPresence.config.setEventBus({ 1745 enabled: true, 1746 apiKey: "phc_PMYT31xlmXBaTCwpIRx1v6RrpLVZIuP47N3mOT6KLnr", 1747 url: "https://p.luxurypresence.com", 1748 }); 1749 window.luxuryPresence.config.setTemplateId("8ffaeebb-3667-4b94-9aff-cf0cb535a286", {}); 1750 window.luxuryPresence.config.setLeadIngesterUrl("https://leads.luxurypresence.com", {}); 1751 window.luxuryPresence.buttons.initialize({}); 1752 window.luxuryPresence.consent.initialize({ provider: 'lp-consent' }); 1753 window.luxuryPresence.contactForms.initialize({}); 1754 window.luxuryPresence.validation.initialize({}); 1755 window.luxuryPresence.expandSliders.initialize({}); 1756 window.luxuryPresence.oauth.initialize({ googleSignOnEnabled: true, iframe: false }); 1757 window.luxuryPresence.qualifyingQuestionsModal.initialize({ qualifyingQuestionsModalEnabled: true }); 1758 } catch (e) { 1759 console.log(e); 1760 } 1761 1762 /* Inject Section Specific Javascript */ 1763 try { 1764(function init(sectionDomId) { 1765 $('.contact-popup__close').click(function (e) { 1766 e.preventDefault(); 1767 $(this).closest('.contact-popup').removeClass('visible'); 1768 }); 1769 var $contactModal = $(".contact-popup").closest(".modal"); 1770 if ($contactModal.css("transform") === "matrix(1, 0, 0, 1, 0, 0)" && !$contactModal.hasClass("visible")) { 1771 $contactModal.addClass('visible'); 1772 } 1773 var sectionSelector = sectionDomId ? '#' + sectionDomId : '.contact-us-form'; 1774 var body = $('body'); 1775 function setHttp(link) { 1776 if (link.search(/^http[s]?\:\/\/|\//) == -1) { 1777 link = 'http://' + link; 1778 } 1779 return link; 1780 } 1781 $("#" + sectionDomId + " form").on("reset", function () { 1782 $(this).find(".custom-select").each(function () { 1783 let linkedSelect = $(this).siblings("select")[0]; 1784 $(this).find(".custom-select-toggle").text(linkedSelect.children[0].innerText); 1785 $(this).find(".custom-select-item").removeClass("is-selected"); 1786 }); 1787 const redirectLink = $('#' + sectionDomId + ' .redirect-link'); 1788 if (redirectLink.length) { 1789 const rawHref = redirectLink.attr('href'); 1790 redirectLink.attr('href', setHttp(rawHref)); 1791 redirectLink[0].click(); 1792 } 1793 }); 1794})('modal-global-contact-us'); 1795} catch(e) { 1796console.log(e); 1797} 1798 1799 try { 1800(function init(sectionDomId) { 1801 function isSectionLight(sect) { 1802 if (!sect || !sect.style) { 1803 return true; 1804 } 1805 if (sect.style.backgroundImage) { 1806 return false;
1807 } 1808 if ($(sect).children('.video-wrapper').length) { 1809 return false; 1810 } 1811 return sect.classList.contains('is-background-color-light'); 1812 } 1813 const $header = $(`#${sectionDomId} > .header`); 1814 if ($header.hasClass('theme-auto')) { 1815 if (isSectionLight($('body > section')[0])) { 1816 $header.removeClass('theme-light').addClass('theme-dark'); 1817 } else { 1818 $header.removeClass('theme-dark').addClass('theme-light'); 1819 } 1820 } 1821 $(window).on('scroll', function () { 1822 if ($(this).scrollTop() > 0) { 1823 $(".header").addClass("header-animation-off"); 1824 } 1825 }); 1826})('global-navbar'); 1827} catch(e) { 1828console.log(e); 1829} 1830 try { 1831(function init(sectionDomId, options) { 1832 var elementSelector = options.elementSelector || 'nav'; 1833 var element = document.querySelector(elementSelector); 1834 var sections = document.querySelectorAll('body > section'); 1835 var subNavContainers = element.querySelectorAll('.sub-nav'); 1836 var initialBackgroundColor = options.initialBackgroundColor || element.style.backgroundColor; 1837 var backgroundColorScroll = options.backgroundColorScroll || '#191919'; 1838 var fontColor = options.fontColor || '#fff'; 1839 var fontColorScroll = options.fontColorScroll || '#000'; 1840 var didScroll = false; 1841 var lastScrollTop = 0; 1842 var delta = 5; 1843 1844 // eslint-disable-next-line sonarjs/no-collapsible-if 1845 if (wow) { 1846 // Wowjs might not trigger for position fixed elements 1847 if (window.scrollY > 0) { 1848 element.querySelectorAll('.wow').forEach(el => wow.show(el)); 1849 } 1850 } 1851 function adjustNavPinState() { 1852 // Remove 'visible' class from all subNavContainers 1853 for (let i = 0; i < subNavContainers.length; i++) { 1854 subNavContainers[i].classList.remove('visible'); 1855 } 1856 if (window.scrollY > 0) { 1857 element.style.backgroundColor = backgroundColorScroll; 1858 element.style.color = fontColorScroll; 1859 element.classList.add('scroll'); 1860 } else { 1861 element.style.backgroundColor = initialBackgroundColor; 1862 element.style.color = fontColor; 1863 element.classList.remove('scroll'); 1864 } 1865 } 1866 adjustNavPinState(); 1867 function onScroll() { 1868 didScroll = true; 1869 } 1870 window.addEventListener('scroll', onScroll); 1871 1872 // eslint-disable-next-line 1873 var debounceInterval = setInterval(() => { 1874 if (didScroll) { 1875 // eslint-disable-next-line 1876 hasScrolled(); 1877 didScroll = false; 1878 } 1879 }, 250); 1880 function hasScrolled() { 1881 adjustNavPinState(); 1882 // eslint-disable-next-line 1883 var navbarHeight = element.offsetHeight; 1884 // eslint-disable-next-line 1885 var st = window.scrollY; 1886 1887 // Make sure they scroll more than delta 1888 if (Math.abs(lastScrollTop - st) <= delta) { 1889 return; 1890 } 1891 if (st > lastScrollTop && st > navbarHeight) { 1892 // Scroll Down 1893 element.style.transform = `translateY(-${navbarHeight}px) scaleY(0)`; 1894 document.documentElement.style.setProperty('--global-header-height', '0px'); 1895 1896 // Some sections "follow" the navbar with class sticky (i.e. Producer search) 1897 sections.forEach(section => { 1898 if (section.classList.contains('sticky')) { 1899 section.style.top = '0px'; 1900 } 1901 }); 1902 } else { 1903 // Scroll Up 1904 // eslint-disable-next-line 1905 if (st + window.innerHeight < document.documentElement.scrollHeight) { 1906 element.style.transform = `translateY(0) scaleY(1)`; 1907 document.documentElement.style.setProperty('--global-header-height', `${navbarHeight}px`); 1908 sections.forEach(section => { 1909 if (section.classList.contains('sticky')) { 1910 section.style.top = `${navbarHeight}px`; 1911 } 1912 }); 1913 } 1914 } 1915 lastScrollTop = st; 1916 } 1917})('NAVBAR', JSON.parse("{\"fontColor\":\"#fff\",\"elementSelector\":\".header\",\"fontColorScroll\":\"#000\",\"backgroundColorScroll\":\"#fff\",\"initialBackgroundColor\":\"rgba(0,0,0,0)\"}")); 1918} catch(e) { 1919console.log(e); 1920} 1921 try { 1922(function init(sectionDomId) { 1923 const $section = $('#' + sectionDomId); 1924 $section.on('lpui-show', function () { 1925 window.lpUI.requestScrollLock('side-menu'); 1926 }); 1927 $section.on('lpui-hide', function () { 1928 window.lpUI.releaseScrollLock('side-menu'); 1929 }); 1930 if (/body > div\.sidemenu { display: block;/.test($('head > style').last().text())) { 1931 $section.addClass('in-pb'); 1932 $(`<style>#${sectionDomId}.in-pb {height: 100v` + 'h;}</style>').appendTo($('head')); 1933 } 1934})('global-sidemenu'); 1935} catch(e) { 1936console.log(e); 1937} 1938 1939 try { 1940(function init(sectionDomId) { 1941 var $thankYouModal = $('footer .thank-you-modal'); 1942 var $body = $('body'); 1943 $('footer form').on('formsubmitted', function () { 1944 $thankYouModal.removeClass('closed'); 1945 $body.addClass('locked'); 1946 }); 1947 $('footer .thank-you-modal button').on('click', function () { 1948 $thankYouModal.addClass('closed'); 1949 $body.removeClass('locked'); 1950 }); 1951 $('#' + sectionDomId + " form").on("reset", function () { 1952 if ($('#' + sectionDomId + ' .redirect-link').length) { 1953 $('#' + sectionDomId + ' .redirect-link')[0].click(); 1954 } 1955 }); 1956})('global-footer'); 1957} catch(e) { 1958console.log(e); 1959} 1960 1961 try { 1962(function init(sectionDomId) { 1963 var _section = $('#' + sectionDomId); 1964 var _footer = document.getElementById('global-footer'); 1965 const redirectLink = _section.find('.js-redirect-link'); 1966 function setHttp(link) { 1967 if (link.search(/^(http[s]?\:\/\/|\/)/) == -1) { 1968 link = 'https://' + link; 1969 } 1970 return link; 1971 } 1972 function redirectPage(link) { 1973 if (link.length) { 1974 window.location.href = setHttp(link.attr('href')); 1975 } 1976 } 1977 const emailInput = _section.find('.js-email-input'); 1978 const emailRegex = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~\-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)+/; 1979 emailInput.on('input', function () { 1980 if (emailRegex.test(this.value)) { 1981 this.setCustomValidity(''); 1982 } else { 1983 this.setCustomValidity('Please enter a valid email address.'); 1984 } 1985 this.reportValidity(); 1986 }); 1987 _section.find('input[name="name"]').on("keyup", function () { 1988 if (this.value.replaceAll(/\d/g, "").trim().split(" ").length < 2 || this.value.replaceAll(/\d/g, "").trim() === "") { 1989 this.setCustomValidity("Please input your first name and last name."); 1990 } else { 1991 this.setCustomValidity(""); 1992 } 1993 }); 1994 _section.find('form').on("reset", function () { 1995 $(this).addClass("show-success"); 1996 redirectPage(redirectLink); 1997 }); 1998 $(window).scroll(function () { 1999 if ($(this).scrollTop() >= 150) _section.find('.btn-holder').addClass('visible');else _section.find('.btn-holder').removeClass('visible'); 2000 }); 2001 _section.find('.close-btn, .connect-btn').click(function () { 2002 _section.find('.pop-up').toggle(); 2003 _section.find('.btn-holder').toggle(); 2004 }); 2005 if (!_footer) return; 2006 const observer = new IntersectionObserver(entries => {
2007 entries.forEach(entry => { 2008 if (entry.isIntersecting) _section.hide();else _section.show(); 2009 }); 2010 }, { 2011 threshold: 0.1 2012 }); 2013 observer.observe(_footer); 2014 function selectToDropdown(selectItem) { 2015 let customDropdown = ` 2016 <div class="custom-select" role="presentation"> 2017 <button class="custom-select-toggle is-placeholder" type="button" aria-haspopup="true" aria-expanded="false"></button> 2018 <div class="custom-select-menu" style="display: none;max-height: none;"> 2019 <div class="custom-select-content"> 2020 </div> 2021 </div> 2022 </div>`; 2023 $(customDropdown).insertAfter(selectItem); 2024 let $dropdown = $($(selectItem).next()); 2025 let $dropdownToggle = $dropdown.find(".custom-select-toggle"); 2026 let $dropdownMenu = $dropdown.find(".custom-select-menu"); 2027 let $dropdownContent = $dropdown.find(".custom-select-content"); 2028 $dropdownToggle.addClass($(selectItem).attr("class")).removeClass("dropdown-select"); 2029 $dropdownToggle.attr("id", $(selectItem).attr("id") + "custom"); 2030 $dropdownMenu.attr("aria-labelledby", $dropdownToggle.attr("id")); 2031 appendOptionButtons(selectItem, $dropdownContent); 2032 $(selectItem).removeClass().addClass("sr-only"); 2033 var toggleText = $(selectItem).find(":selected").first().text() || $(selectItem).children().first().text(); 2034 $dropdownToggle.html(toggleText); 2035 $dropdown.on("click", ".custom-select-item", function (e) { 2036 if ($(this).hasClass("is-disabled")) return; 2037 let elementNumber = $(this).index(); 2038 let $originalSelect = $(this).closest(".custom-select").siblings("select"); 2039 let $linkedOption = $originalSelect.find("option").eq(elementNumber); 2040 if (!$linkedOption.prop("selected")) { 2041 $linkedOption.prop("selected", true); 2042 $originalSelect.change(); 2043 $(this).addClass("is-selected").siblings(".custom-select-item").removeClass("is-selected"); 2044 $dropdownToggle.html($(this).html()); 2045 closeSelectMenu($(this).closest(".custom-select-menu")); 2046 } 2047 $dropdownToggle.removeClass("is-placeholder"); 2048 }); 2049 function convertOptionToButton(option) { 2050 var optionText = $(option).text(); 2051 var optionValue = $(option).attr("value") || $(option).text(); 2052 var optionIsDisabled = $(option).prop("disabled"); 2053 var outputButton = `<button value="${optionValue}" class="custom-select-item" type="button" ${optionIsDisabled ? "disabled" : ""}>${optionText}</button>`; 2054 return outputButton; 2055 } 2056 function appendOptionButtons(selectItem, appendTarget) { 2057 $(selectItem).find("option").each(function () { 2058 let currentButton = convertOptionToButton(this); 2059 $(appendTarget).append(currentButton); 2060 }); 2061 } 2062 function showSelectMenu(selectMenu) { 2063 var customSelect = $(selectMenu).closest(".custom-select")[0]; 2064 $(customSelect).addClass("open"); 2065 $(selectMenu).slideDown(); 2066 } 2067 function closeSelectMenu(selectMenu) { 2068 var customSelect = $(selectMenu).closest(".custom-select")[0]; 2069 $(customSelect).removeClass("open"); 2070 $(selectMenu).slideUp(); 2071 } 2072 $dropdown.on("click", ".custom-select-toggle", function (e) { 2073 var $customSelect = $(this).closest(".custom-select"); 2074 var selectMenu = $customSelect.find(".custom-select-menu")[0]; 2075 if ($customSelect.hasClass("open")) { 2076 closeSelectMenu(selectMenu); 2077 } else { 2078 showSelectMenu(selectMenu); 2079 } 2080 }); 2081 $(document).on("click", function (e) { 2082 if ($(e.target).closest(".custom-select").length < 1 && $(".custom-select").hasClass("open")) { 2083 $(".custom-select.open").each(function () { 2084 var selectMenu = $(this).find(".custom-select-menu")[0]; 2085 closeSelectMenu(selectMenu); 2086 }); 2087 } 2088 }); 2089 } 2090 $(".pop-up select[name='interest']").each(function () { 2091 selectToDropdown(this); 2092 }); 2093})('global-mobile-contact'); 2094} catch(e) { 2095console.log(e); 2096} 2097 2098 try { 2099(function init(sectionDomId) {// please write all js here and use sectionDomId in selectors in order of DOM encapsulation 2100})('section-42227948-5841-4e0e-a993-4f76d3586e7b', 'undefined'); 2101} catch(e) { 2102console.log(e); 2103} 2104 try { 2105(function init(sectionDomId) {})('section-f42f1a44-b353-4560-ac1a-1df3ec5b642b', 'undefined'); 2106} catch(e) { 2107console.log(e); 2108} 2109 try { 2110(function init(sectionDomId, options) { 2111 let section = null; 2112 switch (sectionDomId) { 2113 case 'NAVBAR': 2114 section = document.querySelector('body > nav, #global-navbar'); 2115 break; 2116 case 'FOOTER': 2117 section = document.querySelector('body > footer, #global-footer'); 2118 break; 2119 case 'SIDEMENU': 2120 section = document.querySelector('body > div.sidemenu, #global-sidemenu'); 2121 break; 2122 case 'CONTACT':
2123 section = document.querySelector('#modal-global-contact-us'); 2124 break; 2125 case 'MOBILE_CONTACT': 2126 section = document.querySelector('body > div.mobile-contact-wrapper, #global-mobile-contact'); 2127 break; 2128 case 'SUBSCRIBE': 2129 // Subscribe Not Implemented 2130 section = null; 2131 break; 2132 case 'ACCOUNT': 2133 // Account Not Implemented 2134 section = null; 2135 break; 2136 default: 2137 section = document.querySelector('#' + sectionDomId); 2138 } 2139 if (!section) { 2140 return; 2141 } 2142 2143 // Where content / items are rendered 2144 const dataContainer = section.querySelector('.data-container'); 2145 if (!dataContainer) { 2146 // no place to render items = no need to query server or do anything else 2147 return; 2148 } 2149 let variables = options.variables || {}; 2150 2151 // Some variables in options may not have been injected - remove 2152 Object.keys(variables).forEach(function (variableName) { 2153 if (typeof variables[variableName] === 'string' && variables[variableName].match(/^{{.*}}$/)) { 2154 delete variables[variableName]; 2155 } 2156 }); 2157 2158 // Merge page query variables 2159 if (options.usePageResource) { 2160 variables = { 2161 ...variables, 2162 ...window.luxuryPresence.config.pageMeta.pageQueryVariables[options.resource] 2163 }; 2164 } 2165 2166 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. Callers 2167 // resolve the flag â fetchData reads the section stamp, aux fetches read 2168 // their own resource's stamp (auxUsesRouter). 2169 function apiUrl(useRouter) { 2170 return options.url || (useRouter ? window.luxuryPresence.defaults.routerUrl : window.luxuryPresence.defaults.apiGatewayUrl); 2171 } 2172 2173 // ROUTER-CLEANUP: aux resources roll out on their own flag, not the section's 2174 // (options.routerApiAux is stamped per aux resource server-side). 2175 function auxUsesRouter(resource) { 2176 return !!(options.routerApiAux && options.routerApiAux[resource]); 2177 } 2178 2179 // Pagination Executes on a Numbered Pagination Container 2180 // Or via a load more button 2181 let mode = 'BUTTONLESS_PAGINATION'; 2182 const container = section.querySelector('.pagination-container');
2183 const loadMoreButton = section.querySelector(options?.loadMoreSelector); 2184 if (container) { 2185 mode = 'NUMBERED_PAGINATION'; 2186 } 2187 if (loadMoreButton) { 2188 mode = 'LOAD_MORE_BUTTON'; 2189 } 2190 let searchContainer = section.querySelector('.search-container'); 2191 const hidePaginationOnFirstPage = options.hidePaginationOnFirstPage || false; 2192 const eventPrefix = '__pagination-'; 2193 const searchFormParams = options.searchFormParams || (options.resource === 'properties' ? [{ 2194 param: 'neighborhoodId', 2195 urlKey: 'neighborhood' 2196 }, { 2197 param: 'search', 2198 urlKey: 'search' 2199 }, { 2200 param: 'salesPriceGTE', 2201 urlKey: 'pricemin', 2202 formKey: 'priceMin', 2203 type: 'int' 2204 }, { 2205 param: 'salesPriceLTE', 2206 urlKey: 'pricemax', 2207 formKey: 'priceMax', 2208 type: 'int' 2209 }, { 2210 param: 'livingSpaceSizeGTE', 2211 urlKey: 'areamin', 2212 formKey: 'areaMin', 2213 type: 'int' 2214 }, { 2215 param: 'livingSpaceSizeLTE', 2216 urlKey: 'areamax', 2217 formKey: 'areaMax', 2218 type: 'int' 2219 }] : []); 2220 2221 // Total entries - initialized in first render 2222 let totalNumber = 0; 2223 const DefaultSearchParams = { 2224 page: 1 2225 }; 2226 searchFormParams.forEach(function (formParam) { 2227 DefaultSearchParams[formParam.formKey || formParam.param] = null; 2228 }); 2229 let searchParams = { 2230 ...DefaultSearchParams 2231 }; 2232 const offset = options.variables?.offset || 0; 2233 let scrollTarget = options.scrollTargetSelector ? section.querySelector(options.scrollTargetSelector) || section : section; 2234 let scrollOffset = (parseInt(options.scrollOffset, 10) || 0) ?? 100; 2235 2236 // entries of per page 2237 // when query variables for a given section would't be filled options.pageSize can store 2238 // template string, ex: "{{variables.limit}}", below code handles that case and set 9 as a default value 2239 let pageSize = parseInt(options.pageSize, 10) || 9; 2240 2241 // Adding mobile pageRange support 2242 var NARROW_BREAKPOINT = 600; 2243 var mobileBreakpoint = options.mobileBreakpoint > 0 ? options.mobileBreakpoint : NARROW_BREAKPOINT; 2244 var paginationMql = window.matchMedia(`(max-width: ${mobileBreakpoint}px)`); 2245 2246 // Page range (pages on both sides of the current page) 2247 var mobilePageRange = options.mobilePageRange > 0 ? options.mobilePageRange : 0; 2248 var desktopPageRange = options.pageRange >= 0 ? options.pageRange : 2; 2249 var pageRange = paginationMql.matches ? mobilePageRange : desktopPageRange; 2250 2251 // Whether to display the 'Previous' button 2252 var showPrevious = true; 2253 2254 // Whether to display the 'Next' button 2255 var showNext = true; 2256 2257 // Whether to display the page buttons 2258 var showPageNumbers = true; 2259 2260 // 'Previous' text 2261 var prevText = options.prevText || '«'; 2262 2263 // 'Next' text 2264 var nextText = options.nextText || '»'; 2265 2266 // Ellipsis text 2267 var ellipsisText = '…'; 2268 var classPrefix = 'paginationjs'; 2269 2270 // Default active class 2271 var activeClassName = 'active'; 2272 2273 // Default disable class 2274 var disableClassName = 'disabled'; 2275 2276 // Pagination element's position in the container 2277 var position = 'bottom'; 2278 2279 // Whether to trigger pagination at initialization 2280 var triggerPagingOnInit = !options.skipInitialLoad; 2281 var showFirstOnEllipsisShow = true; 2282 var showLastOnEllipsisShow = true; 2283 2284 // Instantiated in init() 2285 var el = null; 2286 2287 // Controls scrollTop logic 2288 var firstRender = true; 2289 var renderBySearch = false; 2290 var disabled = false; 2291 2292 // Pagination script class selector 2293 var paginationScriptSelector = options.paginationPartialName ? `.${options.paginationPartialName}` : '.pagination-script'; 2294 2295 // Property Specific Image Override if No Image 2296 var propertyPlaceholderImage = window.luxuryPresence.defaults.propertyPlaceholderImage; 2297 2298 // Construct template 2299 var templateHTML = section.querySelector(`script${paginationScriptSelector}`)?.innerHTML || ''; 2300 var template = Handlebars.compile(templateHTML); 2301 2302 // Initialize 2303 init(); 2304 function init() { 2305 Object.assign(searchParams, window.luxuryPresence.pagination.deserializeParams(searchFormParams, sectionDomId)); 2306 2307 // Append/prepend pagination element to the pagination container 2308 if (mode === 'NUMBERED_PAGINATION') { 2309 el = document.createElement('div'); 2310 el.className = 'paginationjs';
2311 container[position === 'bottom' ? 'append' : 'prepend'](el); 2312 } 2313 if (searchContainer) { 2314 initSearchContainer({ 2315 fetchNeighborhoods: searchContainer.dataset.fetchNeighborhoods === 'true', 2316 fetchPostCategories: searchContainer.dataset.fetchPostCategories === 'true', 2317 fetchOffices: searchContainer.dataset.fetchOffices === 'true', 2318 fetchRentalRates: searchContainer.dataset.fetchRentalRates === 'true' 2319 }, function () { 2320 syncSearchFormState(searchParams); 2321 }); 2322 } 2323 2324 // Bind events 2325 observer(); 2326 } 2327 function syncSearchFormState(params) { 2328 searchContainer.dispatchEvent(new CustomEvent('sync', { 2329 detail: params 2330 })); 2331 } 2332 function initSearchContainer(options, done) { 2333 var promises = []; 2334 if (options.fetchNeighborhoods) { 2335 promises.push(fetchAllNeighborhoods(function (neighborhoods) { 2336 searchContainer.dispatchEvent(new CustomEvent('neighborhoods-data', { 2337 detail: { 2338 data: neighborhoods.map(function (item) { 2339 return { 2340 value: item.id, 2341 label: item.name 2342 }; 2343 }) 2344 } 2345 })); 2346 })); 2347 } 2348 if (options.fetchPostCategories) { 2349 promises.push(fetchPostCategories(function (categories) { 2350 searchContainer.dispatchEvent(new CustomEvent('post-categories-data', { 2351 detail: { 2352 data: categories 2353 } 2354 })); 2355 })); 2356 } 2357 if (options.fetchOffices) { 2358 promises.push(fetchOffices(function (offices) { 2359 searchContainer.dispatchEvent(new CustomEvent('offices-data', { 2360 detail: { 2361 data: offices 2362 } 2363 })); 2364 })); 2365 } 2366 if (options.fetchRentalRates) { 2367 promises.push(fetchAllRentalRates(function (rentalRates) { 2368 searchContainer.dispatchEvent(new CustomEvent('rental-rates-data', { 2369 detail: { 2370 data: rentalRates 2371 } 2372 })); 2373 })); 2374 } 2375 if (promises.length > 0) { 2376 Promise.all(promises).then(function () { 2377 done(); 2378 }); 2379 } else { 2380 // element's custom code is not executed yet, so we're scheduling callback to after element's code 2381 setTimeout(done); 2382 } 2383 } 2384 function fetchAllNeighborhoods(done) { 2385 var useRouter = auxUsesRouter('neighborhoods'); 2386 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. Same 2387 // args on both APIs (the federated neighborhoods field accepts 2388 // withProperties/withBlogPosts); only the selection set differs. 2389 var gqlQuery = 'query ($companyId: String, $withProperties: NeighborhoodPropertiesFilter, $withBlogPosts: NeighborhoodBlogPostsFilter, $offset: Int, $limit: Int) {' + 'neighborhoods (companyId: $companyId, withProperties: $withProperties, withBlogPosts: $withBlogPosts, offset: $offset, limit: $limit) {' + (useRouter ? 'items {id, name}' : 'id, name') + '}}'; 2390 var payload = {}; 2391 payload.offset = 0; 2392 payload.limit = 100; 2393 payload.companyId = variables.companyId; 2394 if (options.resource === 'properties') { 2395 payload.withProperties = { 2396 active: true 2397 }; 2398 ['agentIds', 'tag', 'propertyTypeId', 'statusIds', 'architectureStyle', 'lifestyle', 'salesPriceGTE', 'salesPriceLTE', 'leasePriceGTE', 'leasePriceLTE', 'livingSpaceSizeGTE', 'livingSpaceSizeLTE', 'bathCountGTE', 'bathCountLTE', 'bedroomCountGTE', 'bedroomCountLTE', 'bathCountGTE', 'bathCountLTE', 'bedroomCountGTE', 'bedroomCountLTE', 'featuredListing', 'leaseProperty', 'neighborhoodId', 'developmentId', 'openHouse'].forEach(function (field) { 2399 if (variables[field] !== undefined && variables[field] !== null) { 2400 payload.withProperties[field] = variables[field]; 2401 } 2402 }); 2403 } 2404 if (options.resource === 'posts') { 2405 payload.withBlogPosts = { 2406 active: true 2407 }; 2408 ['search', 'postStatusId', 'featured', 'categoryId', 'categoryIds', 'neighborhoodId', 'slug'].forEach(function (field) { 2409 if (variables[field] !== undefined && variables[field] !== null) { 2410 payload.withBlogPosts[field] = variables[field]; 2411 } 2412 }); 2413 } 2414 2415 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 2416 if (useRouter) { 2417 payload = window.luxuryPresence.routerApi.transformVariables('neighborhoods', payload); 2418 } 2419 superagent.post(apiUrl(useRouter) + '/graphql').withCredentials().send({ 2420 query: gqlQuery, 2421 variables: payload 2422 }).then(function (res) { 2423 var value = res.body.data && res.body.data.neighborhoods || {}; 2424 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 2425 var items = useRouter ? window.luxuryPresence.routerApi.transformPage(value).items : value || []; 2426 done(items, items.length); 2427 }); 2428 } 2429 function fetchPostCategories(done) { 2430 var featured = options.resource === 'posts' && !!variables.featured; 2431 var useRouter = auxUsesRouter('postCategories'); 2432 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. Only the 2433 // selection set differs ({ items {...} } on the router). 2434 var selection = 'id, name, publishedCount, featuredPublishedCount'; 2435 var gqlQuery = 'query ($companyId: String, $offset: Int, $limit: Int) {' + 'postCategories (companyId: $companyId, offset: $offset, limit: $limit ' + (featured ? ' withFeaturedPublishedOnly: true' : ' withPublishedOnly: true') + ') {' + (useRouter ? 'items {' + selection + '}' : selection) + '}}'; 2436 var payload = {}; 2437 payload.offset = 0; 2438 payload.limit = 100; 2439 payload.companyId = variables.companyId; 2440 superagent.post(apiUrl(useRouter) + '/graphql').withCredentials().send({ 2441 query: gqlQuery, 2442 variables: payload 2443 }).then(function (res) { 2444 var value = res.body.data && res.body.data.postCategories || {}; 2445 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 2446 var items = useRouter ? window.luxuryPresence.routerApi.transformPage(value).items : value || []; 2447 done(items.map(function (item) { 2448 item.count = featured ? item.featuredPublishedCount : item.publishedCount; 2449 return item; 2450 }), items.length); 2451 }); 2452 } 2453 function fetchOffices(done) { 2454 var useRouter = auxUsesRouter('offices'); 2455 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. Only the 2456 // selection set differs ({ items {...} } on the router). 2457 var selection = 'id, name, tags'; 2458 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. The two 2459 // APIs differ in more than the items wrapper: federated offices takes 2460 // companyId: ID! (legacy gateway: String), so each branch builds its whole doc. 2461 var gqlQuery = useRouter ? 'query ($companyId: ID!, $offset: Int, $limit: Int) {' + 'offices (companyId: $companyId, offset: $offset, limit: $limit) {' + 'items {' + selection + '}}}' : 'query ($companyId: String, $offset: Int, $limit: Int) {' + 'offices (companyId: $companyId, offset: $offset, limit: $limit) {' + selection + '}}'; 2462 var payload = { 2463 offset: 0, 2464 limit: 100, 2465 companyId: variables.companyId 2466 }; 2467 2468 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 2469 if (useRouter) { 2470 payload = window.luxuryPresence.routerApi.transformVariables('office
2470s', payload); 2471 } 2472 superagent.post(apiUrl(useRouter) + '/graphql').withCredentials().send({ 2473 query: gqlQuery, 2474 variables: payload 2475 }).then(function (res) { 2476 var value = res.body.data && res.body.data.offices || {}; 2477 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 2478 var items = useRouter ? window.luxuryPresence.routerApi.transformPage(value).items : value || []; 2479 done(items, items.length); 2480 }); 2481 } 2482 2483 // ROUTER-CLEANUP: no rentalRates field on the federated router â legacy only. 2484 function fetchAllRentalRates(done) { 2485 var url = options.url || window.luxuryPresence.defaults.apiGatewayUrl; 2486 var gqlQuery = 'query ($companyId: String, $offset: Int, $limit: Int) {' + 'rentalRates (companyId: $companyId, offset: $offset, limit: $limit) {rentalRateId, label}}'; 2487 var payload = { 2488 offset: 0, 2489 limit: 100, 2490 companyId: variables.companyId 2491 }; 2492 superagent.post(url + '/graphql').withCredentials().send({ 2493 query: gqlQuery, 2494 variables: payload 2495 }).then(function (res) { 2496 var items = res.body.data && res.body.data.rentalRates || []; 2497 done(items, items.length); 2498 }).catch(function (err) { 2499 console.error('Error fetching rental rates:', err); 2500 done([], 0); 2501 }); 2502 } 2503 function fetchData(params, done) { 2504 var resource = options.resource; 2505 var gqlQuery = options.query || window.luxuryPresence.defaults.gql[resource]; 2506 var payload = {}; 2507 try { 2508 payload = JSON.parse(JSON.stringify(variables)); 2509 } catch (e) { 2510 Object.keys(variables).forEach(function (variableName) { 2511 payload[variableName] = variables[variableName]; 2512 }); 2513 } 2514 payload.offset = (params.page - 1) * pageSize + offset; 2515 payload.limit = pageSize; 2516 payload.companyId = options.companyId; 2517 searchFormParams.forEach(function (formParam) { 2518 var val = params[formParam.formKey || formParam.param]; 2519 if (val !== null && val !== undefined) { 2520 objSet(payload, formParam.param, val); 2521 } 2522 }); 2523 2524 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 2525 if (options.useRouterApi) { 2526 payload = window.luxuryPresence.routerApi.transformVariables(resource, payload); 2527 } 2528 2529 // TODO: Disabled loading due to jarring effect 2530 // dataContainer.html('Loading...'); 2531 superagent.post(apiUrl(options.useRouterApi) + '/graphql').withCredentials().send({ 2532 query: gqlQuery, 2533 variables: payload 2534 }).then(function (res) { 2535 if (res.body.errors) { 2536 done(res.body.errors); 2537 return; 2538 } 2539 var data = res.body.data || {}; 2540 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 2541 var resources; 2542 var resourceCount; 2543 if (options.useRouterApi) { 2544 var page = window.luxuryPresence.routerApi.transformPage(data[resource]); 2545 resources = window.luxuryPresence.routerApi.transformResponse(resource, page.items); 2546 resourceCount = page.count; 2547 } else { 2548 resources = data[resource] || []; 2549 resourceCount = data[resource + 'Count'] && data[resource + 'Count'].count ? data[resource + 'Count'].count : 0; 2550 } 2551 const finish = function (items) { 2552 if (resource === 'properties' && propertyPlaceholderImage?.id) { 2553 items = items.map(item => { 2554 if (item.media?.length === 0) { 2555 return Object.assign(item, { 2556 media: [propertyPlaceholderImage] 2557 }); 2558 } 2559 return item; 2560 }); 2561 } 2562 done(null, items, resourceCount); 2563 }; 2564 2565 // ROUTER-CLEANUP: client half of PLAT-4073 â resolve the requested 2566 // disclaimers before rendering; older SDKs skip (keys stay unset). 2567 if (options.useRouterApi && resource === 'properties' && options.routerPropertyDisclaimers && options.routerPropertyDisclaimers.length && window.luxuryPresence.routerApi && typeof window.luxuryPresence.routerApi.applyPropertyDisclaimers === 'function') { 2568 window.luxuryPresence.routerApi.applyPropertyDisclaimers(resources, options.routerPropertyDisclaimers).then(finish); 2569 return; 2570 } 2571 finish(resources); 2572 }); 2573 } 2574 function getTotalPage() { 2575 return Math.ceil(totalNumber / pageSize); 2576 } 2577 function renderPaginationList() { 2578 var totalPages = getTotalPage(); 2579 var rangeStart = searchParams.page - pageRange; 2580 var rangeEnd = searchParams.page + pageRange; 2581 if (rangeEnd > totalPages) { 2582 rangeEnd = totalPages; 2583 rangeStart = totalPages - pageRange * 2; 2584 rangeStart = rangeStart < 1 ? 1 : rangeStart; 2585 } 2586 if (rangeStart <= 1) { 2587 rangeStart = 1; 2588 rangeEnd = Math.min(pageRange * 2 + 1, totalPages); 2589 } 2590 2591 // Making sure that 1 more page button is shown in edge positions 2592 if (pageRange === 0) { 2593 if (searchParams.page === totalPages) { 2594 rangeStart = totalPages <= 1 ? 1 : totalPages - 1; 2595 } 2596 if (searchParams.page === 1) { 2597 rangeEnd = Math.min(2, totalPages); 2598 } 2599 } 2600 2601 // Render pagination list 2602 if (mode === 'NUMBERED_PAGINATION') { 2603 el.innerHTML = generateHTML({ 2604 currentPage: searchParams.page, 2605 pageRange: pageRange, 2606 rangeStart: rangeStart, 2607 rangeEnd: rangeEnd 2608 }); 2609 if (totalPages < 2 && hidePaginationOnFirstPage) { 2610 container.style.display = 'none'; 2611 } else { 2612 container.style.display = ''; 2613 } 2614 } else if (mode === 'LOAD_MORE_BUTTON') { 2615 if (searchParams.page >= totalPages) {
2616 loadMoreButton.style.display = 'none'; 2617 } else { 2618 loadMoreButton.style.display = ''; 2619 } 2620 } 2621 } 2622 function render(data) { 2623 renderPaginationList(); 2624 2625 // Render new content with handlebars 2626 var html = ''; 2627 if (mode === 'LOAD_MORE_BUTTON' && searchParams.page > 1) { 2628 // If using load more, append search results to existing results 2629 html = dataContainer.innerHTML; 2630 } 2631 for (var i = 0; i < data.length; i++) { 2632 var itemData = recursivelyParse(data[i]); 2633 itemData.sectionIndex = options.sectionIndex; 2634 itemData.renderOptions = options.renderOptions; 2635 html += template(itemData); 2636 } 2637 dataContainer.innerHTML = html; 2638 2639 // Scroll Top 2640 if (!firstRender && mode === 'NUMBERED_PAGINATION' && (!renderBySearch || !options.skipScrollOnSearch)) { 2641 // Only animate to the top if we replace dataContainer (numbered pagination) 2642 setTimeout(() => { 2643 const scrollTargetOffsetTop = scrollTarget.getBoundingClientRect().top + window.scrollY - scrollOffset; 2644 window.scrollTo({ 2645 top: scrollTargetOffsetTop, 2646 behavior: 'smooth' 2647 }); 2648 }, 250); 2649 } 2650 return true; 2651 } 2652 function generateHTML(args) { 2653 const totalPages = getTotalPage(); 2654 const { 2655 rangeStart, 2656 rangeEnd 2657 } = args; 2658 const makeLnk = page => window.luxuryPresence.pagination.serializeParams(searchFormParams, sectionDomId, { 2659 ...searchParams, 2660 page 2661 }); 2662 let html = ''; 2663 if (showPrevious || showPageNumbers || showNext) { 2664 html += '<div class="paginationjs-pages"><ul>'; 2665 2666 // Previous button 2667 if (showPrevious) { 2668 if (searchParams.page <= 1) { 2669 html += `<li class="${classPrefix}-prev ${disableClassName}"><a>${prevText}</a></li>`; 2670 } else { 2671 html += `<li class="${classPrefix}-prev J-paginationjs-previous" data-num="${searchParams.page - 1}" title="Previous page"><a href="${makeLnk(searchParams.page - 1)}">${prevText}</a></li>`; 2672 } 2673 } 2674 2675 // Pages 2676 if (showPageNumbers) { 2677 if (rangeStart <= 3) { 2678 for (let i = 1; i < rangeStart; i++) { 2679 html += `<li class="${classPrefix}-page J-paginationjs-page ${i === searchParams.page ? activeClassName : ''}" data-num="${i}"><a ${i === searchParams.page ? '' : `href="${makeLnk(i)}"`}>${i}</a></li>`; 2680 } 2681 } else { 2682 if (showFirstOnEllipsisShow) { 2683 html += `<li class="${classPrefix}-page ${classPrefix}-first J-paginationjs-page" data-num="1"><a href="${makeLnk(1)}">1</a></li>`; 2684 } 2685 html += `<li class="${classPrefix}-ellipsis ${disableClassName}"><a>${ellipsisText}</a></li>`; 2686 } 2687 for (let i = rangeStart; i <= rangeEnd; i++) { 2688 html += `<li class="${classPrefix}-page J-paginationjs-page ${i === searchParams.page ? activeClassName : ''}" data-num="${i}"><a ${i === searchParams.page ? '' : `href="${makeLnk(i)}"`}>${i}</a></li>`; 2689 } 2690 if (rangeEnd < totalPages - 2) { 2691 html += `<li class="${classPrefix}-ellipsis ${disableClassName}"><a>${ellipsisText}</a></li>`; 2692 if (showLastOnEllipsisShow) { 2693 html += `<li class="${classPrefix}-page ${classPrefix}-last J-paginationjs-page" data-num="${totalPages}"><a href="${makeLnk(totalPages)}">${totalPages}</a></li>`; 2694 } 2695 } else { 2696 for (let i = rangeEnd + 1; i <= totalPages; i++) { 2697 html += `<li class="${classPrefix}-page J-paginationjs-page" data-num="${i}"><a href="${makeLnk(i)}">${i}</a></li>`; 2698 } 2699 } 2700 } 2701 2702 // Next button 2703 if (showNext) { 2704 if (searchParams.page >= totalPages) { 2705 html += `<li class="${classPrefix}-next ${disableClassName}"><a>${nextText}</a></li>`; 2706 } else { 2707 html += `<li class="${classPrefix}-next J-paginationjs-next" data-num="${searchParams.page + 1}" title="Next page"><a href="${makeLnk(searchParams.page + 1)}">${nextText}</a></li>`; 2708 } 2709 } 2710 html += '</ul></div>'; 2711 } 2712 return html; 2713 } 2714 function go(newSearchParams, callback, restorationVisit) { 2715 if (disabled) return; 2716 var goToPageNumber = newSearchParams.page; 2717 2718 // Page number is out of bounds 2719 if (!goToPageNumber || goToPageNumber < 1) return; 2720 var totalPage = getTotalPage(); 2721 2722 // Page number is out of bounds 2723 if (!restorationVisit && totalNumber > 0) { 2724 if (goToPageNumber > totalPage) return; 2725 } 2726 if (!options.skipSerialization && (mode === 'NUMBERED_PAGINATION' || searchContainer)) {
2727 var newURL = window.luxuryPresence.pagination.serializeParams(searchFormParams, sectionDomId, { 2728 ...newSearchParams, 2729 page: goToPageNumber !== 1 && mode === 'NUMBERED_PAGINATION' ? newSearchParams.page : null 2730 }); 2731 if (!areQueryParamsEqual(newSearchParams, searchParams) && !restorationVisit) { 2732 window.history.pushState({}, '', window.luxuryPresence.getPath(newURL, { 2733 queryString: true 2734 })); 2735 } 2736 } 2737 2738 // Fetch and update page 2739 fetchData(newSearchParams, renderWithData); 2740 disabled = true; 2741 function renderWithData(err, data, count) { 2742 if (err) { 2743 dataContainer.dispatchEvent(new Event('error')); 2744 } else { 2745 searchParams = { 2746 ...newSearchParams 2747 }; 2748 totalNumber = count - offset; 2749 if (data.length === 0) { 2750 dataContainer.dispatchEvent(new Event('no-data')); 2751 } else { 2752 dataContainer.dispatchEvent(new Event('data')); 2753 } 2754 render(data); 2755 firstRender = false; 2756 } 2757 disabled = false; 2758 renderBySearch = false; 2759 } 2760 } 2761 function areQueryParamsEqual(first, second) { 2762 var differ = Object.keys(first).find(function (key) { 2763 return first[key] !== undefined && first[key] !== null && first[key] !== second[key]; 2764 }); 2765 if (differ) { 2766 return false; 2767 } 2768 differ = Object.keys(second).find(function (key) { 2769 return second[key] !== undefined && second[key] !== null && second[key] !== first[key]; 2770 }); 2771 return !differ; 2772 } 2773 function next(callback) { 2774 go({ 2775 ...searchParams, 2776 page: searchParams.page + 1 2777 }, callback); 2778 } 2779 function previous(callback) { 2780 go({ 2781 ...searchParams, 2782 page: searchParams.page - 1 2783 }, callback); 2784 } 2785 function refresh(callback) { 2786 go(searchParams, callback); 2787 } 2788 function update(params, callback) { 2789 renderBySearch = true; 2790 go(params, callback); 2791 } 2792 function observer() { 2793 if (searchContainer) { 2794 searchContainer.addEventListener('search', function (event, newSearchParams) { 2795 newSearchParams = event.detail || newSearchParams; 2796 update({ 2797 ...searchParams, 2798 ...newSearchParams, 2799 page: 1 2800 }); 2801 }); 2802 searchContainer.addEventListener('clear-search', function () { 2803 const defaultSearchParams = { 2804 ...DefaultSearchParams 2805 }; 2806 const isCurrentSearchFormStateDefault = areQueryParamsEqual({ 2807 ...defaultSearchParams, 2808 page: null 2809 }, { 2810 ...searchParams, 2811 page: null 2812 }); 2813 2814 // if mode is LOAD_MORE_BUTTON we should't make anything on clear 2815 // when search form have default state 2816 if (isCurrentSearchFormStateDefault && mode !== 'NUMBERED_PAGINATION') { 2817 return; 2818 } 2819 2820 // if someone initially go to some page and click 'Clear' on search from 2821 // we should't navigate to first page. We should preserve page value 2822 if (isCurrentSearchFormStateDefault) { 2823 defaultSearchParams.page = searchParams.page; 2824 } 2825 syncSearchFormState(defaultSearchParams); 2826 update(defaultSearchParams); 2827 }); 2828 } 2829 if (mode === 'LOAD_MORE_BUTTON') { 2830 loadMoreButton.addEventListener('click', function (event) { 2831 go({ 2832 ...searchParams, 2833 page: searchParams.page + 1 2834 }); 2835 return false; 2836 }); 2837 } 2838 if (mode === 'LOAD_MORE_BUTTON' || mode === 'BUTTONLESS_PAGINATION') { 2839 // Do initial render 2840 go(Object.assign({}, searchParams, { 2841 page: 1 2842 })); 2843 return; 2844 } 2845 if (mode === 'NUMBERED_PAGINATION') { 2846 // Go to specified page number 2847 container.addEventListener(eventPrefix + 'go', function (event) { 2848 let { 2849 pageNumber, 2850 done 2851 } = event.detail || {}; 2852 pageNumber = parseInt(pageNumber, 10); 2853 if (!pageNumber) { 2854 return; 2855 } 2856 go({ 2857 ...searchParams, 2858 page: pageNumber 2859 }, done); 2860 }); 2861 2862 // Page number button click 2863 el.addEventListener('click', function (event) { 2864 let clickTarget = event.target; 2865 let current = clickTarget.closest('.J-paginationjs-page, .J-paginationjs-previous, .J-paginationjs-next'); 2866 let pageNumber = current?.getAttribute('data-num'); 2867 if (!pageNumber || current.classList.contains(disableClassName) || current.classList.contains(activeClassName)) { 2868 return; 2869 } else { 2870 go({ 2871 ...searchParams, 2872 page: parseInt(pageNumber, 10) 2873 }); 2874 } 2875 event.preventDefault(); 2876 }); 2877 2878 // Whether to load the default page 2879 var defaultPageNumber = searchParams.page; 2880 if (triggerPagingOnInit) {
2881 container.dispatchEvent(new CustomEvent(eventPrefix + 'go', { 2882 detail: { 2883 pageNumber: defaultPageNumber 2884 } 2885 })); 2886 } 2887 } 2888 window.addEventListener('popstate', function (event) { 2889 var newParams = Object.assign({}, DefaultSearchParams, window.luxuryPresence.pagination.deserializeParams(searchFormParams, sectionDomId)); 2890 if (!areQueryParamsEqual(newParams, searchParams)) { 2891 go(newParams, null, true); 2892 if (searchContainer) { 2893 syncSearchFormState(newParams); 2894 } 2895 } 2896 }); 2897 } 2898 function replaceVariables(template, variables) { 2899 var formattedString; 2900 for (var key in variables) { 2901 var value = variables[key]; 2902 var regexp = new RegExp('<%=\\s*' + key + '\\s*%>', 'img'); 2903 formattedString = (formattedString || template).replace(regexp, value); 2904 } 2905 return formattedString; 2906 } 2907 function isTextEditorValue(obj) { 2908 return 'raw' in obj || 'gjs' in obj; 2909 } 2910 function getTextEditorValue(obj) { 2911 if (!obj.html) { 2912 return ''; 2913 } 2914 var data = obj.html; 2915 var css = (obj.raw || obj.gjs || {}).css; 2916 if (css) { 2917 data = data + '<style>' + css + '</style>'; 2918 } 2919 return data; 2920 } 2921 2922 /** 2923 * check rendered resources for html and raw properties that could indicate if resource is from an advanced text editor. 2924 * strips out raw proprties and returns only HTML if it exists. 2925 * @param {Object} resources a collection retrieved from the database 2926 * @return {Object} the newly modified object. 2927 */ 2928 function recursivelyParse(resources) { 2929 forEach(resources, function (value, key) { 2930 if (!value) { 2931 return; 2932 } 2933 if (value instanceof Object) { 2934 if (isTextEditorValue(value)) { 2935 resources[key] = getTextEditorValue(value); 2936 return; 2937 } else { 2938 return recursivelyParse(value); 2939 } 2940 } 2941 try { 2942 var parsedData = JSON.parse(value); 2943 if (isTextEditorValue(parsedData)) { 2944 resources[key] = getTextEditorValue(parsedData); 2945 } 2946 } catch (e) { 2947 // do nothing if we failed to parse value as JSON 2948 } 2949 }); 2950 return resources; 2951 } 2952 function forEach(collection, iteratee) { 2953 var func = Array.isArray(collection) ? arrayEach : baseFor; 2954 return func(collection, iteratee); 2955 } 2956 function baseFor(object, iteratee) { 2957 if (!object) { 2958 return; 2959 } 2960 var iterable = Object(object); 2961 var props = Object.keys(object); 2962 var length = props.length; 2963 var index = -1; 2964 while (length--) { 2965 var key = props[++index]; 2966 if (iteratee(iterable[key], key, iterable) === false) { 2967 break; 2968 } 2969 } 2970 return object; 2971 } 2972 function objSet(obj, path, value) { 2973 const pathArray = Array.isArray(path) ? path : path.match(/([^[.\]])+/g); 2974 pathArray.reduce((acc, key, i) => { 2975 if (acc[key] === undefined) acc[key] = {}; 2976 if (i === pathArray.length - 1) acc[key] = value; 2977 return acc[key]; 2978 }, obj); 2979 } 2980 function arrayEach(array, iteratee) { 2981 var index = -1; 2982 var length = array.length; 2983 while (++index < length) { 2984 if (iteratee(array[index], index, array) === false) { 2985 break; 2986 } 2987 } 2988 return array; 2989 } 2990 function selectPageRangeMode(e) { 2991 pageRange = e.matches ? mobilePageRange : desktopPageRange; 2992 renderPaginationList(); 2993 } 2994 paginationMql.addEventListener('change', selectPageRangeMode); 2995})('section-5bb14518-9a5a-4131-b654-087e692a51d7', JSON.parse("{\"pageSize\":\"8\",\"resource\":\"posts\",\"pageRange\":1,\"variables\":{\"sort\":\"publishedAt\",\"limit\":8,\"offset\":0,\"sortDir\":\"DESC\",\"companyId\":\"bda25091-f9eb-4ebc-b64e-6a6cfd5df967\",\"categoryId\":\"{{variables.categoryId}}\",\"postStatusId\":\"5f528253-abb7-484e-95c3-330269ac1102\"},\"hidePaginationOnFirstPage\":true,\"companyId\":\"bda25091-f9eb-4ebc-b64e-6a6cfd5df967\",\"usePageResource\":false,\"sectionIndex\":3,\"useRouterApi\":true,\"routerApiAux\":{\"testimonials\":true,\"agents\":false,\"neighborhoods\":false,\"developments\":false,\"properties\":false,\"posts\":true,\"pressReleases\":true,\"offices\":true,\"teams\":true,\"pois\":true,\"postCategories\":true}}")); 2996} catch(e) { 2997console.log(e); 2998} 2999 try { 3000(function init(sectionDomId) {// please write all js here and use sectionDomId in selectors in order of DOM encapsulation 3001})('section-5bb14518-9a5a-4131-b654-087e692a51d7', JSON.parse("{\"resource\":\"posts\",\"useRouterApi\":true,\"companyId\":\"bda25091-f9eb-4ebc-b64e-6a6cfd5df967\",\"usePageResource\":false,\"sectionIndex\":3,\"routerApiAux\":{\"testimonials\":true,\"agents\":false,\"neighborhoods\":false,\"developments\":false,\"properties\":false,\"posts\":true,\"pressReleases\":true,\"offices\":true,\"teams\":true,\"pois\":true,\"postCategories\":true}}")); 3002} catch(e) { 3003console.log(e); 3004} 3005 try { 3006(function init(sectionDomId) { 3007 var $contactForm = $('#' + sectionDomId + ' .newsletter-signup__form'); 3008 $contactForm.find('.contact-form__reset').click(function (e) { 3009 e.preventDefault(); 3010 $(this).closest('form').removeClass('success').trigger("reset"); 3011 }); 3012 $contactForm.find('input[name="name"]').on("keyup", function () { 3013 if (this.value.replaceAll(/\d/g, "").trim() === "") { 3014 this.setCustomValidity("Please enter your name."); 3015 } else { 3016 this.setCustomValidity(""); 3017 } 3018 }); 3019 const form = $("#" + sectionDomId).find("form"); 3020 const redirectLink = $('#' + sectionDomId + ' .redirect-link'); 3021 form.on("reset", function () { 3022 redirectPage(redirectLink); 3023 }); 3024 function redirectPage(link) { 3025 if (link.length) { 3026 const rawHref = link.attr('href'); 3027 link.attr('href', setHttp(rawHref)); 3028 link[0].click(); 3029 } 3030 } 3031 function setHttp(link) { 3032 if (link.search(/^http[s]?\:\/\/|\//) == -1) { 3033 link = 'http://' + link; 3034 } 3035 return link; 3036 } 3037})('section-d4307d3d-7cb0-461b-9790-4cbaf461428c', 'undefined'); 3038} catch(e) { 3039console.log(e); 3040} 3041 try { 3042(function init(sectionDomId) {// please write all js here and use sectionDomId in selectors in order of DOM encapsulation 3043})('section-800648be-b1a1-4e21-a1a6-e04b85375975', 'undefined'); 3044} catch(e) { 3045console.log(e); 3046} 3047 try { 3048(function init(sectionDomId, options) { 3049 let section = null; 3050 switch (sectionDomId) { 3051 case 'NAVBAR': 3052 section = document.querySelector('body > nav, #global-navbar'); 3053 break; 3054 case 'FOOTER': 3055 section = document.querySelector('body > footer, #global-footer'); 3056 break; 3057 case 'SIDEMENU': 3058 section = document.querySelector('body > div.sidemenu, #global-sidemenu'); 3059 break; 3060 case 'CONTACT':
3061 section = document.querySelector('#modal-global-contact-us'); 3062 break; 3063 case 'MOBILE_CONTACT': 3064 section = document.querySelector('body > div.mobile-contact-wrapper, #global-mobile-contact'); 3065 break; 3066 case 'SUBSCRIBE': 3067 // Subscribe Not Implemented 3068 section = null; 3069 break; 3070 case 'ACCOUNT': 3071 // Account Not Implemented 3072 section = null; 3073 break; 3074 default: 3075 section = document.querySelector('#' + sectionDomId); 3076 } 3077 if (!section) { 3078 return; 3079 } 3080 var url = window.luxuryPresence.defaults.routerUrl; 3081 var companyId = window.luxuryPresence.defaults.companyId; 3082 var limit = options.limit || 8; 3083 if (typeof limit === 'string') { 3084 limit = parseInt(limit, 10) || 8; // this NaN protection also filters out 0 - this is expected 3085 } 3086 var templateSelector = options.templateSelector || '.jsIGTemplate'; 3087 var containerSelector = options.containerSelector || '.jsIGContainer'; 3088 var hasDataClass = options.hasDataClass || 'has-data'; 3089 var hideActivateMessage = options.hasDataClass || false; 3090 var payload = { 3091 companyId: companyId, 3092 limit: limit 3093 }; 3094 if (options.resourceId && typeof options.resourceId === 'string' && !options.resourceId.match(/^{{.*}}$/)) { 3095 payload.resourceId = options.resourceId; 3096 // Federated enum values are uppercase (AGENT/TEAM); element configs carry lowercase 3097 payload.resource = String(options.resource || 'agent').toUpperCase(); 3098 payload.fallbackToNoResource = options.fallbackToNoResource === 'true' || options.fallbackToNoResource === true; 3099 } 3100 var query = 'query InstagramFeed (\n' + ' $companyId: ID!\n' + ' $instagramAuthorizationId: ID\n' + ' $username: String\n' + (payload.resourceId ? '$resource: InstagramContentAuthResourceEnum\n $resourceId: ID\n $fallbackToNoResource: Boolean' : '') + ' $limit: Int\n' + ') {\n' + ' instagramContentFeed (\n' + ' companyId: $companyId\n' + ' instagramAuthorizationId: $instagramAuthorizationId\n' + ' username: $username\n' + (payload.resourceId ? 'resource: $resource\n resourceId: $resourceId\n fallbackToNoResource: $fallbackToNoResource' : '') + ' limit: $limit\n' + ' ) {\n' + ' active\n' + ' feedUrl\n' + ' username\n' + ' items {\n' + ' id\n' + ' caption\n' + ' commentsCount\n' + ' likeCount\n' + ' mediaType\n' + ' mediaUrl\n' + ' permalink\n' + ' shortcode\n' + ' thumbnailUrl\n' + ' timestamp\n' + ' username\n' + ' }\n' + ' }\n' + '}\n'; 3101 var templateHTML = section.querySelector(templateSelector)?.innerHTML || ''; 3102 var template = Handlebars.compile(templateHTML); 3103 var container = section.querySelector(containerSelector); 3104 if (options.variables) { 3105 Object.keys(options.variables).forEach(function (key) { 3106 if (options.variables.hasOwnProperty(key) && (typeof options.variables[key] !== 'string' || !options.variables[key].match(/^{{.*}}$/))) { 3107 payload[key] = options.variables[key]; 3108 } 3109 }); 3110 } 3111 function getData() { 3112 var feed = { 3113 error: true 3114 }; 3115 if (payload.companyId == null || payload.companyId === '') { 3116 // instagramContentFeed requires companyId (ID!) â nothing to fetch without it. 3117 // Checked after the options.variables merge, which may override the default. 3118 // Deferred so element listeners (attached after this template runs) still receive it. 3119 setTimeout(function () { 3120 section.dispatchEvent(new CustomEvent('ig-data', { 3121 detail: feed 3122 })); 3123 }, 0); 3124 return; 3125 } 3126 superagent.post(url + '/graphql').send({ 3127 query: query, 3128 variables: payload 3129 }).then(res => { 3130 try { 3131 if (!res.body.errors) { 3132 feed = res.body.data.instagramContentFeed; 3133 if (!feed.active) { 3134 if (!hideActivateMessage && sectionDomId === 'section-temp' && container) { 3135 if (payload.resourceId) { 3136 container.innerHTML = '<div style="text-align: center">Instagram account is not connected to selected ' + payload.resource + '.<br /> Connect it on the ' + payload.resource + ' page</div>'; 3137 } else { 3138 container.innerHTML = '<div style="text-align: center">Instagram account is not connected.<br /> Connect it on <a href="/profile">Profile page</a></div>'; 3139 } 3140 } 3141 } else { 3142 if (feed.items.length) { 3143 if (hasDataClass) { 3144 section.classList.add(hasDataClass); 3145 } 3146 const feedName = feed.username; 3147 section.querySelectorAll('.jsIGLink').forEach(link => link.setAttribute('href', feed.feedUrl)); 3148 section.querySelectorAll('.jsIGName').forEach(name => { 3149 name.textContent = '@' + feedName; 3150 name.setAttribute('title', '@' + feedName); 3151 }); 3152 if (container && template) { 3153 container.innerHTML = template(feed); 3154 } 3155 } 3156 } 3157 } 3158 } catch (e) {} 3159 section.dispatchEvent(new CustomEvent('ig-data', { 3160 detail: feed 3161 })); 3162 }).catch(e => { 3163 console.log('err', e); 3164 section.dispatchEvent(new CustomEvent('ig-data', { 3165 detail: feed 3166 })); 3167 }); 3168 } 3169 getData(); 3170})('section-aab683fa-2e6b-49e8-9307-d1c895d542e3', JSON.parse("{\"limit\":33,\"resource\":\"agent\",\"resourceId\":\"\",\"fallbackToNoResource\":\"true\",\"companyId\":\"bda25091-f9eb-4ebc-b64e-6a6cfd5df967\",\"usePageResource\":false,\"sectionIndex\":6,\"useRouterApi\":false,\"routerApiAux\":{\"testimonials\":true,\"agents\":false,\"neighborhoods\":false,\"developments\":false,\"properties\":false,\"posts\":true,\"pressReleases\":true,\"offices\":true,\"teams\":true,\"pois\":true,\"postCategories\":true}}")); 3171} catch(e) { 3172console.log(e); 3173} 3174 try { 3175(function init(sectionDomId) { 3176 const $section = $('#' + sectionDomId); 3177 var templateHTML = $section.find('.jsIGItem').html(); 3178 var itemTemplate = templateHTML && Handlebars.compile(templateHTML); 3179 const $container = $section.find('.ig-feed-feed'); 3180 const $topPrev = $section.find('.top-nav-prev'); 3181 const $topNext = $section.find('.top-nav-next'); 3182 const $bottomPrev = $section.find('.bottom-nav-prev'); 3183 const $bottomNext = $section.find('.bottom-nav-next'); 3184 let limit = 33; 3185 try { 3186 limit = parseInt($container[0].dataset['limit']); 3187 } catch (e) {} 3188 if (!limit) { 3189 limit = 33; 3190 } 3191 let igFeed = {}; 3192 let usedWidth = 0; 3193 let slider = null; 3194 $section.on('ig-data', function (ev, feed) { 3195 feed = ev.detail || feed; 3196 igFeed = feed; 3197 if (feed.active && feed.items.length) { 3198 buildSlider(); 3199 } 3200 }); 3201 $(window).on('resize.lpui-auto-clean', onResize); 3202 let timer = null; 3203 function onResize() { 3204 clearTimeout(timer); 3205 timer = window.setTimeout(buildSlider, 50); 3206 } 3207 function getLayout(w, n) { 3208 if (w > 1100) { 3209 if (n > 7) { 3210 return { 3211 type: 'type1', 3212 single: 1, 3213 multi: n, 3214 slides: 3, 3215 slider: n > 9 3216 }; 3217 } 3218 if (n > 5) { 3219 return { 3220 type: 'type1', 3221 single: 2, 3222 multi: n, 3223 slides: 3, 3224 slider: false 3225 }; 3226 } 3227 return { 3228 type: 'type1', 3229 single: n, 3230 multi: n, 3231 slides: 3, 3232 slider: n > 3 3233 }; 3234 } else if (w > 880) { 3235 if (n > 4) { 3236 return { 3237 type: 'type2', 3238 single: 1, 3239 multi: n, 3240 slides: 2.5, 3241 slider: n > 7 3242 }; 3243 } 3244 return { 3245 type: 'type1', 3246 single: n, 3247 multi: n, 3248 slides: 3, 3249 slider: n > 3 3250 }; 3251 } else if (w > 767) { 3252 if (n > 4) { 3253 return { 3254 type: 'type3', 3255 single: 1, 3256 multi: n, 3257 slides: 2, 3258 slider: n > 5 3259 }; 3260 } 3261 return { 3262 type: 'type4', 3263 single: n, 3264 multi: n, 3265 slides: 2, 3266 slider: n > 2 3267 }; 3268 } else if (w > 460) { 3269 return { 3270 type: 'type4', 3271 single: n, 3272 multi: n, 3273 slides: 2, 3274 slider: n > 2 3275 }; 3276 } 3277 return { 3278 type: 'type5', 3279 single: n, 3280 multi: n, 3281 slides: 1, 3282 slider: n > 1 3283 }; 3284 } 3285 function ensureClass($el, className) { 3286 if ($el.hasClass(className)) { 3287 return; 3288 } 3289 $el.addClass(className); 3290 } 3291 function makeSquare($el) { 3292 const el = $el[0]; 3293 el.style.width = ''; 3294 el.style.height = ''; 3295 const rect = el.getBoundingClientRect(); 3296 if (rect.width !== rect.height) { 3297 el.style.width = rect.height + 'px'; 3298 } 3299 } 3300 function buildSlider() { 3301 const cWidth = $container[0].getBoundingClientRect().width; 3302 if (cWidth === usedWidth) { 3303 return; 3304 } 3305 $container.empty();
3306 slider = $('<div class="ig-feed-slider"></div>'); 3307 const items = igFeed.items.slice(0, limit); 3308 const layout = getLayout(cWidth, items.length); 3309 let i = 0; 3310 let slide = null; 3311 while (i < layout.single) { 3312 slide = $(`<div class="slide-single ${layout.type}"></div>`).append(itemTemplate(items[i])).appendTo(slider); 3313 i++; 3314 } 3315 while (i < layout.multi) { 3316 slide = $(`<div class="slide-multi ${layout.type}"></div>`).appendTo(slider); 3317 let slideContent = $('<div class="slide-multi-content"></div>').appendTo(slide); 3318 const lim = i + 4; 3319 while (i < lim && i < layout.multi) { 3320 slideContent.append(itemTemplate(items[i])); 3321 i++; 3322 } 3323 } 3324 $container.append(slider); 3325 if (layout.slider) { 3326 $topPrev.removeClass('hidden-control'); 3327 $topNext.removeClass('hidden-control'); 3328 $bottomPrev.removeClass('hidden-control'); 3329 $bottomNext.removeClass('hidden-control'); 3330 let prev, next; 3331 if ($bottomPrev.parent()[0].getBoundingClientRect().width) { 3332 prev = $bottomPrev; 3333 next = $bottomNext; 3334 } else { 3335 prev = $topPrev; 3336 next = $topNext; 3337 makeSquare($topPrev); 3338 makeSquare($topNext); 3339 } 3340 slider.children().each(function () { 3341 this.style.width = this.getBoundingClientRect().width + 'px'; 3342 }); 3343 slider.slick({ 3344 dots: false, 3345 prevArrow: prev, 3346 nextArrow: next, 3347 slidesToScroll: 1, 3348 infinite: false, 3349 slidesToShow: layout.slides 3350 }); 3351 } else { 3352 ensureClass($topPrev, 'hidden-control'); 3353 ensureClass($topNext, 'hidden-control'); 3354 ensureClass($bottomPrev, 'hidden-control'); 3355 ensureClass($bottomNext, 'hidden-control'); 3356 } 3357 } 3358})('section-aab683fa-2e6b-49e8-9307-d1c895d542e3', JSON.parse("{\"resource\":\"agent\",\"useRouterApi\":false,\"companyId\":\"bda25091-f9eb-4ebc-b64e-6a6cfd5df967\",\"usePageResource\":false,\"sectionIndex\":6,\"routerApiAux\":{\"testimonials\":true,\"agents\":false,\"neighborhoods\":false,\"developments\":false,\"properties\":false,\"posts\":true,\"pressReleases\":true,\"offices\":true,\"teams\":true,\"pois\":true,\"postCategories\":true}}")); 3359} catch(e) { 3360console.log(e); 3361} 3362 3363 var { body } = document; 3364 var globalNav = body.querySelector(':scope > nav'); 3365 var globalSideMenu = body.querySelector(':scope > div.sidemenu'); 3366 3367 document.querySelectorAll('body > .modal .close').forEach(modalCloseBtn => { 3368 modalCloseBtn.addEventListener('click', function() { 3369 window.lpUI.hideClosestModal(modalCloseBtn); 3370 }); 3371 }); 3372 3373 window.addEventListener('click', function() { 3374 document.querySelectorAll('.share-popup').forEach(sharedPopup => { 3375 sharedPopup.style.display = 'none' ; 3376 }); 3377 }); 3378 3379 /* Misc Partials / Addons */ 3380 function initWOW() { 3381 if (wow) { 3382 wow.init(); 3383 wow.scrollHandler(); 3384 setTimeout(function () { 3385 const wowHideStyle = document.getElementById('wow-hide-elements'); 3386 if(wowHideStyle) { 3387 wowHideStyle.disabled = true; 3388 } 3389 }, 1); 3390 } 3391 } 3392 3393 const wowHideElements = document.getElementById('wow-hide-elements'); 3394 if (wowHideElements) { 3395 wowHideElements.disabled = false; 3396 } 3397 3398 initWOW(); 3399 3400 /* Generic Navbar Handling */ 3401 globalNav?.querySelectorAll('.hamburger-component').forEach(hamburgerComponent => { 3402 hamburgerComponent.addEventListener('click', function() { 3403 window.lpUI.sideMenuToggle(); 3404 }); 3405 }); 3406 globalSideMenu?.querySelectorAll('.toggle').forEach(toggleEl => { 3407 toggleEl.addEventListener('click', function() { 3408 window.lpUI.sideMenuToggle(); 3409 }); 3410 }); 3411 3412 document.querySelectorAll('body > nav .sub-nav-container > a, body > div.sidemenu .sub-nav-container > a').forEach(linkEl => { 3413 linkEl.addEventListener('click', function(e) { 3414 e.preventDefault(); 3415 e.stopPropagation();
3416 var subNav = linkEl.parentElement.querySelector(':scope > .sub-nav'); 3417 if (subNav && subNav.classList.contains('visible')){ 3418 subNav.classList.remove('visible'); 3419 } else { 3420 globalNav?.querySelectorAll('.sub-nav-container .sub-nav').forEach(globalSubNav => { 3421 globalSubNav.classList.remove('visible'); 3422 }); 3423 globalSideMenu?.querySelectorAll('.sub-nav').forEach(sideMenuSubNav => { 3424 sideMenuSubNav.classList.remove('visible'); 3425 }); 3426 subNav?.classList.add('visible'); 3427 } 3428 }); 3429 }); 3430 window.addEventListener('click', function() { 3431 document.querySelectorAll('nav .sub-nav.visible, .sidemenu .sub-nav.visible').forEach(subNavEl => { 3432 subNavEl.classList.remove('visible'); 3433 }); 3434 }); 3435 3436 } 3437 3438 document.addEventListener('DOMContentLoaded', lpGlobalInit); 3439 3440 </script>
3440 3441 3442
3442<script type="module"> 3443 function selectorExists(selector) { 3444 return document.querySelector(selector) !== null; 3445 } 3446 3447 // Function to initialize the third-party library 3448 function initParoller(selector = '.my-paroller') { 3449 var $parollerElements = $(selector); 3450 if ($parollerElements.length > 0 && typeof $parollerElements.paroller === 'function') { 3451 $parollerElements.paroller(); 3452 } 3453 } 3454 3455 const parollerSelector = '.my-paroller'; 3456 3457 if (selectorExists(parollerSelector)) { 3458 window.luxuryPresence.libs.loadJs(window.luxuryPresence.libs.jsLibsMap.paroller.jsSrc, function() { 3459 initParoller(parollerSelector); 3460 window.luxuryPresence.libs.jsLibsMap.paroller.isLoaded = true; 3461 }); 3462 } 3463 </script>
3463 3464 3465 <!-- Google Tag Manager (noscript) -->
vendor: 80 bytes, lines 3465-3466
3465 3466 <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
3466GTM-T9SFQGHZ
vendor: 107 bytes, lines 3466-3468
3466" 3467 height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> 3468
3468<!-- End Google Tag Manager --> 3469 3470
3470<script 3471 src="https://cdn.luxurypresence.com/scripts/a11y-widget/latest/widget.js" 3472 data-website-id="d1c655e7-3a6b-4818-8bf8-e4b0b6f106a0" 3473 3474 defer></script>
vendor: 1 bytes, line 3474
3474
3475<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"d2a8f4b3d65944edb8fcd6ffce49ee5e","spa":2}' crossorigin="anonymous"></script>
vendor: 1 bytes, line 3475
3475
3476<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a46a7a1228b6f862',t:'MTc5MTM1MDYzOA=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
3476</body> 3477</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.