PageSourceSearch

https://teresacowartteam.com/blog

html teresacowartteam.com collected 2026-10-09 03:46:09 UTC 354,646 bytes, 4,428 lines download raw bytes

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>Savannah GA Real Estate & Community Blog | Teresa Cowart Team</title>
10        <meta property="og:title" content="Savannah GA Real Estate &amp; Community Blog | Teresa Cowart Team">
11        <meta name="twitter:title" content="Savannah GA Real Estate &amp; Community Blog | Teresa Cowart Team">
12        <meta name="description" content="Read articles covering real estate tips, local trends, homeownership advice, and market updates. Contact us and get your free consultation starting today!">
13        <meta property="og:description" content="Read articles covering real estate tips, local trends, homeownership advice, and market updates. Contact us and get your free consultation starting today!">
14        <meta name="twitter:description" content="Read articles covering real estate tips, local trends, homeownership advice, and market updates. Contact us and get your free consultation starting today!">
15        <meta property="og:image" content="https://media-production.lp-cdn.com/cdn-cgi/image/format&#x3D;auto,quality&#x3D;85/https://media-production.lp-cdn.com/media/8fd05e8e-0f2d-4daf-a269-315700ae29c8">
16        <meta name="twitter:image" content="https://media-production.lp-cdn.com/cdn-cgi/image/format&#x3D;auto,quality&#x3D;85/https://media-production.lp-cdn.com/media/8fd05e8e-0f2d-4daf-a269-315700ae29c8">
17        <meta property="og:url" content="https://teresacowartteam.com/blog">
18        <link rel="canonical" href="https://teresacowartteam.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    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Playfair%20Display:400,500,600,700,800,900,400i,500i,600i,700i,800i,900i"><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Work%20Sans:100,200,300,400,500,600,700,800,900,100i,200i,300i,400i,500i,600i,700i,800i,900i">
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:'Playfair Display',serif;--global-primary-font-family-short:Playfair Display;--global-secondary-font-family:'Work Sans',sans-serif;--global-secondary-font-family-short:Work Sans;--global-body-padding:0px;--global-background-color:#fff;--global-body-font-size:16px;--global-h1-font-size:56px;--global-h2-font-size:36px;--global-h3-font-size:26px;--global-h4-font-size:24px;--global-h5-font-size:12px;--global-h6-font-size:32px;--global-section-padding:96px;}@media (max-width: 768px){:root{--global-section-padding:64px;}}body{padding:0px;background-color:#fff;font-family:'Work Sans',sans-serif;font-size:16px;}@media (min-width: 768px){body{padding:0px 0px 0px 0px;}}h1,h2,h3,h4,h5,h6,button{font-family:'Playfair Display',serif;}h1{font-size:56px;}h2{font-size:36px;}h3{font-size:26px;}h4{font-size:24px;}h5{font-size:12px;}h6{font-size:32px;}</style>
30        <link rel="stylesheet" type="text/css" href="https://styles.luxurypresence.com/visionary/index.css" />
31    <style id="website-css">body>div.mobile-contact-wrapper .mobile-contact.with-search div.buttons-holder{bottom:150px;}@media only screen and (max-width: 768px){iframe[name='widgetCta']{bottom:55px!important;right:15px!important;}}iframe[name="widgetCta"]{bottom:70px!important;right:15px!important;}body>div.mobile-contact-wrapper .connect-btn{border:2px solid #64b1af!important;}body>div.mobile-contact-wrapper{z-index:9999!important;}body>div.mobile-contact-wrapper .mobile-contact{z-index:9999!important;}a{-webkit-transition:all 0.3s;transition:all 0.3s;}#modal-global-contact-us .lp-a a{color:#808080!important;}#modal-global-contact-us .lp-close-icon{-webkit-filter:invert(0)!important;filter:invert(0)!important;color:#FFF!important;}@media (min-width: 1024px){#modal-global-contact-us .contact-form-modal__close:after{color:#FFF!important;}}@media only screen and (max-width: 768px){#global-sidemenu ul.lp-socials{padding-bottom:30px;}#global-footer .footer-logos-row{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;}}[class*="__title"],[class*="__heading"],[class*="-title"],[class*="__link"],[class*="__sub-nav-link"],.lp-h1,.lp-h2,.lp-h3,.lp-h4,.lp-h5{text-transform:uppercase;}[class*="__description"],[class*="-description"],[class*="__subtitle"],[class*="-subtitle"],[class*="__desc"]{text-transform:none;}div#global-sidemenu.sidemenu a,nav#global-navbar a{text-transform:uppercase;}div#global-sidemenu.sidemenu button,nav#global-navbar button{text-transform:uppercase;}:root{--global-h4-font-size:32px;--global-h5-font-size:24px;--global-h6-font-size:20px;--lp-color-primary-accent:#1CB8E3;--lp-color-primary-accent-dark:#1CB8E3;--lp-color-primary-accent-light:#ccc;}footer#global-footer .footer-bottom-row{margin-bottom:40px;}#global-footer>div>div.footer-bottom-row>img{max-width:100px!important;}body>div.mobile-contact-wrapper div.mobile-contact{bottom:150px;}@media only screen and (max-width: 768px){iframe[name='widgetCta']{bottom:55px!important;right:15px!important;}}iframe[name="widgetCta"]{bottom:70px!important;right:15px!important;}body>div.mobile-contact-wrapper{z-index:9999!important;}body>div.mobile-contact-wrapper .mobile-contact{z-index:9999!important;}.lp-h1,.lp-h2,.lp-h3{font-variation-settings:'opsz' 44,'GRAD' 0,'slnt' 0,'XTRA' 510,'XOPQ' 96,'YOPQ' 40,'YTLC' 540,'YTUC' 712,'YTAS' 750,'YTDE' -220,'YTFI' 738;}.watermark{font-variation-settings:'GRAD' 0,'slnt' 0,'XTRA' 511,'XOPQ' 96,'YOPQ' 50,'YTLC' 537,'YTUC' 712,'YTAS' 750,'YTDE' -221,'YTFI' 738,'opsz' 44;}@media only screen and (max-width:768px){ul.lp-socials{-webkit-box-pack:center!important;-ms-flex-pack:center!important;
31-webkit-justify-content:center!important;justify-content:center!important;}}#global-footer .footer-disclaimer a{color:#000!important;-webkit-text-decoration:underline!important;text-decoration:underline!important;text-decoration-color:#ccc!important;}#global-footer .footer-disclaimer a:hover{text-decoration-color:#1CB8E3!important;}h1,.redesign h1,.redesign .h1,.lp-h1,h2,.redesign h2,.redesign .serif,.lp-h2,h3,.redesign h3,.lp-h3,h4,.redesign .h4,.redesign h4,.lp-h4,h5,.redesign .h5,.redesign h5,.lp-h5,h6{text-transform:uppercase;letter-spacing:4px;}.lp-text--pretitle,.stats-list-title-group__pre-title,.opening-search__pre-title,.custom-intro__pre-title{letter-spacing:3px;font-size:14px;}.lp-a .link:hover,.lp-a a:hover{text-decoration-color:#1CB8E3;}#global-navbar .header-container .header-navigation__link:before{background-color:#1CB8E3!important;}#global-navbar .header-container .header-navigation__link{text-transform:uppercase;letter-spacing:1px;}#global-navbar .header-container .header-navigation__link:after{background-color:#1CB8E3;}#global-navbar .header-container .header-navigation__sub-nav{padding:0;}#global-navbar .header-container .header-navigation__sub-nav li{background:#fff;}#global-navbar .header-container .header-navigation__sub-nav li:hover{background-color:#d5e0d9;}#global-navbar .header-container .header-navigation__sub-nav li:hover a{color:#1a1a1a;}#global-navbar .header-container .header-navigation__sub-nav .header-navigation__sub-nav-link{color:#000;text-transform:uppercase;letter-spacing:1px;padding:1rem;}#global-navbar .header-container .header-search-btn{background-color:#1CB8E3;border-color:#1CB8E3;}#global-navbar .header-container .header-search-btn:after{background-color:#fff;}#global-navbar .header-container .header-search-btn:hover{background-color:transparent;}#global-navbar .header-container .header-search-btn:hover:after{background-color:#1CB8E3;}#global-navbar .header-container .header-hamburger-btn:empty{border-color:#1CB8E3;background-color:#1CB8E3;}#global-navbar .header-container .header-hamburger-btn:empty:before,#global-navbar .header-container .header-hamburger-btn:empty:after{background-color:#fff;}#global-navbar .header-container .header-hamburger-btn:empty:hover{background-color:transparent;}#global-navbar .header-container .header-hamburger-btn:empty:hover:before,#global-navbar .header-container .header-hamburger-btn:empty:hover:after{background-color:#1CB8E3;}#global-navbar .header.scroll{background-color:rgba(255, 255, 255, 1)!important;color:#000!important;}.seller-header__logo{height:90px;}.seller-header__container{height:100px;}#global-sidemenu .sidemenu-close{border:1px solid #000;}#global-sidemenu .sidemenu-close:hover{background-color:#1CB8E3;border-color:#1CB8E3;}#global-sidemenu .sidemenu-close:hover:after{--iconColor:#fff;}#global-sidemenu .sidemenu-navigation__link,#global-sidemenu .sidemenu-navigation-sub-nav__link{text-transform:uppercase;letter-spacing:1px;-webkit-line-clamp:unset;-webkit-box-orient:unset;}#global-sidemenu .sidemenu-navigation__link{font-size:21px;}#global-sidemenu .sidemenu-navigation__link:hover{color:#1CB8E3;opacity:0.75;}#global-sidemenu .sidemenu-navigation__link:before{font-size:0;}#global-sidemenu .sidemenu__col-title{font-size:18px;font-weight:400;letter-spacing:4px;opacity:1;}#global-sidemenu .sidemenu__col-description p{text-transform:uppercase;}#global-sidemenu .lp-a a{text-transform:uppercase;letter-spacing:1px;}#global-sidemenu .lp-a a:hover{text-decoration-color:#1CB8E3;color:#1CB8E3;}#global-footer .footer-logos-row{margin-bottom:40px;}
31#global-footer .footer__section-title{font-size:var(--lp-h4-font-size);letter-spacing:4px;}#global-footer .footer__col-title{font-size:18px;font-weight:400;letter-spacing:4px;opacity:1;}#global-footer .footer__col-description{text-transform:uppercase;}@media (min-width: 769px){#global-footer .footer__col-description{max-width:30ch;}}@media (max-width: 768px){#global-footer .footer__section-content{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;gap:35px;}}@media (max-width: 1024px){#global-footer .footer-navigation{-ms-grid-auto-flow:unset;grid-auto-flow:unset;max-width:100%;min-width:100%;}}#global-footer .lp-a a{text-transform:uppercase;letter-spacing:1px;}#global-footer .lp-a a:hover{text-decoration-color:#1CB8E3;color:#1CB8E3;}#modal-global-contact-us .contact-form-modal-details__title{max-width:100%;}#modal-global-contact-us .contact-form-modal-agent__contact{max-width:100%;}#modal-global-contact-us .contact-form-modal-agent__name,#modal-global-contact-us .lp-pre-line{text-transform:uppercase;letter-spacing:1px;}#modal-global-contact-us .lp-label{font-size:14px;font-weight:500;text-transform:uppercase;}#modal-global-contact-us .lp-a a{text-transform:uppercase;letter-spacing:1px;color:#000;}#modal-global-contact-us .lp-a a:hover{color:#1CB8E3;text-decoration-color:#1CB8E3;}@media (max-width: 1024px){#modal-global-contact-us >.lp-close{display:block;top:3vh;color:#fff;}}@media (max-width: 1024px){#modal-global-contact-us .contact-form-modal__close-container{display:none;}}@media (min-width: 1024px){#modal-global-contact-us .contact-form-modal__close:after{color:#000;}}@media (max-width: 1980px){#global-mobile-contact .contact-form{--padding:0;}}#global-mobile-contact .contact-form .contact-form__container{padding:0 0;}@media(max-width: 767px){footer#global-footer .footer-logo{max-height:90px;max-width:280px;}}@media (max-width: 768px){.header{--linkColor:var(--textColor, #161515);--subLinkColor:var(--lp-color-primary-1, #fff);--navBgColor:var(--backgroundColor, #fff);background-color:var(--navBgColor)!important;color:var(--linkColor)!important;}}#global-footer .lp-a a{cursor:pointer;}#modal-global-contact-us .lp-input:not(:placeholder-shown){color:#000!important;}@media (min-width: 481px){.rich-lightbox__nav-link.active{color:var(--lp-color-primary-5);}.rich-lightbox__nav-link:hover{--lp-color-primary-accent-dark:#fff;--lp-color-primary-1:#1CB8E3;}}#global-mobile-contact .contact-form .contact-form__container{border:none;}@media (min-width: 769px){#global-footer .footer__col-description{max-width:50ch;}}.footer__col-description{max-width:50ch;}@media (max-width: 768px){.footer__col-content{max-width:calc(100% - 8px);}}.header-contact-btn{font-size:0;}.header-contact-btn:after{content:"(912) 525-0900";font-size:12px;}.header-contact-btn:hover:after{color:#1CB8E3!important;}@media only screen and (max-width:768px){.contact-form-modal__close:after{height:25px;width:20px;--iconColor:#1CB8E3;}}@media only screen and (min-width:769px){.contact-form-modal__close:after{height:30px;width:40px;}}@media only screen and (min-width:769px){body.page-sellers .hoverable-section{padding-bottom:0;padding-top:0;}}@media only screen and (max-width:768px){body.page-sellers .hoverable-section{padding-bottom:80px;padding-top:80px;}}@media only screen and (min-width:769px){body.page-buyers .hoverable-section{padding-bottom:0;padding-top:0;}}@media only screen and (max-width:768px){body.page-buyers .hoverable-section{padding-bottom:80px;padding-top:80px;}}#global-footer .footer-logo{max-height:70px;}.page-concierge-auctions .custom-intro__title:after{content:"";background-image:url(https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=100,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/500b4aba-e15b-4ee8-b678-f32770cbc1f3);height:150px;width:500px;max-width:100%;-webkit-filter:invert(1);filter:invert(1);-webkit-background-size:contain;background-size:contain;background-repeat:no-repeat;display:block;background-position-x:center;}@media only screen and (max-width:768px){.page-concierge-auctions .custom-intro__title:after{height:100px;}}.page-concierge-auctions .custom-intro__title{font-size:0;}.custom-intro__scroll-btn{border-color:#1CB8E3;background-color:#1CB8E3;}.custom-intro__scroll-btn:after{background-color:#fff;}.custom-intro__scroll-btn:hover{background-color:transparent;}
31.custom-intro__scroll-btn:hover:after{background-color:#1CB8E3;}@media (max-width: 768px){.sidemenu-close{top:18px;}.sidemenu-nav-holder{gap:28px;}ul.footer-navigation{gap:1rem;}}h1,.redesign h1,.redesign .h1,.lp-h1,h2,.redesign h2,.redesign .serif,.lp-h2,h3,.redesign h3,.lp-h3,h4,.redesign .h4,.redesign h4,.lp-h4,h5,.redesign .h5,.redesign h5,.lp-h5,h6{letter-spacing:0;}@media (min-width: 768px){.header-logo{height:80px;}}h5.footer__section-title,p.footer__col-title,#modal-global-contact-us .contact-form-modal-details__title,#global-mobile-contact .contact-form .contact-form__container h3{color:#1CB8E3;}body>div.mobile-contact-wrapper .contact-form__item .lp-input{color:#1a1a1a;}@media (max-width: 1024px){.lp-close-icon{-webkit-filter:invert(1);filter:invert(1);}}</style>
32    <style id="wow-hide-elements">.wow{visibility:hidden!important}</style>
33        <style id="page-css">
34            #section-c3f2b87c-69b5-446c-a7d3-6ef3300b8597{color:#c0c0c0;--fontColor:#c0c0c0;--fontColor_H:0;--fontColor_S:0%;--fontColor_L:75%;--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;--gradient-color:var(--overlay-color, rgba(0, 0, 0, 0.00));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/8fd05e8e-0f2d-4daf-a269-315700ae29c8');background-repeat:no-repeat;-webkit-background-position:center;background-position:center;-webkit-background-size:cover;background-size:cover;}@media (min-width: 960px) and (orientation: landscape){#section-c3f2b87c-69b5-446c-a7d3-6ef3300b8597{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/8fd05e8e-0f2d-4daf-a269-315700ae29c8');}}@media (min-width: 1280px) and (orientation: landscape){#section-c3f2b87c-69b5-446c-a7d3-6ef3300b8597{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/8fd05e8e-0f2d-4daf-a269-315700ae29c8');}}@media (min-width: 1920px) and (orientation: landscape){#section-c3f2b87c-69b5-446c-a7d3-6ef3300b8597{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/8fd05e8e-0f2d-4daf-a269-315700ae29c8');}}@media (min-width: 2560px) and (orientation: landscape){#section-c3f2b87c-69b5-446c-a7d3-6ef3300b8597{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/8fd05e8e-0f2d-4daf-a269-315700ae29c8');}}#section-7340826b-bdad-4f4c-95bc-421ee1719d85{color:#1A1A1A;--fontColor:#1A1A1A;--fontColor_H:0;--fontColor_S:0%;--fontColor_L:10%;--fontColor_A:1;--fontColor_darkenDir:1;--bgColor:#FFFFFF;--bgColor_H:0;--bgColor_S:0%;--bgColor_L:100%;--bgColor_A:1;--bgColor_darkenDir:-1;--section-padding-top:calc(4 / 4 * var(--global-section-padding));--section-padding-bottom:calc(4 / 4 * var(--global-section-padding));background-color:#FFFFFF;}#section-7340826b-bdad-4f4c-95bc-421ee1719d85 .paginationjs-next a:hover:after,#section-7340826b-bdad-4f4c-95bc-421ee1719d85 .paginationjs-prev a:hover:after{background-color:#fff!important;}@media (max-width: 560px){#section-7340826b-bdad-4f4c-95bc-421ee1719d85 .lp-pagination.pagination-container ul li,#section-7340826b-bdad-4f4c-95bc-421ee1719d85 .pagination-container ul li{margin:0 2px!important;}}#section-7340826b-bdad-4f4c-95bc-421ee1719d85 h1{color:#1CB8E3;}#section-7340826b-bdad-4f4c-95bc-421ee1719d85 h2{color:#1CB8E3;}#section-7340826b-bdad-4f4c-95bc-421ee1719d85 h3{color:#1CB8E3;}#section-7340826b-bdad-4f4c-95bc-421ee1719d85 p{color:#1A1A1A;}#section-7340826b-bdad-4f4c-95bc-421ee1719d85>div:last-child{padding-top:calc(4 / 4 * var(--global-section-padding))!important;padding-bottom:calc(4 / 4 * var(--global-section-padding))!important;}#section-f6ab0e0a-1d17-477f-be39-f70a71f91f94{color:#fff;--fontColor:#fff;--fontColor_H:0;--fontColor_S:0%;--fontColor_L:100%;--fontColor_A:1;--fontColor_darkenDir:-1;--bgColor:#ffffff;--bgColor_H:0;--bgColor_S:0%;--bgColor_L:100%;--bgColor_A:1;--bgColor_darkenDir:-1;--section-padding-top:calc(4 / 4 * var(--global-section-padding));--section-padding-bottom:calc(4 / 4 * var(--global-section-padding));background-color:#ffffff;--gradient-color:var(--overlay-color, rgba(0, 0, 0, 0.6));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/4e7c558d-4083-4f16-af08-f91c42ec08a5');background-repeat:no-repeat;-webkit-background-position:center;background-position:center;-webkit-background-size:cover;background-size:cover;}#section-f6ab0e0a-1d17-477f-be39-f70a71f91f94 .lp-input-icon:after{--iconColor:#1CB8E3;}#section-f6ab0e0a-1d17-477f-be39-f70a71f91f94 .lp-input:not(:placeholder-shown){color:#1CB8E3;}@media only screen and (min-width: 1300px){#section-f6ab0e0a-1d17-477f-be39-f70a71f91f94{background-attachment:fixed;-webkit-background-position:top left;background-position:top left;background-repeat:no-repeat;-webkit-background-size:cover;background-size:cover;}}
34#section-f6ab0e0a-1d17-477f-be39-f70a71f91f94 .newsletter-contact-cta__wrapper{-webkit-box-pack:center!important;-ms-flex-pack:center!important;-webkit-justify-content:center!important;justify-content:center!important;}#section-f6ab0e0a-1d17-477f-be39-f70a71f91f94>div:last-child{padding-top:calc(4 / 4 * var(--global-section-padding))!important;padding-bottom:calc(4 / 4 * var(--global-section-padding))!important;}@media (min-width: 960px) and (orientation: landscape){#section-f6ab0e0a-1d17-477f-be39-f70a71f91f94{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/4e7c558d-4083-4f16-af08-f91c42ec08a5');}}@media (min-width: 1280px) and (orientation: landscape){#section-f6ab0e0a-1d17-477f-be39-f70a71f91f94{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/4e7c558d-4083-4f16-af08-f91c42ec08a5');}}@media (min-width: 1920px) and (orientation: landscape){#section-f6ab0e0a-1d17-477f-be39-f70a71f91f94{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/4e7c558d-4083-4f16-af08-f91c42ec08a5');}}@media (min-width: 2560px) and (orientation: landscape){#section-f6ab0e0a-1d17-477f-be39-f70a71f91f94{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/4e7c558d-4083-4f16-af08-f91c42ec08a5');}}#section-d0bb8190-fa80-4a3a-b56c-b37146df7e09{color:#1a1a1a;--fontColor:#1a1a1a;--fontColor_H:0;--fontColor_S:0%;--fontColor_L:10%;--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-d0bb8190-fa80-4a3a-b56c-b37146df7e09 .instagram-feed__title-group .instagram-feed__icon:after{background-color:#1CB8E3;}@media only screen and (max-width: 767px){#section-d0bb8190-fa80-4a3a-b56c-b37146df7e09 .instagram-feed__link,#section-d0bb8190-fa80-4a3a-b56c-b37146df7e09 .instagram-feed__link:hover,#section-d0bb8190-fa80-4a3a-b56c-b37146df7e09 .instagram-feed__link:visited{font-size:24px!important;}}body>div.sidemenu{background-color:rgba(201, 238, 248, 1);color:rgba(26, 26, 26, 1);--fontColor:rgba(26, 26, 26, 1);--fontColor_H:0;--fontColor_S:0%;--fontColor_L:10%;--fontColor_A:1;--fontColor_darkenDir:1;--bgColor:rgba(201, 238, 248, 1);--bgColor_H:193;--bgColor_S:77%;--bgColor_L:88%;--bgColor_A:1;--bgColor_darkenDir:-1;}footer{background-color:rgba(255, 255, 255, 1);color:rgba(26, 26, 26, 1);--fontColor:rgba(26, 26, 26, 1);--fontColor_H:0;--fontColor_S:0%;--fontColor_L:10%;--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;}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:rgba(26, 26, 26, 1)!important;}.hyperlink-style-1:hover{color:#1CB8E3!important;}.button-style-1{color:rgba(255, 255, 255, 1)!important;background-color:#1CB8E3!important;border-color:#1CB8E3!important;}.button-style-1:hover{color:#1CB8E3!important;background-color:rgba(145, 102, 72, 0)!important;border-color:#1CB8E3!important;}.pagination-style-1 li a{color:#1CB8E3!important;background-color:rgba(177, 132, 99, 0)!important;border-color:#1CB8E3!important;}.pagination-style-1 li a:hover{color:rgba(255, 255, 255, 1)!important;background-color:#1CB8E3!important;border-color:#1CB8E3!important;}.pagination-style-1 li.active a{color:rgba(255, 255, 255, 1)!important;background-color:#1CB8E3!important;border-color:#1CB8E3!important;}.social_icons-style-1 a{border-color:#1CB8E3!important;background-color:#1CB8E3!important;color:rgba(255, 255, 255, 1)!important;}.social_icons-style-1 a:hover{border-color:#1CB8E3!important;background-color:rgba(145, 102, 72, 0)!important;color:#1CB8E3!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;}.hyperlink-style-2{color:rgba(255, 255, 255, 1)!important;}.hyperlink-style-2:hover{color:#1CB8E3!important;}.button-style-2{color:#1CB8E3!important;background-color:rgba(255, 255, 255, 1)!important;border-color:rgba(255, 255, 255, 1)!important;}.button-style-2:hover{color:rgba(255, 255, 255, 1)!important;background-color:rgba(177, 132, 99, 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(0, 0, 0, 0)!important;border-color:rgba(255, 255, 255, 1)!important;}.pagination-style-2 li a:hover{color:#1CB8E3!important;background-color:rgba(255, 255, 255, 1)!important;border-color:rgba(255, 255, 255, 1)!important;}.pagination-style-2 li.active a{color:#1CB8E3!important;background-color:rgba(255, 255, 255, 1)!important;border-color:rgba(255, 255, 255, 1)!important;}.social_icons-style-2 a{border-color:rgba(255, 255, 255, 1)!important;background-color:rgba(255, 255, 255, 1)!important;color:#1CB8E3!important;}.social_icons-style-2 a:hover{border-color:#FFFFFF!important;background-color:rgba(255, 255, 255, 0)!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-3{color:#1CB8E3!important;background-color:rgba(255, 255, 255, 0)!important;border-color:#1CB8E3!important;}.button-style-3:hover{color:rgba(255, 255, 255, 1)!important;background-color:#1CB8E3!important;border-color:#1CB8E3!important;}.button-style-4{color:rgba(255, 255, 255, 1)!important;background-color:rgba(255, 255, 255, 0)!important;border-color:rgba(255, 255, 255, 1)!important;}.button-style-4:hover{color:#1CB8E3!important;background-color:rgba(255, 255, 255, 1)!important;border-color:#FFFFFF!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="cabbe5a3-1336-4a26-afab-bb421f339f1d"></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        <!-- begin Widget Tracker Code -->
79<script>
80(function(w,i,d,g,e,t){w["WidgetTrackerObject"]=g;(w[g]=w[g]||function()
81{(w[g].q=w[g].q||[]).push(arguments);}),(w[g].ds=1*new Date());(e="script"),
82(t=d.createElement(e)),(e=d.getElementsByTagName(e)[0]);t.async=1;t.src=i;
83e.parentNode.insertBefore(t,e);})
84(window,"https://widgetbe.com/agent",document,"widgetTracker");
85window.widgetTracker("create", "WT-LBAKEVRY");
86window.widgetTracker("send", "pageview");
87</script>
87
88<!-- end Widget Tracker Code -->
89
90<!-- Bing Webmaster Tools Verification -->
91<script>
92        // Check if on the homepage before the body loads
93        if (window.location.pathname === '/' || window.location.pathname === '/index.html') {
94            document.write('<meta name="msvalidate.01" content="EAEFC5C7B7E1F99635A79B4601AFABE9" />');
95        }
96</script>
96
97
98<script type="text/javascript">
99    // Function to inject JSON-LD schema
100    function injectSchema(schema) {
101        var script = document.createElement('script');
102        script.type = 'application/ld+json';
103        script.text = JSON.stringify(schema);
104        document.head.appendChild(script);
105    }
106    
107    // Check if the current path is the homepage
108    if (window.location.pathname === '/') {
109        var realEstateAgentSchema = {
110            "@context": "https://schema.org",
111            "@type": "RealEstateAgent",
112            "name": "Teresa Cowart Team",
113            "image": "https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/8fd05e8e-0f2d-4daf-a269-315700ae29c8",
114            "@id": "https://teresacowartteam.com/#realEstateAgent",
115            "url": "https://teresacowartteam.com/",
116            "telephone": "(912)667-1881",
117            "email": "[email protected]",
118            "description": "The Teresa Cowart Team, the #1 real estate team in the Savannah, GA area, serving Savannah, Richmond Hill, Pooler, Rincon, Hinesville, and beyond.",
119            "address": {
120                "@type": "PostalAddress",
121                "streetAddress": "7001 Chatham Center Dr, Ste 2400",
122                "addressLocality": "Savannah",
123                "addressRegion": "GA",
124                "postalCode": "31405",
125                "addressCountry": "US"
126            },
127            "geo": {
128                "@type": "GeoCoordinates",
129                "latitude": 32.0717697,
130                "longitude": -81.1480865
131            },
132            "openingHoursSpecification": {
133                "@type": "OpeningHoursSpecification",
134                "dayOfWeek": [
135                    "Monday",
136                    "Tuesday",
137                    "Wednesday",
138                    "Thursday",
139                    "Friday",
140                    "Saturday",
141                    "Sunday"
142                ],
143                "opens": "00:00",
144                "closes": "23:59"
145            },
146            "sameAs": [
147                "https://www.facebook.com/TeresaCowartTeam/",
148                "https://www.instagram.com/teresacowartteam/",
149                "https://www.yelp.com/biz/teresa-cowart-team-re-max-accent-savannah",
150                "https://www.tiktok.com/@teresacowartteam",
151                "https://www.youtube.com/@teresacowartteam/featured",
152                "https://www.google.com/search?q=teresa+cowart+real+estate+team#lrd=0x88fb0f17e1779229:0xa625619eb30be5b3,1,,,,"
153            ],
154            "areaServed": [
155                {
156                    "@type": "City",
157                    "name": "Savannah"
158                },
159                {
160                    "@type": "City",
161                    "name": "Richmond Hill"
162                },
163                {
164                    "@type": "City",
165                    "name": "Pooler"
166                },
167                {
168                    "@type": "City",
169                    "name": "Rincon"
170                },
171                {
172                    "@type": "City",
173                    "name": "Hinesville"
174                },
175                {
176                    "@type": "City",
177                    "name": "Midway"
178                },
179                {
180                    "@type": "City",
181                    "name": "Guyton"
182                },
183                {
184                    "@type": "City",
185                    "name": "Skidaway Island"
186                }
187            ],
188            "knowsAbout": [
189                "Residential Real Estate",
190                "Luxury Homes",
191                "New Construction Homes",
192                "Military Relocation",
193                "Property Management",
194                "Buyer Representation",
195                "Seller Representation",
196                "Home Valuation"
197            ]
198        };
199        injectSchema(realEstateAgentSchema);
200    }
201</script>
201
202    <!-- GOOGLE TRANSLATE STYLES are moved to external CSS -->
203</head>
204<body>
205    <div id="google_translate_element" style="display: none"></div>
206
207        <nav id="global-navbar" data-el-id="3242b8f0-253e-46f7-b814-162ccf958ec2">
208            
209<header class="header js-header" style="--textColor: rgba(26, 26, 26, 1); --backgroundColor: rgba(255, 255, 255, 1);">
210  <div class="header-container ">
211    
212    <a href="/" class="header-logo">
213      <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/74d2a17c-0cc5-49c1-b88e-fabe345fd6bd" 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/74d2a17c-0cc5-49c1-b88e-fabe345fd6bd 320w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/74d2a17c-0cc5-49c1-b88e-fabe345fd6bd 497w" sizes="350px" alt="Company logo" class="header-logo__img header-logo__img--dark">
214      <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/74d2a17c-0cc5-49c1-b88e-fabe345fd6bd" 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/74d2a17c-0cc5-49c1-b88e-fabe345fd6bd 320w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/74d2a17c-0cc5-49c1-b88e-fabe345fd6bd 497w" sizes="350px" alt="Company logo" class="header-logo__img header-logo__img--light">
215    </a>
216
217    <ul class="header-navigation">
218      <li class="header-navigation__item ">
219        
220        <a class="header-navigation__link "  href="/team"  style="--delay: 0s">Meet the Team</a>
221      </li>
222      <li class="header-navigation__item header-navigation__item--sub-nav">
223        
224        <a class="header-navigation__link js-subnav-opener"   style="--delay: 0.1s">Properties</a>
225          
226          <ul class="header-navigation__sub-nav">
227              <li class="header-navigation__sub-nav-item">
228                <a class="header-navigation__sub-nav-link"  href="/properties/sale" >Featured Properties</a>
229              </li>
230              <li class="header-navigation__sub-nav-item">
231                <a class="header-navigation__sub-nav-link"  href="/properties/sold" >Past Transactions</a>
232              </li>
233          </ul>
234      </li>
235      <li class="header-navigation__item ">
236        
237        <a class="header-navigation__link "  href="/home-search/listings"  style="--delay: 0.2s">Search Homes</a>
238      </li>
239      <li class="header-navigation__item ">
240        
241        <a class="header-navigation__link "  href="/home-valuation"  style="--delay: 0.30000000000000004s">Home Valuation</a>
242      </li>
243      <li class="header-navigation__item header-navigation__item--sub-nav">
244        
245        <a class="header-navigation__link js-subnav-opener"   style="--delay: 0.4s">Resources</a>
246          
247          <ul class="header-navigation__sub-nav">
248              <li class="header-navigation__sub-nav-item">
249                <a class="header-navigation__sub-nav-link"  href="/buyers-team" >TERESA&#x27;S BUYER&#x27;S GUIDE</a>
250              </li>
251              <li class="header-navigation__sub-nav-item">
252                <a class="header-navigation__sub-nav-link"  href="/sellers-team" >TERESA&#x27;S SELLER&#x27;S GUIDE</a>
253              </li>
254              <li class="header-navigation__sub-nav-item">
255                <a class="header-navigation__sub-nav-link"  href="/blog" >BLOG</a>
256              </li>
257          </ul>
258      </li>
259      <li class="header-navigation__item ">
260        
261        <a class="header-navigation__link "  href="/join-the-team"  style="--delay: 0.5s">Join Our Team</a>
262      </li>
263      <li class="header-navigation__item ">
264        
265        <a class="header-navigation__link "  href="/preferred-vendors"  style="--delay: 0.6000000000000001s">Preferred Vendors</a>
266      </li>
267      <li class="header-navigation__item ">
268        
269        <a class="header-navigation__link "  href="/property-management"  style="--delay: 0.7000000000000001s">Property Management</a>
270      </li>
271      <li class="header-navigation__item ">
272        
273        <a class="header-navigation__link "  data-type="MODAL_262e0a3f-44c1-4b59-a1ba-97df516aff66" tabindex="0" style="--delay: 0.8s">Contact Us</a>
274      </li>
275    </ul>
276
277
278    <div class="header-buttons-wrapper">
279
280
281
282      <button type="button" class="header-hamburger-btn lp-btn hamburger-component hamburger js-sidemenu-opener"
283        title="Toggle Sidemenu"></button>
284    </div>
285  </div>
286
287</header>
288
289        </nav>
290        <div id="global-sidemenu" class="sidemenu" data-el-id="033c3235-a8bd-45bf-a4a8-96977e33190d">
291            
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307<button class="sidemenu-close toggle close lp-btn lp-icon link-icon--plus"></button>
308
309
310<div class="sidemenu-wrapper " style="--navItemNumberColor: rgba(28, 184, 227, 1);">
311    <div class="sidemenu-nav-holder ">
312        <ul class="sidemenu-navigation sidemenu-navigation--index">
313                    <li class="sidemenu-navigation__item js-idemenu-navigation-item ">
314                            <a  
315                                href="/" 
316                                class="sidemenu-navigation__link">Home</a>
317                
318                    </li>
319                  
320                    <li class="sidemenu-navigation__item js-idemenu-navigation-item sidemenu-navigation__item--sub-nav">
321                            <span class="sidemenu-navigation__link sidemenu-navigation__link--sub-nav sidemenu-navigation__link--sub-nav-active js-sub-nav-opener lp-icon">
322                                About
323                            </span>
324                
325                        <ul class="sidemenu-navigation-sub-nav lp-a">
326                            <li class="sidemenu-navigation-sub-nav__item"><a  href="/team" class="sidemenu-navigation-sub-nav__link">Meet the Team</a></li>
327                            <li class="sidemenu-navigation-sub-nav__item"><a  href="/testimonials" class="sidemenu-navigation-sub-nav__link">Testimonials</a></li>
328                        </ul>
329                    </li>
330                  
331                    <li class="sidemenu-navigation__item js-idemenu-navigation-item ">
332                            <a  
333                                href="/home-search/listings" 
334                                class="sidemenu-navigation__link">Home Search</a>
335                
336                    </li>
337                  
338        </ul>
339
340        <ul class="sidemenu-navigation sidemenu-navigation--index">
341                    <li class="sidemenu-navigation__item js-idemenu-navigation-item ">
342                            <a  
343                                href="/home-valuation" 
344                                class="sidemenu-navigation__link">Home Valuation</a>
345                
346                    </li>
347                  
348                    <li class="sidemenu-navigation__item js-idemenu-navigation-item sidemenu-navigation__item--sub-nav">
349                            <span class="sidemenu-navigation__link sidemenu-navigation__link--sub-nav sidemenu-navigation__link--sub-nav-active js-sub-nav-opener lp-icon">
350                                Homes for Sale
351                            </span>
352                
353                        <ul class="sidemenu-navigation-sub-nav lp-a">
354                            <li class="sidemenu-navigation-sub-nav__item"><a  href="/savannah-homes-for-sale" class="sidemenu-navigation-sub-nav__link">Savannah, GA</a></li>
355                            <li class="sidemenu-navigation-sub-nav__item"><a  href="/guyton-homes-for-sale" class="sidemenu-navigation-sub-nav__link">Guyton, GA</a></li>
356                        </ul>
357                    </li>
358                  
359                    <li class="sidemenu-navigation__item js-idemenu-navigation-item sidemenu-navigation__item--sub-nav">
360                            <span class="sidemenu-navigation__link sidemenu-navigation__link--sub-nav sidemenu-navigation__link--sub-nav-active js-sub-nav-opener lp-icon">
361                                Properties
362                            </span>
363                
364                        <ul class="sidemenu-navigation-sub-nav lp-a">
365                            <li class="sidemenu-navigation-sub-nav__item"><a  href="/properties/sale" class="sidemenu-navigation-sub-nav__link">Featured Properties</a></li>
366                            <li class="sidemenu-navigation-sub-nav__item"><a  href="/properties/sold" class="sidemenu-navigation-sub-nav__link">Past Transactions</a></li>
367                        </ul>
368                    </li>
369                  
370        </ul>
371
372        <ul class="sidemenu-navigation sidemenu-navigation--index">
373                    <li class="sidemenu-navigation__item js-idemenu-navigation-item ">
374                            <a  
375                                href="/neighborhoods" 
376                                class="sidemenu-navigation__link">Neighborhoods</a>
377                
378                    </li>
379                  
380                    <li class="sidemenu-navigation__item js-idemenu-navigation-item ">
381                            <a  
382                                href="/join-the-team" 
383                                class="sidemenu-navigation__link">Join The Team</a>
384                
385                    </li>
386                  
387                    <li class="sidemenu-navigation__item js-idemenu-navigation-item ">
388                            <a  
389                                href="/preferred-vendors" 
390                                class="sidemenu-navigation__link">Preferred Vendors</a>
391                
392                    </li>
393                  
394        </ul>
395
396        <ul class="sidemenu-navigation sidemenu-navigation--index">
397                    <li class="sidemenu-navigation__item js-idemenu-navigation-item ">
398                            <a  
399                                href="/property-management" 
400                                class="sidemenu-navigation__link">Property Management</a>
401                
402                    </li>
403                  
404                    <li class="sidemenu-navigation__item js-idemenu-navigation-item sidemenu-navigation__item--sub-nav">
405                            <span class="sidemenu-navigation__link sidemenu-navigation__link--sub-nav sidemenu-navigation__link--sub-nav-active js-sub-nav-opener lp-icon">
406                                Resources
407                            </span>
408                
409                        <ul class="sidemenu-navigation-sub-nav lp-a">
410                            <li class="sidemenu-navigation-sub-nav__item"><a  href="/buyers-team" class="sidemenu-navigation-sub-nav__link">Teresa’s Buyer’s Guide</a></li>
411                            <li class="sidemenu-navigation-sub-nav__item"><a  href="/sellers-team" class="sidemenu-navigation-sub-nav__link">Teresa’s Seller&#x27;s Guide</a></li>
412                            <li class="sidemenu-navigation-sub-nav__item"><a  href="/blog" class="sidemenu-navigation-sub-nav__link">Blog</a></li>
413                        </ul>
414                    </li>
415                  
416                    <li class="sidemenu-navigation__item js-idemenu-navigation-item ">
417                            <a  
418                                href="/contact" 
419                                class="sidemenu-navigation__link">Contact Us</a>
420                
421                    </li>
422                  
423        </ul>
424    </div>
425
426    <div class="sidemenu-footer">
427        <div class="sidemenu__info-group sidemenu__col">
428                    <div class="sidemenu__section-content">
429                                <div class="sidemenu__col-content">
430                                <p class="sidemenu__col-title">Contact</p><div class="sidemenu__col-description lp-a">
431                                        <p class="sidemenu__col-agent-name">Teresa Cowart Team</p>
432                                        <a href="tel:9126671881" class="sidemenu__col-phone">(912) 667-1881</a>
433                                        <a href="/cdn-cgi/l/email-protection#95e1f0e7f0e6f4d5e1f0e7f0e6f4f6fae2f4e7e1e1f0f4f8bbf6faf8" class="sidemenu__col-email"><span class="__cf_email__" data-cfemail="b0c4d5c2d5c3d1f0c4d5c2d5c3d1d3dfc7d1c2c4c4d5d1dd9ed3dfdd">[email&#160;protected]</span></a>
434                                    </div>
435                                </div>
436                                <div class="sidemenu__col-content">
437                                <p class="sidemenu__col-title">Office</p>                <div class="sidemenu__col-description lp-a sidemenu__col-description--pre-line"><p>7001 Chatham Center Dr Ste 2400 Savannah GA 31405</p>
438                        <p><a href="tel:9127565888">(912) 525-0900</a></p></div>
439                                        
440                                </div>
441                    </div>
442                    
443        </div>
444
445            <div class="sidemenu-socials-block">
446                <p class="sidemenu__col-title">Follow Us</p>
447                    <ul class="lp-socials social_icons-style-1">
448                    
449                            <li>
450                              <a
451                                href="https://www.facebook.com/TeresaCowartTeam/"
452                                class="lp-socials__link"
453                                data-wow-delay="0s"
454                                target="_blank"
455                                aria-label="FACEBOOK"
456                              >
457                                  <span class="lp-i lp-i--facebook" aria-hidden="true"></span>
458                              </a>
459                            </li>
460                            <li>
461                              <a
462                                href="https://www.instagram.com/teresacowartteam/"
463                                class="lp-socials__link"
464                                data-wow-delay="0.1s"
465                                target="_blank"
466                                aria-label="INSTAGRAM"
467                              >
468                                  <span class="lp-i lp-i--instagram" aria-hidden="true"></span>
469                              </a>
470                            </li>
471                            <li>
472                              <a
473                                href="https://www.yelp.com/biz/teresa-cowart-team-re-max-accent-savannah"
474                                class="lp-socials__link"
475                                data-wow-delay="0.2s"
476                                target="_blank"
477                                aria-label="YELP"
478                              >
479                                  <span class="lp-i lp-i--yelp" aria-hidden="true"></span>
480                              </a>
481                            </li>
482                            <li>
483                              <a
484                                href="https://www.tiktok.com/@teresacowartteam"
485                                class="lp-socials__link"
486                                data-wow-delay="0.3s"
487                                target="_blank"
488                                aria-label="TIKTOK"
489                              >
490                                  <span class="lp-i lp-i--tiktok" aria-hidden="true"></span>
491                              </a>
492                            </li>
493                            <li>
494                              <a
495                                href="https://www.youtube.com/@teresacowartteam/featured"
496                                class="lp-socials__link"
497                                data-wow-delay="0.4s"
498                                target="_blank"
499                                aria-label="YOUTUBE"
500                              >
501                                  <span class="lp-i lp-i--youtube" aria-hidden="true"></span>
502                              </a>
503                            </li>
504                            <li>
505                              <a
506                                href="https://www.google.com/search?q&#x3D;teresa+cowart+real+estate+team&amp;sca_esv&#x3D;181e9cfcc41c4f59&amp;source&#x3D;hp&amp;ei&#x3D;U9O8Z8KgEd6hvr0Pl7KWkAM&amp;iflsig&#x3D;ACkRmUkAAAAAZ7zhY4f1pGCH-oOrDPLH5k4VlGqDyO6u&amp;ved&#x3D;0ahUKEwiClsb8j92LAxXekK8BHReZBTIQ4dUDCBg&amp;uact&#x3D;5&amp;oq&#x3D;teresa+cowart+real+estate+team&amp;gs_lp&#x3D;Egdnd3Mtd2l6Ih50ZXJlc2EgY293YXJ0IHJlYWwgZXN0YXRlIHRlYW0yBRAhGKABSPMzUABYsjJwBHgAkAEAmAFtoAGOE6oBBDI5LjG4AQPIAQD4AQGYAiKgAuETqAIKwgIFEAAYgATCAgsQLhiABBjRAxjHAcICBRAuGIAEwgIKEAAYAxjqAhiPAcICChAuGAMY6gIYjwHCAgsQLhiABBjHARivAcICCBAuGIAEGNQCwgIGEAAYFhgewgILEAAYgAQYhgMYigXCAgUQABjvBcICCBAAGIAEGKIEwgIGEAAYDRgewgIIEAAYCBgNGB7CAggQABiiBBiJBcICBxAhGKABGArCAgUQIRifBZgDA_EFhx9LkKruFPqSBwQzMy4xoAf49AE&amp;sclient&#x3D;gws-wiz#lrd&#x3D;0x88fb0f17e1779229:0xa625619eb30be5b3,1,,,,"
507                                class="lp-socials__link"
508                                data-wow-delay="0.5s"
509                                target="_blank"
510                                aria-label="GOOGLE"
511                              >
512                                  <span class="lp-i lp-i--google" aria-hidden="true"></span>
513                              </a>
514                            </li>
515                      </ul>            </div>
516    </div>
517</div>
518        </div>
519        <div  id="global-mobile-contact" class="mobile-contact-wrapper" data-el-id="befe5af2-a6ca-4119-924a-a85d96d36b51">
520            <div class="btn-holder" 
521style="
522--backgroundColor: rgba(201, 238, 248, 1); 
523--textColor: rgba(26, 26, 26, 1); 
524--pillTextColor: rgba(255, 255, 255, 1); 
525--pillBackgroundColor: rgba(28, 184, 227, 1);">
526
527    <button type="button" class="connect-btn lp-ico lp-ico-arrow-top visible">Let&#x27;s Connect</button>
528</div>
529
530
531<div class="pop-up" style="--backgroundColor: rgba(201, 238, 248, 1); --textColor: rgba(26, 26, 26, 1);">
532  <div class="lp-container">
533    <form data-type="contact-form" class="contact-form">
534      <div class="contact-form__container">
535          <h3 class="lp-h3">Leave a Message</h3>
536      
537        <div class="contact-form__content">
538          <div class="contact-form__inputs-container">
539            <div class="contact-form__item">
540              <input
541                id="__FullName"
542                type="text" name="name"
543                class="lp-input lp-input--light"
544                required
545                placeholder="Full Name">
546            </div>
547            <div class="contact-form__item">
548              <input
549                id="__Email"
550                type="email" name="email"
551                class="lp-input js-email-input lp-input--light"
552                required
553                placeholder="Email">
554            </div>
555            <div class="contact-form__item"> 
556              <input
557                class="lp-input lp-input--light"
558                type="tel" 
559                placeholder="Phone"
560                id="__Phone"
561                name="phone"
562                required>
563            </div>
564
565            <div class="contact-form__item input-group-select">
566              <select name="interest" id="-field-interest" placeholder="Interest"
567                class="lp-input dropdown-select js-select js-form-element lp-input--light" required>
568                <option value="" disabled selected data-label="Interest">Interested in...</option>
569                <option value="Selling &amp; Buying">Selling &amp; Buying</option>
570                <option value="Selling">Selling</option>
571                <option value="Buying">Buying</option>
572                <option value="Renting">Renting</option>
573                <option value="Other">Other</option>
574              </select>
575              <label for="-field-interest" class="lp-label sr-only">Interest</label>
576            </div>
577
578            <div class="contact-form__item">
579              <textarea
580                name="message"
581                rows="4"
582                id="__Message"
583                class="lp-input lp-input--light"
584                placeholder="Message"
585                required></textarea>
586            </div>
587            <div class="lp-disclaimer">  <div class='lp-tcr-content' style='margin-bottom: 1em;'>
588    <span class='lp-tcr-message'>
589      By providing your contact information to Teresa Cowart Team, your personal
590      information will be processed in accordance with Teresa Cowart Team's
591      <a href='/terms-and-conditions' target='_blank'>Privacy Policy</a>. By
592      checking the box(es) below, you consent to receive communications
593      regarding your real estate inquiries and related marketing and promotional
594      updates in the manner selected by you. For SMS text messages, message
595      frequency varies. Message and data rates may apply. You may opt out of
596      receiving further communications from Teresa Cowart Team at any time. To opt
597      out of receiving SMS text messages, reply STOP to unsubscribe.
598    </span>
599  </div>
600  <label style='display: none;' for='-termsAccepted'>Opt
601    in/Disclaimer Consent:</label>
602  <label class='lp-tcr-content' style='margin-bottom: 1em;'>
603    <span class='lp-tcr-checkbox'>
604      <input
605        type='checkbox'
606        name='termsAccepted'
607        id='-termsAccepted'
608        oninvalid="this.setCustomValidity('Please accept the terms and conditions')"
609        oninput="this.setCustomValidity('')"
610        required
611        value='Yes, I agree to receive email or phone call communications from Teresa Cowart Team.'
612      />
613    </span>
614    <span class='lp-tcr-message'>
615      Yes, I agree to receive email or phone call communications from
616      Teresa Cowart Team.
617    </span>
618  </label>
619  <label style='display: none;' for='-customConsent'>Opt
620    in/Disclaimer Consent:</label>
621  <label class='lp-tcr-content' style='margin-bottom: 1em;'>
622    <span class='lp-tcr-checkbox'>
623      <input
624        type='checkbox'
625        name='customConsent'
626        id='-customConsent'
627        value='Yes, I agree to receive SMS text messages from Teresa Cowart Team.'
628      />
629    </span>
630    <span class='lp-tcr-message'>
631      Yes, I agree to receive SMS text messages from Teresa Cowart Team.
632    </span>
633  </label>
634
635</div>
636            <button type="submit" class="lp-btn lp-btn--filled lp-btn--dark submit button-style-1 contact-form__item">Submit</button>
637            
638            <div class="lp-h-pot">
639              <input id="__newsSignMiddleName" name="middleName" value="" autocomplete="off" tabindex="-1">
640            </div>
641            
642            <input style="display: none;" type="text" name="source" value="CONTACT_INQUIRY" />
643            <input type="hidden" name="button_text" value="Let&#x27;s Connect">
644          </div>
645        </div>
646      </div>
647
648
649      <div class="success-block">
650          <h3 class="lp-h3 success-message">Thank you for your message. We will be in touch with you shortly.</h3>
651
652                <a
653                    href="/home-search/listings"
654                    
655                    class="lp-btn lp-btn--filled lp-btn--dark button-style-1"
656                    
657                    
658                    
659                    
660                    
661                    >
662                            Explore Our Properties
663                    </a>
664      </div>
665    </form>
666
667    <button type="button" class="close-btn lp-ico lp-ico-close"></button>
668
669    
670  </div>
671</div>
672
673
674        </div>
675        <section  class="image-section is-font-color-light is-background-color-light" id="section-c3f2b87c-69b5-446c-a7d3-6ef3300b8597" data-el-id="d1637c2a-e69e-42d9-8d39-7fe5c68c7ee9">
676    <div class="custom-intro js-scroll-section custom-intro__horizon-center custom-intro__vertical-bottom"
677    style="
678        --titleColor: rgba(28, 184, 227, 1);
679        --boxBackColor: rgba(201, 238, 248, 1);
680        --backOverlayColor: rgba(255, 255, 255, 1);
681    "
682    >
683        <div class="custom-intro__overlay"></div>
684    <div class="custom-intro__container">
685        <div class="custom-intro__content-wrapper">
686                <div class="custom-intro__content-box">
687                        <h1 class="custom-intro__title ">Blog</h1>
688                    <div class="custom-intro__scroll-btn jsScrollBtn"></div>
689                </div>
690        </div>
691    </div>
692</div>
693
694</section>
695<section id="section-7340826b-bdad-4f4c-95bc-421ee1719d85"  class="solid-section is-font-color-dark is-background-color-light" data-el-id="b635a7c9-985a-4132-ab98-a79af1912f52">
vendor: 109 bytes, lines 695-696
695
696<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
696<script type="text/x-handlebars-template" class="blogItem pagination-script">	<a class="blog-posts-list-item lp_animation-img-zoom" href="/blog/{{slug}}">
697		<div class="blog-posts-list-item__image-container">
698				{{#if categories.[0].name}}<span class="blog-posts-list-item__tag lp-tag">{{categories.[0].name}}</span>{{/if}}
699			{{{mediaImage media.[0] sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" alt=name class="blog-posts-list-item__image"}}}
700		</div>
701		<div class="blog-posts-list-item__info">
702				{{#if (or customAuthor createdBy.firstName createdBy.lastName publishedAt)}}
703					<p class="blog-posts-list-item__details">
704							{{#if (or createdBy.firstName customAuthor)}}{{#if customAuthor}}{{customAuthor}}{{else}}{{createdBy.firstName}} {{createdBy.lastName}}{{/if}}{{/if}}
705
706							{{#if publishedAt}}{{#if (or customAuthor createdBy.firstName createdBy.lastName)}} I {{/if}}{{/if}}
707
708							{{#if publishedAt}}{{hbFormatDate publishedAt}}{{/if}}
709					</p>
710				{{/if}}
711			{{#if title}}
712				<h6 class="blog-posts-list-item__title">{{title}}</h6>
713			{{/if}}
714			<span class="blog-posts-list-item__more lp-link hyperlink-style-1">Read more</span>
715		</div>
716	</a>
717</script>
717  <div class="blog-posts-list lp-vertical-paddings" style="--titleColor: rgba(28, 184, 227, 1);">
718        <div class="blog-posts-list__title-group lp-title-group">
719            
720            <h2 class="blog-posts-list__title " style="color: rgba(28, 184, 227, 1);">Market Updates</h2>
721            
722        </div>
723	<div class="blog-posts-list__controls search-container" data-variables="{&quot;limit&quot;:4,&quot;order&quot;:&quot;publishedAt&quot;,&quot;sortDir&quot;:&quot;DESC&quot;}">
724		<ul class="blog-posts-list__search-container">
725			<li class="blog-posts-list__category js-category active js-category-all"><span class="blog-posts-list__category-name">All</span></li>
726		</ul>
727	</div>
728	<div class="blog-posts-list__collection data-container blog-posts-list__collection--editorial">
729				<a class="blog-posts-list-item lp_animation-img-zoom" href="/blog/top-entertainment-spots-near-savannah-ga">
730					<div class="blog-posts-list-item__image-container">
731							
732						<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/c50e0c4c-1b0f-4826-9bab-eed931a879e3" srcset="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/c50e0c4c-1b0f-4826-9bab-eed931a879e3 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/c50e0c4c-1b0f-4826-9bab-eed931a879e3 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/c50e0c4c-1b0f-4826-9bab-eed931a879e3 1920w" class="blog-posts-list-item__image" alt="" sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" loading="lazy">
733					</div>
734					<div class="blog-posts-list-item__info">
735								<p class="blog-posts-list-item__details">
736										Teresa Cowart Team
737			
738										 I 
739			
740										October 8, 2026
741								</p>
742							<h6 class="blog-posts-list-item__title">Top Entertainment Spots Near Savannah, GA</h6>
743						<span class="blog-posts-list-item__more lp-link hyperlink-style-1">Read more</span>
744					</div>
745				</a>
746				<a class="blog-posts-list-item lp_animation-img-zoom" href="/blog/how-to-know-when-youve-found-the-right-home-in-savannah-ga">
747					<div class="blog-posts-list-item__image-container">
748							
749						<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/f0fde65c-f50d-427f-8232-93a7e3f15378" srcset="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/f0fde65c-f50d-427f-8232-93a7e3f15378 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/f0fde65c-f50d-427f-8232-93a7e3f15378 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/f0fde65c-f50d-427f-8232-93a7e3f15378 1920w" class="blog-posts-list-item__image" alt="" sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" loading="lazy">
750					</div>
751					<div class="blog-posts-list-item__info">
752								<p class="blog-posts-list-item__details">
753										Teresa Cowart Team
754			
755										 I 
756			
757										October 8, 2026
758								</p>
759							<h6 class="blog-posts-list-item__title">How to Know When You’ve Found the Right Home in Savannah, GA</h6>
760						<span class="blog-posts-list-item__more lp-link hyperlink-style-1">Read more</span>
761					</div>
762				</a>
763				<a class="blog-posts-list-item lp_animation-img-zoom" href="/blog/unexpected-costs-of-buying-a-home-and-how-to-budget-for-them-in-savannah-ga">
764					<div class="blog-posts-list-item__image-container">
765							
766						<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/ba25ac38-a2af-4e5f-aed1-72e12192e224" srcset="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/ba25ac38-a2af-4e5f-aed1-72e12
766192e224 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/ba25ac38-a2af-4e5f-aed1-72e12192e224 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/ba25ac38-a2af-4e5f-aed1-72e12192e224 1920w" class="blog-posts-list-item__image" alt="" sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" loading="lazy">
767					</div>
768					<div class="blog-posts-list-item__info">
769								<p class="blog-posts-list-item__details">
770										Teresa Cowart Team
771			
772										 I 
773			
774										October 8, 2026
775								</p>
776							<h6 class="blog-posts-list-item__title">Unexpected Costs of Buying a Home (and How to Budget for Them) in Savannah, GA</h6>
777						<span class="blog-posts-list-item__more lp-link hyperlink-style-1">Read more</span>
778					</div>
779				</a>
780				<a class="blog-posts-list-item lp_animation-img-zoom" href="/blog/ways-to-enjoy-the-arts-in-savannah-ga">
781					<div class="blog-posts-list-item__image-container">
782							
783						<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/f291d0d0-3033-4a29-949b-309f26c6abd5" srcset="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/f291d0d0-3033-4a29-949b-309f26c6abd5 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/f291d0d0-3033-4a29-949b-309f26c6abd5 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/f291d0d0-3033-4a29-949b-309f26c6abd5 1920w" class="blog-posts-list-item__image" alt="" sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" loading="lazy">
784					</div>
785					<div class="blog-posts-list-item__info">
786								<p class="blog-posts-list-item__details">
787										Teresa Cowart Team
788			
789										 I 
790			
791										October 8, 2026
792								</p>
793							<h6 class="blog-posts-list-item__title">Ways to Enjoy the Arts in Savannah, GA</h6>
794						<span class="blog-posts-list-item__more lp-link hyperlink-style-1">Read more</span>
795					</div>
796				</a>
797	</div>
798	<div class="blog-posts-list__pagination lp-pagination pagination-container pagination-style-1"></div>	
799  </div>
800</section>
801<section  class="image-section is-font-color-light is-background-color-light" id="section-f6ab0e0a-1d17-477f-be39-f70a71f91f94" data-el-id="1ed7f92a-2189-48c5-889c-3838656da504">
802    <div class="newsletter-contact-cta lp-vertical-paddings"
803        style="
804            --titleColorFirst: rgba(177, 132, 99, 1);
805            --newsletterBack: rgba(238, 237, 233, 0);
806            --titleColorSecond: rgba(255, 255, 255, 1);
807            --workWithBack: rgba(213, 224, 217, 0);
808            --newsletterTextColor: rgba(64, 64, 64, 1);
809            --rightBack: rgba(240, 238, 227, 0);
810        "
811>
812    <div class="newsletter-contact-cta__right-back"></div>
813    <div class="newsletter-contact-cta__container lp-container">
814        <div class="newsletter-contact-cta__wrapper">
815            <div class="newsletter-contact-cta__block newsletter-contact-cta__block--touch newsletter-contact-cta__block--no-newsletter">
816                <div class="newsletter-contact-cta__heading">
817                        <div class="newsletter-contact-cta__pre-title newsletter-contact-cta__pre-title--touch lp-text--pretitle">Get in Touch</div>
818                            <h2 class="newsletter-contact-cta__title newsletter-contact-cta__title--touch newsletter-contact-cta__title--with-pretitle">Work With Us</h2>
819                        <div class="newsletter-contact-cta__description"><p><strong>Our goal is to be informative and helpful. Through our service we hope to earn your business with our exemplary level of service and extensive local knowledge of the Savannah Area area.</strong></p></div>
820                </div>
821                    <div class="newsletter-contact-cta__btn-wrap">
822        <a
823            role="button"
824            data-type="MODAL_262e0a3f-44c1-4b59-a1ba-97df516aff66"
825            class="newsletter-contact-cta__btn lp-btn button-style-2"
826            
827            
828            
829            
830            
831            >
832                                                <span class="lp-btn__content">Contact Us</span>
833            </a>
834                    </div>
835                        <div class="newsletter-contact-cta__word-divide"><span class="newsletter-contact-cta__word-word">or</span></div>
836                        <div class="newsletter-contact-cta__call-cell">
837                                <span class="newsletter-contact-cta__prefix-cell">Call us at</span>
838                            <a 
839                                href="tel:9125250900"
840                                class="newsletter-contact-cta__link lp-a lp-link hyperlink-style-2"
841                            >
842                                <span class="newsletter-contact-cta__phone-wrapper lp-icon link-icon--phone"></span>
843                                (912) 525-0900
844                            </a>
845                        </div>
846            </div>
847        </div>
848    </div>
849</div>
850</section>
851<section id="section-d0bb8190-fa80-4a3a-b56c-b37146df7e09"  class="solid-section is-font-color-dark is-background-color-light" data-el-id="85dc9e17-a4c7-449c-8890-869fdc11b485">
852  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@splidejs/[email protected]/dist/css/splide-core.min.css"/>
853<script src="https://cdn.jsdelivr.net/npm/@splidejs/[email protected]/dist/js/splide.min.js"></script>
vendor: 1 bytes, line 853
853
854<script type="text/x-handlebars-template" class="jsIGTemplate">
855    {{#each items}}
856        <a href="{{permalink}}" target="_blank" class="instagram-feed__item lp_animation-img-zoom splide__slide insta-item insta-type-{{mediaType}}">
857          <img class="instagram-feed__image" src="{{#ifEquals mediaType 'VIDEO'}}{{thumbnailUrl}}{{else}}{{mediaUrl}}{{/ifEquals}}" alt="Instagram post by @{{username}}">
858        </a>
859    {{/each}}
860</script>
860
861
862<div class="instagram-feed lp-vertical-paddings">
863    <div class="instagram-feed__container" style="--titleColor: rgba(26, 26, 26, 1); --boxColor: rgba(255, 255, 255, 1);">
864        <div class="instagram-feed__title-group lp-title-group">
865            <div class="instagram-feed__icon lp-icon"></div>
866            <p class="instagram-feed__pretitle">Follow Us On Instagram</p>
867            <h2 class="instagram-feed__title instagram-feed__title--with-pretitle"><a href="#" target="_blank" class="instagram-feed__link jsIGLink jsIGName"></a></h2>
868        </div>
869
870        <div class="instagram-feed__collection splide js-slider">
871          <div class="splide__track">
872              <ul class="splide__list jsIGContainer">
873              </ul>
874          </div>
875        </div>
876    </div>
877</div>
878
879
880
881
882</section>
883
884        <div id="modals" class="modals"></div>
885        <footer id="global-footer" class="is-font-color-dark is-background-color-light" data-el-id="b8c9ffd0-3b1f-4577-96fc-828efdac86e7">
886            
887
888<div class="footer"> 
889        <div class="footer-logos-row">
890            <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/74d2a17c-0cc5-49c1-b88e-fabe345fd6bd" 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/74d2a17c-0cc5-49c1-b88e-fabe345fd6bd 320w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/74d2a17c-0cc5-49c1-b88e-fabe345fd6bd 497w" class="footer-logo" sizes="350px" alt="">
891            
892        </div>
893    <div class="footer-contact-row">
894        <div class="footer-info ">
895                    <div class="footer__col">
896                        <h5 class="footer__section-title">Teresa Cowart Team</h5>
897                        <div class="footer__section-content">
898                                <div class="footer__col-content">
899                                    <p class="footer__col-title">Contact</p>                <div class="footer__col-description lp-a lp-pre-line"><div><a href="tel:9125250900">(912) 667-1881</a><br><a href="/cdn-cgi/l/email-protection#f4809186918795b4809186918795979b8395868080919599da979b99"><span class="__cf_email__" data-cfemail="abdfced9ced8caebdfced9ced8cac8c4dccad9dfdfcecac685c8c4c6">[email&#160;protected]</span></a></div></div>
900                                </div>
901                            
902                                <div class="footer__col-content">
903                                    <p class="footer__col-title">Office</p>                <div class="footer__col-description lp-a lp-pre-line"><p style="margin-bottom: 0;">7001 Chatham Center Dr Ste 2400<br>Savannah GA 31405</p>
904                            <p><a href="tel:9127565888">(912) 525-0900</a></p></div>
905                                </div>
906                        </div>
907                    </div>
908                
909                
910                
911        </div>
912
913            <ul class="lp-socials social_icons-style-1 footer-socials">
914            
915                    <li>
916                      <a
917                        href="https://www.facebook.com/TeresaCowartTeam/"
918                        class="lp-socials__link socials__link"
919                        data-wow-delay="0s"
920                        target="_blank"
921                        aria-label="FACEBOOK"
922                      >
923                          <span class="lp-i lp-i--facebook" aria-hidden="true"></span>
924                      </a>
925                    </li>
926                    <li>
927                      <a
928                        href="https://www.instagram.com/teresacowartteam/"
929                        class="lp-socials__link socials__link"
930                        data-wow-delay="0.1s"
931                        target="_blank"
932                        aria-label="INSTAGRAM"
933                      >
934                          <span class="lp-i lp-i--instagram" aria-hidden="true"></span>
935                      </a>
936                    </li>
937                    <li>
938                      <a
939                        href="https://www.yelp.com/biz/teresa-cowart-team-re-max-accent-savannah"
940                        class="lp-socials__link socials__link"
941                        data-wow-delay="0.2s"
942                        target="_blank"
943                        aria-label="YELP"
944                      >
945                          <span class="lp-i lp-i--yelp" aria-hidden="true"></span>
946                      </a>
947                    </li>
948                    <li>
949                      <a
950                        href="https://www.tiktok.com/@teresacowartteam"
951                        class="lp-socials__link socials__link"
952                        data-wow-delay="0.3s"
953                        target="_blank"
954                        aria-label="TIKTOK"
955                      >
956                          <span class="lp-i lp-i--tiktok" aria-hidden="true"></span>
957                      </a>
958                    </li>
959                    <li>
960                      <a
961                        href="https://www.youtube.com/@teresacowartteam/featured"
962                        class="lp-socials__link socials__link"
963                        data-wow-delay="0.4s"
964                        target="_blank"
965                        aria-label="YOUTUBE"
966                      >
967                          <span class="lp-i lp-i--youtube" aria-hidden="true"></span>
968                      </a>
969                    </li>
970                    <li>
971                      <a
972                        href="https://www.google.com/search?q&#x3D;teresa+cowart+real+estate+team&amp;sca_esv&#x3D;181e9cfcc41c4f59&amp;source&#x3D;hp&amp;ei&#x3D;U9O8Z8KgEd6hvr0Pl7KWkAM&amp;iflsig&#x3D;ACkRmUkAAAAAZ7zhY4f1pGCH-oOrDPLH5k4VlGqDyO6u&amp;ved&#x3D;0ahUKEwiClsb8j92LAxXekK8BHReZBTIQ4dUDCBg&amp;uact&#x3D;5&amp;oq&#x3D;teresa+cowart+real+estate+team&amp;gs_lp&#x3D;Egdnd3Mtd2l6Ih50ZXJlc2EgY293YXJ0IHJlYWwgZXN0YXRlIHRlYW0yBRAhGKABSPMzUABYsjJwBHgAkAEAmAFtoAGOE6oBBDI5LjG4AQPIAQD4AQGYAiKgAuETqAIKwgIFEAAYgATCAgsQLhiABBjRAxjHAcICBRAuGIAEwgIKEAAYAxjqAhiPAcICChAuGAMY6gIYjwHCAgsQLhiABBjHARivAcICCBAuGIAEGNQCwgIGEAAYFhgewgILEAAYgAQYhgMYigXCAgUQABjvBcICCBAAGIAEGKIEwgIGEAAYDRgewgIIEAAYCBgNGB7CAggQABiiBBiJBcICBxAhGKABGArCAgUQIRifBZgDA_EFhx9LkKruFPqSBwQzMy4xoAf49AE&amp;sclient&#x3D;gws-wiz#lrd&#x3D;0x88fb0f17e1779229:0xa625619eb30be5b3,1,,,,"
973                        class="lp-socials__link socials__link"
974                        data-wow-delay="0.5s"
975                        target="_blank"
976                        aria-label="GOOGLE"
977                      >
978                          <span class="lp-i lp-i--google" aria-hidden="true"></span>
979                      </a>
980                    </li>
981              </ul>    </div>
982    
983
984        <div class="footer-navigation-row">
985            <p class="footer-navigation-title">navigation</p>
986            
987            <ul class="footer-navigation lp-a">
988                    <li class="footer-navigation__item">
989                            <a  href="/properties/sale" class="footer-navigation__link ">Featured Properties</a>
990
991                    </li>
992                    <li class="footer-navigation__item">
993                            <a  href="/neighborhoods" class="footer-navigation__link ">Neighborhoods</a>
994
995                    </li>
996                    <li class="footer-navigation__item">
997                            <a  href="/home-valuation" class="footer-navigation__link ">Home Valuation</a>
998
999                    </li>
1000                    <li class="footer-navigation__item">
1001                            <a  href="/home-search/listings" class="footer-navigation__link ">Search Homes</a>
1002
1003                    </li>
1004                    <li class="footer-navigation__item">
1005                            <a  href="/contact" class="footer-navigation__link ">Contact Us</a>
1006
1007                    </li>
1008            </ul>
1009        </div>
1010
1011
1012   
1013        <div class="footer-disclaimer-row">
1014            <div class="footer-disclaimer"><div class="luxury-text">
1015<p style="font-size: 12px;">All information is deemed reliable but not guaranteed and should be independently reviewed and verified.<br><img style="margin-top: 20px; width: 100px; height: auto;" src="https://res.cloudinary.com/luxuryp/images/zbxf1j3xdplm6lhfnqo3/realtor-eho-logo-07232021-update-dark"></p>
1016</div></div>
1017            
1018            
1019        </div>
1020    
1021
1022    <div class="footer-bottom-row">
1023            <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/jnymuan6tigs629jigsz" 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/jnymuan6tigs629jigsz 320w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/jnymuan6tigs629jigsz 390w" class="footer-logo" sizes="350px" alt="">
1024
1025        <div class="footer-copyright lp-a">
1026            <div class="footer-copyright__powered">
1027                Powered by <a href="https://www.luxurypresence.com/" class="" target="_blank">Luxury Presence</a>
1028            </div>
1029            
1030            <div class="footer-copyright__privacy">
1031                <span>Copyright © <span class="auto-year-update">2026</span></span>
1032                
1033           
1034                <a href="/terms-and-conditions" class="footer-copyright__privacy-policy">Privacy Policy</a>
1035            </div>
1036        </div>
1037    </div>
1038
1039</div>
1040
1041        </footer>
1042
1043        <div id="modal-global-contact-us" class="modal "
1044            data-el-id=""
1045            style="background-color: ;"
1046            >
1047            <div class="modal-content">
1048                
1049        
1050        <div class="contact-form-modal lp-vertical-paddings" style="--leftPanelBgColor: rgba(201, 238, 248, 1); --textColor:rgba(26, 26, 26, 1); --formBgColor: rgba(255, 255, 255, 1); --formTextColor: rgba(26, 26, 26, 1)">
1051            <div class="contact-form-modal__bg">
1052                <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/e9ec1f6a-8311-4823-8b6d-337ef8c5d3a7" 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/e9ec1f6a-8311-4823-8b6d-337ef8c5d3a7 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/e9ec1f6a-8311-4823-8b6d-337ef8c5d3a7 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/e9ec1f6a-8311-4823-8b6d-337ef8c5d3a7 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/e9ec1f6a-8311-4823-8b6d-337ef8c5d3a7 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/e9ec1f6a-8311-4823-8b6d-337ef8c5d3a7 2560w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/e9ec1f6a-8311-4823-8b6d-337ef8c5d3a7 3303w" sizes="(min-width: 1981px) 12.2222vw, (min-width: 1025px) 424px, 100vw" class="contact-form-modal__bg-image" alt="">
1053            </div>
1054            <div class="contact-form-modal__close-container">
1055                <button class="contact-form-modal__close toggle close lp-btn lp-icon link-icon--plus"></button>
1056            </div>
1057            <div class="contact-form-modal__container">
1058                  <div class="contact-form-modal-details only-desktop">
1059                        <h2 class="contact-form-modal-details__title only-desktop js-contact-title">Get in Touch</h2>
1060                        <div class="contact-form-modal-agent">
1061                            <div class="contact-form-modal-agent__contact">    
1062                                <p class="contact-form-modal-agent__name">Teresa Cowart Team</p>
1063                                <p class="contact-form-modal-agent__phone lp-a">
1064                                  <a class="contact-form-modal-agent__link" href="tel:9126671881">(912) 667-1881</a>
1065                                </p>
1066                                <p class="contact-form-modal-agent__email lp-a">
1067                                  <a class="contact-form-modal-agent__link" href="/cdn-cgi/l/email-protection#3347564156405273475641564052505c445241474756525e1d505c5e"><span class="__cf_email__" data-cfemail="5f2b3a2d3a2c3e1f2b3a2d3a2c3e3c30283e2d2b2b3a3e32713c3032">[email&#160;protected]</span></a>
1068                                </p>
1069                            </div>
1070                            <div class="contact-form-modal-agent__contact">
1071                                <p class="contact-form-modal-agent__addres lp-pre-line"> </p>
1072                            </div>
1073                        </div>
1074                
1075                        <div class="contact-form-modal-details__open"><div class="contact-form-modal-agent__contact">
1076                <p class="contact-form-modal-agent__addres lp-pre-line" style="margin-bottom: 0px !important;">7001 Chatham Center Drive Suite 2400 Savannah, GA 31405</p>
1077                </div>
1078                <p class="contact-form-modal-agent__phone lp-a"><a class="contact-form-modal-agent__link" href="tel:9127565888">(912) 525-0900</a></p></div>
1079                        
1080                
1081                        <div class="contact-form-modal-details__socials">
1082                            <ul class="lp-socials social_icons-style-1 contact-form-modal-details__socials-l
1082ist lp-socials">
1083                            
1084                                    <li>
1085                                      <a
1086                                        href="https://www.facebook.com/TeresaCowartTeam/"
1087                                        class="lp-socials__link contact-form-modal-details__socials-link"
1088                                        data-wow-delay="0s"
1089                                        target="_blank"
1090                                        aria-label="FACEBOOK"
1091                                      >
1092                                          <span class="lp-i lp-i--facebook" aria-hidden="true"></span>
1093                                      </a>
1094                                    </li>
1095                                    <li>
1096                                      <a
1097                                        href="https://www.instagram.com/teresacowartteam/"
1098                                        class="lp-socials__link contact-form-modal-details__socials-link"
1099                                        data-wow-delay="0.1s"
1100                                        target="_blank"
1101                                        aria-label="INSTAGRAM"
1102                                      >
1103                                          <span class="lp-i lp-i--instagram" aria-hidden="true"></span>
1104                                      </a>
1105                                    </li>
1106                                    <li>
1107                                      <a
1108                                        href="https://www.yelp.com/biz/teresa-cowart-team-re-max-accent-savannah"
1109                                        class="lp-socials__link contact-form-modal-details__socials-link"
1110                                        data-wow-delay="0.2s"
1111                                        target="_blank"
1112                                        aria-label="YELP"
1113                                      >
1114                                          <span class="lp-i lp-i--yelp" aria-hidden="true"></span>
1115                                      </a>
1116                                    </li>
1117                                    <li>
1118                                      <a
1119                                        href="https://www.tiktok.com/@teresacowartteam"
1120                                        class="lp-socials__link contact-form-modal-details__socials-link"
1121                                        data-wow-delay="0.3s"
1122                                        target="_blank"
1123                                        aria-label="TIKTOK"
1124                                      >
1125                                          <span class="lp-i lp-i--tiktok" aria-hidden="true"></span>
1126                                      </a>
1127                                    </li>
1128                                    <li>
1129                                      <a
1130                                        href="https://www.youtube.com/@teresacowartteam/featured"
1131                                        class="lp-socials__link contact-form-modal-details__socials-link"
1132                                        data-wow-delay="0.4s"
1133                                        target="_blank"
1134                                        aria-label="YOUTUBE"
1135                                      >
1136                                          <span class="lp-i lp-i--youtube" aria-hidden="true"></span>
1137                                      </a>
1138                                    </li>
1139                                    <li>
1140                                      <a
1141                                        href="https://www.google.com/search?q&#x3D;teresa+cowart+real+estate+team&amp;sca_esv&#x3D;181e9cfcc41c4f59&amp;source&#x3D;hp&amp;ei&#x3D;U9O8Z8KgEd6hvr0Pl7KWkAM&amp;iflsig&#x3D;ACkRmUkAAAAAZ7zhY4f1pGCH-oOrDPLH5k4VlGqDyO6u&amp;ved&#x3D;0ahUKEwiClsb8j92LAxXekK8BHReZBTIQ4dUDCBg&amp;uact&#x3D;5&amp;oq&#x3D;teresa+cowart+real+estate+team&amp;gs_lp&#x3D;Egdnd3Mtd2l6Ih50ZXJlc2EgY293YXJ0IHJlYWwgZXN0YXRlIHRlYW0yBRAhGKABSPMzUABYsjJwBHgAkAEAmAFtoAGOE6oBBDI5LjG4AQPIAQD4AQGYAiKgAuETqAIKwgIFEAAYgATCAgsQLhiABBjRAxjHAcICBRAuGIAEwgIKEAAYAxjqAhiPAcICChAuGAMY6gIYjwHCAgsQLhiABBjHARivAcICCBAuGIAEGNQCwgIGEAAYFhgewgILEAAYgAQYhgMYigXCAgUQABjvBcICCBAAGIAEGKIEwgIGEAAYDRgewgIIEAAYCBgNGB7CAggQABiiBBiJBcICBxAhGKABGArCAgUQIRifBZgDA_EFhx9LkKruFPqSBwQzMy4xoAf49AE&amp;sclient&#x3D;gws-wiz#lrd&#x3D;0x88fb0f17e1779229:0xa625619eb30be5b3,1,,,,"
1142                                        class="lp-socials__link contact-form-modal-details__socials-l
1142ink"
1143                                        data-wow-delay="0.5s"
1144                                        target="_blank"
1145                                        aria-label="GOOGLE"
1146                                      >
1147                                          <span class="lp-i lp-i--google" aria-hidden="true"></span>
1148                                      </a>
1149                                    </li>
1150                              </ul>        </div>
1151                  </div>
1152                    <div class="contact-form-modal-form">
1153                        <h2 class="contact-form-modal-form__title only-mobile js-contact-title">Get in Touch</h2>
1154                        <form action="" class="contact-form-modal-form__form js-form" data-type="contact-form">
1155                            <div class="lp-h-pot">
1156                                  <label for="-if-middleName">Middle Name</label>
1157                                  <input id="-if-middleName" name="middleName" value="" autocomplete="off" tabindex="-1">
1158                            </div> 
1159                            <div class="contact-form-modal-form__group">
1160                                <div class="contact-form-modal-form__group-container lp-input-group">
1161                                    <input required id="-name" name="name" type="text" class="lp-input js-input-name" placeholder="Enter your full name">
1162                                    <label for="-name" class="lp-label contact-form-modal-form__label">Name</label>
1163                                </div>   
1164                                <div class="contact-form-modal-form__group-container lp-input-group">
1165                                    <input required id="-phone" name="phone" type="tel" class="lp-input" placeholder="Your phone">
1166                                    <label for="-phone" class="lp-label contact-form-modal-form__label">Phone</label>
1167                                </div>
1168                            </div>
1169                            <div class="contact-form-modal-form__group lp-input-group">
1170                                <div class="contact-form-modal-form__input-container">
1171                                    <input required id="-email" name="email" type="email" class="lp-input js-email-input" placeholder="@">
1172                                    <div class="contact-form-modal-form__error error">Enter a valid email</div>
1173                                </div>
1174                                
1175                                <label for="-email" class="contact-form-modal-form__label lp-label">Email</label>
1176                            </div>
1177                            <div class="contact-form-modal-form__group lp-input-group">
1178                                <textarea id="-message" name="message" class="contact-form-modal-form__textarea lp-input" placeholder="Type your message"></textarea>
1179                                <label for="-message" class="contact-form-modal-form__label lp-label">Your Message</label>
1180                            </div>
1181                
1182                            <div class="contact-form-modal-form__disclaimer lp-disclaimer">  <div class='lp-tcr-content' style='margin-bottom: 1em;'>
1183                    <span class='lp-tcr-message'>
1184                      By providing your contact information to Teresa Cowart Team, your personal
1185                      information will be processed in accordance with Teresa Cowart Team's
1186                      <a href='/terms-and-conditions' target='_blank'>Privacy Policy</a>. By
1187                      checking the box(es) below, you consent to receive communications
1188                      regarding your real estate inquiries and related marketing and promotional
1189                      updates in the manner selected by you. For SMS text messages, message
1190                      frequency varies. Message and data rates may apply. You may opt out of
1191                      receiving further communications from Teresa Cowart Team at any time. To opt
1192                      out of receiving SMS text messages, reply STOP to unsubscribe.
1193                    </span>
1194                  </div>
1195                  <label style='display: none;' for='-termsAccepted'>Opt
1196                    in/Disclaimer Consent:</label>
1197                  <label class='lp-tcr-content' style='margin-bottom: 1em;'>
1198                    <span class='lp-tcr-checkbox'>
1199                      <input
1200                        type='checkbox'
1201                        name='termsAccepted'
1202                        id='-termsAccepted'
1203                        oninvalid="this.setCustomValidity('Please accept the terms and conditions')"
1204                        oninput="this.setCustomValidity('')"
1205                        required
1206                        value='Yes, I agree to receive email or phone call communications from Teresa Cowart Team.'
1207                      />
1208                    </span>
1209                    <span class='lp-tcr-message'>
1210                      Yes, I agree to receive email or phone call communications from
1211                      Teresa Cowart Team.
1212                    </span>
1213                  </label>
1214                  <label style='display: none;' for='-customConsent'>Opt
1215                    in/Disclaimer Consent:</label>
1216                  <label class='lp-tcr-content' style='margin-bottom: 1em;'>
1217                    <span class='lp-tcr-checkbox'>
1218                      <input
1219                        type='checkbox'
1220                        name='customConsent'
1221                        id='-customConsent'
1222                        value='Yes, I agree to receive SMS text messages from Teresa Cowart Team.'
1223                      />
1224                    </span>
1225                    <span class='lp-tcr-message'>
1226                      Yes, I agree to receive SMS text messages from Teresa Cowart Team.
1227                    </span>
1228                  </label>
1229                
1230                </div>
1231                
1232                            <button type="submit" class="contact-form-modal-submit lp-btn lp-icon button-style-1">
1233                                <div class="contact-form-modal-submit__default">
1234                                  <span class="contact-form-modal-submit__content lp-btn__content">Send Message</span>
1235                                </div>
1236                                <div class="contact-form-modal-submit__loading">
1237                                  <span class="contact-form-modal-submit__content lp-btn__content">Sending</span>
1238                                </div>
1239                                <div class="contact-form-modal-submit__success">
1240                                  <span class="contact-form-modal-submit__content lp-btn__content">Message Sent!</span>
1241                                </div>
1242                            </button>
1243                        </form>
1244                    </div>
1245                    
1246                  <div class="contact-form-modal-details only-mobile">
1247                        <h2 class="contact-form-modal-details__title only-desktop js-contact-title">Get in Touch</h2>
1248                        <div class="contact-form-modal-agent">
1249                            <div class="contact-form-modal-agent__contact">    
1250                                <p class="contact-form-modal-agent__name">Teresa Cowart Team</p>
1251                                <p class="contact-form-modal-agent__phone lp-a">
1252                                  <a class="contact-form-modal-agent__link" href="tel:9126671881">(912) 667-1881</a>
1253                                </p>
1254                                <p class="contact-form-modal-agent__email lp-a">
1255                                  <a class="contact-form-modal-agent__link" href="/cdn-cgi/l/email-protection#3e4a5b4c5b4d5f7e4a5b4c5b4d5f5d51495f4c4a4a5b5f53105d5153"><span class="__cf_email__" data-cfemail="0470617661776544706176617765676b73657670706165692a676b69">[email&#160;protected]</span></a>
1256                                </p>
1257                            </div>
1258                            <div class="contact-form-modal-agent__contact">
1259                                <p class="contact-form-modal-agent__addres lp-pre-line"> </p>
1260                            </div>
1261                        </div>
1262                
1263                        <div class="contact-form-modal-details__open"><div class="contact-form-modal-agent__contact">
1264                <p class="contact-form-modal-agent__addres lp-pre-line" style="margin-bottom: 0px !important;">7001 Chatham Center Drive Suite 2400 Savannah, GA 31405</p>
1265                </div>
1266                <p class="contact-form-modal-agent__phone lp-a"><a class="contact-form-modal-agent__link" href="tel:9127565888">(912) 525-0900</a></p></div>
1267                        
1268                
1269                        <div class="contact-form-modal-details__socials">
1270                            <ul class="lp-socials social_icons-style-1 contact-form-modal-details__socials-l
1270ist lp-socials">
1271                            
1272                                    <li>
1273                                      <a
1274                                        href="https://www.facebook.com/TeresaCowartTeam/"
1275                                        class="lp-socials__link contact-form-modal-details__socials-link"
1276                                        data-wow-delay="0s"
1277                                        target="_blank"
1278                                        aria-label="FACEBOOK"
1279                                      >
1280                                          <span class="lp-i lp-i--facebook" aria-hidden="true"></span>
1281                                      </a>
1282                                    </li>
1283                                    <li>
1284                                      <a
1285                                        href="https://www.instagram.com/teresacowartteam/"
1286                                        class="lp-socials__link contact-form-modal-details__socials-link"
1287                                        data-wow-delay="0.1s"
1288                                        target="_blank"
1289                                        aria-label="INSTAGRAM"
1290                                      >
1291                                          <span class="lp-i lp-i--instagram" aria-hidden="true"></span>
1292                                      </a>
1293                                    </li>
1294                                    <li>
1295                                      <a
1296                                        href="https://www.yelp.com/biz/teresa-cowart-team-re-max-accent-savannah"
1297                                        class="lp-socials__link contact-form-modal-details__socials-link"
1298                                        data-wow-delay="0.2s"
1299                                        target="_blank"
1300                                        aria-label="YELP"
1301                                      >
1302                                          <span class="lp-i lp-i--yelp" aria-hidden="true"></span>
1303                                      </a>
1304                                    </li>
1305                                    <li>
1306                                      <a
1307                                        href="https://www.tiktok.com/@teresacowartteam"
1308                                        class="lp-socials__link contact-form-modal-details__socials-link"
1309                                        data-wow-delay="0.3s"
1310                                        target="_blank"
1311                                        aria-label="TIKTOK"
1312                                      >
1313                                          <span class="lp-i lp-i--tiktok" aria-hidden="true"></span>
1314                                      </a>
1315                                    </li>
1316                                    <li>
1317                                      <a
1318                                        href="https://www.youtube.com/@teresacowartteam/featured"
1319                                        class="lp-socials__link contact-form-modal-details__socials-link"
1320                                        data-wow-delay="0.4s"
1321                                        target="_blank"
1322                                        aria-label="YOUTUBE"
1323                                      >
1324                                          <span class="lp-i lp-i--youtube" aria-hidden="true"></span>
1325                                      </a>
1326                                    </li>
1327                                    <li>
1328                                      <a
1329                                        href="https://www.google.com/search?q&#x3D;teresa+cowart+real+estate+team&amp;sca_esv&#x3D;181e9cfcc41c4f59&amp;source&#x3D;hp&amp;ei&#x3D;U9O8Z8KgEd6hvr0Pl7KWkAM&amp;iflsig&#x3D;ACkRmUkAAAAAZ7zhY4f1pGCH-oOrDPLH5k4VlGqDyO6u&amp;ved&#x3D;0ahUKEwiClsb8j92LAxXekK8BHReZBTIQ4dUDCBg&amp;uact&#x3D;5&amp;oq&#x3D;teresa+cowart+real+estate+team&amp;gs_lp&#x3D;Egdnd3Mtd2l6Ih50ZXJlc2EgY293YXJ0IHJlYWwgZXN0YXRlIHRlYW0yBRAhGKABSPMzUABYsjJwBHgAkAEAmAFtoAGOE6oBBDI5LjG4AQPIAQD4AQGYAiKgAuETqAIKwgIFEAAYgATCAgsQLhiABBjRAxjHAcICBRAuGIAEwgIKEAAYAxjqAhiPAcICChAuGAMY6gIYjwHCAgsQLhiABBjHARivAcICCBAuGIAEGNQCwgIGEAAYFhgewgILEAAYgAQYhgMYigXCAgUQABjvBcICCBAAGIAEGKIEwgIGEAAYDRgewgIIEAAYCBgNGB7CAggQABiiBBiJBcICBxAhGKABGArCAgUQIRifBZgDA_EFhx9LkKruFPqSBwQzMy4xoAf49AE&amp;sclient&#x3D;gws-wiz#lrd&#x3D;0x88fb0f17e1779229:0xa625619eb30be5b3,1,,,,"
1330                                        class="lp-socials__link contact-form-modal-details__socials-l
1330ink"
1331                                        data-wow-delay="0.5s"
1332                                        target="_blank"
1333                                        aria-label="GOOGLE"
1334                                      >
1335                                          <span class="lp-i lp-i--google" aria-hidden="true"></span>
1336                                      </a>
1337                                    </li>
1338                              </ul>        </div>
1339                  </div>
1340            </div>
1341        </div>
1342        
1343            </div>
1344            <button class="close lp-close" type="button" aria-label="close modal">
1345                <span class="lp-close-icon" aria-hidden="true"></span>
1346            </button>
1347        </div>
1348        <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;">
1349          <style>
1350            #qualifying-questions-modal .custom-select-toggle {
1351              border: 1px solid #848484;
1352              border-radius: 8px;
1353              padding: 12px 16px;
1354            }
1355        
1356            #qualifying-questions-modal .custom-select-toggle.is-placeholder {
1357              color: #848484;
1358            }
1359        
1360            #qualifying-questions-modal #qualifying-questions-modal-phoneNumber::placeholder {
1361              color: #848484;
1362              opacity: 1;
1363            }
1364        
1365            #qualifying-questions-modal .disclaimer-more {
1366              display: none;
1367            }
1368        
1369            #qualifying-questions-modal #qualifying-questions-modal-disclaimer-text:not(.collapsed) .disclaimer-more {
1370              display: inline;
1371            }
1372        
1373            #qualifying-questions-modal #qualifying-questions-modal-disclaimer-text:not(.collapsed) .disclaimer-ellipsis {
1374              display: none;
1375            }
1376          </style>
vendor: 119 bytes, lines 1376-1377
1376
1377          <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
1377<script>
1378            function toggleDisclaimerQualifyingQuestionsModal() {
1379              const disclaimerText = document.getElementById('qualifying-questions-modal-disclaimer-text');
1380              const toggleButton = document.getElementById('qualifying-questions-modal-toggle-disclaimer');
1381        
1382              if (disclaimerText.classList.contains('collapsed')) {
1383                disclaimerText.classList.remove('collapsed');
1384                toggleButton.textContent = 'Read less';
1385                toggleButton.setAttribute('aria-expanded', 'true');
1386              } else {
1387                disclaimerText.classList.add('collapsed');
1388                toggleButton.textContent = 'Read more';
1389                toggleButton.setAttribute('aria-expanded', 'false');
1390              }
1391            }
1392          </script>
1392
1393          <div style="max-width: 400px; width: 95%; margin: 0 auto;">
1394            <div style="background: #fff; border: none; border-radius: 16px; color: black; box-shadow: none; position: relative;">
1395              <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;">
1396                <span aria-hidden="true">&times;</span>
1397              </button>
1398              <div style="padding: 40px 30px 32px;">
1399                <div style="text-align: left; margin-bottom: 32px;">
1400                  <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;">
1401                    Thanks, please provide more information to help serve you
1402                  </h2>
1403                </div>
1404                <form id="qualifying-questions-modal-form" data-type="contact-form">
1405                  <input type="hidden" name="source" value="PROFILE_UPDATE" />
1406                  <input type="hidden" name="email" value="" id="qualifying-questions-modal-email" />
1407                  <input type="hidden" name="triggerSource" id="qualifying-questions-modal-triggerSource" value="" />
1408                  <label for="qualifying-questions-modal-email" style="display:none;">
1409                    Email
1410                  </label>
1411                  <label for="qualifying-questions-modal-triggerSource" style="display:none;">
1412                    Trigger Source
1413                  </label>
1414        
1415                  <div style="margin-bottom: 20px;">
1416                    <label for="qualifying-questions-modal-phoneNumber" style="display:none;">
1417                      Phone Number
1418                    </label>
1419                    <input
1420                      type="tel"
1421                      id="qualifying-questions-modal-phoneNumber"
1422                      name="phoneNumber"
1423                      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;"
1424                      pattern="^\+?1?[-.\s]?\(?[0-9]{3}\)?[-.\s]?[0-9]{3}[-.\s]?[0-9]{4}$"
1425                      required
1426                      placeholder="Phone"
1427                      aria-label="Phone Number"
1428                      inputmode="tel"
1429                      autocomplete="tel"
1430                      onfocus="this.style.borderColor='black';"
1431                      onblur="this.style.borderColor='#848484';"
1432                    />
1433                  </div>
1434        
1435                  <div style="margin-bottom: 20px;">
1436                    <label for="qualifying-questions-modal-interest" style="display:none;">
1437                      Interest
1438                    </label>
1439                    <select
1440                      id="qualifying-questions-modal-interest"
1441                      name="interest"
1442                      required
1443                      data-label="Interest"
1444                      aria-label="Interest"
1445                      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;"
1446                      onfocus="this.style.borderColor='black'; this.style.color='black';"
1447                      onblur="this.style.borderColor='#848484'; if(this.value === '') this.style.color='#848484'; else this.style.color='black';"
1448                    >
1449                      <option value="" style="background: #fff; color: #848484;" disabled selected>Interested in...</option>
1450                      <option value="Selling & Buying" style="background: #fff; color: black;">Selling & Buying</option>
1451                      <option value="Selling" style="background: #fff; color: black;">Selling</option>
1452                      <option value="Buying" style="background: #fff; color: black;">Buying</option>
1453                      <option value="Renting" style="background: #fff; color: black;">Renting</option>
1454                      <option value="Other" style="background: #fff; color: black;">Other</option>
1455                    </select>
1456                  </div>
1457        
1458                  <div style="margin-bottom: 32px; font-size: 12px; line-height: 1.2;">
1459                    <label style='display: none;' for='qualifying-questions-modal-qualifying-questions-termsAccepted'>Opt In/Disclaimer Consent:</label>
1460                    <label class='lp-tcr-content'>
1461                      <span class='lp-tcr-checkbox'>
1462                        <input
1463                          type='checkbox'
1464                          id='qualifying-questions-modal-qualifying-questions-termsAccepted'
1465                          name='termsAccepted'
1466                          aria-describedby='qualifying-questions-modal-disclaimer-text'
1467                          oninvalid="this.setCustomValidity('Please accept the terms and conditions')"
1468                          oninput="this.setCustomValidity('')"
1469                          required
1470                        /></span>
1471                      <span class='lp-tcr-message'>
1472                        <div id="qualifying-questions-modal-disclaimer-text" class="collapsed" style="color: #848484;">
1473                          
1474                            I agree to be contacted by
1475                            <strong>Teresa Cowart Team</strong>
1476                            via call, email, and text <span class="disclaimer-more">for real estate services. 
1477                            To opt out, you can reply 'stop' at any time or reply 'help' for assistance. 
1478                            You can also click the unsubscribe link in the emails. 
1479                            Message and data rates may apply. Message frequency may vary.</span>
1480                            <span class="disclaimer-ellipsis">...</span>
1481                            <a href='/terms-and-conditions' target='_blank' rel='noopener noreferrer' style='text-decoration: underline;'>Privacy Policy</a>.
1482                        </div>
1483                        <button
1484                          id="qualifying-questions-modal-toggle-disclaimer"
1485                          type="button"
1486                          style="background: none; border: none; color: #848484; font-size: inherit; font-weight: bold; padding: 0; margin-top: 4px; cursor: pointer;"
1487                          aria-expanded="false"
1488                          onclick="toggleDisclaimerQualifyingQuestionsModal()"
1489                        >
1490                          Read more
1491                        </button>
1492                      </span>
1493                    </label>
1494                  </div>
1495        
1496                  <div>
1497                    <button
1498                      type="submit"
1499                      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;"
1500                      onmouseover="this.style.background='transparent'; this.style.color='black';"
1501                      onmouseout="this.style.background='black'; this.style.color='white';"
1502                    >
1503                      Submit
1504                    </button>
1505                  </div>
1506                </form>
1507              </div>
1508            </div>
1509          </div>
1510        </div>
1511
1512    
1512<script>
1513        (function() {
1514        var lazyVideos = [].slice.call(document.querySelectorAll("video.lazy"));
1515
1516        if ("IntersectionObserver" in window && lazyVideos.length > 0) {
1517            var lazyVideoObserver = new IntersectionObserver(function(entries, observer) {
1518            entries.forEach(function(video) {
1519                if (video.isIntersecting) {
1520                for (var source in video.target.children) {
1521                    var videoSource = video.target.children[source];
1522                    if (typeof videoSource.tagName === "string" && videoSource.tagName === "SOURCE") {
1523                    videoSource.src = videoSource.dataset.src;
1524                    }
1525                }
1526
1527                video.target.load();
1528                video.target.classList.remove("lazy");
1529                lazyVideoObserver.unobserve(video.target);
1530                }
1531            });
1532            });
1533
1534            lazyVideos.forEach(function(lazyVideo) {
1535                lazyVideoObserver.observe(lazyVideo);
1536            });
1537        }
1538        })();
1539    </script>
1539
1540
1541        <!-- Global site tag (gtag.js) - Google Analytics -->
1542        
1542<script defer src="https://www.googletagmanager.com/gtag/js"></script>
1542
1543
1544            <!-- Google Tag Manager -->
1545            
1545<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
1546                new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
1547                j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.defer=true;j.async=false;j.src=
1548                'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
1549            })(window,document,'script','dataLayer','GTM-T9SFQGHZ');</script>
1549
1550            <!-- End Google Tag Manager -->
1551
1552
1553        <!-- LP Tracker (divolte.js) - LP Divolte -->
1554            
1554<script>window.divolteLp=window.divolteLp||function(){(divolteLp.q=divolteLp.q||[]).push(arguments)}</script>
1554
1555        <!-- LP Tracker (eventBus) - LP EventBus -->
1556            
1556<script>window.eventBusLp=window.eventBusLp||function(){(eventBusLp.q=eventBusLp.q||[]).push(arguments)}</script>
1556
1557
1558    
1558<script>
1559        window.dataLayer = window.dataLayer || [];
1560        document.sendGoogleTagManagerEvent = function() {
1561            /* Honor GPC-enabled browsers and prevent GTM event if GPC is enabled. More details: https://global-privacy-control.glitch.me/ */
1562            if (window.navigator.globalPrivacyControl) {
1563                return;
1564            }
1565
1566            dataLayer.push(arguments);
1567        }
1568
1569        document.sendGoogleTagManagerEvent('js', new Date());
1570            document.sendGoogleTagManagerEvent('config', 'G-ZE4ESRE8SP', { page: location.pathname, location: location.href });
1571        document.sendGoogleAnalyticsEvent = function(googleEvent) {
1572            document.sendGoogleTagManagerEvent('event', googleEvent.eventAction || googleEvent.hitType, {
1573                event_category: googleEvent.eventCategory,
1574                event_label: googleEvent.eventLabel,
1575                value: googleEvent.eventValue,
1576                page: googleEvent.page,
1577                location: googleEvent.location
1578            })
1579        };
1580
1581        document.addEventListener("DOMContentLoaded", function() {
1582            (function() {
1583                //If the page has an element with ID of auto-year-update the element will be populated with the current year.
1584                var date = new Date();
1585                var elements = document.getElementsByClassName('auto-year-update');
1586                var i;
1587                for (i = 0; i < elements.length; i++) {
1588                    elements[i].innerText = date.getFullYear();
1589                }
1590            })();
1591            if (window.divolteLp) {
1592                window.divolteLp('sendLpPageView', {});
1593            }
1594            if (window.eventBusLp) {
1595                window.eventBusLp('sendLpPageView', {});
1596            }
1597        });
1598    </script>
1598
1599
1600
1601    
1601<script>
1602    // Function to dynamically load a script
1603    function loadScript(url, callback) {
1604        var script = document.createElement('script');
1605        script.type = 'text/javascript';
1606        script.src = url;
1607        script.defer = true;
1608        script.async = true;
1609        script.onload = callback;
1610        document.head.appendChild(script);
1611    }
1612
1613    // Function to dynamically load CSS file
1614    function loadCSS(url) {
1615        var link = document.createElement("link");
1616        link.rel = "stylesheet";
1617        link.href = url;
1618        document.head.appendChild(link);
1619    }
1620
1621    // Global methods / variables that can be accessed by element js
1622    window.luxuryPresence = {
1623        libs: {
1624            loadJs: loadScript,
1625            loadCss: loadCSS,
1626            jsLibsMap: {
1627                paroller: {
1628                    jsSrc: 'https://d1e1jt2fj4r8r.cloudfront.net/javascript/jquery.paroller.min.js',
1629                    isLoaded: false,
1630                },
1631                ionRangeSlider: {
1632                    jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/js/ion.rangeSlider.min.js',
1633                    cssSrc: 'https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/css/ion.rangeSlider.min.css',
1634                    isLoaded: false,
1635                    requires: ['jquery'],
1636                },
1637                splide: {
1638                    jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/splidejs/4.1.4/js/splide.min.js',
1639                    cssSrc: 'https://cdnjs.cloudflare.com/ajax/libs/splidejs/4.1.4/css/splide-core.min.css',
1640                    isLoaded: false,
1641                },
1642                wow: {
1643                    jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/wow/1.1.2/wow.min.js',
1644                    isLoaded: false,
1645                },
1646                jquery: {
1647                    jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js',
1648                    isLoaded: false,
1649                },
1650                slick: {
1651                    jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick.min.js',
1652                    isLoaded: false,
1653                    requires: ['jquery'],
1654                },
1655                libphonenumber: {
1656                    jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/libphonenumber-js/1.11.8/libphonenumber-js.min.js',
1657                    isLoaded: false,
1658                },
1659            },
1660        },
1661    };
1662    </script>
1662
1663    
1663<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>
1663
1664    
1664<script defer src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.7.8/handlebars.min.js"></script>
1664
1665    
1665<script defer src="https://cdn.jsdelivr.net/npm/[email protected]/dist/handlebars-intl.min.js"></script>
1665
1666    
1666<script defer src="https://cdnjs.cloudflare.com/ajax/libs/superagent/4.1.0/superagent.min.js"></script>
1666
1667    
1667<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>
1667
1668    
1668<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>
1668
1669    
1669<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>
1669
1670
1671    <!-- GOOGLE TRANSLATE SCRIPT -->
1672    
1672<script>
1673        function googleTranslateElementInit() {
1674            // list of languages can be overridden by setting window.customLanguages in the head JS. example `window.customLanguages = 'en,de,fr,ro,sk,pl'`
1675            // Language codes can be taken from here https://cloud.google.com/translate/docs/languages
1676            const DEFAULT_LANGUAGES = 'en,es,zh-CN,zh-TW,tl,vi,ar,ko,ru,de,fr,hi,pt';
1677            document.querySelectorAll('[data-type="TRANSLATE"]').forEach(function(translate){
1678                translate.innerText = '';
1679                new google.translate.TranslateElement({
1680                    pageLanguage: 'en',
1681                    layout: google.translate.TranslateElement.InlineLayout.SIMPLE,
1682                    includedLanguages: window.customLanguages || DEFAULT_LANGUAGES,
1683                }, translate);
1684            });
1685        }
1686    </script>
1686
1687    
1687<script defer src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>
1687
1688            
1688<script defer src="https://accounts.google.com/gsi/intermediate"></script>
1688
1689
1690    <!-- GOOGLE TRANSLATE SCRIPT END-->
1691    
1691<script>
1692
1693        // UI helpers
1694        (function () {
1695
1696            function getSideMenu () {
1697                return document.querySelector('body > div.sidemenu');
1698            }
1699
1700            function sideMenuHide (instant) {
1701                var sideMenu = getSideMenu();
1702                if (!sideMenu || !sideMenu.classList.contains('visible')) {
1703                  return;
1704                }
1705                sideMenu.classList.remove('visible');
1706                sideMenu.dispatchEvent(new CustomEvent('lpui-hide', { detail: { instant: !!instant } }));
1707                window.dispatchEvent(new CustomEvent('lpui-sidemenu-hide', { detail: {instant: !!instant} }));
1708            }
1709
1710            function sideMenuShow () {
1711                var sideMenu = getSideMenu();
1712                if (!sideMenu || sideMenu.classList.contains('visible')) {
1713                  return;
1714                }
1715                sideMenu.classList.add('visible');
1716                sideMenu.dispatchEvent(new Event('lpui-show'));
1717                window.dispatchEvent(new Event('lpui-sidemenu-show'));
1718            }
1719
1720            function sideMenuToggle () {
1721                var sideMenu = getSideMenu();
1722                if (!sideMenu) {
1723                  return;
1724                }
1725                var isSideMenuVisible = sideMenu.classList.contains('visible');
1726                if (isSideMenuVisible) {
1727                    sideMenuHide();
1728                } else {
1729                    sideMenuShow();
1730                }
1731            }
1732
1733            var scrollLockRequests = {};
1734            window.__debug_scrollLockRequests = scrollLockRequests;
1735            var hideScrollStyles = ''+
1736                    'body {'+
1737                    'overflow: hidden;' +
1738                    '}';
1739            var hideScrollId = 'hide-body-scroll-style';
1740
1741            function scrollLock () {
1742                var style = document.createElement('style');
1743                style.id = hideScrollId;
1744                style.textContent = hideScrollStyles;
1745                document.head.appendChild(style);
1746                window.dispatchEvent(new Event('lpui-scroll-locked'));
1747            }
1748
1749            function scrollUnlock () {
1750                document.getElementById(hideScrollId)?.remove();
1751                window.dispatchEvent(new Event('lpui-scroll-unlocked'));
1752            }
1753
1754            function requestScrollLock (lockId) {
1755                var wasLocked = Object.keys(scrollLockRequests).length > 0;
1756                scrollLockRequests[lockId || '__anonymous_lock'] = true;
1757                if (!wasLocked) {
1758                    scrollLock();
1759                }
1760            }
1761
1762            function releaseScrollLock (lockId) {
1763                if (lockId) {
1764                    delete scrollLockRequests[lockId];
1765                    if (!Object.keys(scrollLockRequests).length) {
1766                        scrollUnlock();
1767                    }
1768                } else {
1769                    scrollLockRequests = {};
1770                    window.__debug_scrollLockRequests = scrollLockRequests;
1771                    scrollUnlock();
1772                }
1773            }
1774
1775            function showModal (modalId, options) {
1776                var modal = document.getElementById(modalId);
1777                if (!modal) {
1778                    return;
1779                }
1780
1781                if (!modal.classList.contains('visible')) {
1782                    modal.classList.add('visible');
1783                    if (options && options.scrollLock) {
1784                        window.lpUI.requestScrollLock(modalId);
1785                    }
1786                    modal.dispatchEvent(new Event('lpui-show'));
1787                    window.dispatchEvent(new CustomEvent('lpui-modal-show', { detail: { id: modalId } }));
1788                }
1789
1790                const visibleModals = document.querySelectorAll('.modal.visible');
1791
1792                if (visibleModals.length > 1) {
1793
1794                    const maxZIndex = Array.from(visibleModals).reduce((maxZIndex, modal) => {
1795                        const zIndex = window.getComputedStyle(modal).zIndex;
1796                        const parsedZIndex = zIndex !== 'auto' ? parseInt(zIndex) : 0;
1797                        return Math.max(maxZIndex, parsedZIndex);
1798                    }, 0);
1799
1800                    modal.style.zIndex = maxZIndex + 1;
1801                }
1802
1803            }
1804
1805            function _hideModal (modalEl) {
1806                if (!modalEl) {
1807                    return;
1808                }
1809                if (!modalEl.classList.contains('visible')) {
1810                    return;
1811                }
1812                modalEl.classList.remove('visible');
1813                modalEl.style.zIndex = '';
1814                modalEl.dispatchEvent(new Event('lpui-hide'));
1815                var modalId = modalEl.getAttribute('id');
1816                if (modalId) {
1817                    window.lpUI.releaseScrollLock(modalId);
1818                    window.dispatchEvent(new CustomEvent('lpui-modal-hide', { detail: { id: modalId } }));
1819                }
1820            }
1821
1822            function hideModal (modalId) {
1823                _hideModal(document.getElementById(modalId));
1824            }
1825
1826            function hideClosestModal (el) {
1827              const modal = el?.closest('.modal');
1828              if (!modal) {
1829                return;
1830              }
1831              if (modal.classList) {
1832                _hideModal(modal);
1833                return;
1834              }
1835              if (modal.length && modal[0].classList) {
1836                _hideModal(modal[0]);
1837              }
1838            }
1839
1840            window.lpUI = {
1841                sideMenuHide: sideMenuHide,
1842                sideMenuShow: sideMenuShow,
1843                sideMenuToggle: sideMenuToggle,
1844                requestScrollLock: requestScrollLock,
1845                releaseScrollLock: releaseScrollLock,
1846                showModal: showModal,
1847                hideModal: hideModal,
1848                hideClosestModal: hideClosestModal
1849            }
1850        })();
1851
1852        var stringifyPrimitive = function(v) {
1853            switch (typeof v) {
1854                case 'string':
1855                    return v;
1856
1857                case 'boolean':
1858                    return v ? 'true' : 'false';
1859
1860                case 'number':
1861                    return isFinite(v) ? v : '';
1862
1863                default:
1864                    return '';
1865            }
1866        };
1867
1868        function objectToQuerystring(obj, sep, eq, name) {
1869            // https://github.com/Gozala/querystring/blob/master/encode.js
1870            sep = sep || '&';
1871            eq = eq || '=';
1872            if (obj === null) {
1873                obj = undefined;
1874            }
1875
1876            if (typeof obj === 'object') {
1877                return Object.keys(obj).map(function(k) {
1878                    var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;
1879                    if (Array.isArray(obj[k])) {
1880                        return obj[k].map(function(v) {
1881                            return ks + encodeURIComponent(stringifyPrimitive(v));
1882                        }).join(sep);
1883                    } else {
1884                        return ks + encodeURIComponent(stringifyPrimitive(obj[k]));
1885                    }
1886                }).filter(Boolean).join(sep);
1887
1888            }
1889
1890            if (!name) return '';
1891            return encodeURIComponent(stringifyPrimitive(name)) + eq +
1892                    encodeURIComponent(stringifyPrimitive(obj));
1893        }
1894
1895        function getPath(url, options) {
1896            var parser = document.createElement('a');
1897            parser.href = url || '';
1898            var path = parser.pathname || '';
1899            if (path[0] !== '/') {
1900              // IE does not return path starting with a slash
1901              path = '/' + path;
1902            }
1903
1904            if (options && options.queryString) {
1905                path += parser.search;
1906            }
1907
1908            return path;
1909        }
1910
1911        function getMLSAutocomplete(keyword) {
1912            var searchURL = window.location.protocol + '//' + window.location.hostname + '/home-search/auto_complete';
1913            var query = {
1914                kind: 'listings',
1915                query: keyword
1916            };
1917
1918            return superagent
1919                .get(searchURL)
1920                .query(query)
1921                .then(function(res) {
1922                    var data = res.body || [];
1923                    // Array of listing_auto_complete documents: id, display_address, city, state,
1924                    // price, sold_price, status, status_modified_at, photo_urls (array of URLs).
1925
1926                    return data;
1927                });
1928        }
1929
1930        function getMLSAutocompleteWithFilters(keyword, filters = {}) {
1931            var searchURL = window.location.protocol + '//' + window.location.hostname + '/home-search/auto_complete';
1932
1933            return superagent
1934                .get(searchURL)
1935                .query({ kind: 'listings', query: keyword, ...filters })
1936                .then(function(res) {
1937                    // Same response shape as getMLSAutocomplete.
1938                    return res.body || [];
1939                });
1940        }
1941
1942        function makeMlsLink(data) {
1943            // Code Dupe from utils/googlePlace
1944            // mapping of google data type to mls data type
1945            var mapping = {
1946                neighborhood: 'neighborhood',
1947                locality: 'place',
1948                administrative_area_level_2: 'county',
1949                administrative_area_level_1: 'state',
1950                postal_code: 'postalcode',
1951            };
1952
1953            function _filterTypes(types) {
1954                return types.filter(function(type) { return type !== 'political' });
1955            }
1956
1957            if (!data || !Object.keys(data).length) {
1958                return '/home-search/listings';
1959            }
1960
1961            var newData = {};
1962            _filterTypes(data.types).forEach(function(type) {
1963                if (mapping[type]) {
1964                    newData.search_type = mapping[type];
1965                }
1966            });
1967            newData.omnibox = data.formatted_address;
1968            data.address_components.forEach(function(component) {
1969                _filterTypes(component.types).forEach(function(type) {
1970                    if (mapping[type]) {
1971                        newData[mapping[type]] = component.long_name;
1972                    }
1973                });
1974            });
1975            var bounds = data.geometry.bounds;
1976            var convertedData = Object.assign(bounds, newData);
1977
1978            return '/home-search/listings?' + objectToQuerystring(convertedData);
1979        }
1980
1981        function debounce(func, wait) {
1982            let timeout;
1983            return function(...args) {
1984                const context = this;
1985                clearTimeout(timeout);
1986                timeout = setTimeout(() => func.apply(context, args), wait)
1987            }
1988        }
1989
1990        // Global methods / variables that can be accessed by element js
1991        window.luxuryPresence = {
1992            ...window.luxuryPresence,
1993            defaults: {
1994                companyId: '7ac07672-b054-446c-a74a-437d501f555c',
1995                apiGatewayUrl: '/api-gw',
1996                routerUrl: '/api-nv',
1997                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\
1997n    }\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        updatedAt\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    $companyId: ID!\n    $developmentIds: [ID!]\n    $agentId: String\n    $slug: String\n    $search: String\n    $tag: [String!]\n    $offset: Int\n    $limit: Int\n    $sort: String\n    $sortDir: SortDirection\n    $neighborhoodId: ID\n    $neighborhoodIds: [ID!]\n  ) {\n    developments (\n      companyId: $companyId\n      developmentIds: $developmentIds\n      agentId: $agentId\n      slug: $slug\n      search: $search\n      tag: $tag\n      offset: $offset\n      limit: $limit\n      sort: $sort\n      sortDir: $sortDir\n      neighborhoodId: $neighborhoodId\n      neighborhoodIds: $neighborhoodIds\n    ) {\n      items {\n        id\n        name\n        description\n        descriptionShort\n        slug\n        createdAt\n        updatedAt\n        media {\n          smallUrl\n          mediumUrl\n          largeUrl\n          xLargeUrl\n          xxLargeUrl\n          height\n          width\n          altTagText\n        }\n        logoMedia {\n          smallUrl\n          mediumUrl\n          largeUrl\n          xLargeUrl\n          xxLargeUrl\n          height\n          width\n          altTagText\n        }\n        websiteUrl\n        videoUrl\n        googlePlaceData\n        coordinates\n        mlsLink\n        seoTitle\n        seoDescription\n        featuresAndAmenities {\n          featureIds\n          features {\n            featureId\n            name\n          }\n          description\n        }\n        latitude\n        longitude\n        addressLine1\n        addressLine2\n        city\n        state\n        zipCode\n        country\n        yearCompleted\n        residences\n        availability\n        neighborhoodId\n        developer\n        architect\n        interiorDesigner\n        stories\n        buildingHeight\n        buildingHeightUnit\n        bedMin\n        bedMax\n        bathMin\n        bathMax\n        livingSpaceMin\n        livingSpaceMa
1997x\n        livingSpaceUnit\n        lotSizeMin\n        lotSizeMax\n        lotSizeUnit\n        priceMin\n        priceMax\n        priceCurrency\n        tags\n      }\n      total\n    }\n  }\n","pois":"\n  query PointsOfInterest (\n    $regionId: UUID!\n    $radius: 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"},
1998                propertyPlaceholderImage: {"id":"ff613e7b-8f1b-41c8-a1e9-91fccdc32ac4","alt":null,"bytes":55526,"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/16b0c11e-f5e4-4783-b5cb-dc743b55c12e","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/16b0c11e-f5e4-4783-b5cb-dc743b55c12e","authorUrl":null,"createdAt":"2025-02-25T19
1998:34:41.840Z","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/16b0c11e-f5e4-4783-b5cb-dc743b55c12e","sourceUrl":null,"updatedAt":"2025-02-25T19:34:41.840Z","xLargeUrl":"https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/16b0c11e-f5e4-4783-b5cb-dc743b55c12e","__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/16b0c11e-f5e4-4783-b5cb-dc743b55c12e","description":null,"displayName":"property-teresa","originalUrl":"https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/16b0c11e-f5e4-4783-b5cb-dc743b55c12e","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/16b0c11e-f5e4-4783-b5cb-dc743b55c12e","originalFileName":"Property-Teresa","cloudinaryPublicId":"16b0c11e-f5e4-4783-b5cb-dc743b55c12e"}
1999            },
2000            objectToQuerystring: objectToQuerystring,
2001            getPath: getPath,
2002            getMLSAutocomplete: getMLSAutocomplete,
2003            getMLSAutocompleteWithFilters: getMLSAutocompleteWithFilters,
2004            makeMlsLink: makeMlsLink,
2005            debounce: debounce,
2006        };
2007
2008        var wowOffset = 100;
2009    </script>
2009
2010    
2010<script>
2011        (()=>{function e(e){return e&&e.__esModule?e.default:e}var t=globalThis,r={},i={},s=t.parcelRequired4f7;null==s&&((s=function(e){if(e in r)return r[e].exports;if(e in i){var t=i[e];delete i[e];var s={id:e,exports:{}};return r[e]=s,t.call(s.exports,s,s.exports),s.exports}var o=Error("Cannot find module '"+e+"'");throw o.code="MODULE_NOT_FOUND",o}).register=function(e,t){i[e]=t},t.parcelRequired4f7=s);var o=s.register;o("ikl6F",function(e,t){"use strict";Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.formatMoney=e.exports.convertAmount=e.exports.fetchExchangeRates=e.exports.toSupportedToCurrency=e.exports.toSupportedFromCurrency=e.exports.SUPPORTED_TO_CURRENCIES=e.exports.SUPPORTED_FROM_CURRENCIES=e.exports.DISPLAY_CURRENCIES=e.exports.writeCurrencyCookie=e.exports.readValidCurrencyCookie=e.exports.readCurrencyCookie=e.exports.clearCurrencyCookie=e.exports.CURRENCY_COOKIE_SAME_SITE=e.exports.CURRENCY_COOKIE_PATH=e.exports.CURRENCY_COOKIE_NAME=e.exports.CURRENCY_COOKIE_MAX_AGE_SECONDS=void 0;var r=s("65bUu");Object.defineProperty(e.exports,"CURRENCY_COOKIE_MAX_AGE_SECONDS",{enumerable:!0,get:function(){return r.CURRENCY_COOKIE_MAX_AGE_SECONDS}}),Object.defineProperty(e.exports,"CURRENCY_COOKIE_NAME",{enumerable:!0,get:function(){return r.CURRENCY_COOKIE_NAME}}),Object.defineProperty(e.exports,"CURRENCY_COOKIE_PATH",{enumerable:!0,get:function(){return r.CURRENCY_COOKIE_PATH}}),Object.defineProperty(e.exports,"CURRENCY_COOKIE_SAME_SITE",{enumerable:!0,get:function(){return r.CURRENCY_COOKIE_SAME_SITE}}),Object.defineProperty(e.exports,"clearCurrencyCookie",{enumerable:!0,get:function(){return r.clearCurrencyCookie}}),Object.defineProperty(e.exports,"readCurrencyCookie",{enumerable:!0,get:function(){return r.readCurrencyCookie}}),Object.defineProperty(e.exports,"readValidCurrencyCookie",{enumerable:!0,get:function(){return r.readValidCurrencyCookie}}),Object.defineProperty(e.exports,"writeCurrencyCookie",{enumerable:!0,get:function(){return r.writeCurrencyCookie}});var i=s("gUuHZ");Object.defineProperty(e.exports,"DISPLAY_CURRENCIES",{enumerable:!0,get:function(){return i.DISPLAY_CURRENCIES}}),Object.defineProperty(e.exports,"SUPPORTED_FROM_CURRENCIES",{enumerable:!0,get:function(){return i.SUPPORTED_FROM_CURRENCIES}}),Object.defineProperty(e.exports,"SUPPORTED_TO_CURRENCIES",{enumerable:!0,get:function(){return i.SUPPORTED_TO_CURRENCIES}}),Object.defineProperty(e.exports,"toSupportedFromCurrency",{enumerable:!0,get:function(){return i.toSupportedFromCurrency}}),Object.defineProperty(e.exports,"toSupportedToCurrency",{enumerable:!0,get:function(){return i.toSupportedToCurrency}});var o=s("jCxYG");Object.defineProperty(e.exports,"fetchExchangeRates",{enumerable:!0,get:function(){return o.fetchExchangeRates}});var n=s("igUcG");Object.defineProperty(e.exports,"convertAmount",{enumerable:!0,get:function(){return n.convertAmount}}),Object.defineProperty(e.exports,"formatMoney",{enumerable:!0,get:function(){return n.formatMoney}})}),o("65bUu",function(e,t){"use strict";Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.readValidCurrencyCookie=e.exports.clearCurrencyCookie=e.exports.writeCurrencyCookie=e.exports.readCurrencyCookie=e.exports.CURRENCY_COOKIE_PATH=e.exports.CURRENCY_COOKIE_SAME_SITE=e.exports.CURRENCY_COOKIE_MAX_AGE_SECONDS=e.exports.CURRENCY_COOKIE_NAME=void 0;var r=s("gUuHZ");e.exports.CURRENCY_COOKIE_NAME="lp-currency",e.exports.CURRENCY_COOKIE_MAX_AGE_SECONDS=31536e3,e.exports.CURRENCY_COOKIE_SAME_SITE="Lax",e.exports.CURRENCY_COOKIE_PATH="/";let i=e=>e?.trim().toLowerCase().replace(/^\.+/,"")||void 0,o=e=>"undefined"!=typeof DOMException&&e instanceof DOMException,n=({document:t})=>{let r=`${e.exports.CURRENCY_COOKIE_NAME}=`;return t.cookie.split(";").map(e=>e.trim()).filter(e=>e.startsWith(r)).map(e=>e.slice(r.length))},a=e=>{try{return decodeURIComponent(e)}catch{return}};e.exports.readCurrencyCookie=e=>{let t=(e=>{try{return n(e)[0]}catch(e){if(!o(e))throw e;return}})(e);return void 0===t?void 0:a(t)};let l=(t,r,i,s)=>{var o;let n,a;t.document.cookie=`${e.exports.CURRENCY_COOKIE_NAME}=${r}${o=t.location,n="https:"===o.protocol?"; Secure":"",a=s?`; Domain=${s}`:"",`; Path=${e.exports.CURRENCY_COOKIE_PATH}; Max-Age=${i}; SameSite=${e.exports.CURRENCY_COOKIE_SAME_SITE}${n}${a}`}`};e.exports.writeCurrencyCookie=(t,s)=>{let a,d=(0,r.toSupportedToCurrency)(s);if(!d)return!1;let c=i(t.domain);try{if(a=n(t)[0],c&&l(t,"",0,void 0),l(t,encodeURIComponent(d),e.exports.CURRENCY_COOKIE_MAX_AGE_SECONDS,c),(0,e.exports.readCurrencyCookie)(t)===d)return!0}catch(e){if(!o(e))throw e}return c&&void 0!==a&&((t,r)=>{try{if(n(t).includes(r))return;l(t,r,e.exports.CURRENCY_COOKIE_MAX_AGE_SECONDS,void 0)}catch(e){if(!o(e))throw e}})(t,a),!1},e.exports.clearCurrencyCookie=e=>{let t=i(e.domain);try{t&&l(e,"",0,void 0),l(e,"",0,t)}catch(e){if(!o(e))throw e}},e.exports.readValidCurrencyCookie=(t,{enabled:s,enabledCurrencies:d})=>{if(!s)return;let c=(e=>{try{let t=n(e);if(!i(e.domain)||t.length<2)return t[0];return l(e,"",0,void 0),n(e)[0]}catch(e){if(!o(e))throw e;return}})(t);if(void 0===c)return;let u=new Set(d.map(r.toSupportedToCurrency).filter(e=>!!e)),h=(0,r.toSupportedToCurrency)(a(c));
2011if(h&&u.has(h))return h;(0,e.exports.clearCurrencyCookie)(t)}}),o("gUuHZ",function(e,t){"use strict";Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.toSupportedToCurrency=e.exports.SUPPORTED_TO_CURRENCIES=e.exports.DISPLAY_CURRENCIES=e.exports.toSupportedFromCurrency=e.exports.SUPPORTED_FROM_CURRENCIES=void 0,e.exports.SUPPORTED_FROM_CURRENCIES=["usd","cad","eur","gbp"];let r=(e,t)=>{if("string"!=typeof e)return;let r=e.toLowerCase();return t.includes(r)?r:void 0};e.exports.toSupportedFromCurrency=t=>r(t,e.exports.SUPPORTED_FROM_CURRENCIES),e.exports.DISPLAY_CURRENCIES=[{code:"usd",name:"US dollar"},{code:"eur",name:"Euro"},{code:"gbp",name:"Pound sterling"},{code:"cad",name:"Canadian dollar"},{code:"chf",name:"Swiss franc"},{code:"brl",name:"Brazilian real"},{code:"mxn",name:"Mexican peso"},{code:"sek",name:"Swedish krona"},{code:"nok",name:"Norwegian krone"},{code:"dkk",name:"Danish krone"},{code:"ars",name:"Argentine peso"},{code:"cop",name:"Colombian peso"},{code:"clp",name:"Chilean peso"},{code:"pen",name:"Peruvian sol"},{code:"dop",name:"Dominican peso"},{code:"gtq",name:"Guatemalan quetzal"},{code:"crc",name:"Costa Rican colón"},{code:"bob",name:"Bolivian boliviano"},{code:"pyg",name:"Paraguayan guaraní"},{code:"kyd",name:"Cayman Islands dollar"}],e.exports.SUPPORTED_TO_CURRENCIES=e.exports.DISPLAY_CURRENCIES.map(e=>e.code),e.exports.toSupportedToCurrency=t=>r(t,e.exports.SUPPORTED_TO_CURRENCIES)}),o("jCxYG",function(e,t){"use strict";Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.fetchExchangeRates=void 0;var r=s("gUuHZ");let i=async(e,{baseUrl:t,signal:i,fetch:s,onError:o})=>{let n=(0,r.toSupportedFromCurrency)(e);if(!n)return{};let a=`${t.replace(/\/$/,"")}/api/v1/exchange-rates?from=${encodeURIComponent(n)}`;try{let e=await (s??fetch)(a,{credentials:"omit",signal:i});if(!e.ok)throw Error(`Exchange rates HTTP ${e.status}`);var l=await e.json();let t=l?.rates;if("object"!=typeof t||null===t)return{};let o={};return Object.entries(t).forEach(([e,t])=>{let i=(0,r.toSupportedToCurrency)(e);i&&"number"==typeof t&&Number.isFinite(t)&&t>0&&(o[i]=t)}),o}catch(e){try{o?.(e)}catch(e){console.warn("fetchExchangeRates: onError callback threw",e)}return{}}};e.exports.fetchExchangeRates=i}),o("igUcG",function(e,t){"use strict";Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.formatMoney=e.exports.convertAmount=void 0;var r=s("gUuHZ");e.exports.convertAmount=(e,t)=>{if(Number.isFinite(e)&&Number.isFinite(t)&&!(t<=0))return e*t},e.exports.formatMoney=(e,t,{precision:i=0}={})=>{let s=(0,r.toSupportedToCurrency)(t);if(!s||!Number.isFinite(e))return;let o=Number.isInteger(i)?i:0,n=Number.isInteger(e)?0:Math.min(Math.max(o,0),20);return new Intl.NumberFormat("en-US",{style:"currency",currency:s.toUpperCase(),minimumFractionDigits:n,maximumFractionDigits:n}).format(e)}});var n={},a={};a={getVideoFirstFrame(e){let t="https://res.cloudinary.com/";if(!e||!e.startsWith(t))return null;let r=e.replace(t,"").replace("f_auto:video","f_auto").split("/");if(-1===r[1].toLowerCase().indexOf("video"))return null;let i=r[r.length-1];i.lastIndexOf(".")>-1?i=`${i.slice(0,i.lastIndexOf("."))}.jpg`:i+=".jpg",r[r.length-1]=i;let s=3;"videos"===r[1].toLowerCase()&&""!==r[2]&&(s=2);let o=/^(?:[a-z]{1,3}|\$\w+)_\S+$/;for(;s<r.length-1&&o.test(r[s]);)s++;return r.splice(s,0,"so_0,eo_0"),t+r.join("/")}};let l={amp:"&",lt:"<",gt:">",quot:'"',apos:"'",nbsp:" "},d=/&(?:amp|lt|gt|quot|apos|nbsp|#(?:[0-9]+|[xX][0-9a-fA-F]+));/y,c=/[<&]/g,u=/["'>]/g,h=/<\/p\s*>|<br\s*\/?>|[\r\n\u2028\u2029]/g;function p(e,t){let r="";for(let i=0;i<e.length;){c.lastIndex=i;let s=c.exec(e);if(!s){r+=e.slice(i);break}let o=s.index;r+=e.slice(i,o);let n="&"===e[o]?function(e,t){d.lastIndex=t;let r=d.exec(e);return{text:r?function(e){if("#"!==e[1])return l[e.slice(1,-1)];
2011let t="x"===e[2]||"X"===e[2],r=parseInt(e.slice(t?3:2,-1),t?16:10);return 0===r||r>1114111||r>=55296&&r<=57343?e:160===r?" ":String.fromCodePoint(r)}(r[0]):"&",end:r?d.lastIndex:t+1}}(e,o):function(e,t,r){let i=function(e,t){let r=null;u.lastIndex=t+1;let i=u.exec(e);for(;i;){let t=i[0];if(r)t===r&&(r=null);else if('"'===t||"'"===t)r=t;else if(">"===t)return u.lastIndex;i=u.exec(e)}return -1}(e,t);return{text:-1===i?"<":function(e,t,r,i){if(!i)return"";let s=e.slice(t,r);if(/^<br\s*\/?>$/.test(s))return"&#10;";if(/^<\/p\s*>$/.test(s)){h.lastIndex=r;let t=h.exec(e);if(t&&"<"===t[0][0])return"&#10;"}return""}(e,t,i,r),end:-1===i?t+1:i}}(e,o,t);r+=n.text,i=n.end}return r}n=function(e,{isEqual:t}){let r=[{field:"thumbnailUrl",w:320},{field:"smallUrl",w:960},{field:"mediumUrl",w:1280},{field:"largeUrl",w:1920},{field:"xLargeUrl",w:2560},{field:"xxLargeUrl",w:3456}],i=function(e,t,r){let i="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 s="number"==typeof r?r:0,o=Number.isInteger(e)?0:s,n={minimumFractionDigits:o,maximumFractionDigits:o};return"USD"===t?`$${e.toLocaleString(i,n)}`:"CAD"===t?`$${e.toLocaleString(i,n)} CAD`:"EUR"===t?`\u{20AC}${e.toLocaleString(i,n)}`:"GBP"===t?`\xa3${e.toLocaleString(i,n)}`:"PERCENT"===t?`${e}%`:"number"==typeof r&&r>-1?e.toLocaleString(i,{maximumFractionDigits:r}):e.toLocaleString(i)},s=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 r,i,a=t||{};switch(a.mode){case"short":r=o(e),i=a.frequencySeparator||"/";break;case"standard":case"std":r=n(e),i=a.frequencySeparator||"/";break;default:r=s(e),i=a.frequencySeparator||" "}return r?a.frequencyTag||a.frequencyClass?`${i}<${a.frequencyTag||"span"}${a.frequencyClass?` class="${a.frequencyClass}"`:""}>${r}</${a.frequencyTag||"span"}>`:i+r:""};return{isEmpty(e,t){let r=!e||"string"==typeof e&&!e.trim()||!Object.keys(e).length;return t.fn?r?t.fn(this):t.inverse(this):r},ifEquals(e,r,i){return t(e,r)?i.fn(this):i.inverse(this)},"raw-helper":function(e){return e.fn()},striptags:e=>e?p(e=(e=e.replace(/<\!--(.|[\r\n])*?-\->/g,"")).replace(/<(xml|style|svg)("[^"]*"|'[^']*'|[^>])*>(.|[\r\n])*?<\/\1>/gi,""),!1):"",striptagsLineBreaks:e=>e?p(e=(e=e.replace(/<\!--(.|[\r\n])*?-\->/g,"")).replace(/<(xml|style|svg)("[^"]*"|'[^']*'|[^>])*>(.|[\r\n])*?<\/\1>/gi,""),!0):"",truncate:(e,t,r)=>e?e.length>t?"string"==typeof r?e.slice(0,t-r.length)+r:e.slice(0,t):e:"",setSubArray(e=[],t,r,i,s){s.data.root[i]=e.slice(t,r)},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:s,formatFrequencyShort:o,lpFormatFrequency:(e,t)=>l(e,t&&t.hash),subArray(e,t,r,i){return e>=t&&e<r?i.fn(this):i.inverse(this)},formatPropertyStatus(e,t,r){let i="";switch(e){case"SOLD":i="Sold";break;case"FOR_SALE":i="For Sale";break;case"COMING_SOON":i="Coming Soon";break;case"INACTIVE":i="Inactive";break;case"POCKET_LISTING":i="Pocket Listing";break;case"PENDING":i="Pending";break;case"UNDER_CONTRACT":i="Under Contract";break;case"ACTIVE_UNDER_CONTRACT":i="Active Under Contract";break;default:i=e}return("Sold"===i||"Leased"===i)&&t&&"string"==typeof r&&r&&(i+=` on ${r}`),i},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 r="current"===e?new Date:new Date(e);if(Number.isNaN(r.getTime()))return"";if("YYYY"===t||"year"===t)return`${r.getFullYear()}`;if("MM/DD/YY"===t){let e=r.getMonth()+1;return e<10&&(e=`0${e.toString()}`),`${e}/${r.getDate()}/${r.getFullYear().toString().substr(-2)}`}return`${["January","February","March","April","May","June","July","August","September","October","November","December"][r.getMonth()]} ${r.getDate()}, ${r.getFullYear()}`},openHousesFormat(e,t,r){if(!e||!t)return"";let i=e=>{let t=e.getHours();t>12&&(t-=12);let r=`${t}:${e.getMinutes()>9?e.getMinutes():"0"+e.getMinutes()}`;return e.getHours()>11?r+="PM":r+="AM",r},s="",o=e,n=t;
2011r&&(o=new Date(e).toLocaleString("en-US",{timeZone:r}),n=new Date(t).toLocaleString("en-US",{timeZone:r}),[,,,s]=new Date(t).toLocaleString("en-US",{timeZone:r,timeZoneName:"short"}).split(" "));let a=new Date(o),l=a.toLocaleDateString("en-US"),d=i(a),c=i(new Date(n));return`${l} ${d} - ${c} ${s}`},math:(e,t,r)=>(e=parseFloat(e),({"+":e+(r=parseFloat(r)),"-":e-r,"*":e*r,"/":e/r,"%":e%r})[t]),findByKey(e,t,r,i){let s=(e||[]).find(e=>e[t]===r);return i.fn(s)},capitalize(e,t,r){let i;return"string"==typeof e&&e.length&&(i=e.toLowerCase().split(t).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ").toString()),i},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,r,i){let s="",o=null;i.data&&(o=e.createFrame(i.data));let n=(r||[]).filter(Boolean);if(n&&n.length){let e=0;s=n.reduce((r,s,n)=>{let a=(t||[]).find(e=>e.id===s);return a?(o&&(o.index=n-e),r+i.fn(a,{data:o})):(e+=1,r)},"")}else for(let e=0,r=(t||[]).length;e<r;e++)o&&(o.index=e),s+=i.fn(t[e],{data:o});return s},ifIn(e,t,r){return t&&t.indexOf(e)>-1?r.fn(this):r.inverse(this)},partial:(t,r)=>(e.registerPartial(t,e.compile(r.fn())),`
2011<script type="text/x-handlebars-template" class="${t} pagination-script">${r.fn()}<\/script>`),numCompare(e,t,r,i){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}})[r](e,t)?!i.fn||i.fn(this):!!i.fn&&i.inverse(this)},lpFormatNumber:i,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,r)=>e&&e.join?e.join("string"==typeof t?t:", "):"",dedupe(t,r,i){let s=null,o=0,n=new Set;return i.data&&(s=e.createFrame(i.data)),(t||[]).reduce((e,t,a)=>{let l=r?t[r]:t;return!n.has(l)||r&&void 0===l?(n.add(l),s&&(s.index=a-o),e+i.fn(t,{data:s})):(o+=1,e)},"")},JSONstringify:(e,t)=>JSON.stringify(e),formatPropertyPrice(...t){let r=t[t.length-1].hash,s=t.length>1?t[0]:r.property,o=r.precision||0;t.length>2&&(r.mode=t[1]),r.mode||(r.mode="short");let n=t.length>3?t[2]:r.separator;if("string"!=typeof n&&(n=" | "),s.isPasswordProtected)return"Exclusive Listing";let a=t.length>4?t[3]:r.priceUponRequestText;if("string"!=typeof a&&(a="Price Upon Request"),s.priceUponRequest)return a;let d=s.salesPrice,c=null;"SOLD"!==s.status&&"Leased"!==s.status&&s.reducedPrice&&(r.reducedClass?c=s.reducedPrice:d=s.reducedPrice);let u="";c&&(u+=`<${r.reducedTag||"span"} class="${r.reducedClass}">${i(c,s.currency,o)}</${r.reducedTag||"span"}>`),d&&(d=i(d,s.currency,o),r.priceTag||r.priceClass?u+=`<${r.priceTag||"span"}${r.priceClass?` class="${r.priceClass}"`:""}>${d}</${r.priceTag||"span"}>`:u+=d);let h=s.leasePrice&&i(s.leasePrice,s.currency,o);if(h){u&&(u+=n);let e=`${h}${l(s.leasePeriod,r)}`;r.leaseTag||r.leaseClass?u+=`<${r.leaseTag||"span"}${r.leaseClass?` class="${r.leaseClass}"`:""}>${e}</${r.leaseTag||"span"}>`:u+=e}
2011return new e.SafeString(u)},mediaImage(t,i={}){if(!t)return;let{lazy:s,...o}=i.hash,n="",a="";if("string"==typeof t)n=t;else{let e={},{height:s,width:l,altTagText:d}=t;r.forEach(r=>{t[r.field]&&!e[t[r.field]]&&(e[t[r.field]]=r.w)});let c=Object.keys(e);if(!c.length)return;if(d&&(o.alt=d),s&&l&&(s>=l&&(o.class?o.class+=" portrait":o.class="portrait"),"setDims"in i.hash&&(o.width=l,o.height=s)),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&&(a=c.map(t=>`${t} ${e[t]}w`).join(", "),c.sort((t,r)=>Math.abs(e[t]-1280)-Math.abs(e[r]-1280))),n=c[0]}delete o.setDims,a||delete o.sizes,"alt"in o||(o.alt=""),!("loading"in o)&&(i?.data?.root?.sectionIndex>1||s)&&(o.loading="lazy");let l=Object.keys(o).map(t=>`${e.escapeExpression(t)}="${e.escapeExpression(o[t])}"`).join(" ");return new e.SafeString(`<img src="${n}"${a?` srcset="${a}"`:""}${l?` ${l}`:""}>`)},bgImage:e=>e?"string"==typeof e?e:e.largeUrl||e.url||"":"",concat(...e){let t="";for(let r in e)null!==e[r]&&void 0!==e[r]&&"object"!=typeof e[r]&&(t+=e[r]);return t},setVideoExtension(e,t){if(!e||!t)return"";let r=new URL(e);if("res.cloudinary.com"!==r.host)return r.pathname.endsWith(`.${t}`)?e:"";let i=r.pathname.lastIndexOf("."),s=r.pathname;return -1!==i&&(s=r.pathname.substr(0,i)),r.pathname=`${s}.${t}`,r.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 r=`${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="${r}" type="video/${e.format}${e.htmlCodecs}">`}).join("\n")},cloudinaryVideoFirstFrame:a.getVideoFirstFrame,initials(e,t){if(!e)return"";t?.hash?.endChar&&(e=e.split(t.hash.endChar)[0]);let r=+t?.hash?.maxChars||2,i=e.match(/\b\w/g)?.slice(0,r);return i?(t?.hash?.addText&&(i=i.map(e=>e+t.hash.addText)),i.join(t?.hash?.joinWith||"").toUpperCase()):""},normalizePhone(e){if(!e)return"";let t=String(e).trim();return(t.startsWith("+")?"+":"")+t.replace(/\D/g,"")}}};class m{constructor(e,t,r){if(this.config=e,this.window=t,this.document=r,!this.destroy)throw Error("Controllers must implement a deconstructor")}}let g="lp_lead_form_conversion_fired";function y(e,t){if(e&&t&&"function"==typeof t.sendGoogleTagManagerEvent&&!function(e){try{return"true"===e.sessionStorage.getItem(g)}catch{return!1}}(e))try{t.sendGoogleTagManagerEvent("event","generate_lead");try{e.sessionStorage.setItem(g,"true")}catch{}}catch{}}function f(e){return!!e&&(!!e.expired||Date.now()>=e.expiresAt)}let b="/api/v1/home-valuation";class v extends m{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 r=t.indexOf(", call time frame:");return -1!==r&&(t=t.substring(0,r).trim()),t}_transformAddressComponents(e){let t=t=>(e.find(e=>e.componentType===t)||{}).componentName?.text,r={},i=t("street_number"),s=t("route"),o=t("administrative_area_level_1"),n=t("postal_code"),a=t("subpremise"),l=t("locality")||t("sublocality_level_1")||t("neighborhood");return i&&(r.streetNumber=i),s&&(r.streetName=s),l&&(r.city=l),o&&(r.state=o),n&&(r.zipcode=n),a&&(r.addressLine2=a),r}_extractAddressAndCoordinates(e){let t=null,r=null;if(e?.result){let{result:i}=e;i.address?.addressComponents&&(t=this._transformAddressComponents(i.address.addressComponents)),i.geocode?.location&&(r={latitude:i.geocode.location.latitude,longitude:i.geocode.location.longitude})}return{structuredAddress:t,coordinates:r}}_filterEmptyStrings(e){let t={};for(let[r,i]of Object.entries(e))""!==i&&null!=i&&(t[r]=i);return t}_getRawAddress(e){let t=e.activity.content||{},r=e.activity.comments_attributes?.[0]?.text;return[t.address,t["property-address"],t.property_address,t.Property_Address,r,t.message,t.homeValuationAddress,t.propertyAddress].map(e=>e&&this._cleanAddressString(e)).find(Boolean)||""}_logLeadEvent(e,t,r=null){let i={event:e,companyId:this.config.companyId,websiteId:this.config.websiteId,timestamp:new Date().toISOString(),hasEmail:!!t.activity?.author_email,hasAddress:!!this._getRawAddress(t)};if(r&&(i.errorMessage=r.userMessage||(r.status?`Request failed with status ${r.status}`:"An error occurred"),i.errorName=r.name,i.errorStatus=r.status),console.error(`[HomeValuation] ${e}`,JSON.stringify(i)),this.window.posthog)try{this.window.posthog.capture(e,i)}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
2011ontact 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,r,i){let s=this._formatStructuredAddress(r)||this._getRawAddress(e);if(!s)throw Error("Unable to extract home valuation address from form data");let o={companyId:e.companyId,homeValuationAddress:s,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},n={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
2011ourceResource,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||{}},a=this._filterEmptyStrings(n);return{...o,...a,...r&&{address:r},...i&&{coordinates:i}}}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 r=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(r,e),r.status=t,r}_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,r){let i=new AbortController,s=setTimeout(()=>i.abort(),1e4);try{let o=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t),signal:i.signal});clearTimeout(s);let n=await o.text(),a=this._parseResponsePayload(n);if(!o.ok)throw this._createResponseError(a,o.status);if(a&&"success"===a.status&&a.redirectUrl){if(f(r))return a;if(!this._isSafeRedirectUrl(a.redirectUrl))return console.error("Home valuation: refusing redirect to unsupported protocol"),a;return this.window.location.href=a.redirectUrl,{redirected:!0,url:a.redirectUrl}}return a}catch(e){throw clearTimeout(s),e}}async _submitHomeValuationRequest(e){let t=this._resolveValuationApiBase();this._logLeadEvent("home_valuation_submission_started",e);try{let r=this._getRawAddress(e),i=null;try{i=await this._validateAddressSafely(r)}catch(t){throw this._logLeadEvent("home_valuation_address_validation_failed",e,t),t}let s=null;try{s=await this._getHomeValuationEstimateSafely(i)}catch(t){this._logLeadEvent("home_valuation_estimate_failed",e,t),s=null}let{structuredAddress:o,coordinates:n}=this._extractAddressAndCoordinates(i),a=`${t}${b}`,l=this._buildHomeValuationData(e,s,o,n),d=await this._submitLead(a,l,e.deadline);return this._logLeadEvent("home_valuation_submission_success",e),d}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:r}=this,i=t.googleMapsAPIKey;if(!i&&r.luxuryPresence?.mapApiLoader&&(i=await r.luxuryPresence.mapApiLoader.getMapApiKey()),!i)throw Error("Google Maps API key not configured");let s=new AbortController,o=setTimeout(()=>s.abort(),1e4);try{let t=await fetch(`https://addressvalidation.googleapis.com/v1:validateAddress?key=${i}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({address:{addressLines:[e]},enableUspsCass:!1}),signal:s.signal});if(clearTimeout(o),!t.ok){let e=Error(`Address validation failed: ${t.status}`);throw e.status=t.status,e}return t.json()}catch(e){throw clearTimeout(o),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()}${b}`;if(!e?.result?.address?.addressComponents)return null;let r=this._transformAddressComponents(e.result.address.addressComponents);if(!this._hasMandatoryAddressFields(r))return this._logMissingAddressFields(r),null;let i=this._buildAddressQueryString(r),s=`${t}?${i}`,o=new AbortController,n=setTimeout(()=>
2011o.abort(),1e4);try{let e=await fetch(s,{headers:{Accept:"application/json"},signal:o.signal});if(clearTimeout(n),!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(n),e}}}let w="middleName",E="redirect-pending",_=["name","firstName","lastName",w,"email","phone","phoneNumber","source","message","mlsId","sourceUrl"],S="lp_map_key_failed",C="oauthSuccess",I={cookieyes:{eventName:"cookieyes_consent_update",hasAnalyticsConsent:e=>(function(e){let t=e.cookie.match(/cookieyes-consent=([^;]+)/);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 A(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function x(e,t){t.forEach(t=>{let r=e[t];Array.isArray(r)&&0===r.length&&delete e[t]})}function R(e,t,r,i){let s=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])),o=i?.merge?s.flat():s.find(e=>e.length>0)??[];t.forEach(t=>{delete e[t]}),o.length>0&&(e[r]=[...new Set(o)])}function T(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 r=[...e.socialLinks].sort((e,t)=>{let r=e.type?.toLowerCase()||"",i=t.type?.toLowerCase()||"";return r.localeCompare(i)});t.socialLinks=r;let i={youtube:"urlYoutube",facebook:"urlFacebook",instagram:"urlInstagram",linkedin:"urlLinkedin",podcast:"urlPodcast",twitter:"urlTwitter"};r.forEach(e=>{let r=i[e.type?.toLowerCase()??""];r&&(t[r]=e.link)})}return t}function L(e){return e&&Array.isArray(e)?e.map(e=>T(e)):e}function k(e){let{region:t}=e;if(!A(t))return e;let{schools:r,pois:i,...s}=t,o={...s,schools:A(r)?r.data??[]:[],...Array.isArray(i)?{pois:i.map(e=>({...e,category:"string"==typeof e.category?e.category.toUpperCase():e.category}))}:{}};return{...e,region:o}}function M(e){return e&&Array.isArray(e)?e.map(e=>k(e)):e}function $(e){let t=e.featuresAndAmenities;if(!Array.isArray(t))return e;let r=t.map(e=>({featureIds:e.featureIds??[],features:e.features??[],description:e.description}));return{...e,featuresAndAmenities:r}}function U(e){return e&&Array.isArray(e)?e.map(e=>$(e)):e}function P(e,t){return A(e)?t(e):e}function O(e,t){return Array.isArray(e)?t(e):e}var N={};N=`
2012  query PropertyDisclaimers($input: PropertyDisclaimersInput!) {
2013    propertyDisclaimers(input: $input) {
2014      feedId
2015      listingId
2016      resolvedFromListing
2017      listingCardAttribution
2018      listingDetailCourtesy
2019      listingDetailFooter
2020      logo
2021    }
2022  }
2023`;let D={mlsAttribution:"listingCardAttribution",mlsLogo:"logo",listingDetailCourtesy:"listingDetailCourtesy",listingDetailFooter:"listingDetailFooter"};var F={};F=s("ikl6F");let B=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,this.currencyConversionEnabled=!1,this.enabledCurrencies=[]}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}setCurrencyConversion({enabled:e,enabledCurrencies:t}={}){this.currencyConversionEnabled=!0===e,this.enabledCurrencies=Array.isArray(t)?t.filter(e=>"string"==typeof e):[]}setEventBus({enabled:e,apiKey:t,url:r}){this.eventBus={enabled:e,apiKey:t,url:r}}}({}),q=new class extends m{constructor(e,t,r){super(e,t,r),this.setLoginState=this.setLoginState.bind(this),this.pageId=null,this.modals=[],this.exitModalTriggered={},this.exitModalEventListeners=[]}initialize(e){try{let{config:t,document:r}=this;this.pageId=t.pageId,this.modals=r.querySelectorAll("body > #modals >
2023 .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,r=new Date().getTime()+864e5,i=`modal-controller-${e}`;try{t.localStorage.setItem(i,JSON.stringify(r))}catch(e){}}setLoginState(){let{window:e}=this;try{e.localStorage.setItem("isSignedUp","true")}catch(e){}}getModalWithExpiry(e){let{window:t}=this,r=t.localStorage,i=r.getItem(`modal-controller-${e}`);if(!i)return!1;let s=JSON.parse(i);return!(new Date().getTime()>s)||(r.removeItem(`modal-controller-${e}`),!1)}show(e,t={}){let{window:r}=this,i=this.getModalWithExpiry(e);(e&&!i||!0===t.forced)&&(r.lpUI.showModal(`modal-${e}`,t),this.setModalWithExpiry(e))}_attachModalHandler(e){let{pageId:t}=this,{trigger:r,pageSpecific:i}=e;(!i||e.pages.map(e=>e.pageId).includes(t))&&("EXIT"===r?this._exitModalHandler(e):"TIMER"===r?this._timerModalHandler(e):"FORCED"===r&&this._forcedModalHandler(e))}_exitModalHandler(e){let t=this,{document:r,exitModalTriggered:i}=this,{modalId:s}=e;function o(e){!i[s]&&(e.toElement||e.relatedTarget||(t.show(s),i[s]=!0))}r.addEventListener("mouseout",o),this.exitModalEventListeners.push(o)}_timerModalHandler(e){let{modalId:t,timerDelay:r}=e;setTimeout(()=>{this.show(t)},r)}_forcedModalHandler(e){let{modalId:t}=e,{window:r,document:i}=this;if("true"!==r.localStorage.getItem("isSignedUp")){let e=i.querySelector(`#modal-${t}`),s=e?.querySelector("form"),o=s?.dataset.delay||2e3;s.addEventListener("formsubmitted",()=>{this.setLoginState()}),r.addEventListener("oauthSuccess",()=>{this.setLoginState(),s.classList.add("success"),setTimeout(()=>{r.lpUI.hideModal(`modal-${t}`),s.reset(),s.classList.remove("success")},o)}),this.show(t,{forced:!0})}}}(B,window,document),V=new class extends m{constructor(e,t,r){super(e,t,r),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:r}=this,i=e.target.closest("button, a");if(!i)return;let s=i.dataset.type||"",o=i.href||i.dataset.href||"",n=i.target||"",{submit:a}=i.dataset;if(a){try{await this._handleSubmit(i)}catch(e){console.error(e)}((e,t=!1)=>{if(e){if(t)return window.open(e);window.location.assign(e)}})(o,"_blank"===n)}if(this._trackConversion(i),"VIDEO"===s)return void this._handleVideoButton(i);if("CONTACT_US"===s)return void this._handleContactUsButton(i);if("SUBSCRIBE"===s)return void t.lpUI.showModal("modal-global-subscribe");if("MY_ACCOUNT"===s)return void t.lpUI.showModal("modal-global-my-account");if("SHARE_POPUP"===s){let t=i.querySelector(".share-popup");t&&(t.style.display="flex"),e.stopPropagation();return}if("MODAL_"===s.substring(0,6)){let e=s.substring(6);t.lpUI.showModal(`modal-${e}`);return}if(o?.startsWith("mailto:")){let e=o.substring(7);r.sendGoogleAnalyticsEvent({hitType:"event",eventCategory:"button",eventAction:"click",eventLabel:"Email",eventValue:e})}else if(o?.startsWith("tel:")){let e=o.substring(4);r.sendGoogleAnalyticsEvent({hitType:"event",eventCategory:"button",eventAction:"click",eventLabel:"Phone",eventValue:e})}}async _handleSubmit(e){let t=e.closest("form"),{window:r}=this;return t?await r.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[,r,i]=t,s=`https://player.vimeo.com/video/${r}?`;return i&&(s+=`h=${i}&`),s+="autoplay=1"}_handleVideoButton(e){let{document:t}=this,r=e.closest("section"),{src:i}=e.dataset,s="";if(i&&(i.includes("youtube.com")||i.includes("youtu.be"))&&!i.includes("youtube.com/embed")){let e=i.match(/(?:youtube\.com\/\S*(?:(?:\/e(?:mbed))?\/|watch\?(?:\S*?&?v=)
2023)|youtu.be\/)([a-zA-Z0-9_-]{6,11})/);e&&(s=e[1])}let o=this._getVimeoSrc(i);if(s?i=`https://youtube.com/embed/${s}?autoplay=1&controls=0`:o&&(i=o),!i||!r)return;let n=i.endsWith(".mp4")||i.endsWith(".webm")||i.includes("cloudinary.com"),a=`
2024      <div id="modal-${r.id}" class="modal visible">
2025        <div class="modal-content">
2026          <div class="lightbox-video">
2027            <div class="video-player">
2028              <div class="embed-container">
2029                ${n?`<video controls autoplay src="${i}"></video>`:`<iframe frameborder="0" allowfullscreen="1" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" title="YouTube video player" width="100%" height="100%" src="${i}"></iframe>`}
2030              </div>
2031            </div>
2032          </div>
2033        </div>
2034        <button class="close lp-close" type="button" aria-label="close modal"><span class="lp-close-icon" aria-hidden="true"></span></button>
2035      </div>
2036    `;t.body.insertAdjacentHTML("beforeend",a);let l=t.getElementById(`modal-${r.id}`);l.querySelector(".close").addEventListener("click",()=>{l.remove()})}_handleContactUsButton(e){let{window:t,document:r}=this;r.sendGoogleAnalyticsEvent({hitType:"event",eventCategory:"button",eventAction:"click",eventLabel:"contact"}),t.lpUI.showModal("modal-global-contact-us",{scrollLock:!0})}_trackConversion(e){let{window:t,document:r}=this,{gtagConversionId:i,gtagConversionLabel:s,fbEventName:o}=e.dataset;if(i&&s){t.dataLayer&&t.dataLayer.length&&(t.dataLayer.some(e=>e.length&&"config"===e[0]&&e[1]===i)||r.sendGoogleTagManagerEvent("config",i));let e=`${i}/${s}`;r.sendGoogleTagManagerEvent("event","conversion",{send_to:e})}t.fbq&&o&&t.fbq("track",o,{})}}(B,window,document),j=new class extends m{constructor(e,t,r){super(e,t,r),this.validatedForms=[]}initialize(e={}){try{let{window:t,document:r}=this,{selector:i}=e,s=[];if(s=i?r.querySelectorAll(`${i} form[data-type="contact-form"]`):r.querySelectorAll('form[data-type="contact-form"]'),r.querySelectorAll('input[type="tel"]').length&&!t.libphonenumber&&t?.luxuryPresence?.libs){let{loadJs:e,jsLibsMap:r}=t.luxuryPresence.libs,{libphonenumber:i}=r;e(i.jsSrc,this.attachValidation.bind(this,s))}else this.attachValidation(s);this.validatedForms=this.validatedForms.concat(s)}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 r=t.libphonenumber.isValidPhoneNumber;e.addEventListener("keyup",function(){if(this.hasAttribute("required")||this.value.replace(/\s/g,"").length)try{let e=this.value;r(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("")})}}}(B,window,document),H=new class extends m{constructor(e,t,r){super(e,t,r),this.forms=[],this.homeValuationService=new v(e,t,r)}initialize(e={}){try{let{document:t}=this,{selector:r}=e,i=[];(i=r?t.querySelectorAll(`${r} form[data-type="contact-form"]`):t.querySelectorAll('form[data-type="contact-form"]')).forEach(e=>{this._attachSubmitHandler(e)}),this.forms=this.forms.concat(i)}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),r={},i=[],s=/^name(?:-\d+)?$/;return t.forEach((e,t)=>{if("string"==typeof e){let o=e.trim();s.test(t)&&o&&i.push(o);let n=r[t];r[t]=n?`${n} ${o}`:o}else r[t]=e}),i.length?r.name=i.join(" ").trim():!r.name&&r.firstName&&(r.name=r.firstName,r.lastName&&(r.name+=` ${r.lastName}`)),this._deriveNameParts(r)}_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,r){let{window:i,config:s}=this,o=Object.keys(e).filter(e=>!_.includes(e)).reduce((t,r)=>(t[r]=e[r],t),{}),{pageId:n,companyId:a,websiteId:l,pageMeta:d}=s,c=i.localStorage.getItem("utm_vars")||"{}",u=i.localStorage.getItem("referrer")||"",h=this._getFormId(r);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:i.location.href,content:{...o,...JSON.parse(c)}},page:{pageId:n,companyId:a,websiteId:l,pageMeta:{...d,formId:h}},companyId:a,referrer:u,fields:t}}_handleSubmissionSuccess(e){let{window:t}=this,r=e.dataset.delay||2e3;e.classList.remove("loading"),e.classList.remove("error"),e.classList.add("success"),e.querySelectorAll(".success").forEach(e
2036=>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")},r)}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 r=this._getFields(t),i=this._buildSubmissionData(e,r,t);y(this.window,this.document);let s=await this._waitForLeadSubmit(e=>this._submitLeadRequest(i,e));if(this._sendGAEvent(i),s?.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,r={expired:!1,expiresAt:Date.now()+6e3},i=new Promise(e=>{t=setTimeout(()=>{r.expired=!0,e(null)},6e3)}),s=e(r).catch(e=>{if(f(r))return null;throw e});try{return await Promise.race([s,i])}finally{clearTimeout(t)}}_showRedirectPending(e){if(e.classList.add(E),e.querySelector(`.${E}__indicator`))return;let t=this.document.createElement("div");t.className=`${E}__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:r}=this.config;if(!t||!r)return void console.warn("[EventBus] Missing required data for user alias");let i=this.window.eventBusProvider.getDistinctId();if(!i)return void console.warn("[EventBus] No anonymous ID available for alias");let s=this.window.LuxuryPresenceEventBus.generateUUIDv5FromCompanyEmail(r,t);this.window.eventBusProvider.alias({anonId:i,canonicalId:s}),console.log("[EventBus] User aliased with canonical ID")}catch(e){console.error("[EventBus] User alias failed:",e)}}async _submitLeadRequest(e,t){let{config:r}=this;return(this._aliasUserWithEventBus(e),r.myhomeDashboardEnabled&&(e.activity?.activity_source==="HOME_VALUATION"||e.activity?.activity_source==="HOME_VALUE"))?this.homeValuationService._submitHomeValuationRequest({...e,deadline:t}):fetch(`${r.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,r={hitType:"event",eventCategory:"button",eventAction:"click"};switch(e.activity.activity_source){case"NEWSLETTER_SIGNUP":r.eventLabel="Newsletter",t.sendGoogleTagManagerEvent("event","newsletter_signup");break;case"HOME_SEARCH":r.eventLabel="HomeSearch",t.sendGoogleTagManagerEvent("event","home_search");break;case"HOME_VALUE":case"HOME_VALUATION":r.eventLabel="HomeValue",t.sendGoogleTagManagerEvent("event","home_valuation");break;case"EBOOK":r.eventLabel="Ebook",t.sendGoogleTagManagerEvent("event","ebook_download");break;default:r={hitType:"pageview",page:"/thank-you"},t.sendGoogleTagManagerEvent("event","contact_inquiry")}t.sendGoogleAnalyticsEvent(r)}_getFields(e){let t=e.querySelectorAll("input, select, textarea"),r={};return t.forEach(t=>{let{id:i,name:s,type:o}=t;if(s===w)return!0;let n="";if(i){let r=e.querySelector(`label[for='${i}']`);r?n=r.textContent.trim():t.placeholder&&(n=t.placeholder.trim())}r[s]={label:n,type:t.tagName,inputType:"INPUT"===t.tagName?o:"text"}}),r}_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 r=e.querySelector(".submission-error-message");r||((r=this.document.createElement("div")).className="submission-error-message",r.setAttribute("role","alert"),e.appendChild(r)),r.textContent=t||"Something went wrong. Please try again.",r.style.display="block"}_hideSubmissionError(e){let t=e.querySelector(".submission-error-message");t&&(t.style.display="none")}}(B,window,document),G=new class extends m{constructor(e,t,r){super(e,t,r),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 r=1;r<=3;r+=1){let i=e&&!t;try{let e=await fetch(this._getMapKeyUrl(r,i));if(t=t||i,this._setFailureFlag(!1),!e.ok)throw Error(`Failed to fetch API key: ${e.status}`);let s=await e.text();if(!s)return"";return this.apiKey=s,this.apiKey}catch(e){console.error(e),r<3&&await this._delay(300*2**(r-1))}}return this._setFailureFlag(!0),""}_getMapKeyUrl(e,t){let r=[];e>1&&r.push(`attempt=${e}`),t&&r.push("recovered_after_failure=1");let i=r.length?`?${r.join("&")}`:"";return`${this._getBaseUrl()}/api/v1/map${i}`}_hadPreviousFailure(){try{return"1"===this.window.sessionStorage.getItem(S)}catch(e){return!1}}_setFailureFlag(e){try{e?this.window.sessionStorage.setItem(S,"1"):this.window.sessionStorage.removeItem(S)}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");
2036let 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(r=>{r?t(r):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 r=Math.min(1024/e,1024/t);return{width:parseInt(e*r),height:parseInt(t*r)}}convertThemeToStaticApiUrl(e){return e.map(e=>{let t=e.stylers.reduce((e,t)=>{let r=t.visibility?`visibility:${t.visibility}`:"",i=t.color?`color:${t.color.replace("#","0x")}`:"",s=t.lightness?`lightness:${t.lightness}`:"";return`${e}|${r}${i}${s}`},""),r=e.elementType?`|element:${e.elementType}`:"";return`feature:${e.featureType}${r}${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:r}=await t.json();return r}catch(e){return console.error(e),""}}generateStaticMapUrl(e,t,r,i,s,o){let{width:n,height:a}=this.resizeStaticMapDimensions(s,o),l={center:`${e},${t}`,zoom:r,scale:2,size:`${n}x${a}`,key:this.apiKey};i&&(l.style=this.convertThemeToStaticApiUrl(i));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:r,...i}){let{width:s,height:o}=this.resizeStaticMapDimensions(e,t),n={...i,size:`${s}x${o}`};r&&(n.style=this.convertThemeToStaticApiUrl(r));let a=new URLSearchParams;Object.entries(n).forEach(([e,t])=>{Array.isArray(t)?t.forEach(t=>a.append(e,t.toString())):a.append(e,t.toString())});let l=a.toString();try{return await this.getMapApiSignedUrl(l)}catch(e){return console.error(e),""}}}(B,window,document),K=new class extends m{destroy(){}updateQueryString(e,t,r){r||(r=this.window.location.href);let i=RegExp(`([?&])${e}=.*?(&|#|$)`,"i"),s="";null!=t&&(Array.isArray(t)?t.length&&(s=this.serializeArray(e,t)):"object"==typeof t?(i=RegExp(`([?&])${e}\\[[^=]*\\]=.*?(&|#|$)`,"i"),s=this.serializeObj(t,"",e)):s=`${e}=${encodeURIComponent(t)}`);let o=r.split("#"),n=o[0];if(i.test(r)){let e=n;for(s=s?`$1${s}$2`:"$1";i.test(e);)n=e.replace(i,s),e=e.replace(i,"$1");n=n.replace(/(&|\?)$/,"")}else if(s){let e=-1!==n.indexOf("?")?"&":"?";n+=`${e}${s}`}return void 0!==o[1]&&null!==o[1]&&(n+=`#${o[1]}`),n}getParameterByName(e,t){t||(t=this.window.location.href),e=e.replace(/[[\]]/g,"\\$&");let r=RegExp(`[?&]${e}(=([^&#]*)|&|#|$)`),i=Array.from(RegExp.prototype[Symbol.matchAll].call(r,t)).flat();if(!i.length){let r=RegExp(`[?&]${e}(\\[.*?\\])=(.*?)(?=&|#|$)`,"g");return i=Array.from(RegExp.prototype[Symbol.matchAll].call(r,t)).flat(),this._parseParamToObject(i,"advancedFilters"===e)}return i.length>3?i.reduce((e,t,r)=>((r+1)%3==0&&e.push(decodeURIComponent(t.replace(/\+/g," "))),e),[]):i[2]?decode
2036URIComponent(i[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 r={},i=this.makePageKey(t),s=this.getParameterByName(i);return s&&(r.page=parseInt(s)),Array.isArray(e)&&e.forEach(e=>{let t=this.makeParamKey(e,i),s=this.getParameterByName(t);if("int"===e.type)isFinite(s=parseInt(s))||(s=null);else if("bool"===e.type||"boolean"===e.type)s="true"===s||"false"!==s&&null;else if("json"===e.type)try{s=JSON.parse(s)}catch(e){}r[e.formKey||e.param]=s}),r}serializeParams(e,t,r){let i=this.window.location.href,s=this.makePageKey(t);return i=this.updateQueryString(s,r.page,i),Array.isArray(e)&&e.forEach(e=>{let t=this.makeParamKey(e,s),o=r[e.formKey||e.param];"json"===e.type&&null!=o&&(o=JSON.stringify(o)),i=this.updateQueryString(t,o,i)}),i}formatSliderAtom(e,t=""){return t+(Number.isInteger(e)?e:e.toFixed(2))}formatSliderValue(e,t="",r=""){return e<1e3?this.formatSliderAtom(e,t):e<1e6?`${this.formatSliderAtom(e/1e3,t)}${r}K`:`${this.formatSliderAtom(e/1e6,t)}${r}M`}formatSliderPriceRange(e,t,r,i){return t.min===e&&0!==e?`${i.lowPrefix}${this.formatSliderValue(e,r," ")}`:t.max===e?`${this.formatSliderValue(e,r," ")}${i.highSuffix}`:`${this.formatSliderValue(e,r," ")}`}formatSliderAreaRange(e,t,r,i){return t.min===e&&0!==e?`${i.lowPrefix}${this.formatSliderValue(e)} ${r}`:t.max===e?`${this.formatSliderValue(e)}${i.highSuffix} ${r}`:`${this.formatSliderValue(e)} ${r}`}getSearchFormValues(e){let{queryElement:t,priceSliderElement:r,areaSliderElement:i,neighborhoodSelect:s}=e,o={};if(t&&(o.search=t.value||null),r){let e=r.value.split(";"),t=parseInt(r.dataset.min),i=parseInt(r.dataset.max),s=parseInt(e[0]),n=parseInt(e[1]);o.priceMin=s!==t?s:null,o.priceMax=n!==i?n:null}if(i){let e=i.value.split(";"),t=parseInt(i.dataset.min),r=parseInt(i.dataset.max),s=parseInt(e[0]),n=parseInt(e[1]);o.areaMin=s!==t?s:null,o.areaMax=n!==r?n:null}return s&&(o.neighborhoodId=s.value||null),o}serializeObj(e,t="",r=""){let i=[];for(let s in e)if(e.hasOwnProperty(s)){let o,n=e[s];if(r){let e=t?`[${t}][${s}]`:`[${s}]`;o=`${r}${e}`}else o=t?`${t}[${s}]`:s;null!==n&&Array.isArray(n)?n.length&&i.push(this.serializeArray(o,n)):null!==n&&"object"==typeof n?i.push(this.serializeObj(n,o)):i.push(`${o}=${encodeURIComponent(n)}`)}return i.join("&")}serializeArray(e,t,r=""){let i=[];return t.forEach(t=>{let s=r?`${r}${e}`:e;i.push(`${s}=${encodeURIComponent(t)}`)}),i.join("&")}_parseParamToObject(e,t=!1){if(!e.length)return null;let r={};for(let i=0;i<e.length;i++)if((i+1)%3==0){let s=decodeURIComponent(e[i].replace(/\+/g," ")),o=e[i-1];Object.assign(r,this._setObjectPath(o,s,r,t))}return r}_setObjectPath(e,t,r,i=!1){let s=e.split(/[\[\]]/).filter(Boolean),o=["in","nin","btw","ciin","cinin"],n={},a=n,l=((e,t,r)=>{if(!t)return;let i=(Array.isArray(t)?t:t.match(/([^[.\]])+/g)).reduce((e,t)=>e&&e[t],e);return void 0===i?r:i})(r,s.join("."));return s.forEach((e,n)=>{n===s.length-1?l?a[e]=Array.isArray(l)?[...l,t]:[l,t]:a[e]=i&&o.includes(e)?[t]:t:(a[e]=r[e]?r[e]:{},a=a[e])}),n}}(B,window,document),Y=new class extends m{constructor(e,t,r){super(e,t,r),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,r=e.closest("section[id]"),i=e.dataset.append,s=r.querySelector(".lp-expand-btn");if(!s)if((s=t.createElement("button")).className="lp-expand-btn",s.setAttribute("aria-label","Open a lightbox"),s.innerHTML='<span class="lp-i lp-i--expand-alt" aria-hidden="true"></span>',i){let e=r.querySelector(i);e&&e.appendChild(s)}else{let r=t.createElement("div");r.className="lp-expand-btn-wrapper",r.style.position="relative",r.appendChild(s),e.parentNode.insertBefore(r,e.nextSibling)}s.addEventListener("click",()=>{this._createLightbox({slider:e,section:r})})}_createLightbox({slider:e,section:t,initialIndex:r}){let{window:i,document:s}=this,o=`lightbox-for-${t?.id}`,n=i.$&&i.$.fn.slick,a=n&&e.slick,l="function"==typeof i.Splide,d=e.classList.contains("is-initialized")&&e.classList.contains("splide");function c(){let t=s.createElement("div");t.id=o,t.className="lp-lightbox",t.setAttribute("tabindex","-1"),t.setAttribute("role","dialog"),t.setAttribute("aria-modal","true"),t.innerHTML=`
2037      <button class="lp-lightbox__close" aria-label="close modal"></button>
2038      <div class="lp-lightbox__content">
2039        <div class="lp-lightbox__carousel splide" role="group" aria-label="Image Gallery">
2040          <div class="splide__arrows">
2041            <button class="splide__arrow splide__arrow--prev lp-lightbox-arrow lp-lightbox-arrow--prev"></button>
2042            <button class="splide__arrow splide__arrow--next lp-lightbox-arrow lp-lightbox-arrow--next"></button>
2043          </div>
2044          <div class="splide__track">
2045            <ul class="splide__list"></ul>
2046          </div>
2047        </div>
2048      </div>
2049    `,"function"==typeof i.lpUI.requestScrollLock?i.lpUI.requestScrollLock(o):s.body.style.overflow="hidden",s.body.appendChild(t);let n=t.querySelector(".lp-lightbox__carousel"),a=n.querySelector(".splide__list");t.classList.add("show"),(d?e.querySelectorAll(".splide__slide:not(.splide__slide--clone) img"):e.querySelectorAll("img")).forEac
2049h(e=>{let t=e.cloneNode(!0);t.removeAttribute("style");let r=s.createElement("li");r.className="lp-lightbox__slide splide__slide",r.appendChild(t),a.appendChild(r)});let l=new i.Splide(n,{rewind:!0,arrows:!0,arrowPath:"",type:"loop",clones:1,pagination:!1,perPage:1,perMove:1});l.mount(),void 0!==r&&r>=0&&l.go(r),setTimeout(()=>{t.focus()},100);let c=e=>{if(!t.classList.contains("show"))return;let r=t.querySelector(".splide__arrow--prev"),i=t.querySelector(".splide__arrow--next"),s=t.querySelector(".lp-lightbox__close");"ArrowLeft"===e.key&&r?(e.preventDefault(),r.click()):"ArrowRight"===e.key&&i?(e.preventDefault(),i.click()):"Escape"===e.key&&s&&(e.preventDefault(),s.click())};s.addEventListener("keydown",c),t.querySelector(".lp-lightbox__close").addEventListener("click",()=>{s.removeEventListener("keydown",c),t.classList.remove("show"),l&&l.destroy(),"function"==typeof i.lpUI.releaseScrollLock?i.lpUI.releaseScrollLock(o):s.body.style.overflow="",t.remove()})}if("function"==typeof i.lpUI.requestScrollLock?i.lpUI.requestScrollLock(o):s.body.style.overflow="hidden",n&&!d){let t,r,n,l,d;r={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>'},(n=s.createElement("div")).id=o,n.className="lp-lightbox",n.setAttribute("tabindex","-1"),n.setAttribute("role","dialog"),n.setAttribute("aria-modal","true"),n.innerHTML=`
2050        <button class="lp-lightbox__close" aria-label="close modal"></button>
2051        <div class="lp-lightbox__content">
2052          <div class="lp-lightbox__carousel"></div>
2053        </div>
2054      `,s.body.appendChild(n),l=n.querySelector(".lp-lightbox__carousel"),n.classList.add("show"),a?(t=e.slick.$slides.find("img"),r.initialSlide=e.slick?.currentSlide||0,t.each(function(){i.$(".lp-lightbox__carousel").append(i.$(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 r=s.createElement("div");r.className="lp-lightbox__slide",r.appendChild(t),l.appendChild(r)}),i.$(l).slick(r),setTimeout(()=>{n.focus()},100),d=e=>{if(!n.classList.contains("show"))return;let t=n.querySelector(".lp-lightbox-arrow--prev"),r=n.querySelector(".lp-lightbox-arrow--next"),i=n.querySelector(".lp-lightbox__close");"ArrowLeft"===e.key&&t?(e.preventDefault(),t.click()):"ArrowRight"===e.key&&r?(e.preventDefault(),r.click()):"Escape"===e.key&&i&&(e.preventDefault(),i.click())},s.addEventListener("keydown",d),n.querySelector(".lp-lightbox__close").addEventListener("click",()=>{s.removeEventListener("keydown",d),n.classList.remove("show");let t=l?.slick?i.$(l).slick("slickCurrentSlide"):0;l?.slick&&i.$(l).slick("unslick"),a&&i.$(e).slick("slickGoTo",t),"function"==typeof i.lpUI.releaseScrollLock?i.lpUI.releaseScrollLock(o):s.body.style.overflow="",n.remove()})}else l?c():(i.luxuryPresence.libs.loadCss(i.luxuryPresence.libs.jsLibsMap.splide.cssSrc),i.luxuryPresence.libs.loadJs(i.luxuryPresence.libs.jsLibsMap.splide.jsSrc,()=>{c(),i.luxuryPresence.libs.jsLibsMap.splide.isLoaded=!0}))}}(B,window,document),z=new class extends m{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:r,templateId:i,websiteId:s,pageId:o,shareId:n,pageMeta:a}=this.config;this.window.divolte.signal(e,Object.assign({companyId:r,templateId:i,websiteId:s,pageId:o,shareId:n,pageMeta:a},t))}sendLpPageView(){this.sendLpEvent("pageView",{})}}(B,window,document),W=new class extends m{constructor(e,t,r){super(e,t,r)}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"}
2054)),(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:r}=this.config;try{this.window.eventBusProvider.capture(e,{company:r,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",{})}}(B,window,document),Q=new class extends m{constructor(e,t,r){super(e,t,r),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(C,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:r}=this.config,{data:i,origin:s}=e,{type:o,height:n,event:a,source:l,token:d}=i;if(o===t||"hide_intermediate_iframe"===o){let e=this.document.getElementById("onetap_google_intermediate_iframe");e&&(e.style.height=n,e.style.display=o===t?"unset":"none")}s===r&&"GOOGLE_SIGN_ON"===l&&("success"===a?(this._setExpirationLsItem(864e5),this._handleQualifyingQuestionsModal(d)):"cancel"===a&&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 r=this.document.createElement("iframe");r.src=this._buildUrlAndCopyAttributes(t,r,e),r.dataset.isSocialOauthButton=!0,t.replaceWith(r)}_listenToMessages(e){let{buyerSellerServiceUrl:t}=this.config;if(e.origin===t&&"success"===e.data.event){let e=new Event(C);this.window.dispatchEvent(e),y(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,r){let{buyerSellerServiceUrl:i,companyId:s,websiteId:o,pageId:n,pageMeta:a}=this.config,{location:l}=this.window,d=l.origin+l.pathname,c=new URL(`${i}/buttons/${r}`),u=this.window.localStorage.getItem("utm_vars"),h=this.window.localStorage.getItem("referrer");c.searchParams.append("companyId",s),c.searchParams.append("websiteId",o),c.searchParams.append("pageId",n),c.searchParams.append("sourceUrl",d),c.searchParams.append("pageMeta",JSON.stringify(a)),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"];
2054return 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,"/"),r=4-t.length%4,i=4===r?t:t+"=".repeat(r);return JSON.parse(atob(i))}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")}}}(B,window,document),J=new class extends m{constructor(e,t,r){super(e,t,r),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:r})=>{e&&e.removeEventListener&&e.removeEventListener(t,r)}),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 r=t.querySelector('input[name="email"]');r&&"string"==typeof e&&(r.value=e)}updateTriggerSourceValue(e){let t=this.getModalElement();if(!t)return;let r=t.querySelector(`#${this.modalId}-triggerSource`);r&&"string"==typeof e&&(r.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,r){let i="";if(r){let e=new Date;e.setTime(e.getTime()+864e5*r),i=`; expires=${e.toUTCString()}`}let s="; path=/; SameSite=Lax";this.window&&this.window.location&&"https:"===this.window.location.protocol&&(s+="; Secure"),this.document.cookie=`${e}=${encodeURIComponent(t||"")}${i}${s}`}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 r=()=>{this.setModalSubmittedCookie();let t=setTimeout(()=>{e.style.display="none",this.restoreBodyScroll()},100);this.timeouts.push(t)};t.addEventListener("formsubmitted",r),this.eventListeners.push({element:t,event:"formsubmitted",handler:r})}let r=e.querySelector('[data-dismiss="modal"]');if(r){let t=()=>{e.style.display="none",this.restoreBodyScroll()};r.addEventListener("click",t),this.eventListeners.push({element:r,event:"click",handler:t})}let i=t=>{(t.target===e||t.target.id===this.modalId)&&(e.style.display="none",this.restoreBodyScroll())};e.addEventListener("click",i),this.eventListeners.push({element:e,event:"click",handler:i})}}(B,window,document),X=new class extends m{constructor(e,t,r){super(e,t,r),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 r=`
2055      query {
2056        validSession {
2057          success
2058        }
2059      }
2060    `;try{let e=await this.window.fetch("/graphql",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({query:r})});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 i=t.data?.validSession?.success===!0;return this.lastValidationResult=i,this.lastValidationTime=Date.now(),i}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}}(B,window,document),Z=new class extends m{constructor(e,t,r){super(e,t,r),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=I[e.provider];if(!t)return;this.eventName=t.eventName;let r=await this.window.luxuryPresence.session.validateSession();(t.hasAnalyticsConsent(this.document,this.window)||r)&&this.loadScript(),this.consentListener||(this.consentListener=e=>{t.isAnalyticsAccepted(e.detail)?this.loadScript():this.removeScripts()},this.document.addEventListener(t.eventName,this.consentListener))}}(B,window,document),ee=new class extends m{destroy(){}transformVariables(e,t){let r;return x(r={...t},["testimonialId"]),R(r,["testimonialId"],"testimonialIds"),0===r.limit&&delete r.limit,(void 0===r.limit||null===r.limit)&&(("testimonials"===e||"testimonialsCount"===e)&&(r.limit=50),("agents"===e||"agentsCount"===e||"developments"===e||"developmentsCount"===e||"neighborhoods"===e||"neighborhoodsCount"===e||"posts"===e||"postsCount"===e||"pressReleases"===e||"pressReleasesCount"===e)&&(r.limit=100)),!function(e){let{sortDir:t}=e;"string"==typeof t&&t.includes("_")&&(e.sortDir=t.replace(/_/g," "))}(r),!function(e,t){switch(t){case"agent":break;case"testimonials":case"testimonialsCount":x(e,["testimonialIds"]);break;case"agents":case"agentsCount":x(e,["officeId","teamId","developmentId","agentIds","tags"]),R(e,["officeId"],"officeIds"),R(e,["teamId"],"teamIds"),R(e,["developmentId"],"developmentIds");break;case"neighborhoods":case"neighborhoodsCount":x(e,["neighborhoodIds","neighborhoodId"]),R(e,["neighborhoodIds","neighborhoodId"],"neighborhoodId");break;case"developments":case"developmentsCount":x(e,["agentId","neighborhoodIds","neighborhoodId","developmentIds","tag"]),e.agentId&&Array.isArray(e.agentId)&&([e.agentId]=e.agentId),R(e,["neighborhoodIds","neighborhoodId"],"neighborhoodIds"),R(e,["developmentIds","developmentId"],"developmentIds");break;case"properties":case"propertiesCount":x(e,["statusIds","statusId","propertyTypeIds","propertyTypeId","propertyId","networkId","propertyIds","agentIds","teamIds","officeIds","neighborhoodIds","
2060spaceTypeIds","addressState","addressCity","backfillProviders","backfillMLSListingIds","backfillMLSAgentIds","backfillMLSOfficeIds"]),["propertyIds","agentIds","teamIds","officeIds","neighborhoodIds","spaceTypeIds","backfillMLSListingIds","backfillMLSAgentIds","backfillMLSOfficeIds"].forEach(t=>R(e,[t],t)),R(e,["statusIds","statusId"],"propertyStatusId"),e.excludeStatusId&&(e.excludePropertyStatusId=e.excludeStatusId,delete e.excludeStatusId),R(e,["propertyTypeIds","propertyTypeId"],"propertyTypeId"),R(e,["networkId"],"networkId"),R(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":x(e,["categoryIds","categoryId","neighborhoodId"]),void 0!==e.order&&(e.sort=e.order,delete e.order),R(e,["categoryIds","categoryId"],"categoryId");break;case"postCategories":x(e,["categoryId","categoryIds"]),void 0!==e.order&&(e.sort=e.order,delete e.order),R(e,["categoryIds","categoryId"],"categoryId");break;case"pressReleases":case"pressReleasesCount":x(e,["pressReleaseId","categories","propertyId","developmentId","agentId","teamId"]),R(e,["pressReleaseId"],"pressReleaseIds");break;case"offices":case"officesCount":x(e,["officeId","officeIds","tags"]),R(e,["officeId"],"officeIds");break;case"teams":case"teamsCount":x(e,["teamId","teamIds"]),R(e,["teamId"],"teamIds");break;case"pois":x(e,["categories"]),Array.isArray(e.categories)&&(e.categories=e.categories.map(e=>e.toLowerCase())),"string"==typeof e.sortBy&&(e.sortBy=e.sortBy.toLowerCase())}}(r,e),r}transformResponse(e,t){return"agent"===e?P(t,T):"agents"===e||"agentsCount"===e?O(t,L):"neighborhood"===e?P(t,k):"neighborhoods"===e||"neighborhoodsCount"===e?O(t,M):"development"===e?P(t,$):"developments"===e||"developmentsCount"===e?O(t,U):t}transformPage(e){return{items:e&&e.items||[],count:e&&e.total||0}}applyPropertyDisclaimers(t,r){if(!Array.isArray(t)||!t.length||!r||!r.length)return Promise.resolve(t);let i=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})),s=e=>{let i={};return(e||[]).forEach(e=>{i[`${e.feedId}:${e.listingId}`]=e}),t.map(e=>{let t=e&&i[`${e.vendorId}:${e.mlsId}`],s={};return r.forEach(e=>{let r=t?t[D[e]]:void 0;s[e]=r??null}),{...e,...s}})};if(!i.length)return Promise.resolve(s([]));let{websiteId:o}=this.config;return this.window.superagent?this.window.superagent.post(`${this.window.luxuryPresence.defaults.routerUrl}/graphql`).withCredentials().send({query:e(N),variables:{input:{websiteId:"string"==typeof o?o:void 0,properties:i}}}).then(e=>s(e.body&&e.body.data&&e.body.data.propertyDisclaimers),e=>(console.warn("[RouterApiController] propertyDisclaimers lookup failed:",e),s([]))):Promise.resolve(s([]))}}(B,window,document),et=new class extends m{constructor(e,t,r){super(e,t,r),this.natives=new WeakMap,this.rates=new Map,this.pending=new Map,this.target=void 0,this.generation=0,this.initialized=!1,this.observer=null,this.abortController=null}get currentCurrency(){return this.target}get cookieOptions(){return{document:this.document,location:this.window.location}}get enabledCurrencies(){return(this.config.enabledCurrencies??[]).map(F.toSupportedToCurrency).filter(Boolean)}initialize(){return this.initialized||!this.config.currencyConversionEnabled?Promise.resolve():(this.initialized=!0,this.generation=0,this.abortController=new this.window.AbortController,this.target=(0,F.readValidCurrencyCookie)(this.cookieOptions,{enabled:!0,enabledCurrencies:this.enabledCurrencies}),this.observer=new this.window.MutationObserver(()=>this.ensureRates(this.apply())),this.observer.observe(this.document.body,{childList:!0,subtree:!0}),this.ensureRates(this.apply()))}setCurrency(e){if(!this.config.currencyConversionEnabled)return!1;let t=(0,F.toSupportedToCurrency)(e);return!!t&&!!this.enabledCurrencies.includes(t)&&(this.target=t,this.generation+=1,(0,F.writeCurrencyCookie)(this.cookieOptions,t)||console.warn("[CurrencyConversionController] could not persist currency preference:",t),this.apply(),!0)}reset(){this.config.currencyConversionEnabled&&(this.target=void 0,this.generation+=1,(0,F.clearCurrencyCookie)(this.cookieOptions),this.apply())}destroy(){this.observer?.disconnect(),this.observer=null,this.abortController?.abort(),this.abortController=null,this.pending.clear(),this.rates.clear(),this.generation=null,this.initialized=!1}apply(){let e=new Set;return this.document.querySelectorAll("[data-lp-price]").forEach(t=>{let r=this.natives.get(t);if(!r){if(!(r=(e=>{let t=e.getAttribute("data-lp-native-amount"),r=null===t||""===t.trim()?NaN:Number(t),i=(0,F.toSupportedFromCurrency)(e.getAttribute("data-lp-native-currency"));if(!Number.isFinite(r)||r<0||!i)return;let s=Number(e.getAttribute("data-lp-precision"));return{amount:r,currency:i,precision:Number.isInteger(s)&&s>=0?s:0,originalHTML:e.innerHTML}})(t)))return;this.natives.set(t,r)}this.rates.has(r.currency)||e.add(r.currency),this.render(t,r)}),[...e]}render(e,t){let r=this.convertedText(t);if(void 0===r){e.innerHTML!==t.originalHTML&&(e.innerHTML=t.originalHTML);return}e.textContent!==r&&(e.textContent=r)}convertedText(e){if(!this.target||this.target===e.currency)return;let t=this.rates.get(e.currency)?.[this.target];
2060if("number"!=typeof t||!Number.isFinite(t))return;let r=(0,F.convertAmount)(e.amount,t);if(void 0!==r)return(0,F.formatMoney)(r,this.target,{precision:e.precision})}ensureRates(e){return e.length?Promise.all(e.map(e=>this.requestRates(e))).then(()=>{null!==this.generation&&this.apply()}):Promise.resolve()}requestRates(e){let t=this.pending.get(e);if(t)return t;let r=this.abortController?.signal,i=(0,F.fetchExchangeRates)(e,{baseUrl:this.config.valuationApiBase,signal:r,onError:t=>console.warn(`[CurrencyConversionController] exchange rate fetch failed for ${e}:`,t)}).then(t=>{r?.aborted||this.rates.set(e,t??{})});return this.pending.set(e,i),i}}(B,window,document);function er(e,t){if(window.luxuryPresence[e])try{window.luxuryPresence[e].destroy()}catch(e){console.log(e)}window.luxuryPresence[e]=t}er("config",B),er("modals",q),er("buttons",V),er("validation",j),er("contactForms",H),er("mapApiLoader",G),er("pagination",K),er("expandSliders",Y),er("divolte",z),er("eventBus",W),er("oauth",Q),er("qualifyingQuestionsModal",J),er("session",X),er("consent",Z),er("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(){}}),er("routerApi",ee),er("currencyConversion",et),window.luxuryPresence.formatSliderPriceRange=K.formatSliderPriceRange.bind(K),window.luxuryPresence.formatSliderAreaRange=K.formatSliderAreaRange.bind(K),window.luxuryPresence.getSearchFormValues=K.getSearchFormValues.bind(K),window.luxuryPresence.handlebarsHelpersFactory=function(t){return e(n)(t,{isEqual:(e,t)=>e==t})}})();
2061//# sourceMappingURL=lp-sdk.js.map
2062
2063    </script>
2063
2064
2065    
2065<script>
2066        var lpGlobalInitialized = false;
2067
2068        function lpGlobalInit () {
2069          if (lpGlobalInitialized) {
2070            return;
2071          }
2072            lpGlobalInitialized = true;
2073            // Initialize wow animation plugin only according to turbolinks
2074            var wow;
2075            if (window.WOW) {
2076                wow = new WOW({
2077                    animateClass: 'animated',
2078                    offset: wowOffset,
2079                    live: false,
2080                    callback: function(box) {}
2081                });
2082            }
2083            // Initialize handlebar helpers only once
2084            function handlebarsInit() {
2085              if (!window.Handlebars) {
2086                return;
2087              }
2088              HandlebarsIntl.registerWith(Handlebars);
2089              Handlebars.registerHelper(window.luxuryPresence.handlebarsHelpersFactory(Handlebars));
2090            }
2091
2092            handlebarsInit();
2093
2094              var modalContentUrl = "/modals.html";
2095                const modalsContainer = document.getElementById('modals');
2096                if (modalsContainer) {
2097                  fetch(modalContentUrl).then(function(res) {
2098                    if (!res.ok) {
2099                      throw new Error(`HTTP error! Status: ${res.status}`);
2100                    }
2101                    return res.text();
2102                  }).then(function(resultText) {
2103                    modalsContainer.innerHTML = resultText;
2104
2105                    // now we need to execute all script elements
2106                    Array.from(modalsContainer.getElementsByTagName('script')).forEach(function (s) {
2107                      const script  = document.createElement("script");
2108                      script.text = s.innerHTML;
2109                      Array.from(s.attributes).forEach(function (a) {
2110                        script.setAttribute(a.name, a.value);
2111                      })
2112                      s.parentNode.replaceChild(script, s);
2113                    });
2114
2115                    try {
2116                      window.luxuryPresence.modals.initialize(window.luxuryPresence._modalIncludes);
2117                      window.luxuryPresence.contactForms.initialize({ selector: '#modals' });
2118                      window.luxuryPresence.validation.initialize({ selector: '#modals' });
2119                      window.luxuryPresence.oauth.initialize({
2120                        googleSignOnEnabled: true,
2121                        iframe: false });
2122                    } catch (e) {
2123                      console.log(e);
2124                    }
2125                    document.querySelectorAll('.modals > .modal .close').forEach(closeModalBtn => {
2126                      closeModalBtn.addEventListener('click', function() {
2127                        window.lpUI.hideClosestModal(closeModalBtn);
2128                      });
2129                    });
2130                  }).catch((e) => console.log(e));
2131                }
2132            /* Initialize Luxury Presence SDK */
2133            try {
2134                window.luxuryPresence.config.setCompany("7ac07672-b054-446c-a74a-437d501f555c", {});
2135                window.luxuryPresence.config.setWebsite("cabbe5a3-1336-4a26-afab-bb421f339f1d", {
2136                    myhomeDashboardEnabled: true,
2137                    mlsEnabled: true,
2138                    hstValuationRedirectEnabled: true,
2139                    hvStepTwoCaptureEnabled: false
2140                });
2141                const url = new URL(window.location.href);
2142                const shareId = url.searchParams.get('shareId');
2143                window.luxuryPresence.config.setPage("df64a2db-7427-4b2c-991d-64e4d12ee178", {
2144                    sourceResource: "",
2145                    pageElementId: "",
2146                    pageQueryVariables: {},
2147                    shareId: "",
2148                });
2149                window.luxuryPresence.config.setWebsiteApiGatewayUrl("https://wgw.luxurypresence.com", {});
2150                window.luxuryPresence.config.setBuyerSellerServiceUrl("https://bss.luxurypresence.com", {});
2151                    window.luxuryPresence.config.setDivolteServiceUrl("https://t.luxurypresence.com", {});
2152                  window.luxuryPresence.config.setEventBusUrl("https://cdn.luxurypresence.com/scripts/event-bus-js", {});
2153                  window.luxuryPresence.config.setEventBus({
2154                    enabled: true,
2155                    apiKey: "phc_PMYT31xlmXBaTCwpIRx1v6RrpLVZIuP47N3mOT6KLnr",
2156                    url: "https://p.luxurypresence.com",
2157                  });
2158                window.luxuryPresence.config.setTemplateId("1d3967df-14f2-449d-87b7-bd68bf93906f", {});
2159                window.luxuryPresence.config.setLeadIngesterUrl("https://leads.luxurypresence.com", {});
2160                window.luxuryPresence.buttons.initialize({});
2161                    window.luxuryPresence.consent.initialize({ provider: 'lp-consent' });
2162                window.luxuryPresence.contactForms.initialize({});
2163                window.luxuryPresence.validation.initialize({});
2164                window.luxuryPresence.expandSliders.initialize({});
2165                window.luxuryPresence.oauth.initialize({ googleSignOnEnabled: true, iframe: false });
2166                window.luxuryPresence.qualifyingQuestionsModal.initialize({ qualifyingQuestionsModalEnabled: true });
2167                /* Optional: cached pages / older SDKs may not carry this controller */
2168                window.luxuryPresence.currencyConversion?.initialize();
2169            } catch (e) {
2170                console.log(e);
2171            }
2172
2173            /* Inject Section Specific Javascript */
2174                try {
2175(function init(sectionDomId) {
2176  const section = document.getElementById(sectionDomId);
2177  const contactTitle = section.querySelector('.js-contact-title');
2178  const emailInput = section.querySelector('.js-email-input');
2179  const emailRegex = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~\-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)+/;
2180  emailInput.addEventListener('input', function () {
2181    if (emailRegex.test(this.value)) {
2182      this.setCustomValidity('');
2183    } else {
2184      this.setCustomValidity('Please enter a valid email address.');
2185    }
2186    this.reportValidity();
2187  });
2188  const inputName = section.querySelector('.js-input-name');
2189  inputName.addEventListener('keyup', function () {
2190    if (this.value.replaceAll(/\d/g, "").trim().split(" ").length < 2 || this.value.replaceAll(/\d/g, "").trim() === "") {
2191      this.setCustomValidity("Please input your first name and last name.");
2192    } else {
2193      this.setCustomValidity("");
2194    }
2195  });
2196  function setHttp(link) {
2197    if (link.search(/^http[s]?\:\/\/|\//) == -1) {
2198      link = 'https://' + link;
2199    }
2200    return link;
2201  }
2202  const socialLinks = section.querySelectorAll('.lp-socials__link, .contact-form-modal-details__socials-l
2202ink');
2203  socialLinks.forEach(linkElement => {
2204    const href = linkElement.getAttribute('href');
2205    if (href) {
2206      linkElement.setAttribute('href', setHttp(href));
2207    }
2208  });
2209  if (contactTitle.length < 1) return;
2210  let words = contactTitle.textContent.split(" ");
2211  if (words.length > 1) {
2212    contactTitle.innerHTML = `<span class="contact__title-top">${words[0]} </span><span class="contact__title-bottom">${words.splice(1).join(" ")}</span>`;
2213  }
2214  const addRedirectToForm = () => {
2215    const redirectLink = document.getElementById(`${sectionDomId}`).querySelector('.js-redirect-link');
2216    const form = document.getElementById(`${sectionDomId}`).querySelector('.js-form');
2217    function redirectPage(link) {
2218      if (link) {
2219        const rawHref = link.getAttribute('href');
2220        link.setAttribute('href', setHttp(rawHref));
2221        link.click();
2222      }
2223    }
2224    function setHttp(link) {
2225      if (link.search(/^http[s]?\:\/\/|\//) == -1) {
2226        link = 'http://' + link;
2227      }
2228      return link;
2229    }
2230    form.addEventListener("reset", function () {
2231      redirectPage(redirectLink);
2232    });
2233  };
2234  addRedirectToForm();
2235})('modal-global-contact-us');
2236} catch(e) {
2237console.log(e);
2238}
2239                
2240                try {
2241(function init(sectionDomId) {
2242  (function () {
2243    const observer = new IntersectionObserver(entries => {
2244      entries.forEach(entry => {
2245        if (entry.isIntersecting) entry.target.classList.add('is-in-viewport');
2246      });
2247    }, {
2248      threshold: 0.5
2249    });
2250    const initialElements = document.querySelectorAll('[data-animate="true"]');
2251    initialElements.forEach(element => observer.observe(element));
2252    const container = document.querySelector('.data-container');
2253    if (container) {
2254      const mutationObserver = new MutationObserver(mutations => {
2255        mutations.forEach(mutation => {
2256          if (mutation.type === 'childList') {
2257            mutation.addedNodes.forEach(node => {
2258              if (node.nodeType === 1 && node.getAttribute('data-animate') === 'true') observer.observe(node);
2259            });
2260          }
2261        });
2262      });
2263      mutationObserver.observe(container, {
2264        childList: true,
2265        subtree: true
2266      });
2267    }
2268  })();
2269  const sectionSelector = document.getElementById(sectionDomId);
2270  const searchToggleSelector = sectionSelector.querySelector('.js-search-toggle-btn');
2271  const searchWrapperSelector = sectionSelector.querySelector('.js-header-search');
2272  const header = sectionSelector.querySelector('.js-header');
2273  let lastScrollTop = 0;
2274  (function (stickyAnchorRoot) {
2275    if (!stickyAnchorRoot) return;
2276    function getInFlowTop(target) {
2277      var inlineValue = target.style.getPropertyValue('position');
2278      var inlinePriority = target.style.getPropertyPriority('position');
2279      target.style.setProperty('position', 'relative', 'important');
2280      var top = target.getBoundingClientRect().top + window.pageYOffset;
2281      if (inlineValue) target.style.setProperty('position', inlineValue, inlinePriority);else target.style.removeProperty('position');
2282      var scrollMarginTop = parseFloat(window.getComputedStyle(target).scrollMarginTop) || 0;
2283      return Math.max(0, top - scrollMarginTop);
2284    }
2285    stickyAnchorRoot.addEventListener('click', function (event) {
2286      if (event.defaultPrevented || event.button !== 0) return;
2287      if (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return;
2288      if (document.body.hasAttribute('data-scroll-container')) return;
2289      var link = event.target.closest('a[href]');
2290      if (!link || !stickyAnchorRoot.contains(link) || link.target === '_blank') return;
2291      var href = link.getAttribute('href');
2292      if (!/^#[^#]/.test(href)) return;
2293      var targetId;
2294      try {
2295        targetId = decodeURIComponent(href.slice(1));
2296      } catch (e) {
2297        return;
2298      }
2299      var target = document.getElementById(targetId);
2300      if (!target || window.getComputedStyle(target).position !== 'sticky') return;
2301      event.preventDefault();
2302      if (window.location.hash !== href) window.history.pushState(null, '', href);
2303      window.requestAnimationFrame(function () {
2304        window.scrollTo({
2305          top: getInFlowTop(target)
2306        });
2307      });
2308    });
2309  })(document.getElementById(sectionDomId));
2310  const subNavOpeners = sectionSelector.querySelectorAll('.js-subnav-opener');
2311  subNavOpeners.forEach(opener => {
2312    opener.addEventListener('click', function (e) {
2313      e.preventDefault();
2314      e.stopPropagation();
2315      const parent = opener.parentElement;
2316      subNavOpeners.forEach(otherOpener => {
2317        if (otherOpener !== opener) {
2318          otherOpener.parentElement.classList.remove('header-navigation__item--sub-nav--opened');
2319        }
2320      });
2321      parent.classList.toggle('header-navigation__item--sub-nav--opened');
2322    });
2323  });
2324  document.addEventListener('click', function (e) {
2325    if (!e.target.closest('.js-subnav-opener') && !e.target.closest('.header-navigation__item--sub-nav--opened')) {
2326      subNavOpeners.forEach(opener => {
2327        opener.parentElement.classList.remove('header-navigation__item--sub-nav--opened');
2328      });
2329    }
2330  });
2331  function initHeaderColors() {
2332    try {
2333      var colorStr = window.getComputedStyle(header).getPropertyValue("--backgroundColor");
2334      var bgColor = makeColor(colorStr);
2335      var isDark = (bgColor.rgba.r * 299 + bgColor.rgba.g * 587 + bgColor.rgba.b * 114) / 1000 < 128;
2336      sectionSelector.classList.add('is-background-color-' + (isDark ? 'dark' : 'light'));
2337    } catch (e) {}
2338  }
2339  function makeColor(str) {
2340    var color = {
2341      rgba: {
2342        r: 0,
2343        g: 0,
2344        b: 0,
2345        a: 0
2346      }
2347    };
2348    if (str && str.match) {
2349      var m = str.match(/rgba?\s*\((\d+)\s*,\s*(\d+)\s*,\s*(\d+)(?:\s*,\s*([\.0-9]+))?\)/);
2350      if (m) {
2351        color.rgba.r = parseInt(m[1]);
2352        color.rgba.g = parseInt(m[2]);
2353        color.rgba.b = parseInt(m[3]);
2354        color.rgba.a = parseFloat(m[4]);
2355        if (isNaN(color.rgba.a)) {
2356          color.rgba.a = 1;
2357        }
2358      }
2359    }
2360    return color;
2361  }
2362  initHeaderColors();
2363  var navEl = document.querySelector('nav > header') || document.querySelector('nav');
2364  var navbarHeight = navEl ? navEl.offsetHeight : 0;
2365  if (navEl) {
2366    if (window.ResizeObserver) {
2367      new ResizeObserver(function (entries) {
2368        if (!entries.length) return;
2369        navbarHeight = entries[0].target.offsetHeight;
2370      }).observe(navEl);
2371    } else {
2372      window.addEventListener('resize', function () {
2373        navbarHeight = navEl.offsetHeight;
2374      });
2375    }
2376  }
2377  function isLocomotiveActive() {
2378    return document.body.hasAttribute('data-scroll-container');
2379  }
2380  function updateHeaderVisibility(currentScrollTop) {
2381    if (!searchWrapperSelector || searchWrapperSelector.style.display !== 'block') {
2382      if (currentScrollTop === 0) header.classList.remove('header--hide');else if (currentScrollTop > lastScrollTop) header.classList.add('header--hide');else header.classList.remove('header--hide');
2383    }
2384    lastScrollTop = currentScrollTop;
2385  }
2386  function customHeaderHideShow(currentScrollTop) {
2387    if (!navEl) return;
2388    if (currentScrollTop > 0) {
2389      navEl.classList.add('scroll');
2390    } else {
2391      navEl.classList.remove('scroll');
2392    }
2393    if (currentScrollTop > lastScrollTop && currentScrollTop > navbarHeight) {
2394      document.documentElement.style.setProperty('--global-header-height', '0px');
2395    } else {
2396      document.documentElement.style.setProperty('--global-header-height', navbarHeight + 'px');
2397    }
2398  }
2399  window.addEventListener('scroll', function () {
2400    if (isLocomotiveActive()) return;
2401    var currentScrollTop = window.scrollY || document.documentElement.scrollTop;
2402    updateHeaderVisibility(currentScrollTop);
2403  });
2404  var isTicking = false;
2405  var latestLocoScrollY = 0;
2406  window.addEventListener('locomotive-scroll', function (e) {
2407    latestLocoScrollY = e.detail.scrollY;
2408    if (!isTicking) {
2409      window.requestAnimationFrame(function () {
2410        customHeaderHideShow(latestLocoScrollY);
2411        updateHeaderVisibility(latestLocoScrollY);
2412        isTicking = false;
2413      });
2414      isTicking = true;
2415    }
2416  });
2417  if (searchToggleSelector !== null) {
2418    searchToggleSelector.addEventListener('click', function () {
2419      if (searchWrapperSelector.style.display === 'block') {
2420        searchWrapperSelector.style.display = 'none';
2421      } else {
2422        searchWrapperSelector.style.display = 'block';
2423        header.classList.remove('header--hide');
2424      }
2425    });
2426    document.addEventListener('click', function (evt) {
2427      if (!searchToggleSelector.contains(evt.target) && !searchWrapperSelector.contains(evt.target)) searchWrapperSelector.style.display = 'none';
2428    });
2429  }
2430  window.luxuryPresence.mapApiLoader.load().then(() => {
2431    if (!searchWrapperSelector) return;
2432    const templateHTML = sectionSelector.querySelector('.js-card-template')?.innerHTML;
2433    const itemTemplate = templateHTML && Handlebars.compile(templateHTML);
2434    const searchMls = searchWrapperSelector.dataset.searchMls === 'true';
2435    const searchProperties = searchWrapperSelector.dataset.searchProperties === 'true';
2436    const selectedCountries = searchWrapperSelector.dataset.locations;
2437    const searchInputSelector = sectionSelector.querySelector('.js-header-search-input');
2438    const searchIconSelector = sectionSelector.querySelector('.js-header-btn-search');
2439    const closeIconSelector = sectionSelector.querySelector('.js-header-btn-close');
2440    const searchResultsSelector = sectionSelector.querySelector('.js-header-search-results-holder');
2441    const resultsContainerSelector = sectionSelector.querySelector('.js-header-results-container');
2442    const loaderSelector = sectionSelector.querySelector('.js-header-spinner');
2443    const predefinedSelector = sectionSelector.querySelector('.js-header-search-results-predefined');
2444    const nothingFoundSelector = sectionSelector.querySelector('.js-header-spinner-nothing-found');
2445    const service = new google.maps.places.AutocompleteService();
2446    const geocoder = new google.maps.Geocoder();
2447    var keyword;
2448    var leasePropertyState = false;
2449    var leasePropertySearched;
2450    var isLoading = false;
2451    var newSearchTimer;
2452    var placesResult = {};
2453    function updateSearchDisplay() {
2454      var hasResults = !!resultsContainerSelector.innerHTML;
2455      var hasPredefined = predefinedSelector.querySelectorAll('a:not(.not-processed)').length > 0;
2456      nothingFoundSelector.style.display = 'none';
2457      if (hasResults) {
2458        predefinedSelector.style.display = 'none';
2459        loaderSelector.style.display = 'none';
2460        resultsContainerSelector.style.display = 'block';
2461      } else if (isLoading) {
2462        resultsContainerSelector.style.display = 'none';
2463        predefinedSelector.style.display = 'none';
2464        loaderSelector.style.display = 'block';
2465      } else if (hasPredefined) {
2466        resultsContainerSelector.style.display = 'none';
2467        loaderSelector.style.display = 'none';
2468        predefinedSelector.style.display = 'block';
2469      } else {
2470        resultsContainerSelector.style.display = 'none';
2471        loaderSelector.style.display = 'none';
2472        predefinedSelector.style.display = 'none';
2473        if (keyword) nothingFoundSelector.style.display = 'block';
2474      }
2475    }
2476    function moveSelection(up) {
2477      var count = resultsContainerSelector.innerHTML ? resultsContainerSelector : predefinedSelector;
2478      var links = count.querySelectorAll('.results-link');
2479      if (!links.length) return;
2480      var idx = -1;
2481      links.forEach((link, i) => {
2482        if (idx === -1 && link.classList.contains('header-search-results__link--selected')) idx = i;
2483      });
2484      var newIdx;
2485      if (up) {
2486        newIdx = idx - 1;
2487        if (newIdx < 0) newIdx = links.length - 1;
2488      } else {
2489        newIdx = idx + 1;
2490        if (newIdx > links.length - 1) newIdx = 0;
2491      }
2492      if (newIdx !== idx) {
2493        searchResultsSelector.querySelector('.header-search-results__link--selected')?.classList.remove('header-search-results__link--selected');
2494        links[newIdx].classList.add('header-search-results__link--selected');
2495      }
2496    }
2497    function startSearch() {
2498      const term = searchInputSelector.value;
2499      if (term === keyword && leasePropertySearched === leasePropertyState) return;
2500      leasePropertySearched = leasePropertyState;
2501      keyword = term;
2502      if (term) doSearch(term, leasePropertySearched);else setResults(null);
2503    }
2504    function mlsSearch(term) {
2505      var query = {
2506        omnibox: term,
2507        limit: 5
2508      };
2509      return superagent.get(window.location.protocol + '//' + window.location.host + '/home-search/listings.json').query(query).then(function (res) {
2510        if (!Array.isArray(res.body)) return [];
2511        return res.body.map(function (item) {
2512          return {
2513            id: item.id,
2514            display_address: [item.address_1, item.city, [item.state, item.postal_code].filter(function (i) {
2515              return i;
2516            }).join(' ')].filter(function (i) {
2517              return i;
2518            }).join(', ')
2519          };
2520        });
2521      }, function (e) {
2522        console.log(e);
2523        return [];
2524      });
2525    }
2526    function resolveGeoBounds(placeId, description) {
2527      return new Promise(function (resolve, reject) {
2528        geocoder.geocode({
2529          'placeId': placeId
2530        }, function (results, status) {
2531          if (status != 'OK') return resolve(null);
2532          var result = results[0];
2533          var bounds = new google.maps.LatLngBounds();
2534          bounds.extend(result.geometry.viewport.getSouthWest());
2535          bounds.extend(result.geometry.viewport.getNorthEast());
2536          result.geometry.bounds = bounds.toJSON();
2537          var placeUrl = window.luxuryPresence.makeMlsLink(result);
2538          return resolve({
2539            placeUrl: placeUrl,
2540            description: description
2541          });
2542        });
2543      });
2544    }
2545    function addRestrictions(request) {
2546      switch (selectedCountries) {
2547        case 'Worldwide':
2548          return request;
2549        case 'US & Canada':
2550          request.componentRestrictions = {
2551            country: ['us', 'ca']
2552          };
2553          return request;
2554        default:
2555          request.componentRestrictions = {
2556            country: 'us'
2557          };
2558          return request;
2559      }
2560    }
2561    function resolveAutocomplete(term, deeper) {
2562      var request = addRestrictions({
2563        input: term,
2564        types: deeper ? ['geocode'] : ['(regions)'],
2565        limit: 1
2566      });
2567      return new Promise(function (resolve, reject) {
2568        service.getPlacePredictions(request, function (results, status) {
2569          if (status !== google.maps.places.PlacesServiceStatus.OK) {
2570            resolve(null);
2571            return;
2572          }
2573          if (!Array.isArray(results)) {
2574            resolve(null);
2575            return;
2576          }
2577          if (deeper) {
2578            var allowedTypes = {
2579              'neighborhood': true,
2580              'administrative_area_level_3': true,
2581              'administrative_area_level_4': true,
2582              'administrative_area_level_5': true,
2583              'sublocality_level_1': true,
2584              'sublocality_level_2': true,
2585              'sublocality_level_3': true
2586            };
2587            results = results.filter(function (res) {
2588              return res.types.find(t => allowedTypes[t]);
2589            });
2590          }
2591          if (!results.length) {
2592            resolve(null);
2593            return;
2594          }
2595          resolve(results);
2596        });
2597      });
2598    }
2599    function placesSearch(term, ignoreInput) {
2600      if (placesResult.term !== term) {
2601        placesResult = {
2602          term: term,
2603          result: resolveAutocomplete(term).then(function (results) {
2604            if (!ignoreInput && term !== keyword) return null;
2605            if (ignoreInput && !results) return resolveAutocomplete(term, true);
2606            return results;
2607          }).then(function (results) {
2608            if (!ignoreInput && term !== keyword || !results) return [];
2609            var geoResultPromises = results.map(function (result) {
2610              return resolveGeoBounds(result.place_id, result.description);
2611            });
2612            return Promise.all(geoResultPromises).then(function (geoLinks) {
2613              return geoLinks.filter(function (i) {
2614                return i;
2615              }).slice(0, 3);
2616            });
2617          })
2618        };
2619      }
2620      return placesResult.result;
2621    }
2622    function propertiesSearch(term) {
2623      var payload = {
2624        companyId: window.luxuryPresence.defaults.companyId,
2625        search: term,
2626        offset: 0,
2627        limit: 4,
2628        statusIds: ["5f528253-abb7-484e-95c3-330269ac1105", "959c11cf-8655-4f91-874c-292b0ab7ea6b", "a0012964-4f51-4430-abf8-6547c5ab6441", "df04ccbe-4621-4140-a504-ee1a17430bb7", "88b4ace6-f39b-4b25-a051-8f6dba976833", "96031d77-bbe5-4de3-90d8-1e4e70de8ca8"]
2629      };
2630      var gqlQuery = 'query ($companyId: String, $search: String, $offset: Int, $limit: Int, $propertyStatusId: [String!]) {properties (companyId: $companyId, search: $search, offset: $offset, limit: $limit, propertyStatusId: $propertyStatusId) {items {id name slug fullAddress privateAddress status isPasswordProtected priceUponRequest salesPrice reducedPrice leasePrice currency media {smallUrl mediumUrl largeUrl xLargeUrl xxLargeUrl height width altTagText}}}}';
2631      return superagent.post(window.luxuryPresence.defaults.routerUrl + '/graphql').send({
2632        query: gqlQuery,
2633        variables: window.luxuryPresence.routerApi.transformVariables('properties', payload)
2634      }).then(function (res) {
2635        var page = (res.body.data || {}).properties;
2636        return page && page.items || [];
2637      }, function (err) {
2638        return [];
2639      });
2640    }
2641    function doSearch(term, leaseProperty) {
2642      isLoading = true;
2643      updateSearchDisplay();
2644      Promise.all([searchMls ? mlsSearch(term, leaseProperty) : [], searchMls ? placesSearch(term) : [], searchProperties ? propertiesSearch(term, leaseProperty) : []]).then(function (res) {
2645        if (term !== keyword) return;
2646        setResults(res[0], res[1], res[2], leaseProperty);
2647      });
2648    }
2649    function makeResultsBlockHtml(title, elementClass, links) {
2650      if (!links || !links.length) return '';else return '<div class="header-search-results__block"><div class="header-search-results__title">' + title + '</div><div class="' + elementClass + '">' + links.join('') + '</div></div>';
2651    }
2652    function setResults(mlsResults, placesResults, propertiesResults, leaseProperty) {
2653      searchResultsSelector.querySelector('.header-search-results__link--selected')?.classList.remove('header-search-results__link--selected');
2654      isLoading = false;
2655      updateSearchDisplay();
2656      if (!mlsResults) {
2657        resultsContainerSelector.innerHTML = '';
2658        updateSearchDisplay();
2659        return;
2660      }
2661      if (!mlsResults.length && !placesResults.length && !propertiesResults.length) {
2662        updateSearchDisplay();
2663        return;
2664      }
2665      var propertiesHtml = makeResultsBlockHtml('Featured Properties', 'header-properties', propertiesResults.map(function (result) {
2666        return itemTemplate(result);
2667      }));
2668      var placesHtml = makeResultsBlockHtml('Locations', '', placesResults.map(function (result) {
2669        return `<a class="header-search-results__link lp-icon" href="${result.placeUrl}${leaseProperty ? '&lease_property=true' : ''}">${result.description}</a>`;
2670      }));
2671      var mlsHtml = makeResultsBlockHtml('Address', '', mlsResults.map(function (result) {
2672        return `<a href="/home-search/listings/${result.id}" class="header-search-results__link lp-icon">${result.display_address}</a>`;
2673      }));
2674      resultsContainerSelector.innerHTML = propertiesHtml + placesHtml + mlsHtml;
2675      updateSearchDisplay();
2676    }
2677    var neighborhoods = null;
2678    function fetchNeighborhoods() {
2679      var url = window.luxuryPresence.defaults.routerUrl;
2680      var gqlQuery = 'query ($companyId: String, $offset: Int, $limit: Int) {neighborhoods (companyId: $companyId, offset: $offset, limit: $limit) {items {id, name, mlsLink, googlePlaceData}}}';
2681      var payload = {};
2682      payload.offset = 0;
2683      payload.limit = 100;
2684      payload.companyId = window.luxuryPresence.defaults.companyId;
2685      return superagent.post(url + '/graphql').withCredentials().send({
2686        query: gqlQuery,
2687        variables: payload
2688      }).then(function (res) {
2689        var data = res.body.data && res.body.data.neighborhoods;
2690        neighborhoods = data && data.items || null;
2691        if (neighborhoods && !neighborhoods.length) {
2692          neighborhoods = null;
2693        }
2694      });
2695    }
2696    function setPredefinedNeighborhoods() {
2697      return fetchNeighborhoods().then(function () {
2698        if (!neighborhoods) return;
2699        var placesHtml = makeResultsBlockHtml('Locations', neighborhoods.map(function (item) {
2700          return `<a class="header-search-results__link lp-icon" href="${item.mlsLink}${leasePropertyState ? '&lease_property=true' : ''}">${item.googlePlaceData && item.googlePlaceData.formatted_address || item.name}</a>`;
2701        }));
2702        predefinedSelector.innerHTML = placesHtml;
2703        updateSearchDisplay();
2704      });
2705    }
2706    if (searchMls) setPredefinedNeighborhoods();
2707    closeIconSelector.style.opacity = '0';
2708    closeIconSelector.style.pointerEvents = 'none';
2709    searchInputSelector.setAttribute('inputmode', 'search');
2710    searchInputSelector.addEventListener('input', function () {
2711      if (this.value === '') {
2712        closeIconSelector.style.opacity = '0';
2713        closeIconSelector.style.pointerEvents = 'none';
2714        searchIconSelector.style.opacity = '1';
2715        searchIconSelector.style.pointerEvents = 'auto';
2716      } else {
2717        closeIconSelector.style.opacity = '1';
2718        closeIconSelector.style.pointerEvents = 'auto';
2719        searchIconSelector.style.opacity = '0';
2720        searchIconSelector.style.pointerEvents = 'none';
2721      }
2722      window.clearTimeout(newSearchTimer);
2723      newSearchTimer = window.setTimeout(startSearch, 300);
2724    });
2725    searchInputSelector.addEventListener('keydown', function (ev) {
2726      if (ev.which === 38) {
2727        ev.preventDefault();
2728        moveSelection(true);
2729        return false;
2730      }
2731      if (ev.which === 40) {
2732        ev.preventDefault();
2733        moveSelection();
2734        return false;
2735      }
2736      if (ev.which === 13) {
2737        let $lnk = searchResultsSelector.querySelector('.header-search-results__link--selected');
2738        if ($lnk) {
2739          $lnk.click();
2740          searchActive = false;
2741          updateSearchDisplay();
2742        } else {
2743          $searchBtn.click();
2744        }
2745      }
2746    });
2747    closeIconSelector.addEventListener('click', function () {
2748      searchInputSelector.value = '';
2749      searchInputSelector.dispatchEvent(new Event('input'));
2750      searchActive = false;
2751      updateSearchDisplay();
2752    });
2753    searchResultsSelector.addEventListener('mouseenter', function (ev) {
2754      searchResultsSelector.querySelector('.header-search-results__link--selected')?.classList.remove('header-search-results__link--selected');
2755    });
2756    function outsideClickHandler(e) {
2757      if (searchWrapperSelector.contains(e.target)) return;
2758      searchActive = false;
2759      updateSearchDisplay();
2760    }
2761    document.addEventListener('click', outsideClickHandler);
2762  });
2763})('global-navbar');
2764} catch(e) {
2765console.log(e);
2766}
2767                try {
2768(function init(sectionDomId, options) {
2769  var elementSelector = options.elementSelector || 'nav';
2770  var element = document.querySelector(elementSelector);
2771  var sections = document.querySelectorAll('body > section');
2772  var subNavContainers = element.querySelectorAll('.sub-nav');
2773  var initialBackgroundColor = options.initialBackgroundColor || element.style.backgroundColor;
2774  var backgroundColorScroll = options.backgroundColorScroll || '#191919';
2775  var fontColor = options.fontColor || '#fff';
2776  var fontColorScroll = options.fontColorScroll || '#000';
2777  var didScroll = false;
2778  var lastScrollTop = 0;
2779  var delta = 5;
2780
2781  // eslint-disable-next-line sonarjs/no-collapsible-if
2782  if (wow) {
2783    // Wowjs might not trigger for position fixed elements
2784    if (window.scrollY > 0) {
2785      element.querySelectorAll('.wow').forEach(el => wow.show(el));
2786    }
2787  }
2788  function adjustNavPinState() {
2789    // Remove 'visible' class from all subNavContainers
2790    for (let i = 0; i < subNavContainers.length; i++) {
2791      subNavContainers[i].classList.remove('visible');
2792    }
2793    if (window.scrollY > 0) {
2794      element.style.backgroundColor = backgroundColorScroll;
2795      element.style.color = fontColorScroll;
2796      element.classList.add('scroll');
2797    } else {
2798      element.style.backgroundColor = initialBackgroundColor;
2799      element.style.color = fontColor;
2800      element.classList.remove('scroll');
2801    }
2802  }
2803  adjustNavPinState();
2804  function onScroll() {
2805    didScroll = true;
2806  }
2807  window.addEventListener('scroll', onScroll);
2808
2809  // eslint-disable-next-line
2810  var debounceInterval = setInterval(() => {
2811    if (didScroll) {
2812      // eslint-disable-next-line
2813      hasScrolled();
2814      didScroll = false;
2815    }
2816  }, 250);
2817  function hasScrolled() {
2818    adjustNavPinState();
2819    // eslint-disable-next-line
2820    var navbarHeight = element.offsetHeight;
2821    // eslint-disable-next-line
2822    var st = window.scrollY;
2823
2824    // Make sure they scroll more than delta
2825    if (Math.abs(lastScrollTop - st) <= delta) {
2826      return;
2827    }
2828    if (st > lastScrollTop && st > navbarHeight) {
2829      // Scroll Down
2830      element.style.transform = `translateY(-${navbarHeight}px) scaleY(0)`;
2831      document.documentElement.style.setProperty('--global-header-height', '0px');
2832
2833      // Some sections "follow" the navbar with class sticky (i.e. Producer search)
2834      sections.forEach(section => {
2835        if (section.classList.contains('sticky')) {
2836          section.style.top = '0px';
2837        }
2838      });
2839    } else {
2840      // Scroll Up
2841      // eslint-disable-next-line
2842      if (st + window.innerHeight < document.documentElement.scrollHeight) {
2843        element.style.transform = `translateY(0) scaleY(1)`;
2844        document.documentElement.style.setProperty('--global-header-height', `${navbarHeight}px`);
2845        sections.forEach(section => {
2846          if (section.classList.contains('sticky')) {
2847            section.style.top = `${navbarHeight}px`;
2848          }
2849        });
2850      }
2851    }
2852    lastScrollTop = st;
2853  }
2854})('NAVBAR', JSON.parse("{\"fontColor\":\"#161515\",\"elementSelector\":\".header\",\"fontColorScroll\":\"#fff\",\"backgroundColorScroll\":\"rgba(26,26,26, .8)\",\"initialBackgroundColor\":\"#fff\"}"));
2855} catch(e) {
2856console.log(e);
2857}
2858                try {
2859(function init(sectionDomId) {
2860  if (sectionDomId === "main-section") sectionDomId = "global-sidemenu";
2861  (function (stickyAnchorRoot) {
2862    if (!stickyAnchorRoot) return;
2863    function getInFlowTop(target) {
2864      var inlineValue = target.style.getPropertyValue('position');
2865      var inlinePriority = target.style.getPropertyPriority('position');
2866      target.style.setProperty('position', 'relative', 'important');
2867      var top = target.getBoundingClientRect().top + window.pageYOffset;
2868      if (inlineValue) target.style.setProperty('position', inlineValue, inlinePriority);else target.style.removeProperty('position');
2869      var scrollMarginTop = parseFloat(window.getComputedStyle(target).scrollMarginTop) || 0;
2870      return Math.max(0, top - scrollMarginTop);
2871    }
2872    stickyAnchorRoot.addEventListener('click', function (event) {
2873      if (event.defaultPrevented || event.button !== 0) return;
2874      if (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return;
2875      if (document.body.hasAttribute('data-scroll-container')) return;
2876      var link = event.target.closest('a[href]');
2877      if (!link || !stickyAnchorRoot.contains(link) || link.target === '_blank') return;
2878      var href = link.getAttribute('href');
2879      if (!/^#[^#]/.test(href)) return;
2880      var targetId;
2881      try {
2882        targetId = decodeURIComponent(href.slice(1));
2883      } catch (e) {
2884        return;
2885      }
2886      var target = document.getElementById(targetId);
2887      if (!target || window.getComputedStyle(target).position !== 'sticky') return;
2888      event.preventDefault();
2889      if (window.location.hash !== href) window.history.pushState(null, '', href);
2890      window.requestAnimationFrame(function () {
2891        window.scrollTo({
2892          top: getInFlowTop(target)
2893        });
2894      });
2895    });
2896  })(document.getElementById(sectionDomId));
2897  var sidemenu = document.getElementById(sectionDomId);
2898  var openers = sidemenu.querySelectorAll('.js-sub-nav-opener');
2899  var items = sidemenu.querySelectorAll('.js-idemenu-navigation-item');
2900  var watermark = document.querySelector('.js-sidemenu-watermark');
2901  var onShow = function () {
2902    window.lpUI.requestScrollLock(sectionDomId);
2903  };
2904  var onHide = function () {
2905    window.lpUI.releaseScrollLock(sectionDomId);
2906  };
2907  sidemenu.addEventListener('lpui-show', onShow);
2908  sidemenu.addEventListener('lpui-hide', onHide);
2909  openers.forEach(function (opener) {
2910    opener.addEventListener('click', function (event) {
2911      event.preventDefault();
2912      this.classList.toggle('sidemenu-navigation__link--active');
2913      this.classList.toggle('sidemenu-navigation__link--sub-nav-active');
2914    });
2915  });
2916  document.body.addEventListener('click', function (evt) {
2917    if (!evt.target.closest('.sidemenu') && !evt.target.closest('.js-sidemenu-opener')) {
2918      window.lpUI.sideMenuHide();
2919    }
2920  });
2921  const handleLinkClick = function (href) {
2922    if (href && href.match(/^#[^#].*$/)) {
2923      window.lpUI.sideMenuHide();
2924    }
2925  };
2926  const mainNavLinks = sidemenu.querySelectorAll('.sidemenu-navigation__link');
2927  mainNavLinks.forEach(function (link) {
2928    link.addEventListener('click', function (event) {
2929      const href = this.getAttribute('href');
2930      handleLinkClick(href);
2931    });
2932  });
2933  const subNavLinks = sidemenu.querySelectorAll('.sidemenu-navigation-sub-nav__link');
2934  subNavLinks.forEach(function (link) {
2935    link.addEventListener('click', function (event) {
2936      const href = this.getAttribute('href');
2937      handleLinkClick(href);
2938    });
2939  });
2940  if (watermark) {
2941    items.forEach(function (item, index) {
2942      item.setAttribute("data-id", index <= 9 ? "0" + (index + 1) : index + 1);
2943    });
2944    items.forEach(function (item) {
2945      item.addEventListener('mouseenter', function () {
2946        watermark.setAttribute("data-id", item.getAttribute("data-id"));
2947        watermark.style.opacity = 1;
2948      });
2949      item.addEventListener('mouseleave', function () {
2950        watermark.style.opacity = 0;
2951      });
2952    });
2953  }
2954})('global-sidemenu');
2955} catch(e) {
2956console.log(e);
2957}
2958                
2959                try {
2960(function init(sectionDomId) {
2961  const sectionDom = document.getElementById(sectionDomId);
2962  const backToTopBtn = sectionDom.querySelector('.js-back-to-top');
2963  backToTopBtn?.addEventListener('click', () => {
2964    window.scrollTo({
2965      top: 0,
2966      behavior: 'smooth'
2967    });
2968  });
2969})('global-footer');
2970} catch(e) {
2971console.log(e);
2972}
2973                
2974                try {
2975(function init(sectionDomId) {
2976  var _section = $('#' + sectionDomId);
2977  var _footer = document.getElementById('global-footer');
2978  const redirectLink = _section.find('.js-redirect-link');
2979  function setHttp(link) {
2980    if (link.search(/^(http[s]?\:\/\/|\/)/) == -1) {
2981      link = 'https://' + link;
2982    }
2983    return link;
2984  }
2985  function redirectPage(link) {
2986    if (link.length) {
2987      window.location.href = setHttp(link.attr('href'));
2988    }
2989  }
2990  const emailInput = _section.find('.js-email-input');
2991  const emailRegex = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~\-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)+/;
2992  emailInput.on('input', function () {
2993    if (emailRegex.test(this.value)) {
2994      this.setCustomValidity('');
2995    } else {
2996      this.setCustomValidity('Please enter a valid email address.');
2997    }
2998    this.reportValidity();
2999  });
3000  _section.find('input[name="name"]').on("keyup", function () {
3001    if (this.value.replaceAll(/\d/g, "").trim().split(" ").length < 2 || this.value.replaceAll(/\d/g, "").trim() === "") {
3002      this.setCustomValidity("Please input your first name and last name.");
3003    } else {
3004      this.setCustomValidity("");
3005    }
3006  });
3007  _section.find('form').on("reset", function () {
3008    $(this).addClass("show-success");
3009    redirectPage(redirectLink);
3010  });
3011  $(window).scroll(function () {
3012    if ($(this).scrollTop() >= 150) _section.find('.btn-holder').addClass('visible');else _section.find('.btn-holder').removeClass('visible');
3013  });
3014  _section.find('.close-btn, .connect-btn').click(function () {
3015    _section.find('.pop-up').toggle();
3016    _section.find('.btn-holder').toggle();
3017  });
3018  if (!_footer) return;
3019  const observer = new IntersectionObserver(entries => {
3020    entries.forEach(entry => {
3021      if (entry.isIntersecting) _section.hide();else _section.show();
3022    });
3023  }, {
3024    threshold: 0.1
3025  });
3026  observer.observe(_footer);
3027  function selectToDropdown(selectItem) {
3028    let customDropdown = `
3029        <div class="custom-select" role="presentation">
3030        <button class="custom-select-toggle is-placeholder" type="button" aria-haspopup="true" aria-expanded="false"></button>
3031        <div class="custom-select-menu" style="display: none;max-height: none;">
3032        <div class="custom-select-content">
3033        </div>
3034        </div>
3035        </div>`;
3036    $(customDropdown).insertAfter(selectItem);
3037    let $dropdown = $($(selectItem).next());
3038    let $dropdownToggle = $dropdown.find(".custom-select-toggle");
3039    let $dropdownMenu = $dropdown.find(".custom-select-menu");
3040    let $dropdownContent = $dropdown.find(".custom-select-content");
3041    $dropdownToggle.addClass($(selectItem).attr("class")).removeClass("dropdown-select");
3042    $dropdownToggle.attr("id", $(selectItem).attr("id") + "custom");
3043    $dropdownMenu.attr("aria-labelledby", $dropdownToggle.attr("id"));
3044    appendOptionButtons(selectItem, $dropdownContent);
3045    $(selectItem).removeClass().addClass("sr-only");
3046    var toggleText = $(selectItem).find(":selected").first().text() || $(selectItem).children().first().text();
3047    $dropdownToggle.html(toggleText);
3048    $dropdown.on("click", ".custom-select-item", function (e) {
3049      if ($(this).hasClass("is-disabled")) return;
3050      let elementNumber = $(this).index();
3051      let $originalSelect = $(this).closest(".custom-select").siblings("select");
3052      let $linkedOption = $originalSelect.find("option").eq(elementNumber);
3053      if (!$linkedOption.prop("selected")) {
3054        $linkedOption.prop("selected", true);
3055        $originalSelect.change();
3056        $(this).addClass("is-selected").siblings(".custom-select-item").removeClass("is-selected");
3057        $dropdownToggle.html($(this).html());
3058        closeSelectMenu($(this).closest(".custom-select-menu"));
3059      }
3060      $dropdownToggle.removeClass("is-placeholder");
3061    });
3062    function convertOptionToButton(option) {
3063      var optionText = $(option).text();
3064      var optionValue = $(option).attr("value") || $(option).text();
3065      var optionIsDisabled = $(option).prop("disabled");
3066      var outputButton = `<button value="${optionValue}" class="custom-select-item" type="button" ${optionIsDisabled ? "disabled" : ""}>${optionText}</button>`;
3067      return outputButton;
3068    }
3069    function appendOptionButtons(selectItem, appendTarget) {
3070      $(selectItem).find("option").each(function () {
3071        let currentButton = convertOptionToButton(this);
3072        $(appendTarget).append(currentButton);
3073      });
3074    }
3075    function showSelectMenu(selectMenu) {
3076      var customSelect = $(selectMenu).closest(".custom-select")[0];
3077      $(customSelect).addClass("open");
3078      $(selectMenu).slideDown();
3079    }
3080    function closeSelectMenu(selectMenu) {
3081      var customSelect = $(selectMenu).closest(".custom-select")[0];
3082      $(customSelect).removeClass("open");
3083      $(selectMenu).slideUp();
3084    }
3085    $dropdown.on("click", ".custom-select-toggle", function (e) {
3086      var $customSelect = $(this).closest(".custom-select");
3087      var selectMenu = $customSelect.find(".custom-select-menu")[0];
3088      if ($customSelect.hasClass("open")) {
3089        closeSelectMenu(selectMenu);
3090      } else {
3091        showSelectMenu(selectMenu);
3092      }
3093    });
3094    $(document).on("click", function (e) {
3095      if ($(e.target).closest(".custom-select").length < 1 && $(".custom-select").hasClass("open")) {
3096        $(".custom-select.open").each(function () {
3097          var selectMenu = $(this).find(".custom-select-menu")[0];
3098          closeSelectMenu(selectMenu);
3099        });
3100      }
3101    });
3102  }
3103  $(".pop-up select[name='interest']").each(function () {
3104    selectToDropdown(this);
3105  });
3106})('global-mobile-contact');
3107} catch(e) {
3108console.log(e);
3109}
3110                
3111                try {
3112(function init(sectionDomId) {
3113  const scrollSection = document.getElementById(`${sectionDomId}`).querySelector('.js-scroll-section');
3114  const introBtn = document.getElementById(`${sectionDomId}`).querySelector('.jsScrollBtn');
3115  introBtn.addEventListener("click", function (e) {
3116    e.preventDefault();
3117    window.scrollTo({
3118      top: scrollSection.offsetTop + scrollSection.offsetHeight,
3119      behavior: "smooth"
3120    });
3121  });
3122})('section-c3f2b87c-69b5-446c-a7d3-6ef3300b8597', 'undefined');
3123} catch(e) {
3124console.log(e);
3125}
3126                try {
3127(function init(sectionDomId, options) {
3128  let section = null;
3129  switch (sectionDomId) {
3130    case 'NAVBAR':
3131      section = document.querySelector('body > nav, #global-navbar');
3132      break;
3133    case 'FOOTER':
3134      section = document.querySelector('body > footer, #global-footer');
3135      break;
3136    case 'SIDEMENU':
3137      section = document.querySelector('body > div.sidemenu, #global-sidemenu');
3138      break;
3139    case 'CONTACT':
3140      section = document.querySelector('#modal-global-contact-us');
3141      break;
3142    case 'MOBILE_CONTACT':
3143      section = document.querySelector('body > div.mobile-contact-wrapper, #global-mobile-contact');
3144      break;
3145    case 'SUBSCRIBE':
3146      // Subscribe Not Implemented
3147      section = null;
3148      break;
3149    case 'ACCOUNT':
3150      // Account Not Implemented
3151      section = null;
3152      break;
3153    default:
3154      section = document.querySelector('#' + sectionDomId);
3155  }
3156  if (!section) {
3157    return;
3158  }
3159
3160  // Where content / items are rendered
3161  const dataContainer = section.querySelector('.data-container');
3162  if (!dataContainer) {
3163    // no place to render items = no need to query server or do anything else
3164    return;
3165  }
3166  let variables = options.variables || {};
3167
3168  // Some variables in options may not have been injected - remove
3169  Object.keys(variables).forEach(function (variableName) {
3170    if (typeof variables[variableName] === 'string' && variables[variableName].match(/^{{.*}}$/)) {
3171      delete variables[variableName];
3172    }
3173  });
3174
3175  // Merge page query variables
3176  if (options.usePageResource) {
3177    variables = {
3178      ...variables,
3179      ...window.luxuryPresence.config.pageMeta.pageQueryVariables[options.resource]
3180    };
3181  }
3182
3183  // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. Callers
3184  // resolve the flag — fetchData reads the section stamp, aux fetches read
3185  // their own resource's stamp (auxUsesRouter).
3186  function apiUrl(useRouter) {
3187    return options.url || (useRouter ? window.luxuryPresence.defaults.routerUrl : window.luxuryPresence.defaults.apiGatewayUrl);
3188  }
3189
3190  // ROUTER-CLEANUP: aux resources roll out on their own flag, not the section's
3191  // (options.routerApiAux is stamped per aux resource server-side).
3192  function auxUsesRouter(resource) {
3193    return !!(options.routerApiAux && options.routerApiAux[resource]);
3194  }
3195
3196  // Pagination Executes on a Numbered Pagination Container
3197  //  Or via a load more button
3198  let mode = 'BUTTONLESS_PAGINATION';
3199  const container = section.querySelector('.pagination-container');
3200  const loadMoreButton = section.querySelector(options?.loadMoreSelector);
3201  if (container) {
3202    mode = 'NUMBERED_PAGINATION';
3203  }
3204  if (loadMoreButton) {
3205    mode = 'LOAD_MORE_BUTTON';
3206  }
3207  let searchContainer = section.querySelector('.search-container');
3208  const hidePaginationOnFirstPage = options.hidePaginationOnFirstPage || false;
3209  const eventPrefix = '__pagination-';
3210  const searchFormParams = options.searchFormParams || (options.resource === 'properties' ? [{
3211    param: 'neighborhoodId',
3212    urlKey: 'neighborhood'
3213  }, {
3214    param: 'search',
3215    urlKey: 'search'
3216  }, {
3217    param: 'salesPriceGTE',
3218    urlKey: 'pricemin',
3219    formKey: 'priceMin',
3220    type: 'int'
3221  }, {
3222    param: 'salesPriceLTE',
3223    urlKey: 'pricemax',
3224    formKey: 'priceMax',
3225    type: 'int'
3226  }, {
3227    param: 'livingSpaceSizeGTE',
3228    urlKey: 'areamin',
3229    formKey: 'areaMin',
3230    type: 'int'
3231  }, {
3232    param: 'livingSpaceSizeLTE',
3233    urlKey: 'areamax',
3234    formKey: 'areaMax',
3235    type: 'int'
3236  }] : []);
3237
3238  // Total entries - initialized in first render
3239  let totalNumber = 0;
3240  const DefaultSearchParams = {
3241    page: 1
3242  };
3243  searchFormParams.forEach(function (formParam) {
3244    DefaultSearchParams[formParam.formKey || formParam.param] = null;
3245  });
3246  let searchParams = {
3247    ...DefaultSearchParams
3248  };
3249  const offset = options.variables?.offset || 0;
3250  let scrollTarget = options.scrollTargetSelector ? section.querySelector(options.scrollTargetSelector) || section : section;
3251  let scrollOffset = (parseInt(options.scrollOffset, 10) || 0) ?? 100;
3252
3253  // entries of per page
3254  // when query variables for a given section would't be filled options.pageSize can store
3255  // template string, ex: "{{variables.limit}}", below code handles that case and set 9 as a default value
3256  let pageSize = parseInt(options.pageSize, 10) || 9;
3257
3258  // Adding mobile pageRange support
3259  var NARROW_BREAKPOINT = 600;
3260  var mobileBreakpoint = options.mobileBreakpoint > 0 ? options.mobileBreakpoint : NARROW_BREAKPOINT;
3261  var paginationMql = window.matchMedia(`(max-width: ${mobileBreakpoint}px)`);
3262
3263  // Page range (pages on both sides of the current page)
3264  var mobilePageRange = options.mobilePageRange > 0 ? options.mobilePageRange : 0;
3265  var desktopPageRange = options.pageRange >= 0 ? options.pageRange : 2;
3266  var pageRange = paginationMql.matches ? mobilePageRange : desktopPageRange;
3267
3268  // Whether to display the 'Previous' button
3269  var showPrevious = true;
3270
3271  // Whether to display the 'Next' button
3272  var showNext = true;
3273
3274  // Whether to display the page buttons
3275  var showPageNumbers = true;
3276
3277  // 'Previous' text
3278  var prevText = options.prevText || '&laquo;';
3279
3280  // 'Next' text
3281  var nextText = options.nextText || '&raquo;';
3282
3283  // Ellipsis text
3284  var ellipsisText = '&hellip;';
3285  var classPrefix = 'paginationjs';
3286
3287  // Default active class
3288  var activeClassName = 'active';
3289
3290  // Default disable class
3291  var disableClassName = 'disabled';
3292
3293  // Pagination element's position in the container
3294  var position = 'bottom';
3295
3296  // Whether to trigger pagination at initialization
3297  var triggerPagingOnInit = !options.skipInitialLoad;
3298  var showFirstOnEllipsisShow = true;
3299  var showLastOnEllipsisShow = true;
3300
3301  // Instantiated in init()
3302  var el = null;
3303
3304  // Controls scrollTop logic
3305  var firstRender = true;
3306  var renderBySearch = false;
3307  var disabled = false;
3308
3309  // Pagination script class selector
3310  var paginationScriptSelector = options.paginationPartialName ? `.${options.paginationPartialName}` : '.pagination-script';
3311
3312  // Property Specific Image Override if No Image
3313  var propertyPlaceholderImage = window.luxuryPresence.defaults.propertyPlaceholderImage;
3314
3315  // Construct template
3316  var templateHTML = section.querySelector(`script${paginationScriptSelector}`)?.innerHTML || '';
3317  var template = Handlebars.compile(templateHTML);
3318
3319  // Initialize
3320  init();
3321  function init() {
3322    Object.assign(searchParams, window.luxuryPresence.pagination.deserializeParams(searchFormParams, sectionDomId));
3323
3324    // Append/prepend pagination element to the pagination container
3325    if (mode === 'NUMBERED_PAGINATION') {
3326      el = document.createElement('div');
3327      el.className = 'paginationjs';
3328      container[position === 'bottom' ? 'append' : 'prepend'](el);
3329    }
3330    if (searchContainer) {
3331      initSearchContainer({
3332        fetchNeighborhoods: searchContainer.dataset.fetchNeighborhoods === 'true',
3333        fetchPostCategories: searchContainer.dataset.fetchPostCategories === 'true',
3334        fetchOffices: searchContainer.dataset.fetchOffices === 'true',
3335        fetchRentalRates: searchContainer.dataset.fetchRentalRates === 'true'
3336      }, function () {
3337        syncSearchFormState(searchParams);
3338      });
3339    }
3340
3341    // Bind events
3342    observer();
3343  }
3344  function syncSearchFormState(params) {
3345    searchContainer.dispatchEvent(new CustomEvent('sync', {
3346      detail: params
3347    }));
3348  }
3349  function initSearchContainer(options, done) {
3350    var promises = [];
3351    if (options.fetchNeighborhoods) {
3352      promises.push(fetchAllNeighborhoods(function (neighborhoods) {
3353        searchContainer.dispatchEvent(new CustomEvent('neighborhoods-data', {
3354          detail: {
3355            data: neighborhoods.map(function (item) {
3356              return {
3357                value: item.id,
3358                label: item.name
3359              };
3360            })
3361          }
3362        }));
3363      }));
3364    }
3365    if (options.fetchPostCategories) {
3366      promises.push(fetchPostCategories(function (categories) {
3367        searchContainer.dispatchEvent(new CustomEvent('post-categories-data', {
3368          detail: {
3369            data: categories
3370          }
3371        }));
3372      }));
3373    }
3374    if (options.fetchOffices) {
3375      promises.push(fetchOffices(function (offices) {
3376        searchContainer.dispatchEvent(new CustomEvent('offices-data', {
3377          detail: {
3378            data: offices
3379          }
3380        }));
3381      }));
3382    }
3383    if (options.fetchRentalRates) {
3384      promises.push(fetchAllRentalRates(function (rentalRates) {
3385        searchContainer.dispatchEvent(new CustomEvent('rental-rates-data', {
3386          detail: {
3387            data: rentalRates
3388          }
3389        }));
3390      }));
3391    }
3392    if (promises.length > 0) {
3393      Promise.all(promises).then(function () {
3394        done();
3395      });
3396    } else {
3397      // element's custom code is not executed yet, so we're scheduling callback to after element's code
3398      setTimeout(done);
3399    }
3400  }
3401  function fetchAllNeighborhoods(done) {
3402    var useRouter = auxUsesRouter('neighborhoods');
3403    // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. Same
3404    // args on both APIs (the federated neighborhoods field accepts
3405    // withProperties/withBlogPosts); only the selection set differs.
3406    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') + '}}';
3407    var payload = {};
3408    payload.offset = 0;
3409    payload.limit = 100;
3410    payload.companyId = variables.companyId;
3411    if (options.resource === 'properties') {
3412      payload.withProperties = {
3413        active: true
3414      };
3415      ['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) {
3416        if (variables[field] !== undefined && variables[field] !== null) {
3417          payload.withProperties[field] = variables[field];
3418        }
3419      });
3420    }
3421    if (options.resource === 'posts') {
3422      payload.withBlogPosts = {
3423        active: true
3424      };
3425      ['search', 'postStatusId', 'featured', 'categoryId', 'categoryIds', 'neighborhoodId', 'slug'].forEach(function (field) {
3426        if (variables[field] !== undefined && variables[field] !== null) {
3427          payload.withBlogPosts[field] = variables[field];
3428        }
3429      });
3430    }
3431
3432    // ROUTER-CLEANUP: keep router branch, drop legacy when API retired
3433    if (useRouter) {
3434      payload = window.luxuryPresence.routerApi.transformVariables('neighborhoods', payload);
3435    }
3436    superagent.post(apiUrl(useRouter) + '/graphql').withCredentials().send({
3437      query: gqlQuery,
3438      variables: payload
3439    }).then(function (res) {
3440      var value = res.body.data && res.body.data.neighborhoods || {};
3441      // ROUTER-CLEANUP: keep router branch, drop legacy when API retired
3442      var items = useRouter ? window.luxuryPresence.routerApi.transformPage(value).items : value || [];
3443      done(items, items.length);
3444    });
3445  }
3446  function fetchPostCategories(done) {
3447    var featured = options.resource === 'posts' && !!variables.featured;
3448    var useRouter = auxUsesRouter('postCategories');
3449    // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. Only the
3450    // selection set differs ({ items {...} } on the router).
3451    var selection = 'id, name, publishedCount, featuredPublishedCount';
3452    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) + '}}';
3453    var payload = {};
3454    payload.offset = 0;
3455    payload.limit = 100;
3456    payload.companyId = variables.companyId;
3457    superagent.post(apiUrl(useRouter) + '/graphql').withCredentials().send({
3458      query: gqlQuery,
3459      variables: payload
3460    }).then(function (res) {
3461      var value = res.body.data && res.body.data.postCategories || {};
3462      // ROUTER-CLEANUP: keep router branch, drop legacy when API retired
3463      var items = useRouter ? window.luxuryPresence.routerApi.transformPage(value).items : value || [];
3464      done(items.map(function (item) {
3465        item.count = featured ? item.featuredPublishedCount : item.publishedCount;
3466        return item;
3467      }), items.length);
3468    });
3469  }
3470  function fetchOffices(done) {
3471    var useRouter = auxUsesRouter('offices');
3472    // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. Only the
3473    // selection set differs ({ items {...} } on the router).
3474    var selection = 'id, name, tags';
3475    // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. The two
3476    // APIs differ in more than the items wrapper: federated offices takes
3477    // companyId: ID! (legacy gateway: String), so each branch builds its whole doc.
3478    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 + '}}';
3479    var payload = {
3480      offset: 0,
3481      limit: 100,
3482      companyId: variables.companyId
3483    };
3484
3485    // ROUTER-CLEANUP: keep router branch, drop legacy when API retired
3486    if (useRouter) {
3487      payload = window.luxuryPresence.routerApi.transformVariables('office
3487s', payload);
3488    }
3489    superagent.post(apiUrl(useRouter) + '/graphql').withCredentials().send({
3490      query: gqlQuery,
3491      variables: payload
3492    }).then(function (res) {
3493      var value = res.body.data && res.body.data.offices || {};
3494      // ROUTER-CLEANUP: keep router branch, drop legacy when API retired
3495      var items = useRouter ? window.luxuryPresence.routerApi.transformPage(value).items : value || [];
3496      done(items, items.length);
3497    });
3498  }
3499
3500  // ROUTER-CLEANUP: no rentalRates field on the federated router — legacy only.
3501  function fetchAllRentalRates(done) {
3502    var url = options.url || window.luxuryPresence.defaults.apiGatewayUrl;
3503    var gqlQuery = 'query ($companyId: String, $offset: Int, $limit: Int) {' + 'rentalRates (companyId: $companyId, offset: $offset, limit: $limit) {rentalRateId, label}}';
3504    var payload = {
3505      offset: 0,
3506      limit: 100,
3507      companyId: variables.companyId
3508    };
3509    superagent.post(url + '/graphql').withCredentials().send({
3510      query: gqlQuery,
3511      variables: payload
3512    }).then(function (res) {
3513      var items = res.body.data && res.body.data.rentalRates || [];
3514      done(items, items.length);
3515    }).catch(function (err) {
3516      console.error('Error fetching rental rates:', err);
3517      done([], 0);
3518    });
3519  }
3520  function fetchData(params, done) {
3521    var resource = options.resource;
3522    var gqlQuery = options.query || window.luxuryPresence.defaults.gql[resource];
3523    var payload = {};
3524    try {
3525      payload = JSON.parse(JSON.stringify(variables));
3526    } catch (e) {
3527      Object.keys(variables).forEach(function (variableName) {
3528        payload[variableName] = variables[variableName];
3529      });
3530    }
3531    payload.offset = (params.page - 1) * pageSize + offset;
3532    payload.limit = pageSize;
3533    payload.companyId = options.companyId;
3534    searchFormParams.forEach(function (formParam) {
3535      var val = params[formParam.formKey || formParam.param];
3536      if (val !== null && val !== undefined) {
3537        objSet(payload, formParam.param, val);
3538      }
3539    });
3540
3541    // ROUTER-CLEANUP: keep router branch, drop legacy when API retired
3542    if (options.useRouterApi) {
3543      payload = window.luxuryPresence.routerApi.transformVariables(resource, payload);
3544    }
3545
3546    // TODO: Disabled loading due to jarring effect
3547    // dataContainer.html('Loading...');
3548    superagent.post(apiUrl(options.useRouterApi) + '/graphql').withCredentials().send({
3549      query: gqlQuery,
3550      variables: payload
3551    }).then(function (res) {
3552      if (res.body.errors) {
3553        done(res.body.errors);
3554        return;
3555      }
3556      var data = res.body.data || {};
3557      // ROUTER-CLEANUP: keep router branch, drop legacy when API retired
3558      var resources;
3559      var resourceCount;
3560      if (options.useRouterApi) {
3561        var page = window.luxuryPresence.routerApi.transformPage(data[resource]);
3562        resources = window.luxuryPresence.routerApi.transformResponse(resource, page.items);
3563        resourceCount = page.count;
3564      } else {
3565        resources = data[resource] || [];
3566        resourceCount = data[resource + 'Count'] && data[resource + 'Count'].count ? data[resource + 'Count'].count : 0;
3567      }
3568      const finish = function (items) {
3569        if (resource === 'properties' && propertyPlaceholderImage?.id) {
3570          items = items.map(item => {
3571            if (item.media?.length === 0) {
3572              return Object.assign(item, {
3573                media: [propertyPlaceholderImage]
3574              });
3575            }
3576            return item;
3577          });
3578        }
3579        done(null, items, resourceCount);
3580      };
3581
3582      // ROUTER-CLEANUP: client half of PLAT-4073 — resolve the requested
3583      // disclaimers before rendering; older SDKs skip (keys stay unset).
3584      if (options.useRouterApi && resource === 'properties' && options.routerPropertyDisclaimers && options.routerPropertyDisclaimers.length && window.luxuryPresence.routerApi && typeof window.luxuryPresence.routerApi.applyPropertyDisclaimers === 'function') {
3585        window.luxuryPresence.routerApi.applyPropertyDisclaimers(resources, options.routerPropertyDisclaimers).then(finish);
3586        return;
3587      }
3588      finish(resources);
3589    });
3590  }
3591  function getTotalPage() {
3592    return Math.ceil(totalNumber / pageSize);
3593  }
3594  function renderPaginationList() {
3595    var totalPages = getTotalPage();
3596    var rangeStart = searchParams.page - pageRange;
3597    var rangeEnd = searchParams.page + pageRange;
3598    if (rangeEnd > totalPages) {
3599      rangeEnd = totalPages;
3600      rangeStart = totalPages - pageRange * 2;
3601      rangeStart = rangeStart < 1 ? 1 : rangeStart;
3602    }
3603    if (rangeStart <= 1) {
3604      rangeStart = 1;
3605      rangeEnd = Math.min(pageRange * 2 + 1, totalPages);
3606    }
3607
3608    // Making sure that 1 more page button is shown in edge positions
3609    if (pageRange === 0) {
3610      if (searchParams.page === totalPages) {
3611        rangeStart = totalPages <= 1 ? 1 : totalPages - 1;
3612      }
3613      if (searchParams.page === 1) {
3614        rangeEnd = Math.min(2, totalPages);
3615      }
3616    }
3617
3618    // Render pagination list
3619    if (mode === 'NUMBERED_PAGINATION') {
3620      el.innerHTML = generateHTML({
3621        currentPage: searchParams.page,
3622        pageRange: pageRange,
3623        rangeStart: rangeStart,
3624        rangeEnd: rangeEnd
3625      });
3626      if (totalPages < 2 && hidePaginationOnFirstPage) {
3627        container.style.display = 'none';
3628      } else {
3629        container.style.display = '';
3630      }
3631    } else if (mode === 'LOAD_MORE_BUTTON') {
3632      if (searchParams.page >= totalPages) {
3633        loadMoreButton.style.display = 'none';
3634      } else {
3635        loadMoreButton.style.display = '';
3636      }
3637    }
3638  }
3639  function render(data) {
3640    renderPaginationList();
3641
3642    // Render new content with handlebars
3643    var html = '';
3644    if (mode === 'LOAD_MORE_BUTTON' && searchParams.page > 1) {
3645      // If using load more, append search results to existing results
3646      html = dataContainer.innerHTML;
3647    }
3648    for (var i = 0; i < data.length; i++) {
3649      var itemData = recursivelyParse(data[i]);
3650      itemData.sectionIndex = options.sectionIndex;
3651      itemData.renderOptions = options.renderOptions;
3652      html += template(itemData);
3653    }
3654    dataContainer.innerHTML = html;
3655
3656    // Scroll Top
3657    if (!firstRender && mode === 'NUMBERED_PAGINATION' && (!renderBySearch || !options.skipScrollOnSearch)) {
3658      // Only animate to the top if we replace dataContainer (numbered pagination)
3659      setTimeout(() => {
3660        const scrollTargetOffsetTop = scrollTarget.getBoundingClientRect().top + window.scrollY - scrollOffset;
3661        window.scrollTo({
3662          top: scrollTargetOffsetTop,
3663          behavior: 'smooth'
3664        });
3665      }, 250);
3666    }
3667    return true;
3668  }
3669  function generateHTML(args) {
3670    const totalPages = getTotalPage();
3671    const {
3672      rangeStart,
3673      rangeEnd
3674    } = args;
3675    const makeLnk = page => window.luxuryPresence.pagination.serializeParams(searchFormParams, sectionDomId, {
3676      ...searchParams,
3677      page
3678    });
3679    let html = '';
3680    if (showPrevious || showPageNumbers || showNext) {
3681      html += '<div class="paginationjs-pages"><ul>';
3682
3683      // Previous button
3684      if (showPrevious) {
3685        if (searchParams.page <= 1) {
3686          html += `<li class="${classPrefix}-prev ${disableClassName}"><a>${prevText}</a></li>`;
3687        } else {
3688          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>`;
3689        }
3690      }
3691
3692      // Pages
3693      if (showPageNumbers) {
3694        if (rangeStart <= 3) {
3695          for (let i = 1; i < rangeStart; i++) {
3696            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>`;
3697          }
3698        } else {
3699          if (showFirstOnEllipsisShow) {
3700            html += `<li class="${classPrefix}-page ${classPrefix}-first J-paginationjs-page" data-num="1"><a href="${makeLnk(1)}">1</a></li>`;
3701          }
3702          html += `<li class="${classPrefix}-ellipsis ${disableClassName}"><a>${ellipsisText}</a></li>`;
3703        }
3704        for (let i = rangeStart; i <= rangeEnd; i++) {
3705          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>`;
3706        }
3707        if (rangeEnd < totalPages - 2) {
3708          html += `<li class="${classPrefix}-ellipsis ${disableClassName}"><a>${ellipsisText}</a></li>`;
3709          if (showLastOnEllipsisShow) {
3710            html += `<li class="${classPrefix}-page ${classPrefix}-last J-paginationjs-page" data-num="${totalPages}"><a href="${makeLnk(totalPages)}">${totalPages}</a></li>`;
3711          }
3712        } else {
3713          for (let i = rangeEnd + 1; i <= totalPages; i++) {
3714            html += `<li class="${classPrefix}-page J-paginationjs-page" data-num="${i}"><a href="${makeLnk(i)}">${i}</a></li>`;
3715          }
3716        }
3717      }
3718
3719      // Next button
3720      if (showNext) {
3721        if (searchParams.page >= totalPages) {
3722          html += `<li class="${classPrefix}-next ${disableClassName}"><a>${nextText}</a></li>`;
3723        } else {
3724          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>`;
3725        }
3726      }
3727      html += '</ul></div>';
3728    }
3729    return html;
3730  }
3731  function go(newSearchParams, callback, restorationVisit) {
3732    if (disabled) return;
3733    var goToPageNumber = newSearchParams.page;
3734
3735    // Page number is out of bounds
3736    if (!goToPageNumber || goToPageNumber < 1) return;
3737    var totalPage = getTotalPage();
3738
3739    // Page number is out of bounds
3740    if (!restorationVisit && totalNumber > 0) {
3741      if (goToPageNumber > totalPage) return;
3742    }
3743    if (!options.skipSerialization && (mode === 'NUMBERED_PAGINATION' || searchContainer)) {
3744      var newURL = window.luxuryPresence.pagination.serializeParams(searchFormParams, sectionDomId, {
3745        ...newSearchParams,
3746        page: goToPageNumber !== 1 && mode === 'NUMBERED_PAGINATION' ? newSearchParams.page : null
3747      });
3748      if (!areQueryParamsEqual(newSearchParams, searchParams) && !restorationVisit) {
3749        window.history.pushState({}, '', window.luxuryPresence.getPath(newURL, {
3750          queryString: true
3751        }));
3752      }
3753    }
3754
3755    // Fetch and update page
3756    fetchData(newSearchParams, renderWithData);
3757    disabled = true;
3758    function renderWithData(err, data, count) {
3759      if (err) {
3760        dataContainer.dispatchEvent(new Event('error'));
3761      } else {
3762        searchParams = {
3763          ...newSearchParams
3764        };
3765        totalNumber = count - offset;
3766        if (data.length === 0) {
3767          dataContainer.dispatchEvent(new Event('no-data'));
3768        } else {
3769          dataContainer.dispatchEvent(new Event('data'));
3770        }
3771        render(data);
3772        firstRender = false;
3773      }
3774      disabled = false;
3775      renderBySearch = false;
3776    }
3777  }
3778  function areQueryParamsEqual(first, second) {
3779    var differ = Object.keys(first).find(function (key) {
3780      return first[key] !== undefined && first[key] !== null && first[key] !== second[key];
3781    });
3782    if (differ) {
3783      return false;
3784    }
3785    differ = Object.keys(second).find(function (key) {
3786      return second[key] !== undefined && second[key] !== null && second[key] !== first[key];
3787    });
3788    return !differ;
3789  }
3790  function next(callback) {
3791    go({
3792      ...searchParams,
3793      page: searchParams.page + 1
3794    }, callback);
3795  }
3796  function previous(callback) {
3797    go({
3798      ...searchParams,
3799      page: searchParams.page - 1
3800    }, callback);
3801  }
3802  function refresh(callback) {
3803    go(searchParams, callback);
3804  }
3805  function update(params, callback) {
3806    renderBySearch = true;
3807    go(params, callback);
3808  }
3809  function observer() {
3810    if (searchContainer) {
3811      searchContainer.addEventListener('search', function (event, newSearchParams) {
3812        newSearchParams = event.detail || newSearchParams;
3813        update({
3814          ...searchParams,
3815          ...newSearchParams,
3816          page: 1
3817        });
3818      });
3819      searchContainer.addEventListener('clear-search', function () {
3820        const defaultSearchParams = {
3821          ...DefaultSearchParams
3822        };
3823        const isCurrentSearchFormStateDefault = areQueryParamsEqual({
3824          ...defaultSearchParams,
3825          page: null
3826        }, {
3827          ...searchParams,
3828          page: null
3829        });
3830
3831        // if mode is LOAD_MORE_BUTTON we should't make anything on clear
3832        // when search form have default state
3833        if (isCurrentSearchFormStateDefault && mode !== 'NUMBERED_PAGINATION') {
3834          return;
3835        }
3836
3837        // if someone initially go to some page and click 'Clear' on search from
3838        // we should't navigate to first page. We should preserve page value
3839        if (isCurrentSearchFormStateDefault) {
3840          defaultSearchParams.page = searchParams.page;
3841        }
3842        syncSearchFormState(defaultSearchParams);
3843        update(defaultSearchParams);
3844      });
3845    }
3846    if (mode === 'LOAD_MORE_BUTTON') {
3847      loadMoreButton.addEventListener('click', function (event) {
3848        go({
3849          ...searchParams,
3850          page: searchParams.page + 1
3851        });
3852        return false;
3853      });
3854    }
3855    if (mode === 'LOAD_MORE_BUTTON' || mode === 'BUTTONLESS_PAGINATION') {
3856      // Do initial render
3857      go(Object.assign({}, searchParams, {
3858        page: 1
3859      }));
3860      return;
3861    }
3862    if (mode === 'NUMBERED_PAGINATION') {
3863      // Go to specified page number
3864      container.addEventListener(eventPrefix + 'go', function (event) {
3865        let {
3866          pageNumber,
3867          done
3868        } = event.detail || {};
3869        pageNumber = parseInt(pageNumber, 10);
3870        if (!pageNumber) {
3871          return;
3872        }
3873        go({
3874          ...searchParams,
3875          page: pageNumber
3876        }, done);
3877      });
3878
3879      // Page number button click
3880      el.addEventListener('click', function (event) {
3881        let clickTarget = event.target;
3882        let current = clickTarget.closest('.J-paginationjs-page, .J-paginationjs-previous, .J-paginationjs-next');
3883        let pageNumber = current?.getAttribute('data-num');
3884        if (!pageNumber || current.classList.contains(disableClassName) || current.classList.contains(activeClassName)) {
3885          return;
3886        } else {
3887          go({
3888            ...searchParams,
3889            page: parseInt(pageNumber, 10)
3890          });
3891        }
3892        event.preventDefault();
3893      });
3894
3895      // Whether to load the default page
3896      var defaultPageNumber = searchParams.page;
3897      if (triggerPagingOnInit) {
3898        container.dispatchEvent(new CustomEvent(eventPrefix + 'go', {
3899          detail: {
3900            pageNumber: defaultPageNumber
3901          }
3902        }));
3903      }
3904    }
3905    window.addEventListener('popstate', function (event) {
3906      var newParams = Object.assign({}, DefaultSearchParams, window.luxuryPresence.pagination.deserializeParams(searchFormParams, sectionDomId));
3907      if (!areQueryParamsEqual(newParams, searchParams)) {
3908        go(newParams, null, true);
3909        if (searchContainer) {
3910          syncSearchFormState(newParams);
3911        }
3912      }
3913    });
3914  }
3915  function replaceVariables(template, variables) {
3916    var formattedString;
3917    for (var key in variables) {
3918      var value = variables[key];
3919      var regexp = new RegExp('<%=\\s*' + key + '\\s*%>', 'img');
3920      formattedString = (formattedString || template).replace(regexp, value);
3921    }
3922    return formattedString;
3923  }
3924  function isTextEditorValue(obj) {
3925    return 'raw' in obj || 'gjs' in obj;
3926  }
3927  function getTextEditorValue(obj) {
3928    if (!obj.html) {
3929      return '';
3930    }
3931    var data = obj.html;
3932    var css = (obj.raw || obj.gjs || {}).css;
3933    if (css) {
3934      data = data + '<style>' + css + '</style>';
3935    }
3936    return data;
3937  }
3938
3939  /**
3940   * check rendered resources for html and raw properties that could indicate if resource is from an advanced text editor.
3941   * strips out raw proprties and returns only HTML if it exists.
3942   * @param {Object} resources a collection retrieved from the database
3943   * @return {Object} the newly modified object.
3944   */
3945  function recursivelyParse(resources) {
3946    forEach(resources, function (value, key) {
3947      if (!value) {
3948        return;
3949      }
3950      if (value instanceof Object) {
3951        if (isTextEditorValue(value)) {
3952          resources[key] = getTextEditorValue(value);
3953          return;
3954        } else {
3955          return recursivelyParse(value);
3956        }
3957      }
3958      try {
3959        var parsedData = JSON.parse(value);
3960        if (isTextEditorValue(parsedData)) {
3961          resources[key] = getTextEditorValue(parsedData);
3962        }
3963      } catch (e) {
3964        // do nothing if we failed to parse value as JSON
3965      }
3966    });
3967    return resources;
3968  }
3969  function forEach(collection, iteratee) {
3970    var func = Array.isArray(collection) ? arrayEach : baseFor;
3971    return func(collection, iteratee);
3972  }
3973  function baseFor(object, iteratee) {
3974    if (!object) {
3975      return;
3976    }
3977    var iterable = Object(object);
3978    var props = Object.keys(object);
3979    var length = props.length;
3980    var index = -1;
3981    while (length--) {
3982      var key = props[++index];
3983      if (iteratee(iterable[key], key, iterable) === false) {
3984        break;
3985      }
3986    }
3987    return object;
3988  }
3989  function objSet(obj, path, value) {
3990    const pathArray = Array.isArray(path) ? path : path.match(/([^[.\]])+/g);
3991    pathArray.reduce((acc, key, i) => {
3992      if (acc[key] === undefined) acc[key] = {};
3993      if (i === pathArray.length - 1) acc[key] = value;
3994      return acc[key];
3995    }, obj);
3996  }
3997  function arrayEach(array, iteratee) {
3998    var index = -1;
3999    var length = array.length;
4000    while (++index < length) {
4001      if (iteratee(array[index], index, array) === false) {
4002        break;
4003      }
4004    }
4005    return array;
4006  }
4007  function selectPageRangeMode(e) {
4008    pageRange = e.matches ? mobilePageRange : desktopPageRange;
4009    renderPaginationList();
4010  }
4011  paginationMql.addEventListener('change', selectPageRangeMode);
4012})('section-7340826b-bdad-4f4c-95bc-421ee1719d85', JSON.parse("{\"pageSize\":\"4\",\"resource\":\"posts\",\"pageRange\":1,\"variables\":{\"limit\":4,\"offset\":0,\"sortDir\":\"DESC\",\"companyId\":\"7ac07672-b054-446c-a74a-437d501f555c\",\"categoryId\":\"{{pageElement.categoryId}}\",\"order\":\"publishedAt\"},\"searchFormParams\":[{\"param\":\"categoryIds\",\"urlKey\":\"categories\"},{\"param\":\"sortDir\",\"urlKey\":\"sortDir\"},{\"param\":\"order\",\"urlKey\":\"order\"},{\"param\":\"search\",\"urlKey\":\"search\"}],\"hidePaginationOnFirstPage\":true,\"companyId\":\"7ac07672-b054-446c-a74a-437d501f555c\",\"usePageResource\":false,\"sectionIndex\":2,\"useRouterApi\":true,\"routerApiAux\":{\"testimonials\":true,\"agents\":false,\"neighborhoods\":false,\"developments\":true,\"properties\":false,\"posts\":true,\"pressReleases\":true,\"offices\":true,\"teams\":true,\"pois\":true,\"postCategories\":true}}"));
4013} catch(e) {
4014console.log(e);
4015}
4016                try {
4017(function init(sectionDomId, options) {
4018  const section = document.getElementById(sectionDomId);
4019  const searchContainer = section.querySelector('.search-container');
4020  if (!searchContainer) return;
4021  const {
4022    apiGatewayUrl,
4023    routerUrl
4024  } = window.luxuryPresence.defaults;
4025  const useRouterPosts = Boolean(options?.routerApiAux?.posts && routerUrl);
4026  const API_ENDPOINT = useRouterPosts ? routerUrl : apiGatewayUrl;
4027  const variables = JSON.parse(searchContainer.dataset.variables);
4028  const categoryList = searchContainer.querySelector('.blog-posts-list__search-container');
4029  const searchInput = searchContainer.querySelector('.js-blog-search');
4030  searchContainer.addEventListener("sync", function (event) {
4031    const params = event.detail || {};
4032    highlightCategory(params.categoryIds && params.categoryIds[0]);
4033    setCategoryOnGet = params.categoryIds && params.categoryIds[0];
4034    if (searchInput && params.search !== undefined) {
4035      searchInput.value = params.search || '';
4036    }
4037  });
4038  function getFormParams() {
4039    let params = structuredClone(variables);
4040    const activeCategory = searchContainer.querySelector(".active");
4041    if (!activeCategory || activeCategory.classList.contains("js-category-all")) {
4042      params.categoryIds = variables.categoryIds ? variables.categoryIds : [];
4043    } else {
4044      params.categoryIds = [activeCategory.dataset.value];
4045    }
4046    if (searchInput) {
4047      params.search = searchInput.value.trim() || null;
4048    }
4049    return params;
4050  }
4051  function doSearch() {
4052    const params = getFormParams();
4053    const searchEvent = new CustomEvent("search", {
4054      detail: params
4055    });
4056    searchContainer.dispatchEvent(searchEvent);
4057  }
4058  function highlightCategory(categoryId) {
4059    const active = searchContainer.querySelector(".active");
4060    if (active) active.classList.remove("active");
4061    const lnk = searchContainer.querySelector('[data-value="' + categoryId + '"]');
4062    if (lnk) lnk.classList.add("active");else {
4063      const all = searchContainer.querySelector(".js-category-all");
4064      if (all) all.classList.add("active");
4065    }
4066  }
4067  if (searchInput) {
4068    let debounceTimer;
4069    searchInput.addEventListener('input', function () {
4070      clearTimeout(debounceTimer);
4071      debounceTimer = setTimeout(doSearch, 400);
4072    });
4073  }
4074  var setCategoryOnGet;
4075  if (categoryList) {
4076    const companyId = window.luxuryPresence.config.companyId;
4077    const postCategoriesQuery = `
4078      query PostCategories (
4079        $companyId: String
4080        ) {
4081        postCategories (
4082          companyId: $companyId,
4083          withPublishedOnly: true,
4084        ) {
4085          id
4086          name
4087        }
4088      }
4089    `;
4090    const postCategoriesRouterQuery = `
4091      query PostCategories (
4092        $companyId: String
4093        $withPublishedOnly: Boolean
4094        ) {
4095        postCategories (
4096          companyId: $companyId,
4097          withPublishedOnly: $withPublishedOnly,
4098        ) {
4099          items {
4100            id
4101            name
4102          }
4103        }
4104      }
4105    `;
4106    function getPostCategories() {
4107      superagent.post(API_ENDPOINT + "/graphql").withCredentials().send({
4108        query: useRouterPosts ? postCategoriesRouterQuery : postCategoriesQuery,
4109        variables: {
4110          companyId: companyId,
4111          ...(useRouterPosts ? {
4112            withPublishedOnly: true
4113          } : {})
4114        }
4115      }).then(res => {
4116        const active = searchContainer.querySelector(".active");
4117        if (active) active.classList.remove("active");
4118        const raw = (res.body.data || {}).postCategories;
4119        const data = useRouterPosts ? raw && raw.items || [] : raw;
4120        if (Array.isArray(data) && data.length) {
4121          data.forEach(function (item) {
4122            if (variables.categoryIds && !variables.categoryIds.includes(item.id)) return;
4123            const newCategory = document.createElement('li');
4124            categoryList.appendChild(newCategory);
4125            newCategory.outerHTML = `<li data-value="${item.id}" class="blog-posts-list__category js-category"><span class="blog-posts-list__category-name">${item.name}</span></li>`;
4126          });
4127          if (setCategoryOnGet !== undefined) {
4128            highlightCategory(setCategoryOnGet);
4129            setCategoryOnGet = undefined;
4130          }
4131          searchContainer.querySelectorAll(".js-category").forEach(category => {
4132            category.addEventListener("click", function () {
4133              if (!this.classList.contains("active")) {
4134                const active = searchContainer.querySelector(".active");
4135                if (active) active.classList.remove("active");
4136                this.classList.add("active");
4137                doSearch();
4138              }
4139            });
4140          });
4141        }
4142      }).catch(e => {
4143        console.log("err", e);
4144      });
4145    }
4146    getPostCategories();
4147  }
4148})('section-7340826b-bdad-4f4c-95bc-421ee1719d85', JSON.parse("{\"resource\":\"posts\",\"useRouterApi\":true,\"routerApiAux\":{\"testimonials\":true,\"agents\":false,\"neighborhoods\":false,\"developments\":true,\"properties\":false,\"posts\":true,\"pressReleases\":true,\"offices\":true,\"teams\":true,\"pois\":true,\"postCategories\":true},\"companyId\":\"7ac07672-b054-446c-a74a-437d501f555c\",\"usePageResource\":false,\"sectionIndex\":2}"));
4149} catch(e) {
4150console.log(e);
4151}
4152                try {
4153(function init(sectionDomId) {})('section-f6ab0e0a-1d17-477f-be39-f70a71f91f94', 'undefined');
4154} catch(e) {
4155console.log(e);
4156}
4157                try {
4158(function init(sectionDomId, options) {
4159  let section = null;
4160  switch (sectionDomId) {
4161    case 'NAVBAR':
4162      section = document.querySelector('body > nav, #global-navbar');
4163      break;
4164    case 'FOOTER':
4165      section = document.querySelector('body > footer, #global-footer');
4166      break;
4167    case 'SIDEMENU':
4168      section = document.querySelector('body > div.sidemenu, #global-sidemenu');
4169      break;
4170    case 'CONTACT':
4171      section = document.querySelector('#modal-global-contact-us');
4172      break;
4173    case 'MOBILE_CONTACT':
4174      section = document.querySelector('body > div.mobile-contact-wrapper, #global-mobile-contact');
4175      break;
4176    case 'SUBSCRIBE':
4177      // Subscribe Not Implemented
4178      section = null;
4179      break;
4180    case 'ACCOUNT':
4181      // Account Not Implemented
4182      section = null;
4183      break;
4184    default:
4185      section = document.querySelector('#' + sectionDomId);
4186  }
4187  if (!section) {
4188    return;
4189  }
4190  var url = window.luxuryPresence.defaults.routerUrl;
4191  var companyId = window.luxuryPresence.defaults.companyId;
4192  var limit = options.limit || 8;
4193  if (typeof limit === 'string') {
4194    limit = parseInt(limit, 10) || 8; // this NaN protection also filters out 0 - this is expected
4195  }
4196  var templateSelector = options.templateSelector || '.jsIGTemplate';
4197  var containerSelector = options.containerSelector || '.jsIGContainer';
4198  var hasDataClass = options.hasDataClass || 'has-data';
4199  var hideActivateMessage = options.hasDataClass || false;
4200  var payload = {
4201    companyId: companyId,
4202    limit: limit
4203  };
4204  if (options.resourceId && typeof options.resourceId === 'string' && !options.resourceId.match(/^{{.*}}$/)) {
4205    payload.resourceId = options.resourceId;
4206    // Federated enum values are uppercase (AGENT/TEAM); element configs carry lowercase
4207    payload.resource = String(options.resource || 'agent').toUpperCase();
4208    payload.fallbackToNoResource = options.fallbackToNoResource === 'true' || options.fallbackToNoResource === true;
4209  }
4210  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';
4211  var templateHTML = section.querySelector(templateSelector)?.innerHTML || '';
4212  var template = Handlebars.compile(templateHTML);
4213  var container = section.querySelector(containerSelector);
4214  if (options.variables) {
4215    Object.keys(options.variables).forEach(function (key) {
4216      if (options.variables.hasOwnProperty(key) && (typeof options.variables[key] !== 'string' || !options.variables[key].match(/^{{.*}}$/))) {
4217        payload[key] = options.variables[key];
4218      }
4219    });
4220  }
4221  function getData() {
4222    var feed = {
4223      error: true
4224    };
4225    if (payload.companyId == null || payload.companyId === '') {
4226      // instagramContentFeed requires companyId (ID!) — nothing to fetch without it.
4227      // Checked after the options.variables merge, which may override the default.
4228      // Deferred so element listeners (attached after this template runs) still receive it.
4229      setTimeout(function () {
4230        section.dispatchEvent(new CustomEvent('ig-data', {
4231          detail: feed
4232        }));
4233      }, 0);
4234      return;
4235    }
4236    superagent.post(url + '/graphql').send({
4237      query: query,
4238      variables: payload
4239    }).then(res => {
4240      try {
4241        if (!res.body.errors) {
4242          feed = res.body.data.instagramContentFeed;
4243          if (!feed.active) {
4244            if (!hideActivateMessage && sectionDomId === 'section-temp' && container) {
4245              if (payload.resourceId) {
4246                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>';
4247              } else {
4248                container.innerHTML = '<div style="text-align: center">Instagram account is not connected.<br /> Connect it on <a href="/profile">Profile page</a></div>';
4249              }
4250            }
4251          } else {
4252            if (feed.items.length) {
4253              if (hasDataClass) {
4254                section.classList.add(hasDataClass);
4255              }
4256              const feedName = feed.username;
4257              section.querySelectorAll('.jsIGLink').forEach(link => link.setAttribute('href', feed.feedUrl));
4258              section.querySelectorAll('.jsIGName').forEach(name => {
4259                name.textContent = '@' + feedName;
4260                name.setAttribute('title', '@' + feedName);
4261              });
4262              if (container && template) {
4263                container.innerHTML = template(feed);
4264              }
4265            }
4266          }
4267        }
4268      } catch (e) {}
4269      section.dispatchEvent(new CustomEvent('ig-data', {
4270        detail: feed
4271      }));
4272    }).catch(e => {
4273      console.log('err', e);
4274      section.dispatchEvent(new CustomEvent('ig-data', {
4275        detail: feed
4276      }));
4277    });
4278  }
4279  getData();
4280})('section-d0bb8190-fa80-4a3a-b56c-b37146df7e09', JSON.parse("{\"limit\":11,\"resource\":\"agent\",\"resourceId\":\"{{id}}\",\"fallbackToNoResource\":\"{{{fallbackToNoResource}}}\",\"companyId\":\"7ac07672-b054-446c-a74a-437d501f555c\",\"usePageResource\":false,\"sectionIndex\":4,\"useRouterApi\":false,\"routerApiAux\":{\"testimonials\":true,\"agents\":false,\"neighborhoods\":false,\"developments\":true,\"properties\":false,\"posts\":true,\"pressReleases\":true,\"offices\":true,\"teams\":true,\"pois\":true,\"postCategories\":true}}"));
4281} catch(e) {
4282console.log(e);
4283}
4284                try {
4285(function init(sectionDomId) {
4286  const section = document.getElementById(sectionDomId);
4287  const slider = section.querySelector(".js-slider");
4288  section.addEventListener("ig-data", function () {
4289    var splide = new Splide(slider, {
4290      rewind: true,
4291      arrows: false,
4292      type: 'loop',
4293      padding: '20%',
4294      gap: '16px',
4295      pagination: false,
4296      clones: 1,
4297      perPage: 1,
4298      perMove: 1,
4299      destroy: true,
4300      breakpoints: {
4301        768: {
4302          destroy: false
4303        }
4304      }
4305    });
4306    splide.mount();
4307  });
4308})('section-d0bb8190-fa80-4a3a-b56c-b37146df7e09', JSON.parse("{\"resource\":\"agent\",\"useRouterApi\":false,\"routerApiAux\":{\"testimonials\":true,\"agents\":false,\"neighborhoods\":false,\"developments\":true,\"properties\":false,\"posts\":true,\"pressReleases\":true,\"offices\":true,\"teams\":true,\"pois\":true,\"postCategories\":true},\"companyId\":\"7ac07672-b054-446c-a74a-437d501f555c\",\"usePageResource\":false,\"sectionIndex\":4}"));
4309} catch(e) {
4310console.log(e);
4311}
4312
4313            var { body } = document;
4314            var globalNav = body.querySelector(':scope > nav');
4315            var globalSideMenu = body.querySelector(':scope > div.sidemenu');
4316
4317            document.querySelectorAll('body > .modal .close').forEach(modalCloseBtn => {
4318                modalCloseBtn.addEventListener('click', function() {
4319                window.lpUI.hideClosestModal(modalCloseBtn);
4320              });
4321            });
4322
4323            window.addEventListener('click', function() {
4324                document.querySelectorAll('.share-popup').forEach(sharedPopup => {
4325                    sharedPopup.style.display = 'none' ;
4326                });
4327            });
4328
4329            /* Misc Partials / Addons */
4330            function initWOW() {
4331                if (wow) {
4332                    wow.init();
4333                    wow.scrollHandler();
4334                    setTimeout(function () {
4335                        const wowHideStyle = document.getElementById('wow-hide-elements');
4336                        if(wowHideStyle) {
4337                            wowHideStyle.disabled = true;
4338                        }
4339                    }, 1);
4340                }
4341            }
4342
4343            const wowHideElements =  document.getElementById('wow-hide-elements');
4344            if (wowHideElements) {
4345               wowHideElements.disabled = false;
4346            }
4347
4348                initWOW();
4349
4350            /* Generic Navbar Handling */
4351            globalNav?.querySelectorAll('.hamburger-component').forEach(hamburgerComponent => {
4352                hamburgerComponent.addEventListener('click', function() {
4353                window.lpUI.sideMenuToggle();
4354              });
4355            });
4356            globalSideMenu?.querySelectorAll('.toggle').forEach(toggleEl => {
4357                toggleEl.addEventListener('click', function() {
4358                window.lpUI.sideMenuToggle();
4359              });
4360            });
4361
4362            document.querySelectorAll('body > nav .sub-nav-container > a, body > div.sidemenu .sub-nav-container > a').forEach(linkEl => {
4363                linkEl.addEventListener('click', function(e) {
4364                  e.preventDefault();
4365                  e.stopPropagation();
4366                  var subNav = linkEl.parentElement.querySelector(':scope > .sub-nav');
4367                  if (subNav && subNav.classList.contains('visible')){
4368                    subNav.classList.remove('visible');
4369                  } else {
4370                    globalNav?.querySelectorAll('.sub-nav-container .sub-nav').forEach(globalSubNav => {
4371                      globalSubNav.classList.remove('visible');
4372                    });
4373                    globalSideMenu?.querySelectorAll('.sub-nav').forEach(sideMenuSubNav => {
4374                        sideMenuSubNav.classList.remove('visible');
4375                    });
4376                    subNav?.classList.add('visible');
4377                  }
4378                });
4379            });
4380            window.addEventListener('click', function() {
4381                document.querySelectorAll('nav .sub-nav.visible, .sidemenu .sub-nav.visible').forEach(subNavEl => {
4382                    subNavEl.classList.remove('visible');
4383                });
4384            });
4385
4386        }
4387
4388        document.addEventListener('DOMContentLoaded', lpGlobalInit);
4389
4390    </script>
4390
4391
4392    
4392<script type="module">
4393    function selectorExists(selector) {
4394        return document.querySelector(selector) !== null;
4395    }
4396
4397    // Function to initialize the third-party library
4398    function initParoller(selector = '.my-paroller') {
4399        var $parollerElements = $(selector);
4400        if ($parollerElements.length > 0 && typeof $parollerElements.paroller === 'function') {
4401            $parollerElements.paroller();
4402        }
4403    }
4404
4405    const parollerSelector = '.my-paroller';
4406
4407    if (selectorExists(parollerSelector)) {
4408        window.luxuryPresence.libs.loadJs(window.luxuryPresence.libs.jsLibsMap.paroller.jsSrc, function() {
4409            initParoller(parollerSelector);
4410            window.luxuryPresence.libs.jsLibsMap.paroller.isLoaded = true;
4411        });
4412    }
4413    </script>
4413
4414
4415            <!-- Google Tag Manager (noscript) -->
vendor: 80 bytes, lines 4415-4416
4415
4416            <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
4416GTM-T9SFQGHZ
vendor: 107 bytes, lines 4416-4418
4416"
4417            height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
4418            
4418<!-- End Google Tag Manager -->
4419        
4420
4421            
4421<script
4422                src="https://cdn.luxurypresence.com/scripts/a11y-widget/latest/widget.js"
4423                data-website-id="cabbe5a3-1336-4a26-afab-bb421f339f1d"
4424                
4425                defer></script>
vendor: 1 bytes, line 4425
4425
4426<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:'a47a658aef6bf606',t:'MTc5MTUxNzU2OQ=='};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>
4426<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v4bc70e2c01a94c73b74392e4234840661791215815920" integrity="sha512-L0ha0OXavK/8okipN9F8BtP84dg9DUhPERbBXzwI6dgTA55d2+yweo3pn5CSFYs45/r8md2+xvUPtTdvTNRfjA==" data-cf-beacon='{"version":"2024.11.0","token":"d2a8f4b3d65944edb8fcd6ffce49ee5e","spa":2}' crossorigin="anonymous"></script>
4426
4427</body>
4428</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.