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>Livermore Valley Luxury Real Estate â Discover Your Dream Home</title> 10 <meta property="og:title" content="Livermore Valley Luxury Real Estate â Discover Your Dream Home"> 11 <meta name="twitter:title" content="Livermore Valley Luxury Real Estate â Discover Your Dream Home"> 12 <meta name="description" content="Explore Livermore Valley luxury real estate with expert guidance. Discover exclusive homes and start your journey today!"> 13 <meta property="og:description" content="Explore Livermore Valley luxury real estate with expert guidance. Discover exclusive homes and start your journey today!"> 14 <meta name="twitter:description" content="Explore Livermore Valley luxury real estate with expert guidance. Discover exclusive homes and start your journey today!"> 15 <meta property="og:image" content="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1920/https://media-production.lp-cdn.com/media/4b56bc9e-85f6-4b31-9c03-8ffbc2fe1295"> 16 <meta name="twitter:image" content="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1920/https://media-production.lp-cdn.com/media/4b56bc9e-85f6-4b31-9c03-8ffbc2fe1295"> 17 <meta property="og:url" content="https://couturerealtor.com/"> 18 <link rel="canonical" href="https://couturerealtor.com/"> 19
19<script>(function(html){html.className = html.className.replace(/\bno-js\b/,'js')})(document.documentElement);</script>
19 20 <link rel="preconnect" href="https://fonts.googleapis.com"> 21 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 22 <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Abel:400"><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Quicksand:300,400,500,600,700"> 23 <link rel="preload" href="https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/css/ion.rangeSlider.min.css" as="style" onload="this.onload=null;this.rel='stylesheet'"> 24 <noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/css/ion.rangeSlider.min.css"></noscript> 25 <link rel="icon" type="image/x-icon" href="/favicon.ico"> 26 <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"> 27 <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"> 28 <link rel="icon" type="image/png" sizes="48x48" href="/favicon-48x48.png"> 29 <style id="global-css">:root{--global-primary-font-family:Abel,sans-serif;--global-primary-font-family-short:Abel;--global-secondary-font-family:Quicksand,sans-serif;--global-secondary-font-family-short:Quicksand;--global-body-padding:0px;--global-background-color:#fff;--global-body-font-size:16px;--global-h1-font-size:64px;--global-h2-font-size:42px;--global-h3-font-size:32px;--global-h4-font-size:24px;--global-h5-font-size:12px;--global-h6-font-size:32px;--global-section-padding:96px;}@media (max-width: 768px){:root{--global-section-padding:64px;}}body{padding:0px;background-color:#fff;font-family:Quicksand,sans-serif;font-size:16px;}@media (min-width: 768px){body{padding:0px 0px 0px 0px;}}h1,h2,h3,h4,h5,h6,button{font-family:Abel,sans-serif;}h1{font-size:64px;}h2{font-size:42px;}h3{font-size:32px;}h4{font-size:24px;}h5{font-size:12px;}h6{font-size:32px;}</style> 30 <link rel="stylesheet" type="text/css" href="https://styles.luxurypresence.com/visionary/index.css" /> 31 <style id="website-css">body>div.mobile-contact-wrapper 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;}.mobile-contact-wrapper{position:fixed;z-index:101!important;}.floating-contact-button__btn-search{background:#8C6F45!important;}.floating-contact-button__btn-search:after{color:#fff!important;}:root{--global-h4-font-size:32px;--global-h5-font-size:24px;--global-h6-font-size:20px;}.lp-h1,.lp-h2,.lp-h3{font-variation-settings:'opsz' 44,'GRAD' 0,'slnt' 0,'XTRA' 510,'XOPQ' 96,'YOPQ' 40,'YTLC' 540,'YTUC' 712,'YTAS' 750,'YTDE' -220,'YTFI' 738;}.watermark{font-variation-settings:'GRAD' 0,'slnt' 0,'XTRA' 511,'XOPQ' 96,'YOPQ' 50,'YTLC' 537,'YTUC' 712,'YTAS' 750,'YTDE' -221,'YTFI' 738,'opsz' 44;}@media only screen and (min-width:769px){body.page-sellers .hoverable-section{padding-bottom:0;padding-top:0;}}@media only screen and (max-width:768px){body.page-sellers .hoverable-section{padding-bottom:80px;padding-top:80px;}}@media only screen and (min-width:769px){body.page-buyers .hoverable-section{padding-bottom:0;padding-top:0;}}@media only screen and (max-width:768px){body.page-buyers .hoverable-section{padding-bottom:80px;padding-top:80px;}}@media only screen and (min-width:769px){.page-about-sir .lp-vertical-paddings:not([class*=pb-]){padding-bottom:128px;padding-top:128px;}}@media only screen and (max-width:768px){.page-about-sir .lp-vertical-paddings:not([class*=pb-]){padding-bottom:80px;padding-top:80px;}}@media only screen and (min-width:769px){.page-sir-auction .lp-vertical-paddings:not([class*=pb-]){padding-bottom:128px;padding-top:128px;}}@media only screen and (max-width:768px){.page-sir-auction .lp-vertical-paddings:not([class*=pb-]){padding-bottom:80px;padding-top:80px;}}.page-concierge-auctions .custom-intro__title:after{content:"";background-image:url(https://media-production.lp-cdn.com/media/97d074d2-9190-4504-942c-236898102d72);height:150px;width:500px;max-width:100%;-webkit-filter:invert(1);filter:invert(1);-webkit-background-size:contain;background-size:contain;background-repeat:no-repeat;display:block;background-position-x:center;}@media only screen and (max-width:768px){.page-concierge-auctions .custom-intro__title:after{height:100px;}}.page-concierge-auctions .custom-intro__title{font-size:0;}:root{--primary:#8c6f45;--secondary:#000000;--accent:#852b6b;--blocking:#f5f2ee;--black:#000;--white:#FFF;--light-gray:#bbb;--dark-gray:#666;--lp-color-error:#F00;}h1,h2,h3,h4,h5,.lp-h1,.lp-h2,.lp-h3,.lp-h4,.lp-h5{text-transform:uppercase!important;}#global-sidemenu.sidemenu a,#global-navbar a{text-transform:uppercase;}#global-sidemenu.sidemenu button,#global-navbar button{text-transform:uppercase;}
31h1{font-size:var(--lp-h1-font-size)!important;}.lp-input,.lp-input-group .lp-input,.lp-input:is(:placeholder-shown){background:var(--white)!important;border:1px solid var(--light-gray)!important;color:var(--black);}.lp-input:hover,.lp-input-group .lp-input:hover,.lp-input:is(:placeholder-shown):hover,.lp-input:focus,.lp-input-group .lp-input:focus,.lp-input:is(:placeholder-shown):focus,.lp-input:target,.lp-input-group .lp-input:target,.lp-input:is(:placeholder-shown):target{background-color:var(--white)!important;border-color:var(--primary)!important;color:var(--black)!important;}.custom-select-menu .custom-select-content{background:var(--white)!important;border:1px solid transparent;}.custom-select-menu .custom-select-content .custom-select-item{color:var(--black);}.custom-select-menu .custom-select-content .custom-select-item:hover,.custom-select-menu .custom-select-content .custom-select-item:focus,.custom-select-menu .custom-select-content .custom-select-item:target{background-color:var(--primary);color:var(--white);}.custom-select-toggle:is(.is-placeholder),.mls-properties-with-map-filters__grid-btn:is(.is-placeholder){border-color:var(--light-gray);}.custom-select-toggle:is(.open),.custom-select-toggle:not(.is-placeholder),.mls-properties-with-map-filters__grid-btn:is(.opened),.mls-properties-with-map-filters__grid-btn:not(.is-placeholder){border-color:var(--primary);}#global-mobile-contact .search-btn{background:var(--primary)!important;border:1px solid var(--primary);}#global-mobile-contact .search-btn:before{background-color:var(--white)!important;}#global-mobile-contact .search-btn:hover{background:transparent!important;}#global-mobile-contact .search-btn:hover:before{background-color:var(--primary)!important;}#global-mobile-contact .pop-up{box-shadow:0px 10px 20px var(--dark-gray);max-width:-webkit-min-width;max-width:-moz-min-width;max-width:min-width;}#global-mobile-contact .pop-up .lp-container{padding:64px;}@media (max-width: 1366px){#global-mobile-contact .pop-up .lp-container{padding:42px;}}@media (max-width: 768px){#global-mobile-contact .pop-up .lp-container{padding:20px;}}@media (max-width: 768px){#global-mobile-contact .pop-up{border-radius:0;}}#global-mobile-contact .pop-up .contact-form{padding:0;}#global-mobile-contact .pop-up .contact-form__container{padding:0;border:none;}#modal-global-contact-us .contact-form-modal__bg-image{content:url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/17338084-5da1-458f-947a-bfe1776a6de7');}#modal-global-contact-us .contact-form-modal-details:not(.only-mobile){padding-right:5vw;}#modal-global-contact-us .contact-form-modal-agent{gap:3rem;}#modal-global-contact-us .contact-form-modal-agent__contact{max-width:100%;}#modal-global-contact-us .contact-form-modal-details__title{max-width:100%;}@media (max-width: 768px){#modal-global-contact-us .contact-form-modal__close{padding:0;right:10vw;}}#modal-global-contact-us .contact-form-modal__close:after{background-color:var(--white);}@media (max-width: 768px){#modal-global-contact-us .contact-form-modal__close:after{background-color:var(--black);}}#modal-global-contact-us .contact-form-modal-agent a{color:var(--black);text-decoration-color:var(--dark-gray);-webkit-transition:0.3s;transition:0.3s;}#modal-global-contact-us .contact-form-modal-agent a:hover{color:var(--primary);text-decoration-color:var(--primary);}#global-navbar .header .header-logo{height:100px;max-width:unset!important;}#global-navbar .header .header-logo img{width:100%;}@media (max-width: 768px){#global-navbar .header .header-logo{height:50px;}}#global-navbar .header .header-navigation{font-size:14px;}@media (max-width: 1440px){#global-navbar .header .header-navigation{gap:20px;}}#global-navbar .header:not(.scroll) .header-logo__img--light{display:block;}#global-navbar .header:not(.scroll) .header-logo__img--dark{display:none;}#global-navbar .header:is(.scroll) .header-logo__img--light{display:block;}#global-navbar .header:is(.scroll) .header-logo__img--dark{display:none;}#global-navbar .header .header-navigation__link:before{-webkit-transition:0.3s;transition:0.3s;}#global-navbar .header:not(.scroll){background-color:transparent!important;color:var(--white)!important;}#global-navbar .header:not(.scroll) .header-navigation__link:before{background-color:var(--white);}#global-navbar .header:not(.scroll) .header-navigation__link:after{background-color:var(--black);}#global-navbar .header:not(.scroll) .header-hamburger-btn{background-color:var(--white);border-color:var(--white);}#global-navbar .header:not(.scroll) .header-hamburger-btn:before,#global-navbar .header:not(.scroll) .header-hamburger-btn:after{background-color:var(--primary);-webkit-transition:0.3s;transition:0.3s;}#global-navbar .header:not(.scroll) .header-hamburger-btn:hover{background-color:transparent;border-color:var(--white);}#global-navbar .header:not(.scroll) .header-hamburger-btn:hover:before,#global-navbar .header:not(.scroll) .header-hamburger-btn:hover:after{background-color:var(--white);}#global-navbar .header:is(.scroll){background-color:var(--primary)!important;color:var(--white)!important;}#global-navbar .header:is(.scroll) .header-navigation__link:before{background-color:var(--white);}#global-navbar .header:is(.scroll) .header-navigation__link:after{background-color:var(--white);}#global-navbar .header:is(.scroll) .header-hamburger-btn{background-color:var(--white);border-color:var(--white);}#global-navbar .header:is(.scroll) .header-hamburger-btn:before,#global-navbar .header:is(.scroll) .header-hamburger-btn:after{background-color:var(--primary);-webkit-transition:0.3s;transition:0.3s;}#global-navbar .header:is(.scroll) .header-hamburger-btn:hover{background-color:transparent;border-color:var(--white);}#global-navbar .header:is(.scroll) .header-hamburger-btn:hover:before,#global-navbar .header:is(.scroll) .header-hamburger-btn:hover:after{background-color:var(--white);}.page-pd #global-navbar .header:not(.scroll),.page-pd #global-navbar .header:is(.scroll){background-color:var(--primary)!important;color:var(--white)!important;}.page-pd #global-navbar .header:not(.scroll) .header-navigation__link:before,.page-pd #global-navbar .header:is(.scroll) .header-navigation__link:before{background-color:var(--white);}.page-pd #global-navbar .header:not(.scroll) .header-hamburger-btn,.page-pd #global-navbar .header:is(.scroll) .header-hamburger-btn{background-color:var(--white);border-color:var(--white);}.page-pd #global-navbar .header:not(.scroll) .header-hamburger-btn:before,.page-pd #global-navbar .header:is(.scroll) .header-hamburger-btn:before,.page-pd #global-navbar .header:not(.scroll) .header-hamburger-btn:after,.page-pd #global-navbar .header:is(.scroll) .header-hamburger-btn:after{background-color:var(--primary);-webkit-transition:0.3s;transition:0.3s;}.page-pd #global-navbar .header:not(.scroll) .header-hamburger-btn:hover,.page-pd #global-navbar .header:is(.scroll) .header-hamburger-btn:hover{background-color:transparent;border-color:var(--white);}.page-pd #global-navbar .header:not(.scroll) .header-hamburger-btn:hover:before,.page-pd #global-navbar .header:is(.scroll) .header-hamburger-btn:hover:before,.page-pd #global-navbar .header:not(.scroll) .header-hamburger-btn:hover:after,.page-pd #global-navbar .header:is(.scroll) .header-hamburger-btn:hover:after{background-color:var(--white);}#global-sidemenu .sidemenu-navigation__link--sub-nav{text-transform:uppercase;}@media (min-width: 768px) and (max-width: 1919px){#global-sidemenu{padding:96px 48px;}#global-sidemenu .sidemenu-navigation__item .sidemenu-navigation__link{font-size:20px;}#global-sidemenu .sidemenu-navigation-sub-nav__link{font-size:14px;}}#global-sidemenu .sidemenu-wrapper{width:100%;}@media (max-width: 768px){#global-sidemenu .sidemenu-wrapper{padding:140px 24px 24px 24px!important;}}#global-sidemenu .sidemenu-navigation__item a:hover,#global-sidemenu .sidemenu-navigation__link--active{color:var(--primary);}#global-sidemenu .sidemenu-navigation__link:after{background-color:var(--black);}#global-sidemenu .sidemenu-navigation__link--active:after{background-color:var(--primary);}#global-sidemenu .sidemenu-navigation-sub-nav__item a{text-decoration-color:var(--dark-gray);-webkit-transition:0.3s;transition:0.3s;}#global-sidemenu .sidemenu-navigation-sub-nav__item a:hover{text-decoration-color:var(--primary);}#global-sidemenu .sidemenu-nav-holder,#global-sidemenu .sidemenu-navigation,#global-sidemenu .sidemenu-navigation__item:has(.sidemenu-navigation__link--sub-nav),#global-sidemenu .sidemenu-navigation-sub-nav{gap:20px;}#global-sidemenu .sidemenu-navigation-sub-nav__item{padding-bottom:0;margin-bottom:5px;}#global-sidemenu .sidemenu-close{background-color:var(--primary);border-color:var(--primary);}
31#global-sidemenu .sidemenu-close:after{background-color:var(--white);}#global-sidemenu .sidemenu-close:hover{background-color:transparent;border-color:var(--primary);}#global-sidemenu .sidemenu-close:hover:after{background-color:var(--primary);}#global-sidemenu .sidemenu-footer a:not(.lp-socials__link){text-transform:unset;color:var(--black);text-decoration-color:var(--dark-gray);-webkit-transition:0.3s;transition:0.3s;}#global-sidemenu .sidemenu-footer a:not(.lp-socials__link):hover{color:var(--primary);text-decoration-color:var(--primary);}#global-footer .footer-info,#global-footer .footer-contact-row,#global-footer .footer-copyright__privacy,#global-footer .footer-copyright__privacy-policy,#global-footer .footer-navigation__item+.footer-navigation__item{border-color:var(--light-gray);}#global-footer .footer-copyright__powered,#global-footer .footer-copyright__privacy{text-transform:uppercase;}#global-footer .footer__col-description{max-width:100%;}@media (max-width: 768px){#global-footer .footer__section-content{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;gap:40px;}#global-footer .footer__col-content,#global-footer .footer__col-description{max-width:100%!important;}#global-footer .footer-bottom-row{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;gap:20px;}#global-footer .footer-copyright{width:100%;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}}#global-footer a:not(.lp-socials__link){text-transform:unset;color:var(--black);text-decoration-line:underline;text-underline-offset:2px!important;text-decoration-color:var(--dark-gray);-webkit-transition:0.3s;transition:0.3s;}#global-footer a:not(.lp-socials__link):hover{color:var(--primary);text-decoration-color:var(--primary);}#global-footer .footer-logos-row img{max-width:unset;max-height:110px;}@media (max-width: 768px){#global-footer .footer-logos-row img{max-height:50px;}}.lp-title-group,.testimonials-slider-heading{max-width:100%;}.pagination-style-1 ul li:first-of-type a:hover:after,.pagination-style-1 ul li:last-of-type a:hover:after{background:var(--white)!important;}.lp-socials{gap:10px;}@media (max-width: 768px){.lp-socials{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;}}.pac-item:hover span{font-weight:bold;color:var(--primary)!important;}.custom-intro__content-box{background-color:transparent;}.custom-intro__pre-title,.custom-intro__title,.custom-intro__description{color:var(--white);}.custom-intro__scroll-btn{background:var(--white);border-color:var(--white);}.custom-intro__scroll-btn:after{background:var(--primary);}.custom-intro__scroll-btn:hover{background:transparent;border-color:var(--white);}.custom-intro__scroll-btn:hover:after{background:var(--white);}.lp-tcr-content a{color:var(--black);text-decoration-color:var(--dark-gray)!important;text-underline-offset:2px!important;}.lp-tcr-content a:hover{color:var(--primary);text-decoration-color:var(--primary);}</style> 32 <style id="wow-hide-elements">.wow{visibility:hidden!important}</style> 33 <style id="page-css"> 34 #section-c1234c57-c7ef-4bf5-a255-f88b98dbc080{color:#ffffff;--fontColor:#ffffff;--fontColor_H:0;--fontColor_S:0%;--fontColor_L:100%;--fontColor_A:1;--fontColor_darkenDir:-1;--bgColor:#1a1a1a;--bgColor_H:0;--bgColor_S:0%;--bgColor_L:10%;--bgColor_A:1;--bgColor_darkenDir:1;}#section-c1234c57-c7ef-4bf5-a255-f88b98dbc080 .opening-search-sound{display:none!important;pointer-events:none!important;}#section-c1234c57-c7ef-4bf5-a255-f88b98dbc080 .lp-icon:after{--iconColor:var(--accent);}#section-c1234c57-c7ef-4bf5-a255-f88b98dbc080 .opening-search__predefined-links{border-color:var(--light-gray);}#section-c1234c57-c7ef-4bf5-a255-f88b98dbc080 .opening-search__search-results{background-color:var(--white);}#section-c1234c57-c7ef-4bf5-a255-f88b98dbc080 .opening-search__search-results .opening-search__results-link{color:var(--black);}#section-c1234c57-c7ef-4bf5-a255-f88b98dbc080 .opening-search__search-results .opening-search__results-link:hover,#section-c1234c57-c7ef-4bf5-a255-f88b98dbc080 .opening-search__search-results .opening-search__results-link:focus,#section-c1234c57-c7ef-4bf5-a255-f88b98dbc080 .opening-search__search-results .opening-search__results-link:target{background-color:var(--primary);color:var(--white);}#section-c1234c57-c7ef-4bf5-a255-f88b98dbc080 .full-screen-video-component .video-wrapper.hidable{display:block;}@media (max-width: 900px){#section-c1234c57-c7ef-4bf5-a255-f88b98dbc080 .full-screen-video-component .poster{display:none;}}@media (max-width: 768px){#section-c1234c57-c7ef-4bf5-a255-f88b98dbc080 .opening-search__pre-title{margin-bottom:unset;}}#section-c1234c57-c7ef-4bf5-a255-f88b98dbc080 >*:last-child{position:relative;}#section-c1234c57-c7ef-4bf5-a255-f88b98dbc080 .overlay-component{position:absolute;top:0;bottom:0;left:0;right:0;background-color:var(--overlay-color, var(--section-overlay, rgba(0, 0, 0, 0.3)));transition-property:opacity;transition-timing-function:linear;}#section-c1234c57-c7ef-4bf5-a255-f88b98dbc080 .video-wrapper{position:absolute;top:0;left:0;height:100%;width:100%;}@media screen and (max-width: 900px){#section-c1234c57-c7ef-4bf5-a255-f88b98dbc080 .video-wrapper.hidable{display:none;}}#section-c1234c57-c7ef-4bf5-a255-f88b98dbc080 .full-screen-video-component{position:relative;height:100%;overflow:hidden;}#section-c1234c57-c7ef-4bf5-a255-f88b98dbc080 video{position:absolute;z-index:-1000;width:100%;object-fit:cover;}@media all and (-ms-high-contrast: none),(-ms-high-contrast: active){#section-c1234c57-c7ef-4bf5-a255-f88b98dbc080 video{overflow:hidden;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-moz-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);min-width:100%;min-height:100%;width:auto;height:auto!important;}}#section-c1234c57-c7ef-4bf5-a255-f88b98dbc080 .poster{display:none;position:absolute;top:0;left:0;bottom:0;right:0;z-index:-1000;background:center center/cover;}@media screen and (max-width: 900px){#section-c1234c57-c7ef-4bf5-a255-f88b98dbc080 .poster{display:block;}}#section-4e9be597-0c57-4cc1-ad9e-26698df89dc9{color:#000;--fontColor:#000;--fontColor_H:0;--fontColor_S:0%;--fontColor_L:0%;--fontColor_A:1;--fontColor_darkenDir:1;--bgColor:#f5f2ee;--bgColor_H:34;--bgColor_S:26%;--bgColor_L:95%;--bgColor_A:1;--bgColor_darkenDir:-1;--section-padding-top:calc(4 / 4 * var(--global-section-padding));--section-padding-bottom:calc(2 / 4 * var(--global-section-padding));background-color:#f5f2ee;}#section-4e9be597-0c57-4cc1-ad9e-26698df89dc9 .lp-arrow{border-color:var(--primary);background:var(--primary);}#section-4e9be597-0c57-4cc1-ad9e-26698df89dc9 .lp-arrow:after{background:var(--white);}
34#section-4e9be597-0c57-4cc1-ad9e-26698df89dc9 .lp-arrow:hover:not(:disabled){border-color:var(--primary);background:Transparent;}#section-4e9be597-0c57-4cc1-ad9e-26698df89dc9 .lp-arrow:hover:not(:disabled):after{background:var(--primary);}#section-4e9be597-0c57-4cc1-ad9e-26698df89dc9 .stats-list__item{min-height:unset;}#section-4e9be597-0c57-4cc1-ad9e-26698df89dc9 .stats-list__title{font-size:34px;}#section-4e9be597-0c57-4cc1-ad9e-26698df89dc9>div:last-child{padding-top:calc(4 / 4 * var(--global-section-padding))!important;padding-bottom:calc(2 / 4 * var(--global-section-padding))!important;}#section-fba75ce4-28b8-44ae-9e59-29052c7ca6c7{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;--section-padding-top:calc(4 / 4 * var(--global-section-padding));--section-padding-bottom:calc(0 / 4 * var(--global-section-padding));background-color:#fff;}#section-fba75ce4-28b8-44ae-9e59-29052c7ca6c7>div:last-child{padding-top:calc(4 / 4 * var(--global-section-padding))!important;padding-bottom:calc(0 / 4 * var(--global-section-padding))!important;}#section-57e3def3-0b54-4364-ba92-3c2da73df25a{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;--section-padding-top:calc(0 / 4 * var(--global-section-padding));--section-padding-bottom:calc(4 / 4 * var(--global-section-padding));background-color:#fff;}#section-57e3def3-0b54-4364-ba92-3c2da73df25a .gallery-style-menu-grid{margin-left:auto;margin-right:auto;}#section-57e3def3-0b54-4364-ba92-3c2da73df25a .gallery-style-menu-title-group{max-width:100%;margin-bottom:64px;}#section-57e3def3-0b54-4364-ba92-3c2da73df25a .gallery-style-menu-grid__title{text-align:center;}#section-57e3def3-0b54-4364-ba92-3c2da73df25a .gallery-style-menu-grid__item{aspect-ratio:1/1;}#section-57e3def3-0b54-4364-ba92-3c2da73df25a>div:last-child{padding-top:calc(0 / 4 * var(--global-section-padding))!important;padding-bottom:calc(4 / 4 * var(--global-section-padding))!important;}#section-94299c24-639b-4cf2-a15f-710c04b9b187{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;--section-padding-top:calc(0 / 4 * var(--global-section-padding));--section-padding-bottom:calc(4 / 4 * var(--global-section-padding));background-color:#fff;}#section-94299c24-639b-4cf2-a15f-710c04b9b187>div:last-child{padding-top:calc(0 / 4 * var(--global-section-padding))!important;padding-bottom:calc(4 / 4 * var(--global-section-padding))!important;}#section-c8a0ad1c-794d-403e-bb62-eb33fbb26159{color:#fff;--fontColor:#fff;--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;--section-padding-top:calc(4 / 4 * var(--global-section-padding));--section-padding-bottom:calc(4 / 4 * var(--global-section-padding));background-color:#fff;--gradient-color:var(--overlay-color, rgba(0, 0, 0, 0.3));background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1280/https://media-production.lp-cdn.com/media/65f77adf-1d59-4a94-a18f-063f31ed4050');background-repeat:no-repeat;-webkit-background-position:center;background-position:center;-webkit-background-size:cover;background-size:cover;}#section-c8a0ad1c-794d-403e-bb62-eb33fbb26159 .testimonials-slider-slider__quotes{background:var(--accent);}#section-c8a0ad1c-794d-403e-bb62-eb33fbb26159 .testimonials-slider-slider__quotes:after{--iconColor:var(--white);}#section-c8a0ad1c-794d-403e-bb62-eb33fbb26159 .lp-arrow{border-color:var(--white);background:var(--white);}#section-c8a0ad1c-794d-403e-bb62-eb33fbb26159 .lp-arrow:after{background:var(--primary);}
34#section-c8a0ad1c-794d-403e-bb62-eb33fbb26159 .lp-arrow:hover:not(:disabled){border-color:var(--white);background:Transparent;}#section-c8a0ad1c-794d-403e-bb62-eb33fbb26159 .lp-arrow:hover:not(:disabled):after{background:var(--white);}#section-c8a0ad1c-794d-403e-bb62-eb33fbb26159>div:last-child{padding-top:calc(4 / 4 * var(--global-section-padding))!important;padding-bottom:calc(4 / 4 * var(--global-section-padding))!important;}@media (min-width: 960px) and (orientation: landscape){#section-c8a0ad1c-794d-403e-bb62-eb33fbb26159{background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1280/https://media-production.lp-cdn.com/media/65f77adf-1d59-4a94-a18f-063f31ed4050');}}@media (min-width: 1280px) and (orientation: landscape){#section-c8a0ad1c-794d-403e-bb62-eb33fbb26159{background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1920/https://media-production.lp-cdn.com/media/65f77adf-1d59-4a94-a18f-063f31ed4050');}}@media (min-width: 1920px) and (orientation: landscape){#section-c8a0ad1c-794d-403e-bb62-eb33fbb26159{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/65f77adf-1d59-4a94-a18f-063f31ed4050');}}@media (min-width: 2560px) and (orientation: landscape){#section-c8a0ad1c-794d-403e-bb62-eb33fbb26159{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/65f77adf-1d59-4a94-a18f-063f31ed4050');}}#section-9e23a9b4-f0cc-44ed-89e4-471e9a166f0f{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;--section-padding-top:calc(4 / 4 * var(--global-section-padding));--section-padding-bottom:calc(4 / 4 * var(--global-section-padding));background-color:#fff;}#section-9e23a9b4-f0cc-44ed-89e4-471e9a166f0f .properties-slider__arrows{gap:12px;}@media (max-width: 768px){#section-9e23a9b4-f0cc-44ed-89e4-471e9a166f0f .properties-slider__arrow--next{margin-left:0px;}}#section-9e23a9b4-f0cc-44ed-89e4-471e9a166f0f .properties-slider-card__tag{background:var(--accent);color:var(--white);opacity:1;text-transform:uppercase;}#section-9e23a9b4-f0cc-44ed-89e4-471e9a166f0f .properties-slider-card__feature{background:var(--accent);color:var(--white);}#section-9e23a9b4-f0cc-44ed-89e4-471e9a166f0f .properties-slider__title{margin-bottom:0;}#section-9e23a9b4-f0cc-44ed-89e4-471e9a166f0f .lp-arrow{border-color:var(--primary);background:var(--primary);}#section-9e23a9b4-f0cc-44ed-89e4-471e9a166f0f .lp-arrow:after{background:var(--white);}#section-9e23a9b4-f0cc-44ed-89e4-471e9a166f0f .lp-arrow:hover:not(:disabled){border-color:var(--primary);background:Transparent;}#section-9e23a9b4-f0cc-44ed-89e4-471e9a166f0f .lp-arrow:hover:not(:disabled):after{background:var(--primary);}#section-9e23a9b4-f0cc-44ed-89e4-471e9a166f0f .properties-slider-card__address{text-transform:uppercase;}#section-9e23a9b4-f0cc-44ed-89e4-471e9a166f0f>div:last-child{padding-top:calc(4 / 4 * var(--global-section-padding))!important;padding-bottom:calc(4 / 4 * var(--global-section-padding))!important;}#section-fb7349af-e14f-467a-9daf-07d33ead2bb9{color:#000;--fontColor:#000;--fontColor_H:0;--fontColor_S:0%;--fontColor_L:0%;--fontColor_A:1;--fontColor_darkenDir:1;--bgColor:#ffffff;--bgColor_H:0;--bgColor_S:0%;--bgColor_L:100%;--bgColor_A:1;--bgColor_darkenDir:-1;--section-padding-top:calc(0 / 4 * var(--global-section-padding));--section-padding-bottom:calc(4 / 4 * var(--global-section-padding));background-color:#ffffff;}#section-fb7349af-e14f-467a-9daf-07d33ead2bb9 .lp-arrow{border-color:var(--primary);background:var(--primary);}#section-fb7349af-e14f-467a-9daf-07d33ead2bb9 .lp-arrow:after{background:var(--white);}
34#section-fb7349af-e14f-467a-9daf-07d33ead2bb9 .lp-arrow:hover:not(:disabled){border-color:var(--primary);background:Transparent;}#section-fb7349af-e14f-467a-9daf-07d33ead2bb9 .lp-arrow:hover:not(:disabled):after{background:var(--primary);}#section-fb7349af-e14f-467a-9daf-07d33ead2bb9 .neighborhoods-slider__title{max-width:100%;}#section-fb7349af-e14f-467a-9daf-07d33ead2bb9>div:last-child{padding-top:calc(0 / 4 * var(--global-section-padding))!important;padding-bottom:calc(4 / 4 * var(--global-section-padding))!important;}#section-0cae3508-3cc4-48dc-9582-6f81a06f07fb{color:#000;--fontColor:#000;--fontColor_H:0;--fontColor_S:0%;--fontColor_L:0%;--fontColor_A:1;--fontColor_darkenDir:1;--bgColor:#ffffff;--bgColor_H:0;--bgColor_S:0%;--bgColor_L:100%;--bgColor_A:1;--bgColor_darkenDir:-1;background-color:#ffffff;--gradient-color:var(--overlay-color, rgba(0, 0, 0, 0.3));background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1280/https://media-production.lp-cdn.com/media/f3e471ba-2d4a-492d-bda6-9aa7f258512b');background-repeat:no-repeat;-webkit-background-position:center;background-position:center;-webkit-background-size:cover;background-size:cover;}#section-0cae3508-3cc4-48dc-9582-6f81a06f07fb .home-valuation-tabs__item{background-color:var(--white);border:1px solid var(--primary);color:var(--primary);}#section-0cae3508-3cc4-48dc-9582-6f81a06f07fb .home-valuation__tab--active{background-color:var(--primary);border-color:var(--primary);color:var(--white);}#section-0cae3508-3cc4-48dc-9582-6f81a06f07fb .home-valuation-info__pre-title.home-valuation__pre-title--with-title,#section-0cae3508-3cc4-48dc-9582-6f81a06f07fb .home-valuation-info__description p{color:var(--white);}#section-0cae3508-3cc4-48dc-9582-6f81a06f07fb .lp-icon:after{--iconColor:var(--accent)!important;}#section-0cae3508-3cc4-48dc-9582-6f81a06f07fb .custom-select-toggle:after{background-color:var(--primary);}@media (min-width: 960px) and (orientation: landscape){#section-0cae3508-3cc4-48dc-9582-6f81a06f07fb{background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1280/https://media-production.lp-cdn.com/media/f3e471ba-2d4a-492d-bda6-9aa7f258512b');}}@media (min-width: 1280px) and (orientation: landscape){#section-0cae3508-3cc4-48dc-9582-6f81a06f07fb{background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1920/https://media-production.lp-cdn.com/media/f3e471ba-2d4a-492d-bda6-9aa7f258512b');}}@media (min-width: 1920px) and (orientation: landscape){#section-0cae3508-3cc4-48dc-9582-6f81a06f07fb{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/f3e471ba-2d4a-492d-bda6-9aa7f258512b');}}@media (min-width: 2560px) and (orientation: landscape){#section-0cae3508-3cc4-48dc-9582-6f81a06f07fb{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/f3e471ba-2d4a-492d-bda6-9aa7f258512b');}}#section-346316c9-a364-46cc-8a36-f6113f1201e3{color:#000;--fontColor:#000;--fontColor_H:0;--fontColor_S:0%;--fontColor_L:0%;--fontColor_A:1;--fontColor_darkenDir:1;--bgColor:#ffffff;--bgColor_H:0;--bgColor_S:0%;--bgColor_L:100%;--bgColor_A:1;--bgColor_darkenDir:-1;--section-padding-top:calc(4 / 4 * var(--global-section-padding));--section-padding-bottom:calc(4 / 4 * var(--global-section-padding));background-color:#ffffff;}#section-346316c9-a364-46cc-8a36-f6113f1201e3>div:last-child{padding-top:calc(4 / 4 * var(--global-section-padding))!important;padding-bottom:calc(4 / 4 * var(--global-section-padding))!important;}#section-2c090225-3f15-4437-9733-8b420503d690{color:#000;--fontColor:#000;--fontColor_H:0;--fontColor_S:0%;--fontColor_L:0%;--fontColor_A:1;--fontColor_darkenDir:1;--bgColor:#f5f2ee;--bgColor_H:34;--bgColor_S:26%;--bgColor_L:95%;--bgColor_A:1;--bgColor_darkenDir:-1;--section-padding-top:calc(4 / 4 * var(--global-section-padding));--section-padding-bottom:calc(4 / 4 * var(--global-section-padding));background-color:#f5f2ee;}#section-2c090225-3f15-4437-9733-8b420503d690 div.newsletter-signup .newsletter-signup__form-item{background-color:#fff;border:1px solid #999;color:#000;}#section-2c090225-3f15-4437-9733-8b420503d690 .lp-input:-webkit-autofill,#section-2c090225-3f15-4437-9733-8b420503d690 .lp-input:-webkit-autofill:focus,#section-2c090225-3f15-4437-9733-8b420503d690 .lp-input:-webkit-autofill:hover{-webkit-text-fill-color:#000!important;}#section-2c090225-3f15-4437-9733-8b420503d690>div:last-child{padding-top:calc(4 / 4 * var(--global-section-padding))!important;padding-bottom:calc(4 / 4 * var(--global-section-padding))!important;}#section-5bb607e9-9670-455b-9652-8c9d1b0b1c63{color:#fff;--fontColor:#fff;--fontColor_H:0;--fontColor_S:0%;--fontColor_L:100%;--fontColor_A:1;--fontColor_darkenDir:-1;--bgColor:#ffffff;--bgColor_H:0;--bgColor_S:0%;--bgColor_L:100%;--bgColor_A:1;--bgColor_darkenDir:-1;background-color:#ffffff;--gradient-color:var(--overlay-color, rgba(0, 0, 0, 0.4));background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1280/https://media-production.lp-cdn.com/media/a892a189-5cc0-4b9c-8769-0ad398b88f67');background-repeat:no-repeat;-webkit-background-position:center;background-position:center;-webkit-background-size:cover;background-size:cover;}#section-5bb607e9-9670-455b-9652-8c9d1b0b1c63 .newsletter-contact-cta__wrapper{-webkit-box-pack:center;-ms-flex-pack:center;
34-webkit-justify-content:center;justify-content:center;}#section-5bb607e9-9670-455b-9652-8c9d1b0b1c63 .newsletter-contact-cta__word-divide:before{background:var(--light-gray);opacity:1;}#section-5bb607e9-9670-455b-9652-8c9d1b0b1c63 .newsletter-contact-cta__word-divide:after{background:var(--light-gray);opacity:1;}#section-5bb607e9-9670-455b-9652-8c9d1b0b1c63 .newsletter-contact-cta__right-back{display:none;}#section-5bb607e9-9670-455b-9652-8c9d1b0b1c63 .newsletter-contact-cta__link{-webkit-text-decoration:underline;text-decoration:underline;text-underline-offset:4px;text-decoration-color:var(--dark-gray);}#section-5bb607e9-9670-455b-9652-8c9d1b0b1c63 .newsletter-contact-cta__link:hover{color:var(--primary)!important;text-decoration-color:var(--primary);}#section-5bb607e9-9670-455b-9652-8c9d1b0b1c63 .newsletter-contact-cta__description{opacity:1;font-weight:500;}#section-5bb607e9-9670-455b-9652-8c9d1b0b1c63{background-attachment:fixed;-webkit-background-position:center;background-position:center;background-repeat:no-repeat;-webkit-background-size:cover;background-size:cover;}@media only screen and (max-width: 768px){#section-5bb607e9-9670-455b-9652-8c9d1b0b1c63{background-attachment:fixed;}}#section-5bb607e9-9670-455b-9652-8c9d1b0b1c63 .newsletter-contact-cta__heading{max-width:100%!important;}@media (min-width: 768px){#section-5bb607e9-9670-455b-9652-8c9d1b0b1c63 .newsletter-contact-cta__heading h2{max-width:26ch;margin-left:auto;margin-right:auto;}}@media (min-width: 960px) and (orientation: landscape){#section-5bb607e9-9670-455b-9652-8c9d1b0b1c63{background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1280/https://media-production.lp-cdn.com/media/a892a189-5cc0-4b9c-8769-0ad398b88f67');}}@media (min-width: 1280px) and (orientation: landscape){#section-5bb607e9-9670-455b-9652-8c9d1b0b1c63{background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1920/https://media-production.lp-cdn.com/media/a892a189-5cc0-4b9c-8769-0ad398b88f67');}}@media (min-width: 1920px) and (orientation: landscape){#section-5bb607e9-9670-455b-9652-8c9d1b0b1c63{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/a892a189-5cc0-4b9c-8769-0ad398b88f67');}}@media (min-width: 2560px) and (orientation: landscape){#section-5bb607e9-9670-455b-9652-8c9d1b0b1c63{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/a892a189-5cc0-4b9c-8769-0ad398b88f67');}}#section-2b120f4d-e619-4190-9fac-7fc3abaef672{color:#1a1a1a;--fontColor:#1a1a1a;--fontColor_H:0;--fontColor_S:0%;--fontColor_L:10%;--fontColor_A:1;--fontColor_darkenDir:1;--bgColor:#ffffff;--bgColor_H:0;--bgColor_S:0%;--bgColor_L:100%;--bgColor_A:1;--bgColor_darkenDir:-1;background-color:#ffffff;}body>div.sidemenu{background-color:rgba(255, 255, 255, 1);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:rgba(255, 255, 255, 1);--bgColor_H:0;--bgColor_S:0%;--bgColor_L:100%;--bgColor_A:1;--bgColor_darkenDir:-1;}footer{background-color:rgba(255, 255, 255, 1);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:rgba(255, 255, 255, 1);--bgColor_H:0;--bgColor_S:0%;--bgColor_L:100%;--bgColor_A:1;--bgColor_darkenDir:-1;} 35 </style> 36 <style id="custom-style-css">.button-style-1{color:rgba(255, 255, 255, 1)!important;background-color:rgba(140, 111, 69, 1)!important;border-color:rgba(140, 111, 69, 1)!important;}.button-style-1:hover{color:rgba(140, 111, 69, 1)!important;background-color:rgba(0, 0, 0, 0)!important;border-color:rgba(140, 111, 69, 1)!important;}.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(140, 111, 69, 1)!important;border-color:rgba(140, 111, 69, 1)!important;}.pagination-style-1 li.active a{color:rgba(255, 255, 255, 1)!important;background-color:rgba(140, 111, 69, 1)!important;border-color:rgba(140, 111, 69, 1)!important;}.social_icons-style-1 a{border-color:rgba(140, 111, 69, 1)!important;background-color:rgba(140, 111, 69, 1)!important;color:rgba(255, 255, 255, 1)!important;}.social_icons-style-1 a:hover{border-color:rgba(140, 111, 69, 1)!important;background-color:rgba(0, 0, 0, 0)!important;color:rgba(140, 111, 69, 1)!important;}.social_icons-style-1 a i{color:inherit!important;}
36.social_icons-style-1 a svg,.social_icons-style-1 a svg path{fill:currentColor!important;}.hyperlink-style-1{color:rgba(0, 0, 0, 1)!important;}.hyperlink-style-1:hover{color:rgba(140, 111, 69, 1)!important;}.button-style-2{color:rgba(140, 111, 69, 1)!important;background-color:rgba(255, 255, 255, 1)!important;border-color:rgba(255, 255, 255, 1)!important;}.button-style-2:hover{color:rgba(255, 255, 255, 1)!important;background-color:rgba(0, 0, 0, 0)!important;border-color:rgba(255, 255, 255, 1)!important;}.pagination-style-2 li a{color:rgba(255, 255, 255, 1)!important;background-color:rgba(0, 0, 0, 0)!important;border-color:rgba(0, 0, 0, 0)!important;}.pagination-style-2 li a:hover{color:rgba(140, 111, 69, 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(140, 111, 69, 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(255, 255, 255, 1)!important;color:rgba(140, 111, 69, 1)!important;}.social_icons-style-2 a:hover{border-color:#FFFFFF!important;background-color:rgba(0, 0, 0, 0)!important;color:rgba(255, 255, 255, 1)!important;}.social_icons-style-2 a i{color:inherit!important;}
36.social_icons-style-2 a svg,.social_icons-style-2 a svg path{fill:currentColor!important;}.hyperlink-style-2{color:rgba(255, 255, 255, 1)!important;}.hyperlink-style-2:hover{color:rgba(255, 255, 255, 1)!important;}.button-style-3{color:rgba(140, 111, 69, 1)!important;background-color:rgba(0, 0, 0, 0)!important;border-color:rgba(140, 111, 69, 1)!important;}.button-style-3:hover{color:rgba(255, 255, 255, 1)!important;background-color:rgba(140, 111, 69, 1)!important;border-color:rgba(140, 111, 69, 1)!important;}.button-style-4{color:rgba(255, 255, 255, 1)!important;background-color:rgba(0, 0, 0, 0)!important;border-color:rgba(255, 255, 255, 1)!important;}.button-style-4:hover{color:rgba(140, 111, 69, 1)!important;background-color:rgba(255, 255, 255, 1)!important;border-color:rgba(255, 255, 255, 1)!important;}</style> 37 <!-- LP Consent bootstrap: blocking; resolves consent state, pushes Consent Mode 38 defaults, and dynamically loads the locale + main (and banner if needed). --> 39
39<script src="https://cdn.luxurypresence.com/scripts/lp-consent/latest/lp-consent-boot.js" data-website-id="0ff2944e-bf8d-436a-8339-bb2d94158f4a"></script>
39 40 41 42
42<script> 43 (function utmParse() { 44 const url = new URL(window.location.href); 45 if (url.search) { 46 const utm = url.search.split(/\?|&/g).reduce((acc, current) => { 47 const matched = current.match(/utm_(content|campaign|medium|source|term|id)|gclid/g); 48 if (matched) { 49 acc[matched[0]] = current.replace(`${matched[0]}=`, ''); 50 } 51 return acc; 52 }, {}); 53 if (Object.keys(utm).length) { 54 window.localStorage.setItem('utm_vars', JSON.stringify(utm)); 55 } else { 56 // Remove old utm vars 57 window.localStorage.removeItem('utm_vars'); 58 } 59 } 60 // Set referrer in local storage 61 // This is meant to be stored once to avoid self-referrals and to have the first referrer only. 62 if (!window.localStorage.getItem('referrer')) { 63 // Capture the Referrer URL 64 const referrer = document.referrer; 65 if (referrer) { 66 // Only store the referrer if it comes from outside the current domain (to avoid self-referrals) 67 const currentDomain = window.location.hostname; 68 const referrerDomain = new URL(referrer).hostname; 69 70 if (referrerDomain !== currentDomain) { 71 // Store it in localStorage 72 localStorage.setItem('referrer', referrer); 73 } 74 } 75 } 76 })(); 77 </script>
77 78 <!-- Bing Webmaster Tools Verification -->
79<script> 80 // Check if on the homepage before the body loads 81 if (window.location.pathname === '/' || window.location.pathname === '/index.html') { 82 document.write('<meta name="msvalidate.01" content="9444E455BC3D007F3F70BCA3F6F54DD2" />'); 83 } 84</script>
84 85 <!-- GOOGLE TRANSLATE STYLES are moved to external CSS --> 86</head> 87<body> 88 <div id="google_translate_element" style="display: none"></div> 89 90 <nav id="global-navbar" data-el-id="3242b8f0-253e-46f7-b814-162ccf958ec2"> 91 92<header class="header js-header" style="--textColor: rgba(255, 255, 255, 1); --backgroundColor: rgba(0, 0, 0, 0);"> 93 <div class="header-container "> 94 95 <a href="/" class="header-logo"> 96 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1280/https://media-production.lp-cdn.com/media/d8af9b0d-444f-4894-99ba-4f08f8debc20" 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/d8af9b0d-444f-4894-99ba-4f08f8debc20 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/d8af9b0d-444f-4894-99ba-4f08f8debc20 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/d8af9b0d-444f-4894-99ba-4f08f8debc20 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/d8af9b0d-444f-4894-99ba-4f08f8debc20 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/d8af9b0d-444f-4894-99ba-4f08f8debc20 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/d8af9b0d-444f-4894-99ba-4f08f8debc20 3456w" sizes="350px" alt="Company logo" class="header-logo__img header-logo__img--dark"> 97 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1280/https://media-production.lp-cdn.com/media/808bc6e0-b73f-4e78-a35f-deccb70eb975" 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/808bc6e0-b73f-4e78-a35f-deccb70eb975 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/808bc6e0-b73f-4e78-a35f-deccb70eb975 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/808bc6e0-b73f-4e78-a35f-deccb70eb975 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/808bc6e0-b73f-4e78-a35f-deccb70eb975 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/808bc6e0-b73f-4e78-a35f-deccb70eb975 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/808bc6e0-b73f-4e78-a35f-deccb70eb975 3456w" sizes="350px" alt="Company logo" class="header-logo__img header-logo__img--light"> 98 </a> 99 100 <ul class="header-navigation"> 101 <li class="header-navigation__item "> 102 103 <a class="header-navigation__link " href="/properties" style="--delay: 0s">Portfolio</a> 104 </li> 105 <li class="header-navigation__item "> 106 107 <a class="header-navigation__link " href="/home-search/listings" style="--delay: 0.1s">Home Search</a> 108 </li> 109 <li class="header-navigation__item "> 110 111 <a class="header-navigation__link " href="/testimonials" style="--delay: 0.2s">Testimonials</a> 112 </li> 113 <li class="header-navigation__item "> 114 115 <a class="header-navigation__link " href="/home-valuation" style="--delay: 0.30000000000000004s">Home Valuation</a> 116 </li> 117 <li class="header-navigation__item "> 118 119 <a class="header-navigation__link " href="/neighborhoods" style="--delay: 0.4s">Neighborhoods</a> 120 </li> 121 <li class="header-navigation__item "> 122 123 <a class="header-navigation__link " data-type="CONTACT_US" tabindex="0" style="--delay: 0.5s">Contact Us</a> 124 </li> 125 </ul> 126 127 128 <div class="header-buttons-wrapper"> 129 130 <a href="tel:9255253380" 131 class="header-contact-btn lp-btn button-style-2">(925) 525-3380</a> 132 133 134 <button type="button" class="header-hamburger-btn lp-btn hamburger-component hamburger js-sidemenu-opener" 135 title="Toggle Sidemenu"></button> 136 </div> 137 </div> 138 139</header> 140 141 </nav> 142 <div id="global-sidemenu" class="sidemenu" data-el-id="033c3235-a8bd-45bf-a4a8-96977e33190d"> 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159<button class="sidemenu-close toggle close lp-btn lp-icon link-icon--plus"></button> 160 161 162<div class="sidemenu-wrapper sidemenu-wrapper--small" style="--navItemNumberColor: rgba(133, 43, 107, 1);"> 163 <div class="sidemenu-nav-holder "> 164 <ul class="sidemenu-navigation sidemenu-navigation--index"> 165 <li class="sidemenu-navigation__item js-idemenu-navigation-item "> 166 <a 167 href="/" 168 class="sidemenu-navigation__link">Home</a> 169 170 </li> 171 172 <li class="sidemenu-navigation__item js-idemenu-navigation-item "> 173 <a 174 href="/team" 175 class="sidemenu-navigation__link">Meet the Team</a> 176 177 </li> 178 179 <li class="sidemenu-navigation__item js-idemenu-navigation-item "> 180 <a 181 href="/properties" 182 class="sidemenu-navigation__link">Portfolio</a> 183 184 </li> 185 186 </ul> 187 188 <ul class="sidemenu-navigation sidemenu-navigation--index"> 189 <li class="sidemenu-navigation__item js-idemenu-navigation-item "> 190 <a 191 href="/home-search/listings" 192 class="sidemenu-navigation__link">Home Search</a> 193 194 </li> 195 196 <li class="sidemenu-navigation__item js-idemenu-navigation-item "> 197 <a 198 href="/home-valuation" 199 class="sidemenu-navigation__link">Home Valuation</a> 200 201 </li> 202 203 <li class="sidemenu-navigation__item js-idemenu-navigation-item "> 204 <a 205 href="/neighborhoods" 206 class="sidemenu-navigation__link">Neighborhoods</a> 207 208 </li> 209 210 </ul> 211 212 <ul class="sidemenu-navigation sidemenu-navigation--index"> 213 <li class="sidemenu-navigation__item js-idemenu-navigation-item "> 214 <a 215 href="/testimonials" 216 class="sidemenu-navigation__link">Testimonials</a> 217 218 </li> 219 220 <li class="sidemenu-navigation__item js-idemenu-navigation-item sidemenu-navigation__item--sub-nav">
221 <span class="sidemenu-navigation__link sidemenu-navigation__link--sub-nav sidemenu-navigation__link--sub-nav-active js-sub-nav-opener lp-icon"> 222 Resources 223 </span> 224 225 <ul class="sidemenu-navigation-sub-nav lp-a"> 226 <li class="sidemenu-navigation-sub-nav__item"><a href="/buyers-team" class="sidemenu-navigation-sub-nav__link">Buyer's Guide</a></li> 227 <li class="sidemenu-navigation-sub-nav__item"><a href="/sellers-team" class="sidemenu-navigation-sub-nav__link">Seller's Guide</a></li> 228 <li class="sidemenu-navigation-sub-nav__item"><a href="/mortgage-calculator" class="sidemenu-navigation-sub-nav__link">Mortgage Calculator</a></li> 229 </ul> 230 </li> 231 232 <li class="sidemenu-navigation__item js-idemenu-navigation-item "> 233 <a 234 href="/compass-concierge" 235 class="sidemenu-navigation__link">Compass Concierge</a> 236 237 </li> 238 239 </ul> 240 241 <ul class="sidemenu-navigation sidemenu-navigation--index"> 242 <li class="sidemenu-navigation__item js-idemenu-navigation-item "> 243 <a 244 href="/blog" 245 class="sidemenu-navigation__link">Blog</a> 246 247 </li> 248 249 <li class="sidemenu-navigation__item js-idemenu-navigation-item "> 250 <a 251 href="/contact" 252 class="sidemenu-navigation__link">Contact Us</a> 253 254 </li> 255 256 <li class="sidemenu-navigation__item js-idemenu-navigation-item "> 257 <a 258 href="/home-search/account" 259 class="sidemenu-navigation__link">My Search Portal</a> 260 261 </li> 262 263 </ul> 264 </div> 265 266 <div class="sidemenu-footer"> 267 <div class="sidemenu__info-group sidemenu__col"> 268 <div class="sidemenu__section-content"> 269 <div class="sidemenu__col-content"> 270 <p class="sidemenu__col-title">Contact Us</p><div class="sidemenu__col-description lp-a"> 271 <p class="sidemenu__col-agent-name">COUTURE REAL ESTATE GROUP | CA DRE# 01333990</p> 272 <a href="tel:9255253380" class="sidemenu__col-phone">(925) 525-3380</a> 273 <a href="/cdn-cgi/l/email-protection#5833392c303d2a31363d763b372d2c2d2a3d183b373528392b2b763b3735" class="sidemenu__col-email"><span class="__cf_email__" data-cfemail="afc4cedbc7caddc6c1ca81ccc0dadbdaddcaefccc0c2dfcedcdc81ccc0c2">[email protected]</span></a> 274 </div> 275 </div> 276 <div class="sidemenu__col-content"> 277 <p class="sidemenu__col-title">Address</p> <div class="sidemenu__col-description lp-a sidemenu__col-description--pre-line"><p>900 MAIN ST<br>PLEASANTON CA 94566</p></div> 278 279 </div> 280 </div> 281 282 </div> 283 284 <div class="sidemenu-socials-block"> 285 <p class="sidemenu__col-title">Follow Us</p> 286 <ul class="lp-socials social_icons-style-1"> 287 288 <li> 289 <a 290 href="https://www.linkedin.com/in/katherine-couture-90618317/" 291 class="lp-socials__link" 292 data-wow-delay="0s" 293 target="_blank" 294 aria-label="LINKEDIN" 295 >
296 <span class="lp-i lp-i--linkedin" aria-hidden="true"></span> 297 </a> 298 </li> 299 <li> 300 <a 301 href="https://www.youtube.com/@couturerealestateteam3351" 302 class="lp-socials__link" 303 data-wow-delay="0.1s" 304 target="_blank" 305 aria-label="YOUTUBE" 306 > 307 <span class="lp-i lp-i--youtube" aria-hidden="true"></span> 308 </a> 309 </li> 310 <li> 311 <a 312 href="https://www.google.com/search?q=Katherine+Couture%2C+Realtor+%7C+Intero+Real+Estate+Livermore&rlz=1C1CHZN_enPH1001PH1001&oq=katherine+coutu&gs_lcrp=EgZjaHJvbWUqBggAEEUYOzIGCAAQRRg7MgYIARBFGDsyBggCEEUYOzIGCAMQRRg5MgYIBBBFGDwyBggFEEUYPDIGCAYQRRg80gEIMjI3MWowajGoAgCwAgA&sourceid=chrome&ie=UTF-8#lrd=0x808fe79f1abaaaab:0x84474328b06e78ae,1,,,," 313 class="lp-socials__link" 314 data-wow-delay="0.2s" 315 target="_blank" 316 aria-label="GOOGLE" 317 > 318 <span class="lp-i lp-i--google" aria-hidden="true"></span> 319 </a> 320 </li> 321 <li> 322 <a 323 href="https://www.zillow.com/profile/user767165" 324 class="lp-socials__link" 325 data-wow-delay="0.3s" 326 target="_blank" 327 aria-label="ZILLOW" 328 > 329 <span class="lp-i lp-i--zillow" aria-hidden="true"></span> 330 </a> 331 </li> 332 </ul> </div> 333 </div> 334</div> 335 </div> 336 <div id="global-mobile-contact" class="mobile-contact-wrapper" data-el-id="4c08210d-8fa1-4e4b-ad13-3209994c2ceb"> 337 <div class="floating-contact-button"> 338 <div class="floating-contact-button__btn-holder js-btn-holder" 339 style="--backgroundColor: rgba(255, 255, 255, 1); --textColor: rgba(0, 0, 0, 1); --pillTextColor: rgba(255, 255, 255, 1); --pillBackgroundColor: rgba(140, 111, 69, 1);"> 340 <a href="/home-search/listings" class="floating-contact-button__btn-search lp-icon hyperlink-style-1">Search</a> 341 <button type="button" class="floating-contact-button__btn-connect js-btn-connect lp-icon lp-ico-arrow-top">Contact Us</button> 342 </div> 343 344 <div class="floating-contact-button-pop-up js-pop-up" style="--backgroundColor: rgba(255, 255, 255, 1); --textColor: rgba(0, 0, 0, 1);"> 345 <form class="floating-contact-button-pop-up__form js-form" data-type="contact-form"> 346 <h3 class="floating-contact-button-pop-up__title">Leave a Message</h3> 347 348 <div class="floating-contact-button-pop-up__input-group lp-input-group"> 349 <input id="__FullName" type="text" name="name" 350 class="lp-input js-input-name lp-input--light" 351 required placeholder="Full Name"> 352 </div> 353 354 <div class="floating-contact-button-pop-up__input-group lp-input-group"> 355 <input id="__Email" type="email" name="email" 356 class="lp-input js-email-input " 357 required placeholder="Email"> 358 </div> 359 360 <div class="floating-contact-button-pop-up__input-group lp-input-group"> 361 <input class="lp-input " type="tel" placeholder="Phone" id="__Phone" 362 name="phone" required> 363 </div> 364 365 <select name="interest" id="-field-interest" 366 class="floating-contact-button-pop-up__input-group lp-input js-select " required> 367 <option value="" selected disabled data-label="Interest">Interested in...</option> 368 <option value="Selling & Buying">Selling & Buying</option> 369 <option value="Selling">Selling</option> 370 <option value="Buying">Buying</option> 371 <option value="Renting">Renting</option> 372 <option value="Other">Other</option> 373 <label for="-field-interest" class="lp-label sr-only">Interest</label> 374 </select> 375 376 <div class="floating-contact-button-pop-up__input-group lp-input-group"> 377 <textarea name="message" rows="4" id="__Message" class="lp-in
377put " 378 placeholder="Message" required></textarea> 379 </div> 380 381 <div class="lp-disclaimer"> <div class='lp-tcr-content' style='margin-bottom: 1em;'> 382 <span class='lp-tcr-message'> 383 By providing your contact information to Couture Real Estate Team, your personal 384 information will be processed in accordance with Couture Real Estate Team's 385 <a href='/terms-and-conditions' target='_blank'>Privacy Policy</a>. By 386 checking the box(es) below, you consent to receive communications 387 regarding your real estate inquiries and related marketing and promotional 388 updates in the manner selected by you. For SMS text messages, message 389 frequency varies. Message and data rates may apply. You may opt out of 390 receiving further communications from Couture Real Estate Team at any time. To opt 391 out of receiving SMS text messages, reply STOP to unsubscribe. 392 </span> 393 </div> 394 <label style='display: none;' for='-termsAccepted'>Opt 395 in/Disclaimer Consent:</label> 396 <label class='lp-tcr-content' style='margin-bottom: 1em;'> 397 <span class='lp-tcr-checkbox'> 398 <input 399 type='checkbox' 400 name='termsAccepted' 401 id='-termsAccepted' 402 oninvalid="this.setCustomValidity('Please accept the terms and conditions')" 403 oninput="this.setCustomValidity('')" 404 required 405 value='Yes, I agree to receive email or phone call communications from Couture Real Estate Team.' 406 /> 407 </span> 408 <span class='lp-tcr-message'> 409 Yes, I agree to receive email or phone call communications from 410 Couture Real Estate Team. 411 </span> 412 </label> 413 <label style='display: none;' for='-customConsent'>Opt 414 in/Disclaimer Consent:</label> 415 <label class='lp-tcr-content' style='margin-bottom: 1em;'> 416 <span class='lp-tcr-checkbox'> 417 <input 418 type='checkbox' 419 name='customConsent' 420 id='-customConsent' 421 value='Yes, I agree to receive SMS text messages from Couture Real Estate Team.' 422 /> 423 </span> 424 <span class='lp-tcr-message'> 425 Yes, I agree to receive SMS text messages from Couture Real Estate Team. 426 </span> 427 </label> 428 429</div> 430 431 <button type="submit" class="floating-contact-button-pop-up__btn-submit lp-btn lp-btn--mob-full-width button-style-1">Submit</button> 432 433 <div class="lp-h-pot"> 434 <input id="__newsSignMiddleName" name="middleName" value="" autocomplete="off" 435 tabindex="-1"> 436 </div> 437 <input style="display: none;" type="text" name="source" value="CONTACT_INQUIRY" /> 438 <input type="hidden" name="button_text" value="Contact Us"> 439 </form> 440 441 <div class="floating-contact-button-pop-up__success js-success"> 442 <h3 class="floating-contact-button-pop-up__title">Thank you for your message. We will be in touch with you shortly.</h3> 443 444 <a 445 href="/home-search/listings" 446 447 class="lp-btn floating-contact-button-pop-up__success-btn button-style-1" 448 449 450 451 452 453 > 454 Explore Our Properties 455 </a> 456 </div> 457 <button type="button" class="floating-contact-button-pop-up__close js-close-btn lp-icon"></button> 458 </div> 459 460</div> 461 462 </div> 463 <section id="section-c1234c57-c7ef-4bf5-a255-f88b98dbc080" class="video-section is-font-color-light is-background-color-dark" data-el-id="bc2e983c-8c71-4c9e-9b1a-970e380ee8de"> 464 <div class="video-wrapper"> 465 <div class="full-screen-video-component"> 466 <div class="video-wrapper hidable"> 467 <video class="lazy" 468 poster="https://res.cloudinary.com/luxuryp/videos/f_auto,q_auto/so_0,eo_0/hqcsc9hs5ngrc5uj4nwo/v4_katherine-and-michael-couture.jpg" 469 style="height:100%;" 470 loop 471 muted 472 autoplay 473 playsinline> 474 <source data-src="https://res.cloudinary.com/luxuryp/videos/f_webm,vc_vp9,q_auto:best,w_1920,c_limit/hqcsc9hs5ngrc5uj4nwo/v4_katherine-and-michael-couture.webm" type="video/webm;codecs=vp9"> 475<source data-src="https://res.cloudinary.com/luxuryp/videos/f_mp4,vc_h265,q_auto:best,w_1920,c_limit/hqcsc9hs5ngrc5uj4nwo/v4_katherine-and-michael-couture.mp4" type="video/mp4;codecs=hvc1"> 476<source data-src="https://res.cloudinary.com/luxuryp/videos/f_mp4,vc_h264,q_auto:best,w_1920,c_limit/hqcsc9hs5ngrc5uj4nwo/v4_katherine-and-michael-couture.mp4" type="video/mp4"> 477 </video> 478 </div> 479 <div class="poster" style="background-image: url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1920/https://media-production.lp-cdn.com/media/4b56bc9e-85f6-4b31-9c03-8ffbc2fe1295')"></div> 480 </div> 481 </div> 482 <div class="overlay-component"style="--section-overlay: rgba(0, 0, 0, 0.2);"></div> 483 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@splidejs/[email protected]/dist/css/splide-core.min.css" 484/>
vendor: 109 bytes, lines 484-485
484 485<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
485<script src="https://cdn.jsdelivr.net/npm/@splidejs/[email protected]/dist/js/splide.min.js"></script>
485 486 487 488 489<div class="opening-search" style="--searchBoxColor: rgba(0, 0, 0, 0);"> 490 <div class="opening-search__container"> 491 492 <div class="opening-search__image-wrapper splide js-slider-nav"> 493 <div class="splide__track"> 494 <ul class="splide__list"> 495 <div class="opening-search__item-image splide__slide" data-duration=""> 496 497 </div> 498 </ul> 499 </div> 500 </div> 501 502 <div class="opening-search__content"> 503 <div class="opening-search__text-slider splide js-slider"> 504 <div class="splide__track"> 505 <ul class="splide__list"> 506 <li class="splide__slide opening-search__item js-item" data-duration=""> 507 <div class="opening-search__pre-title lp-text--pretitle">Couture Real Estate Group | CA DRE# 01333990</div> 508 <h1 class="opening-search__title"> 509Livermore Valley Luxury Homes </h1> 510 <div class="opening-search__description"><p>The Couture Difference: Personalized Service, Outstanding Results.</p></div> 511 </li> 512 </ul> 513 </div> 514 </div> 515 <div class="opening-search__search-box search-form"> 516 <div class="opening-search__search-wrapper js-search-wrapper search-near-hidden" data-search-mls="true" data-search-properties="false" data-locations="US" data-show-neighborhood-names="false"> 517 <div class="opening-search__search-input-container lp-input-group lp-input--with-icon"> 518 <input 519 type="text" 520 id="section-c1234c57-c7ef-4bf5-a255-f88b98dbc080-address" 521 name="home-address" 522 class="opening-search__search-input js-search-input lp-input lp-input--dark" 523 placeholder="Search address or city" 524 /> 525 <div class="opening-search__pin-map lp-icon lp-input-icon lp-input-icon--pin-map-2"></div> 526 </div> 527 <div class="opening-search__search-results js-search-results"> 528 <div class="opening-search__results-container js-results-container"></div> 529 <div class="opening-search__search-in-progress js-search-in-progress hide"> 530 <i class="lp-i lp-i--spinner lp-i--pulse"></i> 531 </div> 532 <div class="opening-search__predefined-links js-predefined-links hide"> 533 </div> 534 </div> 535 </div> 536 537 <button class="opening-search__search-button js-search-button lp-btn lp-btn--filled button-style-2"> 538 <span class="lp-btn__content">Search</span> 539 </button> 540 541 <div class="opening-search-sound lp-socials js-sound social_icons-style-2"> 542 543 <a href="#" class="lp-socials__link socials__link "> 544 <span class="lp-icon lp-icon--sound js-sound-icon" style="display: none;"></span> 545 546 <span class="lp-icon lp-icon--mute js-mute-icon" ></span> 547 </a> 548 </div> 549 </div> 550 <ul class="lp-socials social_icons-style-2 opening-search-socials"> 551 552 </ul> </div> 553 554 555 </div> 556</div> 557 558</section> 559<section id="section-4e9be597-0c57-4cc1-ad9e-26698df89dc9" class="solid-section is-font-color-dark is-background-color-light" data-el-id="b57584cc-7b27-435c-abd6-2277ce40a476"> 560<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@splidejs/[email protected]/dist/css/splide-core.min.css"/>
561<script src="https://cdn.jsdelivr.net/npm/@splidejs/[email protected]/dist/js/splide.min.js"></script>
561 562 563<div class="stats-list-container lp-vertical-paddings" 564 style="--titleColor: rgba(0, 0, 0, 1); --statsTileBackgroundColor: rgba(0, 0, 0, 0); --statsValueColor: rgba(0, 0, 0, 1); --statsTitleColor: rgba(0, 0, 0, 1)"> 565 <div class="stats-list-title-group lp-title-group"> 566 <p class="stats-list-title-group__pre-title">Our Mission</p> 567 <h2 class="stats-list-title-group__title stats-list-title-group__with-pre-title">Simplifying Real Estate For You</h2> 568 <div class="stats-list-title-group__description"><p>Our mission at Couture Real Estate Group is simple yet powerful: to simplify the real estate process for you. We believe that every client deserves personal attention and a tailored approach that meets their unique needs. As your trusted partner, we go above and beyond to make your experience seamless, stress-free, and rewarding, no matter if you are buying or selling.</p></div> 569 </div> 570 571 <div class="stats-list splide js-stats-list" data-arrows-style=""> 572 <div class="splide__track"> 573 <div class="splide__list"> 574 <div class="stats-list__item splide__slide js-stats-list-item"> 575 576 <p class="stats-list__title js-value">20+</p> 577 <p class="stats-list__desc">Years of Experience</p> 578 </div> 579 <div class="stats-list__item splide__slide js-stats-list-item"> 580 581 <p class="stats-list__title js-value">100%</p> 582 <p class="stats-list__desc">Client Satisfaction</p> 583 </div> 584 <div class="stats-list__item splide__slide js-stats-list-item"> 585 586 <p class="stats-list__title js-value">$50M+</p> 587 <p class="stats-list__desc">Transactions</p> 588 </div> 589 </div> 590 </div> 591 </div> 592</div> 593</section> 594<section id="section-fba75ce4-28b8-44ae-9e59-29052c7ca6c7" class="solid-section is-font-color-dark is-background-color-light" data-el-id="1ac6a4c8-74e8-4359-bc07-630d9ecd7326"> 595<div class="standard-cta lp-vertical-paddings " style="--titleTextColor: rgba(0, 0, 0, 1);"> 596 597 <div class="standard-cta__container"> 598 <div class="standard-cta__title-group lp-title-group"> 599 <p class="standard-cta__pre-title lp-text--pretitle ">Experience the Couture difference</p> 600 <h2 class="standard-cta__title js-title standard-cta__title--with-pretitle">Your Solution Starts Here</h2> 601 602 </div> 603 604 <div class="standard-cta__description"><p>When you choose Couture Real Estate Group, you gain access to a wealth of expertise and insights into the Livermore Valley market. As an experienced real estate agent, Katherine Couture takes the time to truly understand your goals and aspirations. Armed with this knowledge, she crafts a personalized strategy to ensure you achieve your desired outcomes. With Katherine by your side, you can expect exceptional service, expert negotiation skills, and unwavering dedication to your success.</p></div> 605 606 </div> 607</div> 608</section> 609<section id="section-57e3def3-0b54-4364-ba92-3c2da73df25a" class="solid-section is-font-color-dark is-background-color-light" data-el-id="9e19adb8-cf89-4fae-8080-d1a77c6a3b57"> 610 <div class="gallery-style-menu lp-vertical-paddings"> 611 612 <div class="gallery-style-menu-grid gallery-style-menu-grid--3"> 613 <a class="gallery-style-menu-grid__item lp_animation-img-zoom" 614 href="/buyers-team" > 615 616 <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/82f018e8-722c-4360-89c9-57d2a43bcc16" 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/82f018e8-722c-4360-89c9-57d2a43bcc16 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/82f018e8-722c-4360-89c9-57d2a43bcc16 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/82f018e8-722c-4360-89c9-57d2a43bcc16 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/82f018e8-722c-4360-89c9-57d2a43bcc16 1920w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/82f018e8-722c-4360-89c9-57d2a43bcc16 2000w" alt="Buy a Home" sizes="(max-width: 768px) 100vw, 50vw" class="gallery-style-menu-grid__image portrait" loading="lazy"> 617 <h3 class="gallery-style-menu-grid__title">Buy a Home</h3> 618 </a> 619 <a class="gallery-style-menu-grid__item lp_animation-img-zoom" 620 data-type="CONTACT_US" > 621 622 <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/91392a03-7878-4ee7-859d-942cbb9cd798" 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/91392a03-7878-4ee7-859d-942cbb9cd798 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/91392a03-7878-4ee7-859d-942cbb9cd798 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/91392a03-7878-4ee7-859d-942cbb9cd798 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/91392a03-7878-4ee7-859d-942cbb9cd798 1920w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/91392a03-7878-4ee7-859d-942cbb9cd798 2000w" alt="Contact Us" sizes="(max-width: 768px) 100vw, 50vw" class="gallery-style-menu-grid__image portrait" loading="lazy"> 623 <h3 class="gallery-style-menu-grid__title">Contact Us</h3> 624 </a> 625 <a class="gallery-style-menu-grid__item lp_animation-img-zoom" 626 href="/sellers-team" > 627 628 <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/936b2761-9dc2-46cf-bf59-ea91d4f4504e" 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/936b2761-9dc2-46cf-bf59-ea91d4f4504e 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/936b2761-9dc2-46cf-bf59-ea91d4f4504e 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/936b2761-9dc2-46cf-bf59-ea91d4f4504e 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/936b2761-9dc2-46cf-bf59-ea91d4f4504e 1920w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/936b2761-9dc2-46cf-bf59-ea91d4f4504e 2000w" alt="Sell a Home" sizes="(max-width: 768px) 100vw, 50vw" class="gallery-style-menu-grid__image portrait" loading="lazy"> 629 <h3 class="gallery-style-menu-grid__title">Sell a Home</h3> 630 </a> 631 </div> 632</div> 633</section> 634<section id="section-94299c24-639b-4cf2-a15f-710c04b9b187" class="solid-section is-font-color-dark is-background-color-light" data-el-id="1ac6a4c8-74e8-4359-bc07-630d9ecd7326"> 635<div class="standard-cta lp-vertical-paddings " style="--titleTextColor: rgba(0, 0, 0, 1);"> 636 <div class="standard-cta__image"> 637 <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/12c9b6a8-db36-4017-af0d-efa822a9e418" 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/12c9b6a8-db36-4017-af0d-efa822a9e418 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/12c9b6a8-db36-4017-af0d-efa822a9e418 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/12c9b6a8-db36-4017-af0d-efa822a9e418 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/12c9b6a8-db36-4017-af0d-efa822a9e418 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/12c9b6a8-db36-4017-af0d-efa822a9e418 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/12c9b6a8-db36-4017-af0d-efa822a9e418 3456w" alt="Katherine Couture Pleasanton, CA Real Estate Agent Headsh
637ot" class="standard-cta__default-image" sizes="50vw" loading="lazy"> 638 639 </div> 640 641 <div class="standard-cta__container"> 642 <div class="standard-cta__title-group lp-title-group"> 643 <p class="standard-cta__pre-title lp-text--pretitle standard-cta__pre-title--with-line">Meet the Team</p> 644 <h2 class="standard-cta__title js-title ">Welcome to a world of refined living</h2> 645 646 </div> 647 648 <div class="standard-cta__description"><p>Katherine Couture | CA DRE# 01333990</p> 649<p>Imagine a stress-free experience where every step is guided by a seasoned professional. With Couture Real Estate Group, you can rest assured that your investment is in capable hands.</p> 650<p>Discover luxury real estate with Mike and Katherine Couture, a dedicated husband and wife team renowned for their exceptional service and market expertise. With a combined experience of over two decades, they are committed to helping you find or sell your perfect home.</p> 651<div>We pride ourselves on integrity, personalized service, and a client-first approach. Whether buying or selling, we offer expert guidance and unwavering dedication to make your real estate journey seamless and successful.</div> 652<div> </div> 653<div>Experience the Couture difference today—where luxury meets lifestyle.</div></div> 654 <div class="standard-cta-button-container"> 655 656 <a 657 href="/team" 658 659 class="standard-cta-button-container__button lp-btn button-style-1" 660 661 662 663 664 665 > 666 <span class="lp-btn__content">Learn More</span> 667 </a> 668 669 670 </div> 671 672 </div> 673</div> 674</section> 675<section class="image-section is-font-color-light is-background-color-light" id="section-c8a0ad1c-794d-403e-bb62-eb33fbb26159" data-el-id="7b64bc4a-88bb-4371-aa48-2acffa9f4150"> 676<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@splidejs/[email protected]/dist/css/splide-core.min.css"/>
677<script src="https://cdn.jsdelivr.net/npm/@splidejs/[email protected]/dist/js/splide.min.js"></script>
677 678 679 680<div class="testimonials-slider lp-container lp-vertical-paddings" style="--titleTextColor: rgba(255, 255, 255, 1); --quoteBackColor: rgba(0, 0, 0, 0); --testimonialTestColor: rgba(0, 0, 0, 1); --testimonialBack: rgba(245, 242, 238, 1);"> 681 682 <div class="testimonials-slider-heading"> 683 <div class="testimonials-slider-heading__pre-title lp-text--pretitle">See Why Our Clients Love Us</div> 684 <h2 class="testimonials-slider-heading__title testimonials-slider-heading__title--with-pre-title">Testimonials</h2> 685 </div> 686 687 <div class="testimonials-slider-slider-wrapper"> 688 <div class="testimonials-slider-slider splide js-slider testimonials-slider-slider__more-slides testimonials-slider-slider__two-columns js-two-columns" data-items-length="10" data-autoplay-interval="5"> 689 <div class="splide__track"> 690 <div class="splide__list"> 691 <div class="testimonials-slider-slider__item splide__slide"> 692 <span class="testimonials-slider-slider__quotes lp-icon link-icon--quotes"></span> 693 <div class="testimonials-slider-slider__body--mobile js-collapsible-text" data-link-style="hyperlink-style-1" data-min-characters="50" data-max-characters="120"><q class="testimonials-slider-slider__quote">We have used Katherine as our realtor multiple times, both as buyers and as sellers. She has been amazing each time! Katherine is organized, detailed, and very knowledgeable. Having her guide us through the real estate processes was such a blessing! We always knew that she was looking out for our best interests and would follow through on commitments. Thank you, Katherine!</q></div> 694 <div class="testimonials-slider-slider__body js-collapsible-text" data-link-style="hyperlink-style-1" data-min-characters="300" data-max-characters="500"><q class="testimonials-slider-slider__quote">We have used Katherine as our realtor multiple times, both as buyers and as sellers. She has been amazing each time! Katherine is organized, detailed, and very knowledgeable. Having her guide us through the real estate processes was such a blessing! We always knew that she was looking out for our best interests and would follow through on commitments. Thank you, Katherine!</q></div> 695 696 <div class="testimonials-slider-slider__author">Cari E.</div> 697 </div> 698 <div class="testimonials-slider-slider__item splide__slide"> 699 <span class="testimonials-slider-slider__quotes lp-icon link-icon--quotes"></span> 700 <div class="testimonials-slider-slider__body--mobile js-collapsible-text" data-link-style="hyperlink-style-1" data-min-characters="50" data-max-characters="120"><q class="testimonials-slider-slider__quote">Katherine did a great job of selling our house early this year at a very difficult time in the market. Despite increased interest rates and the market downturn, Katherine sold our home in excess of the listing price after she secured multiple bids within days of the house hitting the market. Her strong market knowledge, combined with her superb staging guidance and spot-on suggested minor improvements, surely contributed to the successful sale. We strongly recommend Katherine to anyone looking to sell their home in the Tri-Valley.</q></div> 701 <div class="testimonials-slider-slider__body js-collapsible-text" data-link-style="hyperlink-style-1" data-min-characters="300" data-max-characters="500"><q class="testimonials-slider-slider__quote">Katherine did a great job of selling our house early this year at a very difficult time in the market. Despite increased interest rates and the market downturn, Katherine sold our home in excess of the listing price after she secured multiple bids within days of the house hitting the market. Her strong market knowledge, combined with her superb staging guidance and spot-on suggested minor improvements, surely contributed to the successful sale. We strongly recommend Katherine to anyone looking to sell their home in the Tri-Valley.</q></div> 702 703 <div class="testimonials-slider-slider__author">Curt S.</div> 704 </div> 705 <div class="testimonials-slider-slider__item splide__slide">
706 <span class="testimonials-slider-slider__quotes lp-icon link-icon--quotes"></span> 707 <div class="testimonials-slider-slider__body--mobile js-collapsible-text" data-link-style="hyperlink-style-1" data-min-characters="50" data-max-characters="120"><q class="testimonials-slider-slider__quote">Katherine was amazing throughout the process. We are first-time home buyers, and we couldnât be happier with how easy she made everything. She was able to work around our crazy work schedules and kept us updated with anything new that popped up. Katherine was very prompt with any email and answered any questions we had right away, which helped us out the most. I will definitely be recommending her to anyone who is looking for a realtor. She is very approachable, and her personality is so inviting that she is someone you are glad to have met and worked with.</q></div> 708 <div class="testimonials-slider-slider__body js-collapsible-text" data-link-style="hyperlink-style-1" data-min-characters="300" data-max-characters="500"><q class="testimonials-slider-slider__quote">Katherine was amazing throughout the process. We are first-time home buyers, and we couldnât be happier with how easy she made everything. She was able to work around our crazy work schedules and kept us updated with anything new that popped up. Katherine was very prompt with any email and answered any questions we had right away, which helped us out the most. I will definitely be recommending her to anyone who is looking for a realtor. She is very approachable, and her personality is so inviting that she is someone you are glad to have met and worked with.</q></div> 709 710 <div class="testimonials-slider-slider__author">Rebecca G.</div> 711 </div> 712 <div class="testimonials-slider-slider__item splide__slide"> 713 <span class="testimonials-slider-slider__quotes lp-icon link-icon--quotes"></span> 714 <div class="testimonials-slider-slider__body--mobile js-collapsible-text" data-link-style="hyperlink-style-1" data-min-characters="50" data-max-characters="120"><q class="testimonials-slider-slider__quote">Katherine found us a home in the crazy housing market of 2022! She has really good connections in the neighborhoods and knows a lot of people. This enabled her to show us homes that matched our unique needs. Katherine is a consummate professional. She is very diligent and works very well with all parties involved, keeping everyone updated regarding what they need to do next (buyer, seller, inspectors, lender). I would wholeheartedly recommend Katherine as a realtor for any home buying/selling needs.</q></div> 715 <div class="testimonials-slider-slider__body js-collapsible-text" data-link-style="hyperlink-style-1" data-min-characters="300" data-max-characters="500"><q class="testimonials-slider-slider__quote">Katherine found us a home in the crazy housing market of 2022! She has really good connections in the neighborhoods and knows a lot of people. This enabled her to show us homes that matched our unique needs. Katherine is a consummate professional. She is very diligent and works very well with all parties involved, keeping everyone updated regarding what they need to do next (buyer, seller, inspectors, lender). I would wholeheartedly recommend Katherine as a realtor for any home buying/selling needs.</q></div> 716 717 <div class="testimonials-slider-slider__author">Murali N.</div> 718 </div> 719 <div class="testimonials-slider-slider__item splide__slide"> 720 <span class="testimonials-slider-slider__quotes lp-icon link-icon--quotes"></span> 721 <div class="testimonials-slider-slider__body--mobile js-collapsible-text" data-link-style="hyperlink-style-1" data-min-characters="50" data-max-characters="120"><q class="testimonials-slider-slider__quote">Katherine is by far the best realtor we have ever had. She gave great advice on what renovations we needed and had contractors who were immediately ready. They were able to start the renovations right away and at a very reasonable cost. Katherine made sure the work was done properly and to our satisfaction. She helped us every step of the way during this difficult journey, answering any and all questions asked of her. Katherine is the best realtor I have ever worked with and would highly recommend her for any seller or buyer. I cannot praise Katherine highly enough for all the hard
721work she put into selling our home. And to prove this, Katherine was able to sell our home in 2 days! That should tell you how good she really is.</q></div> 722 <div class="testimonials-slider-slider__body js-collapsible-text" data-link-style="hyperlink-style-1" data-min-characters="300" data-max-characters="500"><q class="testimonials-slider-slider__quote">Katherine is by far the best realtor we have ever had. She gave great advice on what renovations we needed and had contractors who were immediately ready. They were able to start the renovations right away and at a very reasonable cost. Katherine made sure the work was done properly and to our satisfaction. She helped us every step of the way during this difficult journey, answering any and all questions asked of her. Katherine is the best realtor I have ever worked with and would highly recommend her for any seller or buyer. I cannot praise Katherine highly enough for all the hard work she put into selling our home. And to prove this, Katherine was able to sell our home in 2 days! That should tell you how good she really is.</q></div> 723 724 <div class="testimonials-slider-slider__author">Ed E.</div> 725 </div> 726 <div class="testimonials-slider-slider__item splide__slide"> 727 <span class="testimonials-slider-slider__quotes lp-icon link-icon--quotes"></span> 728 <div class="testimonials-slider-slider__body--mobile js-collapsible-text" data-link-style="hyperlink-style-1" data-min-characters="50" data-max-characters="120"><q class="testimonials-slider-slider__quote">Katherine went beyond in helping me to sell our family home. She was courteous, always optimistic, and responsive. What Katherine brings to the table is caring and compassion for her clients. My situation was a bit tricky, and she was a wonderful support throughout the entire process, assisting me in a myriad of ways. As the seller's market was beginning to weaken, she kept at it and got us the best agreement. I am so thankful Katherine was recommended to me!</q></div> 729 <div class="testimonials-slider-slider__body js-collapsible-text" data-link-style="hyperlink-style-1" data-min-characters="300" data-max-characters="500"><q class="testimonials-slider-slider__quote">Katherine went beyond in helping me to sell our family home. She was courteous, always optimistic, and responsive. What Katherine brings to the table is caring and compassion for her clients. My situation was a bit tricky, and she was a wonderful support throughout the entire process, assisting me in a myriad of ways. As the seller's market was beginning to weaken, she kept at it and got us the best agreement. I am so thankful Katherine was recommended to me!</q></div> 730 731 <div class="testimonials-slider-slider__author">Jamie L.</div> 732 </div> 733 <div class="testimonials-slider-slider__item splide__slide"> 734 <span class="testimonials-slider-slider__quotes lp-icon link-icon--quotes"></span> 735 <div class="testimonials-slider-slider__body--mobile js-collapsible-text" data-link-style="hyperlink-style-1" data-min-characters="50" data-max-characters="120"><q class="testimonials-slider-slider__quote">Working with Katherine was pretty amazing. She did a fantastic job of selling our coastal home, located 185 miles away! Hired a great photographer and videographer. Drove to the property twice herself, and worked well with a local realtor there. We were amazed at how quickly our property sold, with multiple offers that exceeded our expectations. Personable and professional realtor. The best of the best!</q></div> 736 <div class="testimonials-slider-slider__body js-collapsible-text" data-link-style="hyperlink-style-1" data-min-characters="300" data-max-characters="500"><q class="testimonials-slider-slider__quote">Working with Katherine was pretty amazing. She did a fantastic job of selling our coastal home, located 185 miles away! Hired a great photographer and videographer. Drove to the property twice herself, and worked well with a local realtor there. We were amazed at how quickly our property sold, with multiple offers that exceeded our expectations. Personable and professional realtor. The best of the best!</q></div> 737 738 <div class="testimonials-slider-slider__author">Patrice L.</div> 739 </div> 740 <div class="testimonials-slider-slider__item splide__slide">
741 <span class="testimonials-slider-slider__quotes lp-icon link-icon--quotes"></span> 742 <div class="testimonials-slider-slider__body--mobile js-collapsible-text" data-link-style="hyperlink-style-1" data-min-characters="50" data-max-characters="120"><q class="testimonials-slider-slider__quote">Katherine Couture was not only an amazing realtor, but was a helpful resource as we transitioned to life in the Tri-Valley! A respected realtor and leader in the community, Katherine patiently walked us through the ins and outs of the market, was super accessible and responsive to our needs, even working closely with our mortgage broker to ensure everything went smoothly for us. If you're looking for someone you can trust, who understands your interests and will go to bat for you, look no further than Katherine Couture.</q></div> 743 <div class="testimonials-slider-slider__body js-collapsible-text" data-link-style="hyperlink-style-1" data-min-characters="300" data-max-characters="500"><q class="testimonials-slider-slider__quote">Katherine Couture was not only an amazing realtor, but was a helpful resource as we transitioned to life in the Tri-Valley! A respected realtor and leader in the community, Katherine patiently walked us through the ins and outs of the market, was super accessible and responsive to our needs, even working closely with our mortgage broker to ensure everything went smoothly for us. If you're looking for someone you can trust, who understands your interests and will go to bat for you, look no further than Katherine Couture.</q></div> 744 745 <div class="testimonials-slider-slider__author">Bryan H.</div> 746 </div> 747 <div class="testimonials-slider-slider__item splide__slide"> 748 <span class="testimonials-slider-slider__quotes lp-icon link-icon--quotes"></span> 749 <div class="testimonials-slider-slider__body--mobile js-collapsible-text" data-link-style="hyperlink-style-1" data-min-characters="50" data-max-characters="120"><q class="testimonials-slider-slider__quote">We decided to list, and within a week, Katherine had us on the market and delivered pre-qualified offers at well over asking. She negotiated everything in our favor, including free rent-back. She then helped us secure our new property in downtown Livermore and lined up the timing perfectly. She's a top-notch realtor and true expert in Livermore Valley Real Estate!</q></div> 750 <div class="testimonials-slider-slider__body js-collapsible-text" data-link-style="hyperlink-style-1" data-min-characters="300" data-max-characters="500"><q class="testimonials-slider-slider__quote">We decided to list, and within a week, Katherine had us on the market and delivered pre-qualified offers at well over asking. She negotiated everything in our favor, including free rent-back. She then helped us secure our new property in downtown Livermore and lined up the timing perfectly. She's a top-notch realtor and true expert in Livermore Valley Real Estate!</q></div> 751 752 <div class="testimonials-slider-slider__author">Lisa S.</div> 753 </div> 754 <div class="testimonials-slider-slider__item splide__slide"> 755 <span class="testimonials-slider-slider__quotes lp-icon link-icon--quotes"></span> 756 <div class="testimonials-slider-slider__body--mobile js-collapsible-text" data-link-style="hyperlink-style-1" data-min-characters="50" data-max-characters="120"><q class="testimonials-slider-slider__quote">Katherine is a gem and a complete pleasure to work with! I highly recommend her and her entire team.</q></div> 757 <div class="testimonials-slider-slider__body js-collapsible-text" data-link-style="hyperlink-style-1" data-min-characters="300" data-max-characters="500"><q class="testimonials-slider-slider__quote">Katherine is a gem and a complete pleasure to work with! I highly recommend her and her entire team.</q></div> 758 759 <div class="testimonials-slider-slider__author">Anthony W.</div> 760 </div> 761 </div> 762 </div> 763 </div> 764 765 <div class="testimonials-slider-arrows js-arrows"> 766 <button class="lp-arrow lp-arrow--prev js-arrow--prev "></button> 767 <button class="lp-arrow lp-arrow--next js-arrow--next "></button> 768 </div> 769 </div> 770 771 <div class="testimonials-slider-btn-holder"> 772 <a 773 href="/testimonials" 774 775 class="lp-btn before-and-after-slider__btn button-style-2" 776 777 778 779 780 781 >
782 <span class="lp-btn__content">View All</span> 783 </a> 784 </div> 785</div> 786 787</section> 788<section id="section-9e23a9b4-f0cc-44ed-89e4-471e9a166f0f" class="solid-section is-font-color-dark is-background-color-light" data-el-id="28010ed3-701e-4785-bc96-ac801b31660b"> 789 790 791 <link 792 rel="stylesheet" 793 href="https://cdn.jsdelivr.net/npm/@splidejs/[email protected]/dist/css/splide-core.min.css" 794 /> 795 796
796<script src="https://cdn.jsdelivr.net/npm/@splidejs/[email protected]/dist/js/splide.min.js"></script>
796 797
797<script src="https://cdn.jsdelivr.net/npm/@splidejs/[email protected]/dist/js/splide-extension-grid.min.js"></script>
797 798 799 800 <div class="properties-slider lp-container lp-vertical-paddings " style=" 801 --titleTextColor: rgba(0, 0, 0, 1); 802 --detailsBgColor: rgba(245, 242, 238, 1); 803 --detailsTextColor: rgba(0, 0, 0, 1); 804 --upperBgColor: rgba(0, 0, 0, 0);"> 805 806 <div class="properties-slider__title-group lp-group-title"> 807 <p class="properties-slider__pretitle lp-text--pretitle">Browse Our</p> 808 <h2 class="properties-slider__title properties-slider__title--with-pretitle">Portfolio</h2> 809 </div> 810 811 <div class="properties-slider__slider-container"> 812 <div class="properties-slider-slider properties-slider-slider--horizontal splide js-slider"> 813 <div class="properties-slider-slider__splide-track splide__track "> 814 <ul class="properties-slider-slider__splide-list splide__list "> 815 <li class="properties-slider-card splide__slide js-card"> 816 <div class="properties-slider-card__image-container"> 817 <img src="https://dlajgvw9htjpb.cloudfront.net/cms/6382308c-8bfc-4993-9f82-aceab30cdb9f/41122083/-6102883450073335925.jpg" alt="101 Acorn Way" class="properties-slider-card__image" loading="lazy"> 818 <span class="properties-slider-card__tag lp-tag">Sold</span> 819 </div> 820 <div class="properties-slider-card__details js-card__details"> 821 <p class="properties-slider-card__price">$2,496,000</p> 822 <p class="properties-slider-card__address">101 Acorn Way, Livermore, CA 94550</p> 823 <ul class="properties-slider-card__features js-card__features"> 824 <li class="properties-slider-card__feature lp-icon lp-icon--bed lp-tag">6 Beds</li> 825 <li class="properties-slider-card__feature lp-icon lp-icon--bath lp-tag">4 Baths</li> 826 <li class="properties-slider-card__feature lp-icon lp-icon--sqft lp-tag">4,037 Sq.Ft.</li> 827 </ul> 828 </div> 829 <a href="/properties/101-acorn-way-livermore-ca-us-94550-41122083" class="properties-slider-card__link"></a> 830 </li> 831 <li class="properties-slider-card splide__slide js-card"> 832 <div class="properties-slider-card__image-container"> 833 <img src="https://dlajgvw9htjpb.cloudfront.net/cms/6382308c-8bfc-4993-9f82-aceab30cdb9f/41148188/-5841717463333222900.jpg" alt="1579 Aria Ct" class="properties-slider-card__image" loading="lazy"> 834 <span class="properties-slider-card__tag lp-tag">For Sale</span> 835 </div> 836 <div class="properties-slider-card__details js-card__details"> 837 <p class="properties-slider-card__price">$2,478,888</p> 838 <p class="properties-slider-card__address">1579 Aria Ct, Livermore, CA 94550</p> 839 <ul class="properties-slider-card__features js-card__features"> 840 <li class="properties-slider-card__feature lp-icon lp-icon--bed lp-tag">5 Beds</li> 841 <li class="properties-slider-card__feature lp-icon lp-icon--bath lp-tag">5 Baths</li> 842 <li class="properties-slider-card__feature lp-icon lp-icon--sqft lp-tag">3,532 Sq.Ft.</li> 843 </ul> 844 </div> 845 <a href="/properties/1579-aria-ct-livermore-ca-us-94550-41148188" class="properties-slider-card__link"></a> 846 </li> 847 <li class="properties-slider-card splide__slide js-card"> 848 <div class="properties-slider-card__image-container"> 849 <img src="https://dlajgvw9htjpb.cloudfront.net/cms/6382308c-8bfc-4993-9f82-aceab30cdb9f/41142453/5222283091309908044.jpg" alt="125 Acorn Way" class="properties-slider-card__image" loading="lazy">
850 <span class="properties-slider-card__tag lp-tag">Sold</span> 851 </div> 852 <div class="properties-slider-card__details js-card__details"> 853 <p class="properties-slider-card__price">$2,468,000</p> 854 <p class="properties-slider-card__address">125 Acorn Way, Livermore, CA 94550</p> 855 <ul class="properties-slider-card__features js-card__features"> 856 <li class="properties-slider-card__feature lp-icon lp-icon--bed lp-tag">6 Beds</li> 857 <li class="properties-slider-card__feature lp-icon lp-icon--bath lp-tag">5 Baths</li> 858 <li class="properties-slider-card__feature lp-icon lp-icon--sqft lp-tag">3,532 Sq.Ft.</li> 859 </ul> 860 </div> 861 <a href="/properties/125-acorn-way-livermore-ca-us-94550-41142453" class="properties-slider-card__link"></a> 862 </li> 863 <li class="properties-slider-card splide__slide js-card"> 864 <div class="properties-slider-card__image-container"> 865 <img src="https://dlajgvw9htjpb.cloudfront.net/cms/6382308c-8bfc-4993-9f82-aceab30cdb9f/41084372/375804271813793426.jpg" alt="1071 Lexington Way" class="properties-slider-card__image" loading="lazy"> 866 <span class="properties-slider-card__tag lp-tag">Sold</span> 867 </div> 868 <div class="properties-slider-card__details js-card__details"> 869 <p class="properties-slider-card__price">$2,427,000</p> 870 <p class="properties-slider-card__address">1071 Lexington Way, Livermore, CA 94550</p> 871 <ul class="properties-slider-card__features js-card__features"> 872 <li class="properties-slider-card__feature lp-icon lp-icon--bed lp-tag">5 Beds</li> 873 <li class="properties-slider-card__feature lp-icon lp-icon--bath lp-tag">3 Baths</li> 874 <li class="properties-slider-card__feature lp-icon lp-icon--sqft lp-tag">2,894 Sq.Ft.</li> 875 </ul> 876 </div> 877 <a href="/properties/1071-lexington-way-livermore-ca-94550-41084372" class="properties-slider-card__link"></a> 878 </li> 879 <li class="properties-slider-card splide__slide js-card"> 880 <div class="properties-slider-card__image-container"> 881 <img src="https://dlajgvw9htjpb.cloudfront.net/cms/6382308c-8bfc-4993-9f82-aceab30cdb9f/41087056/-6247096987571933989.jpg" alt="282 Prato Way" class="properties-slider-card__image" loading="lazy"> 882 <span class="properties-slider-card__tag lp-tag">Sold</span> 883 </div> 884 <div class="properties-slider-card__details js-card__details"> 885 <p class="properties-slider-card__price">$2,380,000</p> 886 <p class="properties-slider-card__address">282 Prato Way, Livermore, CA 94550</p> 887 <ul class="properties-slider-card__features js-card__features"> 888 <li class="properties-slider-card__feature lp-icon lp-icon--bed lp-tag">4 Beds</li> 889 <li class="properties-slider-card__feature lp-icon lp-icon--bath lp-tag">3 Baths</li> 890 <li class="properties-slider-card__feature lp-icon lp-icon--sqft lp-tag">3,023 Sq.Ft.</li> 891 </ul> 892 </div> 893 <a href="/properties/282-prato-way-livermore-ca-94550-41087056" class="properties-slider-card__link"></a> 894 </li> 895 <li class="properties-slider-card splide__slide js-card"> 896 <div class="properties-slider-card__image-container"> 897 <img src="https://dlajgvw9htjpb.cloudfront.net/cms/6382308c-8bfc-4993-9f82-aceab30cdb9f/41081780/6481401459432158083.jpg" alt="26 Raccolio Way" class="properties-slider-card__image" loading="lazy">
898 <span class="properties-slider-card__tag lp-tag">Sold</span> 899 </div> 900 <div class="properties-slider-card__details js-card__details"> 901 <p class="properties-slider-card__price">$2,250,000</p> 902 <p class="properties-slider-card__address">26 Raccolio Way, Livermore, CA 94550</p> 903 <ul class="properties-slider-card__features js-card__features"> 904 <li class="properties-slider-card__feature lp-icon lp-icon--bed lp-tag">4 Beds</li> 905 <li class="properties-slider-card__feature lp-icon lp-icon--bath lp-tag">3 Baths</li> 906 <li class="properties-slider-card__feature lp-icon lp-icon--sqft lp-tag">3,023 Sq.Ft.</li> 907 </ul> 908 </div> 909 <a href="/properties/26-raccolio-way-livermore-ca-94550-41081780" class="properties-slider-card__link"></a> 910 </li> 911 <li class="properties-slider-card splide__slide js-card"> 912 <div class="properties-slider-card__image-container"> 913 <img src="https://dlajgvw9htjpb.cloudfront.net/cms/6382308c-8bfc-4993-9f82-aceab30cdb9f/41060023/1902080463945327045.jpg" alt="3058 Paseo Granada" class="properties-slider-card__image" loading="lazy"> 914 <span class="properties-slider-card__tag lp-tag">Sold</span> 915 </div> 916 <div class="properties-slider-card__details js-card__details"> 917 <p class="properties-slider-card__price">$2,250,000</p> 918 <p class="properties-slider-card__address">3058 Paseo Granada, Pleasanton, CA 94566</p> 919 <ul class="properties-slider-card__features js-card__features"> 920 <li class="properties-slider-card__feature lp-icon lp-icon--bed lp-tag">4 Beds</li> 921 <li class="properties-slider-card__feature lp-icon lp-icon--bath lp-tag">3 Baths</li> 922 <li class="properties-slider-card__feature lp-icon lp-icon--sqft lp-tag">3,027 Sq.Ft.</li> 923 </ul> 924 </div> 925 <a href="/properties/3058-paseo-granada-pleasanton-ca-94566-41060023" class="properties-slider-card__link"></a> 926 </li> 927 <li class="properties-slider-card splide__slide js-card"> 928 <div class="properties-slider-card__image-container"> 929 <img src="https://dlajgvw9htjpb.cloudfront.net/cms/6382308c-8bfc-4993-9f82-aceab30cdb9f/41101879/3584692592966387942.jpg" alt="1646 Cascina Ct" class="properties-slider-card__image" loading="lazy"> 930 <span class="properties-slider-card__tag lp-tag">Sold</span> 931 </div> 932 <div class="properties-slider-card__details js-card__details"> 933 <p class="properties-slider-card__price">$2,205,000</p> 934 <p class="properties-slider-card__address">1646 Cascina Ct, Livermore, CA 94550</p> 935 <ul class="properties-slider-card__features js-card__features"> 936 <li class="properties-slider-card__feature lp-icon lp-icon--bed lp-tag">4 Beds</li> 937 <li class="properties-slider-card__feature lp-icon lp-icon--bath lp-tag">3 Baths</li> 938 <li class="properties-slider-card__feature lp-icon lp-icon--sqft lp-tag">3,023 Sq.Ft.</li> 939 </ul> 940 </div> 941 <a href="/properties/1646-cascina-ct-livermore-ca-94550-41101879" class="properties-slider-card__link"></a> 942 </li> 943 <li class="properties-slider-card splide__slide js-card"> 944 <div class="properties-slider-card__image-container"> 945 <img src="https://dlajgvw9htjpb.cloudfront.net/cms/6382308c-8bfc-4993-9f82-aceab30cdb9f/41089703/3817023967630595172.jpg" alt="1599 Cielo Ct" class="properties-slider-card__image" loading="lazy">
946 <span class="properties-slider-card__tag lp-tag">Sold</span> 947 </div> 948 <div class="properties-slider-card__details js-card__details"> 949 <p class="properties-slider-card__price">$2,200,000</p> 950 <p class="properties-slider-card__address">1599 Cielo Ct, Livermore, CA 94550</p> 951 <ul class="properties-slider-card__features js-card__features"> 952 <li class="properties-slider-card__feature lp-icon lp-icon--bed lp-tag">4 Beds</li> 953 <li class="properties-slider-card__feature lp-icon lp-icon--bath lp-tag">4 Baths</li> 954 <li class="properties-slider-card__feature lp-icon lp-icon--sqft lp-tag">2,834 Sq.Ft.</li> 955 </ul> 956 </div> 957 <a href="/properties/1599-cielo-ct-livermore-ca-94550-41089703" class="properties-slider-card__link"></a> 958 </li> 959 <li class="properties-slider-card splide__slide js-card"> 960 <div class="properties-slider-card__image-container"> 961 <img src="https://dlajgvw9htjpb.cloudfront.net/cms/6382308c-8bfc-4993-9f82-aceab30cdb9f/41098274/6980224851785733697.jpg" alt="1591 Aria Ct" class="properties-slider-card__image" loading="lazy"> 962 <span class="properties-slider-card__tag lp-tag">Sold</span> 963 </div> 964 <div class="properties-slider-card__details js-card__details"> 965 <p class="properties-slider-card__price">$2,150,000</p> 966 <p class="properties-slider-card__address">1591 Aria Ct, Livermore, CA 94550</p> 967 <ul class="properties-slider-card__features js-card__features"> 968 <li class="properties-slider-card__feature lp-icon lp-icon--bed lp-tag">4 Beds</li> 969 <li class="properties-slider-card__feature lp-icon lp-icon--bath lp-tag">3 Baths</li> 970 <li class="properties-slider-card__feature lp-icon lp-icon--sqft lp-tag">3,328 Sq.Ft.</li> 971 </ul> 972 </div> 973 <a href="/properties/1591-aria-ct-livermore-ca-94550-41098274" class="properties-slider-card__link"></a> 974 </li> 975 <li class="properties-slider-card splide__slide js-card"> 976 <div class="properties-slider-card__image-container"> 977 <img src="https://dlajgvw9htjpb.cloudfront.net/cms/6382308c-8bfc-4993-9f82-aceab30cdb9f/41116033/-8353074685476115288.jpg" alt="1650 Vetta Dr" class="properties-slider-card__image" loading="lazy"> 978 <span class="properties-slider-card__tag lp-tag">Sold</span> 979 </div> 980 <div class="properties-slider-card__details js-card__details"> 981 <p class="properties-slider-card__price">$2,098,000</p> 982 <p class="properties-slider-card__address">1650 Vetta Dr, Livermore, CA 94550</p> 983 <ul class="properties-slider-card__features js-card__features"> 984 <li class="properties-slider-card__feature lp-icon lp-icon--bed lp-tag">4 Beds</li> 985 <li class="properties-slider-card__feature lp-icon lp-icon--bath lp-tag">3 Baths</li> 986 <li class="properties-slider-card__feature lp-icon lp-icon--sqft lp-tag">2,834 Sq.Ft.</li> 987 </ul> 988 </div> 989 <a href="/properties/1650-vetta-dr-livermore-ca-us-94550-41116033" class="properties-slider-card__link"></a> 990 </li> 991 <li class="properties-slider-card splide__slide js-card"> 992 <div class="properties-slider-card__image-container"> 993 <img src="https://dlajgvw9htjpb.cloudfront.net/cms/6382308c-8bfc-4993-9f82-aceab30cdb9f/41138854/8910832333766423091.jpg" alt="1800 Versailles Ave" class="properties-slider-card__image" loading="lazy">
994 <span class="properties-slider-card__tag lp-tag">Sold</span> 995 </div> 996 <div class="properties-slider-card__details js-card__details"> 997 <p class="properties-slider-card__price">$1,950,000</p> 998 <p class="properties-slider-card__address">1800 Versailles Ave, Alameda, CA 94501</p> 999 <ul class="properties-slider-card__features js-card__features"> 1000 <li class="properties-slider-card__feature lp-icon lp-icon--bed lp-tag">4 Beds</li> 1001 <li class="properties-slider-card__feature lp-icon lp-icon--bath lp-tag">2 Baths</li> 1002 <li class="properties-slider-card__feature lp-icon lp-icon--sqft lp-tag">1,820 Sq.Ft.</li> 1003 </ul> 1004 </div> 1005 <a href="/properties/1800-versailles-ave-alameda-ca-us-94501-41138854" class="properties-slider-card__link"></a> 1006 </li> 1007 <li class="properties-slider-card splide__slide js-card"> 1008 <div class="properties-slider-card__image-container"> 1009 <img src="https://dlajgvw9htjpb.cloudfront.net/cms/6382308c-8bfc-4993-9f82-aceab30cdb9f/41022555/-6750942574723683880.jpg" alt="71 Raccolio Way" class="properties-slider-card__image" loading="lazy"> 1010 <span class="properties-slider-card__tag lp-tag">Sold</span> 1011 </div> 1012 <div class="properties-slider-card__details js-card__details"> 1013 <p class="properties-slider-card__price">$1,935,000</p> 1014 <p class="properties-slider-card__address">71 Raccolio Way, Livermore, CA 94550</p> 1015 <ul class="properties-slider-card__features js-card__features"> 1016 <li class="properties-slider-card__feature lp-icon lp-icon--bed lp-tag">4 Beds</li> 1017 <li class="properties-slider-card__feature lp-icon lp-icon--bath lp-tag">3 Baths</li> 1018 <li class="properties-slider-card__feature lp-icon lp-icon--sqft lp-tag">2,834 Sq.Ft.</li> 1019 </ul> 1020 </div> 1021 <a href="/properties/71-raccolio-way-livermore-ca-94550-41022555" class="properties-slider-card__link"></a> 1022 </li> 1023 <li class="properties-slider-card splide__slide js-card"> 1024 <div class="properties-slider-card__image-container"> 1025 <img src="https://dlajgvw9htjpb.cloudfront.net/cms/6382308c-8bfc-4993-9f82-aceab30cdb9f/41024749/-4572270242310928220.jpg" alt="1066 Camino Ramon" class="properties-slider-card__image" loading="lazy"> 1026 <span class="properties-slider-card__tag lp-tag">Sold</span> 1027 </div> 1028 <div class="properties-slider-card__details js-card__details"> 1029 <p class="properties-slider-card__price">$1,600,000</p> 1030 <p class="properties-slider-card__address">1066 Camino Ramon, San Jose, CA 95125</p> 1031 <ul class="properties-slider-card__features js-card__features"> 1032 <li class="properties-slider-card__feature lp-icon lp-icon--bed lp-tag">3 Beds</li> 1033 <li class="properties-slider-card__feature lp-icon lp-icon--bath lp-tag">2 Baths</li> 1034 <li class="properties-slider-card__feature lp-icon lp-icon--sqft lp-tag">1,547 Sq.Ft.</li> 1035 </ul> 1036 </div> 1037 <a href="/properties/1066-camino-ramon-san-jose-ca-95125-41024749" class="properties-slider-card__link"></a> 1038 </li> 1039 <li class="properties-slider-card splide__slide js-card"> 1040 <div class="properties-slider-card__image-container"> 1041 <img src="https://dlajgvw9htjpb.cloudfront.net/cms/6382308c-8bfc-4993-9f82-aceab30cdb9f/41055306/8024696178642681933.jpg" alt="1171 Innsbruck St" class="properties-slider-card__image" loading="lazy">
1042 <span class="properties-slider-card__tag lp-tag">Sold</span> 1043 </div> 1044 <div class="properties-slider-card__details js-card__details"> 1045 <p class="properties-slider-card__price">$1,551,000</p> 1046 <p class="properties-slider-card__address">1171 Innsbruck St, Livermore, CA 94550</p> 1047 <ul class="properties-slider-card__features js-card__features"> 1048 <li class="properties-slider-card__feature lp-icon lp-icon--bed lp-tag">4 Beds</li> 1049 <li class="properties-slider-card__feature lp-icon lp-icon--bath lp-tag">2 Baths</li> 1050 <li class="properties-slider-card__feature lp-icon lp-icon--sqft lp-tag">2,128 Sq.Ft.</li> 1051 </ul> 1052 </div> 1053 <a href="/properties/1171-innsbruck-st-livermore-ca-94550-41055306" class="properties-slider-card__link"></a> 1054 </li> 1055 <li class="properties-slider-card splide__slide js-card"> 1056 <div class="properties-slider-card__image-container"> 1057 <img src="https://dlajgvw9htjpb.cloudfront.net/cms/6382308c-8bfc-4993-9f82-aceab30cdb9f/41133559/-4350358090532131953.jpg" alt="34517 Windflower Ln" class="properties-slider-card__image" loading="lazy"> 1058 <span class="properties-slider-card__tag lp-tag">Sold</span> 1059 </div> 1060 <div class="properties-slider-card__details js-card__details"> 1061 <p class="properties-slider-card__price">$1,470,000</p> 1062 <p class="properties-slider-card__address">34517 Windflower Ln, Union City, CA 94587</p> 1063 <ul class="properties-slider-card__features js-card__features"> 1064 <li class="properties-slider-card__feature lp-icon lp-icon--bed lp-tag">4 Beds</li> 1065 <li class="properties-slider-card__feature lp-icon lp-icon--bath lp-tag">3 Baths</li> 1066 <li class="properties-slider-card__feature lp-icon lp-icon--sqft lp-tag">1,914 Sq.Ft.</li> 1067 </ul> 1068 </div> 1069 <a href="/properties/34517-windflower-ln-union-city-ca-us-94587-41133559" class="properties-slider-card__link"></a> 1070 </li> 1071 <li class="properties-slider-card splide__slide js-card"> 1072 <div class="properties-slider-card__image-container"> 1073 <img src="https://dlajgvw9htjpb.cloudfront.net/cms/6382308c-8bfc-4993-9f82-aceab30cdb9f/41115501/-4019765663937933309.jpg" alt="393 Lloyd St, Livermore" class="properties-slider-card__image" loading="lazy"> 1074 <span class="properties-slider-card__tag lp-tag">Sold</span> 1075 </div> 1076 <div class="properties-slider-card__details js-card__details"> 1077 <p class="properties-slider-card__price">$1,432,000</p> 1078 <p class="properties-slider-card__address">393 Lloyd St, Livermore, CA 94550</p> 1079 <ul class="properties-slider-card__features js-card__features"> 1080 <li class="properties-slider-card__feature lp-icon lp-icon--bed lp-tag">5 Beds</li> 1081 <li class="properties-slider-card__feature lp-icon lp-icon--bath lp-tag">4 Baths</li> 1082 <li class="properties-slider-card__feature lp-icon lp-icon--sqft lp-tag">2,561 Sq.Ft.</li> 1083 </ul> 1084 </div> 1085 <a href="/properties/393-lloyd-st-livermore-livermore-ca-us-94550-41115501" class="properties-slider-card__link"></a> 1086 </li> 1087 <li class="properties-slider-card splide__slide js-card"> 1088 <div class="properties-slider-card__image-container"> 1089 <img src="https://dlajgvw9htjpb.cloudfront.net/cms/6382308c-8bfc-4993-9f82-aceab30cdb9f/41126471/1973696256284658936.jpg" alt="907 Hazel St" class="properties-slider-card__image" loading="lazy">
1090 <span class="properties-slider-card__tag lp-tag">Sold</span> 1091 </div> 1092 <div class="properties-slider-card__details js-card__details"> 1093 <p class="properties-slider-card__price">$1,348,000</p> 1094 <p class="properties-slider-card__address">907 Hazel St, Livermore, CA 94550</p> 1095 <ul class="properties-slider-card__features js-card__features"> 1096 <li class="properties-slider-card__feature lp-icon lp-icon--bed lp-tag">5 Beds</li> 1097 <li class="properties-slider-card__feature lp-icon lp-icon--bath lp-tag">3 Baths</li> 1098 <li class="properties-slider-card__feature lp-icon lp-icon--sqft lp-tag">2,068 Sq.Ft.</li> 1099 </ul> 1100 </div> 1101 <a href="/properties/907-hazel-st-livermore-ca-us-94550-41126471" class="properties-slider-card__link"></a> 1102 </li> 1103 <li class="properties-slider-card splide__slide js-card"> 1104 <div class="properties-slider-card__image-container"> 1105 <img src="https://dlajgvw9htjpb.cloudfront.net/cms/6382308c-8bfc-4993-9f82-aceab30cdb9f/41081398/-1253078773764137919.jpg" alt="649 Hanover St" class="properties-slider-card__image" loading="lazy"> 1106 <span class="properties-slider-card__tag lp-tag">Sold</span> 1107 </div> 1108 <div class="properties-slider-card__details js-card__details"> 1109 <p class="properties-slider-card__price">$1,280,000</p> 1110 <p class="properties-slider-card__address">649 Hanover St, Livermore, CA 94551</p> 1111 <ul class="properties-slider-card__features js-card__features"> 1112 <li class="properties-slider-card__feature lp-icon lp-icon--bed lp-tag">3 Beds</li> 1113 <li class="properties-slider-card__feature lp-icon lp-icon--bath lp-tag">2 Baths</li> 1114 <li class="properties-slider-card__feature lp-icon lp-icon--sqft lp-tag">1,366 Sq.Ft.</li> 1115 </ul> 1116 </div> 1117 <a href="/properties/649-hanover-st-livermore-ca-94551-41081398" class="properties-slider-card__link"></a> 1118 </li> 1119 <li class="properties-slider-card splide__slide js-card"> 1120 <div class="properties-slider-card__image-container"> 1121 <img src="https://dlajgvw9htjpb.cloudfront.net/cms/6382308c-8bfc-4993-9f82-aceab30cdb9f/41121559/8928238645330304567.jpg" alt="1718 Pedrozzi Cmn" class="properties-slider-card__image" loading="lazy"> 1122 <span class="properties-slider-card__tag lp-tag">Sold</span> 1123 </div> 1124 <div class="properties-slider-card__details js-card__details"> 1125 <p class="properties-slider-card__price">$949,000</p> 1126 <p class="properties-slider-card__address">1718 Pedrozzi Cmn, Livermore, CA 94551</p> 1127 <ul class="properties-slider-card__features js-card__features"> 1128 <li class="properties-slider-card__feature lp-icon lp-icon--bed lp-tag">4 Beds</li> 1129 <li class="properties-slider-card__feature lp-icon lp-icon--bath lp-tag">4 Baths</li> 1130 <li class="properties-slider-card__feature lp-icon lp-icon--sqft lp-tag">1,929 Sq.Ft.</li> 1131 </ul> 1132 </div> 1133 <a href="/properties/1718-pedrozzi-cmn-livermore-ca-94551-41121559" class="properties-slider-card__link"></a> 1134 </li> 1135 <li class="properties-slider-card splide__slide js-card"> 1136 <div class="properties-slider-card__image-container"> 1137 <img src="https://dlajgvw9htjpb.cloudfront.net/cms/6382308c-8bfc-4993-9f82-aceab30cdb9f/41082053/-6442102827382592935.jpg" alt="725 Discovery Bay Blvd" class="properties-slider-card__image" loading="lazy">
1138 <span class="properties-slider-card__tag lp-tag">Sold</span> 1139 </div> 1140 <div class="properties-slider-card__details js-card__details"> 1141 <p class="properties-slider-card__price">$926,888</p> 1142 <p class="properties-slider-card__address">725 Discovery Bay Blvd, Discovery Bay, CA 94505</p> 1143 <ul class="properties-slider-card__features js-card__features"> 1144 <li class="properties-slider-card__feature lp-icon lp-icon--bed lp-tag">4 Beds</li> 1145 <li class="properties-slider-card__feature lp-icon lp-icon--bath lp-tag">3 Baths</li> 1146 <li class="properties-slider-card__feature lp-icon lp-icon--sqft lp-tag">2,865 Sq.Ft.</li> 1147 </ul> 1148 </div> 1149 <a href="/properties/725-discovery-bay-blvd-discovery-bay-ca-94505-41082053" class="properties-slider-card__link"></a> 1150 </li> 1151 <li class="properties-slider-card splide__slide js-card"> 1152 <div class="properties-slider-card__image-container"> 1153 <img src="https://dlajgvw9htjpb.cloudfront.net/cms/6382308c-8bfc-4993-9f82-aceab30cdb9f/41053303/-5685511529037949310.jpg" alt="236 Canyon Woods Way # C" class="properties-slider-card__image" loading="lazy"> 1154 <span class="properties-slider-card__tag lp-tag">Sold</span> 1155 </div> 1156 <div class="properties-slider-card__details js-card__details"> 1157 <p class="properties-slider-card__price">$838,000</p> 1158 <p class="properties-slider-card__address">236 Canyon Woods Way # C, San Ramon, CA 94582</p> 1159 <ul class="properties-slider-card__features js-card__features"> 1160 <li class="properties-slider-card__feature lp-icon lp-icon--bed lp-tag">2 Beds</li> 1161 <li class="properties-slider-card__feature lp-icon lp-icon--bath lp-tag">2 Baths</li> 1162 <li class="properties-slider-card__feature lp-icon lp-icon--sqft lp-tag">1,031 Sq.Ft.</li> 1163 </ul> 1164 </div> 1165 <a href="/properties/236-canyon-woods-way-c-san-ramon-ca-94582-41053303" class="properties-slider-card__link"></a> 1166 </li> 1167 <li class="properties-slider-card splide__slide js-card"> 1168 <div class="properties-slider-card__image-container"> 1169 <img src="https://dlajgvw9htjpb.cloudfront.net/cms/6382308c-8bfc-4993-9f82-aceab30cdb9f/41040372/-8172633893658586764.jpg" alt="162 Dogwood Pl" class="properties-slider-card__image" loading="lazy"> 1170 <span class="properties-slider-card__tag lp-tag">Sold</span> 1171 </div> 1172 <div class="properties-slider-card__details js-card__details"> 1173 <p class="properties-slider-card__price">$824,950</p> 1174 <p class="properties-slider-card__address">162 Dogwood Pl, San Ramon, CA 94583</p> 1175 <ul class="properties-slider-card__features js-card__features"> 1176 <li class="properties-slider-card__feature lp-icon lp-icon--bed lp-tag">2 Beds</li> 1177 <li class="properties-slider-card__feature lp-icon lp-icon--bath lp-tag">2 Baths</li> 1178 <li class="properties-slider-card__feature lp-icon lp-icon--sqft lp-tag">960 Sq.Ft.</li> 1179 </ul> 1180 </div> 1181 <a href="/properties/162-dogwo
1181od-pl-san-ramon-ca-94583-41040372" class="properties-slider-card__link"></a> 1182 </li> 1183 <li class="properties-slider-card splide__slide js-card"> 1184 <div class="properties-slider-card__image-container"> 1185 <img src="https://dlajgvw9htjpb.cloudfront.net/cms/6382308c-8bfc-4993-9f82-aceab30cdb9f/41107051/-1896722606714667979.jpg" alt="760 Griffey Way" class="properties-slider-card__image" loading="lazy"> 1186 <span class="properties-slider-card__tag lp-tag">Sold</span> 1187 </div> 1188 <div class="properties-slider-card__details js-card__details"> 1189 <p class="properties-slider-card__price">$750,000</p> 1190 <p class="properties-slider-card__address">760 Griffey Way, Galt, CA 95632</p> 1191 <ul class="properties-slider-card__features js-card__features"> 1192 <li class="properties-slider-card__feature lp-icon lp-icon--bed lp-tag">5 Beds</li> 1193 <li class="properties-slider-card__feature lp-icon lp-icon--bath lp-tag">3 Baths</li> 1194 <li class="properties-slider-card__feature lp-icon lp-icon--sqft lp-tag">2,766 Sq.Ft.</li> 1195 </ul> 1196 </div> 1197 <a href="/properties/760-griffey-way-galt-ca-us-95632-41107051" class="properties-slider-card__link"></a> 1198 </li> 1199 <li class="properties-slider-card splide__slide js-card"> 1200 <div class="properties-slider-card__image-container"> 1201 <img src="https://dlajgvw9htjpb.cloudfront.net/cms/6382308c-8bfc-4993-9f82-aceab30cdb9f/41024547/1751211152197474500.jpg" alt="166 Bluebird Ave" class="properties-slider-card__image" loading="lazy"> 1202 <span class="properties-slider-card__tag lp-tag">Sold</span> 1203 </div> 1204 <div class="properties-slider-card__details js-card__details"> 1205 <p class="properties-slider-card__price">$715,000</p> 1206 <p class="properties-slider-card__address">166 Bluebird Ave, Livermore, CA 94551</p> 1207 <ul class="properties-slider-card__features js-card__features"> 1208 <li class="properties-slider-card__feature lp-icon lp-icon--bed lp-tag">3 Beds</li> 1209 <li class="properties-slider-card__feature lp-icon lp-icon--bath lp-tag">2 Baths</li> 1210 <li class="properties-slider-card__feature lp-icon lp-icon--sqft lp-tag">1,188 Sq.Ft.</li> 1211 </ul> 1212 </div> 1213 <a href="/properties/166-bluebird-ave-livermore-ca-94551-41024547" class="properties-slider-card__link"></a> 1214 </li> 1215 <li class="properties-slider-card splide__slide js-card"> 1216 <div class="properties-slider-card__image-container"> 1217 <img src="https://dlajgvw9htjpb.cloudfront.net/cms/6382308c-8bfc-4993-9f82-aceab30cdb9f/41087950/-1604462339702732239.jpg" alt="112 Machado Ct" class="properties-slider-card__image" loading="lazy"> 1218 <span class="properties-slider-card__tag lp-tag">Sold</span> 1219 </div> 1220 <div class="properties-slider-card__details js-card__details"> 1221 <p class="properties-slider-card__price">$680,000</p> 1222 <p class="properties-slider-card__address">112 Machado Ct, Tracy, CA 95376</p> 1223 <ul class="properties-slider-card__features js-card__features"> 1224 <li class="properties-slider-card__feature lp-icon lp-icon--bed lp-tag">3 Beds</li> 1225 <li class="properties-slider-card__feature lp-icon lp-icon--bath lp-tag">3 Baths</li> 1226 <li class="properties-slider-card__feature lp-icon lp-icon--sqft lp-tag">1,812 Sq.Ft.</li> 1227 </ul> 1228 </div> 1229 <a href="/properties/112-machado-ct-tracy-ca-95376-41087950" class="properties-slider-card__link"></a> 1230 </li> 1231 <li class="properties-slider-card splide__slide js-card"> 1232 <div class="properties-slider-card__image-container"> 1233 <img src="https://dlajgvw9htjpb.cloudfront.net/cms/6382308c-8bfc-4993-9f82-aceab30cdb9f/41083619/1434575646788847235.jpg" alt="4777 Apple Tree Cmn" class="properties-slider-card__image" loading="lazy">
1234 <span class="properties-slider-card__tag lp-tag">Sold</span> 1235 </div> 1236 <div class="properties-slider-card__details js-card__details"> 1237 <p class="properties-slider-card__price">$675,000</p> 1238 <p class="properties-slider-card__address">4777 Apple Tree Cmn, Livermore, CA 94551</p> 1239 <ul class="properties-slider-card__features js-card__features"> 1240 <li class="properties-slider-card__feature lp-icon lp-icon--bed lp-tag">2 Beds</li> 1241 <li class="properties-slider-card__feature lp-icon lp-icon--bath lp-tag">2 Baths</li> 1242 <li class="properties-slider-card__feature lp-icon lp-icon--sqft lp-tag">944 Sq.Ft.</li> 1243 </ul> 1244 </div> 1245 <a href="/properties/4777-apple-tree-cmn-livermore-ca-94551-41083619" class="properties-slider-card__link"></a> 1246 </li> 1247 <li class="properties-slider-card splide__slide js-card"> 1248 <div class="properties-slider-card__image-container"> 1249 <img src="https://dlajgvw9htjpb.cloudfront.net/cms/6382308c-8bfc-4993-9f82-aceab30cdb9f/41047986/-6764600601104755399.jpg" alt="3035 Dovenshire Dr" class="properties-slider-card__image" loading="lazy"> 1250 <span class="properties-slider-card__tag lp-tag">Sold</span> 1251 </div> 1252 <div class="properties-slider-card__details js-card__details"> 1253 <p class="properties-slider-card__price">$507,000</p> 1254 <p class="properties-slider-card__address">3035 Dovenshire Dr, Tracy, CA 95376</p> 1255 <ul class="properties-slider-card__features js-card__features"> 1256 <li class="properties-slider-card__feature lp-icon lp-icon--bed lp-tag">3 Beds</li> 1257 <li class="properties-slider-card__feature lp-icon lp-icon--bath lp-tag">2 Baths</li> 1258 <li class="properties-slider-card__feature lp-icon lp-icon--sqft lp-tag">1,339 Sq.Ft.</li> 1259 </ul> 1260 </div> 1261 <a href="/properties/3035-dovenshire-dr-tracy-ca-95376-41047986" class="properties-slider-card__link"></a> 1262 </li> 1263 <li class="properties-slider-card splide__slide js-card"> 1264 <div class="properties-slider-card__image-container"> 1265 <img src="https://dlajgvw9htjpb.cloudfront.net/cms/6382308c-8bfc-4993-9f82-aceab30cdb9f/41110884/7671746826073728315.jpg" alt="88 E San Fernando St # 804" class="properties-slider-card__image" loading="lazy"> 1266 <span class="properties-slider-card__tag lp-tag">Sold</span> 1267 </div> 1268 <div class="properties-slider-card__details js-card__details"> 1269 <p class="properties-slider-card__price">$486,000</p> 1270 <p class="properties-slider-card__address">88 E San Fernando St # 804, San Jose, CA 95113</p> 1271 <ul class="properties-slider-card__features js-card__features"> 1272 <li class="properties-slider-card__feature lp-icon lp-icon--bed lp-tag">1 Bed</li> 1273 <li class="properties-slider-card__feature lp-icon lp-icon--bath lp-tag">1 Bath</li> 1274 <li class="properties-slider-card__feature lp-icon lp-icon--sqft lp-tag">732 Sq.Ft.</li> 1275 </ul> 1276 </div> 1277 <a href="/properties/88-e-san-fernando-st-804-san-jose-ca-95113-41110884" class="properties-slider-card__link"></a> 1278 </li> 1279 <li class="properties-slider-card splide__slide js-card"> 1280 <div class="properties-slider-card__image-container"> 1281 <img src="https://dlajgvw9htjpb.cloudfront.net/cms/6382308c-8bfc-4993-9f82-aceab30cdb9f/41136116/-5861848105680963680.jpg" alt="3263 Viney
1281ard Ave # 62" class="properties-slider-card__image" loading="lazy"> 1282 <span class="properties-slider-card__tag lp-tag">Sold</span> 1283 </div> 1284 <div class="properties-slider-card__details js-card__details"> 1285 <p class="properties-slider-card__price">$184,500</p> 1286 <p class="properties-slider-card__address">3263 Vineyard Ave # 62, Pleasanton, CA 94566</p> 1287 <ul class="properties-slider-card__features js-card__features"> 1288 <li class="properties-slider-card__feature lp-icon lp-icon--bed lp-tag">2 Beds</li> 1289 <li class="properties-slider-card__feature lp-icon lp-icon--bath lp-tag">2 Baths</li> 1290 <li class="properties-slider-card__feature lp-icon lp-icon--sqft lp-tag">1,536 Sq.Ft.</li> 1291 </ul> 1292 </div> 1293 <a href="/properties/3263-vineyard-ave-62-pleasanton-ca-us-94566-41136116" class="properties-slider-card__link"></a> 1294 </li> 1295 </ul> 1296 </div> 1297 </div> 1298 </div> 1299 <div class="properties-slider__arrows"> 1300 <button class="properties-slider__arrow properties-slider__arrow--prev lp-arrow lp-arrow--prev js-arrow--prev " style=""><span class="lp-visually-hidden">previous</span></button> 1301 <button class="properties-slider__arrow properties-slider__arrow--next lp-arrow lp-arrow--next js-arrow--next " style=""><span class="lp-visually-hidden">next</span></button> 1302 </div> 1303 <a 1304 href="/properties" 1305 1306 class="properties-slider__cta lp-btn button-style-1" 1307 1308 1309 1310 1311 1312 > 1313 <span class="properties-slider__cta-content lp-btn--filled__content">View All</span> 1314 </a> 1315 </div> 1316 1317 1318</section> 1319<section id="section-fb7349af-e14f-467a-9daf-07d33ead2bb9" class="solid-section is-font-color-dark is-background-color-light" data-el-id="8cd6d0a7-4760-49c0-8edb-40ec971e0c3a"> 1320 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@splidejs/[email protected]/dist/css/splide-core.min.css"/> 1321
1321<script src="https://cdn.jsdelivr.net/npm/@splidejs/[email protected]/dist/js/splide.min.js"></script>
1321 1322<div class="neighborhoods-slider lp-vertical-paddings js-main-container" data-full-width-slider="false" data-card-layout="Multiple" data-show-cats="false" style=" 1323 --titleTextColor: rgba(0, 0, 0, 1); 1324 --boxBgColor: rgba(245, 242, 238, 1); 1325 --boxTextColor: rgba(255, 255, 255, 1)"> 1326 1327 <div class="neighborhoods-slider__title-group"> 1328 <p class="neighborhoods-slider__pretitle lp-text--pretitle">Areas of Expertise</p> 1329 <h2 class="neighborhoods-slider__title">Discover hidden gems in the Tri-Valley</h2> 1330 1331 </div> 1332 1333 <div class="neighborhoods-slider__list "> 1334 <div class="splide neighborhoods-slider__list-slider js-list-slider"> 1335 <div class="splide__track"> 1336 <ul class="splide__list"> 1337 <li class="neighborhoods-slider__list-item splide__slide lp-icon js-list-item" data-tags=""> 1338 <span class="neighborhoods-slider__list-item-text">Livermore</span> 1339 </li> 1340 <li class="neighborhoods-slider__list-item splide__slide lp-icon js-list-item" data-tags=""> 1341 <span class="neighborhoods-slider__list-item-text">Pleasanton</span> 1342 </li> 1343 <li class="neighborhoods-slider__list-item splide__slide lp-icon js-list-item" data-tags=""> 1344 <span class="neighborhoods-slider__list-item-text">Dublin</span> 1345 </li> 1346 <li class="neighborhoods-slider__list-item splide__slide lp-icon js-list-item" data-tags=""> 1347 <span class="neighborhoods-slider__list-item-text">Danville</span> 1348 </li> 1349 <li class="neighborhoods-slider__list-item splide__slide lp-icon js-list-item" data-tags=""> 1350 <span class="neighborhoods-slider__list-item-text">San Ramon</span> 1351 </li> 1352 <li class="neighborhoods-slider__list-item splide__slide lp-icon js-list-item" data-tags=""> 1353 <span class="neighborhoods-slider__list-item-text">Ruby Hill</span> 1354 </li> 1355 </ul> 1356 </div> 1357 </div> 1358 </div> 1359 1360 <div class="neighborhoods-slider__images "> 1361 1362 <div class="neighborhoods-slider__images-slider splide js-images-slider"> 1363 <div class="splide__track"> 1364 <ul class="splide__list"> 1365 <li class="neighborhoods-slider__card neighborhoods-slider__card--full splide__slide js-card" data-neighborhood="Livermore" data-tags=""> 1366 <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/61f93036-30ca-4734-ac8f-9500911b2b16" 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/61f93036-30ca-4734-ac8f-9500911b2b16 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/61f93036-30ca-4734-ac8f-9500911b2b16 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/61f93036-30ca-4734-ac8f-9500911b2b16 1920w" sizes="(max-width: 1024px) 100vw, 64.93vw" alt="Livermore" class="neighborhoods-slider__card-image" loading="lazy"> 1367 <div class="neighborhoods-slider__card-content neighborhoods-slider__card-content--centered"> 1368 <h4 class="neighborhoods-slider__card-content-title"><span class="neighborhoods-slider__card-content-title-keyword">Explore</span> Livermore</h4> 1369 <p class="neighborhoods-slider__card-content-description">Discover the charm of Livermore, CA, and find your dream home in one of the most desirable locations in the Bay Area.</p> 1370 <a href="/neighborhoods/livermore" class="neighborhoods-slider__card-link lp-link hyperlink-style-1">Read More</a> 1371 </div> 1372 </li> 1373 <li class="neighborhoods-slider__card neighborhoods-slider__card--full splide__slide js-card" data-neighborhood="Pleasanton" data-tags=""> 1374 <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/596e699a-05bb-4efc-853d-93d9825aa7f5" 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/596e699a-05bb-4efc-853d-93d9825aa7f5 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/596e699a-05bb-4efc-853d-93d9825aa7f5 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/596e699a-05bb-4efc-853d-93d9825aa7f5 1920w" sizes="(max-width: 1024px) 100vw, 64.93vw" alt="Pleasanton" class="neighborhoods-slider__card-image" loading="lazy"> 1375 <div class="neighborhoods-slider__card-content neighborhoods-slider__card-content--centered"> 1376 <h4 class="neighborhoods-slider__card-content-title"><span class="neighborhoods-slider__card-content-title-keyword">Explore</span> Pleasanton</h4> 1377 <p class="neighborhoods-slider__card-content-description">A city where picturesque landscapes, historical charm, and modern amenities converge to create an ideal living experience.</p> 1378 <a href="/neighborhoods/pleasanton" class="neighborhoods-slider__card-link lp-link hyperlink-style-1">Read More</a> 1379 </div> 1380 </li> 1381 <li class="neighborhoods-slider__card neighborhoods-slider__card--full splide__slide js-card" data-neighborhood="Dublin" data-tags=""> 1382 <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/5421c19a-9066-4174-9871-bf2e357f175d" 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/5421c19a-9066-4174-9871-bf2e357f175d 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/5421c19a-9066-4174-9871-bf2e357f175d 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/5421c19a-9066-4174-9871-bf2e357f175d 1920w" sizes="(max-width: 1024px) 100vw, 64.93vw" alt="Dublin" class="neighborhoods-slider__card-image" loading="lazy"> 1383 <div class="neighborhoods-slider__card-content neighborhoods-slider__card-content--centered"> 1384 <h4 class="neighborhoods-slider__card-content-title"><span class="neighborhoods-slider__card-content-title-keyword">Explore</span> Dublin</h4> 1385 <p class="neighborhoods-slider__card-content-description">Enjoy the cityâs family-friendly atmosphere and engage in community events that make Dublin a fantastic place to live.</p> 1386 <a href="/neighborhoods/dublin" class="neighborhoods-slider__card-link lp-link hyperlink-style-1">Read More</a> 1387 </div> 1388 </li> 1389 <li class="neighborhoods-slider__card neighborhoods-slider__card--full splide__slide js-card" data-neighborhood="Danville" data-tags=""> 1390 <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/785e768e-bb24-4ee9-8130-87d2d9ae1881" 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/785e768e-bb24-4ee9-8130-87d2d9ae1881 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/785e768e-bb24-4ee9-8130-87d2d9ae1881 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/785e768e-bb24-4ee9-8130-87d2d9ae1881 1920w" sizes="(max-width: 1024px) 100vw, 64.93vw" alt="Danville" class="neighborhoods-slider__card-image" loading="lazy"> 1391 <div class="neighborhoods-slider__card-content neighborhoods-slider__card-content--centered"> 1392 <h4 class="neighborhoods-slider__card-content-title"><span class="neighborhoods-slider__card-content-title-keyword">Explore</span> Danville</h4> 1393 <p class="neighborhoods-slider__card-content-description">37.8216° N, 122.0000° W</p> 1394 <a href="/neighborhoods/danville" class="neighborhoods-slider__card-link lp-link hyperlink-style-1">Read More</a> 1395 </div> 1396 </li> 1397 <li class="neighborhoods-slider__card neighborhoods-slider__card--full splide__slide js-card" data-neighborhood="San Ramon" data-tags=""> 1398 <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/4bf38308-e5cc-4f99-99ef-0c46b0dc8856" 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/4bf38308-e5cc-4f99-99ef-0c46b0dc8856 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/4bf38308-e5cc-4f99-99ef-0c46b0dc8856 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/4bf38308-e5cc-4f99-99ef-0c46b0dc8856 1920w" sizes="(max-width: 1024px) 100vw, 64.93vw" alt="San Ramon" class="neighborhoods-slider__card-image" loading="lazy"> 1399 <div class="neighborhoods-slider__card-content neighborhoods-slider__card-content--centered"> 1400 <h4 class="neighborhoods-slider__card-content-title"><span class="neighborhoods-slider__card-content-title-keyword">Explore</span> San Ramon</h4> 1401 <p class="neighborhoods-slider__card-content-description">37.7644° N, 121.9540° W</p> 1402 <a href="/neighborhoods/san-ramon" class="neighborhoods-slider__card-link lp-link hyperlink-style-1">Read More</a> 1403 </div> 1404 </li> 1405 <li class="neighborhoods-slider__card neighborhoods-slider__card--full splide__slide js-card" data-neighborhood="Ruby Hill" data-tags=""> 1406 <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/fae8990c-ccd2-4221-a33f-3b1a6e06eb76" 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/fae8990c-ccd2-4221-a33f-3b1a6e06eb76 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/fae8990c-ccd2-4221-a33f-3b1a6e06eb76 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/fae8990c-ccd2-4221-a33f-3b1a6e06eb76 1920w" sizes="(max-width: 1024px) 100vw, 64.93vw" alt="Ruby Hill"
1406class="neighborhoods-slider__card-image" loading="lazy"> 1407 <div class="neighborhoods-slider__card-content neighborhoods-slider__card-content--centered"> 1408 <h4 class="neighborhoods-slider__card-content-title"><span class="neighborhoods-slider__card-content-title-keyword">Explore</span> Ruby Hill</h4> 1409 <p class="neighborhoods-slider__card-content-description">37.6604° N, 121.8758° W</p> 1410 <a href="/neighborhoods/ruby-hill" class="neighborhoods-slider__card-link lp-link hyperlink-style-1">Read More</a> 1411 </div> 1412 </li> 1413 </ul> 1414 </div> 1415 </div> 1416 </div> 1417 1418 <div class="neighborhoods-slider__arrows js-arrows"> 1419 <button class="lp-arrow lp-arrow--prev "></button> 1420 <button class="lp-arrow lp-arrow--next "></button> 1421 </div> 1422 1423 <div class="neighborhoods-slider__cta-btn"> 1424 <a 1425 href="/neighborhoods" 1426 1427 class="neighborhoods-slider__btn lp-btn button-style-1" 1428 1429 1430 1431 1432 1433 > 1434 <span class="lp-btn__content">View All</span> 1435 </a> 1436 </div> 1437</div> 1438</section> 1439<section class="image-section is-font-color-dark is-background-color-light" id="section-0cae3508-3cc4-48dc-9582-6f81a06f07fb" data-el-id="e412fada-d987-4910-ae4c-bb99b0bf04d6"> 1440 <div class="home-valuation lp-vertical-paddings js-home-valuation" style="--titleColor: rgba(255, 255, 255, 1); --contentBoxColor: rgba(255, 255, 255, 1); --backColor: rgba(0, 0, 0, 0); --formTextColor: rgba(0, 0, 0, 1);"> 1441 <div class="home-valuation-row"> 1442 <div class="home-valuation-info"> 1443 <div class="home-valuation-info__pre-title lp-text--pretitle home-valuation__pre-title--with-title">Whatâs Your Home Worth?</div> 1444 1445 <h3 class="home-valuation-info__title home-valuation__title--with-pretitle">Get a Free, Accurate Home Valuation</h3> 1446 <div class="home-valuation-info__description"><p>Instant Estimates Backed by Local Expertise</p></div> 1447 </div> 1448 1449 <form class="home-valuation-form form js-form" data-type="contact-form"> 1450 <div class="home-valuation-tabs"> 1451 <div class="home-valuation-tabs__item js-home-valuation-tabs home-valuation__tab--active">1</div> 1452 <div class="home-valuation-tabs__item js-home-valuation-tabs">2</div> 1453 <div class="home-valuation-tabs__item js-home-valuation-tabs">3</div> 1454 </div> 1455 1456 <div class="home-valuation-step home-valuation-step--active js-home-valuation-step js-home-valuation-step--1"> 1457 <div class="lp-combo-input"> 1458 <label for="address" class="home-valuation-form__label lp-label">Enter your address to begin</label> 1459 <div class="lp-input--with-icon"> 1460 <input id="address" type="text" class="lp-input address-input js-address" name="address" placeholder="Type address" required> 1461 <div class="lp-icon lp-input-icon lp-input-icon--pin-map"></div> 1462 </div> 1463 <input type="hidden" name="message" class="js-message"> 1464 </div> 1465 <div class="js-home-valuation-map home-valuation-map"></div> 1466 <button type="button" class="home-valuation-form__btn lp-btn js-btn button-style-1" disabled> 1467 <span class="lp-btn__content">Continue</span> 1468 </button> 1469 </div> 1470 1471 <div class="home-valuation-step js-home-valuation-step js-home-valuation-step--2"> 1472 <div class="h-pot"> 1473 <label for="section-0cae3508-3cc4-48dc-9582-6f81a06f07fb-middleName">Middle Name</label> 1474 <input id="section-0cae3508-3cc4-48dc-9582-6f81a06f07fb-middleName" name="middleName" value="" autocomplete="off" tabindex="-1"> 1475 </div>
1476 <div class="lp-input-group lp-input--with-icon"> 1477 <input id="section-0cae3508-3cc4-48dc-9582-6f81a06f07fb-name" name="name" class="lp-input" placeholder="Your name" required/> 1478 <label for="section-0cae3508-3cc4-48dc-9582-6f81a06f07fb-name" class="home-valuation-form__label lp-label">Your name</label> 1479 <div class="lp-icon lp-input-icon icon--person"></div> 1480 </div> 1481 <div class="home-valuation-form__mail-phone"> 1482 <div class="lp-input-group lp-input--with-icon"> 1483 <input id="section-0cae3508-3cc4-48dc-9582-6f81a06f07fb-phone" type="tel" name="phone" class="lp-input" placeholder="Your phone" required/> 1484 <label for="section-0cae3508-3cc4-48dc-9582-6f81a06f07fb-phone" class="home-valuation-form__label lp-label">Phone</label> 1485 <div class="lp-icon lp-input-icon lp-icon--phone"></div> 1486 </div> 1487 <div class="lp-input-group lp-input--with-icon"> 1488 <input id="section-0cae3508-3cc4-48dc-9582-6f81a06f07fb-email" name="email" type="email" class="lp-input" placeholder="Your email address" required /> 1489 <label for="section-0cae3508-3cc4-48dc-9582-6f81a06f07fb-email" class="home-valuation-form__label lp-label">Email</label> 1490 <div class="lp-icon lp-input-icon lp-input-icon--mail"></div> 1491 </div> 1492 </div> 1493 1494 <div class="lp-combo-input custom-label-group"> 1495 <label class="home-valuation-form__label lp-label js-time-frame" for="time_frame">Select an option</label> 1496 <select id="time_frame" class="lp-input dropdown-select" value='' name="timeframe" required> 1497 <option value="" disabled selected>Select</option> 1498 <option value="I want to sell my home now">I want to sell my home now</option> 1499 <option value="In the next 3 months">In the next 3 months</option> 1500 <option value="In the next 12 months">In the next 12 months</option> 1501 <option value="I'm just curious..">I'm just curious..</option> 1502 </select> 1503 </div> 1504 1505 <div class="lp-disclaimer"> <div class='lp-tcr-content' style='margin-bottom: 1em;'> 1506 <span class='lp-tcr-message'> 1507 By providing your contact information to Couture Real Estate Team, your personal 1508 information will be processed in accordance with Couture Real Estate Team's 1509 <a href='/terms-and-conditions' target='_blank'>Privacy Policy</a>. By 1510 checking the box(es) below, you consent to receive communications 1511 regarding your real estate inquiries and related marketing and promotional 1512 updates in the manner selected by you. For SMS text messages, message 1513 frequency varies. Message and data rates may apply. You may opt out of 1514 receiving further communications from Couture Real Estate Team at any time. To opt 1515 out of receiving SMS text messages, reply STOP to unsubscribe. 1516 </span> 1517 </div> 1518 <label style='display: none;' for='section-0cae3508-3cc4-48dc-9582-6f81a06f07fb-termsAccepted'>Opt 1519 in/Disclaimer Consent:</label> 1520 <label class='lp-tcr-content' style='margin-bottom: 1em;'> 1521 <span class='lp-tcr-checkbox'> 1522 <input 1523 type='checkbox' 1524 name='termsAccepted' 1525 id='section-0cae3508-3cc4-48dc-9582-6f81a06f07fb-termsAccepted' 1526 oninvalid="this.setCustomValidity('Please accept the terms and conditions')" 1527 oninput="this.setCustomValidity('')" 1528 required 1529 value='Yes, I agree to receive email or phone call communications from Couture Real Estate Team.' 1530 /> 1531 </span> 1532 <span class='lp-tcr-message'> 1533 Yes, I agree to receive email or phone call communications from 1534 Couture Real Estate Team. 1535 </span> 1536 </label> 1537 <label style='display: none;' for='section-0cae3508-3cc4-48dc-9582-6f81a06f07fb-customConsent'>Opt 1538 in/Disclaimer Consent:</label> 1539 <label class='lp-tcr-content' style='margin-bottom: 1em;'> 1540 <span class='lp-tcr-checkbox'> 1541 <input 1542 type='checkbox' 1543 name='customConsent' 1544 id='section-0cae3508-3cc4-48dc-9582-6f81a06f07fb-customConsent'
1545 value='Yes, I agree to receive SMS text messages from Couture Real Estate Team.' 1546 /> 1547 </span> 1548 <span class='lp-tcr-message'> 1549 Yes, I agree to receive SMS text messages from Couture Real Estate Team. 1550 </span> 1551 </label> 1552 1553</div> 1554 <div class="submission-error-message" style="display: none;"></div> 1555 <div class="home-valuation-form__btn-container"> 1556 <input type="hidden" name="source" value="HOME_VALUATION" /> 1557 <button type="submit" class="home-valuation-form__btn home-valuation-btn--subscribe-btn lp-btn lp-icon button-style-1"> 1558 <span class="lp-btn__content">Continue</span> 1559 </button> 1560 </div> 1561 </div> 1562 1563 <div class="home-valuation-step js-home-valuation-step js-home-valuation-step--3"> 1564 <div class="home-valuation-success"> 1565 <h6 class="home-valuation-success__title">Thank You!</h6> 1566 <div class="home-valuation-success__description">We'll be in touch with your free personalized report. It'll compare your home to nearby properties, taking into account market conditions, location, and features to accurately determine its value.</div> 1567 <a href="/properties/sale" class="home-valuation-form__btn lp-btn button-style-1"> 1568 <span class="lp-btn__content">Search Homes</span> 1569 </a> 1570 </div> 1571 </div> 1572 </form> 1573 </div> 1574</div> 1575</section> 1576<section id="section-346316c9-a364-46cc-8a36-f6113f1201e3" class="solid-section is-font-color-dark is-background-color-light" data-el-id="46a8dcac-8416-4782-8d95-480c1fcc427e">
1577<script type="text/x-handlebars-template" class="blogItem pagination-script"> <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/{{slug}}"> 1578 <div class="blog-posts-slider-item__image-container"> 1579 {{#if categories}} 1580 <span class="blog-posts-slider-item__category lp-tag">{{categories.[0].name}}</span> 1581 {{/if}} 1582 {{{mediaImage media.[0] class="blog-posts-slider-item__image" sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" alt=name}}} 1583 </div> 1584 <div class="blog-posts-slider-item__description"> 1585 {{#if (or customAuthor createdBy.firstName createdBy.lastName publishedAt)}} 1586 <p class="blog-posts-slider-item__name"> 1587 {{#if (or customAuthor createdBy.firstName createdBy.lastName)}}{{#if customAuthor}}{{customAuthor}}{{else}}{{createdBy.firstName}} {{createdBy.lastName}}{{/if}}{{/if}} 1588 1589 {{#if publishedAt}}{{#if (or customAuthor createdBy.firstName createdBy.lastName)}} I {{/if}}{{/if}} 1590 1591 {{#if publishedAt}}{{hbFormatDate publishedAt}}{{/if}} 1592 </p> 1593 {{/if}} 1594 {{#if title}}<h3 class="blog-posts-slider-item__title">{{title}}</h3>{{/if}} 1595 {{#if categories}} 1596 <span class="blog-posts-slider-item__tag lp-tag" style="position: static;">{{categories.[0].name}}</span> 1597 {{/if}} 1598 </div> 1599 </a> 1600</script>
vendor: 1 bytes, line 1600
1600
1601<script type="text/x-handlebars-template" class="layoutNum pagination-script">{{#ifEquals layout "Single Post Slider"}}1{{/ifEquals}}{{#ifEquals layout "2-Post Slider"}}2{{/ifEquals}}{{#ifEquals layout "3-Post Slider"}}3{{/ifEquals}}{{#ifEquals layout "4-Post Slider"}}4{{/ifEquals}}</script>
1601 1602 1603 1604<link 1605rel="stylesheet" 1606href="https://cdn.jsdelivr.net/npm/@splidejs/[email protected]/dist/css/splide-core.min.css" 1607/> 1608
1609<script src="https://cdn.jsdelivr.net/npm/@splidejs/[email protected]/dist/js/splide.min.js"></script>
vendor: 1 bytes, line 1609
1609
1610<script src="https://cdn.jsdelivr.net/npm/@splidejs/[email protected]/dist/js/splide-extension-grid.min.js"></script>
1610 1611 1612<div class="blog-posts-slider lp-vertical-paddings" style="--titleTextColor: rgba(0, 0, 0, 1);"> 1613 <div class="blog-posts-slider__title-group"> 1614 <p class="blog-posts-slider__pretitle lp-text--pretitle blog-posts-slider__pretitle--with-title">REAL ESTATE INSIGHTS</p> 1615 <h2 class="blog-posts-slider__title">Blog Posts</h2> 1616 1617 </div> 1618 <div class="blog-posts-slider__collection blog-posts-slider__collection--2 js-slider splide" data-layout='2' data-items="47" data-autoscroll="false" data-autoscroll-interval="6"> 1619 <div class="splide__track"> 1620 <ul class="splide__list"> 1621 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/late-summer-in-livermore-how-downtown-and-the-wineries-sync-up-from-august-into-september"> 1622 <div class="blog-posts-slider-item__image-container"> 1623 <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/18636c4b-1271-43f1-8c59-dcb3cf202a6f" 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/18636c4b-1271-43f1-8c59-dcb3cf202a6f 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/18636c4b-1271-43f1-8c59-dcb3cf202a6f 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/18636c4b-1271-43f1-8c59-dcb3cf202a6f 1408w" alt="Covered stone-column loggia with a limestone fireplace, oatmeal sofa, olive tree, and lavender in golden evening light." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 1624 </div> 1625 <div class="blog-posts-slider-item__description"> 1626 <p class="blog-posts-slider-item__name"> 1627 1628 1629 1630 1631 August 6, 2026 1632 </p> 1633 <h3 class="blog-posts-slider-item__title">Late Summer In Livermore: How Downtown And The Wineries Sync Up From August Into September</h3> 1634 </div> 1635 </a> 1636 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/why-downtown-pleasanton-still-hears-train-horns-and-what-the-quiet-zone-meeting-will-decide"> 1637 <div class="blog-posts-slider-item__image-container"> 1638 <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/21f48815-2988-46d0-9ec6-cdaa8218c944" 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/21f48815-2988-46d0-9ec6-cdaa8218c944 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/21f48815-2988-46d0-9ec6-cdaa8218c944 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/21f48815-2988-46d0-9ec6-cdaa8218c944 1536w" alt="Cream-sided home with a recessed oak entry, limestone porch bases, concrete approach, green lawn, and sculptural garden tree in morning light." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 1639 </div> 1640 <div class="blog-posts-slider-item__description"> 1641 <p class="blog-posts-slider-item__name"> 1642 1643 1644 1645 1646 October 8, 2026 1647 </p> 1648 <h3 class="blog-posts-slider-item__title">Why Downtown Pleasanton Still Hears Train Horns, and What the Quiet Zone Meeting Will Decide</h3> 1649 </div> 1650 </a> 1651 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/ruby-hill-isnt-one-place-its-two-and-both-have-news-this-harvest-season"> 1652 <div class="blog-posts-slider-item__image-container"> 1653 <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/be945b01-e08a-4ff6-8cfa-60a9c8800995" 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/be945b01-e08a-4ff6-8cfa-60a9c8800995 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/be945b01-e08a-4ff6-8cfa-60a9c8800995 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/be945b01-e08a-4ff6-8cfa-60a9c8800995 1408w" alt="Two-story stucco home with a terracotta roof, limestone entry, and orange-red tree beside the motor court." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 1654 </div> 1655 <div class="blog-posts-slider-item__description"> 1656 <p class="blog-posts-slider-item__name"> 1657 1658 1659 1660 1661 September 3, 2026 1662 </p> 1663 <h3 class="blog-posts-slider-item__title">Ruby Hill Isn't One Place. It's Two, And Both Have News This Harvest Season.</h3> 1664 </div> 1665 </a> 1666 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/the-one-homesite-rule-every-south-livermore-vineyard-buyer-should-know-before-making-an-offer"> 1667 <div class="blog-posts-slider-item__image-container"> 1668 <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/7d972139-6547-456d-b83a-2c00d57641f2" 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/7d972139-6547-456d-b83a-2c00d57641f2 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/7d972139-6547-456d-b83a-2c00d57641f2 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/7d972139-6547-456d-b83a-2c00d57641f2 1536w" alt="Ivory stucco home with a terracotta roof beyond a broad gravel approach, framed by grapevines and an olive tree." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 1669 </div> 1670 <div class="blog-posts-slider-item__description"> 1671 <p class="blog-posts-slider-item__name"> 1672 1673 1674 1675 1676 October 1, 2026 1677 </p> 1678 <h3 class="blog-posts-slider-item__title">The One-Homesite Rule Every South Livermore Vineyard Buyer Should Know Before Making an Offer</h3> 1679 </div> 1680 </a> 1681 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/selling-your-san-ramon-home-while-relocating-away"> 1682 <div class="blog-posts-slider-item__image-container"> 1683 <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/fcbceb4d-7606-49d1-96ca-c5f90ad7190d" 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/fcbceb4d-7606-49d1-96ca-c5f90ad7190d 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/fcbceb4d-7606-49d1-96ca-c5f90ad7190d 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/fcbceb4d-7606-49d1-96ca-c5f90ad7190d 1408w" alt="Recessed front porch opening onto a bright foyer, framed by contemporary-traditional finishes and curated planting." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 1684 </div> 1685 <div class="blog-posts-slider-item__description"> 1686 <p class="blog-posts-slider-item__name"> 1687 1688 1689 1690 1691 June 25, 2026 1692 </p> 1693 <h3 class="blog-posts-slider-item__title">Selling Your San Ramon Home While Relocating Away</h3> 1694 </div> 1695 </a> 1696 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/downtown-pleasantons-empty-storefronts-arent-a-vacancy-problem-theyre-a-waiting-list"> 1697 <div class="blog-posts-slider-item__image-container"> 1698 <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/51c9bc5c-0899-4ba3-8a5c-c8250ce933b6" 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/51c9bc5c-0899-4ba3-8a5c-c8250ce933b6 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/51c9bc5c-0899-4ba3-8a5c-c8250ce933b6 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/51c9bc5c-0899-4ba3-8a5c-c8250ce933b6 1408w" alt="Two-story stucco house at dusk, warm windows glowing above a lawn and walkway to the covered entry." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 1699 </div> 1700 <div class="blog-posts-slider-item__description"> 1701 <p class="blog-posts-slider-item__name"> 1702 1703 1704 1705 1706 September 24, 2026 1707 </p> 1708 <h3 class="blog-posts-slider-item__title">Downtown Pleasanton's Empty Storefronts Aren't a Vacancy Problem. They're a Waiting List.</h3> 1709 </div> 1710 </a> 1711 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/dublins-home-prices-arent-split-east-vs-west-theyre-split-ranch-vs-ranch"> 1712 <div class="blog-posts-slider-item__image-container"> 1713 <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/df9ee918-a9c3-4f17-b10a-603b2027a1b0" 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/df9ee918-a9c3-4f17-b10a-603b2027a1b0 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/df9ee918-a9c3-4f17-b10a-603b2027a1b0 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/df9ee918-a9c3-4f17-b10a-603b2027a1b0 1408w" alt="Cream stucco suburban home with stone base, gabled roof, two-car garage, and paver walkway across a lawn." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 1714 </div> 1715 <div class="blog-posts-slider-item__description"> 1716 <p class="blog-posts-slider-item__name"> 1717 1718 1719 1720 1721 August 20, 2026 1722 </p> 1723 <h3 class="blog-posts-slider-item__title">Dublin'
1723s Home Prices Aren't Split East vs. West. They're Split Ranch vs. Ranch.</h3> 1724 </div> 1725 </a> 1726 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/san-ramon-home-prices-arent-falling-theyre-splitting"> 1727 <div class="blog-posts-slider-item__image-container"> 1728 <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/6b2c6614-62fd-449f-ac92-695bc6dd32d3" 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/6b2c6614-62fd-449f-ac92-695bc6dd32d3 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/6b2c6614-62fd-449f-ac92-695bc6dd32d3 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/6b2c6614-62fd-449f-ac92-695bc6dd32d3 1408w" alt="Two-story stucco home with a stone entry, curved paver motor court, clipped hedges, and a mature oak." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 1729 </div> 1730 <div class="blog-posts-slider-item__description"> 1731 <p class="blog-posts-slider-item__name"> 1732 1733 1734 1735 1736 September 17, 2026 1737 </p> 1738 <h3 class="blog-posts-slider-item__title">San Ramon Home Prices Aren't Falling. They're Splitting.</h3> 1739 </div> 1740 </a> 1741 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/bishop-ranch-keeps-trading-up-whats-new-to-eat-in-san-ramon-this-fall"> 1742 <div class="blog-posts-slider-item__image-container"> 1743 <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/a40b1d8f-416d-4183-b341-0b5ce43c004f" 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/a40b1d8f-416d-4183-b341-0b5ce43c004f 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/a40b1d8f-416d-4183-b341-0b5ce43c004f 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/a40b1d8f-416d-4183-b341-0b5ce43c004f 1408w" alt="Round oak dining table with linen chairs beside a window overlooking an olive tree and clipped garden hedge." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 1744 </div> 1745 <div class="blog-posts-slider-item__description"> 1746 <p class="blog-posts-slider-item__name"> 1747 1748 1749 1750 1751 August 13, 2026 1752 </p> 1753 <h3 class="blog-posts-slider-item__title">Bishop Ranch Keeps Trading Up: What's New To Eat In San Ramon This Fall</h3> 1754 </div> 1755 </a> 1756 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/in-ruby-hill-the-city-signs-off-last-the-neighborhood-signs-off-first"> 1757 <div class="blog-posts-slider-item__image-container"> 1758 <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/106f0e0f-6eca-4806-a19c-37b6a1c7431a" 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/106f0e0f-6eca-4806-a19c-37b6a1c7431a 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/106f0e0f-6eca-4806-a19c-37b6a1c7431a 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/106f0e0f-6eca-4806-a19c-37b6a1c7431a 1408w" alt="Two-story cream stucco home with a three-car garage, curved stone walkway, oak tree, and lavender landscaping." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 1759 </div> 1760 <div class="blog-posts-slider-item__description"> 1761 <p class="blog-posts-slider-item__name"> 1762 1763 1764 1765 1766 September 10, 2026 1767 </p> 1768 <h3 class="blog-posts-slider-item__title">In Ruby Hill, The City Signs Off Last. The Neighborhood Signs Off First.</h3> 1769 </div> 1770 </a> 1771 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/your-thursday-night-blueprint-in-dublin-emerald-glen-the-farmers-market-and-whats-opening-arou
1771nd-it"> 1772 <div class="blog-posts-slider-item__image-container"> 1773 <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/201e8823-9965-4eef-b318-efdcb8888958" 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/201e8823-9965-4eef-b318-efdcb8888958 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/201e8823-9965-4eef-b318-efdcb8888958 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/201e8823-9965-4eef-b318-efdcb8888958 1408w" alt="Porch entry with ajar oak door, glowing sidelights, black sconce, and limestone walkway." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 1774 </div> 1775 <div class="blog-posts-slider-item__description"> 1776 <p class="blog-posts-slider-item__name"> 1777 1778 1779 1780 1781 August 6, 2026 1782 </p> 1783 <h3 class="blog-posts-slider-item__title">Your Thursday Night Blueprint In Dublin: Emerald Glen, The Farmers' Market, And What's Opening Around It</h3> 1784 </div> 1785 </a> 1786 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/downsizing-in-pleasanton-preparing-a-long-time-home-to-sell"> 1787 <div class="blog-posts-slider-item__image-container"> 1788 <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/9b7d5ea7-a7fc-436a-bf00-34dd5efa69dd" 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/9b7d5ea7-a7fc-436a-bf00-34dd5efa69dd 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/9b7d5ea7-a7fc-436a-bf00-34dd5efa69dd 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/9b7d5ea7-a7fc-436a-bf00-34dd5efa69dd 1408w" alt="King bed with rumpled beige linens, pale-oak nightstands, and a ficus beside a foliage-framed window." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 1789 </div> 1790 <div class="blog-posts-slider-item__description"> 1791 <p class="blog-posts-slider-item__name"> 1792 1793 1794 1795 1796 July 16, 2026 1797 </p> 1798 <h3 class="blog-posts-slider-item__title">Downsizing In Pleasanton: Preparing A Long-Time Home To Sell</h3> 1799 </div> 1800 </a> 1801 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/south-livermores-price-premium-isnt-about-the-vineyards-its-a-zoning-line"> 1802 <div class="blog-posts-slider-item__image-container"> 1803 <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/4d86d48f-bd07-4b50-bb21-439d96d13d45" 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/4d86d48f-bd07-4b50-bb21-439d96d13d45 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/4d86d48f-bd07-4b50-bb21-439d96d13d45 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/4d86d48f-bd07-4b50-bb21-439d96d13d45 1408w" alt="Elevated view of a landscaped backyard with a rectangular pool, limestone patio, lawn, and stucco house." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 1804 </div> 1805 <div class="blog-posts-slider-item__description"> 1806 <p class="blog-posts-slider-item__name"> 1807 1808 1809 1810 1811 August 27, 2026 1812 </p> 1813 <h3 class="blog-posts-slider-item__title">South Livermore's Price Premium Isn't About The Vineyards. It's A Zoning Line.</h3> 1814 </div> 1815 </a> 1816 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/pleasanton-neighborhood-lifestyles-from-historic-to-hillside"> 1817 <div class="blog-posts-slider-item__image-container"> 1818 <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/9d01716e-fdd5-40b5-9b76-2085349e1a6b" 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/9d01716e-fdd5-40b5-9b76-2085349e1a6b 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/9d01716e-fdd5-40b5-9b76-2085349e1a6b 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/9d01716e-fdd5-40b5-9b76-2085349e1a6b 1408w" alt="A home's porch entry, shown in an exterior architectural detail." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 1819 </div> 1820 <div class="blog-posts-slider-item__description"> 1821 <p class="blog-posts-slider-item__name"> 1822 1823 1824 1825 1826 July 23, 2026 1827 </p> 1828 <h3 class="blog-posts-slider-item__title">Pleasanton Neighborhood Lifestyles, From Historic To Hillside</h3> 1829 </div> 1830 </a> 1831 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/preparing-your-san-ramon-home-for-a-standout-sale"> 1832 <div class="blog-posts-slider-item__image-container"> 1833 <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/59ff40f0-1341-41c1-87ee-3db38b69cd4b" 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/59ff40f0-1341-41c1-87ee-3db38b69cd4b 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/59ff40f0-1341-41c1-87ee-3db38b69cd4b 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/59ff40f0-1341-41c1-87ee-3db38b69cd4b 1408w" alt="Linen-upholstered bed with white duvet, oak nightstands, foot bench, and greenery beyond the window." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 1834 </div> 1835 <div class="blog-posts-slider-item__description"> 1836 <p class="blog-posts-slider-item__name"> 1837 1838 1839 1840 1841 May 21, 2026 1842 </p> 1843 <h3 class="blog-posts-slider-item__title">Preparing Your San Ramon Home For A Standout Sale</h3> 1844 </div> 1845 </a> 1846 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/san-ramon-neighborhood-types-explained-for-homebuyers"> 1847 <div class="blog-posts-slider-item__image-container"> 1848 <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/39296a07-79d9-4d93-a14b-e77af718b39d" 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/39296a07-79d9-4d93-a14b-e77af718b39d 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/39296a07-79d9-4d93-a14b-e77af718b39d 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/39296a07-79d9-4d93-a14b-e77af718b39d 1408w" alt="Modern white patio with a beige sofa before wide sliding glass doors, framed by a large tree and garden." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 1849 </div> 1850 <div class="blog-posts-slider-item__description"> 1851 <p class="blog-posts-slider-item__name"> 1852 1853 1854 1855 1856 June 18, 2026 1857 </p> 1858 <h3 class="blog-posts-slider-item__title">San Ramon Neighborhood Types Explained For Homebuyers</h3> 1859 </div> 1860 </a> 1861 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/danville-single-family-market-trends-homeowners-should-know"> 1862 <div class="blog-posts-slider-item__image-container"> 1863 <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/67a796f9-9ccc-4c14-9c40-087b285eee0e" 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/67a796f9-9ccc-4c14-9c40-087b285eee0e 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/67a796f9-9ccc-4c14-9c40-087b285eee0e 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/67a796f9-9ccc-4c14-9c40-087b285eee0e 1408w" alt="Cream stucco house facade with black-framed windows, limestone entry pier, paver walkway, and low lavender planting." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 1864 </div> 1865 <div class="blog-posts-slider-item__description"> 1866 <p class="blog-posts-slider-item__name"> 1867 1868 1869 1870 1871 July 9, 2026 1872 </p> 1873 <h3 class="blog-posts-slider-item__title">Danville Single-Family Market Trends Homeowners Should Know</h3> 1874 </div> 1875 </a> 1876 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/everyday-life-near-charming-downtown-danville"> 1877 <div class="blog-posts-slider-item__image-container"> 1878 <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/1df31f41-72fe-452d-b572-c62b0535237d" 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/1df31f41-72fe-452d-b572-c62b0535237d 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/1df31f41-72fe-452d-b572-c62b0535237d 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/1df31f41-72fe-452d-b572-c62b0535237d 1408w" alt="Living room with a limestone fireplace and open sliding doors overlooking a planted patio." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 1879 </div> 1880 <div class="blog-posts-slider-item__description"> 1881 <p class="blog-posts-slider-item__name"> 1882 1883 1884 1885 1886 July 2, 2026 1887 </p> 1888 <h3 class="blog-posts-slider-item__title">Everyday Life Near Charming Downtown Danville</h3> 1889 </div> 1890 </a> 1891 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/using-concierge-style-prep-to-sell-in-ruby-hill"> 1892 <div class="blog-posts-slider-item__image-container"> 1893 <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/592f2e7e-c82f-4b90-9702-4f17a86af96f" 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/592f2e7e-c82f-4b90-9702-4f17a86af96f 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/592f2e7e-c82f-4b90-9702-4f17a86af96f 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/592f2e7e-c82f-4b90-9702-4f17a86af96f 1408w" alt="Open-plan kitchen with creamy white cabinets, light stone surfaces, and pale oak floors." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 1894 </div> 1895 <div class="blog-posts-slider-item__description"> 1896 <p class="blog-posts-slider-item__name"> 1897 1898 1899 1900 1901 June 11, 2026 1902 </p> 1903 <h3 class="blog-posts-slider-item__title">Using Concierge-Style Prep To Sell In Ruby Hill</h3> 1904 </div> 1905 </a> 1906 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/turnkey-listing-prep-in-livermore-with-concierge-support"> 1907 <div class="blog-posts-slider-item__image-container"> 1908 <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/885f94b7-2916-4c22-b76e-9964bb53e617" 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/885f94b7-2916-4c22-b76e-9964bb53e617 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/
1908885f94b7-2916-4c22-b76e-9964bb53e617 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/885f94b7-2916-4c22-b76e-9964bb53e617 1408w" alt="Freestanding tub beside a frameless glass shower, with pale oak cabinetry and light quartz surfaces." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 1909 </div> 1910 <div class="blog-posts-slider-item__description"> 1911 <p class="blog-posts-slider-item__name"> 1912 1913 1914 1915 1916 May 14, 2026 1917 </p> 1918 <h3 class="blog-posts-slider-item__title">Turnkey Listing Prep In Livermore With Concierge Support</h3> 1919 </div> 1920 </a> 1921 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/what-its-like-to-live-in-ruby-hill"> 1922 <div class="blog-posts-slider-item__image-container"> 1923 <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/09023bd0-35c3-4d22-ad61-b46c2d948006" 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/09023bd0-35c3-4d22-ad61-b46c2d948006 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/09023bd0-35c3-4d22-ad61-b46c2d948006 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/09023bd0-35c3-4d22-ad61-b46c2d948006 1408w" alt="Contemporary-traditional upscale suburban house with manicured landscaping and a deep front setback" sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 1924 </div> 1925 <div class="blog-posts-slider-item__description"> 1926 <p class="blog-posts-slider-item__name"> 1927 1928 1929 1930 1931 June 4, 2026 1932 </p> 1933 <h3 class="blog-posts-slider-item__title">What Itâs Like To Live In Ruby Hill</h3> 1934 </div> 1935 </a> 1936 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/staging-luxury-homes-in-ruby-hill-for-maximum-impact"> 1937 <div class="blog-posts-slider-item__image-container"> 1938 <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/b72cf977-21dc-4f3c-a0c2-02cf56dc0bfe" 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/b72cf977-21dc-4f3c-a0c2-02cf56dc0bfe 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/b72cf977-21dc-4f3c-a0c2-02cf56dc0bfe 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/b72cf977-21dc-4f3c-a0c2-02cf56dc0bfe 1408w" alt="Living room with a limestone fireplace opening onto a loggia, with oak flooring and a potted olive tree." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 1939 </div> 1940 <div class="blog-posts-slider-item__description"> 1941 <p class="blog-posts-slider-item__name"> 1942 1943 1944 1945 1946 April 23, 2026 1947 </p> 1948 <h3 class="blog-posts-slider-item__title">Staging Luxury Homes In Ruby Hill For Maximum Impact</h3> 1949 </div> 1950 </a> 1951 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/move-up-buyers-in-pleasanton-buy-and-sell-with-less-stress"> 1952 <div class="blog-posts-slider-item__image-container"> 1953 <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/309150e5-b55b-47f9-a834-15f00242795d" 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/309150e5-b55b-47f9-a834-15f00242795d 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/309150e5-b55b-47f9-a834-15f00242795d 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/309150e5-b55b-47f9-a834-15f00242795d 1408w" alt="Warm-white built-ins frame a light quartz desk beside a window seat overlooking silvery olive leaves and a clipped hedge." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 1954 </div> 1955 <div class="blog-posts-slider-item__description"> 1956 <p class="blog-posts-slider-item__name"> 1957 1958 1959 1960 1961 May 7, 2026 1962 </p> 1963 <h3 class="blog-posts-slider-item__title">Move-Up Buyers In Pleasanton: Buy And Sell With Less Stress</h3> 1964 </div> 1965 </a> 1966 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/boost-home-value-best-roi-home-improvements-1"> 1967 <div class="blog-posts-slider-item__image-container">
1968 <span class="blog-posts-slider-item__category lp-tag">Real Estate</span> 1969 <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/56e824db-0c72-4962-8ee7-eb45899f04cd" 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/56e824db-0c72-4962-8ee7-eb45899f04cd 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/56e824db-0c72-4962-8ee7-eb45899f04cd 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/56e824db-0c72-4962-8ee7-eb45899f04cd 1920w" alt="Modern kitchen with a large stone island, opening through glass walls to a garden and patio." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 1970 </div> 1971 <div class="blog-posts-slider-item__description"> 1972 <p class="blog-posts-slider-item__name"> 1973 1974 1975 1976 1977 September 10, 2025 1978 </p> 1979 <h3 class="blog-posts-slider-item__title">Boost Home Value: Best ROI Home Improvements</h3> 1980 <span class="blog-posts-slider-item__tag lp-tag" style="position: static;">Real Estate</span> 1981 </div> 1982 </a> 1983 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/outdoor-adventures-around-livermore-new-homeowners-love"> 1984 <div class="blog-posts-slider-item__image-container"> 1985 <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/1871fe4c-43aa-485e-99cd-21c111526706" 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/1871fe4c-43aa-485e-99cd-21c111526706 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/1871fe4c-43aa-485e-99cd-21c111526706 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/1871fe4c-43aa-485e-99cd-21c111526706 1408w" alt="Limestone patio beneath a white-oak pergola, beside stucco walls and dark-framed sliding doors." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 1986 </div> 1987 <div class="blog-posts-slider-item__description"> 1988 <p class="blog-posts-slider-item__name"> 1989 1990 1991 1992 1993 April 2, 2026 1994 </p> 1995 <h3 class="blog-posts-slider-item__title">Outdoor Adventures Around Livermore New Homeowners Love</h3> 1996 </div> 1997 </a> 1998 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/ruby-hill-listing-timeline-from-prep-to-pending"> 1999 <div class="blog-posts-slider-item__image-container"> 2000 <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/fa10510b-a427-45f8-951b-c5e4cb678eca" 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/fa10510b-a427-45f8-951b-c5e4cb678eca 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/fa10510b-a427-45f8-951b-c5e4cb678eca 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/fa10510b-a427-45f8-951b-c5e4cb678eca 1408w" alt="Modern stone-and-wood home with open glass doors, a patio, and hillside views at sunset." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 2001 </div> 2002 <div class="blog-posts-slider-item__description"> 2003 <p class="blog-posts-slider-item__name"> 2004 2005 2006 2007 2008 January 1, 2026 2009 </p> 2010 <h3 class="blog-posts-slider-item__title">Ruby Hill Listing Timeline: From Prep To Pending</h3> 2011 </div> 2012 </a> 2013 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/a-relaxed-weekend-guide-for-new-san-ramon-locals"> 2014 <div class="blog-posts-slider-item__image-container"> 2015 <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/2c20a916-34e2-4b51-80d6-fc68797821dc" 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/2c20a916-34e2-4b51-80d6-fc68797821dc 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/2c20a916-34e2-4b51-80d6-fc68797821dc 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/2c20a916-34e2-4b51-80d6-fc68797821dc 1408w" alt="Stucco house with board-and-batten siding, recessed porch, driveway, lawn, and specimen tree." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 2016 </div> 2017 <div class="blog-posts-slider-item__description"> 2018 <p class="blog-posts-slider-item__name"> 2019 2020 2021 2022 2023 April 16, 2026 2024 </p> 2025 <h3 class="blog-posts-slider-item__title">A Relaxed Weekend Guide For New San Ramon Locals</h3> 2026 </div> 2027 </a> 2028 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/buying-a-condo-or-townhome-in-dublin-ca"> 2029 <div class="blog-posts-slider-item__image-container"> 2030 <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/61c9ad40-4c91-40fc-a3a7-
203058e8022766df" 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/61c9ad40-4c91-40fc-a3a7-58e8022766df 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/61c9ad40-4c91-40fc-a3a7-58e8022766df 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/61c9ad40-4c91-40fc-a3a7-58e8022766df 1408w" alt="Bright open kitchen and dining area with warm neutral finishes and soft window light." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 2031 </div> 2032 <div class="blog-posts-slider-item__description"> 2033 <p class="blog-posts-slider-item__name"> 2034 2035 2036 2037 2038 March 24, 2026 2039 </p> 2040 <h3 class="blog-posts-slider-item__title">Buying A Condo Or Townhome In Dublin CA</h3> 2041 </div> 2042 </a> 2043 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/dublin-ca-neighborhoods-for-an-active-lifestyle"> 2044 <div class="blog-posts-slider-item__image-container"> 2045 <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/66776efa-724d-4772-b256-82aff9f7f818" 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/66776efa-724d-4772-b256-82aff9f7f818 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/66776efa-724d-4772-b256-82aff9f7f818 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/66776efa-724d-4772-b256-82aff9f7f818 1408w" alt="Curved path beside a Craftsman-style home, drought-tolerant plants, bike rack, and drinking fountain beneath oaks." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 2046 </div> 2047 <div class="blog-posts-slider-item__description"> 2048 <p class="blog-posts-slider-item__name"> 2049 2050 2051 2052 2053 February 19, 2026 2054 </p> 2055 <h3 class="blog-posts-slider-item__title">Dublin CA Neighborhoods For An Active Lifestyle</h3> 2056 </div> 2057 </a> 2058 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/danville-or-san-ramon-choosing-your-next-home-base"> 2059 <div class="blog-posts-slider-item__image-container"> 2060 <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/efad845a-1efd-4361-af22-bf8dd777a524" 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/efad845a-1efd-4361-af22-bf8dd777a524 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/efad845a-1efd-4361-af22-bf8dd777a524 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/efad845a-1efd-4361-af22-bf8dd777a524 1408w" alt="Home entry with stucco and board-and-batten siding, framed by landscaping." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 2061 </div> 2062 <div class="blog-posts-slider-item__description"> 2063 <p class="blog-posts-slider-item__name"> 2064 2065 2066 2067 2068 March 5, 2026 2069 </p> 2070 <h3 class="blog-posts-slider-item__title">Danville Or San Ramon? Choosing Your Next Home Base</h3> 2071 </div> 2072 </a> 2073 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/what-its-like-to-live-near-downtown-pleasanton"> 2074 <div class="blog-posts-slider-item__image-container"> 2075 <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/f46a528f-14de-47c4-baa8-e33f4714cbea" 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/f46a528f-14de-47c4-baa8-e33f4714cbea 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/f46a528f-14de-47c4-baa8-e33f4714cbea 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/f46a528f-14de-47c4-baa8-e33f4714cbea 1408w" alt="Sunlit brick sidewalk lined with trees beside a large Craftsman-style house at sunset." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 2076 </div> 2077 <div class="blog-posts-slider-item__description"> 2078 <p class="blog-posts-slider-item__name"> 2079 2080 2081 2082 2083 February 5, 2026 2084 </p> 2085 <h3 class="blog-posts-slider-item__title">What Itâs Like To Live Near Downtown Pleasanton</h3> 2086 </div> 2087 </a> 2088 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/pricing-a-danville-home-for-multiple-offers"> 2089 <div class="blog-posts-slider-item__image-container"> 2090 <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/9ca8b482-414b-4aa7-b2c2-e13cdf512d4b" 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/9ca8b482-414b-4aa7-b2c2-e13cdf512d4b 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/9ca8b482-414b-4aa7-b2c2-e13cdf512d4b 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/9ca8b482-414b-4aa7-b2c2-e13cdf512d4b 1408w" alt="Stucco home with a tiled roof, white flower beds, and mountains in the background." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 2091 </div> 2092 <div class="blog-posts-slider-item__description"> 2093 <p class="blog-posts-slider-item__name"> 2094 2095 2096 2097 2098 January 15, 2026 2099 </p> 2100 <h3 class="blog-posts-slider-item__title">Pricing A Danville Home For Multiple Offers</h3> 2101 </div> 2102 </a> 2103 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/what-appraisers-look-for-in-danville-homes"> 2104 <div class="blog-posts-slider-item__image-container"> 2105 <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/8c3c53d0-2871-4edf-9da3-551a6ac58de1" 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/8c3c53d0-2871-4edf-9da3-551a6ac58de1 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/8c3c53d0-2871-4edf-9da3-551a6ac58de1 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/8c3c53d0-2871-4edf-9da3-551a6ac58de1 1408w" alt="Stone ranch house with a red tile roof, arched entry, broad driveway, and three-car garage at dusk." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 2106 </div> 2107 <div class="blog-posts-slider-item__description"> 2108 <p class="blog-posts-slider-item__name"> 2109 2110 2111 2112 2113 December 4, 2025 2114 </p> 2115 <h3 class="blog-posts-slider-item__title">What Appraisers Look For In Danville Homes</h3> 2116 </div> 2117 </a> 2118 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/budget-friendly-smart-home-upgrades-that-boost-resale-value"> 2119 <div class="blog-posts-slider-item__image-container">
2120 <span class="blog-posts-slider-item__category lp-tag">Real Estate</span> 2121 <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/053bf628-9244-4b2b-b798-eba24c04ad62" 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/053bf628-9244-4b2b-b798-eba24c04ad62 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/053bf628-9244-4b2b-b798-eba24c04ad62 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/053bf628-9244-4b2b-b798-eba24c04ad62 1920w" alt="Modern white house with dark metal roof, warmly lit windows, and a wall-mounted video doorbell." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 2122 </div> 2123 <div class="blog-posts-slider-item__description"> 2124 <p class="blog-posts-slider-item__name"> 2125 2126 2127 2128 2129 September 24, 2025 2130 </p> 2131 <h3 class="blog-posts-slider-item__title">Budget-Friendly Smart Home Upgrades That Boost Resale Value</h3> 2132 <span class="blog-posts-slider-item__tag lp-tag" style="position: static;">Real Estate</span> 2133 </div> 2134 </a> 2135 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/using-prop-19-when-you-sell-a-ruby-hill-home"> 2136 <div class="blog-posts-slider-item__image-container"> 2137 <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/c7b4b284-d766-42fc-98b3-63e3b8986f60" 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/c7b4b284-d766-42fc-98b3-63e3b8986f60 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/c7b4b284-d766-42fc-98b3-63e3b8986f60 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/c7b4b284-d766-42fc-98b3-63e3b8986f60 1408w" alt="Large stone mansion with red-tile roofs, landscaped grounds, and a pool overlooking distant hills at sunset." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 2138 </div> 2139 <div class="blog-posts-slider-item__description"> 2140 <p class="blog-posts-slider-item__name"> 2141 2142 2143 2144 2145 November 6, 2025 2146 </p> 2147 <h3 class="blog-posts-slider-item__title">Using Prop 19 When You Sell A Ruby Hill Home</h3> 2148 </div> 2149 </a> 2150 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/off-the-beaten-path-spots-in-livermore-locals-love"> 2151 <div class="blog-posts-slider-item__image-container"> 2152 <span class="blog-posts-slider-item__category lp-tag">Lifestyle</span> 2153 <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/451d95d6-acdf-4277-82da-12deefb7f630" 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/451d95d6-acdf-4277-82da-12deefb7f630 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/451d95d6-acdf-4277-82da-12deefb7f630 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/451d95d6-acdf-4277-82da-12deefb7f630 1920w" alt="Wine-tasting table overlooking vineyard rows, a farmhouse, and golden rolling hills." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 2154 </div> 2155 <div class="blog-posts-slider-item__description"> 2156 <p class="blog-posts-slider-item__name"> 2157 2158 2159 2160 2161 October 9, 2025 2162 </p> 2163 <h3 class="blog-posts-slider-item__title">
2163Off-the-Beaten-Path Spots in Livermore Locals Love</h3> 2164 <span class="blog-posts-slider-item__tag lp-tag" style="position: static;">Lifestyle</span> 2165 </div> 2166 </a> 2167 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/modern-home-trends-transforming-danville-ca"> 2168 <div class="blog-posts-slider-item__image-container"> 2169 <span class="blog-posts-slider-item__category lp-tag">Real Estate</span> 2170 <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/96e90f61-8465-490c-aac3-b2d68d51531a" 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/96e90f61-8465-490c-aac3-b2d68d51531a 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/96e90f61-8465-490c-aac3-b2d68d51531a 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/96e90f61-8465-490c-aac3-b2d68d51531a 1920w" alt="Modern white home with rooftop solar panels, glass walls, and a landscaped path leading to an outdoor patio." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 2171 </div> 2172 <div class="blog-posts-slider-item__description"> 2173 <p class="blog-posts-slider-item__name"> 2174 2175 2176 2177 2178 May 28, 2025 2179 </p> 2180 <h3 class="blog-posts-slider-item__title">Modern Home Trends Transforming Danville, CA</h3> 2181 <span class="blog-posts-slider-item__tag lp-tag" style="position: static;">Real Estate</span> 2182 </div> 2183 </a> 2184 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/how-californias-adu-rules-impact-san-ramon-owners"> 2185 <div class="blog-posts-slider-item__image-container"> 2186 <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/5dce8861-aecb-41f2-be48-2e779f3f8801" 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/5dce8861-aecb-41f2-be48-2e779f3f8801 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/5dce8861-aecb-41f2-be48-2e779f3f8801 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/5dce8861-aecb-41f2-be48-2e779f3f8801 1408w" alt="Paved walkway between a light stucco home and a modern wood-clad house, with raised garden beds." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 2187 </div> 2188 <div class="blog-posts-slider-item__description"> 2189 <p class="blog-posts-slider-item__name"> 2190 2191 2192 2193 2194 December 18, 2025 2195 </p> 2196 <h3 class="blog-posts-slider-item__title">How Californiaâs ADU Rules Impact San Ramon Owners</h3> 2197 </div> 2198 </a> 2199 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/solar-battery-in-ruby-hill-under-californias-new-rules"> 2200 <div class="blog-posts-slider-item__image-container"> 2201 <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/0275cd05-8215-497d-8e56-f7aa0a8ac5ed" 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/0275cd05-8215-497d-8e56-f7aa0a8ac5ed 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/0275cd05-8215-497d-8e56-f7aa0a8ac5ed 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/0275cd05-8215-497d-8e56-f7aa0a8ac5ed 1408w" alt="White stucco home with a red tile roof covered in solar panels, backed by autumn trees and distant hills." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 2202 </div> 2203 <div class="blog-posts-slider-item__description"> 2204 <p class="blog-posts-slider-item__name"> 2205 2206 2207 2208 2209 October 16, 2025 2210 </p> 2211 <h3 class="blog-posts-slider-item__title">Solar + Battery In Ruby Hill Under Californiaâs New Rules</h3> 2212 </div> 2213 </a> 2214 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/what-really-drives-home-prices-in-pleasanton"> 2215 <div class="blog-posts-slider-item__image-container"> 2216 <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/3d093edb-1164-46d3-b933-9e978fcae616" 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/3d093edb-1164-46d3-b933-9e978fcae616 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/3d093edb-1164-46d3-b933-9e978fcae616 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/3d093edb-1164-46d3-b933-9e978fcae616 1408w" alt="Two-story stucco house with a red tile roof beside a broad lawn and mature trees." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 2217 </div> 2218 <div class="blog-posts-slider-item__description"> 2219 <p class="blog-posts-slider-item__name"> 2220 2221 2222 2223 2224 November 21, 2025 2225 </p> 2226 <h3 class="blog-posts-slider-item__title">What Really Drives Home Prices In Pleasanton</h3> 2227 </div> 2228 </a> 2229 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/your-guide-to-buying-a-home-in-pleasanton-ca"> 2230 <div class="blog-posts-slider-item__image-container">
2231 <span class="blog-posts-slider-item__category lp-tag">Real Estate</span> 2232 <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/4b132120-0955-41aa-bbfe-f6b6254368aa" 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/4b132120-0955-41aa-bbfe-f6b6254368aa 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/4b132120-0955-41aa-bbfe-f6b6254368aa 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/4b132120-0955-41aa-bbfe-f6b6254368aa 1920w" alt="Suburban street lined with landscaped homes and mature trees, with rolling hills in the distance." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 2233 </div> 2234 <div class="blog-posts-slider-item__description"> 2235 <p class="blog-posts-slider-item__name"> 2236 2237 2238 2239 2240 June 27, 2025 2241 </p> 2242 <h3 class="blog-posts-slider-item__title">Your Guide to Buying a Home in Pleasanton, CA</h3> 2243 <span class="blog-posts-slider-item__tag lp-tag" style="position: static;">Real Estate</span> 2244 </div> 2245 </a> 2246 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/top-neighborhoods-to-invest-in-dublin-ca-this-year"> 2247 <div class="blog-posts-slider-item__image-container"> 2248 <span class="blog-posts-slider-item__category lp-tag">Real Estate</span> 2249 <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/cdc37420-a789-47d5-8a8d-560cc001e4dc" 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/cdc37420-a789-47d5-8a8d-560cc001e4dc 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/cdc37420-a789-47d5-8a8d-560cc001e4dc 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/cdc37420-a789-47d5-8a8d-560cc001e4dc 1920w" alt="Aerial view of a town beside patchwork green fields, with wooded hills stretching across the horizon." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 2250 </div> 2251 <div class="blog-posts-slider-item__description"> 2252 <p class="blog-posts-slider-item__name"> 2253 2254 2255 2256 2257 July 19, 2025 2258 </p> 2259 <h3 class="blog-posts-slider-item__title">Top Neighborhoods to Invest in Dublin, CA This Year</h3> 2260 <span class="blog-posts-slider-item__tag lp-tag" style="position: static;">Real Estate</span> 2261 </div> 2262 </a> 2263 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/how-to-remodel-your-home-in-pleasanton-ca-without-the-stress"> 2264 <div class="blog-posts-slider-item__image-container"> 2265 <span class="blog-posts-slider-item__category lp-tag">Real Estate</span> 2266 <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/2f5df517-9cc7-4e8a-8acc-97dda903d1de" 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/2f5df517-9cc7-4e8a-8acc-97dda903d1de 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/2f5df517-9cc7-4e8a-8acc-97dda903d1de 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/2f5df517-9cc7-4e8a-8acc-97dda903d1de 1920w" alt="Bright open-plan kitchen with a marble island, vaulted wood-beam ceiling, and wide windows overlooking a garden." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 2267 </div> 2268 <div class="blog-posts-slider-item__description"> 2269 <p class="blog-posts-slider-item__name"> 2270 2271 2272 2273 2274 August 30, 2025 2275 </p> 2276 <h3 class="blog-posts-slider-item__title">How to Remodel Your Home in Pleasanton, CA Without the Stress</h3>
2277 <span class="blog-posts-slider-item__tag lp-tag" style="position: static;">Real Estate</span> 2278 </div> 2279 </a> 2280 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/hidden-gems-in-livermore-ca-must-see-local-spots"> 2281 <div class="blog-posts-slider-item__image-container"> 2282 <span class="blog-posts-slider-item__category lp-tag">Lifestyle</span> 2283 <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/4533d694-0006-4d76-99a3-4d5f317e9478" 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/4533d694-0006-4d76-99a3-4d5f317e9478 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/4533d694-0006-4d76-99a3-4d5f317e9478 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/4533d694-0006-4d76-99a3-4d5f317e9478 1920w" alt="A small-town shopping street borders vineyard rows, with rolling hills and distant mountains." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 2284 </div> 2285 <div class="blog-posts-slider-item__description"> 2286 <p class="blog-posts-slider-item__name"> 2287 2288 2289 2290 2291 June 11, 2025 2292 </p> 2293 <h3 class="blog-posts-slider-item__title">Hidden Gems in Livermore, CA: Must-See Local Spots</h3> 2294 <span class="blog-posts-slider-item__tag lp-tag" style="position: static;">Lifestyle</span> 2295 </div> 2296 </a> 2297 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/eco-friendly-home-upgrades-that-add-value-in-ruby-hill-ca"> 2298 <div class="blog-posts-slider-item__image-container"> 2299 <span class="blog-posts-slider-item__category lp-tag">Real Estate</span> 2300 <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/633b0812-fb8d-4ff2-bc4e-663ee68f1e5d" 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/633b0812-fb8d-4ff2-bc4e-663ee68f1e5d 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/633b0812-fb8d-4ff2-bc4e-663ee68f1e5d 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/633b0812-fb8d-4ff2-bc4e-663ee68f1e5d 1920w" alt="Modern stone-and-glass house with rooftop solar panels, landscaped garden, and vineyard rows beyond." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 2301 </div> 2302 <div class="blog-posts-slider-item__description"> 2303 <p class="blog-posts-slider-item__name"> 2304 2305 2306 2307 2308 August 13, 2025 2309 </p> 2310 <h3 class="blog-posts-slider-item__title">Eco-Friendly Home Upgrades That Add Value in Ruby Hill, CA</h3> 2311 <span class="blog-posts-slider-item__tag lp-tag" style="position: static;">Real Estate</span> 2312 </div> 2313 </a> 2314 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/must-have-smart-home-features-for-ruby-hill-ca-homeowners"> 2315 <div class="blog-posts-slider-item__image-container">
2316 <span class="blog-posts-slider-item__category lp-tag">Lifestyle</span> 2317 <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/01f33596-208b-4ece-8d17-ea147531068a" 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/01f33596-208b-4ece-8d17-ea147531068a 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/01f33596-208b-4ece-8d17-ea147531068a 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/01f33596-208b-4ece-8d17-ea147531068a 1920w" alt="Modern living room opens onto vineyard rows and golden hills, with a linear fireplace." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 2318 </div> 2319 <div class="blog-posts-slider-item__description"> 2320 <p class="blog-posts-slider-item__name"> 2321 2322 2323 2324 2325 August 9, 2025 2326 </p> 2327 <h3 class="blog-posts-slider-item__title">Must-Have Smart Home Features for Ruby Hill, CA Homeowners</h3> 2328 <span class="blog-posts-slider-item__tag lp-tag" style="position: static;">Lifestyle</span> 2329 </div> 2330 </a> 2331 <a class="blog-posts-slider-item splide__slide lp_animation-img-zoom" href="/blog/key-questions-to-ask-during-an-open-house-in-san-ramon-ca"> 2332 <div class="blog-posts-slider-item__image-container"> 2333 <span class="blog-posts-slider-item__category lp-tag">Real Estate</span> 2334 <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/20c00cb7-4c27-4c17-95f1-0f1d1390401b" 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/20c00cb7-4c27-4c17-95f1-0f1d1390401b 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/20c00cb7-4c27-4c17-95f1-0f1d1390401b 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/20c00cb7-4c27-4c17-95f1-0f1d1390401b 1920w" alt="Modern white homes with flat roofs line a quiet street beneath large leafy trees." sizes="(min-width: 992px) 33vw, (min-width: 769px) 50vw, 100vw" class="blog-posts-slider-item__image" loading="lazy"> 2335 </div> 2336 <div class="blog-posts-slider-item__description"> 2337 <p class="blog-posts-slider-item__name"> 2338 2339 2340 2341 2342 July 15, 2025 2343 </p> 2344 <h3 class="blog-posts-slider-item__title">Key Questions to Ask During an Open House in San Ramon, CA</h3> 2345 <span class="blog-posts-slider-item__tag lp-tag" style="position: static;">Real Estate</span> 2346 </div> 2347 </a> 2348 </ul> 2349 </div> 2350 </div> 2351 <div class="blog-posts-slider__button-row"> 2352 <a href="/blog" class="blog-posts-slider__btn lp-btn button-style-1"><span class="lp-btn__content">View All</span></a> 2353 <div class="blog-posts-slider__arrows"> 2354 <button class="blog-posts-slider__arrow blog-posts-slider__arrow--prev lp-arrow lp-arrow--prev js-arrow--prev "></button> 2355 <button class="blog-posts-slider__arrow blog-posts-slider__arrow--next lp-arrow lp-arrow--next js-arrow--next "></button> 2356 </div> 2357 </div> 2358</div> 2359 2360 2361 2362 2363 2364</section> 2365<section id="section-2c090225-3f15-4437-9733-8b420503d690" class="solid-section is-font-color-dark is-background-color-light" data-el-id="1bca80b5-df8e-4ef8-b50a-525db1d4a430"> 2366 2367<div class="newsletter-signup lp-vertical-paddings" style="--titleColor:rgba(0, 0, 0, 1);"> 2368 <div class="newsletter-signup__container"> 2369 <form data-type="contact-form" class="newsletter-signup__form js-form"> 2370 <div class="newsletter-signup__form-container"> 2371 <div class="newsletter-signup__form-title-group lp-title-group"> 2372 <h2 class="newsletter-signup__form-title"> Local Expertise â Global Connections</h2> 2373 <div class="newsletter-signup__form-description lp-text--subtitle"><p>Whether you are making a move locally, selling a second home, or relocating in or out of the area, Katherine’s extensive network can reach you as far as you want to go.</p></div> 2374 </div> 2375 <div class="newsletter-signup-form"> 2376 <div class="newsletter-signup-form__inputs-container"> 2377 <input id="section-2c090225-3f15-4437-9733-8b420503d690__newsSignFirstName" type="text" name="name" class="newsletter-signup__form-item lp-in
2377put" required placeholder="Name"> 2378 2379 <input id="section-2c090225-3f15-4437-9733-8b420503d690__newsSignEmail" type="email" name="email" class="newsletter-signup__form-item lp-input" required placeholder="Email" pattern="[a-zA-Z0-9.!#$%&â*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)+"> 2380 2381 <button type="submit" class="newsletter-signup__form-submit lp-btn button-style-1">Submit</button> 2382 2383 <div class="lp-h-pot"> 2384 <input id="section-2c090225-3f15-4437-9733-8b420503d690__newsSignMiddleName" name="middleName" value="" autocomplete="off" tabindex="-1"> 2385 </div> 2386 2387 <input style="display: none;" type="text" name="source" value="NEWSLETTER_SIGNUP" /> 2388 </div> 2389 </div> 2390 <div class="newsletter-signup__form-disclaimer lp-disclaimer"> <label style='display: none;' for='section-2c090225-3f15-4437-9733-8b420503d690-termsAccepted'>Opt In/Disclaimer Consent:</label> 2391 <label class='lp-tcr-content'> 2392 <span class='lp-tcr-checkbox'> 2393 <input 2394 type='checkbox' 2395 id='section-2c090225-3f15-4437-9733-8b420503d690-termsAccepted' 2396 name='termsAccepted' 2397 oninvalid="this.setCustomValidity('Please accept the terms and conditions')" 2398 oninput="this.setCustomValidity('')" 2399 required 2400 /></span> 2401 <span class='lp-tcr-message'> 2402 2403 I agree to be contacted by 2404 Couture Real Estate Group 2405 via call, email, and text for real estate services. To opt out, you can reply 'stop' at any time or reply 'help' for assistance. 2406 You can also click the unsubscribe link in the emails. Message and data rates may apply. Message frequency may vary. 2407 <a href='/terms-and-conditions' target='_blank'>Privacy Policy</a>. 2408 </span> 2409 </label> 2410 2411</div> 2412 </div> 2413 <div class="newsletter-signup__form-success"> 2414 <div class="newsletter-signup__form-title-group lp-title-group"> 2415 <h2 class="newsletter-signup__form-success-title">Thank You</h2> 2416 <div class="newsletter-signup__form-success-message lp-text--subtitle">You have successfully been added to our Newsletter. Stay tuned for the latest updates sent straight to your inbox!</div> 2417 </div> 2418 </div> 2419 </form> 2420 2421 </div> 2422</div> 2423</section> 2424<section class="image-section is-font-color-light is-background-color-light" id="section-5bb607e9-9670-455b-9652-8c9d1b0b1c63" data-el-id="1ed7f92a-2189-48c5-889c-3838656da504"> 2425 <div class="newsletter-contact-cta lp-vertical-paddings" 2426 style=" 2427 --titleColorFirst: rgba(177, 132, 99, 1); 2428 --newsletterBack: rgba(238, 237, 233, 0.85); 2429 --titleColorSecond: rgba(255, 255, 255, 1); 2430 --workWithBack: rgba(0, 0, 0, 0); 2431 --newsletterTextColor: rgba(64, 64, 64, 1); 2432 --rightBack: rgba(255, 255, 255, 1); 2433 " 2434> 2435 <div class="newsletter-contact-cta__right-back"></div> 2436 <div class="newsletter-contact-cta__container lp-container"> 2437 <div class="newsletter-contact-cta__wrapper"> 2438 <div class="newsletter-contact-cta__block newsletter-contact-cta__block--touch newsletter-contact-cta__block--no-newsletter"> 2439 <div class="newsletter-contact-cta__heading"> 2440 <h2 class="newsletter-contact-cta__title newsletter-contact-cta__title--touch ">Enjoy personalized service from start to sold</h2> 2441 <div class="newsletter-contact-cta__description"><p>With Couture Real Estate Group, you have the advantage of working with Katherine Couture, an expert in high-end properties, relocations, and retirement transitions. Her unrivaled expertise and dedication ensure a seamless journey from start to finish.</p></div> 2442 </div> 2443 <div class="newsletter-contact-cta__btn-wrap"> 2444 <a 2445 role="button" 2446 data-type="CONTACT_US" 2447 class="newsletter-contact-cta__btn lp-btn button-style-2" 2448 2449 2450 2451 2452 2453 >
2454 <span class="lp-btn__content">Contact Us</span> 2455 </a> 2456 </div> 2457 </div> 2458 </div> 2459 </div> 2460</div> 2461</section> 2462<section id="section-2b120f4d-e619-4190-9fac-7fc3abaef672" class="solid-section is-font-color-dark is-background-color-light" data-el-id="85dc9e17-a4c7-449c-8890-869fdc11b485"> 2463 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@splidejs/[email protected]/dist/css/splide-core.min.css"/>
2464<script src="https://cdn.jsdelivr.net/npm/@splidejs/[email protected]/dist/js/splide.min.js"></script>
vendor: 1 bytes, line 2464
2464
2465<script type="text/x-handlebars-template" class="jsIGTemplate"> 2466 {{#each items}} 2467 <a href="{{permalink}}" target="_blank" class="instagram-feed__item lp_animation-img-zoom splide__slide insta-item insta-type-{{mediaType}}"> 2468 <img class="instagram-feed__image" src="{{#ifEquals mediaType 'VIDEO'}}{{thumbnailUrl}}{{else}}{{mediaUrl}}{{/ifEquals}}" alt="Instagram post by @{{username}}"> 2469 </a> 2470 {{/each}} 2471</script>
2471 2472 2473<div class="instagram-feed lp-vertical-paddings"> 2474 <div class="instagram-feed__container" style="--titleColor: #B18463; --boxColor: rgba(238, 237, 233, 1);"> 2475 <div class="instagram-feed__title-group lp-title-group"> 2476 <div class="instagram-feed__icon lp-icon"></div> 2477 <p class="instagram-feed__pretitle">Follow Us On Instagram</p> 2478 <h2 class="instagram-feed__title instagram-feed__title--with-pretitle"><a href="#" target="_blank" class="instagram-feed__link jsIGLink jsIGName"></a></h2> 2479 </div> 2480 2481 <div class="instagram-feed__collection splide js-slider"> 2482 <div class="splide__track"> 2483 <ul class="splide__list jsIGContainer"> 2484 </ul> 2485 </div> 2486 </div> 2487 </div> 2488</div> 2489 2490 2491 2492 2493</section> 2494 2495 <div id="modals" class="modals"></div> 2496 <footer id="global-footer" class="is-font-color-dark is-background-color-light" data-el-id="b8c9ffd0-3b1f-4577-96fc-828efdac86e7"> 2497 2498 2499<div class="footer"> 2500 <div class="footer-logos-row"> 2501 <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/d8af9b0d-444f-4894-99ba-4f08f8debc20" 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/d8af9b0d-444f-4894-99ba-4f08f8debc20 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/d8af9b0d-444f-4894-99ba-4f08f8debc20 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/d8af9b0d-444f-4894-99ba-4f08f8debc20 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/d8af9b0d-444f-4894-99ba-4f08f8debc20 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/d8af9b0d-444f-4894-99ba-4f08f8debc20 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/d8af9b0d-444f-4894-99ba-4f08f8debc20 3456w" class="footer-logo" sizes="350px" alt=""> 2502 2503 </div> 2504 <div class="footer-contact-row"> 2505 <div class="footer-info "> 2506 <div class="footer__col"> 2507 <h5 class="footer__section-title">Couture Real Estate Group</h5> 2508 <div class="footer__section-content"> 2509 <div class="footer__col-content"> 2510 <p class="footer__col-title">Contact Us</p> <div class="footer__col-description lp-a lp-pre-line"><div><a href="tel:9255253380">(925) 525-3380</a><br><a href="/cdn-cgi/l/email-protection#c0aba1b4a8a5b2a9aea5eea3afb5b4b5b2a580a3afadb0a1b3b3eea3afad"><span class="__cf_email__" data-cfemail="563d37223e33243f383378353923222324331635393b263725257835393b">[email protected]</span></a></div></div> 2511 </div> 2512 2513 <div class="footer__col-content"> 2514 <p class="footer__col-title">Address</p> <div class="footer__col-description lp-a lp-pre-line"><p>900 MAIN ST<br>PLEASANTON CA 94566</p></div> 2515 </div> 2516 </div> 2517 </div> 2518 2519 2520 2521 </div> 2522 2523 <ul class="lp-socials social_icons-style-1 footer-socials"> 2524 2525 <li> 2526 <a 2527 href="https://www.linkedin.com/in/katherine-couture-90618317/" 2528 class="lp-socials__link socials__link" 2529 data-wow-delay="0s" 2530 target="_blank" 2531 aria-label="LINKEDIN" 2532 >
2533 <span class="lp-i lp-i--linkedin" aria-hidden="true"></span> 2534 </a> 2535 </li> 2536 <li> 2537 <a 2538 href="https://www.youtube.com/@couturerealestateteam3351" 2539 class="lp-socials__link socials__link" 2540 data-wow-delay="0.1s" 2541 target="_blank" 2542 aria-label="YOUTUBE" 2543 > 2544 <span class="lp-i lp-i--youtube" aria-hidden="true"></span> 2545 </a> 2546 </li> 2547 <li> 2548 <a 2549 href="https://www.google.com/search?q=Katherine+Couture%2C+Realtor+%7C+Intero+Real+Estate+Livermore&rlz=1C1CHZN_enPH1001PH1001&oq=katherine+coutu&gs_lcrp=EgZjaHJvbWUqBggAEEUYOzIGCAAQRRg7MgYIARBFGDsyBggCEEUYOzIGCAMQRRg5MgYIBBBFGDwyBggFEEUYPDIGCAYQRRg80gEIMjI3MWowajGoAgCwAgA&sourceid=chrome&ie=UTF-8#lrd=0x808fe79f1abaaaab:0x84474328b06e78ae,1,,,," 2550 class="lp-socials__link socials__link" 2551 data-wow-delay="0.2s" 2552 target="_blank" 2553 aria-label="GOOGLE" 2554 > 2555 <span class="lp-i lp-i--google" aria-hidden="true"></span> 2556 </a> 2557 </li> 2558 <li> 2559 <a 2560 href="https://www.zillow.com/profile/user767165" 2561 class="lp-socials__link socials__link" 2562 data-wow-delay="0.3s" 2563 target="_blank" 2564 aria-label="ZILLOW" 2565 > 2566 <span class="lp-i lp-i--zillow" aria-hidden="true"></span> 2567 </a> 2568 </li> 2569 </ul> </div> 2570 2571 2572 2573 2574 2575 <div class="footer-disclaimer-row"> 2576 <div class="footer-disclaimer"><p style="font-size: 14px;">Couture Real Estate Group | CA DRE# 01333990<br>Compass California, Inc. | CA DRE# 01527235</p> 2577<p style="font-size: 12px;">Couture Real Estate Group is a team of real estate agents affiliated with Compass. <a class="link" href="https://www.compass.com/" target="_blank" rel="noopener">Compass</a> is a real estate broker licensed by the State of California and abides by Equal Housing Opportunity laws. License Number 01527235. All material presented herein is intended for informational purposes only and is compiled from sources deemed reliable but has not been verified. Changes in price, condition, sale or withdrawal may be made without notice. No statement is made as to the accuracy of any description. All measurements and square footage are approximate. If your property is currently listed for sale this is not a solicitation.</p> 2578<p style="opacity: 1;"><img style="margin-top: 0; width: 100px; height: auto;" src="https://res.cloudinary.com/luxuryp/images/zbxf1j3xdplm6lhfnqo3/realtor-eho-logo-07232021-update-dark"></p></div> 2579 2580 2581 </div> 2582 2583 2584 <div class="footer-bottom-row"> 2585 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/jnymuan6tigs629jigsz" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=320/https://media-production.lp-cdn.com/media/jnymuan6tigs629jigsz 320w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/jnymuan6tigs629jigsz 390w" class="footer-logo" sizes="350px" alt=""> 2586 2587 <div class="footer-copyright lp-a"> 2588 <div class="footer-copyright__powered"> 2589 Powered by <a href="https://www.luxurypresence.com/" class="" target="_blank">Luxury Presence</a> 2590 </div> 2591 2592 <div class="footer-copyright__privacy"> 2593 <span>Copyright © <span class="auto-year-update">2026</span></span> 2594 2595 2596 <a href="/terms-and-conditions" class="footer-copyright__privacy-policy">Privacy Policy</a> 2597 </div> 2598 </div> 2599 </div> 2600 2601</div> 2602 2603 </footer> 2604 2605 <div id="modal-global-contact-us" class="modal " 2606 data-el-id="" 2607 style="background-color: ;" 2608 > 2609 <div class="modal-content"> 2610 2611 2612 <div class="contact-form-modal lp-vertical-paddings" style="--leftPanelBg
2612Color: rgba(245, 242, 238, 1); --textColor:rgba(0, 0, 0, 1); --formBgColor: rgba(255, 255, 255, 1); --formTextColor: rgba(0, 0, 0, 1)"> 2613 <div class="contact-form-modal__bg"> 2614 <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/17338084-5da1-458f-947a-bfe1776a6de7" 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/17338084-5da1-458f-947a-bfe1776a6de7 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/17338084-5da1-458f-947a-bfe1776a6de7 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/17338084-5da1-458f-947a-bfe1776a6de7 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/17338084-5da1-458f-947a-bfe1776a6de7 1920w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/17338084-5da1-458f-947a-bfe1776a6de7 2000w" sizes="(min-width: 1981px) 12.2222vw, (min-width: 1025px) 424px, 100vw" class="contact-form-modal__bg-image portrait" alt=""> 2615 </div> 2616 <div class="contact-form-modal__close-container"> 2617 <button class="contact-form-modal__close toggle close lp-btn lp-icon link-icon--plus"></button> 2618 </div> 2619 <div class="contact-form-modal__container"> 2620 <div class="contact-form-modal-details only-desktop"> 2621 <h2 class="contact-form-modal-details__title only-desktop js-contact-title">Get in Touch</h2> 2622 <div class="contact-form-modal-agent"> 2623 <div class="contact-form-modal-agent__contact"> 2624 <p class="contact-form-modal-agent__name">COUTURE REAL ESTATE GROUP | CA DRE# 01333990</p> 2625 <p class="contact-form-modal-agent__phone lp-a"> 2626 <a class="contact-form-modal-agent__link" href="tel:9255253380">(925) 525-3380</a> 2627 </p> 2628 <p class="contact-form-modal-agent__email lp-a"> 2629 <a class="contact-form-modal-agent__link" href="/cdn-cgi/l/email-protection#7e151f0a161b0c17101b501d110b0a0b0c1b3e1d11130e1f0d0d501d1113"><span class="__cf_email__" data-cfemail="432822372b26312a2d266d202c363736312603202c2e332230306d202c2e">[email protected]</span></a> 2630 </p> 2631 </div> 2632 <div class="contact-form-modal-agent__contact"> 2633 <p class="contact-form-modal-agent__addres lp-pre-line">900 MAIN ST 2634 PLEASANTON CA 94566</p> 2635 </div> 2636 </div> 2637 2638 2639 2640 2641 <div class="contact-form-modal-details__socials"> 2642 <ul class="lp-socials social_icons-style-1 contact-form-modal-details__socials-list lp-socials"> 2643 2644 <li> 2645 <a 2646 href="https://www.linkedin.com/in/katherine-couture-90618317/" 2647 class="lp-socials__link contact-form-modal-details__socials-link" 2648 data-wow-delay="0s" 2649 target="_blank" 2650 aria-label="LINKEDIN" 2651 > 2652 <span class="lp-i lp-i--linkedin" aria-hidden="true"></span> 2653 </a> 2654 </li> 2655 <li> 2656 <a 2657 href="https://www.youtube.com/@couturerealestateteam3351" 2658 class="lp-socials__link contact-form-modal-details__socials-l
2658ink" 2659 data-wow-delay="0.1s" 2660 target="_blank" 2661 aria-label="YOUTUBE" 2662 > 2663 <span class="lp-i lp-i--youtube" aria-hidden="true"></span> 2664 </a> 2665 </li> 2666 <li> 2667 <a 2668 href="https://www.google.com/search?q=Katherine+Couture%2C+Realtor+%7C+Intero+Real+Estate+Livermore&rlz=1C1CHZN_enPH1001PH1001&oq=katherine+coutu&gs_lcrp=EgZjaHJvbWUqBggAEEUYOzIGCAAQRRg7MgYIARBFGDsyBggCEEUYOzIGCAMQRRg5MgYIBBBFGDwyBggFEEUYPDIGCAYQRRg80gEIMjI3MWowajGoAgCwAgA&sourceid=chrome&ie=UTF-8#lrd=0x808fe79f1abaaaab:0x84474328b06e78ae,1,,,," 2669 class="lp-socials__link contact-form-modal-details__socials-link" 2670 data-wow-delay="0.2s" 2671 target="_blank" 2672 aria-label="GOOGLE" 2673 > 2674 <span class="lp-i lp-i--google" aria-hidden="true"></span> 2675 </a> 2676 </li> 2677 <li> 2678 <a 2679 href="https://www.zillow.com/profile/user767165" 2680 class="lp-socials__link contact-form-modal-details__socials-link" 2681 data-wow-delay="0.3s" 2682 target="_blank" 2683 aria-label="ZILLOW" 2684 > 2685 <span class="lp-i lp-i--zillow" aria-hidden="true"></span> 2686 </a> 2687 </li> 2688 </ul> </div> 2689 </div> 2690 <div class="contact-form-modal-form"> 2691 <h2 class="contact-form-modal-form__title only-mobile js-contact-title">Get in Touch</h2> 2692 <form action="" class="contact-form-modal-form__form js-form" data-type="contact-form"> 2693 <div class="lp-h-pot"> 2694 <label for="-if-middleName">Middle Name</label> 2695 <input id="-if-middleName" name="middleName" value="" autocomplete="off" tabindex="-1"> 2696 </div> 2697 <div class="contact-form-modal-form__group"> 2698 <div class="contact-form-modal-form__group-container lp-input-group"> 2699 <input required id="-name" name="name" type="text" class="lp-input js-input-name" placeholder="Enter your full name"> 2700 <label for="-name" class="lp-label contact-form-modal-form__label">Name</label> 2701 </div> 2702 <div class="contact-form-modal-form__group-container lp-input-group"> 2703 <input required id="-phone" name="phone" type="tel" class="lp-input" placeholder="Your phone"> 2704 <label for="-phone" class="lp-label contact-form-modal-form__label">Phone</label> 2705 </div> 2706 </div> 2707 <div class="contact-form-modal-form__group lp-input-group"> 2708 <div class="contact-form-modal-form__input-container"> 2709 <input required id="-email" name="email" type="email" class="lp-input js-email-input" placeholder="@"> 2710 <div class="contact-form-modal-form__error error">Enter a valid email</div> 2711 </div> 2712 2713 <label for="-email" class="contact-form-modal-form__label lp-label">Email</label> 2714 </div> 2715 <div class="contact-form-modal-form__group lp-input-group"> 2716 <textarea id="-message" name="message" class="contact-form-modal-form__textarea lp-input" placeholder="Type your message"></textarea> 2717 <label for="-message" class="contact-form-modal-form__label lp-label">Your Message</label> 2718 </div> 2719 2720 <div class="contact-form-modal-form__disclaimer lp-disclaimer"> <div class='lp-tcr-content' style='margin-bottom: 1em;'>
2721 <span class='lp-tcr-message'> 2722 By providing your contact information to Couture Real Estate Group, your personal 2723 information will be processed in accordance with Couture Real Estate Group's 2724 <a href='/terms-and-conditions' target='_blank'>Privacy Policy</a>. By 2725 checking the box(es) below, you consent to receive communications 2726 regarding your real estate inquiries and related marketing and promotional 2727 updates in the manner selected by you. For SMS text messages, message 2728 frequency varies. Message and data rates may apply. You may opt out of 2729 receiving further communications from Couture Real Estate Group at any time. To opt 2730 out of receiving SMS text messages, reply STOP to unsubscribe. 2731 </span> 2732 </div> 2733 <label style='display: none;' for='-termsAccepted'>Opt 2734 in/Disclaimer Consent:</label> 2735 <label class='lp-tcr-content' style='margin-bottom: 1em;'> 2736 <span class='lp-tcr-checkbox'> 2737 <input 2738 type='checkbox' 2739 name='termsAccepted' 2740 id='-termsAccepted' 2741 oninvalid="this.setCustomValidity('Please accept the terms and conditions')" 2742 oninput="this.setCustomValidity('')" 2743 required 2744 value='Yes, I agree to receive email or phone call communications from Couture Real Estate Group.' 2745 /> 2746 </span> 2747 <span class='lp-tcr-message'> 2748 Yes, I agree to receive email or phone call communications from 2749 Couture Real Estate Group. 2750 </span> 2751 </label> 2752 <label style='display: none;' for='-customConsent'>Opt 2753 in/Disclaimer Consent:</label> 2754 <label class='lp-tcr-content' style='margin-bottom: 1em;'> 2755 <span class='lp-tcr-checkbox'> 2756 <input 2757 type='checkbox' 2758 name='customConsent' 2759 id='-customConsent' 2760 value='Yes, I agree to receive SMS text messages from Couture Real Estate Group.' 2761 /> 2762 </span> 2763 <span class='lp-tcr-message'> 2764 Yes, I agree to receive SMS text messages from Couture Real Estate Group. 2765 </span> 2766 </label> 2767 2768 </div> 2769 2770 <button type="submit" class="contact-form-modal-submit lp-btn lp-icon button-style-1"> 2771 <div class="contact-form-modal-submit__default"> 2772 <span class="contact-form-modal-submit__content lp-btn__content">Send Message</span> 2773 </div> 2774 <div class="contact-form-modal-submit__loading"> 2775 <span class="contact-form-modal-submit__content lp-btn__content">Sending</span> 2776 </div> 2777 <div class="contact-form-modal-submit__success"> 2778 <span class="contact-form-modal-submit__content lp-btn__content">Message Sent!</span> 2779 </div> 2780 </button> 2781 </form> 2782 </div> 2783 2784 <div class="contact-form-modal-details only-mobile"> 2785 <h2 class="contact-form-modal-details__title only-desktop js-contact-title">Get in Touch</h2> 2786 <div class="contact-form-modal-agent"> 2787 <div class="contact-form-modal-agent__contact"> 2788 <p class="contact-form-modal-agent__name">COUTURE REAL ESTATE GROUP | CA DRE# 01333990</p> 2789 <p class="contact-form-modal-agent__phone lp-a"> 2790 <a class="contact-form-modal-agent__link" href="tel:9255253380">(925) 525-3380</a> 2791 </p> 2792 <p class="contact-form-modal-agent__email lp-a"> 2793 <a class="contact-form-modal-agent__link" href="/cdn-cgi/l/email-protection#86ede7f2eee3f4efe8e3a8e5e9f3f2f3f4e3c6e5e9ebf6e7f5f5a8e5e9eb"><span class="__cf_email__" data-cfemail="cea5afbaa6abbca7a0abe0ada1bbbabbbcab8eada1a3beafbdbde0ada1a3">[email protected]</span></a> 2794 </p> 2795 </div> 2796 <div class="contact-form-modal-agent__contact"> 2797 <p class="contact-form-modal-agent__addres lp-pre-line">900 MAIN ST 2798 PLEASANTON CA 94566</p> 2799 </div> 2800 </div> 2801 2802 2803 2804 2805 <div class="contact-form-modal-details__socials"> 2806 <ul class="lp-socials social_icons-style-1 contact-form-modal-details__socials-l
2806ist lp-socials"> 2807 2808 <li> 2809 <a 2810 href="https://www.linkedin.com/in/katherine-couture-90618317/" 2811 class="lp-socials__link contact-form-modal-details__socials-link" 2812 data-wow-delay="0s" 2813 target="_blank" 2814 aria-label="LINKEDIN" 2815 > 2816 <span class="lp-i lp-i--linkedin" aria-hidden="true"></span> 2817 </a> 2818 </li> 2819 <li> 2820 <a 2821 href="https://www.youtube.com/@couturerealestateteam3351" 2822 class="lp-socials__link contact-form-modal-details__socials-link" 2823 data-wow-delay="0.1s" 2824 target="_blank" 2825 aria-label="YOUTUBE" 2826 > 2827 <span class="lp-i lp-i--youtube" aria-hidden="true"></span> 2828 </a> 2829 </li> 2830 <li> 2831 <a 2832 href="https://www.google.com/search?q=Katherine+Couture%2C+Realtor+%7C+Intero+Real+Estate+Livermore&rlz=1C1CHZN_enPH1001PH1001&oq=katherine+coutu&gs_lcrp=EgZjaHJvbWUqBggAEEUYOzIGCAAQRRg7MgYIARBFGDsyBggCEEUYOzIGCAMQRRg5MgYIBBBFGDwyBggFEEUYPDIGCAYQRRg80gEIMjI3MWowajGoAgCwAgA&sourceid=chrome&ie=UTF-8#lrd=0x808fe79f1abaaaab:0x84474328b06e78ae,1,,,," 2833 class="lp-socials__link contact-form-modal-details__socials-link" 2834 data-wow-delay="0.2s" 2835 target="_blank" 2836 aria-label="GOOGLE" 2837 > 2838 <span class="lp-i lp-i--google" aria-hidden="true"></span> 2839 </a> 2840 </li> 2841 <li> 2842 <a 2843 href="https://www.zillow.com/profile/user767165" 2844 class="lp-socials__link contact-form-modal-details__socials-link" 2845 data-wow-delay="0.3s" 2846 target="_blank" 2847 aria-label="ZILLOW" 2848 > 2849 <span class="lp-i lp-i--zillow" aria-hidden="true"></span> 2850 </a> 2851 </li> 2852 </ul> </div> 2853 </div> 2854 </div> 2855 </div> 2856 2857 </div> 2858 <button class="close lp-close" type="button" aria-label="close modal"> 2859 <span class="lp-close-icon" aria-hidden="true"></span> 2860 </button> 2861 </div> 2862 <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;"> 2863 <style> 2864 #qualifying-questions-modal .custom-select-toggle { 2865 border: 1px solid #848484; 2866 border-radius: 8px; 2867 padding: 12px 16px; 2868 } 2869 2870 #qualifying-questions-modal .custom-select-toggle.is-placeholder { 2871 color: #848484; 2872 } 2873 2874 #qualifying-questions-modal #qualifying-questions-modal-phoneNumber::placeholder { 2875 color: #848484; 2876 opacity: 1; 2877 } 2878 2879 #qualifying-questions-modal .disclaimer-more { 2880 display: none; 2881 } 2882 2883 #qualifying-questions-modal #qualifying-questions-modal-disclaimer-text:not(.collapsed) .disclaimer-more { 2884 display: inline; 2885 } 2886 2887 #qualifying-questions-modal #qualifying-questions-modal-disclaimer-text:not(.collapsed) .disclaimer-ellipsis { 2888 display: none; 2889 } 2890 </style>
vendor: 119 bytes, lines 2890-2891
2890 2891 <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
2891<script> 2892 function toggleDisclaimerQualifyingQuestionsModal() { 2893 const disclaimerText = document.getElementById('qualifying-questions-modal-disclaimer-text'); 2894 const toggleButton = document.getElementById('qualifying-questions-modal-toggle-disclaimer'); 2895 2896 if (disclaimerText.classList.contains('collapsed')) { 2897 disclaimerText.classList.remove('collapsed'); 2898 toggleButton.textContent = 'Read less'; 2899 toggleButton.setAttribute('aria-expanded', 'true'); 2900 } else { 2901 disclaimerText.classList.add('collapsed'); 2902 toggleButton.textContent = 'Read more'; 2903 toggleButton.setAttribute('aria-expanded', 'false'); 2904 } 2905 } 2906 </script>
2906 2907 <div style="max-width: 400px; width: 95%; margin: 0 auto;"> 2908 <div style="background: #fff; border: none; border-radius: 16px; color: black; box-shadow: none; position: relative;"> 2909 <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;"> 2910 <span aria-hidden="true">×</span> 2911 </button> 2912 <div style="padding: 40px 30px 32px;"> 2913 <div style="text-align: left; margin-bottom: 32px;"> 2914 <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;"> 2915 Thanks, please provide more information to help serve you 2916 </h2> 2917 </div> 2918 <form id="qualifying-questions-modal-form" data-type="contact-form"> 2919 <input type="hidden" name="source" value="PROFILE_UPDATE" /> 2920 <input type="hidden" name="email" value="" id="qualifying-questions-modal-email" /> 2921 <input type="hidden" name="triggerSource" id="qualifying-questions-modal-triggerSource" value="" /> 2922 <label for="qualifying-questions-modal-email" style="display:none;"> 2923 Email 2924 </label> 2925 <label for="qualifying-questions-modal-triggerSource" style="display:none;"> 2926 Trigger Source 2927 </label> 2928 2929 <div style="margin-bottom: 20px;"> 2930 <label for="qualifying-questions-modal-phoneNumber" style="display:none;"> 2931 Phone Number 2932 </label> 2933 <input 2934 type="tel" 2935 id="qualifying-questions-modal-phoneNumber" 2936 name="phoneNumber" 2937 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;" 2938 pattern="^\+?1?[-.\s]?\(?[0-9]{3}\)?[-.\s]?[0-9]{3}[-.\s]?[0-9]{4}$" 2939 required 2940 placeholder="Phone" 2941 aria-label="Phone Number" 2942 inputmode="tel" 2943 autocomplete="tel" 2944 onfocus="this.style.borderColor='black';" 2945 onblur="this.style.borderColor='#848484';" 2946 /> 2947 </div> 2948 2949 <div style="margin-bottom: 20px;"> 2950 <label for="qualifying-questions-modal-interest" style="display:none;"> 2951 Interest 2952 </label> 2953 <select 2954 id="qualifying-questions-modal-interest" 2955 name="interest" 2956 required 2957 data-label="Interest" 2958 aria-label="Interest" 2959 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;" 2960 onfocus="this.style.borderColor='black'; this.style.color='black';" 2961 onblur="this.style.borderColor='#848484'; if(this.value === '') this.style.color='#848484'; else this.style.color='black';" 2962 > 2963 <option value="" style="background: #fff; color: #848484;" disabled selected>Interested in...</option> 2964 <option value="Selling & Buying" style="background: #fff; color: black;">Selling & Buying</option> 2965 <option value="Selling" style="background: #fff; color: black;">Selling</option> 2966 <option value="Buying" style="background: #fff; color: black;">Buying</option> 2967 <option value="Renting" style="background: #fff; color: black;">Renting</option> 2968 <option value="Other" style="background: #fff; color: black;">Other</option> 2969 </select> 2970 </div> 2971 2972 <div style="margin-bottom: 32px; font-size: 12px; line-height: 1.2;"> 2973 <label style='display: none;' for='qualifying-questions-modal-qualifying-questions-termsAccepted'>Opt In/Disclaimer Consent:</label> 2974 <label class='lp-tcr-content'>
2975 <span class='lp-tcr-checkbox'> 2976 <input 2977 type='checkbox' 2978 id='qualifying-questions-modal-qualifying-questions-termsAccepted' 2979 name='termsAccepted' 2980 aria-describedby='qualifying-questions-modal-disclaimer-text' 2981 oninvalid="this.setCustomValidity('Please accept the terms and conditions')" 2982 oninput="this.setCustomValidity('')" 2983 required 2984 /></span> 2985 <span class='lp-tcr-message'> 2986 <div id="qualifying-questions-modal-disclaimer-text" class="collapsed" style="color: #848484;"> 2987 2988 I agree to be contacted by 2989 <strong>Couture Real Estate Team</strong> 2990 via call, email, and text <span class="disclaimer-more">for real estate services. 2991 To opt out, you can reply 'stop' at any time or reply 'help' for assistance. 2992 You can also click the unsubscribe link in the emails. 2993 Message and data rates may apply. Message frequency may vary.</span> 2994 <span class="disclaimer-ellipsis">...</span> 2995 <a href='/terms-and-conditions' target='_blank' rel='noopener noreferrer' style='text-decoration: underline;'>Privacy Policy</a>. 2996 </div> 2997 <button 2998 id="qualifying-questions-modal-toggle-disclaimer" 2999 type="button" 3000 style="background: none; border: none; color: #848484; font-size: inherit; font-weight: bold; padding: 0; margin-top: 4px; cursor: pointer;" 3001 aria-expanded="false" 3002 onclick="toggleDisclaimerQualifyingQuestionsModal()" 3003 > 3004 Read more 3005 </button> 3006 </span> 3007 </label> 3008 </div> 3009 3010 <div> 3011 <button 3012 type="submit" 3013 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;" 3014 onmouseover="this.style.background='transparent'; this.style.color='black';" 3015 onmouseout="this.style.background='black'; this.style.color='white';" 3016 > 3017 Submit 3018 </button> 3019 </div> 3020 </form> 3021 </div> 3022 </div> 3023 </div> 3024 </div> 3025 3026
3026<script> 3027 (function() { 3028 var lazyVideos = [].slice.call(document.querySelectorAll("video.lazy")); 3029 3030 if ("IntersectionObserver" in window && lazyVideos.length > 0) { 3031 var lazyVideoObserver = new IntersectionObserver(function(entries, observer) { 3032 entries.forEach(function(video) { 3033 if (video.isIntersecting) { 3034 for (var source in video.target.children) { 3035 var videoSource = video.target.children[source]; 3036 if (typeof videoSource.tagName === "string" && videoSource.tagName === "SOURCE") { 3037 videoSource.src = videoSource.dataset.src; 3038 } 3039 } 3040 3041 video.target.load(); 3042 video.target.classList.remove("lazy"); 3043 lazyVideoObserver.unobserve(video.target); 3044 } 3045 }); 3046 }); 3047 3048 lazyVideos.forEach(function(lazyVideo) { 3049 lazyVideoObserver.observe(lazyVideo); 3050 }); 3051 } 3052 })(); 3053 </script>
3053 3054 3055 <!-- Global site tag (gtag.js) - Google Analytics --> 3056
3056<script defer src="https://www.googletagmanager.com/gtag/js"></script>
3056 3057 3058 <!-- Google Tag Manager --> 3059
3059<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 3060 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 3061 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.defer=true;j.async=false;j.src= 3062 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 3063 })(window,document,'script','dataLayer','GTM-T9SFQGHZ');</script>
3063 3064 <!-- End Google Tag Manager --> 3065 3066 3067 <!-- LP Tracker (divolte.js) - LP Divolte --> 3068
3068<script>window.divolteLp=window.divolteLp||function(){(divolteLp.q=divolteLp.q||[]).push(arguments)}</script>
3068 3069 <!-- LP Tracker (eventBus) - LP EventBus --> 3070
3070<script>window.eventBusLp=window.eventBusLp||function(){(eventBusLp.q=eventBusLp.q||[]).push(arguments)}</script>
3070 3071 3072
3072<script> 3073 window.dataLayer = window.dataLayer || []; 3074 document.sendGoogleTagManagerEvent = function() { 3075 /* Honor GPC-enabled browsers and prevent GTM event if GPC is enabled. More details: https://global-privacy-control.glitch.me/ */ 3076 if (window.navigator.globalPrivacyControl) { 3077 return; 3078 } 3079 3080 dataLayer.push(arguments); 3081 } 3082 3083 document.sendGoogleTagManagerEvent('js', new Date()); 3084 document.sendGoogleTagManagerEvent('config', 'G-C30R32GJGE', { page: location.pathname, location: location.href }); 3085 document.sendGoogleAnalyticsEvent = function(googleEvent) { 3086 document.sendGoogleTagManagerEvent('event', googleEvent.eventAction || googleEvent.hitType, { 3087 event_category: googleEvent.eventCategory, 3088 event_label: googleEvent.eventLabel, 3089 value: googleEvent.eventValue, 3090 page: googleEvent.page, 3091 location: googleEvent.location 3092 }) 3093 }; 3094 3095 document.addEventListener("DOMContentLoaded", function() { 3096 (function() { 3097 //If the page has an element with ID of auto-year-update the element will be populated with the current year. 3098 var date = new Date(); 3099 var elements = document.getElementsByClassName('auto-year-update'); 3100 var i; 3101 for (i = 0; i < elements.length; i++) { 3102 elements[i].innerText = date.getFullYear(); 3103 } 3104 })(); 3105 if (window.divolteLp) { 3106 window.divolteLp('sendLpPageView', {}); 3107 } 3108 if (window.eventBusLp) { 3109 window.eventBusLp('sendLpPageView', {}); 3110 } 3111 }); 3112 </script>
3112 3113 3114 3115
3115<script> 3116 // Function to dynamically load a script 3117 function loadScript(url, callback) { 3118 var script = document.createElement('script'); 3119 script.type = 'text/javascript'; 3120 script.src = url; 3121 script.defer = true; 3122 script.async = true; 3123 script.onload = callback; 3124 document.head.appendChild(script); 3125 } 3126 3127 // Function to dynamically load CSS file 3128 function loadCSS(url) { 3129 var link = document.createElement("link"); 3130 link.rel = "stylesheet"; 3131 link.href = url; 3132 document.head.appendChild(link); 3133 } 3134 3135 // Global methods / variables that can be accessed by element js 3136 window.luxuryPresence = { 3137 libs: { 3138 loadJs: loadScript, 3139 loadCss: loadCSS, 3140 jsLibsMap: { 3141 paroller: { 3142 jsSrc: 'https://d1e1jt2fj4r8r.cloudfront.net/javascript/jquery.paroller.min.js', 3143 isLoaded: false, 3144 }, 3145 ionRangeSlider: { 3146 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/js/ion.rangeSlider.min.js', 3147 cssSrc: 'https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/css/ion.rangeSlider.min.css', 3148 isLoaded: false, 3149 requires: ['jquery'], 3150 }, 3151 splide: { 3152 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/splidejs/4.1.4/js/splide.min.js', 3153 cssSrc: 'https://cdnjs.cloudflare.com/ajax/libs/splidejs/4.1.4/css/splide-core.min.css', 3154 isLoaded: false, 3155 }, 3156 wow: { 3157 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/wow/1.1.2/wow.min.js', 3158 isLoaded: false, 3159 }, 3160 jquery: { 3161 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js', 3162 isLoaded: false, 3163 }, 3164 slick: { 3165 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick.min.js', 3166 isLoaded: false, 3167 requires: ['jquery'], 3168 }, 3169 libphonenumber: { 3170 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/libphonenumber-js/1.11.8/libphonenumber-js.min.js', 3171 isLoaded: false, 3172 }, 3173 }, 3174 }, 3175 }; 3176 </script>
3176 3177
3177<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>
3177 3178
3178<script defer src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.7.8/handlebars.min.js"></script>
3178 3179
3179<script defer src="https://cdn.jsdelivr.net/npm/[email protected]/dist/handlebars-intl.min.js"></script>
3179 3180
3180<script defer src="https://cdnjs.cloudflare.com/ajax/libs/superagent/4.1.0/superagent.min.js"></script>
3180 3181
3181<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>
3181 3182
3182<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>
3182 3183
3183<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>
3183 3184 3185 <!-- GOOGLE TRANSLATE SCRIPT --> 3186
3186<script> 3187 function googleTranslateElementInit() { 3188 // list of languages can be overridden by setting window.customLanguages in the head JS. example `window.customLanguages = 'en,de,fr,ro,sk,pl'` 3189 // Language codes can be taken from here https://cloud.google.com/translate/docs/languages 3190 const DEFAULT_LANGUAGES = 'en,es,zh-CN,zh-TW,tl,vi,ar,ko,ru,de,fr,hi,pt'; 3191 document.querySelectorAll('[data-type="TRANSLATE"]').forEach(function(translate){ 3192 translate.innerText = ''; 3193 new google.translate.TranslateElement({ 3194 pageLanguage: 'en', 3195 layout: google.translate.TranslateElement.InlineLayout.SIMPLE, 3196 includedLanguages: window.customLanguages || DEFAULT_LANGUAGES, 3197 }, translate); 3198 }); 3199 } 3200 </script>
3200 3201
3201<script defer src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>
3201 3202
3202<script defer src="https://accounts.google.com/gsi/intermediate"></script>
3202 3203 3204 <!-- GOOGLE TRANSLATE SCRIPT END--> 3205
3205<script> 3206 3207 // UI helpers 3208 (function () { 3209 3210 function getSideMenu () { 3211 return document.querySelector('body > div.sidemenu'); 3212 } 3213 3214 function sideMenuHide (instant) { 3215 var sideMenu = getSideMenu(); 3216 if (!sideMenu || !sideMenu.classList.contains('visible')) { 3217 return; 3218 } 3219 sideMenu.classList.remove('visible'); 3220 sideMenu.dispatchEvent(new CustomEvent('lpui-hide', { detail: { instant: !!instant } })); 3221 window.dispatchEvent(new CustomEvent('lpui-sidemenu-hide', { detail: {instant: !!instant} })); 3222 } 3223 3224 function sideMenuShow () { 3225 var sideMenu = getSideMenu(); 3226 if (!sideMenu || sideMenu.classList.contains('visible')) { 3227 return; 3228 } 3229 sideMenu.classList.add('visible'); 3230 sideMenu.dispatchEvent(new Event('lpui-show')); 3231 window.dispatchEvent(new Event('lpui-sidemenu-show')); 3232 } 3233 3234 function sideMenuToggle () { 3235 var sideMenu = getSideMenu(); 3236 if (!sideMenu) { 3237 return; 3238 } 3239 var isSideMenuVisible = sideMenu.classList.contains('visible'); 3240 if (isSideMenuVisible) { 3241 sideMenuHide(); 3242 } else { 3243 sideMenuShow(); 3244 } 3245 } 3246 3247 var scrollLockRequests = {}; 3248 window.__debug_scrollLockRequests = scrollLockRequests; 3249 var hideScrollStyles = ''+ 3250 'body {'+ 3251 'overflow: hidden;' + 3252 '}'; 3253 var hideScrollId = 'hide-body-scroll-style'; 3254 3255 function scrollLock () { 3256 var style = document.createElement('style'); 3257 style.id = hideScrollId; 3258 style.textContent = hideScrollStyles; 3259 document.head.appendChild(style); 3260 window.dispatchEvent(new Event('lpui-scroll-locked')); 3261 } 3262 3263 function scrollUnlock () { 3264 document.getElementById(hideScrollId)?.remove(); 3265 window.dispatchEvent(new Event('lpui-scroll-unlocked')); 3266 } 3267 3268 function requestScrollLock (lockId) { 3269 var wasLocked = Object.keys(scrollLockRequests).length > 0; 3270 scrollLockRequests[lockId || '__anonymous_lock'] = true; 3271 if (!wasLocked) { 3272 scrollLock(); 3273 } 3274 } 3275 3276 function releaseScrollLock (lockId) { 3277 if (lockId) { 3278 delete scrollLockRequests[lockId]; 3279 if (!Object.keys(scrollLockRequests).length) { 3280 scrollUnlock(); 3281 } 3282 } else { 3283 scrollLockRequests = {}; 3284 window.__debug_scrollLockRequests = scrollLockRequests; 3285 scrollUnlock(); 3286 } 3287 } 3288 3289 function showModal (modalId, options) { 3290 var modal = document.getElementById(modalId); 3291 if (!modal) { 3292 return; 3293 } 3294 3295 if (!modal.classList.contains('visible')) { 3296 modal.classList.add('visible'); 3297 if (options && options.scrollLock) { 3298 window.lpUI.requestScrollLock(modalId); 3299 } 3300 modal.dispatchEvent(new Event('lpui-show')); 3301 window.dispatchEvent(new CustomEvent('lpui-modal-show', { detail: { id: modalId } })); 3302 } 3303 3304 const visibleModals = document.querySelectorAll('.modal.visible'); 3305 3306 if (visibleModals.length > 1) { 3307 3308 const maxZIndex = Array.from(visibleModals).reduce((maxZIndex, modal) => { 3309 const zIndex = window.getComputedStyle(modal).zIndex; 3310 const parsedZIndex = zIndex !== 'auto' ? parseInt(zIndex) : 0; 3311 return Math.max(maxZIndex, parsedZIndex); 3312 }, 0); 3313 3314 modal.style.zIndex = maxZIndex + 1; 3315 } 3316 3317 } 3318 3319 function _hideModal (modalEl) { 3320 if (!modalEl) { 3321 return; 3322 } 3323 if (!modalEl.classList.contains('visible')) { 3324 return; 3325 } 3326 modalEl.classList.remove('visible'); 3327 modalEl.style.zIndex = '';
3328 modalEl.dispatchEvent(new Event('lpui-hide')); 3329 var modalId = modalEl.getAttribute('id'); 3330 if (modalId) { 3331 window.lpUI.releaseScrollLock(modalId); 3332 window.dispatchEvent(new CustomEvent('lpui-modal-hide', { detail: { id: modalId } })); 3333 } 3334 } 3335 3336 function hideModal (modalId) { 3337 _hideModal(document.getElementById(modalId)); 3338 } 3339 3340 function hideClosestModal (el) { 3341 const modal = el?.closest('.modal'); 3342 if (!modal) { 3343 return; 3344 } 3345 if (modal.classList) { 3346 _hideModal(modal); 3347 return; 3348 } 3349 if (modal.length && modal[0].classList) { 3350 _hideModal(modal[0]); 3351 } 3352 } 3353 3354 window.lpUI = { 3355 sideMenuHide: sideMenuHide, 3356 sideMenuShow: sideMenuShow, 3357 sideMenuToggle: sideMenuToggle, 3358 requestScrollLock: requestScrollLock, 3359 releaseScrollLock: releaseScrollLock, 3360 showModal: showModal, 3361 hideModal: hideModal, 3362 hideClosestModal: hideClosestModal 3363 } 3364 })(); 3365 3366 var stringifyPrimitive = function(v) { 3367 switch (typeof v) { 3368 case 'string': 3369 return v; 3370 3371 case 'boolean': 3372 return v ? 'true' : 'false'; 3373 3374 case 'number': 3375 return isFinite(v) ? v : ''; 3376 3377 default: 3378 return ''; 3379 } 3380 }; 3381 3382 function objectToQuerystring(obj, sep, eq, name) { 3383 // https://github.com/Gozala/querystring/blob/master/encode.js 3384 sep = sep || '&'; 3385 eq = eq || '='; 3386 if (obj === null) { 3387 obj = undefined; 3388 } 3389 3390 if (typeof obj === 'object') { 3391 return Object.keys(obj).map(function(k) { 3392 var ks = encodeURIComponent(stringifyPrimitive(k)) + eq; 3393 if (Array.isArray(obj[k])) { 3394 return obj[k].map(function(v) { 3395 return ks + encodeURIComponent(stringifyPrimitive(v)); 3396 }).join(sep); 3397 } else { 3398 return ks + encodeURIComponent(stringifyPrimitive(obj[k])); 3399 } 3400 }).filter(Boolean).join(sep); 3401 3402 } 3403 3404 if (!name) return ''; 3405 return encodeURIComponent(stringifyPrimitive(name)) + eq + 3406 encodeURIComponent(stringifyPrimitive(obj)); 3407 } 3408 3409 function getPath(url, options) { 3410 var parser = document.createElement('a'); 3411 parser.href = url || ''; 3412 var path = parser.pathname || ''; 3413 if (path[0] !== '/') { 3414 // IE does not return path starting with a slash 3415 path = '/' + path; 3416 } 3417 3418 if (options && options.queryString) { 3419 path += parser.search; 3420 } 3421 3422 return path; 3423 } 3424 3425 function getMLSAutocomplete(keyword) { 3426 var searchURL = window.location.protocol + '//' + window.location.hostname + '/home-search/auto_complete'; 3427 var query = { 3428 kind: 'listings', 3429 query: keyword 3430 }; 3431 3432 return superagent 3433 .get(searchURL) 3434 .query(query) 3435 .then(function(res) { 3436 var data = res.body || []; 3437 // Array of listing_auto_complete documents: id, display_address, city, state, 3438 // price, sold_price, status, status_modified_at, photo_urls (array of URLs). 3439 3440 return data; 3441 }); 3442 } 3443 3444 function getMLSAutocompleteWithFilters(keyword, filters = {}) { 3445 var searchURL = window.location.protocol + '//' + window.location.hostname + '/home-search/auto_complete'; 3446 3447 return superagent 3448 .get(searchURL) 3449 .query({ kind: 'listings', query: keyword, ...filters }) 3450 .then(function(res) { 3451 // Same response shape as getMLSAutocomplete. 3452 return res.body || []; 3453 }); 3454 } 3455 3456 function makeMlsLink(data) { 3457 // Code Dupe from utils/googlePlace 3458 // mapping of google data type to mls data type 3459 var mapping = { 3460 neighborhood: 'neighborhood', 3461 locality: 'place', 3462 administrative_area_level_2: 'county', 3463 administrative_area_level_1: 'state', 3464 postal_code: 'postalcode', 3465 }; 3466 3467 function _filterTypes(types) { 3468 return types.filter(function(type) { return type !== 'political' }); 3469 } 3470 3471 if (!data || !Object.keys(data).length) { 3472 return '/home-search/listings'; 3473 } 3474 3475 var newData = {};
3476 _filterTypes(data.types).forEach(function(type) { 3477 if (mapping[type]) { 3478 newData.search_type = mapping[type]; 3479 } 3480 }); 3481 newData.omnibox = data.formatted_address; 3482 data.address_components.forEach(function(component) { 3483 _filterTypes(component.types).forEach(function(type) { 3484 if (mapping[type]) { 3485 newData[mapping[type]] = component.long_name; 3486 } 3487 }); 3488 }); 3489 var bounds = data.geometry.bounds; 3490 var convertedData = Object.assign(bounds, newData); 3491 3492 return '/home-search/listings?' + objectToQuerystring(convertedData); 3493 } 3494 3495 function debounce(func, wait) { 3496 let timeout; 3497 return function(...args) { 3498 const context = this; 3499 clearTimeout(timeout); 3500 timeout = setTimeout(() => func.apply(context, args), wait) 3501 } 3502 } 3503 3504 // Global methods / variables that can be accessed by element js 3505 window.luxuryPresence = { 3506 ...window.luxuryPresence, 3507 defaults: { 3508 companyId: '6382308c-8bfc-4993-9f82-aceab30cdb9f', 3509 apiGatewayUrl: '/api-gw', 3510 routerUrl: '/api-nv', 3511 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\
3511n }\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
3511x\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"}, 3512 propertyPlaceholderImage: {"id":"3c0de54f-3b31-44c9-9f4f-5b866706511c","alt":null,"bytes":45540,"width":1920,"format":"png","height":1200,"pngUrl":"","shared":true,"curated":false,"duration":null,"largeUrl":"https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/fb95221b-e937-42d4-858b-5f8c202fb926","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/fb95221b-e937-42d4-858b-5f8c202fb926","authorUrl":null,"createdAt":"2025-04-09T21:39:48.182Z","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/fb95221b-e937-42d4-858b-5f8c202fb926","sourceUrl":null,"updatedAt":"2025-04-09T21:39:48.182Z","xLargeUrl":"https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/fb95221b-e937-42d4-858b-5f8c202fb926","__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/fb95221b-e937-42d4-858b-5f8c202fb926","description":null,"displayName":"property-couture","originalUrl":"https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/fb95221b-e937-42d4-858b-5f8c202fb926","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/fb95221b-e937-42d4-858b-5f8c202fb926","originalFileName":"Property couture","cloudinaryPublicId":"fb95221b-e937-42d4-858b-5f8c202fb926"} 3513 }, 3514 objectToQuerystring: objectToQuerystring, 3515 getPath: getPath, 3516 getMLSAutocomplete: getMLSAutocomplete, 3517 getMLSAutocompleteWithFilters: getMLSAutocompleteWithFilters, 3518 makeMlsLink: makeMlsLink, 3519 debounce: debounce, 3520 }; 3521 3522 var wowOffset = 100; 3523 </script>
3523 3524
3524<script> 3525 (()=>{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));
3525if(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)];
3525let 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;
3525r&&(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())),`
3525<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}
3525return 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
3525ontact 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
3525ourceResource,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(()=>
3525o.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=` 3526 query PropertyDisclaimers($input: PropertyDisclaimersInput!) { 3527 propertyDisclaimers(input: $input) { 3528 feedId 3529 listingId 3530 resolvedFromListing 3531 listingCardAttribution 3532 listingDetailCourtesy 3533 listingDetailFooter 3534 logo 3535 } 3536 } 3537`;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 >
3537 .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=)
3537)|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=` 3538 <div id="modal-${r.id}" class="modal visible"> 3539 <div class="modal-content"> 3540 <div class="lightbox-video"> 3541 <div class="video-player"> 3542 <div class="embed-container"> 3543 ${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>`} 3544 </div> 3545 </div> 3546 </div> 3547 </div> 3548 <button class="close lp-close" type="button" aria-label="close modal"><span class="lp-close-icon" aria-hidden="true"></span></button> 3549 </div> 3550 `;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
3550=>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");
3550let 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
3550URIComponent(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=` 3551 <button class="lp-lightbox__close" aria-label="close modal"></button> 3552 <div class="lp-lightbox__content"> 3553 <div class="lp-lightbox__carousel splide" role="group" aria-label="Image Gallery"> 3554 <div class="splide__arrows"> 3555 <button class="splide__arrow splide__arrow--prev lp-lightbox-arrow lp-lightbox-arrow--prev"></button> 3556 <button class="splide__arrow splide__arrow--next lp-lightbox-arrow lp-lightbox-arrow--next"></button> 3557 </div> 3558 <div class="splide__track"> 3559 <ul class="splide__list"></ul> 3560 </div> 3561 </div> 3562 </div> 3563 `,"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
3563h(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=` 3564 <button class="lp-lightbox__close" aria-label="close modal"></button> 3565 <div class="lp-lightbox__content"> 3566 <div class="lp-lightbox__carousel"></div> 3567 </div> 3568 `,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"}
3568)),(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"];
3568return 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=` 3569 query { 3570 validSession { 3571 success 3572 } 3573 } 3574 `;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","
3574spaceTypeIds","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];
3574if("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})}})(); 3575//# sourceMappingURL=lp-sdk.js.map 3576 3577 </script>
3577 3578 3579
3579<script> 3580 var lpGlobalInitialized = false; 3581 3582 function lpGlobalInit () { 3583 if (lpGlobalInitialized) { 3584 return; 3585 } 3586 lpGlobalInitialized = true; 3587 // Initialize wow animation plugin only according to turbolinks 3588 var wow; 3589 if (window.WOW) { 3590 wow = new WOW({ 3591 animateClass: 'animated', 3592 offset: wowOffset, 3593 live: false, 3594 callback: function(box) {} 3595 }); 3596 } 3597 // Initialize handlebar helpers only once 3598 function handlebarsInit() { 3599 if (!window.Handlebars) { 3600 return; 3601 } 3602 HandlebarsIntl.registerWith(Handlebars); 3603 Handlebars.registerHelper(window.luxuryPresence.handlebarsHelpersFactory(Handlebars)); 3604 } 3605 3606 handlebarsInit(); 3607 3608 var modalContentUrl = "/modals.html"; 3609 const modalsContainer = document.getElementById('modals'); 3610 if (modalsContainer) { 3611 fetch(modalContentUrl).then(function(res) { 3612 if (!res.ok) { 3613 throw new Error(`HTTP error! Status: ${res.status}`); 3614 } 3615 return res.text(); 3616 }).then(function(resultText) { 3617 modalsContainer.innerHTML = resultText; 3618 3619 // now we need to execute all script elements 3620 Array.from(modalsContainer.getElementsByTagName('script')).forEach(function (s) { 3621 const script = document.createElement("script"); 3622 script.text = s.innerHTML; 3623 Array.from(s.attributes).forEach(function (a) { 3624 script.setAttribute(a.name, a.value); 3625 }) 3626 s.parentNode.replaceChild(script, s); 3627 }); 3628 3629 try { 3630 window.luxuryPresence.modals.initialize(window.luxuryPresence._modalIncludes); 3631 window.luxuryPresence.contactForms.initialize({ selector: '#modals' }); 3632 window.luxuryPresence.validation.initialize({ selector: '#modals' }); 3633 window.luxuryPresence.oauth.initialize({ 3634 googleSignOnEnabled: true, 3635 iframe: false }); 3636 } catch (e) { 3637 console.log(e); 3638 } 3639 document.querySelectorAll('.modals > .modal .close').forEach(closeModalBtn => { 3640 closeModalBtn.addEventListener('click', function() { 3641 window.lpUI.hideClosestModal(closeModalBtn); 3642 }); 3643 }); 3644 }).catch((e) => console.log(e)); 3645 } 3646 /* Initialize Luxury Presence SDK */ 3647 try { 3648 window.luxuryPresence.config.setCompany("6382308c-8bfc-4993-9f82-aceab30cdb9f", {}); 3649 window.luxuryPresence.config.setWebsite("0ff2944e-bf8d-436a-8339-bb2d94158f4a", { 3650 myhomeDashboardEnabled: true, 3651 mlsEnabled: true, 3652 hstValuationRedirectEnabled: true, 3653 hvStepTwoCaptureEnabled: false 3654 }); 3655 const url = new URL(window.location.href); 3656 const shareId = url.searchParams.get('shareId'); 3657 window.luxuryPresence.config.setPage("d4c5a123-ba97-4e26-a4db-895ff5fd88b5", { 3658 sourceResource: "", 3659 pageElementId: "", 3660 pageQueryVariables: {}, 3661 shareId: "", 3662 }); 3663 window.luxuryPresence.config.setWebsiteApiGatewayUrl("https://wgw.luxurypresence.com", {}); 3664 window.luxuryPresence.config.setBuyerSellerServiceUrl("https://bss.luxurypresence.com", {}); 3665 window.luxuryPresence.config.setDivolteServiceUrl("https://t.luxurypresence.com", {}); 3666 window.luxuryPresence.config.setEventBusUrl("https://cdn.luxurypresence.com/scripts/event-bus-js", {}); 3667 window.luxuryPresence.config.setEventBus({ 3668 enabled: true, 3669 apiKey: "phc_PMYT31xlmXBaTCwpIRx1v6RrpLVZIuP47N3mOT6KLnr", 3670 url: "https://p.luxurypresence.com", 3671 }); 3672 window.luxuryPresence.config.setTemplateId("1d3967df-14f2-449d-87b7-bd68bf93906f", {}); 3673 window.luxuryPresence.config.setLeadIngesterUrl("https://leads.luxurypresence.com", {}); 3674 window.luxuryPresence.buttons.initialize({}); 3675 window.luxuryPresence.consent.initialize({ provider: 'lp-consent' }); 3676 window.luxuryPresence.contactForms.initialize({}); 3677 window.luxuryPresence.validation.initialize({}); 3678 window.luxuryPresence.expandSliders.initialize({}); 3679 window.luxuryPresence.oauth.initialize({ googleSignOnEnabled: true, iframe: false }); 3680 window.luxuryPresence.qualifyingQuestionsModal.initialize({ qualifyingQuestionsModalEnabled: true }); 3681 /* Optional: cached pages / older SDKs may not carry this controller */ 3682 window.luxuryPresence.currencyConversion?.initialize(); 3683 } catch (e) { 3684 console.log(e); 3685 } 3686 3687 /* Inject Section Specific Javascript */ 3688 try { 3689(function init(sectionDomId) { 3690 const section = document.getElementById(sectionDomId); 3691 const contactTitle = section.querySelector('.js-contact-title'); 3692 const emailInput = section.querySelector('.js-email-input'); 3693 const emailRegex = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~\-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)+/; 3694 emailInput.addEventListener('input', function () { 3695 if (emailRegex.test(this.value)) { 3696 this.setCustomValidity(''); 3697 } else { 3698 this.setCustomValidity('Please enter a valid email address.'); 3699 } 3700 this.reportValidity(); 3701 }); 3702 const inputName = section.querySelector('.js-input-name'); 3703 inputName.addEventListener('keyup', function () { 3704 if (this.value.replaceAll(/\d/g, "").trim().split(" ").length < 2 || this.value.replaceAll(/\d/g, "").trim() === "") { 3705 this.setCustomValidity("Please input your first name and last name."); 3706 } else { 3707 this.setCustomValidity(""); 3708 } 3709 }); 3710 function setHttp(link) { 3711 if (link.search(/^http[s]?\:\/\/|\//) == -1) { 3712 link = 'https://' + link; 3713 } 3714 return link; 3715 } 3716 const socialLinks = section.querySelectorAll('.lp-socials__link, .contact-form-modal-details__socials-l
3716ink'); 3717 socialLinks.forEach(linkElement => { 3718 const href = linkElement.getAttribute('href'); 3719 if (href) { 3720 linkElement.setAttribute('href', setHttp(href)); 3721 } 3722 }); 3723 if (contactTitle.length < 1) return; 3724 let words = contactTitle.textContent.split(" "); 3725 if (words.length > 1) { 3726 contactTitle.innerHTML = `<span class="contact__title-top">${words[0]} </span><span class="contact__title-bottom">${words.splice(1).join(" ")}</span>`; 3727 } 3728 const addRedirectToForm = () => { 3729 const redirectLink = document.getElementById(`${sectionDomId}`).querySelector('.js-redirect-link'); 3730 const form = document.getElementById(`${sectionDomId}`).querySelector('.js-form'); 3731 function redirectPage(link) { 3732 if (link) { 3733 const rawHref = link.getAttribute('href'); 3734 link.setAttribute('href', setHttp(rawHref)); 3735 link.click(); 3736 } 3737 } 3738 function setHttp(link) { 3739 if (link.search(/^http[s]?\:\/\/|\//) == -1) { 3740 link = 'http://' + link; 3741 } 3742 return link; 3743 } 3744 form.addEventListener("reset", function () { 3745 redirectPage(redirectLink); 3746 }); 3747 }; 3748 addRedirectToForm(); 3749})('modal-global-contact-us'); 3750} catch(e) { 3751console.log(e); 3752} 3753 3754 try { 3755(function init(sectionDomId) { 3756 (function () { 3757 const observer = new IntersectionObserver(entries => { 3758 entries.forEach(entry => { 3759 if (entry.isIntersecting) entry.target.classList.add('is-in-viewport'); 3760 }); 3761 }, { 3762 threshold: 0.5 3763 }); 3764 const initialElements = document.querySelectorAll('[data-animate="true"]'); 3765 initialElements.forEach(element => observer.observe(element)); 3766 const container = document.querySelector('.data-container'); 3767 if (container) { 3768 const mutationObserver = new MutationObserver(mutations => { 3769 mutations.forEach(mutation => { 3770 if (mutation.type === 'childList') { 3771 mutation.addedNodes.forEach(node => { 3772 if (node.nodeType === 1 && node.getAttribute('data-animate') === 'true') observer.observe(node); 3773 }); 3774 } 3775 }); 3776 }); 3777 mutationObserver.observe(container, { 3778 childList: true, 3779 subtree: true 3780 }); 3781 } 3782 })(); 3783 const sectionSelector = document.getElementById(sectionDomId); 3784 const searchToggleSelector = sectionSelector.querySelector('.js-search-toggle-btn'); 3785 const searchWrapperSelector = sectionSelector.querySelector('.js-header-search'); 3786 const header = sectionSelector.querySelector('.js-header'); 3787 let lastScrollTop = 0; 3788 (function (stickyAnchorRoot) { 3789 if (!stickyAnchorRoot) return; 3790 function getInFlowTop(target) { 3791 var inlineValue = target.style.getPropertyValue('position'); 3792 var inlinePriority = target.style.getPropertyPriority('position'); 3793 target.style.setProperty('position', 'relative', 'important'); 3794 var top = target.getBoundingClientRect().top + window.pageYOffset; 3795 if (inlineValue) target.style.setProperty('position', inlineValue, inlinePriority);else target.style.removeProperty('position'); 3796 var scrollMarginTop = parseFloat(window.getComputedStyle(target).scrollMarginTop) || 0; 3797 return Math.max(0, top - scrollMarginTop); 3798 } 3799 stickyAnchorRoot.addEventListener('click', function (event) { 3800 if (event.defaultPrevented || event.button !== 0) return; 3801 if (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return; 3802 if (document.body.hasAttribute('data-scroll-container')) return; 3803 var link = event.target.closest('a[href]'); 3804 if (!link || !stickyAnchorRoot.contains(link) || link.target === '_blank') return; 3805 var href = link.getAttribute('href'); 3806 if (!/^#[^#]/.test(href)) return; 3807 var targetId; 3808 try { 3809 targetId = decodeURIComponent(href.slice(1)); 3810 } catch (e) { 3811 return; 3812 } 3813 var target = document.getElementById(targetId); 3814 if (!target || window.getComputedStyle(target).position !== 'sticky') return; 3815 event.preventDefault(); 3816 if (window.location.hash !== href) window.history.pushState(null, '', href); 3817 window.requestAnimationFrame(function () { 3818 window.scrollTo({ 3819 top: getInFlowTop(target) 3820 }); 3821 }); 3822 }); 3823 })(document.getElementById(sectionDomId)); 3824 const subNavOpeners = sectionSelector.querySelectorAll('.js-subnav-opener');
3825 subNavOpeners.forEach(opener => { 3826 opener.addEventListener('click', function (e) { 3827 e.preventDefault(); 3828 e.stopPropagation(); 3829 const parent = opener.parentElement; 3830 subNavOpeners.forEach(otherOpener => { 3831 if (otherOpener !== opener) { 3832 otherOpener.parentElement.classList.remove('header-navigation__item--sub-nav--opened'); 3833 } 3834 }); 3835 parent.classList.toggle('header-navigation__item--sub-nav--opened'); 3836 }); 3837 }); 3838 document.addEventListener('click', function (e) { 3839 if (!e.target.closest('.js-subnav-opener') && !e.target.closest('.header-navigation__item--sub-nav--opened')) { 3840 subNavOpeners.forEach(opener => { 3841 opener.parentElement.classList.remove('header-navigation__item--sub-nav--opened'); 3842 }); 3843 } 3844 }); 3845 function initHeaderColors() { 3846 try { 3847 var colorStr = window.getComputedStyle(header).getPropertyValue("--backgroundColor"); 3848 var bgColor = makeColor(colorStr); 3849 var isDark = (bgColor.rgba.r * 299 + bgColor.rgba.g * 587 + bgColor.rgba.b * 114) / 1000 < 128; 3850 sectionSelector.classList.add('is-background-color-' + (isDark ? 'dark' : 'light')); 3851 } catch (e) {} 3852 } 3853 function makeColor(str) { 3854 var color = { 3855 rgba: { 3856 r: 0, 3857 g: 0, 3858 b: 0, 3859 a: 0 3860 } 3861 }; 3862 if (str && str.match) { 3863 var m = str.match(/rgba?\s*\((\d+)\s*,\s*(\d+)\s*,\s*(\d+)(?:\s*,\s*([\.0-9]+))?\)/); 3864 if (m) { 3865 color.rgba.r = parseInt(m[1]); 3866 color.rgba.g = parseInt(m[2]); 3867 color.rgba.b = parseInt(m[3]); 3868 color.rgba.a = parseFloat(m[4]); 3869 if (isNaN(color.rgba.a)) { 3870 color.rgba.a = 1; 3871 } 3872 } 3873 } 3874 return color; 3875 } 3876 initHeaderColors(); 3877 var navEl = document.querySelector('nav > header') || document.querySelector('nav'); 3878 var navbarHeight = navEl ? navEl.offsetHeight : 0; 3879 if (navEl) { 3880 if (window.ResizeObserver) { 3881 new ResizeObserver(function (entries) { 3882 if (!entries.length) return; 3883 navbarHeight = entries[0].target.offsetHeight; 3884 }).observe(navEl); 3885 } else { 3886 window.addEventListener('resize', function () { 3887 navbarHeight = navEl.offsetHeight; 3888 }); 3889 } 3890 } 3891 function isLocomotiveActive() { 3892 return document.body.hasAttribute('data-scroll-container'); 3893 } 3894 function updateHeaderVisibility(currentScrollTop) {
3895 if (!searchWrapperSelector || searchWrapperSelector.style.display !== 'block') { 3896 if (currentScrollTop === 0) header.classList.remove('header--hide');else if (currentScrollTop > lastScrollTop) header.classList.add('header--hide');else header.classList.remove('header--hide'); 3897 } 3898 lastScrollTop = currentScrollTop; 3899 } 3900 function customHeaderHideShow(currentScrollTop) { 3901 if (!navEl) return; 3902 if (currentScrollTop > 0) { 3903 navEl.classList.add('scroll'); 3904 } else { 3905 navEl.classList.remove('scroll'); 3906 } 3907 if (currentScrollTop > lastScrollTop && currentScrollTop > navbarHeight) { 3908 document.documentElement.style.setProperty('--global-header-height', '0px'); 3909 } else { 3910 document.documentElement.style.setProperty('--global-header-height', navbarHeight + 'px'); 3911 } 3912 } 3913 window.addEventListener('scroll', function () { 3914 if (isLocomotiveActive()) return; 3915 var currentScrollTop = window.scrollY || document.documentElement.scrollTop; 3916 updateHeaderVisibility(currentScrollTop); 3917 }); 3918 var isTicking = false; 3919 var latestLocoScrollY = 0; 3920 window.addEventListener('locomotive-scroll', function (e) { 3921 latestLocoScrollY = e.detail.scrollY; 3922 if (!isTicking) { 3923 window.requestAnimationFrame(function () { 3924 customHeaderHideShow(latestLocoScrollY); 3925 updateHeaderVisibility(latestLocoScrollY); 3926 isTicking = false; 3927 }); 3928 isTicking = true; 3929 } 3930 }); 3931 if (searchToggleSelector !== null) { 3932 searchToggleSelector.addEventListener('click', function () { 3933 if (searchWrapperSelector.style.display === 'block') { 3934 searchWrapperSelector.style.display = 'none'; 3935 } else { 3936 searchWrapperSelector.style.display = 'block'; 3937 header.classList.remove('header--hide'); 3938 } 3939 }); 3940 document.addEventListener('click', function (evt) { 3941 if (!searchToggleSelector.contains(evt.target) && !searchWrapperSelector.contains(evt.target)) searchWrapperSelector.style.display = 'none'; 3942 }); 3943 } 3944 window.luxuryPresence.mapApiLoader.load().then(() => {
3945 if (!searchWrapperSelector) return; 3946 const templateHTML = sectionSelector.querySelector('.js-card-template')?.innerHTML; 3947 const itemTemplate = templateHTML && Handlebars.compile(templateHTML); 3948 const searchMls = searchWrapperSelector.dataset.searchMls === 'true'; 3949 const searchProperties = searchWrapperSelector.dataset.searchProperties === 'true'; 3950 const selectedCountries = searchWrapperSelector.dataset.locations; 3951 const searchInputSelector = sectionSelector.querySelector('.js-header-search-input'); 3952 const searchIconSelector = sectionSelector.querySelector('.js-header-btn-search'); 3953 const closeIconSelector = sectionSelector.querySelector('.js-header-btn-close'); 3954 const searchResultsSelector = sectionSelector.querySelector('.js-header-search-results-holder'); 3955 const resultsContainerSelector = sectionSelector.querySelector('.js-header-results-container'); 3956 const loaderSelector = sectionSelector.querySelector('.js-header-spinner'); 3957 const predefinedSelector = sectionSelector.querySelector('.js-header-search-results-predefined'); 3958 const nothingFoundSelector = sectionSelector.querySelector('.js-header-spinner-nothing-found'); 3959 const service = new google.maps.places.AutocompleteService(); 3960 const geocoder = new google.maps.Geocoder(); 3961 var keyword; 3962 var leasePropertyState = false; 3963 var leasePropertySearched; 3964 var isLoading = false; 3965 var newSearchTimer; 3966 var placesResult = {}; 3967 function updateSearchDisplay() { 3968 var hasResults = !!resultsContainerSelector.innerHTML; 3969 var hasPredefined = predefinedSelector.querySelectorAll('a:not(.not-processed)').length > 0; 3970 nothingFoundSelector.style.display = 'none'; 3971 if (hasResults) { 3972 predefinedSelector.style.display = 'none'; 3973 loaderSelector.style.display = 'none'; 3974 resultsContainerSelector.style.display = 'block'; 3975 } else if (isLoading) { 3976 resultsContainerSelector.style.display = 'none'; 3977 predefinedSelector.style.display = 'none'; 3978 loaderSelector.style.display = 'block'; 3979 } else if (hasPredefined) { 3980 resultsContainerSelector.style.display = 'none'; 3981 loaderSelector.style.display = 'none'; 3982 predefinedSelector.style.display = 'block'; 3983 } else { 3984 resultsContainerSelector.style.display = 'none'; 3985 loaderSelector.style.display = 'none'; 3986 predefinedSelector.style.display = 'none'; 3987 if (keyword) nothingFoundSelector.style.display = 'block'; 3988 } 3989 } 3990 function moveSelection(up) { 3991 var count = resultsContainerSelector.innerHTML ? resultsContainerSelector : predefinedSelector; 3992 var links = count.querySelectorAll('.results-link'); 3993 if (!links.length) return; 3994 var idx = -1; 3995 links.forEach((link, i) => { 3996 if (idx === -1 && link.classList.contains('header-search-results__link--selected')) idx = i; 3997 }); 3998 var newIdx; 3999 if (up) { 4000 newIdx = idx - 1; 4001 if (newIdx < 0) newIdx = links.length - 1; 4002 } else { 4003 newIdx = idx + 1; 4004 if (newIdx > links.length - 1) newIdx = 0; 4005 } 4006 if (newIdx !== idx) { 4007 searchResultsSelector.querySelector('.header-search-results__link--selected')?.classList.remove('header-search-results__link--selected'); 4008 links[newIdx].classList.add('header-search-results__link--selected'); 4009 } 4010 } 4011 function startSearch() { 4012 const term = searchInputSelector.value; 4013 if (term === keyword && leasePropertySearched === leasePropertyState) return; 4014 leasePropertySearched = leasePropertyState; 4015 keyword = term; 4016 if (term) doSearch(term, leasePropertySearched);else setResults(null); 4017 } 4018 function mlsSearch(term) { 4019 var query = { 4020 omnibox: term, 4021 limit: 5 4022 }; 4023 return superagent.get(window.location.protocol + '//' + window.location.host + '/home-search/listings.json').query(query).then(function (res) { 4024 if (!Array.isArray(res.body)) return []; 4025 return res.body.map(function (item) { 4026 return { 4027 id: item.id, 4028 display_address: [item.address_1, item.city, [item.state, item.postal_code].filter(function (i) { 4029 return i; 4030 }).join(' ')].filter(function (i) { 4031 return i; 4032 }).join(', ') 4033 }; 4034 }); 4035 }, function (e) { 4036 console.log(e); 4037 return []; 4038 }); 4039 } 4040 function resolveGeoBounds(placeId, description) { 4041 return new Promise(function (resolve, reject) { 4042 geocoder.geocode({ 4043 'placeId': placeId 4044 }, function (results, status) { 4045 if (status != 'OK') return resolve(null); 4046 var result = results[0]; 4047 var bounds = new google.maps.LatLngBounds();
4048 bounds.extend(result.geometry.viewport.getSouthWest()); 4049 bounds.extend(result.geometry.viewport.getNorthEast()); 4050 result.geometry.bounds = bounds.toJSON(); 4051 var placeUrl = window.luxuryPresence.makeMlsLink(result); 4052 return resolve({ 4053 placeUrl: placeUrl, 4054 description: description 4055 }); 4056 }); 4057 }); 4058 } 4059 function addRestrictions(request) { 4060 switch (selectedCountries) { 4061 case 'Worldwide': 4062 return request; 4063 case 'US & Canada': 4064 request.componentRestrictions = { 4065 country: ['us', 'ca'] 4066 }; 4067 return request; 4068 default: 4069 request.componentRestrictions = { 4070 country: 'us' 4071 }; 4072 return request; 4073 } 4074 } 4075 function resolveAutocomplete(term, deeper) { 4076 var request = addRestrictions({ 4077 input: term, 4078 types: deeper ? ['geocode'] : ['(regions)'], 4079 limit: 1 4080 }); 4081 return new Promise(function (resolve, reject) { 4082 service.getPlacePredictions(request, function (results, status) { 4083 if (status !== google.maps.places.PlacesServiceStatus.OK) { 4084 resolve(null); 4085 return; 4086 } 4087 if (!Array.isArray(results)) { 4088 resolve(null); 4089 return; 4090 } 4091 if (deeper) { 4092 var allowedTypes = { 4093 'neighborhood': true, 4094 'administrative_area_level_3': true, 4095 'administrative_area_level_4': true, 4096 'administrative_area_level_5': true, 4097 'sublocality_level_1': true, 4098 'sublocality_level_2': true, 4099 'sublocality_level_3': true 4100 }; 4101 results = results.filter(function (res) { 4102 return res.types.find(t => allowedTypes[t]); 4103 }); 4104 } 4105 if (!results.length) { 4106 resolve(null); 4107 return; 4108 } 4109 resolve(results); 4110 }); 4111 }); 4112 } 4113 function placesSearch(term, ignoreInput) { 4114 if (placesResult.term !== term) { 4115 placesResult = { 4116 term: term, 4117 result: resolveAutocomplete(term).then(function (results) { 4118 if (!ignoreInput && term !== keyword) return null; 4119 if (ignoreInput && !results) return resolveAutocomplete(term, true); 4120 return results; 4121 }).then(function (results) { 4122 if (!ignoreInput && term !== keyword || !results) return []; 4123 var geoResultPromises = results.map(function (result) { 4124 return resolveGeoBounds(result.place_id, result.description); 4125 }); 4126 return Promise.all(geoResultPromises).then(function (geoLinks) { 4127 return geoLinks.filter(function (i) { 4128 return i; 4129 }).slice(0, 3); 4130 }); 4131 }) 4132 }; 4133 } 4134 return placesResult.result; 4135 } 4136 function propertiesSearch(term) { 4137 var payload = { 4138 companyId: window.luxuryPresence.defaults.companyId, 4139 search: term, 4140 offset: 0, 4141 limit: 4, 4142 statusIds: ["5f528253-abb7-484e-95c3-330269ac1105", "959c11cf-8655-4f91-874c-292b0ab7ea6b", "a0012964-4f51-4430-abf8-6547c5ab6441", "df04ccbe-4621-4140-a504-ee1a17430bb7", "88b4ace6-f39b-4b25-a051-8f6dba976833", "96031d77-bbe5-4de3-90d8-1e4e70de8ca8"] 4143 }; 4144 var gqlQuery = 'query ($companyId: String, $search: String, $offset: Int, $limit: Int, $propertyStatusId: [String!]) {properties (companyId: $companyId, search: $search, offset: $offset, limit: $limit, propertyStatusId: $propertyStatusId) {items {id name slug fullAddress privateAddress status isPasswordProtected priceUponRequest salesPrice reducedPrice leasePrice currency media {smallUrl mediumUrl largeUrl xLargeUrl xxLargeUrl height width altTagText}}}}'; 4145 return superagent.post(window.luxuryPresence.defaults.routerUrl + '/graphql').send({ 4146 query: gqlQuery, 4147 variables: window.luxuryPresence.routerApi.transformVariables('properties', payload) 4148 }).then(function (res) { 4149 var page = (res.body.data || {}).properties; 4150 return page && page.items || []; 4151 }, function (err) { 4152 return []; 4153 }); 4154 } 4155 function doSearch(term, leaseProperty) { 4156 isLoading = true; 4157 updateSearchDisplay(); 4158 Promise.all([searchMls ? mlsSearch(term, leaseProperty) : [], searchMls ? placesSearch(term) : [], searchProperties ? propertiesSearch(term, leaseProperty) : []]).then(function (res) { 4159 if (term !== keyword) return; 4160 setResults(res[0], res[1], res[2], leaseProperty); 4161 }); 4162 } 4163 function makeResultsBlockHtml(title, elementClass, links) { 4164 if (!links || !links.length) return '';else return '<div class="header-search-results__block"><div class="header-search-results__title">' + title + '</div><div class="' + elementClass + '">' + links.join('') + '</div></div>'; 4165 } 4166 function setResults(mlsResults, placesResults, propertiesResults, leaseProperty) { 4167 searchResultsSelector.querySelector('.header-search-results__link--selected')?.classList.remove('header-search-results__link--selected'); 4168 isLoading = false;
4169 updateSearchDisplay(); 4170 if (!mlsResults) { 4171 resultsContainerSelector.innerHTML = ''; 4172 updateSearchDisplay(); 4173 return; 4174 } 4175 if (!mlsResults.length && !placesResults.length && !propertiesResults.length) { 4176 updateSearchDisplay(); 4177 return; 4178 } 4179 var propertiesHtml = makeResultsBlockHtml('Featured Properties', 'header-properties', propertiesResults.map(function (result) { 4180 return itemTemplate(result); 4181 })); 4182 var placesHtml = makeResultsBlockHtml('Locations', '', placesResults.map(function (result) { 4183 return `<a class="header-search-results__link lp-icon" href="${result.placeUrl}${leaseProperty ? '&lease_property=true' : ''}">${result.description}</a>`; 4184 })); 4185 var mlsHtml = makeResultsBlockHtml('Address', '', mlsResults.map(function (result) { 4186 return `<a href="/home-search/listings/${result.id}" class="header-search-results__link lp-icon">${result.display_address}</a>`; 4187 })); 4188 resultsContainerSelector.innerHTML = propertiesHtml + placesHtml + mlsHtml; 4189 updateSearchDisplay(); 4190 } 4191 var neighborhoods = null; 4192 function fetchNeighborhoods() { 4193 var url = window.luxuryPresence.defaults.routerUrl; 4194 var gqlQuery = 'query ($companyId: String, $offset: Int, $limit: Int) {neighborhoods (companyId: $companyId, offset: $offset, limit: $limit) {items {id, name, mlsLink, googlePlaceData}}}'; 4195 var payload = {}; 4196 payload.offset = 0; 4197 payload.limit = 100; 4198 payload.companyId = window.luxuryPresence.defaults.companyId; 4199 return superagent.post(url + '/graphql').withCredentials().send({ 4200 query: gqlQuery, 4201 variables: payload 4202 }).then(function (res) { 4203 var data = res.body.data && res.body.data.neighborhoods; 4204 neighborhoods = data && data.items || null; 4205 if (neighborhoods && !neighborhoods.length) { 4206 neighborhoods = null; 4207 } 4208 }); 4209 } 4210 function setPredefinedNeighborhoods() { 4211 return fetchNeighborhoods().then(function () { 4212 if (!neighborhoods) return; 4213 var placesHtml = makeResultsBlockHtml('Locations', neighborhoods.map(function (item) { 4214 return `<a class="header-search-results__link lp-icon" href="${item.mlsLink}${leasePropertyState ? '&lease_property=true' : ''}">${item.googlePlaceData && item.googlePlaceData.formatted_address || item.name}</a>`; 4215 })); 4216 predefinedSelector.innerHTML = placesHtml; 4217 updateSearchDisplay(); 4218 }); 4219 } 4220 if (searchMls) setPredefinedNeighborhoods(); 4221 closeIconSelector.style.opacity = '0'; 4222 closeIconSelector.style.pointerEvents = 'none'; 4223 searchInputSelector.setAttribute('inputmode', 'search'); 4224 searchInputSelector.addEventListener('input', function () { 4225 if (this.value === '') { 4226 closeIconSelector.style.opacity = '0'; 4227 closeIconSelector.style.pointerEvents = 'none'; 4228 searchIconSelector.style.opacity = '1'; 4229 searchIconSelector.style.pointerEvents = 'auto'; 4230 } else { 4231 closeIconSelector.style.opacity = '1'; 4232 closeIconSelector.style.pointerEvents = 'auto'; 4233 searchIconSelector.style.opacity = '0'; 4234 searchIconSelector.style.pointerEvents = 'none'; 4235 } 4236 window.clearTimeout(newSearchTimer); 4237 newSearchTimer = window.setTimeout(startSearch, 300); 4238 }); 4239 searchInputSelector.addEventListener('keydown', function (ev) { 4240 if (ev.which === 38) { 4241 ev.preventDefault(); 4242 moveSelection(true); 4243 return false; 4244 } 4245 if (ev.which === 40) { 4246 ev.preventDefault(); 4247 moveSelection(); 4248 return false; 4249 } 4250 if (ev.which === 13) { 4251 let $lnk = searchResultsSelector.querySelector('.header-search-results__link--selected'); 4252 if ($lnk) { 4253 $lnk.click(); 4254 searchActive = false; 4255 updateSearchDisplay(); 4256 } else { 4257 $searchBtn.click(); 4258 } 4259 } 4260 }); 4261 closeIconSelector.addEventListener('click', function () { 4262 searchInputSelector.value = ''; 4263 searchInputSelector.dispatchEvent(new Event('input')); 4264 searchActive = false;
4265 updateSearchDisplay(); 4266 }); 4267 searchResultsSelector.addEventListener('mouseenter', function (ev) { 4268 searchResultsSelector.querySelector('.header-search-results__link--selected')?.classList.remove('header-search-results__link--selected'); 4269 }); 4270 function outsideClickHandler(e) { 4271 if (searchWrapperSelector.contains(e.target)) return; 4272 searchActive = false; 4273 updateSearchDisplay(); 4274 } 4275 document.addEventListener('click', outsideClickHandler); 4276 }); 4277})('global-navbar'); 4278} catch(e) { 4279console.log(e); 4280} 4281 try { 4282(function init(sectionDomId, options) { 4283 var elementSelector = options.elementSelector || 'nav'; 4284 var element = document.querySelector(elementSelector); 4285 var sections = document.querySelectorAll('body > section'); 4286 var subNavContainers = element.querySelectorAll('.sub-nav'); 4287 var initialBackgroundColor = options.initialBackgroundColor || element.style.backgroundColor; 4288 var backgroundColorScroll = options.backgroundColorScroll || '#191919'; 4289 var fontColor = options.fontColor || '#fff'; 4290 var fontColorScroll = options.fontColorScroll || '#000'; 4291 var didScroll = false; 4292 var lastScrollTop = 0; 4293 var delta = 5; 4294 4295 // eslint-disable-next-line sonarjs/no-collapsible-if 4296 if (wow) { 4297 // Wowjs might not trigger for position fixed elements 4298 if (window.scrollY > 0) { 4299 element.querySelectorAll('.wow').forEach(el => wow.show(el)); 4300 } 4301 } 4302 function adjustNavPinState() { 4303 // Remove 'visible' class from all subNavContainers 4304 for (let i = 0; i < subNavContainers.length; i++) { 4305 subNavContainers[i].classList.remove('visible'); 4306 } 4307 if (window.scrollY > 0) { 4308 element.style.backgroundColor = backgroundColorScroll; 4309 element.style.color = fontColorScroll; 4310 element.classList.add('scroll'); 4311 } else { 4312 element.style.backgroundColor = initialBackgroundColor; 4313 element.style.color = fontColor; 4314 element.classList.remove('scroll'); 4315 } 4316 } 4317 adjustNavPinState(); 4318 function onScroll() { 4319 didScroll = true; 4320 } 4321 window.addEventListener('scroll', onScroll); 4322 4323 // eslint-disable-next-line 4324 var debounceInterval = setInterval(() => { 4325 if (didScroll) { 4326 // eslint-disable-next-line 4327 hasScrolled(); 4328 didScroll = false; 4329 } 4330 }, 250); 4331 function hasScrolled() { 4332 adjustNavPinState(); 4333 // eslint-disable-next-line 4334 var navbarHeight = element.offsetHeight; 4335 // eslint-disable-next-line 4336 var st = window.scrollY; 4337 4338 // Make sure they scroll more than delta 4339 if (Math.abs(lastScrollTop - st) <= delta) { 4340 return; 4341 } 4342 if (st > lastScrollTop && st > navbarHeight) { 4343 // Scroll Down 4344 element.style.transform = `translateY(-${navbarHeight}px) scaleY(0)`; 4345 document.documentElement.style.setProperty('--global-header-height', '0px'); 4346 4347 // Some sections "follow" the navbar with class sticky (i.e. Producer search) 4348 sections.forEach(section => { 4349 if (section.classList.contains('sticky')) { 4350 section.style.top = '0px'; 4351 } 4352 }); 4353 } else { 4354 // Scroll Up 4355 // eslint-disable-next-line 4356 if (st + window.innerHeight < document.documentElement.scrollHeight) { 4357 element.style.transform = `translateY(0) scaleY(1)`; 4358 document.documentElement.style.setProperty('--global-header-height', `${navbarHeight}px`); 4359 sections.forEach(section => { 4360 if (section.classList.contains('sticky')) { 4361 section.style.top = `${navbarHeight}px`; 4362 } 4363 }); 4364 } 4365 } 4366 lastScrollTop = st; 4367 } 4368})('NAVBAR', JSON.parse("{\"fontColor\":\"#161515\",\"elementSelector\":\".header\",\"fontColorScroll\":\"#fff\",\"backgroundColorScroll\":\"rgba(26,26,26, .8)\",\"initialBackgroundColor\":\"#fff\"}")); 4369} catch(e) { 4370console.log(e); 4371} 4372 try { 4373(function init(sectionDomId) { 4374 if (sectionDomId === "main-section") sectionDomId = "global-sidemenu"; 4375 (function (stickyAnchorRoot) { 4376 if (!stickyAnchorRoot) return; 4377 function getInFlowTop(target) { 4378 var inlineValue = target.style.getPropertyValue('position'); 4379 var inlinePriority = target.style.getPropertyPriority('position'); 4380 target.style.setProperty('position', 'relative', 'important'); 4381 var top = target.getBoundingClientRect().top + window.pageYOffset; 4382 if (inlineValue) target.style.setProperty('position', inlineValue, inlinePriority);else target.style.removeProperty('position'); 4383 var scrollMarginTop = parseFloat(window.getComputedStyle(target).scrollMarginTop) || 0; 4384 return Math.max(0, top - scrollMarginTop); 4385 } 4386 stickyAnchorRoot.addEventListener('click', function (event) { 4387 if (event.defaultPrevented || event.button !== 0) return; 4388 if (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return; 4389 if (document.body.hasAttribute('data-scroll-container')) return; 4390 var link = event.target.closest('a[href]'); 4391 if (!link || !stickyAnchorRoot.contains(link) || link.target === '_blank') return; 4392 var href = link.getAttribute('href'); 4393 if (!/^#[^#]/.test(href)) return; 4394 var targetId;
4395 try { 4396 targetId = decodeURIComponent(href.slice(1)); 4397 } catch (e) { 4398 return; 4399 } 4400 var target = document.getElementById(targetId); 4401 if (!target || window.getComputedStyle(target).position !== 'sticky') return; 4402 event.preventDefault(); 4403 if (window.location.hash !== href) window.history.pushState(null, '', href); 4404 window.requestAnimationFrame(function () { 4405 window.scrollTo({ 4406 top: getInFlowTop(target) 4407 }); 4408 }); 4409 }); 4410 })(document.getElementById(sectionDomId)); 4411 var sidemenu = document.getElementById(sectionDomId); 4412 var openers = sidemenu.querySelectorAll('.js-sub-nav-opener'); 4413 var items = sidemenu.querySelectorAll('.js-idemenu-navigation-item'); 4414 var watermark = document.querySelector('.js-sidemenu-watermark'); 4415 var onShow = function () { 4416 window.lpUI.requestScrollLock(sectionDomId); 4417 }; 4418 var onHide = function () { 4419 window.lpUI.releaseScrollLock(sectionDomId); 4420 }; 4421 sidemenu.addEventListener('lpui-show', onShow); 4422 sidemenu.addEventListener('lpui-hide', onHide); 4423 openers.forEach(function (opener) { 4424 opener.addEventListener('click', function (event) { 4425 event.preventDefault(); 4426 this.classList.toggle('sidemenu-navigation__link--active'); 4427 this.classList.toggle('sidemenu-navigation__link--sub-nav-active'); 4428 }); 4429 }); 4430 document.body.addEventListener('click', function (evt) { 4431 if (!evt.target.closest('.sidemenu') && !evt.target.closest('.js-sidemenu-opener')) { 4432 window.lpUI.sideMenuHide(); 4433 } 4434 }); 4435 const handleLinkClick = function (href) { 4436 if (href && href.match(/^#[^#].*$/)) { 4437 window.lpUI.sideMenuHide(); 4438 } 4439 }; 4440 const mainNavLinks = sidemenu.querySelectorAll('.sidemenu-navigation__link'); 4441 mainNavLinks.forEach(function (link) { 4442 link.addEventListener('click', function (event) { 4443 const href = this.getAttribute('href'); 4444 handleLinkClick(href); 4445 }); 4446 }); 4447 const subNavLinks = sidemenu.querySelectorAll('.sidemenu-navigation-sub-nav__link'); 4448 subNavLinks.forEach(function (link) { 4449 link.addEventListener('click', function (event) { 4450 const href = this.getAttribute('href'); 4451 handleLinkClick(href); 4452 }); 4453 }); 4454 if (watermark) { 4455 items.forEach(function (item, index) { 4456 item.setAttribute("data-id", index <= 9 ? "0" + (index + 1) : index + 1); 4457 }); 4458 items.forEach(function (item) { 4459 item.addEventListener('mouseenter', function () { 4460 watermark.setAttribute("data-id", item.getAttribute("data-id")); 4461 watermark.style.opacity = 1; 4462 }); 4463 item.addEventListener('mouseleave', function () { 4464 watermark.style.opacity = 0; 4465 }); 4466 }); 4467 } 4468})('global-sidemenu'); 4469} catch(e) { 4470console.log(e); 4471} 4472 4473 try { 4474(function init(sectionDomId) { 4475 const sectionDom = document.getElementById(sectionDomId); 4476 const backToTopBtn = sectionDom.querySelector('.js-back-to-top'); 4477 backToTopBtn?.addEventListener('click', () => { 4478 window.scrollTo({ 4479 top: 0, 4480 behavior: 'smooth' 4481 }); 4482 }); 4483})('global-footer'); 4484} catch(e) { 4485console.log(e); 4486} 4487 4488 try { 4489(function init(sectionDomId) { 4490 const customDropdownHTML = ` 4491 <div class="custom-select" role="presentation"> 4492 <button class="custom-select-toggle" type="button" aria-haspopup="true" aria-expanded="false" role="combobox"></button> 4493 <div class="custom-select-menu"><div class="custom-select-content"></div></div> 4494 </div>`; 4495 const hideOriginalSelect = originalSelect => { 4496 originalSelect.classList.remove(...originalSelect.classList); 4497 originalSelect.classList.add("sr-only"); 4498 }; 4499 const openCustomSelect = customSelectToggle => {
4500 let customSelectMenu = customSelectToggle.nextElementSibling; 4501 customSelectMenu.classList.add("open"); 4502 customSelectToggle.classList.add("open"); 4503 customSelectToggle.ariaExpanded = true; 4504 }; 4505 const closeCustomSelect = customSelectToggle => { 4506 let customSelectMenu = customSelectToggle.nextElementSibling; 4507 customSelectMenu.classList.remove("open"); 4508 customSelectToggle.classList.remove("open"); 4509 customSelectToggle.ariaExpanded = false; 4510 }; 4511 const inheritAttributes = (originalSelect, customSelectToggle, customSelectMenu) => { 4512 customSelectToggle.className = customSelectToggle.className.concat(' ', originalSelect.className); 4513 customSelectToggle.id = originalSelect.getAttribute("id") + "custom"; 4514 customSelectToggle.dataset.name = originalSelect.getAttribute("name"); 4515 customSelectMenu.setAttribute("aria-labelledby", customSelectToggle.id); 4516 }; 4517 const initiateQuerySelectors = customSelect => { 4518 let customSelectToggle = customSelect.querySelector('.custom-select-toggle'), 4519 customSelectMenu = customSelect.querySelector('.custom-select-menu'), 4520 customSelectContent = customSelect.querySelector('.custom-select-content'); 4521 return { 4522 customSelectToggle, 4523 customSelectMenu, 4524 customSelectContent 4525 }; 4526 }; 4527 const initiateToggleText = (originalSelect, customSelectToggle) => { 4528 const dataLabelOption = originalSelect.querySelector("[data-label]"); 4529 const isMultiple = originalSelect?.multiple; 4530 if (!isMultiple) { 4531 const toggleText = dataLabelOption && dataLabelOption.dataset.label || originalSelect.querySelector(":checked")?.textContent || originalSelect.querySelector("option")?.textContent; 4532 customSelectToggle.classList.add("is-placeholder"); 4533 customSelectToggle.innerHTML = toggleText; 4534 } else { 4535 const placeholderText = dataLabelOption && dataLabelOption.dataset.label || originalSelect.querySelector("option")?.textContent || "Select"; 4536 const selectedOptions = Array.from(originalSelect.querySelectorAll("option:checked")).filter(opt => opt.value !== ""); 4537 if (selectedOptions.length === 0) { 4538 customSelectToggle.innerHTML = placeholderText; 4539 customSelectToggle.classList.add("is-placeholder"); 4540 } else if (selectedOptions.length === 1) { 4541 customSelectToggle.innerHTML = selectedOptions[0].textContent; 4542 customSelectToggle.classList.remove("is-placeholder"); 4543 } else { 4544 customSelectToggle.innerHTML = `${selectedOptions[0].textContent} +${selectedOptions.length - 1}`; 4545 customSelectToggle.classList.remove("is-placeholder"); 4546 } 4547 } 4548 }; 4549 const convertOptionsToButtons = (originalSelect, customSelectContent) => { 4550 originalSelect.querySelectorAll('option').forEach(option => { 4551 const button = createButtonFromOption(option); 4552 customSelectContent.appendChild(button); 4553 }); 4554 }; 4555 const createButtonFromOption = option => { 4556 let button = document.createElement('button'); 4557 button.className = "custom-select-item"; 4558 button.setAttribute("role", "option"); 4559 button.setAttribute("type", "button"); 4560 button.textContent = option.textContent; 4561 button.setAttribute('value', option.value); 4562 if (option.disabled) { 4563 button.setAttribute("disabled", "true"); 4564 } 4565 if (option.selected && option.value !== "") { 4566 button.classList.add("is-selected"); 4567 button.setAttribute("aria-selected", "true"); 4568 } 4569 return button; 4570 }; 4571 const initiateEventListeners = (originalSelect, customSelectToggle, customSelectMenu) => { 4572 const isMultiple = originalSelect?.multiple; 4573 originalSelect.addEventListener("focus", function () { 4574 openCustomSelect(customSelectToggle); 4575 customSelectToggle.focus(); 4576 }); 4577 customSelectToggle.addEventListener("click", function () { 4578 if (customSelectToggle.getAttribute("aria-expanded") === "true") { 4579 closeCustomSelect(customSelectToggle); 4580 } else { 4581 openCustomSelect(customSelectToggle); 4582 } 4583 }); 4584 customSelectMenu.addEventListener("click", function (event) { 4585 if (event.target.classList.contains('custom-select-item')) { 4586 const clickedValue = event.target.value; 4587 const clickedOption = originalSelect.querySelector(`option[value="${clickedValue}"]`); 4588 const placeholderOption = originalSelect.querySelector("[data-label]"); 4589 const placeholderText = placeholderOption?.dataset.label || originalSelect.querySelector("option")?.textContent || "Select"; 4590 if (!isMultiple) { 4591 let opts = customSelectMenu.querySelectorAll(".is-selected"); 4592 [].forEach.call(opts, function (el) { 4593 el.classList.remove("is-selected"); 4594 }); 4595 event.target.classList.add("is-selected"); 4596 clickedOption.selected = true; 4597 customSelectToggle.innerHTML = clickedOption.textContent; 4598 if (clickedValue === "" || event.target.classList.contains("is-placeholder")) { 4599 customSelectToggle.classList.add("is-placeholder"); 4600 } else { 4601 customSelectToggle.classList.remove("is-placeholder"); 4602 } 4603 let changeEvent = new Event('change', { 4604 bubbles: true 4605 }); 4606 originalSelect.dispatchEvent(changeEvent); 4607 closeCustomSelect(customSelectToggle); 4608 } else { 4609 if (clickedValue === "") { 4610 customSelectMenu.querySelectorAll(".is-selected").forEach(el => { 4611 el.classList.remove("is-selected"); 4612 el.setAttribute("aria-selected", "false"); 4613 }); 4614 originalSelect.querySelectorAll("option").forEach(opt => opt.selected = false); 4615 customSelectToggle.innerHTML = placeholderText; 4616 customSelectToggle.classList.add("is-placeholder"); 4617 } else { 4618 const isCurrentlySelected = event.target.classList.contains("is-selected"); 4619 event.target.classList.toggle("is-selected"); 4620 event.target.setAttribute("aria-selected", (!isCurrentlySelected).toString()); 4621 clickedOption.selected = !isCurrentlySelected; 4622 const allItem = customSelectMenu.querySelector('.custom-select-item[value=""]'); 4623 if (allItem) { 4624 allItem.classList.remove("is-selected"); 4625 allItem.setAttribute("aria-selected", "false"); 4626 } 4627 const allOption = originalSelect.querySelector('option[value=""]'); 4628 if (allOption) allOption.selected = false;
4629 const selectedItems = customSelectMenu.querySelectorAll(".custom-select-item.is-selected"); 4630 if (selectedItems.length === 0) { 4631 customSelectToggle.innerHTML = placeholderText; 4632 customSelectToggle.classList.add("is-placeholder"); 4633 } else if (selectedItems.length === 1) { 4634 customSelectToggle.innerHTML = selectedItems[0].textContent; 4635 customSelectToggle.classList.remove("is-placeholder"); 4636 } else { 4637 customSelectToggle.innerHTML = `${selectedItems[0].textContent} +${selectedItems.length - 1}`; 4638 customSelectToggle.classList.remove("is-placeholder"); 4639 } 4640 } 4641 let changeEvent = new Event('change', { 4642 bubbles: true 4643 }); 4644 originalSelect.dispatchEvent(changeEvent); 4645 } 4646 } 4647 }); 4648 document.addEventListener("click", function (event) { 4649 if (!customSelectMenu.contains(event.target) && !customSelectToggle.contains(event.target)) { 4650 closeCustomSelect(customSelectToggle); 4651 } 4652 }); 4653 }; 4654 const createCustomSelect = originalSelect => { 4655 const customSelect = document.createElement('div'); 4656 customSelect.innerHTML = customDropdownHTML; 4657 const { 4658 customSelectToggle, 4659 customSelectMenu, 4660 customSelectContent 4661 } = initiateQuerySelectors(customSelect); 4662 inheritAttributes(originalSelect, customSelectToggle, customSelectMenu); 4663 hideOriginalSelect(originalSelect); 4664 initiateToggleText(originalSelect, customSelectToggle); 4665 convertOptionsToButtons(originalSelect, customSelectContent); 4666 initiateEventListeners(originalSelect, customSelectToggle, customSelectMenu); 4667 return customSelect; 4668 }; 4669 const setCustomSelectValue = (originalSelect, value) => {
4670 let customSelect = originalSelect.nextElementSibling; 4671 let customSelectToggle = customSelect.querySelector(".custom-select-toggle"); 4672 let customSelectContent = customSelect.querySelector(".custom-select-content"); 4673 if (!customSelectContent) return; 4674 let selectedOption = value ? Array.from(customSelectContent.children).find(function (b) { 4675 return b.value === value; 4676 }) : customSelectContent.firstChild; 4677 if (!selectedOption) { 4678 return; 4679 } 4680 if (selectedOption.classList.contains("is-disabled")) return; 4681 let elementNumber = Array.from(selectedOption.parentNode.children).indexOf(selectedOption); 4682 let linkedOption = originalSelect.querySelectorAll("option")[elementNumber]; 4683 linkedOption.selected = true; 4684 selectedOption.classList.add("is-selected"); 4685 selectedOption.parentNode.querySelectorAll(".custom-select-item").forEach(el => { 4686 if (el !== selectedOption) { 4687 el.classList.remove("is-selected"); 4688 } 4689 }); 4690 closeCustomSelect(customSelectToggle); 4691 customSelectToggle.innerHTML = linkedOption.innerHTML; 4692 if (linkedOption.value) { 4693 customSelectToggle.classList.remove("is-placeholder"); 4694 if (linkedOption.value !== "") { 4695 customSelect.classList.add("has-selection"); 4696 } else { 4697 customSelect.classList.remove("has-selection"); 4698 } 4699 } else { 4700 customSelect.classList.remove("has-selection"); 4701 customSelectToggle.classList.add("is-placeholder"); 4702 } 4703 }; 4704 const customSelect = originalSelect => { 4705 const customSelect = createCustomSelect(originalSelect); 4706 originalSelect.insertAdjacentElement('afterend', customSelect); 4707 return customSelect; 4708 }; 4709 const resetCustomSelect = originalSelect => { 4710 const customSelectEl = originalSelect.nextElementSibling; 4711 const customSelectToggle = customSelectEl?.querySelector('.custom-select-toggle'); 4712 const customSelectContent = customSelectEl?.querySelector('.custom-select-content'); 4713 if (!customSelectToggle || !customSelectContent) return; 4714 const placeholderOption = originalSelect.querySelector("[data-label]"); 4715 const placeholderText = placeholderOption?.dataset.label || originalSelect.querySelector("option")?.textContent || "Select"; 4716 customSelectContent.querySelectorAll('.custom-select-item').forEach(item => { 4717 item.classList.remove('is-selected'); 4718 item.setAttribute('aria-selected', 'false'); 4719 }); 4720 originalSelect.querySelectorAll('option').forEach(opt => opt.selected = false); 4721 customSelectToggle.innerHTML = placeholderText; 4722 customSelectToggle.classList.add('is-placeholder'); 4723 const customSelectWrapper = customSelectEl.querySelector('.custom-select'); 4724 if (customSelectWrapper) { 4725 customSelectWrapper.classList.remove('has-selection'); 4726 } 4727 }; 4728 const section = document.getElementById(sectionDomId); 4729 const closeBtn = section.querySelector(".js-close-btn"); 4730 const connectBtn = section.querySelector(".js-btn-connect"); 4731 const popUp = section.querySelector(".js-pop-up"); 4732 const btnHolder = section.querySelector(".js-btn-holder"); 4733 const form = section.querySelector(".js-form"); 4734 const successMessage = section.querySelector(".js-success"); 4735 const redirectLink = section.querySelector(".js-redirect-link"); 4736 function setHttp(link) { 4737 if (link.search(/^(http[s]?\:\/\/|\/)/) == -1) { 4738 link = "https://" + link; 4739 } 4740 return link; 4741 } 4742 function redirectPage(link) { 4743 if (link) { 4744 window.location.href = setHttp(link.getAttribute("href")); 4745 } 4746 } 4747 const selects = document.querySelectorAll(".floating-contact-button select.js-select"); 4748 selects.forEach(function (el) { 4749 customSelect(el); 4750 }); 4751 const inputName = form.querySelector('.js-input-name'); 4752 inputName.addEventListener('keyup', function () { 4753 if (this.value.replaceAll(/\d/g, "").trim().split(" ").length < 2 || this.value.replaceAll(/\d/g, "").trim() === "") { 4754 this.setCustomValidity("Please input your first name and last name."); 4755 } else { 4756 this.setCustomValidity(""); 4757 } 4758 }); 4759 function showSuccessMessage() { 4760 successMessage.style.display = "block"; 4761 form.style.display = "none"; 4762 } 4763 form.addEventListener("formsubmitted", showSuccessMessage); 4764 form.addEventListener("reset", function () { 4765 showSuccessMessage(); 4766 redirectPage(redirectLink); 4767 }); 4768 window.addEventListener("scroll", function () { 4769 if (window.scrollY >= 150 && window.getComputedStyle(popUp).display !== "block") btnHolder.classList.add("floating-contact-button__btn-holder--visible");else btnHolder.classList.remove("floating-contact-button__btn-holder--visible"); 4770 }); 4771 closeBtn.addEventListener("click", function () { 4772 popUp.style.display = "none"; 4773 btnHolder.classList.add("floating-contact-button__btn-holder--visible"); 4774 }); 4775 connectBtn.addEventListener("click", function () { 4776 popUp.style.display = "block"; 4777 btnHolder.classList.remove("floating-contact-button__btn-holder--visible"); 4778 }); 4779})('global-mobile-contact'); 4780} catch(e) { 4781console.log(e); 4782} 4783 4784 try { 4785(function init(sectionDomId) { 4786 const section = document.getElementById(sectionDomId); 4787 const slider = section.querySelector('.js-slider'); 4788 const slides = section.querySelectorAll('.js-item'); 4789 const sliderNav = section.querySelector('.js-slider-nav'); 4790 const arrowBtnNext = section.querySelector('.js-arrow--next'); 4791 const arrowBtnPrev = section.querySelector('.js-arrow--prev'); 4792 const currentSlideNum = section.querySelector('.js-number'); 4793 const video = section.querySelectorAll('video'); 4794 const videoWrap = section.querySelector('.full-screen-video-component > .video-wrapper'); 4795 if (videoWrap) { 4796 video.forEach(function (v) { 4797 if (v.readyState > 0) { 4798 videoWrap.classList.add('playing'); 4799 } else { 4800 v.addEventListener('canplay', function () { 4801 videoWrap.classList.add('playing'); 4802 }, { 4803 once: true 4804 }); 4805 } 4806 }); 4807 } 4808 if (video.length) { 4809 section.querySelector('.js-sound').style.display = 'block'; 4810 section.querySelector('.js-sound').addEventListener('click', function (evt) { 4811 event.preventDefault(); 4812 const isMuted = Array.from(video).every(v => v.muted); 4813 if (isMuted) { 4814 section.querySelector('.js-sound-icon').style.display = 'inline'; 4815 section.querySelector('.js-mute-icon').style.display = 'none'; 4816 } else { 4817 section.querySelector('.js-sound-icon').style.display = 'none'; 4818 section.querySelector('.js-mute-icon').style.display = 'inline'; 4819 } 4820 video.forEach(function (v) { 4821 v.muted = !v.muted; 4822 }); 4823 }); 4824 function muteUponHide() { 4825 const videoDisplay = window.getComputedStyle(section.querySelector('.video-wrapper .hidable')).display; 4826 if (videoDisplay === 'none') { 4827 video.forEach(function (v) { 4828 v.muted = true; 4829 }); 4830 section.querySelector('.muted').style.display = 'inline'; 4831 section.querySelector('.unmuted').style.display = 'none'; 4832 } 4833 } 4834 const debouncedMute = window.luxuryPresence.debounce(muteUponHide, 200); 4835 window.addEventListener('resize', debouncedMute); 4836 } 4837 var splide1 = new Splide(slider, { 4838 rewind: true,
4839 arrows: false, 4840 type: 'fade', 4841 clones: 1, 4842 speed: 1000, 4843 pagination: false, 4844 breakpoints: { 4845 560: { 4846 arrows: false 4847 } 4848 } 4849 }); 4850 var splide = new Splide(sliderNav, { 4851 rewind: true, 4852 arrows: false, 4853 pagination: false, 4854 type: 'fade', 4855 speed: 1000, 4856 breakpoints: { 4857 560: { 4858 arrows: false 4859 } 4860 } 4861 }); 4862 splide1.mount(); 4863 splide.mount(); 4864 var autoAdvanceTimer = null; 4865 function getSlideDuration(index) { 4866 var slide = slides[index]; 4867 if (!slide) return 6000; 4868 var val = parseFloat(slide.dataset.duration); 4869 return (val > 0 ? val : 6) * 1000; 4870 } 4871 function startAutoAdvance() { 4872 clearTimeout(autoAdvanceTimer); 4873 if (slides.length <= 1) return; 4874 autoAdvanceTimer = setTimeout(function () { 4875 splide1.go('+1'); 4876 splide.go('+1'); 4877 currentSlideNum.innerHTML = splide.index + 1; 4878 startAutoAdvance(); 4879 }, getSlideDuration(splide1.index)); 4880 } 4881 startAutoAdvance(); 4882 if (slides.length > 1) { 4883 arrowBtnNext.addEventListener('click', e => { 4884 splide.go('+1'); 4885 splide1.go('+1'); 4886 currentSlideNum.innerHTML = splide.index + 1; 4887 startAutoAdvance(); 4888 }); 4889 arrowBtnPrev.addEventListener('click', e => { 4890 splide.go('-1'); 4891 splide1.go('-1'); 4892 currentSlideNum.innerHTML = splide.index + 1; 4893 startAutoAdvance(); 4894 }); 4895 } 4896 window.luxuryPresence.mapApiLoader.load().then(() => { 4897 const searchWrapper = section.querySelector('.js-search-wrapper');
4898 if (!searchWrapper) { 4899 return; 4900 } 4901 const searchMls = searchWrapper.dataset.searchMls === 'true'; 4902 const searchProperties = searchWrapper.dataset.searchProperties === 'true'; 4903 const selectedCountries = searchWrapper.dataset.locations; 4904 const showNeighborhoodNames = searchWrapper.dataset.showNeighborhoodNames === 'true'; 4905 const searchPlaces = searchMls; 4906 const showNeighborhoods = searchMls; 4907 const searchNearEnabled = searchMls; 4908 const searchInput = section.querySelector('.js-search-input'); 4909 const searchResults = section.querySelector('.js-search-results'); 4910 const resultsContainer = section.querySelector('.js-results-container'); 4911 const loader = section.querySelector('.js-search-in-progress'); 4912 const predefined = section.querySelector('.js-predefined-links'); 4913 const searchBtn = section.querySelector('.js-search-button'); 4914 const leaseFalseButton = section.querySelector('.jsLeaseFalse'); 4915 const leaseTrueButton = section.querySelector('.jsLeaseTrue'); 4916 const nextSection = section.nextElementSibling; 4917 const fixZIndex = nextSection && nextSection.style && parseInt(nextSection.style.zIndex) || 1; 4918 const searchDelay = 300; 4919 const maxPlaces = 3; 4920 const maxMls = 5; 4921 const leaseFilter = leaseFalseButton && leaseTrueButton; 4922 const service = new google.maps.places.AutocompleteService(); 4923 const geocoder = new google.maps.Geocoder(); 4924 var keyword; 4925 var leasePropertyState = false; 4926 var leasePropertySearched; 4927 var searchActive = false; 4928 var isLoading = false; 4929 function showSearchResults() { 4930 searchActive = true; 4931 updateSearchDisplay(); 4932 } 4933 function hideSearchResults() { 4934 searchActive = false; 4935 updateSearchDisplay(); 4936 } 4937 function showLoading() { 4938 isLoading = true; 4939 updateSearchDisplay(); 4940 } 4941 function hideLoading() { 4942 isLoading = false; 4943 updateSearchDisplay(); 4944 } 4945 function updateSearchDisplay() { 4946 if (leaseFilter) { 4947 if (leasePropertyState) { 4948 leaseTrueButton.classList.add('active'); 4949 leaseFalseButton.classList.remove('active'); 4950 } else { 4951 leaseFalseButton.classList.add('active'); 4952 leaseTrueButton.classList.remove('active'); 4953 } 4954 } 4955 if (!searchActive) { 4956 searchResults.classList.remove('show'); 4957 searchResults.style.height = '0'; 4958 if (fixZIndex) { 4959 section.style.zIndex = ''; 4960 } 4961 return; 4962 } 4963 var hasResults = !!resultsContainer.innerHTML.trim(); 4964 var hasPredefined = predefined.querySelectorAll('a:not(.not-processed)').length > 0; 4965 if (hasResults) { 4966 predefined.classList.add('hide'); 4967 loader.classList.add('hide'); 4968 resultsContainer.classList.remove('hide'); 4969 } else if (isLoading) { 4970 resultsContainer.classList.add('hide'); 4971 predefined.classList.add('hide'); 4972 loader.classList.remove('hide'); 4973 } else if (hasPredefined) { 4974 resultsContainer.classList.add('hide'); 4975 loader.classList.add('hide'); 4976 predefined.classList.remove('hide'); 4977 } else { 4978 resultsContainer.classList.add('hide'); 4979 loader.classList.add('hide'); 4980 predefined.classList.add('hide'); 4981 } 4982 var height = 0; 4983 height += predefined.getBoundingClientRect().height; 4984 height += resultsContainer.getBoundingClientRect().height; 4985 height += loader.getBoundingClientRect().height; 4986 if (height > 0) { 4987 if (fixZIndex) { 4988 section.style.zIndex = `${fixZIndex + 1}`; 4989 } 4990 searchResults.classList.add('show'); 4991 } else { 4992 if (fixZIndex) { 4993 section.style.zIndex = ''; 4994 } 4995 searchResults.classList.remove('show'); 4996 } 4997 searchResults.style.height = height + 'px'; 4998 } 4999 function clearSelection() { 5000 document.querySelectorAll('.selected-link').forEach(el => el.classList.remove('selected-link')); 5001 } 5002 function moveSelection(up) { 5003 const cont = resultsContainer.innerHTML.trim() ? resultsContainer : predefined; 5004 var links = cont.querySelectorAll('.js-results-link'); 5005 if (!links.length) { 5006 return; 5007 } 5008 var idx = -1; 5009 var idx = -1; 5010 links.forEach((link, i) => { 5011 if (idx === -1 && this.classList.contains('.selected-link')) { 5012 idx = i; 5013 } 5014 }); 5015 var newIdx; 5016 if (up) { 5017 newIdx = idx - 1; 5018 if (newIdx < 0) { 5019 newIdx = links.length - 1; 5020 } 5021 } else { 5022 newIdx = idx + 1; 5023 if (newIdx > links.length - 1) { 5024 newIdx = 0; 5025 } 5026 } 5027 if (newIdx !== idx) { 5028 document.querySelectorAll('.selected-link').forEach(el => el.classList.remove('selected-link')); 5029 links[newIdx].classList.add('selected-link'); 5030 } 5031 } 5032 var newSearchTimer; 5033 function inputChanged(ev) { 5034 if (ev.which === 38) { 5035 ev.preventDefault(); 5036 moveSelection(true); 5037 return false;
5038 } 5039 if (ev.which === 40) { 5040 ev.preventDefault(); 5041 moveSelection(); 5042 return false; 5043 } 5044 if (ev.which === 13) { 5045 lnk = searchResults.querySelectorAll('.selected-link'); 5046 if (lnk.length) { 5047 lnk[0].click(); 5048 hideSearchResults(); 5049 } else { 5050 searchBtn.click(); 5051 } 5052 } 5053 window.clearTimeout(newSearchTimer); 5054 newSearchTimer = window.setTimeout(startSearch, searchDelay); 5055 } 5056 function startSearch() { 5057 const term = searchInput.value; 5058 if (term === keyword && leasePropertySearched === leasePropertyState) { 5059 return; 5060 } 5061 leasePropertySearched = leasePropertyState; 5062 keyword = term; 5063 if (term) { 5064 doSearch(term, leasePropertySearched); 5065 } else { 5066 setResults(null); 5067 } 5068 } 5069 function mlsSearch(term, leaseProperty) { 5070 if (!leaseFilter) { 5071 return window.luxuryPresence.getMLSAutocomplete(term); 5072 } 5073 var query = { 5074 omnibox: term, 5075 limit: maxMls 5076 }; 5077 if (leaseFilter && leaseProperty) { 5078 query.lease_property = true; 5079 } 5080 return superagent.get(window.location.protocol + '//' + window.location.host + '/home-search/listings.json').query(query).then(function (res) { 5081 if (!Array.isArray(res.body)) { 5082 return []; 5083 } 5084 return res.body.map(function (item) { 5085 return { 5086 id: item.id, 5087 display_address: [item.address_1, item.city, [item.state, item.postal_code].filter(function (i) { 5088 return i; 5089 }).join(' ')].filter(function (i) { 5090 return i; 5091 }).join(', ') 5092 }; 5093 }); 5094 }, function (e) { 5095 console.log(e); 5096 return []; 5097 }); 5098 } 5099 function resolveGeoBounds(placeId, description, terms) { 5100 return new Promise(function (resolve, reject) { 5101 geocoder.geocode({ 5102 'placeId': placeId 5103 }, function (results, status) { 5104 if (status != 'OK') { 5105 return resolve(null); 5106 } 5107 var result = results[0]; 5108 var bounds = new google.maps.LatLngBounds();
5109 bounds.extend(result.geometry.viewport.getSouthWest()); 5110 bounds.extend(result.geometry.viewport.getNorthEast()); 5111 result.geometry.bounds = bounds.toJSON(); 5112 var placeUrl = window.luxuryPresence.makeMlsLink(result); 5113 return resolve({ 5114 placeUrl: placeUrl, 5115 description: description, 5116 cityName: terms[0].value, 5117 stateName: terms[1].value 5118 }); 5119 }); 5120 }); 5121 } 5122 function addRestrictions(request) { 5123 if (selectedCountries === 'Worldwide') { 5124 return request; 5125 } 5126 if (selectedCountries === 'US & Canada') { 5127 request.componentRestrictions = { 5128 country: ['us', 'ca'] 5129 }; 5130 return request; 5131 } 5132 request.componentRestrictions = { 5133 country: 'us' 5134 }; 5135 return request; 5136 } 5137 function resolveAutocomplete(term, deeper) { 5138 var request = addRestrictions({ 5139 input: term, 5140 types: deeper ? ['geocode'] : ['(regions)'], 5141 limit: 1 5142 }); 5143 return new Promise(function (resolve, reject) { 5144 service.getPlacePredictions(request, function (results, status) { 5145 if (status !== google.maps.places.PlacesServiceStatus.OK) { 5146 resolve(null); 5147 return; 5148 } 5149 if (!Array.isArray(results)) { 5150 resolve(null); 5151 return; 5152 } 5153 if (deeper) { 5154 var allowedTypes = { 5155 'neighborhood': true, 5156 'administrative_area_level_3': true, 5157 'administrative_area_level_4': true, 5158 'administrative_area_level_5': true, 5159 'sublocality_level_1': true, 5160 'sublocality_level_2': true, 5161 'sublocality_level_3': true 5162 }; 5163 results = results.filter(function (res) { 5164 return res.types.find(t => allowedTypes[t]); 5165 }); 5166 } 5167 if (!results.length) { 5168 resolve(null); 5169 return; 5170 } 5171 resolve(results); 5172 }); 5173 }); 5174 } 5175 var placesResult = {}; 5176 function placesSearch(term, ignoreInput) { 5177 if (placesResult.term !== term) { 5178 placesResult = { 5179 term: term, 5180 result: resolveAutocomplete(term).then(function (results) { 5181 if (!ignoreInput && term !== keyword) { 5182 return null; 5183 } 5184 if (ignoreInput && !results) { 5185 return resolveAutocomplete(term, true); 5186 } 5187 return results; 5188 }).then(function (results) { 5189 if (!ignoreInput && term !== keyword) { 5190 return []; 5191 } 5192 if (!results) { 5193 return []; 5194 } 5195 var geoResultPromises = results.map(function (result) { 5196 return resolveGeoBounds(result.place_id, result.description, result.terms); 5197 }); 5198 return Promise.all(geoResultPromises).then(function (geoLinks) { 5199 return geoLinks.filter(function (i) { 5200 return i; 5201 }).slice(0, maxPlaces); 5202 }); 5203 }) 5204 }; 5205 } 5206 return placesResult.result; 5207 } 5208 function propertiesSearch(term, leaseProperty) { 5209 var payload = { 5210 companyId: window.luxuryPresence.defaults.companyId, 5211 search: term, 5212 offset: 0, 5213 limit: 6, 5214 statusIds: ["5f528253-abb7-484e-95c3-330269ac1105", "959c11cf-8655-4f91-874c-292b0ab7ea6b", "a0012964-4f51-4430-abf8-6547c5ab6441", "df04ccbe-4621-4140-a504-ee1a17430bb7", "88b4ace6-f39b-4b25-a051-8f6dba976833", "96031d77-bbe5-4de3-90d8-1e4e70de8ca8"] 5215 }; 5216 if (leaseFilter) { 5217 payload.leaseProperty = !!leaseProperty; 5218 } 5219 var gqlQuery = 'query ($companyId: String, $search: String, $offset: Int, $limit: Int, $propertyStatusId: [String!], $leaseProperty: Boolean) {properties (companyId: $companyId, search: $search, offset: $offset, limit: $limit, propertyStatusId: $propertyStatusId, leaseProperty: $leaseProperty) {items {id name slug fullAddress privateAddress}}}'; 5220 return superagent.post(window.luxuryPresence.defaults.routerUrl + '/graphql').send({ 5221 query: gqlQuery,
5222 variables: window.luxuryPresence.routerApi.transformVariables('properties', payload) 5223 }).then(function (res) { 5224 var data = res.body.data || {}; 5225 var page = data.properties || {}; 5226 return page.items || []; 5227 }, function (err) { 5228 return []; 5229 }); 5230 } 5231 function doSearch(term, leaseProperty) { 5232 showLoading(); 5233 Promise.all([searchMls ? mlsSearch(term, leaseProperty) : [], searchPlaces ? placesSearch(term) : [], searchProperties ? propertiesSearch(term, leaseProperty) : []]).then(function (res) { 5234 if (term !== keyword) { 5235 return; 5236 } 5237 setResults(res[0], res[1], res[2], leaseProperty); 5238 }); 5239 } 5240 function makeResultsBlockHtml(title, links) { 5241 if (!links || !links.length) { 5242 return ''; 5243 } 5244 var html = '<div class="opening-search__results-block js-results-block">'; 5245 html += '<div class="opening-search__results-block-title">'; 5246 if (searchNearEnabled) { 5247 html += '<div class="opening-search__search-near-container"><a class="opening-search__search-near lp-link lp-link--light">Search Near Me</a></div>'; 5248 } 5249 html += '<div class="opening-search__results-title-label">' + title + '</div></div>'; 5250 html += links.join('') + '</div>'; 5251 return html; 5252 } 5253 function setResults(mlsResults, placesResults, propertiesResults, leaseProperty) { 5254 clearSelection(); 5255 hideLoading(); 5256 if (!mlsResults) { 5257 resultsContainer.innerHTML = ''; 5258 updateSearchDisplay(); 5259 return; 5260 } 5261 if (!mlsResults.length && !placesResults.length && !propertiesResults.length) { 5262 resultsContainer.innerHTML = '<div class="nothing-found">No results found</div>'; 5263 updateSearchDisplay(); 5264 return; 5265 } 5266 var propertiesHtml = makeResultsBlockHtml('Featured Properties', propertiesResults.map(function (result) { 5267 return `<a href="/properties/${result.slug}" class="opening-search__results-link js-results-link">${result.privateAddress ? result.name : result.fullAddress}</a>`; 5268 })); 5269 var placesHtml = makeResultsBlockHtml('Locations', placesResults.map(function (result) { 5270 return `<a class="opening-search__results-link js-results-link" href="${result.placeUrl}${leaseProperty ? '&lease_property=true' : ''}&cityName=${result.cityName}&stateName=${result.stateName}">${result.description}</a>`; 5271 })); 5272 var mlsHtml = makeResultsBlockHtml('Address', mlsResults.map(function (result) { 5273 return `<a href="/home-search/listings/${result.id}" class="opening-search__results-link js-results-link">${result.display_address}</a>`; 5274 })); 5275 resultsContainer.innerHTML = propertiesHtml + placesHtml + mlsHtml; 5276 updateSearchDisplay(); 5277 } 5278 function searchBtnClicked() { 5279 var resultsBlockHref = section.querySelector(".js-results-block .js-results-link").getAttribute("href"); 5280 const term = searchInput.value; 5281 if (!term) { 5282 return; 5283 } 5284 if (searchMls) { 5285 try { 5286 var trimmed = term.trim(); 5287 if (/^\d{5}$/.test(trimmed)) { 5288 window.location.href = "/home-search/listings?postalcode=" + trimmed + '&search_type=zip'; 5289 return; 5290 } 5291 } catch (e) { 5292 console.log(e); 5293 } 5294 window.location.href = resultsBlockHref; 5295 return; 5296 } 5297 if (searchProperties) { 5298 window.location.href = "/properties/sale"; 5299 } 5300 } 5301 var neighborhoods = null; 5302 function fetchNeighborhoods() { 5303 var url = window.luxuryPresence.defaults.routerUrl; 5304 var gqlQuery = 'query ($companyId: String, $offset: Int, $limit: Int) {' + 'neighborhoods (companyId: $companyId, offset: $offset, limit: $limit) {items {id, name, mlsLink, googlePlaceData}}}'; 5305 var payload = {}; 5306 payload.offset = 0; 5307 payload.limit = 100; 5308 payload.companyId = window.luxuryPresence.defaults.companyId; 5309 return superagent.post(url + '/graphql').withCredentials().send({ 5310 query: gqlQuery, 5311 variables: payload 5312 }).then(function (res) { 5313 var data = res.body.data && res.body.data.neighborhoods; 5314 neighborhoods = data && data.items || null; 5315 if (neighborhoods && !neighborhoods.length) { 5316 neighborhoods = null; 5317 } 5318 }); 5319 } 5320 function setPredefinedNeighborhoods() { 5321 return fetchNeighborhoods().then(function () { 5322 if (!neighborhoods) { 5323 return; 5324 } 5325 var leaseProperty = leaseFilter && leasePropertyState; 5326 var placesHtml = makeResultsBlockHtml('Locations', neighborhoods.map(function (item) { 5327 return `<a class="opening-search__results-link js-results-link" href="${item.mlsLink}${leaseProperty ? '&lease_property=true' : ''}">${showNeighborhoodNames ? item.name : item.googlePlaceData && item.googlePlaceData.formatted_address || item.name}</a>`; 5328 })); 5329 predefined.innerHTML = placesHtml; 5330 updateSearchDisplay(); 5331 }); 5332 } 5333 if (showNeighborhoods) { 5334 setPredefinedNeighborhoods(); 5335 } 5336 searchInput.addEventListener('focus', showSearchResults); 5337 searchInput.addEventListener('keyup', inputChanged); 5338 searchInput.addEventListener('focus', inputChanged); 5339 searchResults.addEventListener('mouseenter', function (ev) { 5340 if (ev.target.classList.contains('js-results-link')) { 5341 clearSelection(); 5342 } 5343 }, true); 5344 searchBtn.addEventListener('click', searchBtnClicked); 5345 if (leaseFalseButton) leaseFalseButton.addEventListener('click', function () { 5346 if (leasePropertyState) { 5347 leasePropertyState = false;
5348 if (showNeighborhoods) { 5349 setPredefinedNeighborhoods(); 5350 } 5351 updateSearchDisplay(); 5352 setResults(null); 5353 startSearch(); 5354 } 5355 }); 5356 if (leaseTrueButton) leaseTrueButton.addEventListener('click', function () { 5357 if (!leasePropertyState) { 5358 leasePropertyState = true; 5359 if (showNeighborhoods) { 5360 setPredefinedNeighborhoods(); 5361 } 5362 updateSearchDisplay(); 5363 setResults(null); 5364 startSearch(); 5365 } 5366 }); 5367 function outsideClickHandler(e) { 5368 if (searchWrapper.contains(e.target)) { 5369 return; 5370 } 5371 hideSearchResults(); 5372 } 5373 document.addEventListener('click', outsideClickHandler); 5374 updateSearchDisplay(); 5375 }); 5376})('section-c1234c57-c7ef-4bf5-a255-f88b98dbc080', 'undefined'); 5377} catch(e) { 5378console.log(e); 5379} 5380 try { 5381(function init(sectionDomId) { 5382 const section = document.getElementById(sectionDomId); 5383 const statsGrid = section.querySelector('.js-stats-list'); 5384 const statsItemLength = section.querySelectorAll('.js-stats-list-item').length; 5385 const values = section.querySelectorAll(".js-value"); 5386 const arrowsStyle = statsGrid.dataset.arrowsStyle || ''; 5387 new Splide(statsGrid, { 5388 type: statsItemLength > 4 ? 'loop' : 'slide', 5389 cloning: statsItemLength > 4 ? true : false, 5390 gap: statsItemLength > 1 ? '16px' : '0px', 5391 perPage: 4, 5392 perMove: 1, 5393 arrows: statsItemLength > 4 ? true : false, 5394 pagination: false, 5395 classes: { 5396 arrow: 'lp-arrow arrow-box', 5397 prev: `lp-arrow--prev lp-arrow--light ${arrowsStyle}`, 5398 next: `lp-arrow--next lp-arrow--light ${arrowsStyle}` 5399 }, 5400 breakpoints: { 5401 1025: { 5402 type: statsItemLength > 2 ? 'loop' : 'slide', 5403 arrows: statsItemLength > 2 ? true : false, 5404 cloning: statsItemLength > 2 ? true : false, 5405 perPage: 2 5406 }, 5407 769: { 5408 type: statsItemLength > 1 ? 'loop' : 'slide', 5409 arrows: statsItemLength > 1 ? true : false, 5410 cloning: statsItemLength > 1 ? true : false, 5411 perPage: 1 5412 } 5413 } 5414 }).mount(); 5415 if (values.length === 0) return; 5416 const duration = 3000; 5417 const step = 50; 5418 const items = []; 5419 let started = false; 5420 let pos = 0; 5421 function analyze() { 5422 values.forEach(function (el) { 5423 const match = el.textContent.match(/^(\D*)(\d(.*\d)?)(.*)$/); 5424 if (match) { 5425 const str = match[2]; 5426 let frac = 0; 5427 let fSep = ""; 5428 let nmb; 5429 if (!/\..*\./.test(str)) { 5430 const m = str.match(/\.(\d+)$/); 5431 if (m) { 5432 frac = m[1].length; 5433 fSep = "."; 5434 nmb = parseFloat(str.replace(/[^\d\.]/g, "")); 5435 } 5436 } 5437 if (!frac) { 5438 if (!/,.*,/.test(str)) { 5439 const m = str.match(/,(\d+)$/); 5440 if (m) { 5441 frac = m[1].length; 5442 fSep = ","; 5443 nmb = parseFloat(str.replace(",", ".").replace(/[^\d\.]/g, "")); 5444 } 5445 } 5446 } 5447 if (!frac) { 5448 nmb = parseInt(str.replace(/\D/g, "")); 5449 } 5450 items.push({ 5451 el: el, 5452 prefix: match[1] || "", 5453 suffix: match[4] || "", 5454 str: match[2], 5455 nmb, 5456 frac, 5457 fSep 5458 }); 5459 } 5460 }); 5461 if (!items.length) { 5462 started = true; 5463 return; 5464 } 5465 } 5466 function animate() { 5467 if (started) { 5468 return; 5469 } 5470 started = true; 5471 setTimeout(iterate, step); 5472 } 5473 function iterate() { 5474 if (pos >= duration) { 5475 items.forEach(function (item) { 5476 item.el.textContent = item.prefix + item.str + item.suffix; 5477 }); 5478 } else { 5479 items.forEach(function (item) { 5480 const valStr = formatValue(item, pos / duration); 5481 item.el.textContent = item.prefix + valStr + item.suffix; 5482 }); 5483 pos += step; 5484 setTimeout(iterate, step); 5485 } 5486 } 5487 function formatValue(item, val) { 5488 const str = (item.nmb * val).toFixed(item.frac).replace(/\D/, ""); 5489 let i = 0; 5490 let j = 0; 5491 let res = ""; 5492 while (i < item.str.length && j < str.length) { 5493 const c = item.str[item.str.length - i - 1];
5494 const code = c.charCodeAt(0); 5495 if (code >= 48 && code <= 57) { 5496 res = str[str.length - j - 1] + res; 5497 j++; 5498 } else { 5499 res = c + res; 5500 } 5501 i++; 5502 } 5503 return res; 5504 } 5505 function calculateVisibility() { 5506 const windowHeight = window.innerHeight; 5507 const scrollTop = window.pageYOffset || document.documentElement.scrollTop; 5508 const sectionOffsetTop = section.offsetTop; 5509 if (windowHeight + scrollTop >= sectionOffsetTop) { 5510 window.removeEventListener("scroll", calculateVisibility); 5511 animate(); 5512 } 5513 } 5514 analyze(); 5515 if (items.length) { 5516 window.addEventListener("scroll", calculateVisibility); 5517 calculateVisibility(); 5518 } 5519})('section-4e9be597-0c57-4cc1-ad9e-26698df89dc9', 'undefined'); 5520} catch(e) { 5521console.log(e); 5522} 5523 try { 5524(function init(sectionDomId) {})('section-fba75ce4-28b8-44ae-9e59-29052c7ca6c7', 'undefined'); 5525} catch(e) { 5526console.log(e); 5527} 5528 try { 5529(function init(sectionDomId) {})('section-57e3def3-0b54-4364-ba92-3c2da73df25a', 'undefined'); 5530} catch(e) { 5531console.log(e); 5532} 5533 try { 5534(function init(sectionDomId) {})('section-94299c24-639b-4cf2-a15f-710c04b9b187', 'undefined'); 5535} catch(e) { 5536console.log(e); 5537} 5538 try { 5539(function init(sectionDomId) { 5540 const section = document.getElementById(sectionDomId); 5541 const slider = section.querySelector(".js-slider"); 5542 const arrowBtnNext = section.querySelector('.js-arrow--next'); 5543 const arrowBtnPrev = section.querySelector('.js-arrow--prev'); 5544 const collapsibleText = section.querySelectorAll('.js-collapsible-text'); 5545 if (!slider) return; 5546 let itemsAmount; 5547 let timeoutAddAnimation; 5548 let timeoutRemoveAnimation; 5549 let sliderItemsLength = parseInt(slider.dataset.itemsLength) || 0; 5550 const autoplayInterval = Math.max(parseInt(slider.dataset.autoplayInterval) || 5, 1) * 1000; 5551 if (slider.classList.contains('js-two-columns')) { 5552 itemsAmount = 2; 5553 } else if (slider.classList.contains('js-three-columns')) { 5554 itemsAmount = 3; 5555 } else { 5556 itemsAmount = 1; 5557 } 5558 const addCardAnimation = () => { 5559 const notActiveCards = Array.from(slider.querySelectorAll('.splide__slide:not(.is-active)')); 5560 clearTimeout(timeoutAddAnimation); 5561 timeoutAddAnimation = setTimeout(function () { 5562 notActiveCards.forEach(card => { 5563 card.classList.add('not-active'); 5564 }); 5565 }, 0); 5566 }; 5567 const removeCardAnimation = () => { 5568 const allCards = Array.from(slider.querySelectorAll('.splide__slide')); 5569 clearTimeout(timeoutRemoveAnimation); 5570 timeoutRemoveAnimation = setTimeout(function () { 5571 allCards.forEach(card => { 5572 card.classList.remove('not-active'); 5573 }); 5574 }, 0); 5575 }; 5576 var splide = new Splide(slider, { 5577 type: sliderItemsLength > 3 ? 'loop' : 'slide', 5578 perPage: itemsAmount, 5579 perMove: 1, 5580 autoplay: sliderItemsLength > 3 ? true : false, 5581 interval: autoplayInterval, 5582 pauseOnHover: true, 5583 speed: 1000, 5584 arrows: false, 5585 pagination: false, 5586 gap: "16px", 5587 breakpoints: { 5588 1024: { 5589 perPage: 1, 5590 gap: "24px" 5591 } 5592 } 5593 }); 5594 if (arrowBtnNext && arrowBtnPrev) { 5595 arrowBtnNext.addEventListener('click', e => { 5596 splide.go('+1'); 5597 }); 5598 arrowBtnPrev.addEventListener('click', e => { 5599 splide.go('-1'); 5600 }); 5601 } 5602 splide.on('ready', () => { 5603 addCardAnimation(); 5604 }); 5605 splide.mount(); 5606 splide.on('move', () => { 5607 removeCardAnimation(); 5608 const expandedText = section.querySelectorAll('.js-collapsible-text:not(.collapsed)'); 5609 Array.from(expandedText).forEach(el => { 5610 const readMore = el.querySelector('.read-more'); 5611 if (readMore) readMore.click(); 5612 }); 5613 }); 5614 splide.on('moved', () => { 5615 addCardAnimation(); 5616 }); 5617 const collapsibleTexts = document.getElementById(`${sectionDomId}`).getElementsByClassName('js-collapsible-text'); 5618 const createCollapsibleText = node => { 5619 const minCharacters = node.dataset.minCharacters; 5620 const maxCharacters = node.dataset.maxCharacters; 5621 const linkStyle = node.dataset.linkStyle; 5622 node.classList.add("visible"); 5623 const getParagraph = (paragraph, currentLength) => { 5624 let newParagraph = document.createTextNode(""); 5625 const paragraphText = paragraph.textContent; 5626 const start = minCharacters - currentLength; 5627 const end = paragraphText.substring(start).search(/[.!?]/); 5628 newParagraph.textContent = paragraphText.substring(0, start + end + 1); 5629 return newParagraph; 5630 }; 5631 const visibleLength = n => (n.textContent || '').replace(/\s+/g, ' ').trim().length; 5632 const getCollapsedNode = (node, currentLength) => { 5633 let textLen = visibleLength(node); 5634 let newNode; 5635 if (currentLength + textLen < maxCharacters) { 5636 newNode = node.cloneNode(true); 5637 currentLength += textLen; 5638 } else { 5639 newNode = node.cloneNode(false); 5640 let i = 0; 5641 while (currentLength < minCharacters && i < node.childNodes.length) { 5642 let childNode = node.childNodes[i]; 5643 if (childNode.nodeType !== Node.TEXT_NODE) { 5644 const result = getCollapsedNode(childNode, currentLength); 5645 newNode.appendChild(result.node); 5646 currentLength = result.length; 5647 } else { 5648 if (currentLength + childNode.textContent.length > minCharacters) { 5649 let newText; 5650 if (currentLength + childNode.textContent.length < maxCharacters) { 5651 newText = childNode.cloneNode(); 5652 } else { 5653 newText = getParagraph(childNode, currentLength); 5654 } 5655 newNode.appendChild(newText); 5656 currentLength += newText.length; 5657 } else { 5658 let str = childNode.textContent; 5659 if (str.replace(/\s/g, '').length) { 5660 newNode.appendChild(childNode.cloneNode()); 5661 currentLength += childNode.length; 5662 } 5663 } 5664 } 5665 i++; 5666 } 5667 } 5668 return { 5669 node: newNode, 5670 length: currentLength 5671 }; 5672 }; 5673 const createButton = (node, linkStyle) => { 5674 const expandBtn = document.createElement('a'); 5675 expandBtn.classList.add("link"); 5676 expandBtn.classList.add("lp-link"); 5677 expandBtn.classList.add("read-more"); 5678 if (linkStyle) expandBtn.classList.add(linkStyle); 5679 expandBtn.innerHTML = "<span class='read-more__more'>Read More</span><span class='read-more__less'>Read Less</span>"; 5680 expandBtn.addEventListener("click", () => { 5681 const isExpanded = !node.classList.contains('collapsed'); 5682 node.classList.toggle('collapsed'); 5683 if (isExpanded) { 5684 node.scrollIntoView({ 5685 behavior: 'smooth', 5686 block: 'start' 5687 }); 5688 } 5689 }); 5690 return expandBtn; 5691 }; 5692 if (visibleLength(node) > maxCharacters) { 5693 const { 5694 node: collapsedNode 5695 }
5695 = getCollapsedNode(node, 0); 5696 const fullText = document.createElement('div'); 5697 fullText.innerHTML = node.innerHTML; 5698 const shortText = document.createElement('div'); 5699 shortText.innerHTML = collapsedNode.innerHTML; 5700 node.innerHTML = ""; 5701 const textWrap = document.createElement('div'); 5702 textWrap.classList.add("text-wrap"); 5703 textWrap.append(fullText); 5704 textWrap.append(shortText); 5705 node.append(textWrap); 5706 fullText.classList.add("full"); 5707 shortText.classList.add("short"); 5708 node.append(createButton(node, linkStyle)); 5709 node.classList.add("collapsible"); 5710 node.classList.add("collapsed"); 5711 const updateHeights = () => { 5712 node.style.setProperty('--fullHeight', fullText.offsetHeight + "px"); 5713 node.style.setProperty('--shortHeight', shortText.offsetHeight + "px"); 5714 }; 5715 updateHeights(); 5716 window.addEventListener('resize', updateHeights); 5717 if (document.fonts && document.fonts.ready) { 5718 document.fonts.ready.then(updateHeights); 5719 } 5720 if (document.readyState === 'complete') { 5721 updateHeights(); 5722 } else { 5723 window.addEventListener('load', updateHeights, { 5724 once: true 5725 }); 5726 } 5727 textWrap.querySelectorAll('img').forEach(img => { 5728 if (!img.complete) { 5729 img.addEventListener('load', updateHeights, { 5730 once: true 5731 }); 5732 img.addEventListener('error', updateHeights, { 5733 once: true 5734 }); 5735 } 5736 }); 5737 } 5738 }; 5739 [].forEach.call(collapsibleTexts, createCollapsibleText); 5740 ; 5741})('section-c8a0ad1c-794d-403e-bb62-eb33fbb26159', JSON.parse("{\"resource\":\"testimonials\",\"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\":\"6382308c-8bfc-4993-9f82-aceab30cdb9f\",\"usePageResource\":false,\"sectionIndex\":6}")); 5742} catch(e) { 5743console.log(e); 5744} 5745 try { 5746(function init(sectionDomId) { 5747 const section = document.getElementById(sectionDomId); 5748 const cardDetails = section.querySelectorAll('.js-card__details'); 5749 const slider = section.querySelector('.js-slider'); 5750 const cards = section.querySelectorAll('.js-card'); 5751 const arrowBtnNext = section.querySelector('.js-arrow--next'); 5752 const arrowBtnPrev = section.querySelector('.js-arrow--prev'); 5753 const updateFeaturesHeight = () => { 5754 cardDetails.forEach(element => { 5755 const cardFeatures = element.querySelector('.js-card__features'); 5756 if (element && cardFeatures) element.style.setProperty('--features-height', `${cardFeatures.offsetHeight}px`); 5757 }); 5758 }; 5759 if (cardDetails.length > 0) updateFeaturesHeight(); 5760 const splide = new Splide(slider, { 5761 rewind: true, 5762 autoHeight: true, 5763 arrows: false, 5764 type: 'fade', 5765 clones: 1, 5766 pagination: false, 5767 grid: { 5768 rows: 3, 5769 cols: 1 5770 }, 5771 breakpoints: { 5772 560: { 5773 grid: false 5774 } 5775 } 5776 }); 5777 if (cards.length > 3) { 5778 arrowBtnNext.addEventListener('click', e => { 5779 splide.go('+1'); 5780 }); 5781 arrowBtnPrev.addEventListener('click', e => { 5782 splide.go('-1'); 5783 }); 5784 } 5785 splide.mount({ 5786 Grid: window.splide.Extensions.Grid 5787 }); 5788})('section-9e23a9b4-f0cc-44ed-89e4-471e9a166f0f', JSON.parse("{\"resource\":\"properties\",\"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\":\"6382308c-8bfc-4993-9f82-aceab30cdb9f\",\"usePageResource\":false,\"sectionIndex\":7}")); 5789} catch(e) { 5790console.log(e); 5791} 5792 try { 5793(function init(sectionDomId) { 5794 const section = document.getElementById(sectionDomId); 5795 const showCats = section.querySelector('.js-main-container').dataset.showCats === 'true'; 5796 const cardLayout = section.querySelector('.js-main-container').dataset.cardLayout;
5797 const fullWidthSlider = section.querySelector('.js-main-container').dataset.fullWidthSlider === 'true'; 5798 const imagesSlider = section.querySelector('.js-images-slider'); 5799 const listSlider = section.querySelector('.js-list-slider'); 5800 const prevArrow = section.querySelector('.lp-arrow--prev'); 5801 const nextArrow = section.querySelector('.lp-arrow--next'); 5802 const tabsSlider = section.querySelector('.js-tabs-slider'); 5803 const tabs = section.querySelector('.js-tabs'); 5804 const listItems = listSlider.querySelectorAll('.js-list-item'); 5805 const cardItems = imagesSlider.querySelectorAll('.js-card'); 5806 const arrows = section.querySelector('.js-arrows'); 5807 const cards = cardLayout === "Multiple" ? fullWidthSlider ? 3 : 2.3 : 1; 5808 var mainSlider = new Splide(imagesSlider, { 5809 type: cardLayout === "Multiple" ? 'loop' : 'fade', 5810 clones: 2, 5811 perPage: cards, 5812 perMove: 1, 5813 rewind: true, 5814 autoHeight: true, 5815 height: 'auto', 5816 pagination: false, 5817 arrows: false, 5818 breakpoints: { 5819 1024: { 5820 perPage: cardLayout === "Multiple" ? 2.3 : 1 5821 }, 5822 560: { 5823 perPage: cardLayout === "Multiple" ? 1.3 : 1 5824 } 5825 } 5826 }).mount(); 5827 prevArrow.addEventListener('click', function () { 5828 mainSlider.go('<'); 5829 }); 5830 nextArrow.addEventListener('click', function () { 5831 mainSlider.go('>'); 5832 }); 5833 var thumbnailSlider = new Splide(listSlider, { 5834 fixedHeight: 65, 5835 height: 455, 5836 rewind: true, 5837 pagination: false, 5838 cover: true, 5839 isNavigation: true, 5840 direction: 'ttb', 5841 arrows: false, 5842 perPage: 7, 5843 breakpoints: { 5844 1025: { 5845 perPage: 5, 5846 perMove: 1, 5847 height: 'auto', 5848 direction: 'ltr', 5849 autoWidth: true, 5850 fixedHeight: 'auto' 5851 } 5852 } 5853 }).mount(); 5854 mainSlider.sync(thumbnailSlider); 5855 if (!showCats) return; 5856 const categories = new Set(); 5857 Array.from(listSlider.querySelectorAll('.js-list-item')).forEac
5857h(item => { 5858 if (item.dataset.tags.length > 0) { 5859 item.dataset.tags.split(',').forEach(cat => categories.add(cat)); 5860 } 5861 }); 5862 let cats = ''; 5863 Array.from(categories).forEach(cat => { 5864 cats += `<li class="neighborhoods-slider__tab splide__slide js-tab" data-category="${cat}">${cat}</li>`; 5865 }); 5866 tabs.innerHTML = cats; 5867 if (categories.size > 0) { 5868 var catsSlider = new Splide(tabsSlider, { 5869 pagination: false, 5870 arrows: false, 5871 perPage: 5, 5872 perMove: 1, 5873 autoWidth: true, 5874 fixedHeight: 'auto', 5875 breakpoints: { 5876 561: { 5877 perPage: 3, 5878 perMove: 1 5879 } 5880 } 5881 }).mount(); 5882 const { 5883 Slides: thumbnailSlides 5884 } = thumbnailSlider.Components; 5885 const { 5886 Slides: mainSlides 5887 } = mainSlider.Components; 5888 tabs.addEventListener('click', function (e) { 5889 let filteredSlides = []; 5890 let filteredCards = []; 5891 Array.from(section.querySelectorAll('.js-tab')).forEach(tab => { 5892 tab.classList.remove('neighborhoods-slider__tab--active'); 5893 }); 5894 if (e.target.classList.contains('js-tab')) { 5895 e.target.classList.add('neighborhoods-slider__tab--active'); 5896 const cat = e.target.dataset.category; 5897 filteredSlides = Array.from(listItems).filter(item => { 5898 if (item.dataset.tags.includes(cat)) return item; 5899 }); 5900 filteredCards = Array.from(cardItems).filter(item => { 5901 if (item.dataset.tags.includes(cat)) return item; 5902 }); 5903 thumbnailSlides.remove('.js-list-item'); 5904 mainSlides.remove('.js-card'); 5905 mainSlides.add(filteredCards); 5906 if (filteredCards.length < 2) { 5907 mainSlider.options = { 5908 clones: 0 5909 }; 5910 imagesSlider.querySelector('.js-card')?.classList.add('neighborhoods-slider__card--single'); 5911 } else { 5912 mainSlider.options = { 5913 clones: 2 5914 }; 5915 } 5916 thumbnailSlides.add(filteredSlides); 5917 if (filteredSlides.length < 2) { 5918 arrows.setAttribute('hidden', true); 5919 } else { 5920 arrows.removeAttribute('hidden', false); 5921 } 5922 } 5923 }); 5924 section.querySelector('.js-tab').click(); 5925 } 5926})('section-fb7349af-e14f-467a-9daf-07d33ead2bb9', JSON.parse("{\"resource\":\"neighborhoods\",\"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\":\"6382308c-8bfc-4993-9f82-aceab30cdb9f\",\"usePageResource\":false,\"sectionIndex\":8}")); 5927} catch(e) { 5928console.log(e); 5929} 5930 try { 5931(function init(sectionDomId) { 5932 const _section = document.getElementById(sectionDomId); 5933 const homeValuation = _section.querySelector('.js-home-valuation'); 5934 const titleColor = getComputedStyle(homeValuation).getPropertyValue('--titleColor'); 5935 const mapSelector = _section.querySelector('.js-home-valuation-map'); 5936 const inputAddress = _section.querySelector('.js-address'); 5937 const btnContinue = _section.querySelector('.js-btn'); 5938 const form = _section.querySelector('.js-form'); 5939 const message = _section.querySelector('.js-message'); 5940 const timeFrameSelect = _section.querySelector('.js-time-frame'); 5941 const redirectLink = _section.querySelector('.js-redirect-link'); 5942 const defaultMapCenter = { 5943 lat: 34.030909, 5944 lng: -118.463927 5945 }; 5946 const addRedirectToForm = () => { 5947 const redirectLink = document.getElementById(`${sectionDomId}`).querySelector('.js-redirect-link'); 5948 const form = document.getElementById(`${sectionDomId}`).querySelector('.js-form'); 5949 function redirectPage(link) { 5950 if (link) { 5951 const rawHref = link.getAttribute('href'); 5952 link.setAttribute('href', setHttp(rawHref)); 5953 link.click(); 5954 } 5955 } 5956 function setHttp(link) { 5957 if (link.search(/^http[s]?\:\/\/|\//) == -1) { 5958 link = 'http://' + link; 5959 } 5960 return link; 5961 } 5962 form.addEventListener("reset", function () { 5963 redirectPage(redirectLink); 5964 }); 5965 }; 5966 addRedirectToForm(); 5967 ; 5968 const customDropdownHTML = `
5969 <div class="custom-select" role="presentation"> 5970 <button class="custom-select-toggle" type="button" aria-haspopup="true" aria-expanded="false" role="combobox"></button> 5971 <div class="custom-select-menu"><div class="custom-select-content"></div></div> 5972 </div>`; 5973 const hideOriginalSelect = originalSelect => { 5974 originalSelect.classList.remove(...originalSelect.classList); 5975 originalSelect.classList.add("sr-only"); 5976 }; 5977 const openCustomSelect = customSelectToggle => { 5978 let customSelectMenu = customSelectToggle.nextElementSibling; 5979 customSelectMenu.classList.add("open"); 5980 customSelectToggle.classList.add("open"); 5981 customSelectToggle.ariaExpanded = true; 5982 }; 5983 const closeCustomSelect = customSelectToggle => { 5984 let customSelectMenu = customSelectToggle.nextElementSibling; 5985 customSelectMenu.classList.remove("open"); 5986 customSelectToggle.classList.remove("open"); 5987 customSelectToggle.ariaExpanded = false; 5988 }; 5989 const inheritAttributes = (originalSelect, customSelectToggle, customSelectMenu) => { 5990 customSelectToggle.className = customSelectToggle.className.concat(' ', originalSelect.className); 5991 customSelectToggle.id = originalSelect.getAttribute("id") + "custom"; 5992 customSelectToggle.dataset.name = originalSelect.getAttribute("name"); 5993 customSelectMenu.setAttribute("aria-labelledby", customSelectToggle.id); 5994 }; 5995 const initiateQuerySelectors = customSelect => {
5996 let customSelectToggle = customSelect.querySelector('.custom-select-toggle'), 5997 customSelectMenu = customSelect.querySelector('.custom-select-menu'), 5998 customSelectContent = customSelect.querySelector('.custom-select-content'); 5999 return { 6000 customSelectToggle, 6001 customSelectMenu, 6002 customSelectContent 6003 }; 6004 }; 6005 const initiateToggleText = (originalSelect, customSelectToggle) => { 6006 const dataLabelOption = originalSelect.querySelector("[data-label]"); 6007 const isMultiple = originalSelect?.multiple; 6008 if (!isMultiple) { 6009 const toggleText = dataLabelOption && dataLabelOption.dataset.label || originalSelect.querySelector(":checked")?.textContent || originalSelect.querySelector("option")?.textContent; 6010 customSelectToggle.classList.add("is-placeholder"); 6011 customSelectToggle.innerHTML = toggleText; 6012 } else { 6013 const placeholderText = dataLabelOption && dataLabelOption.dataset.label || originalSelect.querySelector("option")?.textContent || "Select"; 6014 const selectedOptions = Array.from(originalSelect.querySelectorAll("option:checked")).filter(opt => opt.value !== ""); 6015 if (selectedOptions.length === 0) { 6016 customSelectToggle.innerHTML = placeholderText; 6017 customSelectToggle.classList.add("is-placeholder"); 6018 } else if (selectedOptions.length === 1) { 6019 customSelectToggle.innerHTML = selectedOptions[0].textContent; 6020 customSelectToggle.classList.remove("is-placeholder"); 6021 } else { 6022 customSelectToggle.innerHTML = `${selectedOptions[0].textContent} +${selectedOptions.length - 1}`; 6023 customSelectToggle.classList.remove("is-placeholder"); 6024 } 6025 } 6026 }; 6027 const convertOptionsToButtons = (originalSelect, customSelectContent) => { 6028 originalSelect.querySelectorAll('option').forEach(option => { 6029 const button = createButtonFromOption(option); 6030 customSelectContent.appendChild(button); 6031 }); 6032 }; 6033 const createButtonFromOption = option => { 6034 let button = document.createElement('button'); 6035 button.className = "custom-select-item"; 6036 button.setAttribute("role", "option"); 6037 button.setAttribute("type", "button"); 6038 button.textContent = option.textContent; 6039 button.setAttribute('value', option.value); 6040 if (option.disabled) { 6041 button.setAttribute("disabled", "true"); 6042 } 6043 if (option.selected && option.value !== "") { 6044 button.classList.add("is-selected"); 6045 button.setAttribute("aria-selected", "true"); 6046 } 6047 return button; 6048 }; 6049 const initiateEventListeners = (originalSelect, customSelectToggle, customSelectMenu) => { 6050 const isMultiple = originalSelect?.multiple; 6051 originalSelect.addEventListener("focus", function () { 6052 openCustomSelect(customSelectToggle); 6053 customSelectToggle.focus(); 6054 }); 6055 customSelectToggle.addEventListener("click", function () { 6056 if (customSelectToggle.getAttribute("aria-expanded") === "true") { 6057 closeCustomSelect(customSelectToggle); 6058 } else { 6059 openCustomSelect(customSelectToggle); 6060 } 6061 }); 6062 customSelectMenu.addEventListener("click", function (event) { 6063 if (event.target.classList.contains('custom-select-item')) { 6064 const clickedValue = event.target.value; 6065 const clickedOption = originalSelect.querySelector(`option[value="${clickedValue}"]`); 6066 const placeholderOption = originalSelect.querySelector("[data-label]"); 6067 const placeholderText = placeholderOption?.dataset.label || originalSelect.querySelector("option")?.textContent || "Select"; 6068 if (!isMultiple) { 6069 let opts = customSelectMenu.querySelectorAll(".is-selected"); 6070 [].forEach.call(opts, function (el) { 6071 el.classList.remove("is-selected"); 6072 }); 6073 event.target.classList.add("is-selected"); 6074 clickedOption.selected = true; 6075 customSelectToggle.innerHTML = clickedOption.textContent; 6076 if (clickedValue === "" || event.target.classList.contains("is-placeholder")) { 6077 customSelectToggle.classList.add("is-placeholder"); 6078 } else { 6079 customSelectToggle.classList.remove("is-placeholder"); 6080 } 6081 let changeEvent = new Event('change', { 6082 bubbles: true 6083 }); 6084 originalSelect.dispatchEvent(changeEvent); 6085 closeCustomSelect(customSelectToggle); 6086 } else { 6087 if (clickedValue === "") { 6088 customSelectMenu.querySelectorAll(".is-selected").forEach(el => { 6089 el.classList.remove("is-selected"); 6090 el.setAttribute("aria-selected", "false"); 6091 }); 6092 originalSelect.querySelectorAll("option").forEach(opt => opt.selected = false); 6093 customSelectToggle.innerHTML = placeholderText; 6094 customSelectToggle.classList.add("is-placeholder"); 6095 } else { 6096 const isCurrentlySelected = event.target.classList.contains("is-selected"); 6097 event.target.classList.toggle("is-selected"); 6098 event.target.setAttribute("aria-selected", (!isCurrentlySelected).toString()); 6099 clickedOption.selected = !isCurrentlySelected; 6100 const allItem = customSelectMenu.querySelector('.custom-select-item[value=""]'); 6101 if (allItem) { 6102 allItem.classList.remove("is-selected"); 6103 allItem.setAttribute("aria-selected", "false"); 6104 } 6105 const allOption = originalSelect.querySelector('option[value=""]'); 6106 if (allOption) allOption.selected = false;
6107 const selectedItems = customSelectMenu.querySelectorAll(".custom-select-item.is-selected"); 6108 if (selectedItems.length === 0) { 6109 customSelectToggle.innerHTML = placeholderText; 6110 customSelectToggle.classList.add("is-placeholder"); 6111 } else if (selectedItems.length === 1) { 6112 customSelectToggle.innerHTML = selectedItems[0].textContent; 6113 customSelectToggle.classList.remove("is-placeholder"); 6114 } else { 6115 customSelectToggle.innerHTML = `${selectedItems[0].textContent} +${selectedItems.length - 1}`; 6116 customSelectToggle.classList.remove("is-placeholder"); 6117 } 6118 } 6119 let changeEvent = new Event('change', { 6120 bubbles: true 6121 }); 6122 originalSelect.dispatchEvent(changeEvent); 6123 } 6124 } 6125 }); 6126 document.addEventListener("click", function (event) { 6127 if (!customSelectMenu.contains(event.target) && !customSelectToggle.contains(event.target)) { 6128 closeCustomSelect(customSelectToggle); 6129 } 6130 }); 6131 }; 6132 const createCustomSelect = originalSelect => { 6133 const customSelect = document.createElement('div'); 6134 customSelect.innerHTML = customDropdownHTML; 6135 const { 6136 customSelectToggle, 6137 customSelectMenu, 6138 customSelectContent 6139 } = initiateQuerySelectors(customSelect); 6140 inheritAttributes(originalSelect, customSelectToggle, customSelectMenu); 6141 hideOriginalSelect(originalSelect); 6142 initiateToggleText(originalSelect, customSelectToggle); 6143 convertOptionsToButtons(originalSelect, customSelectContent); 6144 initiateEventListeners(originalSelect, customSelectToggle, customSelectMenu); 6145 return customSelect; 6146 }; 6147 const setCustomSelectValue = (originalSelect, value) => {
6148 let customSelect = originalSelect.nextElementSibling; 6149 let customSelectToggle = customSelect.querySelector(".custom-select-toggle"); 6150 let customSelectContent = customSelect.querySelector(".custom-select-content"); 6151 if (!customSelectContent) return; 6152 let selectedOption = value ? Array.from(customSelectContent.children).find(function (b) { 6153 return b.value === value; 6154 }) : customSelectContent.firstChild; 6155 if (!selectedOption) { 6156 return; 6157 } 6158 if (selectedOption.classList.contains("is-disabled")) return; 6159 let elementNumber = Array.from(selectedOption.parentNode.children).indexOf(selectedOption); 6160 let linkedOption = originalSelect.querySelectorAll("option")[elementNumber]; 6161 linkedOption.selected = true; 6162 selectedOption.classList.add("is-selected"); 6163 selectedOption.parentNode.querySelectorAll(".custom-select-item").forEach(el => { 6164 if (el !== selectedOption) { 6165 el.classList.remove("is-selected"); 6166 } 6167 }); 6168 closeCustomSelect(customSelectToggle); 6169 customSelectToggle.innerHTML = linkedOption.innerHTML; 6170 if (linkedOption.value) { 6171 customSelectToggle.classList.remove("is-placeholder"); 6172 if (linkedOption.value !== "") { 6173 customSelect.classList.add("has-selection"); 6174 } else { 6175 customSelect.classList.remove("has-selection"); 6176 } 6177 } else { 6178 customSelect.classList.remove("has-selection"); 6179 customSelectToggle.classList.add("is-placeholder"); 6180 } 6181 }; 6182 const customSelect = originalSelect => { 6183 const customSelect = createCustomSelect(originalSelect); 6184 originalSelect.insertAdjacentElement('afterend', customSelect); 6185 return customSelect; 6186 }; 6187 const resetCustomSelect = originalSelect => { 6188 const customSelectEl = originalSelect.nextElementSibling; 6189 const customSelectToggle = customSelectEl?.querySelector('.custom-select-toggle'); 6190 const customSelectContent = customSelectEl?.querySelector('.custom-select-content'); 6191 if (!customSelectToggle || !customSelectContent) return; 6192 const placeholderOption = originalSelect.querySelector("[data-label]"); 6193 const placeholderText = placeholderOption?.dataset.label || originalSelect.querySelector("option")?.textContent || "Select"; 6194 customSelectContent.querySelectorAll('.custom-select-item').forEach(item => { 6195 item.classList.remove('is-selected'); 6196 item.setAttribute('aria-selected', 'false'); 6197 }); 6198 originalSelect.querySelectorAll('option').forEach(opt => opt.selected = false); 6199 customSelectToggle.innerHTML = placeholderText; 6200 customSelectToggle.classList.add('is-placeholder'); 6201 const customSelectWrapper = customSelectEl.querySelector('.custom-select'); 6202 if (customSelectWrapper) { 6203 customSelectWrapper.classList.remove('has-selection'); 6204 } 6205 }; 6206 var dropdownCss = ` 6207 .pac-container { 6208 padding: 24px 32px; 6209 background-color: #fff; 6210 border-radius: 4px; 6211 } 6212 .pac-item { 6213 border: 0; 6214 padding-bottom: 4px; 6215 font-family: var(--lp-body-font-family); 6216 font-size: 1rem; 6217 color: var(--lp-color-gray-300); 6218 } 6219 .pac-item:hover, 6220 .pac-item:hover .pac-item-query, 6221 .pac-item:hover .pac-matched { 6222 color: #D2A984 }; 6223 } 6224 .pac-item .pac-item-query { 6225 font-size: 1rem; 6226 color: var(--lp-color-gray-700); 6227 } 6228 .pac-item .pac-matched { 6229 color: var(--lp-color-gray-700); 6230 font-weight: 700; 6231 } 6232 .pac-icon { 6233 display: none; 6234 } 6235 `; 6236 var head = document.head || document.getElementsByTagName('head')[0]; 6237 var style = document.createElement('style'); 6238 head.appendChild(style); 6239 style.appendChild(document.createTextNode(dropdownCss)); 6240 function handleDisplayMap() { 6241 if (inputAddress.value === '') { 6242 mapSelector.style.display = 'none'; 6243 return; 6244 } 6245 mapSelector.style.display = 'block'; 6246 } 6247 inputAddress.addEventListener('input', window.luxuryPresence.debounce(handleDisplayMap, 200)); 6248 let addressValidated = false; 6249 const errorMessage = document.createElement('div'); 6250 errorMessage.className = 'address-error-message'; 6251 errorMessage.style.cssText = 'color: #dc3545; font-size: 12px; display: none; text-align: start; margin-top: 4px;'; 6252 errorMessage.textContent = 'Please enter a valid home address'; 6253 const comboInput = inputAddress.closest('.lp-combo-input'); 6254 if (comboInput) { 6255 comboInput.appendChild(errorMessage); 6256 } else { 6257 inputAddress.parentNode.insertBefore(errorMessage, inputAddress.nextSibling); 6258 } 6259 inputAddress.addEventListener('input', function () { 6260 addressValidated = false;
6261 btnContinue.disabled = true; 6262 errorMessage.style.display = 'none'; 6263 }); 6264 window.luxuryPresence.mapApiLoader.load().then(() => { 6265 const map = new google.maps.Map(mapSelector, { 6266 center: defaultMapCenter, 6267 zoom: 14 6268 }); 6269 const marker = new google.maps.Marker({ 6270 position: defaultMapCenter, 6271 map: map 6272 }); 6273 const autocompleteOptions = { 6274 types: ["geocode"], 6275 fields: ["geometry", "address_components", "formatted_address"] 6276 }; 6277 const autocomplete = new google.maps.places.Autocomplete(inputAddress, autocompleteOptions); 6278 function onPlaceChanged() { 6279 const place = autocomplete.getPlace(); 6280 if (!place || !place.address_components) { 6281 addressValidated = false; 6282 btnContinue.disabled = true; 6283 errorMessage.style.display = 'block'; 6284 return; 6285 } 6286 const geometry = place.geometry; 6287 const inputAddressVal = inputAddress.value; 6288 const addressComponents = place.address_components || []; 6289 const hasStreetNumber = addressComponents.some(function (comp) { 6290 return comp.types && comp.types.includes('street_number'); 6291 }); 6292 if (!hasStreetNumber) { 6293 addressValidated = false; 6294 btnContinue.disabled = true; 6295 errorMessage.style.display = 'block'; 6296 return; 6297 } 6298 errorMessage.style.display = 'none'; 6299 addressValidated = true; 6300 btnContinue.disabled = false; 6301 if (geometry) { 6302 map.panTo(geometry.location); 6303 map.setZoom(14); 6304 marker.setPosition(geometry.location); 6305 return; 6306 } 6307 inputAddress.placeholder = "Enter an address"; 6308 } 6309 autocomplete.addListener('place_changed', onPlaceChanged); 6310 }); 6311 timeFrameSelect.addEventListener('change', () => { 6312 message.value = inputAddress.value; 6313 }); 6314 function showStep(nextStep) { 6315 const tabs = _section.querySelectorAll('.js-home-valuation-tabs'); 6316 const stepContents = _section.querySelectorAll('.home-valuation-step');
6317 tabs.forEach((tab, index) => { 6318 if (index === nextStep - 1) { 6319 tab.classList.add('home-valuation__tab--active'); 6320 } else { 6321 tab.classList.remove('home-valuation__tab--active'); 6322 } 6323 }); 6324 stepContents.forEach(stepContent => { 6325 if (stepContent.classList.contains('js-home-valuation-step--' + nextStep)) { 6326 stepContent.classList.add('home-valuation-step--active'); 6327 } else { 6328 stepContent.classList.remove('home-valuation-step--active'); 6329 } 6330 }); 6331 } 6332 btnContinue.addEventListener('click', function (e) { 6333 if (!addressValidated) { 6334 e.preventDefault(); 6335 errorMessage.style.display = 'block'; 6336 return; 6337 } 6338 if (window.luxuryPresence.redirects.checkHstRedirect(inputAddress.value)) return; 6339 showStep(2); 6340 }); 6341 const submitBtn = form.querySelector('button[type="submit"]'); 6342 const originalBtnText = submitBtn ? submitBtn.textContent : ''; 6343 form.addEventListener('submit', function () { 6344 if (submitBtn) { 6345 submitBtn.disabled = true; 6346 submitBtn.textContent = 'Loading...'; 6347 } 6348 }); 6349 form.addEventListener('formsubmitted', () => { 6350 if (submitBtn) { 6351 submitBtn.disabled = false; 6352 submitBtn.textContent = originalBtnText; 6353 } 6354 if (redirectLink) showStep(1);else showStep(3); 6355 }); 6356 form.addEventListener('formsubmiterror', function () { 6357 if (submitBtn) { 6358 submitBtn.disabled = false; 6359 submitBtn.textContent = originalBtnText; 6360 } 6361 }); 6362 form.addEventListener("reset", function () { 6363 addressValidated = false; 6364 errorMessage.style.display = 'none'; 6365 btnContinue.disabled = true; 6366 }); 6367 var presetAddress = window.luxuryPresence.pagination.getParameterByName('address'); 6368 if (presetAddress) { 6369 inputAddress.value = presetAddress; 6370 } 6371 _section.querySelectorAll('select').forEach(function (selectElement) { 6372 customSelect(selectElement); 6373 }); 6374})('section-0cae3508-3cc4-48dc-9582-6f81a06f07fb', JSON.parse("{\"resource\":\"NONE\",\"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\":\"6382308c-8bfc-4993-9f82-aceab30cdb9f\",\"usePageResource\":false,\"sectionIndex\":9}")); 6375} catch(e) { 6376console.log(e); 6377} 6378 try { 6379(function init(sectionDomId) { 6380 const section = document.getElementById(sectionDomId); 6381 const slider = section.querySelector('.js-slider'); 6382 const arrowBtnNext = section.querySelector('.js-arrow--next'); 6383 const arrowBtnPrev = section.querySelector('.js-arrow--prev'); 6384 const layout = slider.dataset.layout; 6385 const autoscroll = slider.dataset.autoscroll === 'true'; 6386 const autoscrollInterval = (parseInt(slider.dataset.autoscrollInterval, 10) || 6) * 1000; 6387 const slideCount = slider.querySelectorAll('.splide__list > .splide__slide').length; 6388 const perView = Number(layout) || 1; 6389 const hasEnoughSlides = slideCount > perView; 6390 var splide = new Splide(slider, { 6391 rewind: true, 6392 arrows: false, 6393 type: layout > 2 ? 'fade' : hasEnoughSlides ? 'loop' : 'slide', 6394 clones: 1, 6395 pagination: false, 6396 autoHeight: true, 6397 autoplay: autoscroll && hasEnoughSlides, 6398 interval: autoscrollInterval, 6399 autoScroll: false, 6400 perMove: 1, 6401 grid: { 6402 rows: layout > 2 ? layout : 1, 6403 cols: layout == '2' ? 2 : 1 6404 }, 6405 breakpoints: { 6406 768: { 6407 grid: { 6408 rows: layout, 6409 cols: 1 6410 } 6411 } 6412 } 6413 }); 6414 if (arrowBtnNext || arrowBtnPrev) { 6415 arrowBtnNext.addEventListener('click', e => { 6416 splide.go('+1'); 6417 }); 6418 arrowBtnPrev.addEventListener('click', e => { 6419 splide.go('-1'); 6420 }); 6421 } 6422 splide.mount(window.splide.Extensions); 6423})('section-346316c9-a364-46cc-8a36-f6113f1201e3', 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\":\"6382308c-8bfc-4993-9f82-aceab30cdb9f\",\"usePageResource\":false,\"sectionIndex\":10}")); 6424} catch(e) { 6425console.log(e); 6426} 6427 try { 6428(function init(sectionDomId) { 6429 var $contactForm = document.querySelector("#" + sectionDomId + " .js-form"); 6430 var $inputName = $contactForm.querySelector('input[name="name"]'); 6431 $inputName?.addEventListener("keyup", function () { 6432 if (this.value.replaceAll(/\d/g, "").trim() === "") { 6433 this.setCustomValidity("Please enter your name."); 6434 } else { 6435 this.setCustomValidity(""); 6436 } 6437 }); 6438 const addRedirectToForm = () => { 6439 const redirectLink = document.getElementById(`${sectionDomId}`).querySelector('.js-redirect-link'); 6440 const form = document.getElementById(`${sectionDomId}`).querySelector('.js-form'); 6441 function redirectPage(link) { 6442 if (link) { 6443 const rawHref = link.getAttribute('href'); 6444 link.setAttribute('href', setHttp(rawHref)); 6445 link.click(); 6446 } 6447 } 6448 function setHttp(link) { 6449 if (link.search(/^http[s]?\:\/\/|\//) == -1) { 6450 link = 'http://' + link; 6451 } 6452 return link; 6453 } 6454 form.addEventListener("reset", function () { 6455 redirectPage(redirectLink); 6456 }); 6457 }; 6458 addRedirectToForm(); 6459 ; 6460})('section-2c090225-3f15-4437-9733-8b420503d690', 'undefined'); 6461} catch(e) { 6462console.log(e); 6463} 6464 try { 6465(function init(sectionDomId) {})('section-5bb607e9-9670-455b-9652-8c9d1b0b1c63', 'undefined'); 6466} catch(e) { 6467console.log(e); 6468} 6469 try { 6470(function init(sectionDomId, options) { 6471 let section = null; 6472 switch (sectionDomId) { 6473 case 'NAVBAR': 6474 section = document.querySelector('body > nav, #global-navbar'); 6475 break; 6476 case 'FOOTER': 6477 section = document.querySelector('body > footer, #global-footer'); 6478 break; 6479 case 'SIDEMENU': 6480 section = document.querySelector('body > div.sidemenu, #global-sidemenu'); 6481 break; 6482 case 'CONTACT':
6483 section = document.querySelector('#modal-global-contact-us'); 6484 break; 6485 case 'MOBILE_CONTACT': 6486 section = document.querySelector('body > div.mobile-contact-wrapper, #global-mobile-contact'); 6487 break; 6488 case 'SUBSCRIBE': 6489 // Subscribe Not Implemented 6490 section = null; 6491 break; 6492 case 'ACCOUNT': 6493 // Account Not Implemented 6494 section = null; 6495 break; 6496 default: 6497 section = document.querySelector('#' + sectionDomId); 6498 } 6499 if (!section) { 6500 return; 6501 } 6502 var url = window.luxuryPresence.defaults.routerUrl; 6503 var companyId = window.luxuryPresence.defaults.companyId; 6504 var limit = options.limit || 8; 6505 if (typeof limit === 'string') { 6506 limit = parseInt(limit, 10) || 8; // this NaN protection also filters out 0 - this is expected 6507 } 6508 var templateSelector = options.templateSelector || '.jsIGTemplate'; 6509 var containerSelector = options.containerSelector || '.jsIGContainer'; 6510 var hasDataClass = options.hasDataClass || 'has-data'; 6511 var hideActivateMessage = options.hasDataClass || false; 6512 var payload = { 6513 companyId: companyId, 6514 limit: limit 6515 }; 6516 if (options.resourceId && typeof options.resourceId === 'string' && !options.resourceId.match(/^{{.*}}$/)) { 6517 payload.resourceId = options.resourceId; 6518 // Federated enum values are uppercase (AGENT/TEAM); element configs carry lowercase 6519 payload.resource = String(options.resource || 'agent').toUpperCase(); 6520 payload.fallbackToNoResource = options.fallbackToNoResource === 'true' || options.fallbackToNoResource === true; 6521 } 6522 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'; 6523 var templateHTML = section.querySelector(templateSelector)?.innerHTML || ''; 6524 var template = Handlebars.compile(templateHTML); 6525 var container = section.querySelector(containerSelector); 6526 if (options.variables) { 6527 Object.keys(options.variables).forEach(function (key) { 6528 if (options.variables.hasOwnProperty(key) && (typeof options.variables[key] !== 'string' || !options.variables[key].match(/^{{.*}}$/))) { 6529 payload[key] = options.variables[key]; 6530 } 6531 }); 6532 } 6533 function getData() { 6534 var feed = { 6535 error: true 6536 }; 6537 if (payload.companyId == null || payload.companyId === '') { 6538 // instagramContentFeed requires companyId (ID!) â nothing to fetch without it. 6539 // Checked after the options.variables merge, which may override the default. 6540 // Deferred so element listeners (attached after this template runs) still receive it. 6541 setTimeout(function () { 6542 section.dispatchEvent(new CustomEvent('ig-data', { 6543 detail: feed 6544 })); 6545 }, 0); 6546 return; 6547 } 6548 superagent.post(url + '/graphql').send({ 6549 query: query, 6550 variables: payload 6551 }).then(res => { 6552 try { 6553 if (!res.body.errors) { 6554 feed = res.body.data.instagramContentFeed; 6555 if (!feed.active) { 6556 if (!hideActivateMessage && sectionDomId === 'section-temp' && container) { 6557 if (payload.resourceId) { 6558 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>'; 6559 } else { 6560 container.innerHTML = '<div style="text-align: center">Instagram account is not connected.<br /> Connect it on <a href="/profile">Profile page</a></div>'; 6561 } 6562 } 6563 } else { 6564 if (feed.items.length) { 6565 if (hasDataClass) { 6566 section.classList.add(hasDataClass); 6567 } 6568 const feedName = feed.username; 6569 section.querySelectorAll('.jsIGLink').forEach(link => link.setAttribute('href', feed.feedUrl)); 6570 section.querySelectorAll('.jsIGName').forEach(name => { 6571 name.textContent = '@' + feedName; 6572 name.setAttribute('title', '@' + feedName); 6573 }); 6574 if (container && template) { 6575 container.innerHTML = template(feed); 6576 } 6577 } 6578 } 6579 } 6580 } catch (e) {} 6581 section.dispatchEvent(new CustomEvent('ig-data', { 6582 detail: feed 6583 })); 6584 }).catch(e => { 6585 console.log('err', e); 6586 section.dispatchEvent(new CustomEvent('ig-data', { 6587 detail: feed 6588 })); 6589 }); 6590 } 6591 getData(); 6592}
6592)('section-2b120f4d-e619-4190-9fac-7fc3abaef672', JSON.parse("{\"limit\":11,\"resource\":\"agent\",\"resourceId\":\"{{id}}\",\"fallbackToNoResource\":\"{{{fallbackToNoResource}}}\",\"companyId\":\"6382308c-8bfc-4993-9f82-aceab30cdb9f\",\"usePageResource\":false,\"sectionIndex\":13,\"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}}")); 6593} catch(e) { 6594console.log(e); 6595} 6596 try { 6597(function init(sectionDomId) { 6598 const section = document.getElementById(sectionDomId); 6599 const slider = section.querySelector(".js-slider"); 6600 section.addEventListener("ig-data", function () { 6601 var splide = new Splide(slider, { 6602 rewind: true, 6603 arrows: false, 6604 type: 'loop', 6605 padding: '20%', 6606 gap: '16px', 6607 pagination: false, 6608 clones: 1, 6609 perPage: 1, 6610 perMove: 1, 6611 destroy: true, 6612 breakpoints: { 6613 768: { 6614 destroy: false 6615 } 6616 } 6617 }); 6618 splide.mount(); 6619 }); 6620})('section-2b120f4d-e619-4190-9fac-7fc3abaef672', 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\":\"6382308c-8bfc-4993-9f82-aceab30cdb9f\",\"usePageResource\":false,\"sectionIndex\":13}")); 6621} catch(e) { 6622console.log(e); 6623} 6624 6625 var { body } = document; 6626 var globalNav = body.querySelector(':scope > nav'); 6627 var globalSideMenu = body.querySelector(':scope > div.sidemenu'); 6628 6629 document.querySelectorAll('body > .modal .close').forEach(modalCloseBtn => { 6630 modalCloseBtn.addEventListener('click', function() { 6631 window.lpUI.hideClosestModal(modalCloseBtn); 6632 }); 6633 }); 6634 6635 window.addEventListener('click', function() { 6636 document.querySelectorAll('.share-popup').forEach(sharedPopup => { 6637 sharedPopup.style.display = 'none' ; 6638 }); 6639 }); 6640 6641 /* Misc Partials / Addons */ 6642 function initWOW() { 6643 if (wow) { 6644 wow.init(); 6645 wow.scrollHandler(); 6646 setTimeout(function () { 6647 const wowHideStyle = document.getElementById('wow-hide-elements'); 6648 if(wowHideStyle) { 6649 wowHideStyle.disabled = true; 6650 } 6651 }, 1); 6652 } 6653 } 6654 6655 const wowHideElements = document.getElementById('wow-hide-elements'); 6656 if (wowHideElements) { 6657 wowHideElements.disabled = false; 6658 } 6659 6660 initWOW(); 6661 6662 /* Generic Navbar Handling */ 6663 globalNav?.querySelectorAll('.hamburger-component').forEach(hamburgerComponent => { 6664 hamburgerComponent.addEventListener('click', function() { 6665 window.lpUI.sideMenuToggle(); 6666 }); 6667 }); 6668 globalSideMenu?.querySelectorAll('.toggle').forEach(toggleEl => { 6669 toggleEl.addEventListener('click', function() { 6670 window.lpUI.sideMenuToggle(); 6671 }); 6672 }); 6673 6674 document.querySelectorAll('body > nav .sub-nav-container > a, body > div.sidemenu .sub-nav-container > a').forEach(linkEl => { 6675 linkEl.addEventListener('click', function(e) { 6676 e.preventDefault(); 6677 e.stopPropagation(); 6678 var subNav = linkEl.parentElement.querySelector(':scope > .sub-nav'); 6679 if (subNav && subNav.classList.contains('visible')){ 6680 subNav.classList.remove('visible'); 6681 } else { 6682 globalNav?.querySelectorAll('.sub-nav-container .sub-nav').forEach(globalSubNav => { 6683 globalSubNav.classList.remove('visible'); 6684 }); 6685 globalSideMenu?.querySelectorAll('.sub-nav').forEach(sideMenuSubNav => { 6686 sideMenuSubNav.classList.remove('visible'); 6687 }); 6688 subNav?.classList.add('visible'); 6689 } 6690 }); 6691 }); 6692 window.addEventListener('click', function() { 6693 document.querySelectorAll('nav .sub-nav.visible, .sidemenu .sub-nav.visible').forEach(subNavEl => { 6694 subNavEl.classList.remove('visible'); 6695 }); 6696 }); 6697 6698 } 6699 6700 document.addEventListener('DOMContentLoaded', lpGlobalInit); 6701 6702 </script>
6702 6703 6704
6704<script type="module"> 6705 function selectorExists(selector) { 6706 return document.querySelector(selector) !== null; 6707 } 6708 6709 // Function to initialize the third-party library 6710 function initParoller(selector = '.my-paroller') { 6711 var $parollerElements = $(selector); 6712 if ($parollerElements.length > 0 && typeof $parollerElements.paroller === 'function') { 6713 $parollerElements.paroller(); 6714 } 6715 } 6716 6717 const parollerSelector = '.my-paroller'; 6718 6719 if (selectorExists(parollerSelector)) { 6720 window.luxuryPresence.libs.loadJs(window.luxuryPresence.libs.jsLibsMap.paroller.jsSrc, function() { 6721 initParoller(parollerSelector); 6722 window.luxuryPresence.libs.jsLibsMap.paroller.isLoaded = true; 6723 }); 6724 } 6725 </script>
6725 6726 6727 <!-- Google Tag Manager (noscript) -->
vendor: 80 bytes, lines 6727-6728
6727 6728 <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
6728GTM-T9SFQGHZ
vendor: 107 bytes, lines 6728-6730
6728" 6729 height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> 6730
6730<!-- End Google Tag Manager --> 6731 6732
6732<script 6733 src="https://cdn.luxurypresence.com/scripts/a11y-widget/latest/widget.js" 6734 data-website-id="0ff2944e-bf8d-436a-8339-bb2d94158f4a" 6735 6736 defer></script>
vendor: 1 bytes, line 6736
6736
6737<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 6737
6737
6738<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:'a4811c37e8c0f7d2',t:'MTc5MTU4Nzk2Ng=='};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>
6738</body> 6739</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.