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>Blog | Crochet Real Estate Georgia Real Estate</title> 10 <meta property="og:title" content="Blog | Crochet Real Estate Georgia Real Estate"> 11 <meta name="twitter:title" content="Blog | Crochet Real Estate Georgia Real Estate"> 12 <meta property="og:image" content="https://images.unsplash.com/photo-1702494600481-043a92b6271e?ixid=M3w0MTQ1MnwwfDF8c2VhcmNofDl8fGF0bGFudGF8ZW58MHx8fHwxNzkwMzg0ODI3fDA&ixlib=rb-4.1.0&q=80&w=1920"> 13 <meta name="twitter:image" content="https://images.unsplash.com/photo-1702494600481-043a92b6271e?ixid=M3w0MTQ1MnwwfDF8c2VhcmNofDl8fGF0bGFudGF8ZW58MHx8fHwxNzkwMzg0ODI3fDA&ixlib=rb-4.1.0&q=80&w=1920"> 14 <meta property="og:url" content="https://crochetrealestate.com/blog"> 15 <link rel="canonical" href="https://crochetrealestate.com/blog"> 16
16<script>(function(html){html.className = html.className.replace(/\bno-js\b/,'js')})(document.documentElement);</script>
16 17 <link rel="preconnect" href="https://fonts.googleapis.com"> 18 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 19 <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Cormorant%20Garamond:300,300i,400,400i,500,500i,600,600i,700,700i"><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:100,100i,300,300i,400,400i,500,500i,700,700i,900,900i"> 20 <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'"> 21 <noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/css/ion.rangeSlider.min.css"></noscript> 22 <link rel="icon" type="image/x-icon" href="/favicon.ico"> 23 <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"> 24 <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"> 25 <link rel="icon" type="image/png" sizes="48x48" href="/favicon-48x48.png"> 26 <style id="global-css">:root{--global-primary-font-family:'Cormorant Garamond',serif;--global-primary-font-family-short:Cormorant Garamond;--global-secondary-font-family:Roboto,sans-serif;--global-secondary-font-family-short:Roboto;--global-body-padding:0px;--global-background-color:#fff;--global-body-font-size:16px;--global-h1-font-size:70px;--global-h2-font-size:43px;--global-h3-font-size:30px;--global-h4-font-size:21px;--global-h5-font-size:17px;--global-h6-font-size:16px;--global-section-padding:96px;}@media (max-width: 768px){:root{--global-section-padding:64px;}}body{padding:0px;background-color:#fff;font-family:Roboto,sans-serif;font-size:16px;}@media (min-width: 768px){body{padding:0px 0px 0px 0px;}}h1,h2,h3,h4,h5,h6,button{font-family:'Cormorant Garamond',serif;}h1{font-size:70px;}h2{font-size:43px;}h3{font-size:30px;}h4{font-size:21px;}h5{font-size:17px;}h6{font-size:16px;}</style> 27 <link rel="stylesheet" type="text/css" href="https://styles.luxurypresence.com/producer/index.css" /> 28 <style id="website-css">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;}.lp-btn,.redesign .lp-btn{padding:20px 46px;}#modal-global-contact-us .contact-form .section-message form .submitButton{padding:14px 20px;}@media only screen and (max-width: 1765px){div#modal-global-contact-us button.close{right:2vw;top:1vh;}}div.lp-disclaimer>a{-webkit-text-decoration:underline!important;text-decoration:underline!important;}footer#global-footer .footer.no_newsletter .info-wrap-contact_zone:first-of-type{margin-bottom:40px;}div.lp-pagination.pagination-container .paginationjs ul li{margin:3px!important;}div.redesign .pagination-container .paginationjs ul li{margin:3px;}button.newsletter-signup__form-item{line-height:1;font-weight:700;}div#modal-global-contact-us .contact-form .section-message form{max-width:490px;}@media only screen and (max-width:1080px){div#modal-global-contact-us .contact-form h2{font-size:37px;}}@media only screen and (max-width:925px){div#modal-global-contact-us .contact-form h2{font-size:25px;}}div#modal-global-contact-us .close{top:4vh;}h1{text-transform:uppercase!important;}.lp-h1{text-transform:uppercase!important;}h2{text-transform:uppercase!important;}.lp-h2{text-transform:uppercase!important;}h3{text-transform:uppercase!important;}.lp-h3{text-transform:uppercase!important;}nav#global-navbar,nav#global-navbar div.content-container.header{background-color:#000!important;}div#global-sidemenu.sidemenu a,nav#global-navbar a{text-transform:uppercase;}div#global-sidemenu.sidemenu button,nav#global-navbar button{text-transform:uppercase;}nav#global-navbar .header .navigation .sub-nav ul{background-color:transparent;}nav#global-navbar .header .navigation .sub-nav ul li{background-color:rgba(255,255,255,0.9);}nav#global-navbar .header .navigation .sub-nav ul li:hover{background-color:rgba(255,255,255,1);}nav#global-navbar .header .navigation .sub-nav ul a{color:#000;}nav#global-navbar.scroll{background-color:#000!important;}nav#global-navbar.scroll li.navigation__item a.navigation__link{color:#fff;}nav#global-navbar.scroll li.navigation__item a.navigation__link span:after{background-color:#fff;}nav#global-navbar.scroll button.hamburger-component.hamburger{color:#fff;}footer .footer .info-privacy .powered_zone a{font-weight:400;}footer .footer .info-privacy .copy_zone a{font-weight:400;}div#modal-global-contact-us a.lp-link{font-weight:normal;color:#fff!important;}div#modal-global-contact-us a.lp-link:before{background-color:#aaa;}div#modal-global-contact-us a.lp-link:after{background-color:#fff;}div#modal-global-contact-us a.lp-link:hover{color:#aaa!important;}#modal-global-contact-us .contact-form .info-zone_contact{margin-bottom:22px!important;}#modal-global-contact-us .contact-form .info-zone_contact .info-zone_contact_cell{margin-bottom:22px;}#modal-global-contact-us .contact-form .pre-line{white-space:pre-line;font-weight:400;}#modal-global-contact-us .contact-form .section-message label{color:#fff!important;}label.lp-label{text-transform:uppercase!important;}nav#global-navbar .header{padding-top:5px;padding-bottom:5px;height:auto;}nav#global-navbar .header .logo{max-height:80px;}@media only screen and (min-width:768px){nav#global-navbar .header .logo a.logo__link img{max-height:70px;}}nav#global-navbar .header .logo a.logo__link img{max-height:50px!important;}</style> 29 <style id="wow-hide-elements">.wow{visibility:hidden!important}</style> 30 <style id="page-css">
31 #section-1a8ae1c2-78c6-4cc7-a1e3-a3d2470900f2{color:#fff;--fontColor:#fff;--fontColor_H:0;--fontColor_S:0%;--fontColor_L:100%;--fontColor_A:1;--fontColor_darkenDir:-1;--bgColor:rgba(0, 0, 0, 1);--bgColor_H:0;--bgColor_S:0%;--bgColor_L:0%;--bgColor_A:1;--bgColor_darkenDir:1;background-color:rgba(0, 0, 0, 1);--gradient-color:var(--overlay-color, rgba(0, 0, 0, 0.4));background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://images.unsplash.com/photo-1702494600481-043a92b6271e?ixid=M3w0MTQ1MnwwfDF8c2VhcmNofDl8fGF0bGFudGF8ZW58MHx8fHwxNzkwMzg0ODI3fDA&ixlib=rb-4.1.0&q=80&w=1280');background-repeat:no-repeat;-webkit-background-position:center;background-position:center;-webkit-background-size:cover;background-size:cover;}#section-1a8ae1c2-78c6-4cc7-a1e3-a3d2470900f2 .custom-intro{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;height:600px;-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;}#section-1a8ae1c2-78c6-4cc7-a1e3-a3d2470900f2 .custom-intro .container{z-index:1;text-align:center;max-width:900px;}#section-1a8ae1c2-78c6-4cc7-a1e3-a3d2470900f2 .custom-intro__title{margin-bottom:0px;font-weight:400;margin-bottom:24px;}@media (max-width: 768px){#section-1a8ae1c2-78c6-4cc7-a1e3-a3d2470900f2 .custom-intro__title{font-size:32px;}}@media (max-width: 360px){#section-1a8ae1c2-78c6-4cc7-a1e3-a3d2470900f2 .custom-intro__title{font-size:22px;}}#section-1a8ae1c2-78c6-4cc7-a1e3-a3d2470900f2 .custom-intro__subtitle{font-weight:400;white-space:pre-line;font-size:21px;line-height:1.57;}@media (max-width: 768px){#section-1a8ae1c2-78c6-4cc7-a1e3-a3d2470900f2 .custom-intro__subtitle{font-size:18px;}}#section-1a8ae1c2-78c6-4cc7-a1e3-a3d2470900f2 .description{margin-bottom:15px;}@media (min-width: 960px) and (orientation: landscape){#section-1a8ae1c2-78c6-4cc7-a1e3-a3d2470900f2{background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://images.unsplash.com/photo-1702494600481-043a92b6271e?ixid=M3w0MTQ1MnwwfDF8c2VhcmNofDl8fGF0bGFudGF8ZW58MHx8fHwxNzkwMzg0ODI3fDA&ixlib=rb-4.1.0&q=80&w=1280');}}@media (min-width: 1280px) and (orientation: landscape){#section-1a8ae1c2-78c6-4cc7-a1e3-a3d2470900f2{background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://images.unsplash.com/photo-1702494600481-043a92b6271e?ixid=M3w0MTQ1MnwwfDF8c2VhcmNofDl8fGF0bGFudGF8ZW58MHx8fHwxNzkwMzg0ODI3fDA&ixlib=rb-4.1.0&q=80&w=1920');}}@media (min-width: 1920px) and (orientation: landscape){#section-1a8ae1c2-78c6-4cc7-a1e3-a3d2470900f2{background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://images.unsplash.com/photo-1702494600481-043a92b6271e?ixid=M3w0MTQ1MnwwfDF8c2VhcmNofDl8fGF0bGFudGF8ZW58MHx8fHwxNzkwMzg0ODI3fDA&ixlib=rb-4.1.0&q=80&w=2560');}}@media (min-width: 2560px) and (orientation: landscape){#section-1a8ae1c2-78c6-4cc7-a1e3-a3d2470900f2{background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://images.unsplash.com/photo-1702494600481-043a92b6271e?ixid=M3w0MTQ1MnwwfDF8c2VhcmNofDl8fGF0bGFudGF8ZW58MHx8fHwxNzkwMzg0ODI3fDA&ixlib=rb-4.1.0&q=80&w=3456');}}#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d{color:#000000;--fontColor:#000000;--fontColor_H:0;--fontColor_S:0%;--fontColor_L:0%;--fontColor_A:1;--fontColor_darkenDir:1;--bgColor:#fff;--bgColor_H:0;--bgColor_S:0%;--bgColor_L:100%;--bgColor_A:1;--bgColor_darkenDir:-1;--section-padding-bottom:calc(2 / 4 * var(--global-section-padding));background-color:#fff;}#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .blog-list{padding:120px 0;position:relative;z-index:1;}#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .blog-list .center-items{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;}#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .blog-list__container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;
31-webkit-justify-content:space-between;justify-content:space-between;-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-align-items:stretch;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;max-width:1282px;}@media(max-width: 768px){#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .blog-list__container{padding:0;}}#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .blog-list__container.hide-date .blog-list__item-date{display:none;}#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .blog-list__container.hide-author .blog-list__item-author{display:none;}#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .blog-list__container.hide-author .blog-list__item-date{margin-left:0;padding-left:0;border-left:none;}#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .blog-list__container .blog-list__item{background-color:#fff;}#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .blog-list__section-title,#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .blog-list .description{text-align:center;margin-bottom:50px;max-width:75%;margin-left:auto;margin-right:auto;}@media(max-width: 768px){#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .blog-list__section-title,#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .blog-list .description{max-width:100%;}}#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .blog-list__item{width:calc(50% - 18px);margin-bottom:34px;}@media(max-width: 768px){#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .blog-list__item{width:100%;margin-bottom:32px;}}#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .blog-list__item:nth-child(2n) .blog-list__item-content h4:after{right:-116px;left:60%;}@media(max-width: 768px){#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .blog-list__item:nth-child(2n) .blog-list__item-content h4:after{right:-25px;left:40%;}}#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .blog-list__item-image{padding-top:70.16%;position:relative;background-color:#808080;}#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .blog-list__item-image img{position:absolute;object-fit:cover;height:100%;width:100%;top:0;z-index:0;}#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .blog-list__item-content{padding:46px 36px;}@media(max-width: 768px){#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .blog-list__item-content{padding:40px 25px;}}#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .blog-list__item-content h4{margin:0 0 36px;position:relative;}@media(max-width: 768px){#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .blog-list__item-content h4{margin:0 0 38px;}}#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .blog-list__item-content h4:after{content:'';position:absolute;bottom:-17px;left:-116px;right:60%;height:1px;background-color:#c0c0c0;}@media(max-width: 768px){#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .blog-list__item-content h4:after{right:40%;left:-25px;bottom:-21px;}}#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .blog-list__item-content .link{display:inline-block;margin-top:36px;text-transform:uppercase;font-size:14px;}#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .blog-list__item-details{list-style-type:none;display:block;margin:0 0 9px;}#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .blog-list__item-details >li{display:inline-block;position:relative;font-size:14px;font-weight:700;line-height:1.4;text-transform:uppercase;}#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .blog-list__item-details >li+li{margin-left:3px;padding-left:5px;border-left:2px solid;}#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .search-container{margin-bottom:48px;}@media (max-width: 768px){#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .search-container{margin-bottom:32px;}}#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .search-container__row{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-align-items:flex-end;-webkit-box-align:flex-end;-ms-flex-align:flex-end;align-items:flex-end;gap:12px;}#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .search-container__row:has(.lp-btn.lp-i--chevron-down){-webkit-box-pack:justify;
31-webkit-justify-content:space-between;justify-content:space-between;}@media (max-width: 768px){#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .search-container__row{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}}#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .input-container{width:100%;max-width:485px;position:relative;}@media (max-width: 1024px){#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .input-container{max-width:350px;}}@media (max-width: 768px){#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .input-container{max-width:100%;}}#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .input-container .lp-input{height:50px;width:100%;}#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .input-container .search-icon{position:absolute;top:50%;right:0;-webkit-transform:translateY(-50%);-moz-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);}#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .empty-results{text-align:center;display:none;}#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .empty-results.visible{display:block;}#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .filter-container{padding-top:16px;display:none;}#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .category-cell{margin:0 8px 8px 0;border-width:2px;padding:10px 15px;opacity:.3;position:relative;cursor:pointer;}#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .category-cell.active{opacity:1;}@media(hover: hover) and (pointer: fine){#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .category-cell:hover{opacity:1;}}#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .lp-btn.lp-i--chevron-down{display:none;gap:10px;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;}@media (max-width: 768px){#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .lp-btn.lp-i--chevron-down{width:100%;}}#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .lp-btn.lp-i--chevron-down:before{-webkit-transition:-webkit-transform .3s;transition:transform .3s;}#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .lp-btn.lp-i--chevron-down.active:before{-webkit-transform:scaleY(-1);-moz-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1);}#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d .category{position:absolute;top:0;left:0;background-color:#fff;color:#000;padding:8px 34px;font-size:14px;font-weight:700;line-height:24px;letter-spacing:1.5px;text-transform:uppercase;z-index:2;}#section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d>div:last-child{padding-bottom:calc(2 / 4 * var(--global-section-padding))!important;}#section-d7ac5ffe-a0d4-4b97-aa3d-0166d41728de{color:#ffffff;--fontColor:#ffffff;--fontColor_H:0;--fontColor_S:0%;--fontColor_L:100%;--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;--gradient-color:var(--overlay-color, rgba(0, 0, 0, 0.4));background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/ohqdcw4gwmmu94k2bepw');background-repeat:no-repeat;-webkit-background-position:center;background-position:center;-webkit-background-size:cover;background-size:cover;}#section-d7ac5ffe-a0d4-4b97-aa3d-0166d41728de.parallax-enabled{-webkit-clip-path:polygon(0px 0px, 100% 0%, 100% 100%, 0% 100%);clip-path:polygon(0px 0px, 100% 0%, 100% 100%, 0% 100%);}#section-d7ac5ffe-a0d4-4b97-aa3d-0166d41728de.parallax-enabled>div.video-wrapper{position:fixed;left:0;top:0;width:100vw;height:100vh;z-index:-9999;}#section-d7ac5ffe-a0d4-4b97-aa3d-0166d41728de.parallax-enabled .work-with-us:before{display:block;content:'';left:0;top:0;width:100%;background:var(--sectionBackground) center no-repeat;-webkit-background-size:cover;background-size:cover;position:fixed;z-index:-1;height:100%;}#section-d7ac5ffe-a0d4-4b97-aa3d-0166d41728de .redesign.work-with-us{position:relative;color:var(--fontColor, #ffffff);}#section-d7ac5ffe-a0d4-4b97-aa3d-0166d41728de .redesign.work-with-us .container{text-align:center;max-width:750px;min-height:689px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;
31-webkit-justify-content:center;justify-content:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-top:50px;padding-bottom:50px;position:relative;z-index:1;}@media (max-width: 768px){#section-d7ac5ffe-a0d4-4b97-aa3d-0166d41728de .redesign.work-with-us .container{min-height:auto;padding-top:100px;padding-bottom:100px;}}#section-d7ac5ffe-a0d4-4b97-aa3d-0166d41728de .redesign.work-with-us h2{position:relative;padding-bottom:28px;margin:0 0 30px;}@media(max-width: 768px){#section-d7ac5ffe-a0d4-4b97-aa3d-0166d41728de .redesign.work-with-us h2{padding-bottom:40px;}}#section-d7ac5ffe-a0d4-4b97-aa3d-0166d41728de .redesign.work-with-us h2:after{content:'';position:absolute;bottom:0;left:50%;margin-left:-55px;width:110px;height:1px;background-color:var(--fontColor, #ffffff);}#section-d7ac5ffe-a0d4-4b97-aa3d-0166d41728de .redesign.work-with-us .description{margin:0 0 30px;}@media(max-width: 768px){#section-d7ac5ffe-a0d4-4b97-aa3d-0166d41728de .redesign.work-with-us .description{margin-bottom:40px;}}#section-d7ac5ffe-a0d4-4b97-aa3d-0166d41728de .redesign.work-with-us .btn-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:23px;margin-top:32px;}@media(max-width: 560px){#section-d7ac5ffe-a0d4-4b97-aa3d-0166d41728de .redesign.work-with-us .btn-container{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;gap:10px;}}@media (min-width: 960px) and (orientation: landscape){#section-d7ac5ffe-a0d4-4b97-aa3d-0166d41728de{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/ohqdcw4gwmmu94k2bepw');}}@media (min-width: 1280px) and (orientation: landscape){#section-d7ac5ffe-a0d4-4b97-aa3d-0166d41728de{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/ohqdcw4gwmmu94k2bepw');}}@media (min-width: 1920px) and (orientation: landscape){#section-d7ac5ffe-a0d4-4b97-aa3d-0166d41728de{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/ohqdcw4gwmmu94k2bepw');}}@media (min-width: 2560px) and (orientation: landscape){#section-d7ac5ffe-a0d4-4b97-aa3d-0166d41728de{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/ohqdcw4gwmmu94k2bepw');}}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb{color:rgba(0, 0, 0, 1);--fontColor:rgba(0, 0, 0, 1);--fontColor_H:0;--fontColor_S:0%;--fontColor_L:0%;--fontColor_A:1;--fontColor_darkenDir:1;--bgColor:#f1f1f1;--bgColor_H:0;--bgColor_S:0%;--bgColor_L:95%;--bgColor_A:1;--bgColor_darkenDir:-1;background-color:#f1f1f1;}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .nav-button{border:2px solid #000!important;}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .nav-button:hover{border:2px solid #000!important;}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .ig-feed{padding:80px 0;}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .title{margin:0 20px 0 0;}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .instagram-link{display:block;margin:0 20px 0 0;color:var(--global-primary-font-color);}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .instagram-link .instagram-name{display:inline;margin:0;}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .title+.instagram-link{margin-top:5px;}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .top-wrapper{margin-bottom:20px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-align-items:flex-end;-webkit-box-align:flex-end;-ms-flex-align:flex-end;align-items:flex-end;}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .top-right{margin-left:auto;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:stretch;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .follow-button{margin:20px 0 0 0;display:block;}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .nav-button{margin-top:20px;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;
31-webkit-justify-content:center;justify-content:center;width:42px;color:#1a1a1a;border:1px solid currentColor;cursor:pointer;transition-property:color,background-color,border-color;transition-duration:.3s;transition-timing-function:ease;}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .nav-button.slick-disabled{opacity:0.6;pointer-events:none;cursor:default;}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .nav-button:not(.slick-disabled):hover{background-color:#1a1a1a;border-color:#1a1a1a;color:#fff;}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .top-nav-prev{margin-left:30px;}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .top-nav-next{margin-left:10px;}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .hidden-control{display:none;}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .slide-single,#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .slide-multi{position:relative;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:calc(100% / 3);padding:10px;}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .slide-single:first-child,#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .slide-multi:first-child{margin-left:auto;}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .slide-single:last-child,#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .slide-multi:last-child{margin-right:auto;}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .slide-single.type2,#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .slide-multi.type2{width:calc(100% / 5 * 2);}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .slide-single.type3,#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .slide-multi.type3{width:calc(100% / 2);}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .slide-single.type4,#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .slide-multi.type4{width:calc(100% / 2);}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .slide-single.type5,#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .slide-multi.type5{width:100%;}@media (max-width: 440px){#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .ig-feed-container{padding:0;width:100%;}}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .ig-feed-feed{width:calc(100% + 20px);position:relative;left:-10px;overflow:hidden;}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .ig-feed-slider{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .ig-feed-item__img{position:absolute;left:-1px;top:-1px;bottom:-1px;right:-1px;background:center/cover no-repeat;}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .ig-feed-item__info{position:absolute;top:0;left:0;bottom:0;right:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;padding:10%;overflow:hidden;color:#fff;text-align:center;background-color:rgba(0, 0, 0, 0.8);opacity:0;-webkit-transition:opacity .3s ease;transition:opacity .3s ease;}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .ig-feed-item:hover .ig-feed-item__info{opacity:1;}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .ig-feed-item__caption{text-overflow:ellipsis;-webkit-line-clamp:4;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .video-icon{position:absolute;width:50px;height:50px;background-color:#fff;left:50%;top:50%;-webkit-transform:translate(-50%, -50%);-moz-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);border-radius:50%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-transition:opacity .2s ease;transition:opacity .2s ease;opacity:1;}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .video-icon::before{content:'';display:block;width:0px;height:0px;border-style:solid;position:relative;left:1px;border-width:7.5px 0px 7.5px 11px;border-color:transparent transparent transparent #292826;}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .ig-feed-item:hover .video-icon{opacity:0;}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .slide-single .ig-feed-item__info{padding:15%;}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .slide-single .ig-feed-item__caption{-webkit-line-clamp:7;}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .ig-feed-item{background-color:var(--tileColor, #000);display:block;width:100%;padding-bottom:125%;overflow:hidden;position:relative;}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .slide-multi::before{content:'';display:block;width:100%;padding-bottom:125%;}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .slide-multi-content{padding:10px;position:absolute;width:100%;height:100%;left:0;top:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;
31-webkit-justify-content:space-between;justify-content:space-between;-webkit-align-items:flex-start;-webkit-box-align:flex-start;-ms-flex-align:flex-start;align-items:flex-start;overflow:hidden;}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .slide-multi-content .ig-feed-item{width:calc(50% - 10px);padding-bottom:calc(62.5% - 12.5px);}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .slide-multi-content .ig-feed-item:nth-child(n + 3){-webkit-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end;}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .bottom-controls{width:100%;display:none;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .bottom-nav-button{-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;margin:20px 10px 0;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;width:48px;height:48px;color:#1a1a1a;border:1px solid currentColor;cursor:pointer;}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .bottom-nav-button.slick-disabled{opacity:0.6;pointer-events:none;cursor:default;}@media (max-width: 767px){#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .top-right,#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .top-left{width:100%;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .title,#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .instagram-link{margin-right:0;text-align:center;}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .top-nav-prev,#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .top-nav-next{display:none;}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .bottom-controls{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .ig-feed{display:none;}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb .has-data .ig-feed{display:block;}#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb.has-data .ig-feed,#section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb#section-temp .ig-feed{display:block;}#modal-global-contact-us .close{z-index:11;}#modal-global-contact-us .description{margin-bottom:15px;}#modal-global-contact-us .close:focus{outline:0;}#modal-global-contact-us .contact-form{padding:70px 0;width:100%;min-height:100vh;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;color:var(--colorTxt, #ffffff);-webkit-background-size:cover;background-size:cover;}#modal-global-contact-us .contact-form:after{content:'';position:absolute;display:block;background-color:rgba(2, 5, 7, 0.85);height:100%;width:100%;z-index:0;}#modal-global-contact-us .contact-form.loading textarea,#modal-global-contact-us .contact-form.loading input,#modal-global-contact-us .contact-form.loading label,#modal-global-contact-us .contact-form.loading button{pointer-events:none;opacity:.5;}#modal-global-contact-us .contact-form.loading .submit-icon{display:inline-block;}#modal-global-contact-us .contact-form .submit-icon{display:none;}#modal-global-contact-us .contact-form .contact-form-close{width:40px;height:50px;display:block;padding:0;border:none;background-color:transparent;cursor:pointer;position:absolute;right:50px;top:50px;z-index:110;}@media (max-width: 560px){#modal-global-contact-us .contact-form .contact-form-close{right:20px;top:20px;width:30px;height:40px;}}#modal-global-contact-us .contact-form .contact-form-close:before,#modal-global-contact-us .contact-form .contact-form-close:after{content:'';display:block;width:40px;height:1px;background-color:#fff;position:absolute;left:50%;top:50%;}@media (max-width: 560px){#modal-global-contact-us .contact-form .contact-form-close:before,#modal-global-contact-us .contact-form .contact-form-close:after{width:30px;}}#modal-global-contact-us .contact-form .contact-form-close:before{-webkit-transform:translate(-50%, -50%) rotate(45deg);-moz-transform:translate(-50%, -50%) rotate(45deg);-ms-transform:translate(-50%, -50%) rotate(45deg);transform:translate(-50%, -50%) rotate(45deg);}#modal-global-contact-us .contact-form .contact-form-close:after{-webkit-transform:translate(-50%, -50%) rotate(-45deg);-moz-transform:translate(-50%, -50%) rotate(-45deg);-ms-transform:translate(-50%, -50%) rotate(-45deg);transform:translate(-50%, -50%) rotate(-45deg);}#modal-global-contact-us .contact-form .container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;max-width:1440px;width:100%;padding:0 160px;margin:0 auto;z-index:10;}@media (max-width: 1320px){#modal-global-contact-us .contact-form .container{padding:0 80px;}}@media (max-width: 1200px){#modal-global-contact-us .contact-form .container{padding:0 30px;}}@media (max-width: 900px){#modal-global-contact-us .contact-form .container{-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;}}
31@media (max-width: 560px){#modal-global-contact-us .contact-form .container{padding:0 20px;}}#modal-global-contact-us .contact-form h2{margin:0 0 18px 0;padding:0;}@media (max-width: 560px){#modal-global-contact-us .contact-form h2{margin:0 0 24px 0;}}#modal-global-contact-us .contact-form .section-details{width:50%;}@media (max-width: 1200px){#modal-global-contact-us .contact-form .section-details{padding-right:30px;}}@media (max-width: 900px){#modal-global-contact-us .contact-form .section-details{width:100%;padding-right:0;max-width:700px;margin-bottom:38px;}}#modal-global-contact-us .contact-form .section-message{width:50%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end;position:relative;}@media (max-width: 1200px){#modal-global-contact-us .contact-form .section-message{padding-left:30px;}}@media (max-width: 900px){#modal-global-contact-us .contact-form .section-message{width:100%;padding-left:0;-webkit-box-pack:start;-ms-flex-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start;}}#modal-global-contact-us .contact-form .section-message:after{content:'';position:absolute;display:block;width:1px;background:#999999;height:calc(100% + 50px);left:0;top:-20px;}@media (max-width: 900px){#modal-global-contact-us .contact-form .section-message:after{display:none;}}#modal-global-contact-us .contact-form .section-message form{max-width:435px;width:100%;}#modal-global-contact-us .contact-form .section-message form .submitButton{width:auto;}@media (max-width: 560px){#modal-global-contact-us .contact-form .section-message form .submitButton{width:100%;}}@media (max-width: 900px){#modal-global-contact-us .contact-form .section-message form{max-width:700px;}}#modal-global-contact-us .contact-form .section-message form.loading textarea,#modal-global-contact-us .contact-form .section-message form.loading input,#modal-global-contact-us .contact-form .section-message form.loading label,#modal-global-contact-us .contact-form .section-message form.loading button{pointer-events:none;opacity:.5;}#modal-global-contact-us .contact-form .section-message form.loading .label-loading{display:inline;}#modal-global-contact-us .contact-form .section-message form.loading .label-success,#modal-global-contact-us .contact-form .section-message form.loading .label-initial{display:none;}#modal-global-contact-us .contact-form .section-message form.loading .submit-icon{display:inline-block;}#modal-global-contact-us .contact-form .section-message form.success .label-loading,#modal-global-contact-us .contact-form .section-message form.success .label-initial{display:none;}#modal-global-contact-us .contact-form .section-message form.success .label-success{display:inline;}#modal-global-contact-us .contact-form .section-message .label-loading,#modal-global-contact-us .contact-form .section-message .label-success{display:none;}#modal-global-contact-us .contact-form .section-message .submit-icon{display:none;}#modal-global-contact-us .contact-form .section-message h2{margin-bottom:28px;}#modal-global-contact-us .contact-form .section-message .form-group_modal{-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-bottom:39px;}#modal-global-contact-us .contact-form .section-message .form-group_modal input{border:none;border-bottom:1px solid #c0c0c0;display:block;width:100%;background:transparent;color:#ffffff;height:22px;font-size:16px;}@media (max-width: 560px){#modal-global-contact-us .contact-form .section-message .form-group_modal input{height:25px;}}#modal-global-contact-us .contact-form .section-message .form-group-textarea{margin-bottom:30px;}@media (max-width: 560px){#modal-global-contact-us .contact-form .section-message .form-group-textarea{margin-bottom:23px;}}#modal-global-contact-us .contact-form .section-message label{display:block;width:100%;line-height:1.63;letter-spacing:1px;color:#c0c0c0;font-weight:bold;text-transform:uppercase;}#modal-global-contact-us .contact-form .section-message textarea{resize:none;height:105px;width:100%;background:transparent;border:solid 1px #ffffff;margin:23px 0 0 0;color:#ffffff;padding:10px;font-size:16px;}@media (max-width: 560px){#modal-global-contact-us .contact-form .section-message textarea{margin:10px 0 0 0;height:89px;}}#modal-global-contact-us .contact-form .info-zone h4{margin:0 0 16px 0;}@media (max-width: 560px){#modal-global-contact-us .contact-form .info-zone h4{margin:0 0 13px 0;}}#modal-global-contact-us .contact-form .info-zone .type_user:nth-of-type(2){margin-bottom:30px;}@media (max-width: 560px){#modal-global-contact-us .contact-form .info-zone .type_user{margin-bottom:58px;}}#modal-global-contact-us .contact-form .info-zone_contact{margin-bottom:23px;}#modal-global-contact-us .contact-form .info-zone_contact:nth-last-child(2){margin-bottom:30px;}#modal-global-contact-us .contact-form .info-zone_contact_cell{position:relative;padding-left:45px;margin-bottom:22px;font-weight:bold;font-size:14px;max-width:90%;letter-spacing:1.5px;text-transform:uppercase;}@media (max-width: 560px){#modal-global-contact-us .contact-form .info-zone_contact_cell{padding-left:0;}}#modal-global-contact-us .contact-form .info-zone_contact_cell:last-of-type{margin-bottom:0;}#modal-global-contact-us .contact-form .info-zone_contact_cell i{position:absolute;
31left:0;top:0;display:block;}@media (max-width: 560px){#modal-global-contact-us .contact-form .info-zone_contact_cell i{position:relative;margin-bottom:7px;}}#modal-global-contact-us .contact-form .info-zone_contact_cell i svg path{fill:var(--colorTxt);}#modal-global-contact-us .contact-form .info-zone_contact_cell div{padding:0;}#modal-global-contact-us .contact-form .info-zone_contact_cell .contact_title{line-height:1;margin-bottom:5px;}#modal-global-contact-us .contact-form .info-zone_contact_link{color:var(--colorTxt);}@media (max-width: 560px){#modal-global-contact-us .contact-form .info-zone .type_user:nth-of-type(2){margin-bottom:58px;}}@media (max-width: 560px){#modal-global-contact-us .contact-form .hours_box{margin-bottom:52px;}}#modal-global-contact-us .contact-form .socials_zone{padding-left:45px;}@media (max-width: 560px){#modal-global-contact-us .contact-form .socials_zone{padding-left:0;}}#modal-global-contact-us .contact-form .socials_zone li{margin-bottom:10px;}#modal-global-contact-us .contact-form .socials_zone li:not(:last-child){padding-right:34px;}@media (max-width: 560px){#modal-global-contact-us .contact-form .socials_zone li:not(:last-child){padding-right:12px;}}#modal-global-contact-us .contact-form .success-message.success{margin-top:15px;color:var(--colorTxt);position:absolute;}#modal-global-contact-us .contact-form .success-message.hide{opacity:0;}#modal-global-contact-us .contact-form.one_contact .info-zone .type_user{margin-bottom:73px;}@media (max-width: 768px){#modal-global-contact-us .contact-form.one_contact .info-zone .type_user{margin-bottom:51px;}}@media (max-width: 560px){#modal-global-contact-us .contact-form.one_contact .info-zone .type_user{margin-bottom:40px;}}#modal-global-contact-us .contact-form.one_contact .hours_box{margin-bottom:38px;}#modal-global-contact-us .contact-form.no_icon .info-zone_contact_cell{padding-left:0;}#modal-global-contact-us .contact-form.no_icon .info-zone_contact_cell i{display:none;}#modal-global-contact-us .contact-form.no_icon .socials_zone{padding-left:0;}#modal-global-contact-us .contact-form .pre-line{white-space:pre-line;}#modal-global-contact-us .lp-input-group{margin-bottom:40px;}#modal-global-contact-us .lp-input-group.m16{margin-bottom:16px;}#modal-global-contact-us .lp-disclaimer{margin-top:0;}#modal-global-contact-us .lp-input{border-color:#ffffff;}#modal-global-contact-us .lp-input:focus,#modal-global-contact-us .lp-input:active{border-color:#5e5e5e;}nav{color:#fff;-webkit-transition:0.2s -webkit-transform ease;transition:0.2s transform ease;z-index:102;}nav.scroll .logo .logo__img.light{display:block;}nav.scroll .logo .logo__img.dark{display:none;}nav .header{height:100px;-webkit-transform:translateY(24px);-moz-transform:translateY(24px);-ms-transform:translateY(24px);transform:translateY(24px);}@media (max-width: 768px){nav .header{-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);}}nav .header .container{max-width:1440px;padding:0 15px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:100%;}@media (max-width: 1024px){nav .header .container{padding:0 15px;}}nav .header .navbar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;min-height:70px;padding:8px 0 7px;width:100%;}nav .header .logo{z-index:911;position:relative;margin-right:10px;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;max-width:300px;}nav .header .logo a{overflow:hidden;display:inline-block;}nav .header .logo img{max-width:100%;max-height:52px;vertical-align:top;object-fit:contain;}@media (max-width: 1024px){nav .header .logo img{max-height:50px;}}nav .header .logo img.dark{display:none;}@media(max-width: 1024px){nav .header .logo img.dark{display:none!important;}}nav .header .logo img.light{display:block;}@media(max-width: 1024px){nav .header .logo img.light{display:inline-block!important;}}
31nav .header .logo__link{-webkit-animation-duration:1s;animation-duration:1s;overflow:hidden;}nav .header .logo__img.light{display:block;}nav .header .logo__img.dark{display:none;}nav .header .navigation{margin-left:auto;color:inherit;}@media (max-width: 1024px){nav .header .navigation{display:none;}}nav .header .navigation ul{position:relative;list-style-type:none;padding-left:0;margin-bottom:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}nav .header .navigation ul li a span,nav .header .navigation ul li button span{position:relative;white-space:nowrap;}nav .header .navigation ul li a span:after,nav .header .navigation ul li button span:after{content:'';position:absolute;display:block;height:1px;background-color:#c6c6c6;width:0;bottom:0;left:0;-webkit-transition:all .2s ease;transition:all .2s ease;}nav .header .navigation ul li a:hover span:after,nav .header .navigation ul li button:hover span:after{width:100%;-webkit-transition:all .2s ease;transition:all .2s ease;}nav .header .navigation__item{padding:0;margin:0;}nav .header .navigation__link{display:block;padding:12px 13px;color:inherit;position:relative;font-size:13px;line-height:1.08;font-weight:700;letter-spacing:1.5px;background-color:transparent;border:none;cursor:pointer;text-align:left;text-transform:uppercase;}@media (max-width: 1280px){nav .header .navigation__link{padding:19px 10px;font-size:11.5px;}}nav .header .navigation__link .sub-nav-container .navigation__link:hover{background:#000000;}nav .header .navigation .sub-nav{position:absolute;bottom:0;padding:0;opacity:0;visibility:hidden;-webkit-transition:all .2s ease;transition:all .2s ease;-webkit-transform:translate(0, calc(100% + -10px));-moz-transform:translate(0, calc(100% + -10px));-ms-transform:translate(0, calc(100% + -10px));transform:translate(0, calc(100% + -10px));}nav .header .navigation .sub-nav ul{margin:0;padding:12px 0;display:block;background-color:rgba(26, 26, 26, .75);max-width:300px;}nav .header .navigation .sub-nav__item{position:relative;display:block;margin:0;text-align:left;}nav .header .navigation .sub-nav__item:last-child{border-bottom-color:transparent;}nav .header .navigation .sub-nav__link{display:block;max-width:300px;color:#ffffff;margin:0;line-height:1;letter-spacing:1.5px;padding:19px 13px;-webkit-transition:all .2s ease;transition:all .2s ease;}nav .header .navigation .sub-nav.visible{opacity:1;visibility:visible;-webkit-transform:translate(0, 100%);-moz-transform:translate(0, 100%);-ms-transform:translate(0, 100%);transform:translate(0, 100%);}nav .header .navigation .sub-nav.visible+.navigation__link{background:#000000;}nav .header .hamburger{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border:none;padding:28px 13px;background-color:transparent;color:inherit;vertical-align:middle;cursor:pointer;outline:none;z-index:915;opacity:1;}nav .header .hamburger__bars{position:relative;display:block;width:26px;height:2px;background-color:currentColor;-webkit-transition:0.2s -webkit-transform ease;transition:0.2s transform ease;}nav .header .hamburger__bars:before,nav .header .hamburger__bars:after{content:'';display:block;width:26px;height:2px;background-color:currentColor;position:absolute;left:0;top:0;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-webkit-transition:0.2s -webkit-transform ease;transition:0.2s transform ease;}nav .header .hamburger__bars:before{-webkit-transform:translateY(-9px);-moz-transform:translateY(-9px);-ms-transform:translateY(-9px);transform:translateY(-9px);}nav .header .hamburger__bars:after{-webkit-transform:translateY(9px);-moz-transform:translateY(9px);-ms-transform:translateY(9px);transform:translateY(9px);}nav .header .hamburger:hover{text-shadow:.5px 0 0,-.5px 0 0;}nav .header .hamburger:hover .hamburger__bars:before{-webkit-transform:translateY(-7px);-moz-transform:translateY(-7px);-ms-transform:translateY(-7px);transform:translateY(-7px);}nav .header .hamburger:hover .hamburger__bars:after{-webkit-transform:translateY(7px);-moz-transform:translateY(7px);-ms-transform:translateY(7px);transform:translateY(7px);}nav .header .hamburger.active .hamburger__bars{-webkit-transform:rotate(135deg);-moz-transform:rotate(135deg);-ms-transform:rotate(135deg);transform:rotate(135deg);opacity:0;}nav .header .hamburger.active .hamburger__bars:before{display:none;}nav .header .hamburger.active .hamburger__bars:after{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg);}nav .content-container{-webkit-transition:0.2s all ease;transition:0.2s all ease;}nav.scroll .content-container,nav .scroll .content-container{-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);}nav.scroll .content-container .navigation__link,nav .scroll .content-container .navigation__link{visibility:visible!important;}nav.scroll .content-container .navigation .sub-nav,nav .scroll .content-container .navigation .sub-nav{-webkit-transform:translate(0, calc(100% + -10px));-moz-transform:translate(0, calc(100% + -10px));-ms-transform:translate(0, calc(100% + -10px));transform:translate(0, calc(100% + -10px));}nav.scroll .content-container .navigation .sub-nav ul,nav .scroll .content-container .navigation .sub-nav ul{padding:0;}nav.scroll .content-container .navigation .sub-nav.visible,nav .scroll .content-container .navigation .sub-nav.visible{opacity:1;visibility:visible;-webkit-transform:translate(0, calc(100% + 23px));-moz-transform:translate(0, calc(100% + 23px));-ms-transform:translate(0, calc(100% + 23px));transform:translate(0, calc(100% + 23px));}nav .dark-opening{background-color:rgb(26, 26, 26)!important;}nav nav.dark-opening .header{margin-top:0;}nav #ctaShowButton,nav #ctaMessage{display:none!important;}nav #ctaShowButton{display:none;opacity:0;pointer-events:none;}nav .search{cursor:pointer;}nav .search svg{display:block;}nav .buttons-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;
31-webkit-justify-content:flex-end;justify-content:flex-end;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;}body>div.sidemenu{background-color:#fff;color:#000;--fontColor:#000;--fontColor_H:0;--fontColor_S:0%;--fontColor_L:0%;--fontColor_A:1;--fontColor_darkenDir:1;--bgColor:#fff;--bgColor_H:0;--bgColor_S:0%;--bgColor_L:100%;--bgColor_A:1;--bgColor_darkenDir:-1;}body>div.sidemenu{width:auto!important;left:auto!important;right:-100%;top:0;background-color:transparent;-webkit-transition:right .3s;transition:right .3s;display:block;}body>div.sidemenu:not(.visible){pointer-events:none;visibility:hidden;}body>div.sidemenu.visible{right:0;}body>div.sidemenu .sidebar{position:relative;width:400px;height:100vh;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;padding-top:40px;padding-bottom:100px;background-color:var(--bgColor, #fff);color:var(--fontColor, #000);font-family:var(--global-primary-font-family);font-size:21px;line-height:1.333333;letter-spacing:.5px;-webkit-transition:all .3s ease-in;transition:all .3s ease-in;}@media (max-width: 767px){body>div.sidemenu .sidebar{width:270px;font-size:18px;}}body>div.sidemenu .sidebar__content{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;height:100%;width:100%;padding-left:40px;padding-right:40px;text-align:center;overflow-y:auto;}@media (max-width: 767px){body>div.sidemenu .sidebar__content{-webkit-box-pack:start;-ms-flex-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start;padding-left:20px;padding-right:20px;}}body>div.sidemenu .sidebar__close{position:absolute;right:30px;top:30px;display:inline-block;width:38px;height:38px;padding:10px;border:none;border-radius:0;background:transparent;color:inherit;z-index:1;cursor:pointer;}body>div.sidemenu .sidebar__close:before,body>div.sidemenu .sidebar__close:after{content:'';display:block;width:22px;height:2px;background-color:currentColor;position:absolute;left:50%;top:50%;}body>div.sidemenu .sidebar__close:before{-webkit-transform:translate(-50%, -50%) rotate(45deg);-moz-transform:translate(-50%, -50%) rotate(45deg);-ms-transform:translate(-50%, -50%) rotate(45deg);transform:translate(-50%, -50%) rotate(45deg);}body>div.sidemenu .sidebar__close:after{-webkit-transform:translate(-50%, -50%) rotate(-45deg);-moz-transform:translate(-50%, -50%) rotate(-45deg);-ms-transform:translate(-50%, -50%) rotate(-45deg);transform:translate(-50%, -50%) rotate(-45deg);}@media (max-width: 767px){body>div.sidemenu .sidebar__close{right:10px;top:10px;}}body>div.sidemenu .sidebar__close:focus{outline:none;}body>div.sidemenu .sidebar__nav{list-style:none;padding:0;margin:auto 0;}body>div.sidemenu .sidebar__nav-item{margin:0;padding-top:4px;padding-bottom:4px;border-bottom:1px solid hsla( 32 var(--bgColor_H, 0), 33 var(--bgColor_S, 0%), 34 calc(50% + (var(--bgColor_L, 100%) - 50%) * 0.9), 35 var(--bgColor_A, 1) 36 );}body>div.sidemenu .sidebar__nav-link{display:inline-block;padding:10px;border:none;border-radius:0;background:transparent;text-transform:none;-webkit-transition:all .25s;transition:all .25s;cursor:pointer;color:inherit;}body>div.sidemenu .sidebar__nav-link:focus{outline:none;}body>div.sidemenu .sidebar__subnav{list-style:none;padding:4px 0 10px;margin:0;font-size:17px;}@media (max-width: 767px){body>div.sidemenu .sidebar__subnav{font-size:14px;letter-spacing:.3px;}}body>div.sidemenu .sidebar__subnav-item{margin-bottom:10px;}body>div.sidemenu .sidebar__subnav-item:last-child{margin-bottom:0;}body>div.sidemenu .sidebar__subnav-link{display:inline-block;padding:0;border:none;border-radius:0;background:transparent;text-transform:none;opacity:.7;-webkit-transition:all .25s;transition:all .25s;cursor:pointer;color:inherit;}body>div.sidemenu .sidebar__subnav-link:focus{outline:none;}body>div.sidemenu .sub-nav{visibility:hidden;opacity:0;max-height:0;-webkit-transition:all .3s;transition:all .3s;}body>div.sidemenu .sub-nav.visible{display:block;visibility:visible;opacity:1;max-height:100vh;}body>div.sidemenu .sub-nav.visible+.main-nav{color:#7a7a7a;}body>div.sidemenu .sub-nav.visible+.main-nav:after{margin-left:40px;border-bottom:2px solid var(--fontColor, #7a7a7a);border-right:2px solid var(--fontColor, #7a7a7a);}body>div.sidemenu .sub-nav-container{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;}body>div.sidemenu .sub-nav-container:hover .main-nav:after{border-bottom:2px solid var(--fontColor, #7a7a7a);border-right:2px solid var(--fontColor, #7a7a7a);}body>div.sidemenu .sub-nav-container .main-nav{position:relative;display:inline-block;}body>div.sidemenu .sub-nav-container .main-nav:after{content:'';display:inline-block;position:relative;width:8px;height:8px;margin-left:25px;-webkit-transform:rotate(45deg) translateX(-100%);-moz-transform:rotate(45deg) translateX(-100%);-ms-transform:rotate(45deg) translateX(-100%);transform:rotate(45deg) translateX(-100%);border-bottom:2px solid var(--fontColor, #000000);border-right:2px solid var(--fontColor, #000000);top:0;bottom:auto;left:auto;-webkit-transition:0.5s all ease;transition:0.5s all ease;background-color:transparent;}body>div.sidemenu #main-section .sidebar{-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0);}footer{background-color:#fff;color:#000000;--fontColor:#000000;--fontColor_H:0;--fontColor_S:0%;--fontColor_L:0%;--fontColor_A:1;--fontColor_darkenDir:1;--bgColor:#fff;--bgColor_H:0;--bgColor_S:0%;--bgColor_L:100%;--bgColor_A:1;--bgColor_darkenDir:-1;--greyColor:hsla( 37var(--fontColor_H), 38var(--fontColor_S), 39calc(var(--fontColor_L) + (50% - var(--fontColor_L)) * 0.445), 40var(--fontColor_A));}footer .redesign .inp--dark-bg input{color:var(--fontColor);border-color:hsla( 41 var(--fontColor_H), 42 var(--fontColor_S), 43 calc(var(--fontColor_L) + (50% - var(--fontColor_L)) * 0.445), 44 var(--fontColor_A));}footer .redesign .inp--dark-bg input:hover{border-color:var(--fontColor);}footer .redesign .inp+.inp{margin-top:24px;}footer .redesign .btn--primary-light{border-color:var(--fontColor);color:var(--fontColor);}footer .redesign .btn--primary-light:hover{background-color:var(--fontColor);color:var(--bgColor);}footer.is-background-color-light .redesign .btn--primary-light{border-width:1px;}footer .redesign .socials--grey{-webkit-box-pack:end;-ms-flex-pack:end;
44-webkit-justify-content:flex-end;justify-content:flex-end;}footer .redesign .socials--grey .socials__link{background-color:hsla( 45 var(--bgColor_H), 46 var(--bgColor_S), 47 calc(var(--bgColor_L) + (50% - var(--bgColor_L)) * 0.15), 48 var(--bgColor_A));color:var(--greyColor);}footer .redesign .socials--grey .socials__link svg{fill:var(--greyColor);}footer .redesign .socials--grey .socials__link:hover{background-color:hsla( 49 var(--bgColor_H), 50 var(--bgColor_S), 51 calc(var(--bgColor_L) + (50% - var(--bgColor_L)) * 0.4), 52 var(--bgColor_A));color:var(--fontColor);}footer .redesign .socials--grey .socials__link:hover svg{fill:var(--fontColor);}footer .redesign.footer .grey-text{color:var(--fontColor);}footer .footer{position:relative;padding-top:60px;padding-bottom:30px;}@media (max-width: 560px){footer .footer{padding-top:10px;}}@media (max-width: 500px){footer .footer{padding-bottom:70px;}}footer .footer .text_content_wrap p{margin-bottom:15px;}footer .footer .text_content_wrap p:last-of-type{margin-bottom:0;}footer .footer .container{max-width:1440px;}@media (max-width: 768px){footer .footer .container{padding-left:25px;padding-right:25px;}}@media (max-width: 560px){footer .footer .container{padding-left:20px;padding-right:20px;}}footer .footer h3{margin:0 0 15px 0;}footer .footer h5{text-transform:capitalize;}footer .footer .info-wrap{margin-bottom:40px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;}footer .footer .info-wrap .agent_box{width:70%;}@media (max-width: 1280px){footer .footer .info-wrap .agent_box{width:50%;}}@media (max-width: 768px){footer .footer .info-wrap .agent_box{width:100%;}}footer .footer .info-wrap .newsletter_box{width:30%;}@media (max-width: 1280px){footer .footer .info-wrap .newsletter_box{width:50%;}}@media (max-width: 768px){footer .footer .info-wrap .newsletter_box{width:100%;}}footer .footer .info-wrap .newsletter_box--padding{padding-top:44px;}@media (max-width: 768px){footer .footer .info-wrap .newsletter_box--padding{padding-top:0;}}footer .footer .info-wrap .newsletter_box .contact_title{margin-bottom:13px;line-height:1.6;}@media (max-width: 768px){footer .footer .info-wrap .newsletter_box .info-wrap-contact_cell{margin-bottom:0;padding-left:0;}}@media (max-width: 768px){footer .footer .info-wrap .newsletter_box .icon_text{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:22px;position:relative;}footer .footer .info-wrap .newsletter_box .icon_text i{position:relative;width:30px;margin-right:20px;}footer .footer .info-wrap .newsletter_box .icon_text .contact_title{margin-bottom:0;}}@media (max-width: 768px){footer .footer .info-wrap .newsletter_box .info-wrap-contact_zone{margin-bottom:0;}}footer .footer .info-wrap-contact{position:relative;}footer .footer .info-wrap-contact_zone{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;margin-bottom:39px;}@media (max-width: 768px){footer .footer .info-wrap-contact_zone{margin-bottom:21px;}footer .footer .info-wrap-contact_zone:last-child{margin-bottom:51px;}}footer .footer .info-wrap-contact_zone i{position:absolute;left:0;display:block;}footer .footer .info-wrap-contact_zone i svg path{fill:currentColor;}footer .footer .info-wrap-contact_zone h4{margin:0 0 13px 0;width:100%;}footer .footer .info-wrap-contact_cell{position:relative;padding-left:50px;width:400px;font-size:14px;text-transform:uppercase;font-weight:bold;letter-spacing:1.5px;}@media (max-width: 1280px){footer .footer .info-wrap-contact_cell:first-of-type{margin-bottom:21px;}}footer .footer .info-wrap-contact_cell .contact_title{line-height:1;margin-bottom:5px;}footer .footer .info-wrap-contact_link{color:var(--greyColor);position:relative;}@media (max-width: 560px){footer .footer .info-wrap-contact_link{letter-spacing:0;}}footer .footer .hvr_animation{position:relative;-webkit-text-decoration:none!important;text-decoration:none!important;}footer .footer .hvr_animation:after{content:'';position:absolute;
52left:0;bottom:0;width:0%;height:1px;background:var(--greyColor);-webkit-transition:.3s linear;transition:.3s linear;}footer .footer .hvr_animation:hover:after{width:100%;}footer .footer .hvr_animation.underlined:after{width:100%;}footer .footer .hvr_animation.underlined:hover:after{width:0%;}footer .footer .form-content{padding:0!important;}footer .footer .form-content label{color:var(--fontColor);text-transform:none;letter-spacing:1;}footer .footer .form-content input{padding:2px 24px 2px 0;}footer .footer .form-content .subscribe_btn{margin-top:20px;position:relative;}footer .footer .form-content .subscribe_btn i{font-size:18px;position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%, -50%);-moz-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);opacity:0;}footer .footer .form-content.success i{opacity:1;}footer .footer .form-content.success .subscribe_btn span{opacity:0;}footer .footer .form-content.success .hide{opacity:0;}footer .footer .form-content.success .hide +span{opacity:1;}footer .footer .text_footer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;margin-bottom:39px;}@media (max-width: 1280px){footer .footer .text_footer{-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;}}@media (max-width: 560px){footer .footer .text_footer{text-align:center;}}footer .footer .text_footer p{white-space:normal;}footer .footer .text_footer .images_box{max-width:186px;width:100%;margin-right:43px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}@media (max-width: 560px){footer .footer .text_footer .images_box{margin:0 auto 20px auto;}}@media (max-width: 1280px){footer .footer .text_footer .img_size{margin-bottom:20px;}}@media (max-width: 560px){footer .footer .text_footer .img_size{margin-bottom:0;}}footer .footer .text_footer .img_size img{width:100%;height:100%;object-fit:contain;}footer .footer .first_text_footer .img_size{width:100%;height:63px;}footer .footer .first_text_footer .img_size img{width:100%;height:100%;object-fit:contain;}@media (max-width: 768px){footer .footer .first_text_footer{margin-bottom:51px;}}footer .footer .second_text_footer .first_img_size{width:45px;height:45px;margin-right:15px;}footer .footer .second_text_footer .second_img_size{width:100px;height:45px;}@media (max-width: 560px){footer .footer .second_text_footer{margin-bottom:21px;}}footer .footer .info-privacy{padding-top:45px;padding-bottom:30px;border-top:1px solid hsla( 53 var(--bgColor_H), 54 var(--bgColor_S), 55 calc(var(--bgColor_L) + (50% - var(--bgColor_L)) * 0.55), 56 var(--bgColor_A));}@media (max-width: 768px){footer .footer .info-privacy{padding-top:0;border-top:none;}}footer .footer .info-privacy__row{-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;}footer .footer .info-privacy .copy_zone{font-size:18px;}@media (min-width: 1350px){footer .footer .info-privacy .copy_zone{text-align:center;}}@media (min-width: 1281px){footer .footer .info-privacy .copy_zone{padding-top:8px;padding-bottom:8px;}}@media (max-width: 768px){footer .footer .info-privacy .copy_zone{text-align:center;margin-bottom:10px;padding-top:45px;border-top:1px solid hsla( 57 var(--bgColor_H), 58 var(--bgColor_S), 59 calc(var(--bgColor_L) + (50% - var(--bgColor_L)) * 0.55), 60 var(--bgColor_A));}}footer .footer .info-privacy .copy_zone a{color:var(--greyColor);}footer .footer .info-privacy .powered_zone{font-size:18px;}@media (min-width: 1281px){footer .footer .info-privacy .powered_zone{padding-top:8px;padding-bottom:8px;}}@media (max-width: 1280px){footer .footer .info-privacy .powered_zone{text-align:center;}}@media (max-width: 768px){footer .footer .info-privacy .powered_zone{text-align:center;margin-bottom:24px;}}footer .footer .info-privacy .powered_zone a{color:var(--greyColor);}@media (min-width: 1281px){footer .footer .info-privacy .socials_zone{-webkit-box-flex-wrap:nowrap;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;}}@media (max-width: 1280px){footer .footer .info-privacy .socials_zone{width:100%;margin-top:20px;-webkit-box-pack:start;-ms-flex-pack:start;
60-webkit-justify-content:flex-start;justify-content:flex-start;}}@media (max-width: 768px){footer .footer .info-privacy .socials_zone{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;margin-top:0;margin-bottom:20px;}footer .footer .info-privacy .socials_zone li{padding:0 7px 10px 7px;}}footer .footer.one_contact .type_user{margin-bottom:73px;}@media (max-width: 768px){footer .footer.one_contact .type_user{margin-bottom:51px;}}footer .footer.no_newsletter h3{margin-bottom:46px;}footer .footer.no_newsletter .newsletter_box{display:none;}footer .footer.no_newsletter .info-wrap-contact{width:calc(70% + 230px);width:100%;padding-left:230px;}@media (max-width: 1200px){footer .footer.no_newsletter .info-wrap-contact{padding-left:0;}}@media (max-width: 768px){footer .footer.no_newsletter .info-wrap-contact{width:100%;}}@media (max-width: 1200px){footer .footer.no_newsletter .info-wrap-contact_cell{width:50%;}}@media (max-width: 768px){footer .footer.no_newsletter .info-wrap-contact_cell{width:100%;}}footer .footer.no_newsletter .info-wrap-contact h4{position:absolute;margin-top:-8px;left:0;max-width:200px;}@media (max-width: 1200px){footer .footer.no_newsletter .info-wrap-contact h4{position:relative;left:auto;max-width:100%;width:100%;margin-bottom:20px;margin-top:0;}}@media (max-width: 768px){footer .footer.no_newsletter .info-wrap-contact h4{position:relative;left:auto;max-width:100%;}}footer .footer.no_newsletter .info-wrap-contact_zone:first-of-type{margin-bottom:71px;}@media (max-width: 1200px){footer .footer.no_newsletter .info-wrap-contact_zone:first-of-type{margin-bottom:39px;}}@media (max-width: 768px){footer .footer.no_newsletter .info-wrap-contact_zone:first-of-type{margin-bottom:51px;}}footer .footer.no_newsletter .info-wrap-contact_zone:last-child{margin-bottom:0;}footer .footer.no_icon .info-wrap-contact_cell{padding-left:0;}footer .footer.no_icon .info-wrap-contact_cell i{display:none;}footer .footer.no-names .info-wrap-contact{padding-left:0;}footer .form-row{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;margin-left:-15px;margin-right:-15px;}@media (min-width: 1281px){footer .form-row{-webkit-box-flex-wrap:nowrap;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;}}@media (max-width: 900px){footer .form-row{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}}footer .form-col{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;padding-left:15px;padding-right:15px;}@media (min-width: 768px){footer .form-col{-webkit-flex:1 1 0;-ms-flex:1 1 0;flex:1 1 0;}}@media (min-width: 768px){footer .form-col--socials{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;}}@media (min-width: 1281px){footer .form-col--socials{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;}}@media (max-width: 768px){footer .form-col--socials{-webkit-order:-1;-ms-flex-order:-1;order:-1;}}@media (min-width: 1281px){footer .form-col--xl-auto{-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;}}footer .additional-links-separator{display:block;width:100%;height:0;overflow:hidden;}@media (min-width: 768px){footer .additional-links-separator{display:inline;width:auto;height:auto;}footer .additional-links-separator:before{content:"|";}}footer .h-pot{height:0;width:0;overflow:hidden;visibility:hidden;}footer .img-wrap{max-width:100px;width:100%;display:block;margin-right:20px;}@media (max-width: 900px){footer .img-wrap{margin-right:0;margin-bottom:10px;}}footer .img-wrap img{width:100%;object-fit:cover;}footer .powered-box{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;}@media (max-width: 900px){footer .powered-box{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}}footer .form-col--copyright{-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;margin:10px 0;}footer .luxury-link{white-space:nowrap;}footer .footer__disclaimers{padding-top:24px;padding-bottom:24px;}@media (max-width: 900px){footer .footer__disclaimers{text-align:center;}}body>div.mobile-contact-wrapper .mobile-contact{display:none;position:fixed;right:30px;bottom:25px;z-index:91;}body>div.mobile-contact-wrapper .mobile-contact a{-webkit-text-decoration:none;text-decoration:none;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;
60-webkit-justify-content:center;justify-content:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:55px;height:55px;margin-bottom:15px;background-color:#fff;font-size:22px;border:2px solid hsla(0,0%,49.8%,.3);border-radius:90px;margin-left:1px;}body>div.mobile-contact-wrapper .mobile-contact a i{color:#000;}body>div.mobile-contact-wrapper .mobile-contact .buttons-holder{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}body>div.mobile-contact-wrapper .mobile-contact.dark a{background-color:#000;}body>div.mobile-contact-wrapper .mobile-contact.dark a i{color:#fff;}@media (max-width: 560px){body>div.mobile-contact-wrapper .mobile-contact{display:block;}} 61 </style> 62 <style id="custom-style-css">.pagination-style-1 li a{color:rgba(0, 0, 0, 1)!important;background-color:rgba(0, 0, 0, 0)!important;border-color:rgba(0, 0, 0, 0)!important;}.pagination-style-1 li a:hover{color:rgba(255, 255, 255, 1)!important;background-color:rgba(0, 0, 0, 1)!important;border-color:rgba(0, 0, 0, 1)!important;}.pagination-style-1 li.active a{color:rgba(255, 255, 255, 1)!important;background-color:rgba(0, 0, 0, 1)!important;border-color:rgba(0, 0, 0, 1)!important;}.hyperlink-style-1{color:rgba(0, 0, 0, 1)!important;}.hyperlink-style-1:hover{color:rgba(26, 26, 26, 1)!important;}.button-style-1{color:rgba(0,0,0,1)!important;background-color:rgba(0, 0, 0, 0)!important;border-color:rgba(0,0,0,1)!important;}.button-style-1:hover{color:rgba(255,255,255,1)!important;background-color:rgba(0,0,0,1)!important;border-color:rgba(0, 0, 0, 1)!important;}.social_icons-style-1 a{border-color:rgba(0, 0, 0, 1)!important;background-color:rgba(0, 0, 0, 0)!important;color:rgba(0, 0, 0, 1)!important;}.social_icons-style-1 a:hover{border-color:rgba(0, 0, 0, 1)!important;background-color:rgba(0, 0, 0, 1)!important;color:rgba(255,255,255,1)!important;}.social_icons-style-1 a i{color:inherit!important;}
62.social_icons-style-1 a svg,.social_icons-style-1 a svg path{fill:currentColor!important;}.button-style-2{color:rgba(255, 255, 255, 1)!important;background-color:rgba(0, 0, 0, 0)!important;border-color:rgba(255, 255, 255, 1)!important;}.button-style-2:hover{color:rgba(0, 0, 0, 1)!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(0, 0, 0, 0)!important;color:rgba(255, 255, 255, 1)!important;}.social_icons-style-2 a:hover{border-color:rgba(255, 255, 255, 1)!important;background-color:rgba(255, 255, 255, 1)!important;color:rgba(0, 0, 0, 1)!important;}.social_icons-style-2 a i{color:inherit!important;}.social_icons-style-2 a svg,.social_icons-style-2 a svg path{fill:currentColor!important;}.hyperlink-style-2{color:rgba(255, 255, 255, 1)!important;}.hyperlink-style-2:hover{color:rgba(255, 255, 255, 0.7)!important;}.pagination-style-2 li a{color:rgba(255, 255, 255, 1)!important;background-color:rgba(0, 0, 0, 0)!important;border-color:rgba(0, 0, 0, 0)!important;}.pagination-style-2 li a:hover{color:rgba(0, 0, 0, 1)!important;background-color:rgba(255, 255, 255, 1)!important;border-color:rgba(255,255,255,1)!important;}.pagination-style-2 li.active a{color:rgba(0, 0, 0, 1)!important;background-color:rgba(255, 255, 255, 1)!important;border-color:rgba(255,255,255,1)!important;}.button-style-3{color:rgba(94, 94, 94, 1)!important;background-color:rgba(0, 0, 0, 0)!important;border-color:rgba(94, 94, 94, 1)!important;}.button-style-3:hover{color:rgba(255,255,255,1)!important;background-color:rgba(94, 94, 94, 1)!important;border-color:rgba(94, 94, 94, 1)!important;}.button-style-4{color:rgba(192, 192, 192, 1)!important;background-color:rgba(0, 0, 0, 0)!important;border-color:rgba(192, 192, 192, 1)!important;}.button-style-4:hover{color:rgba(255, 255, 255, 1)!important;background-color:rgba(192, 192, 192, 1)!important;border-color:rgba(192, 192, 192, 1)!important;}.button-style-5{color:rgba(255, 255, 255, 1)!important;background-color:rgba(0, 0, 0, 1)!important;border-color:rgba(0, 0, 0, 1)!important;}.button-style-5:hover{color:rgba(0, 0, 0, 1)!important;background-color:rgba(0, 0, 0, 0.01)!important;border-color:rgba(0, 0, 0, 1)!important;}.button-style-6{color:#000000!important;background-color:#FFFFFF!important;border-color:rgba(255, 255, 255, 1)!important;}.button-style-6:hover{color:#FFFFFF!important;background-color:rgba(0, 0, 0, 0)!important;border-color:#FFFFFF!important;}</style> 63 <!-- LP Consent bootstrap: blocking; resolves consent state, pushes Consent Mode 64 defaults, and dynamically loads the locale + main (and banner if needed). --> 65
65<script src="https://cdn.luxurypresence.com/scripts/lp-consent/latest/lp-consent-boot.js" data-website-id="db633698-1cbe-4d33-a362-b83e8348acd5"></script>
65 66 67 68
68<script> 69 (function utmParse() { 70 const url = new URL(window.location.href); 71 if (url.search) { 72 const utm = url.search.split(/\?|&/g).reduce((acc, current) => { 73 const matched = current.match(/utm_(content|campaign|medium|source|term|id)|gclid/g); 74 if (matched) { 75 acc[matched[0]] = current.replace(`${matched[0]}=`, ''); 76 } 77 return acc; 78 }, {}); 79 if (Object.keys(utm).length) { 80 window.localStorage.setItem('utm_vars', JSON.stringify(utm)); 81 } else { 82 // Remove old utm vars 83 window.localStorage.removeItem('utm_vars'); 84 } 85 } 86 // Set referrer in local storage 87 // This is meant to be stored once to avoid self-referrals and to have the first referrer only. 88 if (!window.localStorage.getItem('referrer')) { 89 // Capture the Referrer URL 90 const referrer = document.referrer; 91 if (referrer) { 92 // Only store the referrer if it comes from outside the current domain (to avoid self-referrals) 93 const currentDomain = window.location.hostname; 94 const referrerDomain = new URL(referrer).hostname; 95 96 if (referrerDomain !== currentDomain) { 97 // Store it in localStorage 98 localStorage.setItem('referrer', referrer); 99 } 100 } 101 } 102 })(); 103 </script>
103 104 <meta name="msvalidate.01" content="6EF94D90B750F0CF0352C86E9713C7C3" /> 105 <!-- GOOGLE TRANSLATE STYLES are moved to external CSS --> 106</head> 107<body> 108 <div id="google_translate_element" style="display: none"></div> 109 110 <nav id="global-navbar" data-el-id="43e7a874-fb1e-4cdd-91fe-eb6bf5b9179b"> 111 <div class="redesign"> 112 <div class="content-container header"> 113 <div class="container header__container"> 114 <div class="navbar"> 115 <div class="logo"> 116 <a href="/" class="logo__link"> 117 <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/93d52135-f2a9-4456-8666-f94649772612" 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/93d52135-f2a9-4456-8666-f94649772612 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/93d52135-f2a9-4456-8666-f94649772612 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/93d52135-f2a9-4456-8666-f94649772612 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/93d52135-f2a9-4456-8666-f94649772612 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/93d52135-f2a9-4456-8666-f94649772612 2560w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=3456/https://media-production.lp-cdn.com/media/93d52135-f2a9-4456-8666-f94649772612 3456w" class="logo__img light" alt=""> 118 <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/02475525-1c39-4b20-a5d0-d392f2afbdbc" 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/02475525-1c39-4b20-a5d0-d392f2afbdbc 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/02475525-1c39-4b20-a5d0-d392f2afbdbc 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/02475525-1c39-4b20-a5d0-d392f2afbdbc 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/02475525-1c39-4b20-a5d0-d392f2afbdbc 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/02475525-1c39-4b20-a5d0-d392f2afbdbc 2560w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=3456/https://media-production.lp-cdn.com/media/02475525-1c39-4b20-a5d0-d392f2afbdbc 3456w" class="logo__img dark" alt=""> 119 </a> 120 </div> 121 <div class="navigation"> 122 <ul> 123 <li class="navigation__item"> 124 <a href="/properties" class="navigation__link wow fadeInUp" data-wow-delay="2.0"><span>Portfolio</span></a> 125 </li> 126 <li class="navigation__item sub-nav-container"> 127 <a href="#" class="navigation__link wow fadeInUp">Property Search</a> 128 <div class="sub-nav"> 129 <ul> 130 <li class="sub-nav__item"><a href="/home-search/listings" class="nav-link sub-nav__link feature"><span>Home Search</span></a></li> 131 <li class="sub-nav__item"><a href="/druid-hills-homes-for-sale" class="nav-link sub-nav__link feature"><span>Druid Hills</span></a></li> 132 <li class="sub-nav__item"><a href="/decatur-homes-for-sale" class="nav-link sub-nav__link feature"><span>Decatur</span></a></li> 133 <li class="sub-nav__item"><a href="/morningside-homes-for-sale" class="nav-link sub-nav__link feature"><span>Morningside</span></a></li> 134 <li class="sub-nav__item"><a href="/north-decatur-homes-for-sale" class="nav-link sub-nav__link feature"><span>North Decatur</span></a></li> 135 <li class="sub-nav__item"><a href="/virginia-highland-homes-for-sale" class="nav-link sub-nav__link feature"><span>Virginia Highland</span></a></li> 136 <li class="sub-nav__item"><a href="/lavista-park-homes-for-sale" class="nav-link sub-nav__link feature"><span>Lavista Park</span></a></li> 137 </ul> 138 </div> 139 </li> 140 <li class="navigation__item"> 141 <a href="/home-valuation" class="navigation__link wow fadeInUp" data-wow-delay="2.2"><span>Home Valuation</span></a> 142 </li> 143 <li class="navigation__item"> 144 <a href="/Elevate" class="navigation__link wow fadeInUp" data-wow-delay="2.3"><span>Crochet Elevate</span></a> 145 </li> 146 <li class="navigation__item"> 147 <a href="/all-cash-offer" class="navigation__link wow fadeInUp" data-wow-delay="2.4"><span>All Cash Offer</span></a> 148 </li> 149 <li class="navigation__item"> 150 <a href="/join-our-team" class="navigation__link wow fadeInUp" data-wow-delay="2.5"><span>Join Us</span></a> 151 </li> 152 <li class="navigation__item"> 153 <a data-type="CONTACT_US" class="navigation__link wow fadeInUp"><span>Contact Us</span></a> 154 </li> 155 </ul> 156 </div> 157 <div class="buttons-wrapper"> 158 <button type="button" class="hamburger-component hamburger">
159 <span class="hamburger__bars"></span> 160 </button> 161 </div> 162 </div> 163 </div> 164 </div> 165</div> 166 167 </nav> 168 <div id="global-sidemenu" class="sidemenu" data-el-id="11fa925d-d2dd-4213-a0fa-d46f769e2c18"> 169 <div class="sidebar"> 170 171 <button class="toggle sidebar__close close"></button> 172 <div class="sidebar__content"> 173 174 <ul class="sidebar__nav"> 175 <li class="sidebar__nav-item"> 176 <a href="/" class="sidebar__nav-link">Home</a> 177 </li> 178 <li class="sidebar__nav-item"> 179 <a href="/team" class="sidebar__nav-link">Meet the Team</a> 180 </li> 181 <li class="sidebar__nav-item"> 182 <a href="/properties" class="sidebar__nav-link">Portfolio</a> 183 </li> 184 <li class="sidebar__nav-item sub-nav-container"> 185 <div class="sub-nav"> 186 <ul class="sidebar__subnav"> 187 <li class="sidebar__subnav-item"><a href="/home-search/listings" class="sidebar__subnav-link">Home Search</a></li> 188 <li class="sidebar__subnav-item"><a href="/druid-hills-homes-for-sale" class="sidebar__subnav-link">Druid Hills</a></li> 189 <li class="sidebar__subnav-item"><a href="/decatur-homes-for-sale" class="sidebar__subnav-link">Decatur</a></li> 190 <li class="sidebar__subnav-item"><a href="/morningside-homes-for-sale" class="sidebar__subnav-link">Morningside</a></li> 191 <li class="sidebar__subnav-item"><a href="/north-decatur-homes-for-sale" class="sidebar__subnav-link">North Decatur</a></li> 192 <li class="sidebar__subnav-item"><a href="/virginia-highland-homes-for-sale" class="sidebar__subnav-link">Virginia Highland</a></li> 193 <li class="sidebar__subnav-item"><a href="/lavista-park-homes-for-sale" class="sidebar__subnav-link">Lavista Park</a></li> 194 </ul> 195 </div> 196 <a href="#" class="sidebar__nav-link link main-nav">Property Search</a> 197 </li> 198 <li class="sidebar__nav-item"> 199 <a href="/Elevate" class="sidebar__nav-link">Crochet Elevate Program</a> 200 </li> 201 <li class="sidebar__nav-item"> 202 <a href="/home-valuation" class="sidebar__nav-link">Home Valuation</a> 203 </li> 204 <li class="sidebar__nav-item"> 205 <a href="/neighborhoods" class="sidebar__nav-link">Neighborhoods</a> 206 </li> 207 <li class="sidebar__nav-item"> 208 <a href="/testimonials" class="sidebar__nav-link">Testimonials</a> 209 </li> 210 <li class="sidebar__nav-item"> 211 <a href="/press" class="sidebar__nav-link">Press</a> 212 </li> 213 <li class="sidebar__nav-item"> 214 <a href="/all-cash-offer" class="sidebar__nav-link">All Cash Offer</a> 215 </li> 216 <li class="sidebar__nav-item"> 217 <a href="/blog" class="sidebar__nav-link">Blog</a> 218 </li> 219 <li class="sidebar__nav-item"> 220 <a href="/join-our-team" class="sidebar__nav-link">Join Us</a> 221 </li> 222 <li class="sidebar__nav-item"> 223 <a href="/contact" class="sidebar__nav-link">Contact Us</a> 224 </li> 225 <li class="sidebar__nav-item"> 226 <a href="/home-search/account" class="sidebar__nav-link">My Search Portal</a> 227 </li> 228 </ul> 229 </div> 230</div> 231 </div> 232 <div id="global-mobile-contact" class="mobile-contact-wrapper" data-el-id="ca33406a-b24a-4100-b315-87fd53d5adc2"> 233 <div class="mobile-contact dark"> 234 <div class="buttons-holder"> 235 <a href="/cdn-cgi/l/email-protection#701a1f153013021f131815040215111c1503041104155e131f1d"> 236 <i class="lp-i lp-i--envelope"></i> 237 </a> 238 <a href="tel:4044319974"> 239 <i class="lp-i lp-i--phone"></i> 240 </a> 241 </div> 242</div> 243 244 </div> 245 <section class="image-section is-font-color-light is-background-color-dark" id="section-1a8ae1c2-78c6-4cc7-a1e3-a3d2470900f2" data-el-id="e6c6941b-dd32-4d6b-b4aa-56593f2d58bb"> 246 <div class="redesign custom-intro"> 247 <div class="container"> 248 <h1 class="custom-intro__title">Blog</h1> 249 250 </div> 251</div> 252 253</section> 254<section id="section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d" class="solid-section is-font-color-dark is-background-color-light" data-el-id="1e77e4a0-6624-43db-b736-bd434565fece">
vendor: 109 bytes, lines 254-255
254 255<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
255<script type="text/x-handlebars-template" class="gridItem pagination-script"><a href="/blog/{{slug}}" class="blog-list__item"> 256 <div class="blog-list__item-image"> 257 258 259 260 {{#if media.length}} 261 {{{mediaImage media.[0] alt=title}}} 262 {{/if}} 263 </div> 264 265 <div class="blog-list__item-content"> 266 <h4 class="serif">{{title}}</h4> 267 <ul class="blog-list__item-details"> 268 269 {{#isEmpty customAuthor}} 270 {{#if (or createdBy.firstName createdBy.lastName)}}<li class="blog-list__item-author">{{createdBy.firstName}} {{createdBy.lastName}}</li>{{/if}} 271 {{else}} 272 <li class="blog-list__item-author">{{customAuthor}}</li> 273 {{/isEmpty}} 274 275 <li class="blog-list__item-date">{{hbFormatDate publishedAt 'MM/DD/YY'}}</li> 276 </ul> 277 278 {{#if subtitle}} 279 <p>{{truncate (striptags subtitle) 130 "..."}}</p> 280 {{/if}} 281 <span class="link hyperlink-style-1">Read MORE</span> 282 </div> 283</a> 284</script>
284 285 286 287 288 289 290 291<div class="redesign blog-list"> 292 293 294 <div class="container blog-list__container data-container hide-author"> 295 <a href="/blog/mclendon-avenues-next-chapter-starts-at-7-am" class="blog-list__item"> 296 <div class="blog-list__item-image"> 297 298 299 300 <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/32a4fc8e-e42f-4fa0-9be6-2418729bc27c" 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/32a4fc8e-e42f-4fa0-9be6-2418729bc27c 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/32a4fc8e-e42f-4fa0-9be6-2418729bc27c 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/32a4fc8e-e42f-4fa0-9be6-2418729bc27c 1536w" alt="Brick home entrance with a dark-bronze glazed door, gridded window, weathered brick steps, and oakleaf hydrangea." loading="lazy"> 301 </div> 302 303 <div class="blog-list__item-content"> 304 <h4 class="serif">McLendon Avenue's Next Chapter Starts at 7 a.m.</h4> 305 <ul class="blog-list__item-details"> 306 307 308 309 <li class="blog-list__item-date">10/8/26</li> 310 </ul> 311 312 <span class="link hyperlink-style-1">Read MORE</span> 313 </div> 314 </a> 315 <a href="/blog/the-haunted-trail-returns-to-clyde-shepherd-nature-preserve-as-lulah-hills-rises-next-door" class="blog-list__item"> 316 <div class="blog-list__item-image"> 317 318 319 320 <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/a22229a2-6fd3-4666-bb17-7be72b45d0e7" 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/a22229a2-6fd3-4666-bb17-7be72b45d0e7 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/a22229a2-6fd3-4666-bb17-7be72b45d0e7 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/a22229a2-6fd3-4666-bb17-7be72b45d0e7 1536w" alt="Brick house corner with a screened porch, gridded window, and bluestone steps beneath oak branches." loading="lazy"> 321 </div> 322 323 <div class="blog-list__item-content"> 324 <h4 class="serif">The Haunted Trail Returns to Clyde Shepherd Nature Preserve as Lulah Hills Rises Next Door</h4> 325 <ul class="blog-list__item-details"> 326 327 328 329 <li class="blog-list__item-date">10/1/26</li> 330 </ul> 331 332 <span class="link hyperlink-style-1">Read MORE</span> 333 </div> 334 </a> 335 <a href="/blog/ansley-park-runs-on-two-nonprofits-and-most-residents-only-know-one-of-their-names" class="blog-list__item"> 336 <div class="blog-list__item-image"> 337 338 339 340 <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/05ccabe4-e0ae-4b15-bf8b-5f8f240bb4cb" 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/05ccabe4-e0ae-4b15-bf8b-5f8f240bb4cb 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/05ccabe4-e0ae-4b15-bf8b-5f8f240bb4cb 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/05ccabe4-e0ae-4b15-bf8b-5f8f240bb4cb 1408w" alt="Two-story brick house with a screened porch, deep lawn, and uneven brick walkway beneath an overcast sky." loading="lazy"> 341 </div> 342 343 <div class="blog-list__item-content"> 344 <h4 class="serif">Ansley Park Runs on Two Nonprofits, and Most Residents Only Know One of Their Names</h4> 345 <ul class="blog-list__item-details"> 346 347 348 349 <li class="blog-list__item-date">09/24/26</li> 350 </ul> 351
352 <span class="link hyperlink-style-1">Read MORE</span> 353 </div> 354 </a> 355 <a href="/blog/peachtree-circles-historic-district-passed-every-vote-that-counted-then-one-unwritten-rule-killed-it" class="blog-list__item"> 356 <div class="blog-list__item-image"> 357 358 359 360 <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/cc1245af-cd91-4bd6-b63b-3d9aa55b7853" 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/cc1245af-cd91-4bd6-b63b-3d9aa55b7853 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/cc1245af-cd91-4bd6-b63b-3d9aa55b7853 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/cc1245af-cd91-4bd6-b63b-3d9aa55b7853 1408w" alt="Two-story red-brown brick house with a wraparound porch, set beyond a deep lawn beneath mature trees." loading="lazy"> 361 </div> 362 363 <div class="blog-list__item-content"> 364 <h4 class="serif">Peachtree Circle's Historic District Passed Every Vote That Counted. Then One Unwritten Rule Killed It.</h4> 365 <ul class="blog-list__item-details"> 366 367 368 369 <li class="blog-list__item-date">09/17/26</li> 370 </ul> 371 372 <span class="link hyperlink-style-1">Read MORE</span> 373 </div> 374 </a> 375 <a href="/blog/mister-o1-opened-at-inman-quarter-last-week-blue-willow-is-next-and-neither-started-here" class="blog-list__item"> 376 <div class="blog-list__item-image"> 377 378 379 380 <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/83ca3d37-3ba3-40ab-86c6-b0ccb14cd573" 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/83ca3d37-3ba3-40ab-86c6-b0ccb14cd573 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/83ca3d37-3ba3-40ab-86c6-b0ccb14cd573 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/83ca3d37-3ba3-40ab-86c6-b0ccb14cd573 1408w" alt="Brick veranda framed by painted columns, overlooking a leafy yard and long brick walk." loading="lazy"> 381 </div> 382 383 <div class="blog-list__item-content"> 384 <h4 class="serif">Mister O1 Opened at Inman Quarter Last Week. Blue Willow Is Next, and Neither Started Here.</h4> 385 <ul class="blog-list__item-details"> 386 387 388 389 <li class="blog-list__item-date">09/10/26</li> 390 </ul> 391 392 <span class="link hyperlink-style-1">Read MORE</span> 393 </div> 394 </a> 395 <a href="/blog/the-lake-claire-land-trust-runs-on-four-different-saturdays" class="blog-list__item"> 396 <div class="blog-list__item-image"> 397 398 399 400 <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/b00b1bb7-1e06-47ce-96f7-4cdcae327516" 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/b00b1bb7-1e06-47ce-96f7-4cdcae327516 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/b00b1bb7-1e06-47ce-96f7-4cdcae327516 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/b00b1bb7-1e06-47ce-96f7-4cdcae327516 1408w" alt="Herringbone brick walkway beside clipped boxwood, with hydrangea and pink muhly grass in a mulched bed." loading="lazy"> 401 </div> 402 403 <div class="blog-list__item-content"> 404 <h4 class="serif">The Lake Claire Land Trust Runs on Four Different Saturdays</h4> 405 <ul class="blog-list__item-details"> 406 407 408 409 <li class="blog-list__item-date">09/3/26</li> 410 </ul> 411
412 <span class="link hyperlink-style-1">Read MORE</span> 413 </div> 414 </a> 415 <a href="/blog/four-new-restaurants-landed-in-brookhaven-this-summer-the-trail-meant-to-connect-them-hasnt-moved-in-seven-years" class="blog-list__item"> 416 <div class="blog-list__item-image"> 417 418 419 420 <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/d370cd7b-e831-4fdd-b755-293528d1c86e" 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/d370cd7b-e831-4fdd-b755-293528d1c86e 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/d370cd7b-e831-4fdd-b755-293528d1c86e 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/d370cd7b-e831-4fdd-b755-293528d1c86e 1408w" alt="Two-story red brick home with a black steel-and-glass portico, curving paver walk, and mature tree canopy." loading="lazy"> 421 </div> 422 423 <div class="blog-list__item-content"> 424 <h4 class="serif">Four New Restaurants Landed in Brookhaven This Summer. The Trail Meant to Connect Them Hasn't Moved in Seven Years.</h4> 425 <ul class="blog-list__item-details"> 426 427 428 429 <li class="blog-list__item-date">08/27/26</li> 430 </ul> 431 432 <span class="link hyperlink-style-1">Read MORE</span> 433 </div> 434 </a> 435 <a href="/blog/briarcliff-and-clairmont-got-the-restaurant-before-it-got-the-coffee-shop" class="blog-list__item"> 436 <div class="blog-list__item-image"> 437 438 439 440 <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/077d1f50-4115-4e01-aa6a-00e487537318" 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/077d1f50-4115-4e01-aa6a-00e487537318 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/077d1f50-4115-4e01-aa6a-00e487537318 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/077d1f50-4115-4e01-aa6a-00e487537318 1408w" alt="Two-story brick house with a screened porch, curving stone walk, deep lawn, and mature oak canopy." loading="lazy"> 441 </div> 442 443 <div class="blog-list__item-content"> 444 <h4 class="serif">Briarcliff and Clairmont Got the Restaurant Before It Got the Coffee Shop</h4> 445 <ul class="blog-list__item-details"> 446 447 448 449 <li class="blog-list__item-date">08/20/26</li> 450 </ul> 451 452 <span class="link hyperlink-style-1">Read MORE</span> 453 </div> 454 </a> 455 </div> 456 <div class="empty-results">Sorry, we couldn't find any results that match that search. Try another search.</div> 457 <div class="pagination-container pagination-container--dark pagination-style-1"></div> 458</div> 459</section> 460<section class="image-section is-font-color-light is-background-color-light" id="section-d7ac5ffe-a0d4-4b97-aa3d-0166d41728de" data-el-id="e6b1ae9f-5b8d-4ac5-a23f-bfb55ef91c3c"> 461
461<script> 462 (function(){ 463 const sectionId = 'section-d7ac5ffe-a0d4-4b97-aa3d-0166d41728de' 464 const section = document.querySelector(`#${sectionId}`); 465 var sectionBg = window.getComputedStyle(section, null).getPropertyValue('background-image'); 466 467 if('false' === 'true') { 468 section.classList.add('parallax-enabled'); 469 section.style.setProperty('--sectionBackground', sectionBg); 470 section.style.setProperty('background', 'none'); 471 } 472 })() 473</script>
473 474<div class="redesign work-with-us "> 475 <div class="container"> 476 <h2 class="serif">Work With Us</h2> 477 <div class="description">Get assistance in determining current property value, crafting a competitive offer, writing and negotiating a contract, and much more. Contact us today.</div> 478 <div class="btn-container"> 479 <a 480 role="button" 481 data-type="CONTACT_US" 482 class="btn btn--primary-light button-style-2" 483 484 485 486 487 488 > 489 Contact Us 490 </a> 491 </div> 492 </div> 493</div> 494</section> 495<section id="section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb" class="solid-section is-font-color-dark is-background-color-light" data-el-id="5db65d6a-01e9-4ee3-babf-2748e074a284"> 496
496<script type="text/x-handlebars-template" class="jsIGItem"> 497 <a href="{{permalink}}" target="_blank" class="ig-feed-item insta-type-{{mediaType}}"> 498 <div class="ig-feed-item__img" style="background-image: url('{{#ifEquals mediaType 'VIDEO'}}{{thumbnailUrl}}{{^}}{{mediaUrl}}{{/ifEquals}}');"></div> 499 <div class="ig-feed-item__info"><div class="ig-feed-item__caption">{{caption}}</div></div> 500 {{#ifEquals mediaType 'VIDEO'}}<div class="video-icon"></div>{{/ifEquals}} 501 </a> 502</script>
502 503<div class="ig-feed redesign"> 504 <div class="ig-feed-top lp-container"> 505 <div class="top-wrapper"> 506 <div class="top-left"> 507 <h3 class="lp-h3 title">Follow Us on Instagram</h3> 508 <a href="#" target="_blank" class="instagram-link jsIGLink"><h4 class="lp-h4 instagram-name jsIGName"></h4></a> 509 </div> 510 <div class="top-right"> 511 <a href="#" target="_blank" class="lp-btn lp-btn--dark lp-btn--outline lp-btn--mob-full-width follow-button jsIGLink button-style-1">Follow Us</a> 512 <a class="nav-button top-nav-prev hidden-control button-style-1"> 513 <svg width="9" height="15" viewBox="0 0 9 15" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M7.099 13.25l-5.25-5.775L7.099 1.7" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg> 514 </a> 515 <a class="nav-button top-nav-next hidden-control button-style-1"> 516 <svg width="9" height="15" viewBox="0 0 9 15" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1.90137 1.75L7.15137 7.525L1.90137 13.3" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg> 517 </a> 518 </div> 519 </div> 520 </div> 521 <div class="lp-container ig-feed-container "> 522 <div class="ig-feed-feed" data-limit="33"> 523 </div> 524 </div> 525 <div class="bottom-controls"> 526 <a class="bottom-nav-button bottom-nav-prev button-style-1"> 527 <svg width="9" height="15" viewBox="0 0 9 15" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M7.099 13.25l-5.25-5.775L7.099 1.7" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg> 528 </a> 529 <a class="bottom-nav-button bottom-nav-next button-style-1"> 530 <svg width="9" height="15" viewBox="0 0 9 15" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1.90137 1.75L7.15137 7.525L1.90137 13.3" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg> 531 </a> 532 </div> 533</div> 534 535</section> 536 537 <div id="modals" class="modals"></div> 538 <footer id="global-footer" class="is-font-color-dark is-background-color-light" data-el-id="874a9373-949d-4275-b72f-04c2a6ec373b"> 539 <div class="footer redesign no_newsletter "> 540 <div class="container"> 541 <h3>Crochet Real Estate</h3> 542 <div class="info-wrap"> 543 <div class="info-wrap-contact agent_box"> 544 <div class="info-wrap-contact_zone type_user"> 545 <h4 class="serif">GET IN TOUCH</h4> 546 <div class="info-wrap-contact_cell"> 547 <i> 548 <svg width="30" height="19" viewBox="0 0 30 19" fill="none" xmlns="http://www.w3.org/2000/svg"> 549 <path d="M2 0C0.903517 0 0 0.903517 0 2V16.6667C0 17.7631 0.903517 18.6667 2 18.6667H28C29.0965 18.6667 30 17.7631 30 16.6667V2C30 0.903517 29.0965 0 28 0H2ZM2.4375 1.33333H27.5625L15.6458 11.4896C15.3389 11.7512 14.6612 11.7512 14.3542 11.4896L2.4375 1.33333ZM1.33333 2.13542L10.1979 9.6979L1.33333 16.5729V2.13542ZM28.6667 2.13542V16.5729L19.8021 9.6979L28.6667 2.13542ZM11.2396 10.5833L13.4896 12.5C14.3543 13.2369 15.6457 13.2369 16.5104 12.5L18.7604 10.5833L27.4687 17.3333H2.53125L11.2396 10.5833Z" fill="#1A1A1A" /> 550 </svg> 551 </i> 552 <p class="contact_title">Email</p> 553 <a href="/cdn-cgi/l/email-protection#2943464c694a5b464a414c5d5b4c48454c5a5d485d4c074a4644" class="lp-link info-wrap-contact_link grey-text hyperlink-style-1"><span class="__cf_email__" data-cfemail="cda7a2a88daebfa2aea5a8b9bfa8aca1a8beb9acb9a8e3aea2a0">[email protected]</span></a> 554 </div> 555 <div class="info-wrap-contact_cell"> 556 <i><svg width="30" height="25" viewBox="0 0 30 25" fill="none" xmlns="http://www.w3.org/2000/svg"> 557 <path fill-rule="evenodd" clip-rule="evenodd" d="M10.7964 8.1207H19.2036V8.7279C19.2036 10.8195 20.9082 12.5259 23.001 12.5259H24.741L25.2852 20.7051C25.3776 22.1235 24.2868 23.2719 22.8822 23.2719H7.0032C5.5944 23.2719 4.5084 22.1085 4.6002 20.7039C4.782 17.9895 4.9152 15.23
55713 5.154 12.5265H6.9996C9.0918 12.5265 10.797 10.8207 10.797 8.7285V8.1207H10.7964ZM11.46 16.5807C11.46 14.6565 13.0188 13.0977 14.943 13.0977C16.8666 13.0977 18.4254 14.6571 18.4254 16.5807C18.4254 18.5055 16.8678 20.0631 14.943 20.0631C13.02 20.0637 11.46 18.5043 11.46 16.5807ZM14.943 12.0381C12.4344 12.0381 10.4004 14.0721 10.4004 16.5807C10.4004 19.0887 12.435 21.1233 14.943 21.1233C17.4486 21.1233 19.485 19.0869 19.485 16.5807C19.485 14.0727 17.451 12.0381 14.943 12.0381ZM9.0846 4.8363C8.22 4.8363 7.512 5.5443 7.512 6.4089V8.7285C7.512 9.0093 7.2804 9.2415 6.999 9.2415H1.5726C1.2906 9.2415 1.0596 9.0111 1.0596 8.7285V6.9285C1.0596 6.4797 1.1628 6.0945 1.3902 5.7069C1.896 4.8465 2.7294 4.1013 3.795 3.4749C9.279 0.2517 20.7192 0.2523 26.2044 3.4749C27.2706 4.1013 28.104 4.8465 28.6098 5.7069C28.8354 6.0921 28.9398 6.4815 28.9398 6.9285V8.7285C28.9398 9.0111 28.71 9.2415 28.4268 9.2415H23.0004C22.719 9.2415 22.4874 9.0093 22.4874 8.7285V6.4089C22.4874 5.5425 21.7806 4.8363 20.9148 4.8363H9.0846ZM8.571 6.4089C8.571 6.1263 8.8026 5.8965 9.0846 5.8965H20.9154C21.1968 5.8965 21.429 6.1275 21.429 6.4089V8.7285C21.429 9.5943 22.1352 10.3017 23.001 10.3017H28.4274C29.292 10.3017 30 9.5931 30 8.7285V6.9285C30 6.2835 29.8464 5.7291 29.5206 5.1729C28.9188 4.1493 27.9564 3.2799 26.7384 2.5641C20.9214 -0.8547 9.0798 -0.8547 3.2622 2.5641C2.0436 3.2799 1.0812 4.1487 0.48 5.1729C0.153 5.7291 0 6.2835 0 6.9279V8.7279C0 9.5925 0.7092 10.3011 1.5726 10.3011H6.999C7.8648 10.3011 8.571 9.5937 8.571 8.7279V6.4089ZM9.7368 7.5915V8.7285C9.7368 10.2387 8.5092 11.4669 6.999 11.4669H4.6686C4.3914 11.4669 4.164 11.6799 4.1412 11.9511C3.8892 14.8347 3.7386 17.7435 3.5448 20.6331C3.4116 22.6425 4.989 24.3315 7.0032 24.3315H22.8822C24.882 24.3315 26.475 22.6575 26.3406 20.6343L25.7622 11.9607C25.7436 11.6811 25.5102 11.4675 25.2342 11.4675L23.001 11.4663C21.4902 11.4663 20.2632 10.2375 20.2632 8.7279V7.5909C20.2632 7.2981 20.0262 7.0611 19.7334 7.0611H10.2666C9.9738 7.0611 9.7368 7.2987 9.7368 7.5915Z" fill="#1A1A1A" /> 558 </svg></i> 559 <p class="contact_title">Phone Number</p> 560 <a href="tel:4044319974" class="lp-link info-wrap-contact_link grey-text hyperlink-style-1">(404) 431-9974</a> 561 </div> 562 </div> 563 <div class="info-wrap-contact_zone"> 564 <div class="info-wrap-contact_cell"> 565 <i> 566 <svg width="31" height="30" viewBox="0 0 31 30" fill="none" xmlns="http://www.w3.org/2000/svg"> 567 <path d="M29.9821 6.49489C29.7931 6.35756 29.679 6.32046 29.4572 6.39228L20.298 9.41368L16.1952 8.03558L15.8172 9.41525L19.7644 10.7038V28.1462L9.89831 25.7069V22.1034H8.71438V25.7515L1.21616 28.2532V15.3945H0.0322266V29.2729C0.0322266 29.5077 0.130098 29.7279 0.321106 29.8645C0.445418 29.9541 0.585911 29.9999 0.735086 29.9999C0.814804 29.9999 0.890971 29.9868 0.967926 29.96L9.48433 27.029L20.1792 29.7887C20.3224 29.8254 20.4751 29.8171 20.6152 29.7654L29.8104 26.2235C30.0942 26.1177 30.0251 25.8466 30.0251 25.5431V7.08291C30.0251 6.85086 30.17 6.63144 29.9821 6.49489ZM28.8412 25.0388L20.9483 28.0361V10.7065L28.8412 8.08649V25.0388Z" fill="#1A1A1A" /> 568 <path d="M6.57515 19.1142C6.6671 19.422 6.95006 19.6323 7.2713 19.6323C7.59215 19.6323 7.87511 19.422 7.96746 19.1142C8.67742 16.7514 10.0393 15.2447 11.3559 13.788C12.9944 11.9747 14.5422 10.2615 14.5422 7.2717C14.5422 3.39788 11.1451 0 7.2713 0C3.39827 0 0 3.39748 0 7.2717C0 10.2615 1.54819 11.9747 3.18674 13.788C4.50328 15.2447 5.86479 16.7514 6.57515 19.1142ZM7.2713 1.45426C10.316 1.45426 13.0883 4.22663 13.0883 7.2717C13.0883 9.70191 11.7852 11.1435 10.2769 12.8121C9.2461 13.9534 8.10992 15.2096 7.2713 16.9199C6.43229 15.2096 5.29651 13.953 4.2657 12.8121C2.75698 11.1432 1.45426 9.70191 1.45426 7.2717C1.45426 4.22663 4.22663 1.45426 7.2713 1.45426Z" fill="#1A1A1A" /> 569 <path d="M7.26193 10.1616C8.8705 10.1616 10.1795 8.86084 10.1795 7.26175C10.1795 5.66305 8.87089 4.3623 7.26193 4.3623C5.65297 4.3623 4.34473 5.66305 4.34473 7.26175C4.34512 8.86084 5.65336 10.1616 7.26193 10.1616ZM7.26193 5.81657C8.06898 5.81657 8.72527 6.46536 8.72527 7.26175C8.72527 8.05932 8.06898 8.70733 7.26193 8.70733C6.45528 8.70733 5.79899 8.05893 5.79899 7.26175C5.79899 6.46536 6.45528 5.81657 7.26193 5.81657Z" fill="#1A1A1A" /> 570 </svg> 571 </i> 572 <p class="info-wrap-contact_title">Address</p> 573 <p class="info-wrap-contact_link grey-text"><p>1382 Scott Blvd, Unit B<br>Decatur, GA 30030</p></p> 574 </div> 575 </div> 576 </div> 577 </div> 578 <div class="text_footer first_text_footer"> 579 <div class="images_box"> 580 <div class="img_size"> 581 <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/cdf3394a-28de-4afb-a9dc-a2e43f117cdf" 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/cdf3394a-28de-4afb-a9dc-a2e43f117cdf 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/cdf3394a-28de-4afb-a9dc-a2e43f117cdf 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/cdf3394a-28de-4afb-a9dc-a2e43f117cdf 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/cdf3394a-28de-4afb-a9dc-a2e43f117cdf 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/cdf3394a-28de-4afb-a9dc-a2e43f117cdf 2560w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=3456/https://media-production.lp-cdn.com/media/cdf3394a-28de-4afb-a9dc-a2e43f117cdf 3456w" alt="Footer Image" sizes="200px"> 582 </div> 583 </div> 584 <div class="luxury-text"> 585 <p style="font-size: 12px;">All information is deemed reliable but not guaranteed and should be independently reviewed and verified. 586 587</p><p> </p><p style="opacity: 1;"><img src="https://res.cloudinary.com/luxuryp/images/zbxf1j3xdplm6lhfnqo3/realtor-eho-logo-07232021-update-dark" style="width: 100px; height: auto;"></p> 588 </div> 589 </div> 590 <div class="text_footer second_text_footer"> 591 <div class="text_content_wrap"> 592 <div> 593 <div> </div><style>* { box-sizing: border-box; } body {margin: 0;}ul{list-style:inherit;}</style> 594 </div> 595 </div> 596 </div> 597 <div class="info-privacy"> 598 <div class="form-row info-privacy__row"> 599 600 <div class="form-col form-col--powered powered-box"> 601 <div class="img-wrap"> 602 <img src="https://media-production.lp-cdn.com/media/3d7b9076-ea71-486e-ad86-59602f822639" alt=""> 603 </div> 604 <div class="powered_zone"> 605 Real Estate Website Design by <a href="https://www.luxurypresence.com/real-estate-website-design/" target="_blank" class="lp-link grey-text luxury-link underlined hyperlink-style-1">Luxury Presence</a> 606 </div> 607 </div> 608 609 <div class="form-col form-col--copyright"> 610 <div class="copy_zone">
611 <span class="copy_words">Copyright ©</span> <span class="auto-year-update">2026</span> 612 | <a href="/terms-and-conditions" class="lp-link grey-text hyperlink-style-1">Privacy Policy</a> 613 614 </div> 615 </div> 616 617 <div class="form-col form-col--socials"> 618 <ul class="lp-socials social_icons-style-1 socials socials--grey socials_zone"> 619 620 <li> 621 <a 622 href="https://www.facebook.com/crochetrealtygroup/" 623 class="lp-socials__link socials__item socials__link wow fadeInUp" 624 data-wow-delay="0s" 625 target="_blank" 626 aria-label="FACEBOOK" 627 > 628 <span class="lp-i lp-i--facebook" aria-hidden="true"></span> 629 </a> 630 </li> 631 <li> 632 <a 633 href="https://www.instagram.com/crochetrealtygroup/" 634 class="lp-socials__link socials__item socials__link wow fadeInUp" 635 data-wow-delay="0.1s" 636 target="_blank" 637 aria-label="INSTAGRAM" 638 > 639 <span class="lp-i lp-i--instagram" aria-hidden="true"></span> 640 </a> 641 </li> 642 <li> 643 <a 644 href="https://www.linkedin.com/company/crochet-realty-group/" 645 class="lp-socials__link socials__item socials__link wow fadeInUp" 646 data-wow-delay="0.2s" 647 target="_blank" 648 aria-label="LINKEDIN" 649 > 650 <span class="lp-i lp-i--linkedin" aria-hidden="true"></span> 651 </a> 652 </li> 653 <li> 654 <a 655 href="https://www.google.com/search?q=Joe+Crochet+realtotr&sca_esv=600539231&source=hp&ei=AOmuZfKwBLDAkPIP6PagaA&iflsig=ANes7DEAAAAAZa73EKSoYnjn_V_yXvVWXtOoDpYzDbxh&ved=0ahUKEwjysLXWgvKDAxUwIEQIHWg7CA0Q4dUDCA8&uact=5&oq=Joe+Crochet+realtotr&gs_lp=Egdnd3Mtd2l6IhRKb2UgQ3JvY2hldCByZWFsdG90cjILEC4YgAQYxwEYrwFItBZQAFiQFXABeACQAQGYAegCoAG2EKoBBTEuMy02uAEDyAEA-AEC-AEBwgIFEAAYgATCAgYQABgWGB7CAgUQIRigAQ&sclient=gws-wiz#ip=1&lrd=0x88f507c5c9e2af89:0x75361851023bd509,1,,,," 656 class="lp-socials__link socials__item socials__link wow fadeInUp" 657 data-wow-delay="0.3s" 658 target="_blank" 659 aria-label="GOOGLE" 660 > 661 <span class="lp-i lp-i--google" aria-hidden="true"></span> 662 </a> 663 </li> 664 </ul> </div> 665 </div> 666 </div> 667 </div> 668</div> 669 670 </footer> 671 672 <div id="modal-global-contact-us" class="modal " 673 data-el-id="" 674 style="background-color: ;" 675 > 676 <div class="modal-content"> 677 <div class="contact-form redesign " style="background-image: url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/j6elglqasuag2vyydi80')"> 678 <div class="container"> 679 <div class="section-details" style="--colorTxt: #ffffff"> 680 <h2>Contact Details</h2> 681 682 <div class="info-zone"> 683 684 <div class="info-zone_contact type_user"> 685 <h4 class="serif">Crochet Realty Group</h4> 686 <div class="info-zone_contact_cell"> 687 <i> 688 <svg width="30" height="19" viewBox="0 0 30 19" fill="none" xmlns="http://www.w3.org/2000/svg"> 689 <path d="M2 0C0.903517 0 0 0.903517 0 2V16.6667C0 17.7631 0.903517 18.6667 2 18.6667H28C29.0965 18.6667 30 17.7631 30 16.6667V2C30 0.903517 29.0965 0 28 0H2ZM2.4375 1.33333H27.5625L15.6458 11.4896C15.3389 11.7512 14.6612 11.7512 14.3542 11.4896L2.4375 1.33333ZM1.33333 2.13542L10.1979 9.6979L1.33333 16.5729V2.13542ZM28.6667 2.13542V16.5729L19.8021 9.6979L28.6667 2.13542ZM11.2396 10.5833L13.4896 12.5C14.3543 13.2369 15.6457 13.2369 16.5104 12.5L18.7604 10.5833L27.4687 17.3333H2.53125L11.2396 10.5833Z" fill="#1A1A1A"/> 690 </svg> 691 </i> 692 <p class="contact_title">Email</p> 693 <a href="/cdn-cgi/l/email-protection#ea80858faa89988589828f9e988f8b868f999e8b9e8fc4898587" class="lp-link info-zone_contact_link link hyperlink-style-2"><span class="__cf_email__" data-cfemail="42282d270221302d212a27363027232e2731362336276c212d2f">[email protected]</span></a> 694 </div> 695 </div> 696 <div class="info-zone_contact type_user"> 697 <div class="info-zone_contact_cell"> 698 <i> 699 <svg width="30" height="25" viewB
699ox="0 0 30 25" fill="none" xmlns="http://www.w3.org/2000/svg"> 700 <path fill-rule="evenodd" clip-rule="evenodd" d="M10.7964 8.1207H19.2036V8.7279C19.2036 10.8195 20.9082 12.5259 23.001 12.5259H24.741L25.2852 20.7051C25.3776 22.1235 24.2868 23.2719 22.8822 23.2719H7.0032C5.5944 23.2719 4.5084 22.1085 4.6002 20.7039C4.782 17.9895 4.9152 15.2313 5.154 12.5265H6.9996C9.0918 12.5265 10.797 10.8207 10.797 8.7285V8.1207H10.7964ZM11.46 16.5807C11.46 14.6565 13.0188 13.0977 14.943 13.0977C16.8666 13.0977 18.4254 14.6571 18.4254 16.5807C18.4254 18.5055 16.8678 20.0631 14.943 20.0631C13.02 20.0637 11.46 18.5043 11.46 16.5807ZM14.943 12.0381C12.4344 12.0381 10.4004 14.0721 10.4004 16.5807C10.4004 19.0887 12.435 21.1233 14.943 21.1233C17.4486 21.1233 19.485 19.0869 19.485 16.5807C19.485 14.0727 17.451 12.0381 14.943 12.0381ZM9.0846 4.8363C8.22 4.8363 7.512 5.5443 7.512 6.4089V8.7285C7.512 9.0093 7.2804 9.2415 6.999 9.2415H1.5726C1.2906 9.2415 1.0596 9.0111 1.0596 8.7285V6.9285C1.0596 6.4797 1.1628 6.0945 1.3902 5.7069C1.896 4.8465 2.7294 4.1013 3.795 3.4749C9.279 0.2517 20.7192 0.2523 26.2044 3.4749C27.2706 4.1013 28.104 4.8465 28.6098 5.7069C28.8354 6.0921 28.9398 6.4815 28.9398 6.9285V8.7285C28.9398 9.0111 28.71 9.2415 28.4268 9.2415H23.0004C22.719 9.2415 22.4874 9.0093 22.4874 8.7285V6.4089C22.4874 5.5425 21.7806 4.8363 20.9148 4.8363H9.0846ZM8.571 6.4089C8.571 6.1263 8.8026 5.8965 9.0846 5.8965H20.9154C21.1968 5.8965 21.429 6.1275 21.429 6.4089V8.7285C21.429 9.5943 22.1352 10.3017 23.001 10.3017H28.4274C29.292 10.3017 30 9.5931 30 8.7285V6.9285C30 6.2835 29.8464 5.7291 29.5206 5.1729C28.9188 4.1493 27.9564 3.2799 26.7384 2.5641C20.9214 -0.8547 9.0798 -0.8547 3.2622 2.5641C2.0436 3.2799 1.0812 4.1487 0.48 5.1729C0.153 5.7291 0 6.2835 0 6.9279V8.7279C0 9.5925 0.7092 10.3011 1.5726 10.3011H6.999C7.8648 10.3011 8.571 9.5937 8.571 8.7279V6.4089ZM9.7368 7.5915V8.7285C9.7368 10.2387 8.5092 11.4669 6.999 11.4669H4.6686C4.3914 11.4669 4.164 11.6799 4.1412 11.9511C3.8892 14.8347 3.7386 17.7435 3.5448 20.6331C3.4116 22.6425 4.989 24.3315 7.0032 24.3315H22.8822C24.882 24.3315 26.475 22.6575 26.3406 20.6343L25.7622 11.9607C25.7436 11.6811 25.5102 11.4675 25.2342 11.4675L23.001 11.4663C21.4902 11.4663 20.2632 10.2375 20.2632 8.7279V7.5909C20.2632 7.2981 20.0262 7.0611 19.7334 7.0611H10.2666C9.9738 7.0611 9.7368 7.2987 9.7368 7.5915Z" fill="#1A1A1A"/> 701 </svg> 702 </i> 703 <p class="contact_title">Phone</p> 704 <a href="tel:(404) 431-9974" class="info-zone_contact_link hvr_animation link link--white hyperlink-style-2">(404) 431-9974</a> 705 </div> 706 </div> 707 <div class="info-zone_contact"> 708 <div class="info-zone_contact_cell"> 709 <i> 710 <svg width="31" height="30" viewBox="0 0 31 30" fill="none" xmlns="http://www.w3.org/2000/svg"> 711 <path d="M29.9821 6.49489C29.7931 6.35756 29.679 6.32046 29.4572 6.39228L20.298 9.41368L16.1952 8.03558L15.8172 9.41525L19.7644 10.7038V28.1462L9.89831 25.7069V22.1034H8.71438V25.7515L1.21616 28.2532V15.3945H0.0322266V29.2729C0.0322266 29.5077 0.130098 29.7279 0.321106 29.8645C0.445418 29.9541 0.585911 29.9999 0.735086 29.9999C0.814804 29.9999 0.890971 29.9868 0.967926 29.96L9.48433 27.029L20.1792 29.7887C20.3224 29.8254 20.4751 29.8171 20.6152 29.7654L29.8104 26.2235C30.0942 26.1177 30.0251 25.8466 30.0251 25.5431V7.08291C30.0251 6.85086 30.17 6.63144 29.9821 6.49489ZM28.8412 25.0388L20.9483 28.0361V10.7065L28.8412 8.08649V25.0388Z" fill="#1A1A1A"/> 712 <path d="M6.57515 19.1142C6.6671 19.422 6.95006 19.6323 7.2713 19.6323C7.59215 19.6323 7.87511 19.422 7.96746 19.1142C8.67742 16.7514 10.0393 15.2447 11.3559 13.788C12.9944 11.9747 14.5422 10.2615 14.5422 7.2717C14.5422 3.39788 11.1451 0 7.2713 0C3.39827 0 0 3.39748 0 7.2717C0 10.2615 1.54819 11.9747 3.18674 13.788C4.50328 15.2447 5.86479 16.7514 6.57515 19.1142ZM7.2713 1.45426C10.316 1.45426 13.0883 4.22663 13.0883 7.2717C13.0883 9.70191 11.7852 11.1435 10.2769 12.8121C9.2461 13.9534 8.10992 15.2096 7.2713 16.9199C6.43229 15.2096 5.29651 13.953 4.2657 12.8121C2.75698 11.1432 1.45426 9.70191 1.45426 7.2717C1.45426 4.22663 4.22663 1.45426 7.2713 1.45426Z" fill="#1A1A1A"/> 713 <path d="M7.26193 10.1616C8.8705 10.1616 10.1795 8.86084 10.1795 7.26175C10.1795 5.66305 8.87089 4.3623 7.26193 4.3623C5.65297 4.3623 4.34473 5.66305 4.34473 7.26175C4.34512 8.86084 5.65336 10.1616 7.26193 10.1616ZM7.26193 5.81657C8.06898 5.81657 8.72527 6.46536 8.72527 7.26175C8.72527 8.05932 8.06898 8.70733 7.26193 8.70733C6.45528 8.70733 5.79899 8.05893 5.79899 7.26175C5.79899 6.46536 6.45528 5.81657 7.26193 5.81657Z" fill="#1A1A1A"/> 714 </svg> 715 </i> 716 <p class="info-wrap-contact_title">Address</p> 717 <p class="info-zone_contact_link pre-line">1382 Scott Blvd, Unit B 718 Decatur, GA 30030</p> 719 </div> 720 </div> 721 <div class="info-zone_contact"> 722 <div class="info-zone_contact_cell"> 723 <p class="pre-line"><style>* { box-sizing: border-box; } body {margin: 0;}ul{list-style:inherit;}</style><div></div></p> 724 </div> 725 </div> 726 <ul class="lp-socials social_icons-style-2 socials socials--grey socials_zone footer__c
726ontact-column"> 727 728 <li> 729 <a 730 href="https://www.facebook.com/crochetrealtygroup/" 731 class="lp-socials__link socials__item wow fadeInUp socials__link" 732 data-wow-delay="0s" 733 target="_blank" 734 aria-label="FACEBOOK" 735 > 736 <span class="lp-i lp-i--facebook" aria-hidden="true"></span> 737 </a> 738 </li> 739 <li> 740 <a 741 href="https://www.instagram.com/crochetrealtygroup/" 742 class="lp-socials__link socials__item wow fadeInUp socials__link" 743 data-wow-delay="0.1s" 744 target="_blank" 745 aria-label="INSTAGRAM" 746 > 747 <span class="lp-i lp-i--instagram" aria-hidden="true"></span> 748 </a> 749 </li> 750 <li> 751 <a 752 href="https://www.linkedin.com/company/crochet-realty-group/" 753 class="lp-socials__link socials__item wow fadeInUp socials__link" 754 data-wow-delay="0.2s" 755 target="_blank" 756 aria-label="LINKEDIN" 757 > 758 <span class="lp-i lp-i--linkedin" aria-hidden="true"></span> 759 </a> 760 </li> 761 <li> 762 <a 763 href="https://www.google.com/search?q=Joe+Crochet+realtotr&sca_esv=600539231&source=hp&ei=AOmuZfKwBLDAkPIP6PagaA&iflsig=ANes7DEAAAAAZa73EKSoYnjn_V_yXvVWXtOoDpYzDbxh&ved=0ahUKEwjysLXWgvKDAxUwIEQIHWg7CA0Q4dUDCA8&uact=5&oq=Joe+Crochet+realtotr&gs_lp=Egdnd3Mtd2l6IhRKb2UgQ3JvY2hldCByZWFsdG90cjILEC4YgAQYxwEYrwFItBZQAFiQFXABeACQAQGYAegCoAG2EKoBBTEuMy02uAEDyAEA-AEC-AEBwgIFEAAYgATCAgYQABgWGB7CAgUQIRigAQ&sclient=gws-wiz#ip=1&lrd=0x88f507c5c9e2af89:0x75361851023bd509,1,,,," 764 class="lp-socials__link socials__item wow fadeInUp socials__link" 765 data-wow-delay="0.3s" 766 target="_blank" 767 aria-label="GOOGLE" 768 > 769 <span class="lp-i lp-i--google" aria-hidden="true"></span> 770 </a> 771 </li> 772 </ul> </div> 773 </div> 774 <div class="section-message"> 775 <form data-type="contact-form"> 776 <h2>Submit a Message</h2> 777 <div class="h-pot"> 778 <label for="-middleName">Middle Name</label> 779 <input id="-middleName" name="middleName" value="" autocomplete="off" tabindex="-1"> 780 </div> 781 782 783 <div class="lp-input-group"> 784 <label for="prod-name" class="lp-label">Name</label> 785 <input id="prod-name" name="name" value="" required="" class="lp-input lp-input--light"> 786 </div> 787 <div class="lp-input-group"> 788 <label for="prod-email" class="lp-label">Email</label> 789 <input id="prod-email" type="email" name="email" value="" required="" class="lp-in
789put lp-input--light"> 790 </div> 791 <div class="lp-input-group"> 792 <label for="prod-phone" class="lp-label">Phone</label> 793 <input id="prod-phone" type="tel" name="phoneNumber" value="" required="" class="lp-input lp-input--light"> 794 </div> 795 <div class="lp-input-group m16"> 796 <label for="prod-message" class="lp-label">Message</label> 797 <textarea id="prod-message" name="message" value="" required="" class="lp-input"></textarea> 798 </div> 799 800 <div class="lp-disclaimer"> <label style='display: none;' for='-termsAccepted'>Opt In/Disclaimer Consent:</label> 801 <label class='lp-tcr-content'> 802 <span class='lp-tcr-checkbox'> 803 <input 804 type='checkbox' 805 id='-termsAccepted' 806 name='termsAccepted' 807 oninvalid="this.setCustomValidity('Please accept the terms and conditions')" 808 oninput="this.setCustomValidity('')" 809 required 810 /></span> 811 <span class='lp-tcr-message'> 812 813 I agree to be contacted by 814 Crochet Real Estate 815 via call, email, and text for real estate services. To opt out, you can reply 'stop' at any time or reply 'help' for assistance. 816 You can also click the unsubscribe link in the emails. Message and data rates may apply. Message frequency may vary. 817 <a href='/terms-and-conditions' target='_blank'>Privacy Policy</a>. 818 </span> 819 </label> 820 821 </div> 822 823 <input style="display: none;" type="text" name="source" value="CONTACT_INQUIRY" /> 824 825 826 <button type="submit" class="submitButton lp-btn button-style-2"> 827 <span class="label-initial">Submit</span> 828 <span class="label-loading">Submitting</span> 829 <span class="label-success">Submitted</span> 830 <span class="submit-icon lp-i lp-i--circle-notch lp-i--spin"></span> 831 </button> 832 <p class="success-message success hide"> 833 Message sent successfully! 834 </p> 835 </form> 836 837 838 </div> 839 </div> 840 </div> 841 842 </div> 843 <button class="close lp-close" type="button" aria-label="close modal"> 844 <span class="lp-close-icon" aria-hidden="true"></span> 845 </button> 846 </div> 847 <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;"> 848 <style> 849 #qualifying-questions-modal .custom-select-toggle { 850 border: 1px solid #848484; 851 border-radius: 8px; 852 padding: 12px 16px; 853 } 854 855 #qualifying-questions-modal .custom-select-toggle.is-placeholder { 856 color: #848484; 857 } 858 859 #qualifying-questions-modal #qualifying-questions-modal-phoneNumber::placeholder { 860 color: #848484; 861 opacity: 1; 862 } 863 864 #qualifying-questions-modal .disclaimer-more { 865 display: none; 866 } 867 868 #qualifying-questions-modal #qualifying-questions-modal-disclaimer-text:not(.collapsed) .disclaimer-more { 869 display: inline; 870 } 871 872 #qualifying-questions-modal #qualifying-questions-modal-disclaimer-text:not(.collapsed) .disclaimer-ellipsis { 873 display: none; 874 } 875 </style>
vendor: 119 bytes, lines 875-876
875 876 <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
876<script> 877 function toggleDisclaimerQualifyingQuestionsModal() { 878 const disclaimerText = document.getElementById('qualifying-questions-modal-disclaimer-text'); 879 const toggleButton = document.getElementById('qualifying-questions-modal-toggle-disclaimer'); 880 881 if (disclaimerText.classList.contains('collapsed')) { 882 disclaimerText.classList.remove('collapsed'); 883 toggleButton.textContent = 'Read less'; 884 toggleButton.setAttribute('aria-expanded', 'true'); 885 } else { 886 disclaimerText.classList.add('collapsed'); 887 toggleButton.textContent = 'Read more'; 888 toggleButton.setAttribute('aria-expanded', 'false'); 889 } 890 } 891 </script>
891 892 <div style="max-width: 400px; width: 95%; margin: 0 auto;"> 893 <div style="background: #fff; border: none; border-radius: 16px; color: black; box-shadow: none; position: relative;"> 894 <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;"> 895 <span aria-hidden="true">×</span> 896 </button> 897 <div style="padding: 40px 30px 32px;"> 898 <div style="text-align: left; margin-bottom: 32px;"> 899 <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;"> 900 Thanks, please provide more information to help serve you 901 </h2> 902 </div> 903 <form id="qualifying-questions-modal-form" data-type="contact-form"> 904 <input type="hidden" name="source" value="PROFILE_UPDATE" /> 905 <input type="hidden" name="email" value="" id="qualifying-questions-modal-email" /> 906 <input type="hidden" name="triggerSource" id="qualifying-questions-modal-triggerSource" value="" /> 907 <label for="qualifying-questions-modal-email" style="display:none;"> 908 Email 909 </label> 910 <label for="qualifying-questions-modal-triggerSource" style="display:none;"> 911 Trigger Source 912 </label> 913 914 <div style="margin-bottom: 20px;"> 915 <label for="qualifying-questions-modal-phoneNumber" style="display:none;"> 916 Phone Number 917 </label> 918 <input 919 type="tel" 920 id="qualifying-questions-modal-phoneNumber" 921 name="phoneNumber" 922 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;" 923 pattern="^\+?1?[-.\s]?\(?[0-9]{3}\)?[-.\s]?[0-9]{3}[-.\s]?[0-9]{4}$" 924 required 925 placeholder="Phone" 926 aria-label="Phone Number" 927 inputmode="tel" 928 autocomplete="tel" 929 onfocus="this.style.borderColor='black';" 930 onblur="this.style.borderColor='#848484';" 931 /> 932 </div> 933 934 <div style="margin-bottom: 20px;"> 935 <label for="qualifying-questions-modal-interest" style="display:none;"> 936 Interest 937 </label> 938 <select 939 id="qualifying-questions-modal-interest" 940 name="interest" 941 required 942 data-label="Interest" 943 aria-label="Interest" 944 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;" 945 onfocus="this.style.borderColor='black'; this.style.color='black';" 946 onblur="this.style.borderColor='#848484'; if(this.value === '') this.style.color='#848484'; else this.style.color='black';" 947 > 948 <option value="" style="background: #fff; color: #848484;" disabled selected>Interested in...</option> 949 <option value="Selling & Buying" style="background: #fff; color: black;">Selling & Buying</option> 950 <option value="Selling" style="background: #fff; color: black;">Selling</option> 951 <option value="Buying" style="background: #fff; color: black;">Buying</option> 952 <option value="Renting" style="background: #fff; color: black;">Renting</option> 953 <option value="Other" style="background: #fff; color: black;">Other</option> 954 </select> 955 </div> 956 957 <div style="margin-bottom: 32px; font-size: 12px; line-height: 1.2;"> 958 <label style='display: none;' for='qualifying-questions-modal-qualifying-questions-termsAccepted'>Opt In/Disclaimer Consent:</label> 959 <label class='lp-tcr-content'>
960 <span class='lp-tcr-checkbox'> 961 <input 962 type='checkbox' 963 id='qualifying-questions-modal-qualifying-questions-termsAccepted' 964 name='termsAccepted' 965 aria-describedby='qualifying-questions-modal-disclaimer-text' 966 oninvalid="this.setCustomValidity('Please accept the terms and conditions')" 967 oninput="this.setCustomValidity('')" 968 required 969 /></span> 970 <span class='lp-tcr-message'> 971 <div id="qualifying-questions-modal-disclaimer-text" class="collapsed" style="color: #848484;"> 972 973 I agree to be contacted by 974 <strong>Crochet Real Estate</strong> 975 via call, email, and text <span class="disclaimer-more">for real estate services. 976 To opt out, you can reply 'stop' at any time or reply 'help' for assistance. 977 You can also click the unsubscribe link in the emails. 978 Message and data rates may apply. Message frequency may vary.</span> 979 <span class="disclaimer-ellipsis">...</span> 980 <a href='/terms-and-conditions' target='_blank' rel='noopener noreferrer' style='text-decoration: underline;'>Privacy Policy</a>. 981 </div> 982 <button 983 id="qualifying-questions-modal-toggle-disclaimer" 984 type="button" 985 style="background: none; border: none; color: #848484; font-size: inherit; font-weight: bold; padding: 0; margin-top: 4px; cursor: pointer;" 986 aria-expanded="false" 987 onclick="toggleDisclaimerQualifyingQuestionsModal()" 988 > 989 Read more 990 </button> 991 </span> 992 </label> 993 </div> 994 995 <div> 996 <button 997 type="submit" 998 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;" 999 onmouseover="this.style.background='transparent'; this.style.color='black';" 1000 onmouseout="this.style.background='black'; this.style.color='white';" 1001 > 1002 Submit 1003 </button> 1004 </div> 1005 </form> 1006 </div> 1007 </div> 1008 </div> 1009 </div> 1010 1011
1011<script> 1012 (function() { 1013 var lazyVideos = [].slice.call(document.querySelectorAll("video.lazy")); 1014 1015 if ("IntersectionObserver" in window && lazyVideos.length > 0) { 1016 var lazyVideoObserver = new IntersectionObserver(function(entries, observer) { 1017 entries.forEach(function(video) { 1018 if (video.isIntersecting) { 1019 for (var source in video.target.children) { 1020 var videoSource = video.target.children[source]; 1021 if (typeof videoSource.tagName === "string" && videoSource.tagName === "SOURCE") { 1022 videoSource.src = videoSource.dataset.src; 1023 } 1024 } 1025 1026 video.target.load(); 1027 video.target.classList.remove("lazy"); 1028 lazyVideoObserver.unobserve(video.target); 1029 } 1030 }); 1031 }); 1032 1033 lazyVideos.forEach(function(lazyVideo) { 1034 lazyVideoObserver.observe(lazyVideo); 1035 }); 1036 } 1037 })(); 1038 </script>
1038 1039 1040 <!-- Global site tag (gtag.js) - Google Analytics --> 1041
1041<script defer src="https://www.googletagmanager.com/gtag/js"></script>
1041 1042 1043 <!-- Google Tag Manager --> 1044
1044<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 1045 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 1046 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.defer=true;j.async=false;j.src= 1047 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 1048 })(window,document,'script','dataLayer','GTM-T9SFQGHZ');</script>
1048 1049 <!-- End Google Tag Manager --> 1050 1051 1052 <!-- LP Tracker (divolte.js) - LP Divolte --> 1053
1053<script>window.divolteLp=window.divolteLp||function(){(divolteLp.q=divolteLp.q||[]).push(arguments)}</script>
1053 1054 <!-- LP Tracker (eventBus) - LP EventBus --> 1055
1055<script>window.eventBusLp=window.eventBusLp||function(){(eventBusLp.q=eventBusLp.q||[]).push(arguments)}</script>
1055 1056 1057
1057<script> 1058 window.dataLayer = window.dataLayer || []; 1059 document.sendGoogleTagManagerEvent = function() { 1060 /* Honor GPC-enabled browsers and prevent GTM event if GPC is enabled. More details: https://global-privacy-control.glitch.me/ */ 1061 if (window.navigator.globalPrivacyControl) { 1062 return; 1063 } 1064 1065 dataLayer.push(arguments); 1066 } 1067 1068 document.sendGoogleTagManagerEvent('js', new Date()); 1069 document.sendGoogleTagManagerEvent('config', 'G-GMRSLY0VL4', { page: location.pathname, location: location.href }); 1070 document.sendGoogleTagManagerEvent('config', 'UA-250082834-27', { page: location.pathname, location: location.href }); 1071 document.sendGoogleTagManagerEvent('config', 'G-ZSN33R3BC3', { page: location.pathname, location: location.href }); 1072 document.sendGoogleAnalyticsEvent = function(googleEvent) { 1073 document.sendGoogleTagManagerEvent('event', googleEvent.eventAction || googleEvent.hitType, { 1074 event_category: googleEvent.eventCategory, 1075 event_label: googleEvent.eventLabel, 1076 value: googleEvent.eventValue, 1077 page: googleEvent.page, 1078 location: googleEvent.location 1079 }) 1080 }; 1081 1082 document.addEventListener("DOMContentLoaded", function() { 1083 (function() { 1084 //If the page has an element with ID of auto-year-update the element will be populated with the current year. 1085 var date = new Date(); 1086 var elements = document.getElementsByClassName('auto-year-update'); 1087 var i; 1088 for (i = 0; i < elements.length; i++) { 1089 elements[i].innerText = date.getFullYear(); 1090 } 1091 })(); 1092 if (window.divolteLp) { 1093 window.divolteLp('sendLpPageView', {}); 1094 } 1095 if (window.eventBusLp) { 1096 window.eventBusLp('sendLpPageView', {}); 1097 } 1098 }); 1099 </script>
1099 1100 1101 1102
1102<script> 1103 // Function to dynamically load a script 1104 function loadScript(url, callback) { 1105 var script = document.createElement('script'); 1106 script.type = 'text/javascript'; 1107 script.src = url; 1108 script.defer = true; 1109 script.async = true; 1110 script.onload = callback; 1111 document.head.appendChild(script); 1112 } 1113 1114 // Function to dynamically load CSS file 1115 function loadCSS(url) { 1116 var link = document.createElement("link"); 1117 link.rel = "stylesheet"; 1118 link.href = url; 1119 document.head.appendChild(link); 1120 } 1121 1122 // Global methods / variables that can be accessed by element js 1123 window.luxuryPresence = { 1124 libs: { 1125 loadJs: loadScript, 1126 loadCss: loadCSS, 1127 jsLibsMap: { 1128 paroller: { 1129 jsSrc: 'https://d1e1jt2fj4r8r.cloudfront.net/javascript/jquery.paroller.min.js', 1130 isLoaded: false, 1131 }, 1132 ionRangeSlider: { 1133 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/js/ion.rangeSlider.min.js', 1134 cssSrc: 'https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/css/ion.rangeSlider.min.css', 1135 isLoaded: false, 1136 requires: ['jquery'], 1137 }, 1138 splide: { 1139 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/splidejs/4.1.4/js/splide.min.js', 1140 cssSrc: 'https://cdnjs.cloudflare.com/ajax/libs/splidejs/4.1.4/css/splide-core.min.css', 1141 isLoaded: false, 1142 }, 1143 wow: { 1144 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/wow/1.1.2/wow.min.js', 1145 isLoaded: false, 1146 }, 1147 jquery: { 1148 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js', 1149 isLoaded: false, 1150 }, 1151 slick: { 1152 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick.min.js', 1153 isLoaded: false, 1154 requires: ['jquery'], 1155 }, 1156 libphonenumber: { 1157 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/libphonenumber-js/1.11.8/libphonenumber-js.min.js', 1158 isLoaded: false, 1159 }, 1160 }, 1161 }, 1162 }; 1163 </script>
1163 1164
1164<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>
1164 1165
1165<script defer src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.7.8/handlebars.min.js"></script>
1165 1166
1166<script defer src="https://cdn.jsdelivr.net/npm/[email protected]/dist/handlebars-intl.min.js"></script>
1166 1167
1167<script defer src="https://cdnjs.cloudflare.com/ajax/libs/superagent/4.1.0/superagent.min.js"></script>
1167 1168
1168<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>
1168 1169
1169<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>
1169 1170
1170<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>
1170 1171 1172 <!-- GOOGLE TRANSLATE SCRIPT --> 1173
1173<script> 1174 function googleTranslateElementInit() { 1175 // list of languages can be overridden by setting window.customLanguages in the head JS. example `window.customLanguages = 'en,de,fr,ro,sk,pl'` 1176 // Language codes can be taken from here https://cloud.google.com/translate/docs/languages 1177 const DEFAULT_LANGUAGES = 'en,es,zh-CN,zh-TW,tl,vi,ar,ko,ru,de,fr,hi,pt'; 1178 document.querySelectorAll('[data-type="TRANSLATE"]').forEach(function(translate){ 1179 translate.innerText = ''; 1180 new google.translate.TranslateElement({ 1181 pageLanguage: 'en', 1182 layout: google.translate.TranslateElement.InlineLayout.SIMPLE, 1183 includedLanguages: window.customLanguages || DEFAULT_LANGUAGES, 1184 }, translate); 1185 }); 1186 } 1187 </script>
1187 1188
1188<script defer src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>
1188 1189
1189<script defer src="https://accounts.google.com/gsi/intermediate"></script>
1189 1190 1191 <!-- GOOGLE TRANSLATE SCRIPT END--> 1192
1192<script> 1193 1194 // UI helpers 1195 (function () { 1196 1197 function getSideMenu () { 1198 return document.querySelector('body > div.sidemenu'); 1199 } 1200 1201 function sideMenuHide (instant) { 1202 var sideMenu = getSideMenu(); 1203 if (!sideMenu || !sideMenu.classList.contains('visible')) { 1204 return; 1205 } 1206 sideMenu.classList.remove('visible'); 1207 sideMenu.dispatchEvent(new CustomEvent('lpui-hide', { detail: { instant: !!instant } })); 1208 window.dispatchEvent(new CustomEvent('lpui-sidemenu-hide', { detail: {instant: !!instant} })); 1209 } 1210 1211 function sideMenuShow () { 1212 var sideMenu = getSideMenu(); 1213 if (!sideMenu || sideMenu.classList.contains('visible')) { 1214 return; 1215 } 1216 sideMenu.classList.add('visible'); 1217 sideMenu.dispatchEvent(new Event('lpui-show')); 1218 window.dispatchEvent(new Event('lpui-sidemenu-show')); 1219 } 1220 1221 function sideMenuToggle () { 1222 var sideMenu = getSideMenu(); 1223 if (!sideMenu) { 1224 return; 1225 } 1226 var isSideMenuVisible = sideMenu.classList.contains('visible'); 1227 if (isSideMenuVisible) { 1228 sideMenuHide(); 1229 } else { 1230 sideMenuShow(); 1231 } 1232 } 1233 1234 var scrollLockRequests = {}; 1235 window.__debug_scrollLockRequests = scrollLockRequests; 1236 var hideScrollStyles = ''+ 1237 'body {'+ 1238 'overflow: hidden;' + 1239 '}'; 1240 var hideScrollId = 'hide-body-scroll-style'; 1241 1242 function scrollLock () { 1243 var style = document.createElement('style'); 1244 style.id = hideScrollId; 1245 style.textContent = hideScrollStyles; 1246 document.head.appendChild(style); 1247 window.dispatchEvent(new Event('lpui-scroll-locked')); 1248 } 1249 1250 function scrollUnlock () { 1251 document.getElementById(hideScrollId)?.remove(); 1252 window.dispatchEvent(new Event('lpui-scroll-unlocked')); 1253 } 1254 1255 function requestScrollLock (lockId) { 1256 var wasLocked = Object.keys(scrollLockRequests).length > 0; 1257 scrollLockRequests[lockId || '__anonymous_lock'] = true; 1258 if (!wasLocked) { 1259 scrollLock(); 1260 } 1261 } 1262 1263 function releaseScrollLock (lockId) { 1264 if (lockId) { 1265 delete scrollLockRequests[lockId]; 1266 if (!Object.keys(scrollLockRequests).length) { 1267 scrollUnlock(); 1268 } 1269 } else { 1270 scrollLockRequests = {}; 1271 window.__debug_scrollLockRequests = scrollLockRequests; 1272 scrollUnlock(); 1273 } 1274 } 1275 1276 function showModal (modalId, options) { 1277 var modal = document.getElementById(modalId); 1278 if (!modal) { 1279 return; 1280 } 1281 1282 if (!modal.classList.contains('visible')) { 1283 modal.classList.add('visible'); 1284 if (options && options.scrollLock) { 1285 window.lpUI.requestScrollLock(modalId); 1286 } 1287 modal.dispatchEvent(new Event('lpui-show')); 1288 window.dispatchEvent(new CustomEvent('lpui-modal-show', { detail: { id: modalId } })); 1289 } 1290 1291 const visibleModals = document.querySelectorAll('.modal.visible'); 1292 1293 if (visibleModals.length > 1) { 1294 1295 const maxZIndex = Array.from(visibleModals).reduce((maxZIndex, modal) => { 1296 const zIndex = window.getComputedStyle(modal).zIndex; 1297 const parsedZIndex = zIndex !== 'auto' ? parseInt(zIndex) : 0; 1298 return Math.max(maxZIndex, parsedZIndex); 1299 }, 0); 1300 1301 modal.style.zIndex = maxZIndex + 1; 1302 } 1303 1304 } 1305 1306 function _hideModal (modalEl) { 1307 if (!modalEl) { 1308 return; 1309 } 1310 if (!modalEl.classList.contains('visible')) { 1311 return; 1312 } 1313 modalEl.classList.remove('visible'); 1314 modalEl.style.zIndex = '';
1315 modalEl.dispatchEvent(new Event('lpui-hide')); 1316 var modalId = modalEl.getAttribute('id'); 1317 if (modalId) { 1318 window.lpUI.releaseScrollLock(modalId); 1319 window.dispatchEvent(new CustomEvent('lpui-modal-hide', { detail: { id: modalId } })); 1320 } 1321 } 1322 1323 function hideModal (modalId) { 1324 _hideModal(document.getElementById(modalId)); 1325 } 1326 1327 function hideClosestModal (el) { 1328 const modal = el?.closest('.modal'); 1329 if (!modal) { 1330 return; 1331 } 1332 if (modal.classList) { 1333 _hideModal(modal); 1334 return; 1335 } 1336 if (modal.length && modal[0].classList) { 1337 _hideModal(modal[0]); 1338 } 1339 } 1340 1341 window.lpUI = { 1342 sideMenuHide: sideMenuHide, 1343 sideMenuShow: sideMenuShow, 1344 sideMenuToggle: sideMenuToggle, 1345 requestScrollLock: requestScrollLock, 1346 releaseScrollLock: releaseScrollLock, 1347 showModal: showModal, 1348 hideModal: hideModal, 1349 hideClosestModal: hideClosestModal 1350 } 1351 })(); 1352 1353 var stringifyPrimitive = function(v) { 1354 switch (typeof v) { 1355 case 'string': 1356 return v; 1357 1358 case 'boolean': 1359 return v ? 'true' : 'false'; 1360 1361 case 'number': 1362 return isFinite(v) ? v : ''; 1363 1364 default: 1365 return ''; 1366 } 1367 }; 1368 1369 function objectToQuerystring(obj, sep, eq, name) { 1370 // https://github.com/Gozala/querystring/blob/master/encode.js 1371 sep = sep || '&'; 1372 eq = eq || '='; 1373 if (obj === null) { 1374 obj = undefined; 1375 } 1376 1377 if (typeof obj === 'object') { 1378 return Object.keys(obj).map(function(k) { 1379 var ks = encodeURIComponent(stringifyPrimitive(k)) + eq; 1380 if (Array.isArray(obj[k])) { 1381 return obj[k].map(function(v) { 1382 return ks + encodeURIComponent(stringifyPrimitive(v)); 1383 }).join(sep); 1384 } else { 1385 return ks + encodeURIComponent(stringifyPrimitive(obj[k])); 1386 } 1387 }).filter(Boolean).join(sep); 1388 1389 } 1390 1391 if (!name) return ''; 1392 return encodeURIComponent(stringifyPrimitive(name)) + eq + 1393 encodeURIComponent(stringifyPrimitive(obj)); 1394 } 1395 1396 function getPath(url, options) { 1397 var parser = document.createElement('a'); 1398 parser.href = url || ''; 1399 var path = parser.pathname || ''; 1400 if (path[0] !== '/') { 1401 // IE does not return path starting with a slash 1402 path = '/' + path; 1403 } 1404 1405 if (options && options.queryString) { 1406 path += parser.search; 1407 } 1408 1409 return path; 1410 } 1411 1412 function getMLSAutocomplete(keyword) { 1413 var searchURL = window.location.protocol + '//' + window.location.hostname + '/home-search/auto_complete'; 1414 var query = { 1415 kind: 'listings', 1416 query: keyword 1417 }; 1418 1419 return superagent 1420 .get(searchURL) 1421 .query(query) 1422 .then(function(res) { 1423 var data = res.body || []; 1424 // Array of listing_auto_complete documents: id, display_address, city, state, 1425 // price, sold_price, status, status_modified_at, photo_urls (array of URLs). 1426 1427 return data; 1428 }); 1429 } 1430 1431 function getMLSAutocompleteWithFilters(keyword, filters = {}) { 1432 var searchURL = window.location.protocol + '//' + window.location.hostname + '/home-search/auto_complete'; 1433 1434 return superagent 1435 .get(searchURL) 1436 .query({ kind: 'listings', query: keyword, ...filters }) 1437 .then(function(res) { 1438 // Same response shape as getMLSAutocomplete. 1439 return res.body || []; 1440 }); 1441 } 1442 1443 function makeMlsLink(data) { 1444 // Code Dupe from utils/googlePlace 1445 // mapping of google data type to mls data type 1446 var mapping = { 1447 neighborhood: 'neighborhood', 1448 locality: 'place', 1449 administrative_area_level_2: 'county', 1450 administrative_area_level_1: 'state', 1451 postal_code: 'postalcode', 1452 }; 1453 1454 function _filterTypes(types) { 1455 return types.filter(function(type) { return type !== 'political' }); 1456 } 1457 1458 if (!data || !Object.keys(data).length) { 1459 return '/home-search/listings'; 1460 } 1461 1462 var newData = {};
1463 _filterTypes(data.types).forEach(function(type) { 1464 if (mapping[type]) { 1465 newData.search_type = mapping[type]; 1466 } 1467 }); 1468 newData.omnibox = data.formatted_address; 1469 data.address_components.forEach(function(component) { 1470 _filterTypes(component.types).forEach(function(type) { 1471 if (mapping[type]) { 1472 newData[mapping[type]] = component.long_name; 1473 } 1474 }); 1475 }); 1476 var bounds = data.geometry.bounds; 1477 var convertedData = Object.assign(bounds, newData); 1478 1479 return '/home-search/listings?' + objectToQuerystring(convertedData); 1480 } 1481 1482 function debounce(func, wait) { 1483 let timeout; 1484 return function(...args) { 1485 const context = this; 1486 clearTimeout(timeout); 1487 timeout = setTimeout(() => func.apply(context, args), wait) 1488 } 1489 } 1490 1491 // Global methods / variables that can be accessed by element js 1492 window.luxuryPresence = { 1493 ...window.luxuryPresence, 1494 defaults: { 1495 companyId: '32443cf2-4f8c-4e0f-8bb4-a310afb42f31', 1496 apiGatewayUrl: '/api-gw', 1497 routerUrl: '/api-nv', 1498 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\
1498n }\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
1498x\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"}, 1499 propertyPlaceholderImage: {"id":"90126a92-ece3-496c-99e2-a37b0c55a32b","alt":null,"bytes":95749,"width":1500,"format":"jpeg","height":1500,"pngUrl":null,"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/f6bd547a-a6c7-4af4-b142-77a6a2ad1e60","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/f6bd547a-a6c7-4af4-b142-77a6a2ad1e60","authorUrl":null,"companyId":"32443cf2-4f8c-4e0f-8bb4-a310afb42f31","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/f6bd547a-a6c7-4af4-b142-77a6a2ad1e60","sourceUrl":null,"xLargeUrl":"https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/f6bd547a-a6c7-4af4-b142-77a6a2ad1e60","__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/f6bd547a-a6c7-4af4-b142-77a6a2ad1e60","description":null,"displayName":"cre","originalUrl":"https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/f6bd547a-a6c7-4af4-b142-77a6a2ad1e60","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/f6bd547a-a6c7-4af4-b142-77a6a2ad1e60","originalFileName":"CRE","cloudinaryPublicId":"f6bd547a-a6c7-4af4-b142-77a6a2ad1e60"} 1500 }, 1501 objectToQuerystring: objectToQuerystring, 1502 getPath: getPath, 1503 getMLSAutocomplete: getMLSAutocomplete, 1504 getMLSAutocompleteWithFilters: getMLSAutocompleteWithFilters, 1505 makeMlsLink: makeMlsLink, 1506 debounce: debounce, 1507 }; 1508 1509 var wowOffset = 100; 1510 </script>
1510 1511
1511<script> 1512 (()=>{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));
1512if(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)];
1512let 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" ";if(/^<\/p\s*>$/.test(s)){h.lastIndex=r;let t=h.exec(e);if(t&&"<"===t[0][0])return" "}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;
1512r&&(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())),`
1512<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}
1512return 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
1512ontact 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
1512ourceResource,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(()=>
1512o.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=` 1513 query PropertyDisclaimers($input: PropertyDisclaimersInput!) { 1514 propertyDisclaimers(input: $input) { 1515 feedId 1516 listingId 1517 resolvedFromListing 1518 listingCardAttribution 1519 listingDetailCourtesy 1520 listingDetailFooter 1521 logo 1522 } 1523 } 1524`;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 >
1524 .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=)
1524)|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=` 1525 <div id="modal-${r.id}" class="modal visible"> 1526 <div class="modal-content"> 1527 <div class="lightbox-video"> 1528 <div class="video-player"> 1529 <div class="embed-container"> 1530 ${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>`} 1531 </div> 1532 </div> 1533 </div> 1534 </div> 1535 <button class="close lp-close" type="button" aria-label="close modal"><span class="lp-close-icon" aria-hidden="true"></span></button> 1536 </div> 1537 `;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
1537=>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");
1537let 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
1537URIComponent(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=` 1538 <button class="lp-lightbox__close" aria-label="close modal"></button> 1539 <div class="lp-lightbox__content"> 1540 <div class="lp-lightbox__carousel splide" role="group" aria-label="Image Gallery"> 1541 <div class="splide__arrows"> 1542 <button class="splide__arrow splide__arrow--prev lp-lightbox-arrow lp-lightbox-arrow--prev"></button> 1543 <button class="splide__arrow splide__arrow--next lp-lightbox-arrow lp-lightbox-arrow--next"></button> 1544 </div> 1545 <div class="splide__track"> 1546 <ul class="splide__list"></ul> 1547 </div> 1548 </div> 1549 </div> 1550 `,"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
1550h(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=` 1551 <button class="lp-lightbox__close" aria-label="close modal"></button> 1552 <div class="lp-lightbox__content"> 1553 <div class="lp-lightbox__carousel"></div> 1554 </div> 1555 `,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"}
1555)),(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"];
1555return 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=` 1556 query { 1557 validSession { 1558 success 1559 } 1560 } 1561 `;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","
1561spaceTypeIds","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];
1561if("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})}})(); 1562//# sourceMappingURL=lp-sdk.js.map 1563 1564 </script>
1564 1565 1566
1566<script> 1567 var lpGlobalInitialized = false; 1568 1569 function lpGlobalInit () { 1570 if (lpGlobalInitialized) { 1571 return; 1572 } 1573 lpGlobalInitialized = true; 1574 // Initialize wow animation plugin only according to turbolinks 1575 var wow; 1576 if (window.WOW) { 1577 wow = new WOW({ 1578 animateClass: 'animated', 1579 offset: wowOffset, 1580 live: false, 1581 callback: function(box) {} 1582 }); 1583 } 1584 // Initialize handlebar helpers only once 1585 function handlebarsInit() { 1586 if (!window.Handlebars) { 1587 return; 1588 } 1589 HandlebarsIntl.registerWith(Handlebars); 1590 Handlebars.registerHelper(window.luxuryPresence.handlebarsHelpersFactory(Handlebars)); 1591 } 1592 1593 handlebarsInit(); 1594 1595 var modalContentUrl = "/modals.html"; 1596 const modalsContainer = document.getElementById('modals'); 1597 if (modalsContainer) { 1598 fetch(modalContentUrl).then(function(res) { 1599 if (!res.ok) { 1600 throw new Error(`HTTP error! Status: ${res.status}`); 1601 } 1602 return res.text(); 1603 }).then(function(resultText) { 1604 modalsContainer.innerHTML = resultText; 1605 1606 // now we need to execute all script elements 1607 Array.from(modalsContainer.getElementsByTagName('script')).forEach(function (s) { 1608 const script = document.createElement("script"); 1609 script.text = s.innerHTML; 1610 Array.from(s.attributes).forEach(function (a) { 1611 script.setAttribute(a.name, a.value); 1612 }) 1613 s.parentNode.replaceChild(script, s); 1614 }); 1615 1616 try { 1617 window.luxuryPresence.modals.initialize(window.luxuryPresence._modalIncludes); 1618 window.luxuryPresence.contactForms.initialize({ selector: '#modals' }); 1619 window.luxuryPresence.validation.initialize({ selector: '#modals' }); 1620 window.luxuryPresence.oauth.initialize({ 1621 googleSignOnEnabled: true, 1622 iframe: false }); 1623 } catch (e) { 1624 console.log(e); 1625 } 1626 document.querySelectorAll('.modals > .modal .close').forEach(closeModalBtn => { 1627 closeModalBtn.addEventListener('click', function() { 1628 window.lpUI.hideClosestModal(closeModalBtn); 1629 }); 1630 }); 1631 }).catch((e) => console.log(e)); 1632 } 1633 /* Initialize Luxury Presence SDK */ 1634 try { 1635 window.luxuryPresence.config.setCompany("32443cf2-4f8c-4e0f-8bb4-a310afb42f31", {}); 1636 window.luxuryPresence.config.setWebsite("db633698-1cbe-4d33-a362-b83e8348acd5", { 1637 myhomeDashboardEnabled: true, 1638 mlsEnabled: true, 1639 hstValuationRedirectEnabled: true, 1640 hvStepTwoCaptureEnabled: false 1641 }); 1642 const url = new URL(window.location.href); 1643 const shareId = url.searchParams.get('shareId'); 1644 window.luxuryPresence.config.setPage("f4ce7289-6823-4e67-9677-e72ed304f82c", { 1645 sourceResource: "", 1646 pageElementId: "", 1647 pageQueryVariables: {}, 1648 shareId: "", 1649 }); 1650 window.luxuryPresence.config.setWebsiteApiGatewayUrl("https://wgw.luxurypresence.com", {}); 1651 window.luxuryPresence.config.setBuyerSellerServiceUrl("https://bss.luxurypresence.com", {}); 1652 window.luxuryPresence.config.setDivolteServiceUrl("https://t.luxurypresence.com", {}); 1653 window.luxuryPresence.config.setEventBusUrl("https://cdn.luxurypresence.com/scripts/event-bus-js", {}); 1654 window.luxuryPresence.config.setEventBus({ 1655 enabled: true, 1656 apiKey: "phc_PMYT31xlmXBaTCwpIRx1v6RrpLVZIuP47N3mOT6KLnr", 1657 url: "https://p.luxurypresence.com", 1658 }); 1659 window.luxuryPresence.config.setTemplateId("0c2b9641-6f2a-40f2-a2e0-dabc022eb278", {}); 1660 window.luxuryPresence.config.setLeadIngesterUrl("https://leads.luxurypresence.com", {}); 1661 window.luxuryPresence.buttons.initialize({}); 1662 window.luxuryPresence.consent.initialize({ provider: 'lp-consent' }); 1663 window.luxuryPresence.contactForms.initialize({}); 1664 window.luxuryPresence.validation.initialize({}); 1665 window.luxuryPresence.expandSliders.initialize({}); 1666 window.luxuryPresence.oauth.initialize({ googleSignOnEnabled: true, iframe: false }); 1667 window.luxuryPresence.qualifyingQuestionsModal.initialize({ qualifyingQuestionsModalEnabled: true }); 1668 /* Optional: cached pages / older SDKs may not carry this controller */ 1669 window.luxuryPresence.currencyConversion?.initialize(); 1670 } catch (e) { 1671 console.log(e); 1672 } 1673 1674 /* Inject Section Specific Javascript */ 1675 try { 1676(function init(sectionDomId) { 1677 const disclaimerLabel = document.querySelector('#' + sectionDomId + ' .lp-tcr-content'); 1678 if (disclaimerLabel) { 1679 const input = disclaimerLabel.querySelector('input'); 1680 if (input) { 1681 input.setAttribute('id', `${sectionDomId}-termsAccepted`); 1682 input.value = 'true'; 1683 const label = document.createElement('label'); 1684 label.setAttribute('for', `${sectionDomId}-termsAccepted`); 1685 label.classList.add('lp-visually-hidden'); 1686 label.textContent = 'Opt in/Disclaimer Consent:'; 1687 disclaimerLabel.prepend(label); 1688 } 1689 } 1690 function setHttp(link) { 1691 if (link.search(/^http[s]?\:\/\/|\//) == -1) { 1692 link = 'https://' + link; 1693 } 1694 return link; 1695 } 1696 const socialLinks = document.querySelectorAll('#' + sectionDomId + ' .socials__link, #' + sectionDomId + ' .lp-socials__link'); 1697 socialLinks.forEach(linkElement => { 1698 const href = linkElement.getAttribute('href'); 1699 if (href) { 1700 linkElement.setAttribute('href', setHttp(href)); 1701 } 1702 }); 1703 const redirectLink = $('#' + sectionDomId + ' .redirect-link'); 1704 if (redirectLink.length) { 1705 const rawHref = setHttp(redirectLink.attr('href')); 1706 let formEvent; 1707 if (rawHref) { 1708 formEvent = redirectLink.data('redirect') ? 'formsubmitted' : 'reset'; 1709 $('#' + sectionDomId + ' .contact-form').find('form').on(formEvent, function () { 1710 redirectLink.attr('href', rawHref); 1711 redirectLink[0].click(); 1712 }); 1713 } 1714 } 1715})('modal-global-contact-us'); 1716} catch(e) { 1717console.log(e); 1718} 1719 1720 try { 1721(function init(sectionDomId) { 1722 const $section = $('#' + sectionDomId); 1723 const $hamburger = $section.find('.hamburger-component'); 1724 function onSideMenuShow() { 1725 if (!$hamburger.hasClass('active')) { 1726 $hamburger.addClass('active'); 1727 } 1728 } 1729 function onSideMenuHide() { 1730 $hamburger.removeClass('active'); 1731 } 1732 const $window = $(window); 1733 $window.on('lpui-sidemenu-show.lpui-auto-clean', onSideMenuShow); 1734 $window.on('lpui-sidemenu-hide.lpui-auto-clean', onSideMenuHide); 1735 const $subContainers = $section.find('.navigation__item.sub-nav-container'); 1736 $subContainers.hover(function () { 1737 $(this).find('.sub-nav').addClass('visible'); 1738 }, function () { 1739 $(this).find('.sub-nav').removeClass('visible'); 1740 }); 1741 $window.on('click.lpui-auto-clean', function () { 1742 $('.sub-nav-container.visible-dropdown').removeClass('visible-dropdown'); 1743 }); 1744 let fixedWidth = 0; 1745 const rightPad = 20; 1746 function fixSubsPosition() { 1747 const wWidth = window.innerWidth; 1748 if (innerWidth === fixedWidth) { 1749 return; 1750 } 1751 fixedWidth = wWidth; 1752 $subContainers.each(function () { 1753 const $sub = $(this).find('.sub-nav'); 1754 $sub[0].style.right = '';
1755 const sRect = $sub[0].getBoundingClientRect(); 1756 const sRight = sRect.left + sRect.width; 1757 if (sRight > wWidth - rightPad) { 1758 const parentRect = $sub[0].offsetParent.getBoundingClientRect(); 1759 const parentRight = parentRect.left + parentRect.width; 1760 $sub[0].style.right = `${parentRight - wWidth + rightPad}px`; 1761 } 1762 }); 1763 } 1764 var debouncer; 1765 $window.on('resize.lpui-auto-clean', function () { 1766 clearTimeout(debouncer); 1767 debouncer = setTimeout(fixSubsPosition, 500); 1768 }); 1769 fixSubsPosition(); 1770 if ($('.property-intro').length || $('.property-intro-2').length) { 1771 $('nav').addClass('dark-opening'); 1772 $("#global-navbar").css({ 1773 "background-color": "rgb(26, 26, 26)", 1774 "color": "rgb(255, 255, 255)" 1775 }); 1776 } 1777 function initAutoTruncateMenu() { 1778 const $navbar = $section.find('.navbar'); 1779 const $navList = $section.find('.navigation > ul'); 1780 if (!$navbar.length || !$navList.length) { 1781 return; 1782 } 1783 const $logo = $section.find('.logo'); 1784 const $buttonsWrapper = $section.find('.buttons-wrapper'); 1785 const $allItems = $navList.children('.navigation__item'); 1786 const $phoneItem = $allItems.filter(function () { 1787 return $(this).find('a[href^="tel:"]').length > 0; 1788 }); 1789 const $menuItems = $allItems.not($phoneItem); 1790 if (!$menuItems.length) { 1791 return; 1792 } 1793 const buffer = 8; 1794 function measureFixedWidth() { 1795 let width = buffer; 1796 if ($logo.length) { 1797 width += $logo.outerWidth(true) || 0; 1798 } 1799 if ($buttonsWrapper.length) { 1800 width += $buttonsWrapper.outerWidth(true) || 0; 1801 } 1802 if ($phoneItem.length) { 1803 width += $phoneItem.outerWidth(true) || 0; 1804 } 1805 return width; 1806 } 1807 function truncateMenu() { 1808 if (!$navList.is(':visible')) { 1809 return; 1810 } 1811 $menuItems.css('display', ''); 1812 const availableWidth = $navbar[0].getBoundingClientRect().width - measureFixedWidth(); 1813 let widthSoFar = 0; 1814 let overflowed = false; 1815 $menuItems.each(function () { 1816 const $item = $(this); 1817 if (overflowed) { 1818 $item.css('display', 'none'); 1819 return; 1820 } 1821 widthSoFar += $item.outerWidth(true); 1822 if (widthSoFar > availableWidth) { 1823 $item.css('display', 'none'); 1824 overflowed = true; 1825 } 1826 }); 1827 } 1828 let truncateFrame; 1829 function scheduleTruncate() { 1830 if (truncateFrame) { 1831 return; 1832 } 1833 truncateFrame = window.requestAnimationFrame(function () { 1834 truncateFrame = null; 1835 truncateMenu(); 1836 }); 1837 } 1838 scheduleTruncate(); 1839 if (window.ResizeObserver) { 1840 const resizeObserver = new ResizeObserver(scheduleTruncate); 1841 resizeObserver.observe($navbar[0]); 1842 } else { 1843 $(window).on('resize.lpui-auto-truncate', scheduleTruncate); 1844 } 1845 $section.find('img').on('load.lpui-auto-truncate', scheduleTruncate); 1846 $(window).on('load.lpui-auto-truncate', scheduleTruncate); 1847 if (document.fonts && document.fonts.ready) { 1848 document.fonts.ready.then(scheduleTruncate); 1849 } 1850 } 1851 initAutoTruncateMenu(); 1852})('global-navbar'); 1853} catch(e) { 1854console.log(e); 1855} 1856 try { 1857(function init(sectionDomId, options) { 1858 var elementSelector = options.elementSelector || 'nav'; 1859 var element = document.querySelector(elementSelector); 1860 var sections = document.querySelectorAll('body > section'); 1861 var subNavContainers = element.querySelectorAll('.sub-nav'); 1862 var initialBackgroundColor = options.initialBackgroundColor || element.style.backgroundColor; 1863 var backgroundColorScroll = options.backgroundColorScroll || '#191919'; 1864 var fontColor = options.fontColor || '#fff'; 1865 var fontColorScroll = options.fontColorScroll || '#000'; 1866 var didScroll = false; 1867 var lastScrollTop = 0; 1868 var delta = 5; 1869 1870 // eslint-disable-next-line sonarjs/no-collapsible-if 1871 if (wow) { 1872 // Wowjs might not trigger for position fixed elements 1873 if (window.scrollY > 0) { 1874 element.querySelectorAll('.wow').forEach(el => wow.show(el)); 1875 } 1876 } 1877 function adjustNavPinState() { 1878 // Remove 'visible' class from all subNavContainers 1879 for (let i = 0; i < subNavContainers.length; i++) { 1880 subNavContainers[i].classList.remove('visible'); 1881 } 1882 if (window.scrollY > 0) { 1883 element.style.backgroundColor = backgroundColorScroll; 1884 element.style.color = fontColorScroll; 1885 element.classList.add('scroll'); 1886 } else {
1887 element.style.backgroundColor = initialBackgroundColor; 1888 element.style.color = fontColor; 1889 element.classList.remove('scroll'); 1890 } 1891 } 1892 adjustNavPinState(); 1893 function onScroll() { 1894 didScroll = true; 1895 } 1896 window.addEventListener('scroll', onScroll); 1897 1898 // eslint-disable-next-line 1899 var debounceInterval = setInterval(() => { 1900 if (didScroll) { 1901 // eslint-disable-next-line 1902 hasScrolled(); 1903 didScroll = false; 1904 } 1905 }, 250); 1906 function hasScrolled() { 1907 adjustNavPinState(); 1908 // eslint-disable-next-line 1909 var navbarHeight = element.offsetHeight; 1910 // eslint-disable-next-line 1911 var st = window.scrollY; 1912 1913 // Make sure they scroll more than delta 1914 if (Math.abs(lastScrollTop - st) <= delta) { 1915 return; 1916 } 1917 if (st > lastScrollTop && st > navbarHeight) { 1918 // Scroll Down 1919 element.style.transform = `translateY(-${navbarHeight}px) scaleY(0)`; 1920 document.documentElement.style.setProperty('--global-header-height', '0px'); 1921 1922 // Some sections "follow" the navbar with class sticky (i.e. Producer search) 1923 sections.forEach(section => { 1924 if (section.classList.contains('sticky')) { 1925 section.style.top = '0px'; 1926 } 1927 }); 1928 } else { 1929 // Scroll Up 1930 // eslint-disable-next-line 1931 if (st + window.innerHeight < document.documentElement.scrollHeight) { 1932 element.style.transform = `translateY(0) scaleY(1)`; 1933 document.documentElement.style.setProperty('--global-header-height', `${navbarHeight}px`); 1934 sections.forEach(section => { 1935 if (section.classList.contains('sticky')) { 1936 section.style.top = `${navbarHeight}px`; 1937 } 1938 }); 1939 } 1940 } 1941 lastScrollTop = st; 1942 } 1943})('NAVBAR', JSON.parse("{\"fontColor\":\"#fff\",\"elementSelector\":\"nav\",\"fontColorScroll\":\"#fff\",\"initialFontColor\":\"#fff\",\"backgroundColorScroll\":\"#1a1a1a\",\"initialBackgroundColor\":\"rgba(0,0,0,0)\"}")); 1944} catch(e) { 1945console.log(e); 1946} 1947 try { 1948(function init(sectionDomId) { 1949 var sidemenu = $('#' + sectionDomId); 1950 sidemenu.on('lpui-sidemenu-show.lpui-auto-clean', function () { 1951 window.lpUI.requestScrollLock(sectionDomId); 1952 }); 1953 $(window).on('lpui-sidemenu-hide.lpui-auto-clean', function () { 1954 window.lpUI.releaseScrollLock(sectionDomId); 1955 }); 1956 $(window).click(function (e) { 1957 let targetContactForm = $(e.target).closest('#modal-global-contact-us').length; 1958 let targetSideMenu = $(e.target).closest('.sidemenu').length; 1959 let targetContactItem = $(e.target).closest('[data-type="CONTACT_US"]').length; 1960 let targetHamburger = $(e.target).closest('.hamburger-component').length; 1961 if (!(targetContactForm || targetSideMenu || targetContactItem || targetHamburger)) { 1962 $('body').removeClass('locked'); 1963 $('.hamburger').removeClass('active'); 1964 $('.sidemenu').removeClass('visible'); 1965 $('#modal-global-contact-us').removeClass('visible'); 1966 } 1967 }); 1968})('global-sidemenu'); 1969} catch(e) { 1970console.log(e); 1971} 1972 1973 try { 1974(function init(footerId) { 1975 var textContent = $(".text_content_wrap p").text().trim().length; 1976 const socialLinks = $(`#${footerId} .lp-socials__link`); 1977 if (textContent < 1) { 1978 $(".text_content_wrap").remove(); 1979 $(".second_text_footer").css({ 1980 'margin-bottom': 0 1981 }); 1982 } 1983 if (socialLinks.length > 0) { 1984 socialLinks.attr('data-wow-offset', '10'); 1985 } 1986 if ($(window).width() > 1280) { 1987 let footer = document.querySelector("#" + footerId); 1988 let copyrightElem = footer.querySelector(".copy_zone"); 1989 if (copyrightElem) { 1990 copyrightElem.style.whiteSpace = "nowrap"; 1991 let nowrapElemWidth = copyrightElem.clientWidth; 1992 copyrightElem.style.whiteSpace = ""; 1993 let normalElemWidth = copyrightElem.clientWidth; 1994 if (nowrapElemWidth > normalElemWidth) { 1995 footer.querySelector(".form-col--socials").classList.add("form-col--xl-auto"); 1996 } 1997 } 1998 } 1999 const form = $("#" + footerId).find("form"); 2000 const redirectLink = $('#' + footerId + ' .redirect-link'); 2001 form.on("reset", function () { 2002 redirectPage(redirectLink); 2003 }); 2004 function redirectPage(link) { 2005 if (link.length) { 2006 const rawHref = link.attr('href'); 2007 link.attr('href', setHttp(rawHref)); 2008 link[0].click(); 2009 } 2010 } 2011 function setHttp(link) { 2012 if (link.search(/^http[s]?\:\/\/|\//) == -1) { 2013 link = 'http://' + link; 2014 } 2015 return link; 2016 } 2017})('global-footer'); 2018} catch(e) { 2019console.log(e); 2020} 2021 2022 try { 2023(function init(options) {})('global-mobile-contact'); 2024} catch(e) { 2025console.log(e); 2026} 2027 2028 try { 2029(function init(sectionDomId, options) { 2030 let section = null; 2031 switch (sectionDomId) { 2032 case 'NAVBAR': 2033 section = document.querySelector('body > nav, #global-navbar'); 2034 break; 2035 case 'FOOTER': 2036 section = document.querySelector('body > footer, #global-footer'); 2037 break; 2038 case 'SIDEMENU': 2039 section = document.querySelector('body > div.sidemenu, #global-sidemenu'); 2040 break; 2041 case 'CONTACT':
2042 section = document.querySelector('#modal-global-contact-us'); 2043 break; 2044 case 'MOBILE_CONTACT': 2045 section = document.querySelector('body > div.mobile-contact-wrapper, #global-mobile-contact'); 2046 break; 2047 case 'SUBSCRIBE': 2048 // Subscribe Not Implemented 2049 section = null; 2050 break; 2051 case 'ACCOUNT': 2052 // Account Not Implemented 2053 section = null; 2054 break; 2055 default: 2056 section = document.querySelector('#' + sectionDomId); 2057 } 2058 if (!section) { 2059 return; 2060 } 2061 2062 // Where content / items are rendered 2063 const dataContainer = section.querySelector('.data-container'); 2064 if (!dataContainer) { 2065 // no place to render items = no need to query server or do anything else 2066 return; 2067 } 2068 let variables = options.variables || {}; 2069 2070 // Some variables in options may not have been injected - remove 2071 Object.keys(variables).forEach(function (variableName) { 2072 if (typeof variables[variableName] === 'string' && variables[variableName].match(/^{{.*}}$/)) { 2073 delete variables[variableName]; 2074 } 2075 }); 2076 2077 // Merge page query variables 2078 if (options.usePageResource) { 2079 variables = { 2080 ...variables, 2081 ...window.luxuryPresence.config.pageMeta.pageQueryVariables[options.resource] 2082 }; 2083 } 2084 2085 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. Callers 2086 // resolve the flag â fetchData reads the section stamp, aux fetches read 2087 // their own resource's stamp (auxUsesRouter). 2088 function apiUrl(useRouter) { 2089 return options.url || (useRouter ? window.luxuryPresence.defaults.routerUrl : window.luxuryPresence.defaults.apiGatewayUrl); 2090 } 2091 2092 // ROUTER-CLEANUP: aux resources roll out on their own flag, not the section's 2093 // (options.routerApiAux is stamped per aux resource server-side). 2094 function auxUsesRouter(resource) { 2095 return !!(options.routerApiAux && options.routerApiAux[resource]); 2096 } 2097 2098 // Pagination Executes on a Numbered Pagination Container 2099 // Or via a load more button 2100 let mode = 'BUTTONLESS_PAGINATION'; 2101 const container = section.querySelector('.pagination-container');
2102 const loadMoreButton = section.querySelector(options?.loadMoreSelector); 2103 if (container) { 2104 mode = 'NUMBERED_PAGINATION'; 2105 } 2106 if (loadMoreButton) { 2107 mode = 'LOAD_MORE_BUTTON'; 2108 } 2109 let searchContainer = section.querySelector('.search-container'); 2110 const hidePaginationOnFirstPage = options.hidePaginationOnFirstPage || false; 2111 const eventPrefix = '__pagination-'; 2112 const searchFormParams = options.searchFormParams || (options.resource === 'properties' ? [{ 2113 param: 'neighborhoodId', 2114 urlKey: 'neighborhood' 2115 }, { 2116 param: 'search', 2117 urlKey: 'search' 2118 }, { 2119 param: 'salesPriceGTE', 2120 urlKey: 'pricemin', 2121 formKey: 'priceMin', 2122 type: 'int' 2123 }, { 2124 param: 'salesPriceLTE', 2125 urlKey: 'pricemax', 2126 formKey: 'priceMax', 2127 type: 'int' 2128 }, { 2129 param: 'livingSpaceSizeGTE', 2130 urlKey: 'areamin', 2131 formKey: 'areaMin', 2132 type: 'int' 2133 }, { 2134 param: 'livingSpaceSizeLTE', 2135 urlKey: 'areamax', 2136 formKey: 'areaMax', 2137 type: 'int' 2138 }] : []); 2139 2140 // Total entries - initialized in first render 2141 let totalNumber = 0; 2142 const DefaultSearchParams = { 2143 page: 1 2144 }; 2145 searchFormParams.forEach(function (formParam) { 2146 DefaultSearchParams[formParam.formKey || formParam.param] = null; 2147 }); 2148 let searchParams = { 2149 ...DefaultSearchParams 2150 }; 2151 const offset = options.variables?.offset || 0; 2152 let scrollTarget = options.scrollTargetSelector ? section.querySelector(options.scrollTargetSelector) || section : section; 2153 let scrollOffset = (parseInt(options.scrollOffset, 10) || 0) ?? 100; 2154 2155 // entries of per page 2156 // when query variables for a given section would't be filled options.pageSize can store 2157 // template string, ex: "{{variables.limit}}", below code handles that case and set 9 as a default value 2158 let pageSize = parseInt(options.pageSize, 10) || 9; 2159 2160 // Adding mobile pageRange support 2161 var NARROW_BREAKPOINT = 600; 2162 var mobileBreakpoint = options.mobileBreakpoint > 0 ? options.mobileBreakpoint : NARROW_BREAKPOINT; 2163 var paginationMql = window.matchMedia(`(max-width: ${mobileBreakpoint}px)`); 2164 2165 // Page range (pages on both sides of the current page) 2166 var mobilePageRange = options.mobilePageRange > 0 ? options.mobilePageRange : 0; 2167 var desktopPageRange = options.pageRange >= 0 ? options.pageRange : 2; 2168 var pageRange = paginationMql.matches ? mobilePageRange : desktopPageRange; 2169 2170 // Whether to display the 'Previous' button 2171 var showPrevious = true; 2172 2173 // Whether to display the 'Next' button 2174 var showNext = true; 2175 2176 // Whether to display the page buttons 2177 var showPageNumbers = true; 2178 2179 // 'Previous' text 2180 var prevText = options.prevText || '«'; 2181 2182 // 'Next' text 2183 var nextText = options.nextText || '»'; 2184 2185 // Ellipsis text 2186 var ellipsisText = '…'; 2187 var classPrefix = 'paginationjs'; 2188 2189 // Default active class 2190 var activeClassName = 'active'; 2191 2192 // Default disable class 2193 var disableClassName = 'disabled'; 2194 2195 // Pagination element's position in the container 2196 var position = 'bottom'; 2197 2198 // Whether to trigger pagination at initialization 2199 var triggerPagingOnInit = !options.skipInitialLoad; 2200 var showFirstOnEllipsisShow = true; 2201 var showLastOnEllipsisShow = true; 2202 2203 // Instantiated in init() 2204 var el = null; 2205 2206 // Controls scrollTop logic 2207 var firstRender = true; 2208 var renderBySearch = false; 2209 var disabled = false; 2210 2211 // Pagination script class selector 2212 var paginationScriptSelector = options.paginationPartialName ? `.${options.paginationPartialName}` : '.pagination-script'; 2213 2214 // Property Specific Image Override if No Image 2215 var propertyPlaceholderImage = window.luxuryPresence.defaults.propertyPlaceholderImage; 2216 2217 // Construct template 2218 var templateHTML = section.querySelector(`script${paginationScriptSelector}`)?.innerHTML || ''; 2219 var template = Handlebars.compile(templateHTML); 2220 2221 // Initialize 2222 init(); 2223 function init() { 2224 Object.assign(searchParams, window.luxuryPresence.pagination.deserializeParams(searchFormParams, sectionDomId)); 2225 2226 // Append/prepend pagination element to the pagination container 2227 if (mode === 'NUMBERED_PAGINATION') { 2228 el = document.createElement('div'); 2229 el.className = 'paginationjs';
2230 container[position === 'bottom' ? 'append' : 'prepend'](el); 2231 } 2232 if (searchContainer) { 2233 initSearchContainer({ 2234 fetchNeighborhoods: searchContainer.dataset.fetchNeighborhoods === 'true', 2235 fetchPostCategories: searchContainer.dataset.fetchPostCategories === 'true', 2236 fetchOffices: searchContainer.dataset.fetchOffices === 'true', 2237 fetchRentalRates: searchContainer.dataset.fetchRentalRates === 'true' 2238 }, function () { 2239 syncSearchFormState(searchParams); 2240 }); 2241 } 2242 2243 // Bind events 2244 observer(); 2245 } 2246 function syncSearchFormState(params) { 2247 searchContainer.dispatchEvent(new CustomEvent('sync', { 2248 detail: params 2249 })); 2250 } 2251 function initSearchContainer(options, done) { 2252 var promises = []; 2253 if (options.fetchNeighborhoods) { 2254 promises.push(fetchAllNeighborhoods(function (neighborhoods) { 2255 searchContainer.dispatchEvent(new CustomEvent('neighborhoods-data', { 2256 detail: { 2257 data: neighborhoods.map(function (item) { 2258 return { 2259 value: item.id, 2260 label: item.name 2261 }; 2262 }) 2263 } 2264 })); 2265 })); 2266 } 2267 if (options.fetchPostCategories) { 2268 promises.push(fetchPostCategories(function (categories) { 2269 searchContainer.dispatchEvent(new CustomEvent('post-categories-data', { 2270 detail: { 2271 data: categories 2272 } 2273 })); 2274 })); 2275 } 2276 if (options.fetchOffices) { 2277 promises.push(fetchOffices(function (offices) { 2278 searchContainer.dispatchEvent(new CustomEvent('offices-data', { 2279 detail: { 2280 data: offices 2281 } 2282 })); 2283 })); 2284 } 2285 if (options.fetchRentalRates) { 2286 promises.push(fetchAllRentalRates(function (rentalRates) { 2287 searchContainer.dispatchEvent(new CustomEvent('rental-rates-data', { 2288 detail: { 2289 data: rentalRates 2290 } 2291 })); 2292 })); 2293 } 2294 if (promises.length > 0) { 2295 Promise.all(promises).then(function () { 2296 done(); 2297 }); 2298 } else { 2299 // element's custom code is not executed yet, so we're scheduling callback to after element's code 2300 setTimeout(done); 2301 } 2302 } 2303 function fetchAllNeighborhoods(done) { 2304 var useRouter = auxUsesRouter('neighborhoods'); 2305 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. Same 2306 // args on both APIs (the federated neighborhoods field accepts 2307 // withProperties/withBlogPosts); only the selection set differs. 2308 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') + '}}'; 2309 var payload = {}; 2310 payload.offset = 0; 2311 payload.limit = 100; 2312 payload.companyId = variables.companyId; 2313 if (options.resource === 'properties') { 2314 payload.withProperties = { 2315 active: true 2316 }; 2317 ['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) { 2318 if (variables[field] !== undefined && variables[field] !== null) { 2319 payload.withProperties[field] = variables[field]; 2320 } 2321 }); 2322 } 2323 if (options.resource === 'posts') { 2324 payload.withBlogPosts = { 2325 active: true 2326 }; 2327 ['search', 'postStatusId', 'featured', 'categoryId', 'categoryIds', 'neighborhoodId', 'slug'].forEach(function (field) { 2328 if (variables[field] !== undefined && variables[field] !== null) { 2329 payload.withBlogPosts[field] = variables[field]; 2330 } 2331 }); 2332 } 2333 2334 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 2335 if (useRouter) { 2336 payload = window.luxuryPresence.routerApi.transformVariables('neighborhoods', payload); 2337 } 2338 superagent.post(apiUrl(useRouter) + '/graphql').withCredentials().send({ 2339 query: gqlQuery, 2340 variables: payload 2341 }).then(function (res) { 2342 var value = res.body.data && res.body.data.neighborhoods || {}; 2343 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 2344 var items = useRouter ? window.luxuryPresence.routerApi.transformPage(value).items : value || []; 2345 done(items, items.length); 2346 }); 2347 } 2348 function fetchPostCategories(done) { 2349 var featured = options.resource === 'posts' && !!variables.featured; 2350 var useRouter = auxUsesRouter('postCategories'); 2351 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. Only the 2352 // selection set differs ({ items {...} } on the router). 2353 var selection = 'id, name, publishedCount, featuredPublishedCount'; 2354 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) + '}}'; 2355 var payload = {}; 2356 payload.offset = 0; 2357 payload.limit = 100; 2358 payload.companyId = variables.companyId; 2359 superagent.post(apiUrl(useRouter) + '/graphql').withCredentials().send({ 2360 query: gqlQuery, 2361 variables: payload 2362 }).then(function (res) { 2363 var value = res.body.data && res.body.data.postCategories || {}; 2364 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 2365 var items = useRouter ? window.luxuryPresence.routerApi.transformPage(value).items : value || []; 2366 done(items.map(function (item) { 2367 item.count = featured ? item.featuredPublishedCount : item.publishedCount; 2368 return item; 2369 }), items.length); 2370 }); 2371 } 2372 function fetchOffices(done) { 2373 var useRouter = auxUsesRouter('offices'); 2374 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. Only the 2375 // selection set differs ({ items {...} } on the router). 2376 var selection = 'id, name, tags'; 2377 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. The two 2378 // APIs differ in more than the items wrapper: federated offices takes 2379 // companyId: ID! (legacy gateway: String), so each branch builds its whole doc. 2380 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 + '}}'; 2381 var payload = { 2382 offset: 0, 2383 limit: 100, 2384 companyId: variables.companyId 2385 }; 2386 2387 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 2388 if (useRouter) { 2389 payload = window.luxuryPresence.routerApi.transformVariables('office
2389s', payload); 2390 } 2391 superagent.post(apiUrl(useRouter) + '/graphql').withCredentials().send({ 2392 query: gqlQuery, 2393 variables: payload 2394 }).then(function (res) { 2395 var value = res.body.data && res.body.data.offices || {}; 2396 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 2397 var items = useRouter ? window.luxuryPresence.routerApi.transformPage(value).items : value || []; 2398 done(items, items.length); 2399 }); 2400 } 2401 2402 // ROUTER-CLEANUP: no rentalRates field on the federated router â legacy only. 2403 function fetchAllRentalRates(done) { 2404 var url = options.url || window.luxuryPresence.defaults.apiGatewayUrl; 2405 var gqlQuery = 'query ($companyId: String, $offset: Int, $limit: Int) {' + 'rentalRates (companyId: $companyId, offset: $offset, limit: $limit) {rentalRateId, label}}'; 2406 var payload = { 2407 offset: 0, 2408 limit: 100, 2409 companyId: variables.companyId 2410 }; 2411 superagent.post(url + '/graphql').withCredentials().send({ 2412 query: gqlQuery, 2413 variables: payload 2414 }).then(function (res) { 2415 var items = res.body.data && res.body.data.rentalRates || []; 2416 done(items, items.length); 2417 }).catch(function (err) { 2418 console.error('Error fetching rental rates:', err); 2419 done([], 0); 2420 }); 2421 } 2422 function fetchData(params, done) { 2423 var resource = options.resource; 2424 var gqlQuery = options.query || window.luxuryPresence.defaults.gql[resource]; 2425 var payload = {}; 2426 try { 2427 payload = JSON.parse(JSON.stringify(variables)); 2428 } catch (e) { 2429 Object.keys(variables).forEach(function (variableName) { 2430 payload[variableName] = variables[variableName]; 2431 }); 2432 } 2433 payload.offset = (params.page - 1) * pageSize + offset; 2434 payload.limit = pageSize; 2435 payload.companyId = options.companyId; 2436 searchFormParams.forEach(function (formParam) { 2437 var val = params[formParam.formKey || formParam.param]; 2438 if (val !== null && val !== undefined) { 2439 objSet(payload, formParam.param, val); 2440 } 2441 }); 2442 2443 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 2444 if (options.useRouterApi) { 2445 payload = window.luxuryPresence.routerApi.transformVariables(resource, payload); 2446 } 2447 2448 // TODO: Disabled loading due to jarring effect 2449 // dataContainer.html('Loading...'); 2450 superagent.post(apiUrl(options.useRouterApi) + '/graphql').withCredentials().send({ 2451 query: gqlQuery, 2452 variables: payload 2453 }).then(function (res) { 2454 if (res.body.errors) { 2455 done(res.body.errors); 2456 return; 2457 } 2458 var data = res.body.data || {}; 2459 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 2460 var resources; 2461 var resourceCount; 2462 if (options.useRouterApi) { 2463 var page = window.luxuryPresence.routerApi.transformPage(data[resource]); 2464 resources = window.luxuryPresence.routerApi.transformResponse(resource, page.items); 2465 resourceCount = page.count; 2466 } else { 2467 resources = data[resource] || []; 2468 resourceCount = data[resource + 'Count'] && data[resource + 'Count'].count ? data[resource + 'Count'].count : 0; 2469 } 2470 const finish = function (items) { 2471 if (resource === 'properties' && propertyPlaceholderImage?.id) { 2472 items = items.map(item => { 2473 if (item.media?.length === 0) { 2474 return Object.assign(item, { 2475 media: [propertyPlaceholderImage] 2476 }); 2477 } 2478 return item; 2479 }); 2480 } 2481 done(null, items, resourceCount); 2482 }; 2483 2484 // ROUTER-CLEANUP: client half of PLAT-4073 â resolve the requested 2485 // disclaimers before rendering; older SDKs skip (keys stay unset). 2486 if (options.useRouterApi && resource === 'properties' && options.routerPropertyDisclaimers && options.routerPropertyDisclaimers.length && window.luxuryPresence.routerApi && typeof window.luxuryPresence.routerApi.applyPropertyDisclaimers === 'function') { 2487 window.luxuryPresence.routerApi.applyPropertyDisclaimers(resources, options.routerPropertyDisclaimers).then(finish); 2488 return; 2489 } 2490 finish(resources); 2491 }); 2492 } 2493 function getTotalPage() { 2494 return Math.ceil(totalNumber / pageSize); 2495 } 2496 function renderPaginationList() { 2497 var totalPages = getTotalPage(); 2498 var rangeStart = searchParams.page - pageRange; 2499 var rangeEnd = searchParams.page + pageRange; 2500 if (rangeEnd > totalPages) { 2501 rangeEnd = totalPages; 2502 rangeStart = totalPages - pageRange * 2; 2503 rangeStart = rangeStart < 1 ? 1 : rangeStart; 2504 } 2505 if (rangeStart <= 1) { 2506 rangeStart = 1; 2507 rangeEnd = Math.min(pageRange * 2 + 1, totalPages); 2508 } 2509 2510 // Making sure that 1 more page button is shown in edge positions 2511 if (pageRange === 0) { 2512 if (searchParams.page === totalPages) { 2513 rangeStart = totalPages <= 1 ? 1 : totalPages - 1; 2514 } 2515 if (searchParams.page === 1) { 2516 rangeEnd = Math.min(2, totalPages); 2517 } 2518 } 2519 2520 // Render pagination list 2521 if (mode === 'NUMBERED_PAGINATION') { 2522 el.innerHTML = generateHTML({ 2523 currentPage: searchParams.page, 2524 pageRange: pageRange, 2525 rangeStart: rangeStart, 2526 rangeEnd: rangeEnd 2527 }); 2528 if (totalPages < 2 && hidePaginationOnFirstPage) { 2529 container.style.display = 'none'; 2530 } else { 2531 container.style.display = ''; 2532 } 2533 } else if (mode === 'LOAD_MORE_BUTTON') { 2534 if (searchParams.page >= totalPages) {
2535 loadMoreButton.style.display = 'none'; 2536 } else { 2537 loadMoreButton.style.display = ''; 2538 } 2539 } 2540 } 2541 function render(data) { 2542 renderPaginationList(); 2543 2544 // Render new content with handlebars 2545 var html = ''; 2546 if (mode === 'LOAD_MORE_BUTTON' && searchParams.page > 1) { 2547 // If using load more, append search results to existing results 2548 html = dataContainer.innerHTML; 2549 } 2550 for (var i = 0; i < data.length; i++) { 2551 var itemData = recursivelyParse(data[i]); 2552 itemData.sectionIndex = options.sectionIndex; 2553 itemData.renderOptions = options.renderOptions; 2554 html += template(itemData); 2555 } 2556 dataContainer.innerHTML = html; 2557 2558 // Scroll Top 2559 if (!firstRender && mode === 'NUMBERED_PAGINATION' && (!renderBySearch || !options.skipScrollOnSearch)) { 2560 // Only animate to the top if we replace dataContainer (numbered pagination) 2561 setTimeout(() => { 2562 const scrollTargetOffsetTop = scrollTarget.getBoundingClientRect().top + window.scrollY - scrollOffset; 2563 window.scrollTo({ 2564 top: scrollTargetOffsetTop, 2565 behavior: 'smooth' 2566 }); 2567 }, 250); 2568 } 2569 return true; 2570 } 2571 function generateHTML(args) { 2572 const totalPages = getTotalPage(); 2573 const { 2574 rangeStart, 2575 rangeEnd 2576 } = args; 2577 const makeLnk = page => window.luxuryPresence.pagination.serializeParams(searchFormParams, sectionDomId, { 2578 ...searchParams, 2579 page 2580 }); 2581 let html = ''; 2582 if (showPrevious || showPageNumbers || showNext) { 2583 html += '<div class="paginationjs-pages"><ul>'; 2584 2585 // Previous button 2586 if (showPrevious) { 2587 if (searchParams.page <= 1) { 2588 html += `<li class="${classPrefix}-prev ${disableClassName}"><a>${prevText}</a></li>`; 2589 } else { 2590 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>`; 2591 } 2592 } 2593 2594 // Pages 2595 if (showPageNumbers) { 2596 if (rangeStart <= 3) { 2597 for (let i = 1; i < rangeStart; i++) { 2598 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>`; 2599 } 2600 } else { 2601 if (showFirstOnEllipsisShow) { 2602 html += `<li class="${classPrefix}-page ${classPrefix}-first J-paginationjs-page" data-num="1"><a href="${makeLnk(1)}">1</a></li>`; 2603 } 2604 html += `<li class="${classPrefix}-ellipsis ${disableClassName}"><a>${ellipsisText}</a></li>`; 2605 } 2606 for (let i = rangeStart; i <= rangeEnd; i++) { 2607 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>`; 2608 } 2609 if (rangeEnd < totalPages - 2) { 2610 html += `<li class="${classPrefix}-ellipsis ${disableClassName}"><a>${ellipsisText}</a></li>`; 2611 if (showLastOnEllipsisShow) { 2612 html += `<li class="${classPrefix}-page ${classPrefix}-last J-paginationjs-page" data-num="${totalPages}"><a href="${makeLnk(totalPages)}">${totalPages}</a></li>`; 2613 } 2614 } else { 2615 for (let i = rangeEnd + 1; i <= totalPages; i++) { 2616 html += `<li class="${classPrefix}-page J-paginationjs-page" data-num="${i}"><a href="${makeLnk(i)}">${i}</a></li>`; 2617 } 2618 } 2619 } 2620 2621 // Next button 2622 if (showNext) { 2623 if (searchParams.page >= totalPages) { 2624 html += `<li class="${classPrefix}-next ${disableClassName}"><a>${nextText}</a></li>`; 2625 } else { 2626 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>`; 2627 } 2628 } 2629 html += '</ul></div>'; 2630 } 2631 return html; 2632 } 2633 function go(newSearchParams, callback, restorationVisit) { 2634 if (disabled) return; 2635 var goToPageNumber = newSearchParams.page; 2636 2637 // Page number is out of bounds 2638 if (!goToPageNumber || goToPageNumber < 1) return; 2639 var totalPage = getTotalPage(); 2640 2641 // Page number is out of bounds 2642 if (!restorationVisit && totalNumber > 0) { 2643 if (goToPageNumber > totalPage) return; 2644 } 2645 if (!options.skipSerialization && (mode === 'NUMBERED_PAGINATION' || searchContainer)) {
2646 var newURL = window.luxuryPresence.pagination.serializeParams(searchFormParams, sectionDomId, { 2647 ...newSearchParams, 2648 page: goToPageNumber !== 1 && mode === 'NUMBERED_PAGINATION' ? newSearchParams.page : null 2649 }); 2650 if (!areQueryParamsEqual(newSearchParams, searchParams) && !restorationVisit) { 2651 window.history.pushState({}, '', window.luxuryPresence.getPath(newURL, { 2652 queryString: true 2653 })); 2654 } 2655 } 2656 2657 // Fetch and update page 2658 fetchData(newSearchParams, renderWithData); 2659 disabled = true; 2660 function renderWithData(err, data, count) { 2661 if (err) { 2662 dataContainer.dispatchEvent(new Event('error')); 2663 } else { 2664 searchParams = { 2665 ...newSearchParams 2666 }; 2667 totalNumber = count - offset; 2668 if (data.length === 0) { 2669 dataContainer.dispatchEvent(new Event('no-data')); 2670 } else { 2671 dataContainer.dispatchEvent(new Event('data')); 2672 } 2673 render(data); 2674 firstRender = false; 2675 } 2676 disabled = false; 2677 renderBySearch = false; 2678 } 2679 } 2680 function areQueryParamsEqual(first, second) { 2681 var differ = Object.keys(first).find(function (key) { 2682 return first[key] !== undefined && first[key] !== null && first[key] !== second[key]; 2683 }); 2684 if (differ) { 2685 return false; 2686 } 2687 differ = Object.keys(second).find(function (key) { 2688 return second[key] !== undefined && second[key] !== null && second[key] !== first[key]; 2689 }); 2690 return !differ; 2691 } 2692 function next(callback) { 2693 go({ 2694 ...searchParams, 2695 page: searchParams.page + 1 2696 }, callback); 2697 } 2698 function previous(callback) { 2699 go({ 2700 ...searchParams, 2701 page: searchParams.page - 1 2702 }, callback); 2703 } 2704 function refresh(callback) { 2705 go(searchParams, callback); 2706 } 2707 function update(params, callback) { 2708 renderBySearch = true; 2709 go(params, callback); 2710 } 2711 function observer() { 2712 if (searchContainer) { 2713 searchContainer.addEventListener('search', function (event, newSearchParams) { 2714 newSearchParams = event.detail || newSearchParams; 2715 update({ 2716 ...searchParams, 2717 ...newSearchParams, 2718 page: 1 2719 }); 2720 }); 2721 searchContainer.addEventListener('clear-search', function () { 2722 const defaultSearchParams = { 2723 ...DefaultSearchParams 2724 }; 2725 const isCurrentSearchFormStateDefault = areQueryParamsEqual({ 2726 ...defaultSearchParams, 2727 page: null 2728 }, { 2729 ...searchParams, 2730 page: null 2731 }); 2732 2733 // if mode is LOAD_MORE_BUTTON we should't make anything on clear 2734 // when search form have default state 2735 if (isCurrentSearchFormStateDefault && mode !== 'NUMBERED_PAGINATION') { 2736 return; 2737 } 2738 2739 // if someone initially go to some page and click 'Clear' on search from 2740 // we should't navigate to first page. We should preserve page value 2741 if (isCurrentSearchFormStateDefault) { 2742 defaultSearchParams.page = searchParams.page; 2743 } 2744 syncSearchFormState(defaultSearchParams); 2745 update(defaultSearchParams); 2746 }); 2747 } 2748 if (mode === 'LOAD_MORE_BUTTON') { 2749 loadMoreButton.addEventListener('click', function (event) { 2750 go({ 2751 ...searchParams, 2752 page: searchParams.page + 1 2753 }); 2754 return false; 2755 }); 2756 } 2757 if (mode === 'LOAD_MORE_BUTTON' || mode === 'BUTTONLESS_PAGINATION') { 2758 // Do initial render 2759 go(Object.assign({}, searchParams, { 2760 page: 1 2761 })); 2762 return; 2763 } 2764 if (mode === 'NUMBERED_PAGINATION') { 2765 // Go to specified page number 2766 container.addEventListener(eventPrefix + 'go', function (event) { 2767 let { 2768 pageNumber, 2769 done 2770 } = event.detail || {}; 2771 pageNumber = parseInt(pageNumber, 10); 2772 if (!pageNumber) { 2773 return; 2774 } 2775 go({ 2776 ...searchParams, 2777 page: pageNumber 2778 }, done); 2779 }); 2780 2781 // Page number button click 2782 el.addEventListener('click', function (event) { 2783 let clickTarget = event.target; 2784 let current = clickTarget.closest('.J-paginationjs-page, .J-paginationjs-previous, .J-paginationjs-next'); 2785 let pageNumber = current?.getAttribute('data-num'); 2786 if (!pageNumber || current.classList.contains(disableClassName) || current.classList.contains(activeClassName)) { 2787 return; 2788 } else { 2789 go({ 2790 ...searchParams, 2791 page: parseInt(pageNumber, 10) 2792 }); 2793 } 2794 event.preventDefault(); 2795 }); 2796 2797 // Whether to load the default page 2798 var defaultPageNumber = searchParams.page; 2799 if (triggerPagingOnInit) {
2800 container.dispatchEvent(new CustomEvent(eventPrefix + 'go', { 2801 detail: { 2802 pageNumber: defaultPageNumber 2803 } 2804 })); 2805 } 2806 } 2807 window.addEventListener('popstate', function (event) { 2808 var newParams = Object.assign({}, DefaultSearchParams, window.luxuryPresence.pagination.deserializeParams(searchFormParams, sectionDomId)); 2809 if (!areQueryParamsEqual(newParams, searchParams)) { 2810 go(newParams, null, true); 2811 if (searchContainer) { 2812 syncSearchFormState(newParams); 2813 } 2814 } 2815 }); 2816 } 2817 function replaceVariables(template, variables) { 2818 var formattedString; 2819 for (var key in variables) { 2820 var value = variables[key]; 2821 var regexp = new RegExp('<%=\\s*' + key + '\\s*%>', 'img'); 2822 formattedString = (formattedString || template).replace(regexp, value); 2823 } 2824 return formattedString; 2825 } 2826 function isTextEditorValue(obj) { 2827 return 'raw' in obj || 'gjs' in obj; 2828 } 2829 function getTextEditorValue(obj) { 2830 if (!obj.html) { 2831 return ''; 2832 } 2833 var data = obj.html; 2834 var css = (obj.raw || obj.gjs || {}).css; 2835 if (css) { 2836 data = data + '<style>' + css + '</style>'; 2837 } 2838 return data; 2839 } 2840 2841 /** 2842 * check rendered resources for html and raw properties that could indicate if resource is from an advanced text editor. 2843 * strips out raw proprties and returns only HTML if it exists. 2844 * @param {Object} resources a collection retrieved from the database 2845 * @return {Object} the newly modified object. 2846 */ 2847 function recursivelyParse(resources) { 2848 forEach(resources, function (value, key) { 2849 if (!value) { 2850 return; 2851 } 2852 if (value instanceof Object) { 2853 if (isTextEditorValue(value)) { 2854 resources[key] = getTextEditorValue(value); 2855 return; 2856 } else { 2857 return recursivelyParse(value); 2858 } 2859 } 2860 try { 2861 var parsedData = JSON.parse(value); 2862 if (isTextEditorValue(parsedData)) { 2863 resources[key] = getTextEditorValue(parsedData); 2864 } 2865 } catch (e) { 2866 // do nothing if we failed to parse value as JSON 2867 } 2868 }); 2869 return resources; 2870 } 2871 function forEach(collection, iteratee) { 2872 var func = Array.isArray(collection) ? arrayEach : baseFor; 2873 return func(collection, iteratee); 2874 } 2875 function baseFor(object, iteratee) { 2876 if (!object) { 2877 return; 2878 } 2879 var iterable = Object(object); 2880 var props = Object.keys(object); 2881 var length = props.length; 2882 var index = -1; 2883 while (length--) { 2884 var key = props[++index]; 2885 if (iteratee(iterable[key], key, iterable) === false) { 2886 break; 2887 } 2888 } 2889 return object; 2890 } 2891 function objSet(obj, path, value) { 2892 const pathArray = Array.isArray(path) ? path : path.match(/([^[.\]])+/g); 2893 pathArray.reduce((acc, key, i) => { 2894 if (acc[key] === undefined) acc[key] = {}; 2895 if (i === pathArray.length - 1) acc[key] = value; 2896 return acc[key]; 2897 }, obj); 2898 } 2899 function arrayEach(array, iteratee) { 2900 var index = -1; 2901 var length = array.length; 2902 while (++index < length) { 2903 if (iteratee(array[index], index, array) === false) { 2904 break; 2905 } 2906 } 2907 return array; 2908 } 2909 function selectPageRangeMode(e) { 2910 pageRange = e.matches ? mobilePageRange : desktopPageRange; 2911 renderPaginationList(); 2912 } 2913 paginationMql.addEventListener('change', selectPageRangeMode); 2914})('section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d', JSON.parse("{\"pageSize\":\"8\",\"resource\":\"posts\",\"pageRange\":0,\"variables\":{\"limit\":8,\"order\":\"publishedAt\",\"offset\":0,\"sortDir\":\"DESC\",\"companyId\":\"32443cf2-4f8c-4e0f-8bb4-a310afb42f31\",\"categoryId\":\"{{pageElement.categoryId}}\"},\"searchFormParams\":[{\"param\":\"search\",\"urlKey\":\"search\"},{\"param\":\"categoryIds\",\"urlKey\":\"category\"}],\"skipScrollOnSearch\":true,\"scrollTargetSelector\":\".blog-list__container\",\"hidePaginationOnFirstPage\":true,\"companyId\":\"32443cf2-4f8c-4e0f-8bb4-a310afb42f31\",\"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}}")); 2915} catch(e) { 2916console.log(e); 2917} 2918 try { 2919(function init(sectionDomId) { 2920 const section = $(`#${sectionDomId}`); 2921 const searchInput = section.find('.js-search-input'); 2922 const searchContainer = section.find('.search-container'); 2923 const dataContainer = section.find('.data-container'); 2924 const categoryFilter = section.find('.js-category-filter'); 2925 const btnCategory = section.find('.js-btn-category'); 2926 let activeFilters = null; 2927 if (searchContainer.length === 0) return; 2928 const { 2929 debounce 2930 } = window.luxuryPresence; 2931 const emptyResultsText = section.find('.empty-results'); 2932 searchInput.on('input', debounce(doSearch, 700)); 2933 dataContainer.on('data', function () { 2934 emptyResultsText.removeClass("visible"); 2935 }); 2936 dataContainer.on('no-data', function () { 2937 emptyResultsText.addClass("visible"); 2938 }); 2939 btnCategory.click(function () { 2940 $(this).toggleClass('active'); 2941 categoryFilter.slideToggle(); 2942 }); 2943 function doSearch() { 2944 let values = categoryFilter.find('.active').map(function () { 2945 return $(this).data('value'); 2946 }).get(); 2947 const params = { 2948 categoryIds: values || null, 2949 search: searchInput.val().trim() || null 2950 }; 2951 searchContainer[0]?.dispatchEvent(new CustomEvent('search', { 2952 detail: params 2953 })); 2954 } 2955 categoryFilter.on('click', '.category-cell', function () { 2956 if ($(this).hasClass('js-category-all')) { 2957 section.find('.category-cell').removeClass('active'); 2958 $(this).addClass('active'); 2959 } else { 2960 $(this).toggleClass('active'); 2961 section.find('.js-category-all').removeClass('active'); 2962 } 2963 doSearch(); 2964 }); 2965 searchContainer.on('post-categories-data', function (ev, category) { 2966 category = ev.detail || category; 2967 categoryFilter.find('.js-category-cell').remove(); 2968 categoryFilter.find('.active').removeClass('active'); 2969 let btnClass = categoryFilter.data('button-style'); 2970 if (Array.isArray(category.data) && category.data.length) { 2971 btnCategory.css('display', 'inline-flex'); 2972 categoryFilter.append(category.data.map(item => `<button id="filter-${item.id}" data-value="${item.id}" class="category-cell js-category-cell lp-btn ${btnClass}">${item.name}</button>`).join('\n')); 2973 } else { 2974 btnCategory.remove(); 2975 } 2976 setActiveFilters(); 2977 }); 2978 searchContainer.on('sync', function (event, params) { 2979 params = event.detail || params; 2980 activeFilters = params; 2981 setActiveFilters(); 2982 }); 2983 function setActiveFilters() { 2984 categoryFilter.find('.active').removeClass('active'); 2985 if (activeFilters.categoryIds !== null && activeFilters.categoryIds.length > 0) { 2986 activeFilters.categoryIds.forEach(function (categoryId) { 2987 categoryFilter.find(`#filter-${categoryId}`).addClass('active'); 2988 }); 2989 } else { 2990 categoryFilter.find('.js-category-all').addClass('active'); 2991 } 2992 } 2993})('section-5f3ad3f5-d0ed-4c78-923a-1b73efbc864d', 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\":\"32443cf2-4f8c-4e0f-8bb4-a310afb42f31\",\"usePageResource\":false,\"sectionIndex\":2}")); 2994} catch(e) { 2995console.log(e); 2996} 2997 try { 2998(function init(sectionDomId) { 2999 const $section = $('#' + sectionDomId); 3000 if ($section.find('.parallax').length) $section.addClass('parallax-enabled'); 3001 if ($section.find('.video-wrapper').length) $section.addClass('video'); 3002})('section-d7ac5ffe-a0d4-4b97-aa3d-0166d41728de', 'undefined'); 3003} catch(e) { 3004console.log(e); 3005} 3006 try { 3007(function init(sectionDomId, options) { 3008 let section = null; 3009 switch (sectionDomId) { 3010 case 'NAVBAR': 3011 section = document.querySelector('body > nav, #global-navbar'); 3012 break; 3013 case 'FOOTER': 3014 section = document.querySelector('body > footer, #global-footer'); 3015 break; 3016 case 'SIDEMENU': 3017 section = document.querySelector('body > div.sidemenu, #global-sidemenu'); 3018 break; 3019 case 'CONTACT':
3020 section = document.querySelector('#modal-global-contact-us'); 3021 break; 3022 case 'MOBILE_CONTACT': 3023 section = document.querySelector('body > div.mobile-contact-wrapper, #global-mobile-contact'); 3024 break; 3025 case 'SUBSCRIBE': 3026 // Subscribe Not Implemented 3027 section = null; 3028 break; 3029 case 'ACCOUNT': 3030 // Account Not Implemented 3031 section = null; 3032 break; 3033 default: 3034 section = document.querySelector('#' + sectionDomId); 3035 } 3036 if (!section) { 3037 return; 3038 } 3039 var url = window.luxuryPresence.defaults.routerUrl; 3040 var companyId = window.luxuryPresence.defaults.companyId; 3041 var limit = options.limit || 8; 3042 if (typeof limit === 'string') { 3043 limit = parseInt(limit, 10) || 8; // this NaN protection also filters out 0 - this is expected 3044 } 3045 var templateSelector = options.templateSelector || '.jsIGTemplate'; 3046 var containerSelector = options.containerSelector || '.jsIGContainer'; 3047 var hasDataClass = options.hasDataClass || 'has-data'; 3048 var hideActivateMessage = options.hasDataClass || false; 3049 var payload = { 3050 companyId: companyId, 3051 limit: limit 3052 }; 3053 if (options.resourceId && typeof options.resourceId === 'string' && !options.resourceId.match(/^{{.*}}$/)) { 3054 payload.resourceId = options.resourceId; 3055 // Federated enum values are uppercase (AGENT/TEAM); element configs carry lowercase 3056 payload.resource = String(options.resource || 'agent').toUpperCase(); 3057 payload.fallbackToNoResource = options.fallbackToNoResource === 'true' || options.fallbackToNoResource === true; 3058 } 3059 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'; 3060 var templateHTML = section.querySelector(templateSelector)?.innerHTML || ''; 3061 var template = Handlebars.compile(templateHTML); 3062 var container = section.querySelector(containerSelector); 3063 if (options.variables) { 3064 Object.keys(options.variables).forEach(function (key) { 3065 if (options.variables.hasOwnProperty(key) && (typeof options.variables[key] !== 'string' || !options.variables[key].match(/^{{.*}}$/))) { 3066 payload[key] = options.variables[key]; 3067 } 3068 }); 3069 } 3070 function getData() { 3071 var feed = { 3072 error: true 3073 }; 3074 if (payload.companyId == null || payload.companyId === '') { 3075 // instagramContentFeed requires companyId (ID!) â nothing to fetch without it. 3076 // Checked after the options.variables merge, which may override the default. 3077 // Deferred so element listeners (attached after this template runs) still receive it. 3078 setTimeout(function () { 3079 section.dispatchEvent(new CustomEvent('ig-data', { 3080 detail: feed 3081 })); 3082 }, 0); 3083 return; 3084 } 3085 superagent.post(url + '/graphql').send({ 3086 query: query, 3087 variables: payload 3088 }).then(res => { 3089 try { 3090 if (!res.body.errors) { 3091 feed = res.body.data.instagramContentFeed; 3092 if (!feed.active) { 3093 if (!hideActivateMessage && sectionDomId === 'section-temp' && container) { 3094 if (payload.resourceId) { 3095 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>'; 3096 } else { 3097 container.innerHTML = '<div style="text-align: center">Instagram account is not connected.<br /> Connect it on <a href="/profile">Profile page</a></div>'; 3098 } 3099 } 3100 } else { 3101 if (feed.items.length) { 3102 if (hasDataClass) { 3103 section.classList.add(hasDataClass); 3104 } 3105 const feedName = feed.username; 3106 section.querySelectorAll('.jsIGLink').forEach(link => link.setAttribute('href', feed.feedUrl)); 3107 section.querySelectorAll('.jsIGName').forEach(name => { 3108 name.textContent = '@' + feedName; 3109 name.setAttribute('title', '@' + feedName); 3110 }); 3111 if (container && template) { 3112 container.innerHTML = template(feed); 3113 } 3114 } 3115 } 3116 } 3117 } catch (e) {} 3118 section.dispatchEvent(new CustomEvent('ig-data', { 3119 detail: feed 3120 })); 3121 }).catch(e => { 3122 console.log('err', e); 3123 section.dispatchEvent(new CustomEvent('ig-data', { 3124 detail: feed 3125 })); 3126 }); 3127 } 3128 getData(); 3129})('section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb', JSON.parse("{\"limit\":33,\"resource\":\"agent\",\"resourceId\":\"\",\"fallbackToNoResource\":\"true\",\"companyId\":\"32443cf2-4f8c-4e0f-8bb4-a310afb42f31\",\"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}}")); 3130} catch(e) { 3131console.log(e); 3132} 3133 try { 3134(function init(sectionDomId) { 3135 const $section = $('#' + sectionDomId); 3136 var templateHTML = $section.find('.jsIGItem').html(); 3137 var itemTemplate = templateHTML && Handlebars.compile(templateHTML); 3138 const $container = $section.find('.ig-feed-feed'); 3139 const $topPrev = $section.find('.top-nav-prev'); 3140 const $topNext = $section.find('.top-nav-next'); 3141 const $bottomPrev = $section.find('.bottom-nav-prev'); 3142 const $bottomNext = $section.find('.bottom-nav-next'); 3143 let limit = 33; 3144 try { 3145 limit = parseInt($container[0].dataset['limit']); 3146 } catch (e) {} 3147 if (!limit) { 3148 limit = 33; 3149 } 3150 let igFeed = {}; 3151 let usedWidth = 0; 3152 let slider = null; 3153 $section.on('ig-data', function (ev, feed) { 3154 feed = ev.detail || feed; 3155 igFeed = feed; 3156 if (feed.active && feed.items.length) { 3157 buildSlider(); 3158 } 3159 }); 3160 $(window).on('resize.lpui-auto-clean', onResize); 3161 let timer = null; 3162 function onResize() { 3163 clearTimeout(timer); 3164 timer = window.setTimeout(buildSlider, 50); 3165 } 3166 function getLayout(w, n) { 3167 if (w > 1100) { 3168 if (n > 7) { 3169 return { 3170 type: 'type1', 3171 single: 1, 3172 multi: n, 3173 slides: 3, 3174 slider: n > 9 3175 }; 3176 } 3177 if (n > 5) { 3178 return { 3179 type: 'type1', 3180 single: 2, 3181 multi: n, 3182 slides: 3, 3183 slider: false 3184 }; 3185 } 3186 return { 3187 type: 'type1', 3188 single: n, 3189 multi: n, 3190 slides: 3, 3191 slider: n > 3 3192 }; 3193 } else if (w > 880) { 3194 if (n > 4) { 3195 return { 3196 type: 'type2', 3197 single: 1, 3198 multi: n, 3199 slides: 2.5, 3200 slider: n > 7 3201 }; 3202 } 3203 return { 3204 type: 'type1', 3205 single: n, 3206 multi: n, 3207 slides: 3, 3208 slider: n > 3 3209 }; 3210 } else if (w > 767) { 3211 if (n > 4) { 3212 return { 3213 type: 'type3', 3214 single: 1, 3215 multi: n, 3216 slides: 2, 3217 slider: n > 5 3218 }; 3219 } 3220 return { 3221 type: 'type4', 3222 single: n, 3223 multi: n, 3224 slides: 2, 3225 slider: n > 2 3226 }; 3227 } else if (w > 460) { 3228 return { 3229 type: 'type4', 3230 single: n, 3231 multi: n, 3232 slides: 2, 3233 slider: n > 2 3234 }; 3235 } 3236 return { 3237 type: 'type5', 3238 single: n, 3239 multi: n, 3240 slides: 1, 3241 slider: n > 1 3242 }; 3243 } 3244 function ensureClass($el, className) { 3245 if ($el.hasClass(className)) { 3246 return; 3247 } 3248 $el.addClass(className); 3249 } 3250 function makeSquare($el) { 3251 const el = $el[0]; 3252 el.style.width = ''; 3253 el.style.height = ''; 3254 const rect = el.getBoundingClientRect(); 3255 if (rect.width !== rect.height) { 3256 el.style.width = rect.height + 'px'; 3257 } 3258 } 3259 function buildSlider() { 3260 const cWidth = $container[0].getBoundingClientRect().width; 3261 if (cWidth === usedWidth) { 3262 return; 3263 } 3264 $container.empty();
3265 slider = $('<div class="ig-feed-slider"></div>'); 3266 const items = igFeed.items.slice(0, limit); 3267 const layout = getLayout(cWidth, items.length); 3268 let i = 0; 3269 let slide = null; 3270 while (i < layout.single) { 3271 slide = $(`<div class="slide-single ${layout.type}"></div>`).append(itemTemplate(items[i])).appendTo(slider); 3272 i++; 3273 } 3274 while (i < layout.multi) { 3275 slide = $(`<div class="slide-multi ${layout.type}"></div>`).appendTo(slider); 3276 let slideContent = $('<div class="slide-multi-content"></div>').appendTo(slide); 3277 const lim = i + 4; 3278 while (i < lim && i < layout.multi) { 3279 slideContent.append(itemTemplate(items[i])); 3280 i++; 3281 } 3282 } 3283 $container.append(slider); 3284 if (layout.slider) { 3285 $topPrev.removeClass('hidden-control'); 3286 $topNext.removeClass('hidden-control'); 3287 $bottomPrev.removeClass('hidden-control'); 3288 $bottomNext.removeClass('hidden-control'); 3289 let prev, next; 3290 if ($bottomPrev.parent()[0].getBoundingClientRect().width) { 3291 prev = $bottomPrev; 3292 next = $bottomNext; 3293 } else { 3294 prev = $topPrev; 3295 next = $topNext; 3296 makeSquare($topPrev); 3297 makeSquare($topNext); 3298 } 3299 slider.children().each(function () { 3300 this.style.width = this.getBoundingClientRect().width + 'px'; 3301 }); 3302 slider.slick({ 3303 dots: false, 3304 prevArrow: prev, 3305 nextArrow: next, 3306 slidesToScroll: 1, 3307 infinite: false, 3308 slidesToShow: layout.slides 3309 }); 3310 } else { 3311 ensureClass($topPrev, 'hidden-control'); 3312 ensureClass($topNext, 'hidden-control'); 3313 ensureClass($bottomPrev, 'hidden-control'); 3314 ensureClass($bottomNext, 'hidden-control'); 3315 } 3316 } 3317})('section-4145d2d7-e6d2-4c3d-bacd-6c293d4142bb', 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\":\"32443cf2-4f8c-4e0f-8bb4-a310afb42f31\",\"usePageResource\":false,\"sectionIndex\":4}")); 3318} catch(e) { 3319console.log(e); 3320} 3321 3322 var { body } = document; 3323 var globalNav = body.querySelector(':scope > nav'); 3324 var globalSideMenu = body.querySelector(':scope > div.sidemenu'); 3325 3326 document.querySelectorAll('body > .modal .close').forEach(modalCloseBtn => { 3327 modalCloseBtn.addEventListener('click', function() { 3328 window.lpUI.hideClosestModal(modalCloseBtn); 3329 }); 3330 }); 3331 3332 window.addEventListener('click', function() { 3333 document.querySelectorAll('.share-popup').forEach(sharedPopup => { 3334 sharedPopup.style.display = 'none' ; 3335 }); 3336 }); 3337 3338 /* Misc Partials / Addons */ 3339 function initWOW() { 3340 if (wow) { 3341 wow.init(); 3342 wow.scrollHandler(); 3343 setTimeout(function () { 3344 const wowHideStyle = document.getElementById('wow-hide-elements'); 3345 if(wowHideStyle) { 3346 wowHideStyle.disabled = true; 3347 } 3348 }, 1); 3349 } 3350 } 3351 3352 const wowHideElements = document.getElementById('wow-hide-elements'); 3353 if (wowHideElements) { 3354 wowHideElements.disabled = false; 3355 } 3356 3357 initWOW(); 3358 3359 /* Generic Navbar Handling */ 3360 globalNav?.querySelectorAll('.hamburger-component').forEach(hamburgerComponent => { 3361 hamburgerComponent.addEventListener('click', function() { 3362 window.lpUI.sideMenuToggle(); 3363 }); 3364 }); 3365 globalSideMenu?.querySelectorAll('.toggle').forEach(toggleEl => { 3366 toggleEl.addEventListener('click', function() { 3367 window.lpUI.sideMenuToggle(); 3368 }); 3369 }); 3370 3371 document.querySelectorAll('body > nav .sub-nav-container > a, body > div.sidemenu .sub-nav-container > a').forEach(linkEl => { 3372 linkEl.addEventListener('click', function(e) { 3373 e.preventDefault(); 3374 e.stopPropagation();
3375 var subNav = linkEl.parentElement.querySelector(':scope > .sub-nav'); 3376 if (subNav && subNav.classList.contains('visible')){ 3377 subNav.classList.remove('visible'); 3378 } else { 3379 globalNav?.querySelectorAll('.sub-nav-container .sub-nav').forEach(globalSubNav => { 3380 globalSubNav.classList.remove('visible'); 3381 }); 3382 globalSideMenu?.querySelectorAll('.sub-nav').forEach(sideMenuSubNav => { 3383 sideMenuSubNav.classList.remove('visible'); 3384 }); 3385 subNav?.classList.add('visible'); 3386 } 3387 }); 3388 }); 3389 window.addEventListener('click', function() { 3390 document.querySelectorAll('nav .sub-nav.visible, .sidemenu .sub-nav.visible').forEach(subNavEl => { 3391 subNavEl.classList.remove('visible'); 3392 }); 3393 }); 3394 3395 } 3396 3397 document.addEventListener('DOMContentLoaded', lpGlobalInit); 3398 3399 </script>
3399 3400 3401
3401<script type="module"> 3402 function selectorExists(selector) { 3403 return document.querySelector(selector) !== null; 3404 } 3405 3406 // Function to initialize the third-party library 3407 function initParoller(selector = '.my-paroller') { 3408 var $parollerElements = $(selector); 3409 if ($parollerElements.length > 0 && typeof $parollerElements.paroller === 'function') { 3410 $parollerElements.paroller(); 3411 } 3412 } 3413 3414 const parollerSelector = '.my-paroller'; 3415 3416 if (selectorExists(parollerSelector)) { 3417 window.luxuryPresence.libs.loadJs(window.luxuryPresence.libs.jsLibsMap.paroller.jsSrc, function() { 3418 initParoller(parollerSelector); 3419 window.luxuryPresence.libs.jsLibsMap.paroller.isLoaded = true; 3420 }); 3421 } 3422 </script>
3422 3423 3424 <!-- Google Tag Manager (noscript) -->
vendor: 80 bytes, lines 3424-3425
3424 3425 <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
3425GTM-T9SFQGHZ
vendor: 107 bytes, lines 3425-3427
3425" 3426 height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> 3427
3427<!-- End Google Tag Manager --> 3428 3429
3429<script 3430 src="https://cdn.luxurypresence.com/scripts/a11y-widget/latest/widget.js" 3431 data-website-id="db633698-1cbe-4d33-a362-b83e8348acd5" 3432 3433 defer></script>
vendor: 1 bytes, line 3433
3433
3434<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>
vendor: 1 bytes, line 3434
3434
3435<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:'a480ebed8876f862',t:'MTc5MTU4NTk4OA=='};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>
3435</body> 3436</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.