<!DOCTYPE html>
<html class="no-js" lang=en>
<head>
    <meta charset="utf-8">
    <meta http-equiv="x-ua-compatible" content="ie=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="twitter:card" content="summary_large_image">
        <title>landing-page-images</title>
        <meta property="og:title" content="landing-page-images">
        <meta name="twitter:title" content="landing-page-images">
        <meta name="description" content="team_web.jpg
listing1_web.jpg
listing4_web.jpg
listing2_web.jpg
listing3_web.jpg">
        <meta property="og:description" content="team_web.jpg
listing1_web.jpg
listing4_web.jpg
listing2_web.jpg
listing3_web.jpg">
        <meta name="twitter:description" content="team_web.jpg
listing1_web.jpg
listing4_web.jpg
listing2_web.jpg
listing3_web.jpg">
        <meta property="og:image" content="https://media-production.lp-cdn.com/cdn-cgi/image/format&#x3D;auto,quality&#x3D;85,fit&#x3D;scale-down,width&#x3D;1280/https://media-production.lp-cdn.com/media/0453a062-22e8-4505-a2a8-1a091966df0f">
        <meta name="twitter:image" content="https://media-production.lp-cdn.com/cdn-cgi/image/format&#x3D;auto,quality&#x3D;85,fit&#x3D;scale-down,width&#x3D;1280/https://media-production.lp-cdn.com/media/0453a062-22e8-4505-a2a8-1a091966df0f">
        <meta property="og:url" content="https://marybrowntnhomes.com/landing_page_content_guide.md">
        <link rel="canonical" href="https://marybrowntnhomes.com/landing_page_content_guide.md">
    <script>(function(html){html.className = html.className.replace(/\bno-js\b/,'js')})(document.documentElement);</script>
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Poppins:100,100i,200,200i,300,300i,400,400i,500,500i,600,600i,700,700i,800,800i,900,900i"><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Questrial:400">
    <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'">
    <noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/css/ion.rangeSlider.min.css"></noscript>
    <link rel="icon" type="image/x-icon" href="/favicon.ico">
    <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
    <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
    <link rel="icon" type="image/png" sizes="48x48" href="/favicon-48x48.png">
    <style id="global-css">:root{--global-primary-font-family:Poppins,sans-serif;--global-primary-font-family-short:Poppins;--global-secondary-font-family:Questrial,sans-serif;--global-secondary-font-family-short:Questrial;--global-body-padding:0px;--global-background-color:#fff;--global-body-font-size:16px;--global-h1-font-size:50px;--global-h2-font-size:40px;--global-h3-font-size:30px;--global-h4-font-size:21px;--global-h5-font-size:17px;--global-h6-font-size:16px;--global-section-padding:96px;}@media (max-width: 768px){:root{--global-section-padding:64px;}}body{padding:0px;background-color:#fff;font-family:Questrial,sans-serif;font-size:16px;}@media (min-width: 768px){body{padding:0px 0px 0px 0px;}}h1,h2,h3,h4,h5,h6,button{font-family:Poppins,sans-serif;}h1{font-size:50px;}h2{font-size:40px;}h3{font-size:30px;}h4{font-size:21px;}h5{font-size:17px;}h6{font-size:16px;}</style>
        <link rel="stylesheet" type="text/css" href="https://styles.luxurypresence.com/producer/index.css" />
    <style id="website-css">:root{--primary:#03304B;--secondary:#fff;--accent:#0682CA;--text:#03304B;--link-hover:#ccc;}.lp-btn,.redesign .lp-btn{padding:20px 46px;}#modal-global-contact-us .contact-form .section-message form .submitButton{padding:14px 20px;}button.newsletter-signup__form-item{line-height:1;}h1,.lp-h1,h2,.lp-h2,h3,.lp-h3{font-weight:200!important;}nav#global-navbar .header .navigation li.navigation__item a.navigation__link{font-weight:200!important;}nav#global-navbar .header .navigation li.navigation__item a.navigation__link span:after{background-color:#fff;}nav#global-navbar .header .navigation li.navigation__item a.navigation__link:hover{color:#fff;}nav#global-navbar .header .navigation .sub-nav ul{background-color:rgba(255, 255, 255, 0.95);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);padding:0!important;}nav#global-navbar .header .navigation .sub-nav ul li:hover{background-color:#fff;}nav#global-navbar .header .navigation .sub-nav ul li:hover a{color:var(--link-hover);}nav#global-navbar .header .navigation .sub-nav ul li a{color:var(--text);}nav#global-navbar .header .navigation .sub-nav ul li span:after{background-color:var(--link-hover);}nav#global-navbar.scroll{background-color:rgba(3, 48, 75, .85)!important;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);}nav#global-navbar.scroll .content-container .navigation .sub-nav.visible{-webkit-transform:translate(0, calc(100% + 0px));-moz-transform:translate(0, calc(100% + 0px));-ms-transform:translate(0, calc(100% + 0px));transform:translate(0, calc(100% + 0px));}nav#global-navbar.scroll li.navigation__item a.navigation__link{color:#fff!important;}nav#global-navbar.scroll li.navigation__item a.navigation__link span:after{background-color:var(--link-hover)!important;}nav#global-navbar.scroll li.navigation__item a.navigation__link:hover{color:var(--link-hover)!important;}nav#global-navbar.scroll button.hamburger-component.hamburger{color:#fff;}nav#global-navbar.scroll button.hamburger-component.hamburger:hover{color:var(--link-hover)!important;}nav#global-navbar.scroll .logo .logo__img.dark{display:block!important;}nav#global-navbar.scroll .logo .logo__img.light{display:none!important;}nav#global-navbar .header{padding-top:5px;padding-bottom:5px;height:auto;}nav#global-navbar .header .logo img{max-height:50px;}@media only screen and (min-width:768px){nav#global-navbar .header .logo img{max-height:70px;}}@media only screen and (max-width:768px){nav .header .hamburger{padding-right:5px!important;}}#global-footer div.footer .info-wrap-contact_zone svg path{fill:#fff;}#global-footer div.footer .info-wrap-contact_title{color:#fff;}#global-footer div.footer .info-wrap .contact_title{color:#fff;}@media only screen and (min-width: 769px){#global-footer .footer .info-privacy{border-top:1px solid #fff;}}@media only screen and (max-width: 768px){#global-footer .footer .info-privacy .socials_zone{margin-top:25px;}#global-footer .footer .info-privacy .copy_zone{border-top:1px solid #fff;}}footer#global-footer .info-privacy a{font-weight:400;}footer#global-footer .luxury-text a,footer#global-footer a.hvr_animation,footer#global-footer .lp-link{position:relative!important;color:#fff!important;-webkit-transition:0.4s;transition:0.4s;}footer#global-footer .luxury-text a:hover,footer#global-footer a.hvr_animation:hover,footer#global-footer .lp-link:hover{color:var(--link-hover)!important;}footer#global-footer .luxury-text a:before,footer#global-footer a.hvr_animation:before,footer#global-footer .lp-link:before,footer#global-footer .luxury-text a:after,footer#global-footer a.hvr_animation:after,footer#global-footer .lp-link:after{-webkit-transition:0.4s;transition:0.4s;-webkit-text-decoration:none!important;text-decoration:none!important;line-height:1;content:"" "";height:1px;position:absolute!important;bottom:0;left:0;}footer#global-footer .luxury-text a:before,footer#global-footer a.hvr_animation:before,footer#global-footer .lp-link:before{width:100%!important;background-color:#fff!important;}footer#global-footer .luxury-text a:after,footer#global-footer a.hvr_animation:after,footer#global-footer .lp-link:after{width:0%!important;background-color:var(--link-hover)!important;}footer#global-footer .luxury-text a:hover:after,footer#global-footer a.hvr_animation:hover:after,footer#global-footer .lp-link:hover:after{width:100%!important;}footer .footer .info-wrap-contact_zone:first-of-type{margin-bottom:39px!important;}@media only screen and (max-width:1024px){footer .footer .info-wrap-contact_zone:first-of-type{margin-bottom:21px!important;}footer .footer .info-wrap-contact_zone:nth-child(2){margin-bottom:0!important;}footer .footer .info-privacy .socials_zone li{padding:4px 12px 10px 12px!important;}}body>div.sidemenu.visible .sidebar{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);}body>div.sidemenu .sidebar__nav-item{border-bottom:1px solid rgba(255, 255, 255, 0)!important;}div#global-sidemenu .sidebar__close:hover:before,div#global-sidemenu .sidebar__close:hover:after{background-color:#aaa;}div#global-sidemenu .sidebar__subnav-link:hover{color:#aaa!important;}div#global-sidemenu .sidebar__nav-link:hover{color:#aaa!important;}div#global-sidemenu .sidebar__nav-link:hover:after{border-bottom:2px solid #aaa!important;border-right:2px solid #aaa!important;}div#modal-global-contact-us .contact-form .info-zone_contact_cell .info-wrap-contact_title{color:#fff;}div#modal-global-contact-us .contact-form .section-message label{color:#fff;}div#modal-global-contact-us .contact-form .socials_zone{padding-left:0!important;}@media only screen and (max-width:560px){div#modal-global-contact-us .contact-form .socials_zone li:not(:last-child){padding-right:9px!important;}}@media only screen and (min-width:560px){div#modal-global-contact-us .contact-form .socials_zone li:not(:last-child){padding-right:28px!important;}}div#modal-global-contact-us .contact-form .info-zone_contact{margin-bottom:23px!important;}div#modal-global-contact-us .contact-form .info-zone_contact_link.pre-line{font-weight:normal;}div#modal-global-contact-us .contact-form .section-message form{max-width:490px;}@media only screen and (max-width:1080px){div#modal-global-contact-us .contact-form h2{font-size:37px;}}@media only screen and (max-width:925px){div#modal-global-contact-us .contact-form h2{font-size:25px;}}div#modal-global-contact-us .close{top:4vh;}div#modal-global-contact-us .lp-link,div#modal-global-contact-us .hyperlink-style-2{font-weight:normal;color:#fff!important;}div#modal-global-contact-us .lp-link:before,div#modal-global-contact-us .hyperlink-style-2:before{background-color:#aaa;}div#modal-global-contact-us .lp-link:after,div#modal-global-contact-us .hyperlink-style-2:after{background-color:var(--link-hover)!important;}div#modal-global-contact-us .lp-link:hover,div#modal-global-contact-us .hyperlink-style-2:hover{color:var(--link-hover)!important;}div#modal-global-contact-us .section-message a:hover{color:var(--link-hover);}body>div.mobile-contact-wrapper .pop-up .close-btn:before{color:#fff;}body>div.mobile-contact-wrapper .pop-up .close-btn:hover::before{color:var(--link-hover);}#global-mobile-contact .lp-btn{color:#fff;border:2px solid #fff;}#global-mobile-contact .lp-btn:hover,#global-mobile-contact .lp-btn:active{color:var(--primary);border:2px solid #fff;background:#fff;}.contact-form__inputs-container a:hover{color:var(--link-hover);}@media only screen and (min-width: 1024px){footer#global-footer .info-wrap-contact_zone:nth-child(2){-webkit-box-pack:end;-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end;}footer#global-footer .info-wrap-contact_zone:nth-child(3){margin-top:-64px;}@media (max-width: 768px){footer#global-footer .info-wrap-contact_zone:nth-child(3){margin-top:0;}}footer#global-footer .footer div.type_user div.info-wrap-contact_cell:first-of-type{width:400px!important;}}@media (min-width: 768px){#global-footer>div>div>div.info-wrap>div>div:nth-child(2){margin-bottom:20px!important;}}#global-footer>div>div>div.info-wrap>div>div.info-wrap-contact_zone.type_user>div:nth-child(3)>p:before{content:"MOBILE NUMBER";display:block;font-size:14px;}#global-footer>div>div>div.info-wrap>div>div.info-wrap-contact_zone.type_user>div:nth-child(3)>p{font-size:0;}footer#global-footer .info-wrap-contact_zone:nth-of-type(2) .info-wrap-contact_cell:last-child .contact_title{font-size:0;letter-spacing:0;}footer#global-footer .info-wrap-contact_zone:nth-of-type(2) .info-wrap-contact_cell:last-child .contact_title:after{content:"OFFICE NUMBER";font-size:14px;line-height:1;letter-spacing:1.5px;}#modal-global-contact-us label.lp-tcr-content{font-weight:400!important;}@media (max-width: 768px){div#modal-global-contact-us .contact-form .socials_zone li{padding-left:7px;padding-right:7px;padding-top:10px;}div#modal-global-contact-us .contact-form .socials_zone li:not(:last-child){padding-right:7px;}}@media (max-width: 768px){#modal-global-contact-us .lp-socials{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;}}@media (max-width: 767px){#global-footer h3{font-size:32px;}}@media (max-width: 768px){#global-footer .footer .info-privacy .socials_zone li{padding:0 7px 15px 7px!important;}}footer#global-footer h3{font-size:0;}footer#global-footer h3:before{content:"";display:block;width:350px;height:100px;background-image:url('https://media-production.lp-cdn.com/media/f4bebc87-d480-4c07-9575-50282e67367f');background-repeat:no-repeat;-webkit-filter:invert(1);filter:invert(1);-webkit-background-size:contain;background-size:contain;}@media (max-width: 767px){footer#global-footer h3:before{width:293px;height:70px;margin:0 auto;}}#global-mobile-contact .lp-input::-webkit-input-placeholder{text-transform:capitalize;}#global-mobile-contact .lp-input::-moz-placeholder{text-transform:capitalize;}#global-mobile-contact .lp-input:-ms-input-placeholder{text-transform:capitalize;}#global-mobile-contact .lp-input::placeholder{text-transform:capitalize;}</style>
    <style id="wow-hide-elements">.wow{visibility:hidden!important}</style>
        <style id="page-css">
            #modal-global-contact-us .close{z-index:11;}#modal-global-contact-us .description{margin-bottom:15px;}#modal-global-contact-us .close:focus{outline:0;}#modal-global-contact-us .contact-form{padding:70px 0;width:100%;min-height:100vh;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;color:var(--colorTxt, #ffffff);-webkit-background-size:cover;background-size:cover;}#modal-global-contact-us .contact-form:after{content:'';position:absolute;display:block;background-color:rgba(2, 5, 7, 0.85);height:100%;width:100%;z-index:0;}#modal-global-contact-us .contact-form.loading textarea,#modal-global-contact-us .contact-form.loading input,#modal-global-contact-us .contact-form.loading label,#modal-global-contact-us .contact-form.loading button{pointer-events:none;opacity:.5;}#modal-global-contact-us .contact-form.loading .submit-icon{display:inline-block;}#modal-global-contact-us .contact-form .submit-icon{display:none;}#modal-global-contact-us .contact-form .contact-form-close{width:40px;height:50px;display:block;padding:0;border:none;background-color:transparent;cursor:pointer;position:absolute;right:50px;top:50px;z-index:110;}@media (max-width: 560px){#modal-global-contact-us .contact-form .contact-form-close{right:20px;top:20px;width:30px;height:40px;}}#modal-global-contact-us .contact-form .contact-form-close:before,#modal-global-contact-us .contact-form .contact-form-close:after{content:'';display:block;width:40px;height:1px;background-color:#fff;position:absolute;left:50%;top:50%;}@media (max-width: 560px){#modal-global-contact-us .contact-form .contact-form-close:before,#modal-global-contact-us .contact-form .contact-form-close:after{width:30px;}}#modal-global-contact-us .contact-form .contact-form-close:before{-webkit-transform:translate(-50%, -50%) rotate(45deg);-moz-transform:translate(-50%, -50%) rotate(45deg);-ms-transform:translate(-50%, -50%) rotate(45deg);transform:translate(-50%, -50%) rotate(45deg);}#modal-global-contact-us .contact-form .contact-form-close:after{-webkit-transform:translate(-50%, -50%) rotate(-45deg);-moz-transform:translate(-50%, -50%) rotate(-45deg);-ms-transform:translate(-50%, -50%) rotate(-45deg);transform:translate(-50%, -50%) rotate(-45deg);}#modal-global-contact-us .contact-form .container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;max-width:1440px;width:100%;padding:0 160px;margin:0 auto;z-index:10;}@media (max-width: 1320px){#modal-global-contact-us .contact-form .container{padding:0 80px;}}@media (max-width: 1200px){#modal-global-contact-us .contact-form .container{padding:0 30px;}}@media (max-width: 900px){#modal-global-contact-us .contact-form .container{-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;}}@media (max-width: 560px){#modal-global-contact-us .contact-form .container{padding:0 20px;}}#modal-global-contact-us .contact-form h2{margin:0 0 18px 0;padding:0;}@media (max-width: 560px){#modal-global-contact-us .contact-form h2{margin:0 0 24px 0;}}#modal-global-contact-us .contact-form .section-details{width:50%;}@media (max-width: 1200px){#modal-global-contact-us .contact-form .section-details{padding-right:30px;}}@media (max-width: 900px){#modal-global-contact-us .contact-form .section-details{width:100%;padding-right:0;max-width:700px;margin-bottom:38px;}}#modal-global-contact-us .contact-form .section-message{width:50%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end;position:relative;}@media (max-width: 1200px){#modal-global-contact-us .contact-form .section-message{padding-left:30px;}}@media (max-width: 900px){#modal-global-contact-us .contact-form .section-message{width:100%;padding-left:0;-webkit-box-pack:start;-ms-flex-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start;}}#modal-global-contact-us .contact-form .section-message:after{content:'';position:absolute;display:block;width:1px;background:#999999;height:calc(100% + 50px);left:0;top:-20px;}@media (max-width: 900px){#modal-global-contact-us .contact-form .section-message:after{display:none;}}#modal-global-contact-us .contact-form .section-message form{max-width:435px;width:100%;}#modal-global-contact-us .contact-form .section-message form .submitButton{width:auto;}@media (max-width: 560px){#modal-global-contact-us .contact-form .section-message form .submitButton{width:100%;}}@media (max-width: 900px){#modal-global-contact-us .contact-form .section-message form{max-width:700px;}}#modal-global-contact-us .contact-form .section-message form.loading textarea,#modal-global-contact-us .contact-form .section-message form.loading input,#modal-global-contact-us .contact-form .section-message form.loading label,#modal-global-contact-us .contact-form .section-message form.loading button{pointer-events:none;opacity:.5;}#modal-global-contact-us .contact-form .section-message form.loading .label-loading{display:inline;}#modal-global-contact-us .contact-form .section-message form.loading .label-success,#modal-global-contact-us .contact-form .section-message form.loading .label-initial{display:none;}#modal-global-contact-us .contact-form .section-message form.loading .submit-icon{display:inline-block;}#modal-global-contact-us .contact-form .section-message form.success .label-loading,#modal-global-contact-us .contact-form .section-message form.success .label-initial{display:none;}#modal-global-contact-us .contact-form .section-message form.success .label-success{display:inline;}#modal-global-contact-us .contact-form .section-message .label-loading,#modal-global-contact-us .contact-form .section-message .label-success{display:none;}#modal-global-contact-us .contact-form .section-message .submit-icon{display:none;}#modal-global-contact-us .contact-form .section-message h2{margin-bottom:28px;}#modal-global-contact-us .contact-form .section-message .form-group_modal{-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-bottom:39px;}#modal-global-contact-us .contact-form .section-message .form-group_modal input{border:none;border-bottom:1px solid #c0c0c0;display:block;width:100%;background:transparent;color:#ffffff;height:22px;font-size:16px;}@media (max-width: 560px){#modal-global-contact-us .contact-form .section-message .form-group_modal input{height:25px;}}#modal-global-contact-us .contact-form .section-message .form-group-textarea{margin-bottom:30px;}@media (max-width: 560px){#modal-global-contact-us .contact-form .section-message .form-group-textarea{margin-bottom:23px;}}#modal-global-contact-us .contact-form .section-message label{display:block;width:100%;line-height:1.63;letter-spacing:1px;color:#c0c0c0;font-weight:bold;text-transform:uppercase;}#modal-global-contact-us .contact-form .section-message textarea{resize:none;height:105px;width:100%;background:transparent;border:solid 1px #ffffff;margin:23px 0 0 0;color:#ffffff;padding:10px;font-size:16px;}@media (max-width: 560px){#modal-global-contact-us .contact-form .section-message textarea{margin:10px 0 0 0;height:89px;}}#modal-global-contact-us .contact-form .info-zone h4{margin:0 0 16px 0;}@media (max-width: 560px){#modal-global-contact-us .contact-form .info-zone h4{margin:0 0 13px 0;}}#modal-global-contact-us .contact-form .info-zone .type_user:nth-of-type(2){margin-bottom:30px;}@media (max-width: 560px){#modal-global-contact-us .contact-form .info-zone .type_user{margin-bottom:58px;}}#modal-global-contact-us .contact-form .info-zone_contact{margin-bottom:23px;}#modal-global-contact-us .contact-form .info-zone_contact:nth-last-child(2){margin-bottom:30px;}#modal-global-contact-us .contact-form .info-zone_contact_cell{position:relative;padding-left:45px;margin-bottom:22px;font-weight:bold;font-size:14px;max-width:90%;letter-spacing:1.5px;text-transform:uppercase;}@media (max-width: 560px){#modal-global-contact-us .contact-form .info-zone_contact_cell{padding-left:0;}}#modal-global-contact-us .contact-form .info-zone_contact_cell:last-of-type{margin-bottom:0;}#modal-global-contact-us .contact-form .info-zone_contact_cell i{position:absolute;left:0;top:0;display:block;}@media (max-width: 560px){#modal-global-contact-us .contact-form .info-zone_contact_cell i{position:relative;margin-bottom:7px;}}#modal-global-contact-us .contact-form .info-zone_contact_cell i svg path{fill:var(--colorTxt);}#modal-global-contact-us .contact-form .info-zone_contact_cell div{padding:0;}#modal-global-contact-us .contact-form .info-zone_contact_cell .contact_title{line-height:1;margin-bottom:5px;}#modal-global-contact-us .contact-form .info-zone_contact_link{color:var(--colorTxt);}@media (max-width: 560px){#modal-global-contact-us .contact-form .info-zone .type_user:nth-of-type(2){margin-bottom:58px;}}@media (max-width: 560px){#modal-global-contact-us .contact-form .hours_box{margin-bottom:52px;}}#modal-global-contact-us .contact-form .socials_zone{padding-left:45px;}@media (max-width: 560px){#modal-global-contact-us .contact-form .socials_zone{padding-left:0;}}#modal-global-contact-us .contact-form .socials_zone li{margin-bottom:10px;}#modal-global-contact-us .contact-form .socials_zone li:not(:last-child){padding-right:34px;}@media (max-width: 560px){#modal-global-contact-us .contact-form .socials_zone li:not(:last-child){padding-right:12px;}}#modal-global-contact-us .contact-form .success-message.success{margin-top:15px;color:var(--colorTxt);position:absolute;}#modal-global-contact-us .contact-form .success-message.hide{opacity:0;}#modal-global-contact-us .contact-form.one_contact .info-zone .type_user{margin-bottom:73px;}@media (max-width: 768px){#modal-global-contact-us .contact-form.one_contact .info-zone .type_user{margin-bottom:51px;}}@media (max-width: 560px){#modal-global-contact-us .contact-form.one_contact .info-zone .type_user{margin-bottom:40px;}}#modal-global-contact-us .contact-form.one_contact .hours_box{margin-bottom:38px;}#modal-global-contact-us .contact-form.no_icon .info-zone_contact_cell{padding-left:0;}#modal-global-contact-us .contact-form.no_icon .info-zone_contact_cell i{display:none;}#modal-global-contact-us .contact-form.no_icon .socials_zone{padding-left:0;}#modal-global-contact-us .contact-form .pre-line{white-space:pre-line;}#modal-global-contact-us .lp-input-group{margin-bottom:40px;}#modal-global-contact-us .lp-input-group.m16{margin-bottom:16px;}#modal-global-contact-us .lp-disclaimer{margin-top:0;}#modal-global-contact-us .lp-input{border-color:#ffffff;}#modal-global-contact-us .lp-input:focus,#modal-global-contact-us .lp-input:active{border-color:#5e5e5e;}nav{color:#fff;-webkit-transition:0.2s -webkit-transform ease;transition:0.2s transform ease;z-index:102;}nav.scroll .logo .logo__img.light{display:block;}nav.scroll .logo .logo__img.dark{display:none;}nav .header{height:100px;-webkit-transform:translateY(24px);-moz-transform:translateY(24px);-ms-transform:translateY(24px);transform:translateY(24px);}@media (max-width: 768px){nav .header{-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);}}nav .header .container{max-width:1440px;padding:0 15px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:100%;}@media (max-width: 1024px){nav .header .container{padding:0 15px;}}nav .header .navbar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;min-height:70px;padding:8px 0 7px;width:100%;}nav .header .logo{z-index:911;position:relative;margin-right:10px;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}nav .header .logo a{overflow:hidden;display:inline-block;}nav .header .logo img{max-width:100%;max-height:52px;vertical-align:top;object-fit:contain;}@media (max-width: 1024px){nav .header .logo img{max-height:50px;}}nav .header .logo img.dark{display:none;}@media(max-width: 1024px){nav .header .logo img.dark{display:none!important;}}nav .header .logo img.light{display:block;}@media(max-width: 1024px){nav .header .logo img.light{display:inline-block!important;}}nav .header .logo__link{-webkit-animation-duration:1s;animation-duration:1s;overflow:hidden;}nav .header .logo__img.light{display:block;}nav .header .logo__img.dark{display:none;}nav .header .navigation{margin-left:auto;color:inherit;}@media (max-width: 1024px){nav .header .navigation{display:none;}}nav .header .navigation ul{position:relative;list-style-type:none;padding-left:0;margin-bottom:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}nav .header .navigation ul li a span,nav .header .navigation ul li button span{position:relative;white-space:nowrap;}nav .header .navigation ul li a span:after,nav .header .navigation ul li button span:after{content:'';position:absolute;display:block;height:1px;background-color:#c6c6c6;width:0;bottom:0;left:0;-webkit-transition:all .2s ease;transition:all .2s ease;}nav .header .navigation ul li a:hover span:after,nav .header .navigation ul li button:hover span:after{width:100%;-webkit-transition:all .2s ease;transition:all .2s ease;}nav .header .navigation__item{padding:0;margin:0;}nav .header .navigation__link{display:block;padding:12px 13px;color:inherit;position:relative;font-size:13px;line-height:1.08;font-weight:700;letter-spacing:1.5px;background-color:transparent;border:none;cursor:pointer;text-align:left;text-transform:uppercase;}@media (max-width: 1280px){nav .header .navigation__link{padding:19px 10px;font-size:11.5px;}}nav .header .navigation__link .sub-nav-container .navigation__link:hover{background:#000000;}nav .header .navigation .sub-nav{position:absolute;bottom:0;padding:0;opacity:0;visibility:hidden;-webkit-transition:all .2s ease;transition:all .2s ease;-webkit-transform:translate(0, calc(100% + -10px));-moz-transform:translate(0, calc(100% + -10px));-ms-transform:translate(0, calc(100% + -10px));transform:translate(0, calc(100% + -10px));}nav .header .navigation .sub-nav ul{margin:0;padding:12px 0;display:block;background-color:rgba(26, 26, 26, .75);max-width:300px;}nav .header .navigation .sub-nav__item{position:relative;display:block;margin:0;text-align:left;}nav .header .navigation .sub-nav__item:last-child{border-bottom-color:transparent;}nav .header .navigation .sub-nav__link{display:block;max-width:300px;color:#ffffff;margin:0;line-height:1;letter-spacing:1.5px;padding:19px 13px;-webkit-transition:all .2s ease;transition:all .2s ease;}nav .header .navigation .sub-nav.visible{opacity:1;visibility:visible;-webkit-transform:translate(0, 100%);-moz-transform:translate(0, 100%);-ms-transform:translate(0, 100%);transform:translate(0, 100%);}nav .header .navigation .sub-nav.visible+.navigation__link{background:#000000;}nav .header .hamburger{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border:none;padding:28px 13px;background-color:transparent;color:inherit;vertical-align:middle;cursor:pointer;outline:none;z-index:915;opacity:1;}nav .header .hamburger__bars{position:relative;display:block;width:26px;height:2px;background-color:currentColor;-webkit-transition:0.2s -webkit-transform ease;transition:0.2s transform ease;}nav .header .hamburger__bars:before,nav .header .hamburger__bars:after{content:'';display:block;width:26px;height:2px;background-color:currentColor;position:absolute;left:0;top:0;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-webkit-transition:0.2s -webkit-transform ease;transition:0.2s transform ease;}nav .header .hamburger__bars:before{-webkit-transform:translateY(-9px);-moz-transform:translateY(-9px);-ms-transform:translateY(-9px);transform:translateY(-9px);}nav .header .hamburger__bars:after{-webkit-transform:translateY(9px);-moz-transform:translateY(9px);-ms-transform:translateY(9px);transform:translateY(9px);}nav .header .hamburger:hover{text-shadow:.5px 0 0,-.5px 0 0;}nav .header .hamburger:hover .hamburger__bars:before{-webkit-transform:translateY(-7px);-moz-transform:translateY(-7px);-ms-transform:translateY(-7px);transform:translateY(-7px);}nav .header .hamburger:hover .hamburger__bars:after{-webkit-transform:translateY(7px);-moz-transform:translateY(7px);-ms-transform:translateY(7px);transform:translateY(7px);}nav .header .hamburger.active .hamburger__bars{-webkit-transform:rotate(135deg);-moz-transform:rotate(135deg);-ms-transform:rotate(135deg);transform:rotate(135deg);opacity:0;}nav .header .hamburger.active .hamburger__bars:before{display:none;}nav .header .hamburger.active .hamburger__bars:after{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg);}nav .content-container{-webkit-transition:0.2s all ease;transition:0.2s all ease;}nav.scroll .content-container,nav .scroll .content-container{-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);}nav.scroll .content-container .navigation__link,nav .scroll .content-container .navigation__link{visibility:visible!important;}nav.scroll .content-container .navigation .sub-nav,nav .scroll .content-container .navigation .sub-nav{-webkit-transform:translate(0, calc(100% + -10px));-moz-transform:translate(0, calc(100% + -10px));-ms-transform:translate(0, calc(100% + -10px));transform:translate(0, calc(100% + -10px));}nav.scroll .content-container .navigation .sub-nav ul,nav .scroll .content-container .navigation .sub-nav ul{padding:0;}nav.scroll .content-container .navigation .sub-nav.visible,nav .scroll .content-container .navigation .sub-nav.visible{opacity:1;visibility:visible;-webkit-transform:translate(0, calc(100% + 23px));-moz-transform:translate(0, calc(100% + 23px));-ms-transform:translate(0, calc(100% + 23px));transform:translate(0, calc(100% + 23px));}nav .dark-opening{background-color:rgb(26, 26, 26)!important;}nav nav.dark-opening .header{margin-top:0;}nav #ctaShowButton,nav #ctaMessage{display:none!important;}nav #ctaShowButton{display:none;opacity:0;pointer-events:none;}nav .search{cursor:pointer;}nav .search svg{display:block;}nav .buttons-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}body>div.sidemenu{background-color:rgba(255, 255, 255, 0.8);color:rgba(3, 48, 75, 1);--fontColor:rgba(3, 48, 75, 1);--fontColor_H:203;--fontColor_S:92%;--fontColor_L:15%;--fontColor_A:1;--fontColor_darkenDir:1;--bgColor:rgba(255, 255, 255, 0.8);--bgColor_H:0;--bgColor_S:0%;--bgColor_L:100%;--bgColor_A:0.8;--bgColor_darkenDir:-1;}body>div.sidemenu{width:auto!important;left:auto!important;right:-100%;top:0;background-color:transparent;-webkit-transition:right .3s;transition:right .3s;display:block;}body>div.sidemenu:not(.visible){pointer-events:none;visibility:hidden;}body>div.sidemenu.visible{right:0;}body>div.sidemenu .sidebar{position:relative;width:400px;height:100vh;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;padding-top:40px;padding-bottom:100px;background-color:var(--bgColor, #fff);color:var(--fontColor, #000);font-family:var(--global-primary-font-family);font-size:21px;line-height:1.333333;letter-spacing:.5px;-webkit-transition:all .3s ease-in;transition:all .3s ease-in;}@media (max-width: 767px){body>div.sidemenu .sidebar{width:270px;font-size:18px;}}body>div.sidemenu .sidebar__content{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;height:100%;width:100%;padding-left:40px;padding-right:40px;text-align:center;overflow-y:auto;}@media (max-width: 767px){body>div.sidemenu .sidebar__content{-webkit-box-pack:start;-ms-flex-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start;padding-left:20px;padding-right:20px;}}body>div.sidemenu .sidebar__close{position:absolute;right:30px;top:30px;display:inline-block;width:38px;height:38px;padding:10px;border:none;border-radius:0;background:transparent;color:inherit;z-index:1;cursor:pointer;}body>div.sidemenu .sidebar__close:before,body>div.sidemenu .sidebar__close:after{content:'';display:block;width:22px;height:2px;background-color:currentColor;position:absolute;left:50%;top:50%;}body>div.sidemenu .sidebar__close:before{-webkit-transform:translate(-50%, -50%) rotate(45deg);-moz-transform:translate(-50%, -50%) rotate(45deg);-ms-transform:translate(-50%, -50%) rotate(45deg);transform:translate(-50%, -50%) rotate(45deg);}body>div.sidemenu .sidebar__close:after{-webkit-transform:translate(-50%, -50%) rotate(-45deg);-moz-transform:translate(-50%, -50%) rotate(-45deg);-ms-transform:translate(-50%, -50%) rotate(-45deg);transform:translate(-50%, -50%) rotate(-45deg);}@media (max-width: 767px){body>div.sidemenu .sidebar__close{right:10px;top:10px;}}body>div.sidemenu .sidebar__close:focus{outline:none;}body>div.sidemenu .sidebar__nav{list-style:none;padding:0;margin:auto 0;}body>div.sidemenu .sidebar__nav-item{margin:0;padding-top:4px;padding-bottom:4px;border-bottom:1px solid hsla(
      var(--bgColor_H, 0),
      var(--bgColor_S, 0%),
      calc(50% + (var(--bgColor_L, 100%) - 50%) * 0.9),
      var(--bgColor_A, 1)
    );}body>div.sidemenu .sidebar__nav-link{display:inline-block;padding:10px;border:none;border-radius:0;background:transparent;text-transform:none;-webkit-transition:all .25s;transition:all .25s;cursor:pointer;color:inherit;}body>div.sidemenu .sidebar__nav-link:focus{outline:none;}body>div.sidemenu .sidebar__subnav{list-style:none;padding:4px 0 10px;margin:0;font-size:17px;}@media (max-width: 767px){body>div.sidemenu .sidebar__subnav{font-size:14px;letter-spacing:.3px;}}body>div.sidemenu .sidebar__subnav-item{margin-bottom:10px;}body>div.sidemenu .sidebar__subnav-item:last-child{margin-bottom:0;}body>div.sidemenu .sidebar__subnav-link{display:inline-block;padding:0;border:none;border-radius:0;background:transparent;text-transform:none;opacity:.7;-webkit-transition:all .25s;transition:all .25s;cursor:pointer;color:inherit;}body>div.sidemenu .sidebar__subnav-link:focus{outline:none;}body>div.sidemenu .sub-nav{visibility:hidden;opacity:0;max-height:0;-webkit-transition:all .3s;transition:all .3s;}body>div.sidemenu .sub-nav.visible{display:block;visibility:visible;opacity:1;max-height:100vh;}body>div.sidemenu .sub-nav.visible+.main-nav{color:#7a7a7a;}body>div.sidemenu .sub-nav.visible+.main-nav:after{margin-left:40px;border-bottom:2px solid var(--fontColor, #7a7a7a);border-right:2px solid var(--fontColor, #7a7a7a);}body>div.sidemenu .sub-nav-container{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;}body>div.sidemenu .sub-nav-container:hover .main-nav:after{border-bottom:2px solid var(--fontColor, #7a7a7a);border-right:2px solid var(--fontColor, #7a7a7a);}body>div.sidemenu .sub-nav-container .main-nav{position:relative;display:inline-block;}body>div.sidemenu .sub-nav-container .main-nav:after{content:'';display:inline-block;position:relative;width:8px;height:8px;margin-left:25px;-webkit-transform:rotate(45deg) translateX(-100%);-moz-transform:rotate(45deg) translateX(-100%);-ms-transform:rotate(45deg) translateX(-100%);transform:rotate(45deg) translateX(-100%);border-bottom:2px solid var(--fontColor, #000000);border-right:2px solid var(--fontColor, #000000);top:0;bottom:auto;left:auto;-webkit-transition:0.5s all ease;transition:0.5s all ease;background-color:transparent;}body>div.sidemenu #main-section .sidebar{-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0);}footer{background-color:rgba(3, 48, 75, 1);color:rgba(255, 255, 255, 1);--fontColor:rgba(255, 255, 255, 1);--fontColor_H:0;--fontColor_S:0%;--fontColor_L:100%;--fontColor_A:1;--fontColor_darkenDir:-1;--bgColor:rgba(3, 48, 75, 1);--bgColor_H:203;--bgColor_S:92%;--bgColor_L:15%;--bgColor_A:1;--bgColor_darkenDir:1;--greyColor:hsla(
var(--fontColor_H),
var(--fontColor_S),
calc(var(--fontColor_L) + (50% - var(--fontColor_L)) * 0.445),
var(--fontColor_A));}footer .redesign .inp--dark-bg input{color:var(--fontColor);border-color:hsla(
      var(--fontColor_H),
      var(--fontColor_S),
      calc(var(--fontColor_L) + (50% - var(--fontColor_L)) * 0.445),
      var(--fontColor_A));}footer .redesign .inp--dark-bg input:hover{border-color:var(--fontColor);}footer .redesign .inp+.inp{margin-top:24px;}footer .redesign .btn--primary-light{border-color:var(--fontColor);color:var(--fontColor);}footer .redesign .btn--primary-light:hover{background-color:var(--fontColor);color:var(--bgColor);}footer.is-background-color-light .redesign .btn--primary-light{border-width:1px;}footer .redesign .socials--grey{-webkit-box-pack:end;-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end;}footer .redesign .socials--grey .socials__link{background-color:hsla(
      var(--bgColor_H),
      var(--bgColor_S),
      calc(var(--bgColor_L) + (50% - var(--bgColor_L)) * 0.15),
      var(--bgColor_A));color:var(--greyColor);}footer .redesign .socials--grey .socials__link svg{fill:var(--greyColor);}footer .redesign .socials--grey .socials__link:hover{background-color:hsla(
        var(--bgColor_H),
        var(--bgColor_S),
        calc(var(--bgColor_L) + (50% - var(--bgColor_L)) * 0.4),
        var(--bgColor_A));color:var(--fontColor);}footer .redesign .socials--grey .socials__link:hover svg{fill:var(--fontColor);}footer .redesign.footer .grey-text{color:var(--fontColor);}footer .footer{position:relative;padding-top:60px;padding-bottom:30px;}@media (max-width: 560px){footer .footer{padding-top:10px;}}@media (max-width: 500px){footer .footer{padding-bottom:70px;}}footer .footer .text_content_wrap p{margin-bottom:15px;}footer .footer .text_content_wrap p:last-of-type{margin-bottom:0;}footer .footer .container{max-width:1440px;}@media (max-width: 768px){footer .footer .container{padding-left:25px;padding-right:25px;}}@media (max-width: 560px){footer .footer .container{padding-left:20px;padding-right:20px;}}footer .footer h3{margin:0 0 15px 0;}footer .footer h5{text-transform:capitalize;}footer .footer .info-wrap{margin-bottom:40px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;}footer .footer .info-wrap .agent_box{width:70%;}@media (max-width: 1280px){footer .footer .info-wrap .agent_box{width:50%;}}@media (max-width: 768px){footer .footer .info-wrap .agent_box{width:100%;}}footer .footer .info-wrap .newsletter_box{width:30%;}@media (max-width: 1280px){footer .footer .info-wrap .newsletter_box{width:50%;}}@media (max-width: 768px){footer .footer .info-wrap .newsletter_box{width:100%;}}footer .footer .info-wrap .newsletter_box--padding{padding-top:44px;}@media (max-width: 768px){footer .footer .info-wrap .newsletter_box--padding{padding-top:0;}}footer .footer .info-wrap .newsletter_box .contact_title{margin-bottom:13px;line-height:1.6;}@media (max-width: 768px){footer .footer .info-wrap .newsletter_box .info-wrap-contact_cell{margin-bottom:0;padding-left:0;}}@media (max-width: 768px){footer .footer .info-wrap .newsletter_box .icon_text{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:22px;position:relative;}footer .footer .info-wrap .newsletter_box .icon_text i{position:relative;width:30px;margin-right:20px;}footer .footer .info-wrap .newsletter_box .icon_text .contact_title{margin-bottom:0;}}@media (max-width: 768px){footer .footer .info-wrap .newsletter_box .info-wrap-contact_zone{margin-bottom:0;}}footer .footer .info-wrap-contact{position:relative;}footer .footer .info-wrap-contact_zone{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;margin-bottom:39px;}@media (max-width: 768px){footer .footer .info-wrap-contact_zone{margin-bottom:21px;}footer .footer .info-wrap-contact_zone:last-child{margin-bottom:51px;}}footer .footer .info-wrap-contact_zone i{position:absolute;left:0;display:block;}footer .footer .info-wrap-contact_zone i svg path{fill:currentColor;}footer .footer .info-wrap-contact_zone h4{margin:0 0 13px 0;width:100%;}footer .footer .info-wrap-contact_cell{position:relative;padding-left:50px;width:400px;font-size:14px;text-transform:uppercase;font-weight:bold;letter-spacing:1.5px;}@media (max-width: 1280px){footer .footer .info-wrap-contact_cell:first-of-type{margin-bottom:21px;}}footer .footer .info-wrap-contact_cell .contact_title{line-height:1;margin-bottom:5px;}footer .footer .info-wrap-contact_link{color:var(--greyColor);position:relative;}@media (max-width: 560px){footer .footer .info-wrap-contact_link{letter-spacing:0;}}footer .footer .hvr_animation{position:relative;-webkit-text-decoration:none!important;text-decoration:none!important;}footer .footer .hvr_animation:after{content:'';position:absolute;left:0;bottom:0;width:0%;height:1px;background:var(--greyColor);-webkit-transition:.3s linear;transition:.3s linear;}footer .footer .hvr_animation:hover:after{width:100%;}footer .footer .hvr_animation.underlined:after{width:100%;}footer .footer .hvr_animation.underlined:hover:after{width:0%;}footer .footer .form-content{padding:0!important;}footer .footer .form-content label{color:var(--fontColor);text-transform:none;letter-spacing:1;}footer .footer .form-content input{padding:2px 24px 2px 0;}footer .footer .form-content .subscribe_btn{margin-top:20px;position:relative;}footer .footer .form-content .subscribe_btn i{font-size:18px;position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%, -50%);-moz-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);opacity:0;}footer .footer .form-content.success i{opacity:1;}footer .footer .form-content.success .subscribe_btn span{opacity:0;}footer .footer .form-content.success .hide{opacity:0;}footer .footer .form-content.success .hide +span{opacity:1;}footer .footer .text_footer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;margin-bottom:39px;}@media (max-width: 1280px){footer .footer .text_footer{-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;}}@media (max-width: 560px){footer .footer .text_footer{text-align:center;}}footer .footer .text_footer p{white-space:normal;}footer .footer .text_footer .images_box{max-width:186px;width:100%;margin-right:43px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}@media (max-width: 560px){footer .footer .text_footer .images_box{margin:0 auto 20px auto;}}@media (max-width: 1280px){footer .footer .text_footer .img_size{margin-bottom:20px;}}@media (max-width: 560px){footer .footer .text_footer .img_size{margin-bottom:0;}}footer .footer .text_footer .img_size img{width:100%;height:100%;object-fit:contain;}footer .footer .first_text_footer .img_size{width:100%;height:63px;}footer .footer .first_text_footer .img_size img{width:100%;height:100%;object-fit:contain;}@media (max-width: 768px){footer .footer .first_text_footer{margin-bottom:51px;}}footer .footer .second_text_footer .first_img_size{width:45px;height:45px;margin-right:15px;}footer .footer .second_text_footer .second_img_size{width:100px;height:45px;}@media (max-width: 560px){footer .footer .second_text_footer{margin-bottom:21px;}}footer .footer .info-privacy{padding-top:45px;padding-bottom:30px;border-top:1px solid hsla(
        var(--bgColor_H),
        var(--bgColor_S),
        calc(var(--bgColor_L) + (50% - var(--bgColor_L)) * 0.55),
        var(--bgColor_A));}@media (max-width: 768px){footer .footer .info-privacy{padding-top:0;border-top:none;}}footer .footer .info-privacy__row{-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;}footer .footer .info-privacy .copy_zone{font-size:18px;}@media (min-width: 1350px){footer .footer .info-privacy .copy_zone{text-align:center;}}@media (min-width: 1281px){footer .footer .info-privacy .copy_zone{padding-top:8px;padding-bottom:8px;}}@media (max-width: 768px){footer .footer .info-privacy .copy_zone{text-align:center;margin-bottom:10px;padding-top:45px;border-top:1px solid hsla(
            var(--bgColor_H),
            var(--bgColor_S),
            calc(var(--bgColor_L) + (50% - var(--bgColor_L)) * 0.55),
            var(--bgColor_A));}}footer .footer .info-privacy .copy_zone a{color:var(--greyColor);}footer .footer .info-privacy .powered_zone{font-size:18px;}@media (min-width: 1281px){footer .footer .info-privacy .powered_zone{padding-top:8px;padding-bottom:8px;}}@media (max-width: 1280px){footer .footer .info-privacy .powered_zone{text-align:center;}}@media (max-width: 768px){footer .footer .info-privacy .powered_zone{text-align:center;margin-bottom:24px;}}footer .footer .info-privacy .powered_zone a{color:var(--greyColor);}@media (min-width: 1281px){footer .footer .info-privacy .socials_zone{-webkit-box-flex-wrap:nowrap;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;}}@media (max-width: 1280px){footer .footer .info-privacy .socials_zone{width:100%;margin-top:20px;-webkit-box-pack:start;-ms-flex-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start;}}@media (max-width: 768px){footer .footer .info-privacy .socials_zone{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;margin-top:0;margin-bottom:20px;}footer .footer .info-privacy .socials_zone li{padding:0 7px 10px 7px;}}footer .footer.one_contact .type_user{margin-bottom:73px;}@media (max-width: 768px){footer .footer.one_contact .type_user{margin-bottom:51px;}}footer .footer.no_newsletter h3{margin-bottom:46px;}footer .footer.no_newsletter .newsletter_box{display:none;}footer .footer.no_newsletter .info-wrap-contact{width:calc(70% + 230px);width:100%;padding-left:230px;}@media (max-width: 1200px){footer .footer.no_newsletter .info-wrap-contact{padding-left:0;}}@media (max-width: 768px){footer .footer.no_newsletter .info-wrap-contact{width:100%;}}@media (max-width: 1200px){footer .footer.no_newsletter .info-wrap-contact_cell{width:50%;}}@media (max-width: 768px){footer .footer.no_newsletter .info-wrap-contact_cell{width:100%;}}footer .footer.no_newsletter .info-wrap-contact h4{position:absolute;margin-top:-8px;left:0;max-width:200px;}@media (max-width: 1200px){footer .footer.no_newsletter .info-wrap-contact h4{position:relative;left:auto;max-width:100%;width:100%;margin-bottom:20px;margin-top:0;}}@media (max-width: 768px){footer .footer.no_newsletter .info-wrap-contact h4{position:relative;left:auto;max-width:100%;}}footer .footer.no_newsletter .info-wrap-contact_zone:first-of-type{margin-bottom:71px;}@media (max-width: 1200px){footer .footer.no_newsletter .info-wrap-contact_zone:first-of-type{margin-bottom:39px;}}@media (max-width: 768px){footer .footer.no_newsletter .info-wrap-contact_zone:first-of-type{margin-bottom:51px;}}footer .footer.no_newsletter .info-wrap-contact_zone:last-child{margin-bottom:0;}footer .footer.no_icon .info-wrap-contact_cell{padding-left:0;}footer .footer.no_icon .info-wrap-contact_cell i{display:none;}footer .footer.no-names .info-wrap-contact{padding-left:0;}footer .form-row{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;margin-left:-15px;margin-right:-15px;}@media (min-width: 1281px){footer .form-row{-webkit-box-flex-wrap:nowrap;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;}}@media (max-width: 900px){footer .form-row{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}}footer .form-col{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;padding-left:15px;padding-right:15px;}@media (min-width: 768px){footer .form-col{-webkit-flex:1 1 0;-ms-flex:1 1 0;flex:1 1 0;}}@media (min-width: 768px){footer .form-col--socials{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;}}@media (min-width: 1281px){footer .form-col--socials{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;}}@media (max-width: 768px){footer .form-col--socials{-webkit-order:-1;-ms-flex-order:-1;order:-1;}}@media (min-width: 1281px){footer .form-col--xl-auto{-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;}}footer .additional-links-separator{display:block;width:100%;height:0;overflow:hidden;}@media (min-width: 768px){footer .additional-links-separator{display:inline;width:auto;height:auto;}footer .additional-links-separator:before{content:"|";}}footer .h-pot{height:0;width:0;overflow:hidden;visibility:hidden;}footer .img-wrap{max-width:100px;width:100%;display:block;margin-right:20px;}@media (max-width: 900px){footer .img-wrap{margin-right:0;margin-bottom:10px;}}footer .img-wrap img{width:100%;object-fit:cover;}footer .powered-box{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;}@media (max-width: 900px){footer .powered-box{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}}footer .form-col--copyright{-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;margin:10px 0;}footer .luxury-link{white-space:nowrap;}footer .footer__disclaimers{padding-top:24px;padding-bottom:24px;}@media (max-width: 900px){footer .footer__disclaimers{text-align:center;}}body>div.mobile-contact-wrapper{z-index:200;position:relative;}body>div.mobile-contact-wrapper .lp-ico:before{content:'';width:1em;height:1em;background-color:currentColor;-webkit-background-size:cover;background-size:cover;display:block;-webkit-mask-position:center;-webkit-mask-position:center;mask-position:center;-webkit-mask-size:contain;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-transition:all .3s;transition:all .3s;}body>div.mobile-contact-wrapper .lp-ico-search:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='25' height='25' viewBox='0 0 25 25' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21.6231 21.3002L17.1372 16.8143M19.5606 10.9877C19.5606 15.5441 15.8669 19.2377 11.3106 19.2377C6.75421 19.2377 3.06055 15.5441 3.06055 10.9877C3.06055 6.43135 6.75421 2.73769 11.3106 2.73769C15.8669 2.73769 19.5606 6.43135 19.5606 10.9877Z' stroke='black' stroke-width='1.82813' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='25' height='25' viewBox='0 0 25 25' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21.6231 21.3002L17.1372 16.8143M19.5606 10.9877C19.5606 15.5441 15.8669 19.2377 11.3106 19.2377C6.75421 19.2377 3.06055 15.5441 3.06055 10.9877C3.06055 6.43135 6.75421 2.73769 11.3106 2.73769C15.8669 2.73769 19.5606 6.43135 19.5606 10.9877Z' stroke='black' stroke-width='1.82813' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='25' height='25' viewBox='0 0 25 25' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21.6231 21.3002L17.1372 16.8143M19.5606 10.9877C19.5606 15.5441 15.8669 19.2377 11.3106 19.2377C6.75421 19.2377 3.06055 15.5441 3.06055 10.9877C3.06055 6.43135 6.75421 2.73769 11.3106 2.73769C15.8669 2.73769 19.5606 6.43135 19.5606 10.9877Z' stroke='black' stroke-width='1.82813' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");}body>div.mobile-contact-wrapper .lp-ico-arrow-top:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='17' height='16' viewBox='0 0 17 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.8716 9.99976L8.87158 5.99976L4.87158 9.99976' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='17' height='16' viewBox='0 0 17 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.8716 9.99976L8.87158 5.99976L4.87158 9.99976' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='17' height='16' viewBox='0 0 17 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.8716 9.99976L8.87158 5.99976L4.87158 9.99976' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");}body>div.mobile-contact-wrapper .lp-ico-scroll-top:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21 3H3M12 21V7M12 7L5 14M12 7L19 14' stroke='white' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E ");-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21 3H3M12 21V7M12 7L5 14M12 7L19 14' stroke='white' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E ");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21 3H3M12 21V7M12 7L5 14M12 7L19 14' stroke='white' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E ");}body>div.mobile-contact-wrapper .lp-ico-close:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M17.5986 6.32617L5.59863 18.3262M5.59863 6.32617L17.5986 18.3262' stroke='white' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E ");-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M17.5986 6.32617L5.59863 18.3262M5.59863 6.32617L17.5986 18.3262' stroke='white' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E ");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M17.5986 6.32617L5.59863 18.3262M5.59863 6.32617L17.5986 18.3262' stroke='white' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E ");}body>div.mobile-contact-wrapper .lp-ico-phone:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M13.8699 6.57142C14.7459 6.74157 15.551 7.16808 16.1821 7.79637C16.8132 8.42465 17.2416 9.22612 17.4126 10.0982M13.8699 3C15.6899 3.20128 17.3871 4.01265 18.6827 5.3009C19.9784 6.58914 20.7955 8.27768 21 10.0893M10.4412 13.592C9.36357 12.5192 8.51264 11.3061 7.88843 10.0118C7.83474 9.90047 7.80789 9.84481 7.78726 9.77437C7.71397 9.52405 7.76662 9.21668 7.91909 9.00469C7.962 8.94504 8.01326 8.894 8.11578 8.79194C8.42933 8.47979 8.58611 8.32372 8.6886 8.16677C9.07515 7.57491 9.07515 6.81189 8.6886 6.22002C8.58611 6.06308 8.42933 5.90701 8.11578 5.59486L7.94101 5.42087C7.46438 4.94637 7.22607 4.70912 6.97012 4.58024C6.4611 4.32392 5.85996 4.32392 5.35093 4.58024C5.09499 4.70912 4.85667 4.94637 4.38004 5.42087L4.23867 5.56161C3.76367 6.03449 3.52617 6.27093 3.34478 6.59239C3.1435 6.94909 2.99878 7.5031 3.00001 7.91222C3.00111 8.28092 3.07295 8.53291 3.21664 9.03688C3.98881 11.7453 5.44574 14.3009 7.58743 16.4331C9.72911 18.5652 12.2963 20.0156 15.0168 20.7843C15.523 20.9274 15.7761 20.9989 16.1465 21C16.5575 21.0012 17.114 20.8571 17.4723 20.6568C17.7952 20.4762 18.0327 20.2397 18.5077 19.7669L18.649 19.6261C19.1257 19.1516 19.364 18.9144 19.4934 18.6596C19.7509 18.1528 19.7509 17.5544 19.4934 17.0476C19.364 16.7928 19.1257 16.5556 18.649 16.0811L18.4743 15.9071C18.1607 15.5949 18.0039 15.4388 17.8463 15.3368C17.2518 14.952 16.4853 14.952 15.8908 15.3368C15.7332 15.4388 15.5764 15.5949 15.2628 15.9071C15.1603 16.0091 15.1091 16.0602 15.0491 16.1029C14.8362 16.2547 14.5274 16.3071 14.276 16.2341C14.2052 16.2136 14.1493 16.1869 14.0375 16.1334C12.7374 15.512 11.5189 14.6648 10.4412 13.592Z' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M13.8699 6.57142C14.7459 6.74157 15.551 7.16808 16.1821 7.79637C16.8132 8.42465 17.2416 9.22612 17.4126 10.0982M13.8699 3C15.6899 3.20128 17.3871 4.01265 18.6827 5.3009C19.9784 6.58914 20.7955 8.27768 21 10.0893M10.4412 13.592C9.36357 12.5192 8.51264 11.3061 7.88843 10.0118C7.83474 9.90047 7.80789 9.84481 7.78726 9.77437C7.71397 9.52405 7.76662 9.21668 7.91909 9.00469C7.962 8.94504 8.01326 8.894 8.11578 8.79194C8.42933 8.47979 8.58611 8.32372 8.6886 8.16677C9.07515 7.57491 9.07515 6.81189 8.6886 6.22002C8.58611 6.06308 8.42933 5.90701 8.11578 5.59486L7.94101 5.42087C7.46438 4.94637 7.22607 4.70912 6.97012 4.58024C6.4611 4.32392 5.85996 4.32392 5.35093 4.58024C5.09499 4.70912 4.85667 4.94637 4.38004 5.42087L4.23867 5.56161C3.76367 6.03449 3.52617 6.27093 3.34478 6.59239C3.1435 6.94909 2.99878 7.5031 3.00001 7.91222C3.00111 8.28092 3.07295 8.53291 3.21664 9.03688C3.98881 11.7453 5.44574 14.3009 7.58743 16.4331C9.72911 18.5652 12.2963 20.0156 15.0168 20.7843C15.523 20.9274 15.7761 20.9989 16.1465 21C16.5575 21.0012 17.114 20.8571 17.4723 20.6568C17.7952 20.4762 18.0327 20.2397 18.5077 19.7669L18.649 19.6261C19.1257 19.1516 19.364 18.9144 19.4934 18.6596C19.7509 18.1528 19.7509 17.5544 19.4934 17.0476C19.364 16.7928 19.1257 16.5556 18.649 16.0811L18.4743 15.9071C18.1607 15.5949 18.0039 15.4388 17.8463 15.3368C17.2518 14.952 16.4853 14.952 15.8908 15.3368C15.7332 15.4388 15.5764 15.5949 15.2628 15.9071C15.1603 16.0091 15.1091 16.0602 15.0491 16.1029C14.8362 16.2547 14.5274 16.3071 14.276 16.2341C14.2052 16.2136 14.1493 16.1869 14.0375 16.1334C12.7374 15.512 11.5189 14.6648 10.4412 13.592Z' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M13.8699 6.57142C14.7459 6.74157 15.551 7.16808 16.1821 7.79637C16.8132 8.42465 17.2416 9.22612 17.4126 10.0982M13.8699 3C15.6899 3.20128 17.3871 4.01265 18.6827 5.3009C19.9784 6.58914 20.7955 8.27768 21 10.0893M10.4412 13.592C9.36357 12.5192 8.51264 11.3061 7.88843 10.0118C7.83474 9.90047 7.80789 9.84481 7.78726 9.77437C7.71397 9.52405 7.76662 9.21668 7.91909 9.00469C7.962 8.94504 8.01326 8.894 8.11578 8.79194C8.42933 8.47979 8.58611 8.32372 8.6886 8.16677C9.07515 7.57491 9.07515 6.81189 8.6886 6.22002C8.58611 6.06308 8.42933 5.90701 8.11578 5.59486L7.94101 5.42087C7.46438 4.94637 7.22607 4.70912 6.97012 4.58024C6.4611 4.32392 5.85996 4.32392 5.35093 4.58024C5.09499 4.70912 4.85667 4.94637 4.38004 5.42087L4.23867 5.56161C3.76367 6.03449 3.52617 6.27093 3.34478 6.59239C3.1435 6.94909 2.99878 7.5031 3.00001 7.91222C3.00111 8.28092 3.07295 8.53291 3.21664 9.03688C3.98881 11.7453 5.44574 14.3009 7.58743 16.4331C9.72911 18.5652 12.2963 20.0156 15.0168 20.7843C15.523 20.9274 15.7761 20.9989 16.1465 21C16.5575 21.0012 17.114 20.8571 17.4723 20.6568C17.7952 20.4762 18.0327 20.2397 18.5077 19.7669L18.649 19.6261C19.1257 19.1516 19.364 18.9144 19.4934 18.6596C19.7509 18.1528 19.7509 17.5544 19.4934 17.0476C19.364 16.7928 19.1257 16.5556 18.649 16.0811L18.4743 15.9071C18.1607 15.5949 18.0039 15.4388 17.8463 15.3368C17.2518 14.952 16.4853 14.952 15.8908 15.3368C15.7332 15.4388 15.5764 15.5949 15.2628 15.9071C15.1603 16.0091 15.1091 16.0602 15.0491 16.1029C14.8362 16.2547 14.5274 16.3071 14.276 16.2341C14.2052 16.2136 14.1493 16.1869 14.0375 16.1334C12.7374 15.512 11.5189 14.6648 10.4412 13.592Z' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");}body>div.mobile-contact-wrapper .lp-ico-sms:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21 11.5C21.0034 12.8199 20.6951 14.1219 20.1 15.3C19.3944 16.7117 18.3098 17.8992 16.9674 18.7293C15.6251 19.5594 14.0782 19.9994 12.5 20C11.1801 20.0034 9.87812 19.6951 8.7 19.1L3 21L4.9 15.3C4.30493 14.1219 3.99656 12.8199 4 11.5C4.00061 9.92176 4.44061 8.37485 5.27072 7.03255C6.10083 5.69025 7.28825 4.60557 8.7 3.9C9.87812 3.30493 11.1801 2.99656 12.5 3H13C15.0843 3.11499 17.053 3.99476 18.5291 5.47086C20.0052 6.94695 20.885 8.91565 21 11V11.5Z' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21 11.5C21.0034 12.8199 20.6951 14.1219 20.1 15.3C19.3944 16.7117 18.3098 17.8992 16.9674 18.7293C15.6251 19.5594 14.0782 19.9994 12.5 20C11.1801 20.0034 9.87812 19.6951 8.7 19.1L3 21L4.9 15.3C4.30493 14.1219 3.99656 12.8199 4 11.5C4.00061 9.92176 4.44061 8.37485 5.27072 7.03255C6.10083 5.69025 7.28825 4.60557 8.7 3.9C9.87812 3.30493 11.1801 2.99656 12.5 3H13C15.0843 3.11499 17.053 3.99476 18.5291 5.47086C20.0052 6.94695 20.885 8.91565 21 11V11.5Z' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21 11.5C21.0034 12.8199 20.6951 14.1219 20.1 15.3C19.3944 16.7117 18.3098 17.8992 16.9674 18.7293C15.6251 19.5594 14.0782 19.9994 12.5 20C11.1801 20.0034 9.87812 19.6951 8.7 19.1L3 21L4.9 15.3C4.30493 14.1219 3.99656 12.8199 4 11.5C4.00061 9.92176 4.44061 8.37485 5.27072 7.03255C6.10083 5.69025 7.28825 4.60557 8.7 3.9C9.87812 3.30493 11.1801 2.99656 12.5 3H13C15.0843 3.11499 17.053 3.99476 18.5291 5.47086C20.0052 6.94695 20.885 8.91565 21 11V11.5Z' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");}body>div.mobile-contact-wrapper .lp-ico-email:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21.5 18L14.8571 12M9.14286 12L2.50003 18M2 7L10.1649 12.7154C10.8261 13.1783 11.1567 13.4097 11.5163 13.4993C11.8339 13.5785 12.1661 13.5785 12.4837 13.4993C12.8433 13.4097 13.1739 13.1783 13.8351 12.7154L22 7M6.8 20H17.2C18.8802 20 19.7202 20 20.362 19.673C20.9265 19.3854 21.3854 18.9265 21.673 18.362C22 17.7202 22 16.8802 22 15.2V8.8C22 7.11984 22 6.27976 21.673 5.63803C21.3854 5.07354 20.9265 4.6146 20.362 4.32698C19.7202 4 18.8802 4 17.2 4H6.8C5.11984 4 4.27976 4 3.63803 4.32698C3.07354 4.6146 2.6146 5.07354 2.32698 5.63803C2 6.27976 2 7.11984 2 8.8V15.2C2 16.8802 2 17.7202 2.32698 18.362C2.6146 18.9265 3.07354 19.3854 3.63803 19.673C4.27976 20 5.11984 20 6.8 20Z' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21.5 18L14.8571 12M9.14286 12L2.50003 18M2 7L10.1649 12.7154C10.8261 13.1783 11.1567 13.4097 11.5163 13.4993C11.8339 13.5785 12.1661 13.5785 12.4837 13.4993C12.8433 13.4097 13.1739 13.1783 13.8351 12.7154L22 7M6.8 20H17.2C18.8802 20 19.7202 20 20.362 19.673C20.9265 19.3854 21.3854 18.9265 21.673 18.362C22 17.7202 22 16.8802 22 15.2V8.8C22 7.11984 22 6.27976 21.673 5.63803C21.3854 5.07354 20.9265 4.6146 20.362 4.32698C19.7202 4 18.8802 4 17.2 4H6.8C5.11984 4 4.27976 4 3.63803 4.32698C3.07354 4.6146 2.6146 5.07354 2.32698 5.63803C2 6.27976 2 7.11984 2 8.8V15.2C2 16.8802 2 17.7202 2.32698 18.362C2.6146 18.9265 3.07354 19.3854 3.63803 19.673C4.27976 20 5.11984 20 6.8 20Z' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21.5 18L14.8571 12M9.14286 12L2.50003 18M2 7L10.1649 12.7154C10.8261 13.1783 11.1567 13.4097 11.5163 13.4993C11.8339 13.5785 12.1661 13.5785 12.4837 13.4993C12.8433 13.4097 13.1739 13.1783 13.8351 12.7154L22 7M6.8 20H17.2C18.8802 20 19.7202 20 20.362 19.673C20.9265 19.3854 21.3854 18.9265 21.673 18.362C22 17.7202 22 16.8802 22 15.2V8.8C22 7.11984 22 6.27976 21.673 5.63803C21.3854 5.07354 20.9265 4.6146 20.362 4.32698C19.7202 4 18.8802 4 17.2 4H6.8C5.11984 4 4.27976 4 3.63803 4.32698C3.07354 4.6146 2.6146 5.07354 2.32698 5.63803C2 6.27976 2 7.11984 2 8.8V15.2C2 16.8802 2 17.7202 2.32698 18.362C2.6146 18.9265 3.07354 19.3854 3.63803 19.673C4.27976 20 5.11984 20 6.8 20Z' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");}body>div.mobile-contact-wrapper a{-webkit-text-decoration:none;text-decoration:none;}body>div.mobile-contact-wrapper .btn-holder{bottom:-50px;left:19px;position:fixed;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;gap:13px;opacity:0;-webkit-transition:all .3s;transition:all .3s;}@media (max-width: 1024px){body>div.mobile-contact-wrapper .btn-holder{right:19px;padding:0 48px;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;}}body>div.mobile-contact-wrapper .btn-holder.visible{bottom:28px;opacity:1;}body>div.mobile-contact-wrapper .search-btn{width:48px;height:48px;border-radius:999px;font-size:0;line-height:0;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-transition:all .3s;transition:all .3s;padding:12px;color:#141414;background:#fff;}@media (max-width: 1024px){body>div.mobile-contact-wrapper .search-btn{position:absolute;left:0;bottom:0;}}body>div.mobile-contact-wrapper .search-btn:before{width:24px;height:24px;}body>div.mobile-contact-wrapper .connect-btn{height:48px;padding:0 24px;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:4px;text-transform:uppercase;border-radius:25px;color:var(--pillTextColor);background:var(--pillBackgroundColor);border:1px solid rgba(255, 255, 255, 0.2);cursor:pointer;font-size:10px;font-style:normal;font-weight:500;line-height:16px;letter-spacing:0.4px;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-webkit-transition:all .4s;transition:all .4s;box-shadow:0 0 0 0 rgba(255, 255, 255, 0.2);-webkit-animation:pulsate 2s ease infinite;animation:pulsate 2s ease infinite;}body>div.mobile-contact-wrapper .connect-btn:before{width:16px;height:16px;}body>div.mobile-contact-wrapper .pop-up{display:none;position:fixed;bottom:0;left:0;width:100%;-webkit-transition:all .3s;transition:all .3s;border-radius:16px 16px 0 0;color:var(--textColor);background:var(--backgroundColor);}@media (min-width: 1025px){body>div.mobile-contact-wrapper .pop-up{max-width:637px;border-radius:16px;bottom:28px;left:19px;}}body>div.mobile-contact-wrapper .pop-up .lp-container{padding-top:24px;padding-bottom:24px;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;}@media (min-width: 1025px){body>div.mobile-contact-wrapper .pop-up .lp-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding-top:40px;padding-bottom:40px;min-height:450px;padding-left:56px;padding-right:56px;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}}body>div.mobile-contact-wrapper .pop-up .close-btn{width:44px;height:44px;background-color:transparent;border-color:transparent;display:block;margin:24px auto 0;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:var(--textColor);cursor:pointer;padding:10px;border:0;}body>div.mobile-contact-wrapper .pop-up .close-btn:before{width:24px;height:24px;}@media (min-width: 1025px){body>div.mobile-contact-wrapper .pop-up .close-btn{position:absolute;top:14px;right:12px;margin:0;}}body>div.mobile-contact-wrapper .pop-up .icon-btn{width:44px;height:44px;border-radius:999px;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-left:8px;color:var(--textColor);position:relative;}body>div.mobile-contact-wrapper .pop-up .icon-btn:after{position:absolute;bottom:0;width:100%;left:0;border-radius:999px;height:100%;content:'';border:solid 1px var(--textColor);opacity:.3;}body>div.mobile-contact-wrapper .pop-up .icon-btn:before{width:24px;height:24px;}body>div.mobile-contact-wrapper .success-block{display:none;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}@media (min-width: 1025px){body>div.mobile-contact-wrapper .success-block{-webkit-align-items:flex-start;-webkit-box-align:flex-start;-ms-flex-align:flex-start;align-items:flex-start;}}body>div.mobile-contact-wrapper .success-block .lp-btn{margin-top:24px;}body>div.mobile-contact-wrapper .contact-form{margin:0;}@media (max-width: 1024px){body>div.mobile-contact-wrapper .contact-form__item{width:100%;}}body>div.mobile-contact-wrapper .contact-form__item .lp-input{width:100%;}body>div.mobile-contact-wrapper .contact-form__item .is-placeholder{color:#818181;}body>div.mobile-contact-wrapper .contact-form__item+.contact-form__item{margin-top:16px;}body>div.mobile-contact-wrapper .contact-form.show-success .contact-form__container,body>div.mobile-contact-wrapper .contact-form.success .contact-form__container{display:none;}body>div.mobile-contact-wrapper .contact-form.show-success .success-block,body>div.mobile-contact-wrapper .contact-form.success .success-block{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}body>div.mobile-contact-wrapper .contact-form .lp-disclaimer{margin-top:16px;}body>div.mobile-contact-wrapper .contact-form .lp-h3{margin-bottom:16px;}body>div.mobile-contact-wrapper .success-message{font-size:22px;}@-webkit-keyframes pulsate{0%{box-shadow:0 0 0 0 rgba(255, 255, 255, 0.2);}50%{box-shadow:0 0 4px 6px rgba(255, 255, 255, .5);}100%{box-shadow:0 0 12px 12px rgba(255, 255, 255, 0);}}
        </style>
    <style id="custom-style-css">.button-style-1{color:rgba(255, 255, 255, 1)!important;background-color:rgba(255, 255, 255, 0)!important;border-color:rgba(255, 255, 255, 1)!important;}.button-style-1:hover{color:rgba(3, 48, 75, 1)!important;background-color:rgba(255, 255, 255, 1)!important;border-color:#FFFFFF!important;}.social_icons-style-1 a{border-color:rgba(3, 48, 75, 1)!important;background-color:rgba(0, 0, 0, 0)!important;color:rgba(3, 48, 75, 1)!important;}.social_icons-style-1 a:hover{border-color:rgba(3, 48, 75, 1)!important;background-color:rgba(3, 48, 75, 1)!important;color:rgba(255,255,255,1)!important;}.social_icons-style-1 a i{color:inherit!important;}.social_icons-style-1 a svg,.social_icons-style-1 a svg path{fill:currentColor!important;}.pagination-style-1 li a{color:rgba(3, 48, 75, 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(3, 48, 75, 1)!important;border-color:rgba(3, 48, 75, 1)!important;}.pagination-style-1 li.active a{color:rgba(255, 255, 255, 1)!important;background-color:rgba(3, 48, 75, 1)!important;border-color:rgba(3, 48, 75, 1)!important;}.hyperlink-style-1{color:rgba(3, 48, 75, 1)!important;}.hyperlink-style-1:hover{color:rgba(204, 204, 204, 1)!important;}.hyperlink-style-2{color:rgba(255, 255, 255, 1)!important;}.hyperlink-style-2:hover{color:rgba(204, 204, 204, 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(3, 48, 75, 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(3, 48, 75, 1)!important;background-color:rgba(255, 255, 255, 1)!important;border-color:rgba(255,255,255,1)!important;}.social_icons-style-2 a{border-color:rgba(255, 255, 255, 1)!important;background-color:rgba(0, 0, 0, 0)!important;color:rgba(255, 255, 255, 1)!important;}.social_icons-style-2 a:hover{border-color:rgba(255, 255, 255, 1)!important;background-color:rgba(255, 255, 255, 1)!important;color:rgba(3, 48, 75, 1)!important;}.social_icons-style-2 a i{color:inherit!important;}.social_icons-style-2 a svg,.social_icons-style-2 a svg path{fill:currentColor!important;}.button-style-2{color:rgba(3, 48, 75, 1)!important;background-color:rgba(0, 0, 0, 0)!important;border-color:rgba(3, 48, 75, 1)!important;}.button-style-2:hover{color:#FFFFFF!important;background-color:rgba(3, 48, 75, 1)!important;border-color:rgba(3, 48, 75, 1)!important;}.button-style-3{color:rgba(255, 255, 255, 1)!important;background-color:rgba(6, 130, 202, 1)!important;border-color:rgba(6, 130, 202, 1)!important;}.button-style-3:hover{color:#FFFFFF!important;background-color:rgba(3, 48, 75, 1)!important;border-color:rgba(3, 48, 75, 1)!important;}.button-style-4{color:rgba(255, 255, 255, 1)!important;background-color:rgba(3, 48, 75, 1)!important;border-color:rgba(3, 48, 75, 1)!important;}.button-style-4:hover{color:rgba(3, 48, 75, 1)!important;background-color:rgba(255, 255, 255, 1)!important;border-color:#FFFFFF!important;}.button-style-5{color:#000000!important;background-color:rgba(255, 255, 255, 0)!important;border-color:#000000!important;}.button-style-5:hover{color:#FFFFFF!important;background-color:#000000!important;border-color:rgba(0, 0, 0, 1)!important;}</style>


        <script>
            (function utmParse() {
                const url = new URL(window.location.href);
                if (url.search) {
                    const utm = url.search.split(/\?|&/g).reduce((acc, current) => {
                        const matched = current.match(/utm_(content|campaign|medium|source|term|id)|gclid/g);
                        if (matched) {
                        acc[matched[0]] = current.replace(`${matched[0]}=`, '');
                        }
                        return acc;
                    }, {});
                    if (Object.keys(utm).length) {
                        window.localStorage.setItem('utm_vars', JSON.stringify(utm));
                    } else {
                        // Remove old utm vars
                        window.localStorage.removeItem('utm_vars');
                    }
                }
                // Set referrer in local storage
                // This is meant to be stored once to avoid self-referrals and to have the first referrer only.
                if (!window.localStorage.getItem('referrer')) {
                    // Capture the Referrer URL
                    const referrer = document.referrer;
                    if (referrer) {
                        // Only store the referrer if it comes from outside the current domain (to avoid self-referrals)
                        const currentDomain = window.location.hostname;
                        const referrerDomain = new URL(referrer).hostname;

                        if (referrerDomain !== currentDomain) {
                            // Store it in localStorage
                            localStorage.setItem('referrer', referrer);
                        }
                    }
                }
            })();
        </script>
        <!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-ZYP36XX9DY"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'G-ZYP36XX9DY');
</script>

<!-- Bing Webmaster Tools Verification -->
<script>
        // Check if on the homepage before the body loads
        if (window.location.pathname === '/' || window.location.pathname === '/index.html') {
            document.write('<meta name="msvalidate.01" content="EAEFC5C7B7E1F99635A79B4601AFABE9" />');
        }
</script>
    <!-- GOOGLE TRANSLATE STYLES are moved to external CSS -->
</head>
<body>
    <div id="google_translate_element" style="display: none"></div>

      <div id="global-loader" style="height:100%;width:100%;position:fixed;z-index:9999;left:0;top:0;background-color:rgba(255, 255, 255, 1);overflow-x:hidden;transition:1s;">
          <div style="position:absolute;height:100vh;text-align:center;bottom:0;left:0;right: 0;display:flex;align-items:center;">
              <img style="margin:0 auto;" src="https://media-production.lp-cdn.com/cdn-cgi/image/format&#x3D;auto,quality&#x3D;85/https://media-production.lp-cdn.com/media/eae51cce-a994-4a80-9dd4-41f3b927ec4e" />
          </div>
      </div>
      <script>
        if (window.sessionStorage.getItem('global_loading_displayed') === 'yes') {
          (function () {
            document.getElementById('global-loader').remove();
          })();
        }
      </script>

        <nav id="global-navbar" data-el-id="43e7a874-fb1e-4cdd-91fe-eb6bf5b9179b">
            <div class="redesign">
  <div class="content-container header">
    <div class="container header__container">
      <div class="navbar">
        <div class="logo">
          <a href="/" class="logo__link">
            <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/fe1ed271-0a58-4540-82c1-ade1b232d081" 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/fe1ed271-0a58-4540-82c1-ade1b232d081 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/fe1ed271-0a58-4540-82c1-ade1b232d081 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/fe1ed271-0a58-4540-82c1-ade1b232d081 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/fe1ed271-0a58-4540-82c1-ade1b232d081 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/fe1ed271-0a58-4540-82c1-ade1b232d081 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/fe1ed271-0a58-4540-82c1-ade1b232d081 3456w" class="logo__img light" alt="">
            <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/fe1ed271-0a58-4540-82c1-ade1b232d081" 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/fe1ed271-0a58-4540-82c1-ade1b232d081 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/fe1ed271-0a58-4540-82c1-ade1b232d081 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/fe1ed271-0a58-4540-82c1-ade1b232d081 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/fe1ed271-0a58-4540-82c1-ade1b232d081 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/fe1ed271-0a58-4540-82c1-ade1b232d081 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/fe1ed271-0a58-4540-82c1-ade1b232d081 3456w" class="logo__img dark" alt="">
          </a>
        </div>
        <div class="navigation">
          <ul>
            <li class="navigation__item">
              <a  href="/properties" class="navigation__link wow fadeInUp" data-wow-delay="2.0"><span>Portfolio</span></a>
            </li>
            <li class="navigation__item">
              <a  href="/home-search/listings" class="navigation__link wow fadeInUp" data-wow-delay="2.1"><span>Home Search</span></a>
            </li>
            <li class="navigation__item">
              <a  href="/home-valuation" class="navigation__link wow fadeInUp" data-wow-delay="2.2"><span>Home Valuation</span></a>
            </li>
            <li class="navigation__item">
              <a  href="/neighborhoods" class="navigation__link wow fadeInUp" data-wow-delay="2.3"><span>Neighborhoods</span></a>
            </li>
            <li class="navigation__item">
              <a data-type="CONTACT_US" class="navigation__link wow fadeInUp"><span>Let's Connect</span></a>
            </li>
            <li class="navigation__item">
              <a  href="tel:6152608885" class="navigation__link wow fadeInUp" data-wow-delay="2.5"><span>(615) 260-8885</span></a>
            </li>
          </ul>
        </div>
        <div class="buttons-wrapper">
          <button type="button" class="hamburger-component hamburger">
            <span class="hamburger__bars"></span>
          </button>
        </div>
      </div>
    </div>
  </div>
</div>

        </nav>
        <div id="global-sidemenu" class="sidemenu" data-el-id="11fa925d-d2dd-4213-a0fa-d46f769e2c18">
            <div class="sidebar">
  
  <button class="toggle sidebar__close close"></button>
  <div class="sidebar__content">

    <ul class="sidebar__nav">
      <li class="sidebar__nav-item">
        <a  href="/" class="sidebar__nav-link">Home</a>
      </li>
      <li class="sidebar__nav-item">
        <a  href="/about" class="sidebar__nav-link">Meet Mary</a>
      </li>
      <li class="sidebar__nav-item">
        <a  href="/properties" class="sidebar__nav-link">Portfolio</a>
      </li>
      <li class="sidebar__nav-item">
        <a  href="/home-search/listings" class="sidebar__nav-link">Home Search</a>
      </li>
      <li class="sidebar__nav-item">
        <a  href="/home-valuation" class="sidebar__nav-link">Home Valuation</a>
      </li>
      <li class="sidebar__nav-item">
        <a  href="/neighborhoods" class="sidebar__nav-link">Neighborhoods</a>
      </li>
      <li class="sidebar__nav-item">
        <a  href="/testimonials" class="sidebar__nav-link">Testimonials</a>
      </li>
      <li class="sidebar__nav-item">
        <a  href="/concierge" class="sidebar__nav-link">Compass Concierge</a>
      </li>
      <li class="sidebar__nav-item">
        <a  href="/blog" class="sidebar__nav-link">Blog</a>
      </li>
      <li class="sidebar__nav-item">
        <a  href="/press" class="sidebar__nav-link">Press</a>
      </li>
      <li class="sidebar__nav-item sub-nav-container">
        <div class="sub-nav">
          <ul class="sidebar__subnav">
            <li class="sidebar__subnav-item"><a  href="/buyers" class="sidebar__subnav-link">Buyer&#x27;s Guide</a></li>
            <li class="sidebar__subnav-item"><a  href="/sellers" class="sidebar__subnav-link">Seller&#x27;s Guide</a></li>
            <li class="sidebar__subnav-item"><a  href="/relocating-to-nashville" class="sidebar__subnav-link">Nashville Relocation Guide</a></li>
          </ul>
        </div>
        <a href="#" class="sidebar__nav-link link main-nav">Resources</a>
      </li>
      <li class="sidebar__nav-item">
        <a  href="/contact" class="sidebar__nav-link">Let's Connect</a>
      </li>
      <li class="sidebar__nav-item">
        <a  href="/home-search/account" class="sidebar__nav-link">My Search Portal</a>
      </li>
    </ul>
  </div>
</div>
        </div>
        <div  id="global-mobile-contact" class="mobile-contact-wrapper" data-el-id="befe5af2-a6ca-4119-924a-a85d96d36b51">
            <div class="btn-holder" 
style="
--backgroundColor: rgba(3, 48, 75, 1); 
--textColor: rgba(255, 255, 255, 1); 
--pillTextColor: rgba(255, 255, 255, 1); 
--pillBackgroundColor: rgba(3, 48, 75, 1);">

    <button type="button" class="connect-btn lp-ico lp-ico-arrow-top visible">Let&#x27;s Connect</button>
</div>


<div class="pop-up" style="--backgroundColor: rgba(3, 48, 75, 1); --textColor: rgba(255, 255, 255, 1);">
  <div class="lp-container">
    <form data-type="contact-form" class="contact-form">
      <div class="contact-form__container">
          <h3 class="lp-h3">Leave a Message</h3>
      
        <div class="contact-form__content">
          <div class="contact-form__inputs-container">
            <div class="contact-form__item">
              <input
                id="__FullName"
                type="text" name="name"
                class="lp-input lp-input--light"
                required
                placeholder="Full Name">
            </div>
            <div class="contact-form__item">
              <input
                id="__Email"
                type="email" name="email"
                class="lp-input js-email-input lp-input--light"
                required
                placeholder="Email">
            </div>
            <div class="contact-form__item"> 
              <input
                class="lp-input lp-input--light"
                type="tel" 
                placeholder="Phone"
                id="__Phone"
                name="phone"
                required>
            </div>

            <div class="contact-form__item input-group-select">
              <select name="interest" id="-field-interest" placeholder="Interest"
                class="lp-input dropdown-select js-select js-form-element lp-input--light" required>
                <option value="" disabled selected data-label="Interest">Interested in...</option>
                <option value="Selling &amp; Buying">Selling &amp; Buying</option>
                <option value="Selling">Selling</option>
                <option value="Buying">Buying</option>
                <option value="Renting">Renting</option>
                <option value="Other">Other</option>
              </select>
              <label for="-field-interest" class="lp-label sr-only">Interest</label>
            </div>

            <div class="contact-form__item">
              <textarea
                name="message"
                rows="4"
                id="__Message"
                class="lp-input lp-input--light"
                placeholder="Message"
                required></textarea>
            </div>
            <div class="lp-disclaimer">  <label style='display: none;' for='-termsAccepted'>Opt In/Disclaimer Consent:</label>
  <label class='lp-tcr-content'>
    <span class='lp-tcr-checkbox'>
      <input
        type='checkbox'
        id='-termsAccepted'
        name='termsAccepted'
        oninvalid="this.setCustomValidity('Please accept the terms and conditions')"
        oninput="this.setCustomValidity('')"
        required
      /></span>
    <span class='lp-tcr-message'>
      
        I agree to be contacted by
        Mary Brown
        via call, email, and text for real estate services. To opt out, you can reply 'stop' at any time or reply 'help' for assistance.
        You can also click the unsubscribe link in the emails. Message and data rates may apply. Message frequency may vary.
        <a href='/terms-and-conditions' target='_blank'>Privacy Policy</a>.
    </span>
  </label>

</div>
            <button type="submit" class="lp-btn lp-btn--filled lp-btn--dark submit  contact-form__item">Submit</button>
            
            <div class="lp-h-pot">
              <input id="__newsSignMiddleName" name="middleName" value="" autocomplete="off" tabindex="-1">
            </div>
            
            <input style="display: none;" type="text" name="source" value="CONTACT_INQUIRY" />
            <input type="hidden" name="button_text" value="Let&#x27;s Connect">
          </div>
        </div>
      </div>


      <div class="success-block">
          <h3 class="lp-h3 success-message">Thank you for your message. I will be in touch with you shortly.</h3>

      </div>
    </form>

    <button type="button" class="close-btn lp-ico lp-ico-close"></button>
  
  </div>
</div>


        </div>
        
        <div id="modals" class="modals"></div>
        <footer id="global-footer" class="is-font-color-light is-background-color-dark" data-el-id="874a9373-949d-4275-b72f-04c2a6ec373b">
            <div class="footer redesign  no_newsletter "> 
    <div class="container">
        <h3>Mary Brown</h3>
        <div class="info-wrap">
            <div class="info-wrap-contact agent_box">
                <div class="info-wrap-contact_zone type_user">
                    <h4 class="serif">Get In Touch</h4>
                    <div class="info-wrap-contact_cell">
                        <i>
                            <svg width="30" height="19" viewBox="0 0 30 19" fill="none" xmlns="http://www.w3.org/2000/svg">
                                <path d="M2 0C0.903517 0 0 0.903517 0 2V16.6667C0 17.7631 0.903517 18.6667 2 18.6667H28C29.0965 18.6667 30 17.7631 30 16.6667V2C30 0.903517 29.0965 0 28 0H2ZM2.4375 1.33333H27.5625L15.6458 11.4896C15.3389 11.7512 14.6612 11.7512 14.3542 11.4896L2.4375 1.33333ZM1.33333 2.13542L10.1979 9.6979L1.33333 16.5729V2.13542ZM28.6667 2.13542V16.5729L19.8021 9.6979L28.6667 2.13542ZM11.2396 10.5833L13.4896 12.5C14.3543 13.2369 15.6457 13.2369 16.5104 12.5L18.7604 10.5833L27.4687 17.3333H2.53125L11.2396 10.5833Z" fill="#1A1A1A" />
                            </svg>
                        </i>
                        <p class="contact_title">Email</p>
                        <a href="mailto:mary.brown@compass.com" class="lp-link info-wrap-contact_link grey-text hyperlink-style-2">mary.brown@compass.com</a>
                    </div>
                    <div class="info-wrap-contact_cell">
                        <i><svg width="30" height="25" viewBox="0 0 30 25" fill="none" xmlns="http://www.w3.org/2000/svg">
                        <path fill-rule="evenodd" clip-rule="evenodd" d="M10.7964 8.1207H19.2036V8.7279C19.2036 10.8195 20.9082 12.5259 23.001 12.5259H24.741L25.2852 20.7051C25.3776 22.1235 24.2868 23.2719 22.8822 23.2719H7.0032C5.5944 23.2719 4.5084 22.1085 4.6002 20.7039C4.782 17.9895 4.9152 15.2313 5.154 12.5265H6.9996C9.0918 12.5265 10.797 10.8207 10.797 8.7285V8.1207H10.7964ZM11.46 16.5807C11.46 14.6565 13.0188 13.0977 14.943 13.0977C16.8666 13.0977 18.4254 14.6571 18.4254 16.5807C18.4254 18.5055 16.8678 20.0631 14.943 20.0631C13.02 20.0637 11.46 18.5043 11.46 16.5807ZM14.943 12.0381C12.4344 12.0381 10.4004 14.0721 10.4004 16.5807C10.4004 19.0887 12.435 21.1233 14.943 21.1233C17.4486 21.1233 19.485 19.0869 19.485 16.5807C19.485 14.0727 17.451 12.0381 14.943 12.0381ZM9.0846 4.8363C8.22 4.8363 7.512 5.5443 7.512 6.4089V8.7285C7.512 9.0093 7.2804 9.2415 6.999 9.2415H1.5726C1.2906 9.2415 1.0596 9.0111 1.0596 8.7285V6.9285C1.0596 6.4797 1.1628 6.0945 1.3902 5.7069C1.896 4.8465 2.7294 4.1013 3.795 3.4749C9.279 0.2517 20.7192 0.2523 26.2044 3.4749C27.2706 4.1013 28.104 4.8465 28.6098 5.7069C28.8354 6.0921 28.9398 6.4815 28.9398 6.9285V8.7285C28.9398 9.0111 28.71 9.2415 28.4268 9.2415H23.0004C22.719 9.2415 22.4874 9.0093 22.4874 8.7285V6.4089C22.4874 5.5425 21.7806 4.8363 20.9148 4.8363H9.0846ZM8.571 6.4089C8.571 6.1263 8.8026 5.8965 9.0846 5.8965H20.9154C21.1968 5.8965 21.429 6.1275 21.429 6.4089V8.7285C21.429 9.5943 22.1352 10.3017 23.001 10.3017H28.4274C29.292 10.3017 30 9.5931 30 8.7285V6.9285C30 6.2835 29.8464 5.7291 29.5206 5.1729C28.9188 4.1493 27.9564 3.2799 26.7384 2.5641C20.9214 -0.8547 9.0798 -0.8547 3.2622 2.5641C2.0436 3.2799 1.0812 4.1487 0.48 5.1729C0.153 5.7291 0 6.2835 0 6.9279V8.7279C0 9.5925 0.7092 10.3011 1.5726 10.3011H6.999C7.8648 10.3011 8.571 9.5937 8.571 8.7279V6.4089ZM9.7368 7.5915V8.7285C9.7368 10.2387 8.5092 11.4669 6.999 11.4669H4.6686C4.3914 11.4669 4.164 11.6799 4.1412 11.9511C3.8892 14.8347 3.7386 17.7435 3.5448 20.6331C3.4116 22.6425 4.989 24.3315 7.0032 24.3315H22.8822C24.882 24.3315 26.475 22.6575 26.3406 20.6343L25.7622 11.9607C25.7436 11.6811 25.5102 11.4675 25.2342 11.4675L23.001 11.4663C21.4902 11.4663 20.2632 10.2375 20.2632 8.7279V7.5909C20.2632 7.2981 20.0262 7.0611 19.7334 7.0611H10.2666C9.9738 7.0611 9.7368 7.2987 9.7368 7.5915Z" fill="#1A1A1A" />
                        </svg></i>
                        <p class="contact_title">Phone Number</p>
                        <a href="tel:6152608885" class="lp-link info-wrap-contact_link grey-text hyperlink-style-2">(615) 260-8885</a>
                    </div>
                </div>
                <div class="info-wrap-contact_zone type_user">
                    <div class="info-wrap-contact_cell">
                        <i>
                        <svg width="30" height="25" viewBox="0 0 30 25" fill="none" xmlns="http://www.w3.org/2000/svg">
                            <path fill-rule="evenodd" clip-rule="evenodd" d="M10.7964 8.1207H19.2036V8.7279C19.2036 10.8195 20.9082 12.5259 23.001 12.5259H24.741L25.2852 20.7051C25.3776 22.1235 24.2868 23.2719 22.8822 23.2719H7.0032C5.5944 23.2719 4.5084 22.1085 4.6002 20.7039C4.782 17.9895 4.9152 15.2313 5.154 12.5265H6.9996C9.0918 12.5265 10.797 10.8207 10.797 8.7285V8.1207H10.7964ZM11.46 16.5807C11.46 14.6565 13.0188 13.0977 14.943 13.0977C16.8666 13.0977 18.4254 14.6571 18.4254 16.5807C18.4254 18.5055 16.8678 20.0631 14.943 20.0631C13.02 20.0637 11.46 18.5043 11.46 16.5807ZM14.943 12.0381C12.4344 12.0381 10.4004 14.0721 10.4004 16.5807C10.4004 19.0887 12.435 21.1233 14.943 21.1233C17.4486 21.1233 19.485 19.0869 19.485 16.5807C19.485 14.0727 17.451 12.0381 14.943 12.0381ZM9.0846 4.8363C8.22 4.8363 7.512 5.5443 7.512 6.4089V8.7285C7.512 9.0093 7.2804 9.2415 6.999 9.2415H1.5726C1.2906 9.2415 1.0596 9.0111 1.0596 8.7285V6.9285C1.0596 6.4797 1.1628 6.0945 1.3902 5.7069C1.896 4.8465 2.7294 4.1013 3.795 3.4749C9.279 0.2517 20.7192 0.2523 26.2044 3.4749C27.2706 4.1013 28.104 4.8465 28.6098 5.7069C28.8354 6.0921 28.9398 6.4815 28.9398 6.9285V8.7285C28.9398 9.0111 28.71 9.2415 28.4268 9.2415H23.0004C22.719 9.2415 22.4874 9.0093 22.4874 8.7285V6.4089C22.4874 5.5425 21.7806 4.8363 20.9148 4.8363H9.0846ZM8.571 6.4089C8.571 6.1263 8.8026 5.8965 9.0846 5.8965H20.9154C21.1968 5.8965 21.429 6.1275 21.429 6.4089V8.7285C21.429 9.5943 22.1352 10.3017 23.001 10.3017H28.4274C29.292 10.3017 30 9.5931 30 8.7285V6.9285C30 6.2835 29.8464 5.7291 29.5206 5.1729C28.9188 4.1493 27.9564 3.2799 26.7384 2.5641C20.9214 -0.8547 9.0798 -0.8547 3.2622 2.5641C2.0436 3.2799 1.0812 4.1487 0.48 5.1729C0.153 5.7291 0 6.2835 0 6.9279V8.7279C0 9.5925 0.7092 10.3011 1.5726 10.3011H6.999C7.8648 10.3011 8.571 9.5937 8.571 8.7279V6.4089ZM9.7368 7.5915V8.7285C9.7368 10.2387 8.5092 11.4669 6.999 11.4669H4.6686C4.3914 11.4669 4.164 11.6799 4.1412 11.9511C3.8892 14.8347 3.7386 17.7435 3.5448 20.6331C3.4116 22.6425 4.989 24.3315 7.0032 24.3315H22.8822C24.882 24.3315 26.475 22.6575 26.3406 20.6343L25.7622 11.9607C25.7436 11.6811 25.5102 11.4675 25.2342 11.4675L23.001 11.4663C21.4902 11.4663 20.2632 10.2375 20.2632 8.7279V7.5909C20.2632 7.2981 20.0262 7.0611 19.7334 7.0611H10.2666C9.9738 7.0611 9.7368 7.2987 9.7368 7.5915Z" fill="#1A1A1A" />
                        </svg>
                    </i>
                        <p class="contact_title">Phone Number</p>
                        <a href="tel:6153708669" class="lp-link info-wrap-contact_link grey-text hyperlink-style-2">(615) 370-8669</a>
                    </div>
                </div>
                <div class="info-wrap-contact_zone">
                    <div class="info-wrap-contact_cell">
                        <i>
                            <svg width="31" height="30" viewBox="0 0 31 30" fill="none" xmlns="http://www.w3.org/2000/svg">
                                <path d="M29.9821 6.49489C29.7931 6.35756 29.679 6.32046 29.4572 6.39228L20.298 9.41368L16.1952 8.03558L15.8172 9.41525L19.7644 10.7038V28.1462L9.89831 25.7069V22.1034H8.71438V25.7515L1.21616 28.2532V15.3945H0.0322266V29.2729C0.0322266 29.5077 0.130098 29.7279 0.321106 29.8645C0.445418 29.9541 0.585911 29.9999 0.735086 29.9999C0.814804 29.9999 0.890971 29.9868 0.967926 29.96L9.48433 27.029L20.1792 29.7887C20.3224 29.8254 20.4751 29.8171 20.6152 29.7654L29.8104 26.2235C30.0942 26.1177 30.0251 25.8466 30.0251 25.5431V7.08291C30.0251 6.85086 30.17 6.63144 29.9821 6.49489ZM28.8412 25.0388L20.9483 28.0361V10.7065L28.8412 8.08649V25.0388Z" fill="#1A1A1A" />
                                <path d="M6.57515 19.1142C6.6671 19.422 6.95006 19.6323 7.2713 19.6323C7.59215 19.6323 7.87511 19.422 7.96746 19.1142C8.67742 16.7514 10.0393 15.2447 11.3559 13.788C12.9944 11.9747 14.5422 10.2615 14.5422 7.2717C14.5422 3.39788 11.1451 0 7.2713 0C3.39827 0 0 3.39748 0 7.2717C0 10.2615 1.54819 11.9747 3.18674 13.788C4.50328 15.2447 5.86479 16.7514 6.57515 19.1142ZM7.2713 1.45426C10.316 1.45426 13.0883 4.22663 13.0883 7.2717C13.0883 9.70191 11.7852 11.1435 10.2769 12.8121C9.2461 13.9534 8.10992 15.2096 7.2713 16.9199C6.43229 15.2096 5.29651 13.953 4.2657 12.8121C2.75698 11.1432 1.45426 9.70191 1.45426 7.2717C1.45426 4.22663 4.22663 1.45426 7.2713 1.45426Z" fill="#1A1A1A" />
                                <path d="M7.26193 10.1616C8.8705 10.1616 10.1795 8.86084 10.1795 7.26175C10.1795 5.66305 8.87089 4.3623 7.26193 4.3623C5.65297 4.3623 4.34473 5.66305 4.34473 7.26175C4.34512 8.86084 5.65336 10.1616 7.26193 10.1616ZM7.26193 5.81657C8.06898 5.81657 8.72527 6.46536 8.72527 7.26175C8.72527 8.05932 8.06898 8.70733 7.26193 8.70733C6.45528 8.70733 5.79899 8.05893 5.79899 7.26175C5.79899 6.46536 6.45528 5.81657 7.26193 5.81657Z" fill="#1A1A1A" />
                            </svg>
                        </i>
                        <p class="info-wrap-contact_title">Address</p>
                        <p class="info-wrap-contact_link grey-text"><p>8119 Isabella Ln Ste 105<br>Brentwood TN 37027</p></p>
                    </div>
                </div>
            </div>
        </div>
        <div class="text_footer first_text_footer">
            <div class="luxury-text">
                <h4>Menu</h4>
<p><a class="lp-link info-wrap-contact_link grey-text hyperlink-style-2" href="../">Home</a> | <a class="lp-link info-wrap-contact_link grey-text hyperlink-style-2" href="../about">Meet Mary</a> | <a class="lp-link info-wrap-contact_link grey-text hyperlink-style-2" href="../home-search/listings">Home Search</a> | <a class="lp-link info-wrap-contact_link grey-text hyperlink-style-2" href="../home-valuation">Home Valuation</a> | <a class="lp-link info-wrap-contact_link grey-text hyperlink-style-2" href="../properties">Portfolio</a> | <a class="lp-link info-wrap-contact_link grey-text hyperlink-style-2" href="../neighborhoods">Neighborhoods</a> | <a class="lp-link info-wrap-contact_link grey-text hyperlink-style-2" href="../testimonials">Testimonials</a> | <a class="lp-link info-wrap-contact_link grey-text hyperlink-style-2" style="cursor: pointer;" role="button" data-type="CONTACT_US">Let's Connect</a></p>
            </div>
        </div>
        <div class="text_footer second_text_footer">
            <div class="text_content_wrap">
                <div>
                    <div class="images_box">
<div class="img_size"><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/0574e284-27f4-4c1e-93a4-f8eef12a2552" sizes="200px" 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/0574e284-27f4-4c1e-93a4-f8eef12a2552 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/0574e284-27f4-4c1e-93a4-f8eef12a2552 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/0574e284-27f4-4c1e-93a4-f8eef12a2552 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/0574e284-27f4-4c1e-93a4-f8eef12a2552 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/0574e284-27f4-4c1e-93a4-f8eef12a2552 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/0574e284-27f4-4c1e-93a4-f8eef12a2552 3456w" alt="Footer Image" width="343" height="auto"><br><br><br></div>
</div>
<div class="luxury-text">
<div id="ipql">
<p id="iaa1" style="font-size: 12px;">Mary Brown is a real estate licensee affiliated with Compass Tennessee, LLC.&nbsp;<a class="link" href="https://www.compass.com/" target="_blank" rel="noopener">Compass</a>&nbsp;Tennessee, LLC, is a licensed real estate broker and abides by equal housing opportunity laws. All material presented herein is intended for informational purposes only. Information is compiled from sources deemed reliable but is subject to errors, omissions, changes in price, condition, sale, or withdrawal without notice. No statement is made as to accuracy of any description. All measurements and square footages are approximate. This is not intended to solicit property already listed. Nothing herein shall be construed as legal, accounting or other professional advice outside the realm of real estate brokerage.<br><br><img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/1ec21b0e-4037-4c15-887c-011186ef3cb1" alt="" width="100" height="auto"></p>
</div>
</div>
                </div>
            </div>
        </div>
        <div class="info-privacy">
          <div class="form-row info-privacy__row">

            <div class="form-col form-col--powered powered-box">
                    <div class="img-wrap">
                        <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/7d23ac48-21cb-48d2-b997-57b5640ddded" 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/7d23ac48-21cb-48d2-b997-57b5640ddded 320w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/7d23ac48-21cb-48d2-b997-57b5640ddded 390w" sizes="200px" alt="">
                    </div>
                <div class="powered_zone">
                    Real Estate Website Design by <a href="https://www.luxurypresence.com/real-estate-website-design/" target="_blank" class="lp-link grey-text luxury-link underlined hyperlink-style-2">Luxury Presence</a>
                </div>
            </div>

            <div class="form-col form-col--copyright">
              <div class="copy_zone">
                <span class="copy_words">Copyright &copy;</span> <span class="auto-year-update">2026</span>
                | <a href="/terms-and-conditions" class="lp-link grey-text hyperlink-style-2">Privacy Policy</a>

              </div>
            </div>

            <div class="form-col form-col--socials">
                <ul class="lp-socials social_icons-style-2 socials socials--grey socials_zone">
                
                        <li>
                          <a
                            href="https://www.facebook.com/marybrownrealtor"
                            class="lp-socials__link socials__item socials__link wow fadeInUp"
                            data-wow-delay="0s"
                            target="_blank"
                            aria-label="FACEBOOK"
                          >
                              <span class="lp-i lp-i--facebook" aria-hidden="true"></span>
                          </a>
                        </li>
                        <li>
                          <a
                            href="https://www.instagram.com/maryjbrownrealtor"
                            class="lp-socials__link socials__item socials__link wow fadeInUp"
                            data-wow-delay="0.1s"
                            target="_blank"
                            aria-label="INSTAGRAM"
                          >
                              <span class="lp-i lp-i--instagram" aria-hidden="true"></span>
                          </a>
                        </li>
                        <li>
                          <a
                            href="https://www.linkedin.com/in/mary-brown-2309608/"
                            class="lp-socials__link socials__item socials__link wow fadeInUp"
                            data-wow-delay="0.2s"
                            target="_blank"
                            aria-label="LINKEDIN"
                          >
                              <span class="lp-i lp-i--linkedin" aria-hidden="true"></span>
                          </a>
                        </li>
                        <li>
                          <a
                            href="https://www.yelp.com/biz/mary-j-brown-parks-brentwood"
                            class="lp-socials__link socials__item socials__link wow fadeInUp"
                            data-wow-delay="0.3s"
                            target="_blank"
                            aria-label="YELP"
                          >
                              <span class="lp-i lp-i--yelp" aria-hidden="true"></span>
                          </a>
                        </li>
                        <li>
                          <a
                            href="https://www.google.com/search?q&#x3D;Mary+Brown+tn+compass&amp;oq&#x3D;Mary+Brown+tn+compass&amp;gs_lcrp&#x3D;EgZjaHJvbWUyBggAEEUYOTIJCAEQIRgKGKAB0gEIMjkwOWowajeoAgCwAgA&amp;sourceid&#x3D;chrome&amp;ie&#x3D;UTF-8#lrd&#x3D;0x88647b4a59336bc9:0xf7390f6bcabbdf3e,1,,,,"
                            class="lp-socials__link socials__item socials__link wow fadeInUp"
                            data-wow-delay="0.4s"
                            target="_blank"
                            aria-label="GOOGLE"
                          >
                              <span class="lp-i lp-i--google" aria-hidden="true"></span>
                          </a>
                        </li>
                        <li>
                          <a
                            href="https://www.zillow.com/profile/Mary-Brown-Parks"
                            class="lp-socials__link socials__item socials__link wow fadeInUp"
                            data-wow-delay="0.5s"
                            target="_blank"
                            aria-label="ZILLOW"
                          >
                              <span class="lp-i lp-i--zillow" aria-hidden="true"></span>
                          </a>
                        </li>
                  </ul>            </div>
          </div>
        </div>
    </div>
</div>

        </footer>

        <div id="modal-global-contact-us" class="modal "
            data-el-id=""
            style="background-color: ;"
            >
            <div class="modal-content">
                <div class="contact-form redesign " style="background-image: url('https://media-production.lp-cdn.com/cdn-cgi/image/format&#x3D;auto,quality&#x3D;85,fit&#x3D;scale-down,width&#x3D;1920/https://media-production.lp-cdn.com/media/993ac950-ab37-4b37-90c1-ad429d8b753d')">
          <div class="container">
              <div class="section-details" style="--colorTxt: #ffffff">
                  <h2>Contact Details</h2>
                  
                  <div class="info-zone">
        
                          <div class="info-zone_contact type_user">
                                <h4 class="serif">Mary Brown</h4>
                                <div class="info-zone_contact_cell">
                                        <i>
                                            <svg width="30" height="25" viewBox="0 0 30 25" fill="none" xmlns="http://www.w3.org/2000/svg">
                                                <path fill-rule="evenodd" clip-rule="evenodd" d="M10.7964 8.1207H19.2036V8.7279C19.2036 10.8195 20.9082 12.5259 23.001 12.5259H24.741L25.2852 20.7051C25.3776 22.1235 24.2868 23.2719 22.8822 23.2719H7.0032C5.5944 23.2719 4.5084 22.1085 4.6002 20.7039C4.782 17.9895 4.9152 15.2313 5.154 12.5265H6.9996C9.0918 12.5265 10.797 10.8207 10.797 8.7285V8.1207H10.7964ZM11.46 16.5807C11.46 14.6565 13.0188 13.0977 14.943 13.0977C16.8666 13.0977 18.4254 14.6571 18.4254 16.5807C18.4254 18.5055 16.8678 20.0631 14.943 20.0631C13.02 20.0637 11.46 18.5043 11.46 16.5807ZM14.943 12.0381C12.4344 12.0381 10.4004 14.0721 10.4004 16.5807C10.4004 19.0887 12.435 21.1233 14.943 21.1233C17.4486 21.1233 19.485 19.0869 19.485 16.5807C19.485 14.0727 17.451 12.0381 14.943 12.0381ZM9.0846 4.8363C8.22 4.8363 7.512 5.5443 7.512 6.4089V8.7285C7.512 9.0093 7.2804 9.2415 6.999 9.2415H1.5726C1.2906 9.2415 1.0596 9.0111 1.0596 8.7285V6.9285C1.0596 6.4797 1.1628 6.0945 1.3902 5.7069C1.896 4.8465 2.7294 4.1013 3.795 3.4749C9.279 0.2517 20.7192 0.2523 26.2044 3.4749C27.2706 4.1013 28.104 4.8465 28.6098 5.7069C28.8354 6.0921 28.9398 6.4815 28.9398 6.9285V8.7285C28.9398 9.0111 28.71 9.2415 28.4268 9.2415H23.0004C22.719 9.2415 22.4874 9.0093 22.4874 8.7285V6.4089C22.4874 5.5425 21.7806 4.8363 20.9148 4.8363H9.0846ZM8.571 6.4089C8.571 6.1263 8.8026 5.8965 9.0846 5.8965H20.9154C21.1968 5.8965 21.429 6.1275 21.429 6.4089V8.7285C21.429 9.5943 22.1352 10.3017 23.001 10.3017H28.4274C29.292 10.3017 30 9.5931 30 8.7285V6.9285C30 6.2835 29.8464 5.7291 29.5206 5.1729C28.9188 4.1493 27.9564 3.2799 26.7384 2.5641C20.9214 -0.8547 9.0798 -0.8547 3.2622 2.5641C2.0436 3.2799 1.0812 4.1487 0.48 5.1729C0.153 5.7291 0 6.2835 0 6.9279V8.7279C0 9.5925 0.7092 10.3011 1.5726 10.3011H6.999C7.8648 10.3011 8.571 9.5937 8.571 8.7279V6.4089ZM9.7368 7.5915V8.7285C9.7368 10.2387 8.5092 11.4669 6.999 11.4669H4.6686C4.3914 11.4669 4.164 11.6799 4.1412 11.9511C3.8892 14.8347 3.7386 17.7435 3.5448 20.6331C3.4116 22.6425 4.989 24.3315 7.0032 24.3315H22.8822C24.882 24.3315 26.475 22.6575 26.3406 20.6343L25.7622 11.9607C25.7436 11.6811 25.5102 11.4675 25.2342 11.4675L23.001 11.4663C21.4902 11.4663 20.2632 10.2375 20.2632 8.7279V7.5909C20.2632 7.2981 20.0262 7.0611 19.7334 7.0611H10.2666C9.9738 7.0611 9.7368 7.2987 9.7368 7.5915Z" fill="#1A1A1A"/>
                                            </svg>
                                        </i>
                                    <p class="contact_title">Phone</p>
                                    <a href="tel:(615) 260-8885" class="lp-link info-zone_contact_link link hyperlink-style-2">(615) 260-8885</a>
                                </div>
                                <div class="info-zone_contact_cell">
                                        <i>
                                            <svg width="30" height="19" viewBox="0 0 30 19" fill="none" xmlns="http://www.w3.org/2000/svg">
                                                <path d="M2 0C0.903517 0 0 0.903517 0 2V16.6667C0 17.7631 0.903517 18.6667 2 18.6667H28C29.0965 18.6667 30 17.7631 30 16.6667V2C30 0.903517 29.0965 0 28 0H2ZM2.4375 1.33333H27.5625L15.6458 11.4896C15.3389 11.7512 14.6612 11.7512 14.3542 11.4896L2.4375 1.33333ZM1.33333 2.13542L10.1979 9.6979L1.33333 16.5729V2.13542ZM28.6667 2.13542V16.5729L19.8021 9.6979L28.6667 2.13542ZM11.2396 10.5833L13.4896 12.5C14.3543 13.2369 15.6457 13.2369 16.5104 12.5L18.7604 10.5833L27.4687 17.3333H2.53125L11.2396 10.5833Z" fill="#1A1A1A"/>
                                            </svg>
                                        </i>
                                    <p class="contact_title">Email</p>
                                    <a href="mailto:mary.brown@compass.com" class="lp-link info-zone_contact_link link hyperlink-style-2">mary.brown@compass.com</a>
                                </div>
                          </div>
                          <div class="info-zone_contact">
                                <div class="info-zone_contact_cell">
                                        <i>
                                            <svg width="31" height="30" viewBox="0 0 31 30" fill="none" xmlns="http://www.w3.org/2000/svg">
                                                <path d="M29.9821 6.49489C29.7931 6.35756 29.679 6.32046 29.4572 6.39228L20.298 9.41368L16.1952 8.03558L15.8172 9.41525L19.7644 10.7038V28.1462L9.89831 25.7069V22.1034H8.71438V25.7515L1.21616 28.2532V15.3945H0.0322266V29.2729C0.0322266 29.5077 0.130098 29.7279 0.321106 29.8645C0.445418 29.9541 0.585911 29.9999 0.735086 29.9999C0.814804 29.9999 0.890971 29.9868 0.967926 29.96L9.48433 27.029L20.1792 29.7887C20.3224 29.8254 20.4751 29.8171 20.6152 29.7654L29.8104 26.2235C30.0942 26.1177 30.0251 25.8466 30.0251 25.5431V7.08291C30.0251 6.85086 30.17 6.63144 29.9821 6.49489ZM28.8412 25.0388L20.9483 28.0361V10.7065L28.8412 8.08649V25.0388Z" fill="#1A1A1A"/>
                                                <path d="M6.57515 19.1142C6.6671 19.422 6.95006 19.6323 7.2713 19.6323C7.59215 19.6323 7.87511 19.422 7.96746 19.1142C8.67742 16.7514 10.0393 15.2447 11.3559 13.788C12.9944 11.9747 14.5422 10.2615 14.5422 7.2717C14.5422 3.39788 11.1451 0 7.2713 0C3.39827 0 0 3.39748 0 7.2717C0 10.2615 1.54819 11.9747 3.18674 13.788C4.50328 15.2447 5.86479 16.7514 6.57515 19.1142ZM7.2713 1.45426C10.316 1.45426 13.0883 4.22663 13.0883 7.2717C13.0883 9.70191 11.7852 11.1435 10.2769 12.8121C9.2461 13.9534 8.10992 15.2096 7.2713 16.9199C6.43229 15.2096 5.29651 13.953 4.2657 12.8121C2.75698 11.1432 1.45426 9.70191 1.45426 7.2717C1.45426 4.22663 4.22663 1.45426 7.2713 1.45426Z" fill="#1A1A1A"/>
                                                <path d="M7.26193 10.1616C8.8705 10.1616 10.1795 8.86084 10.1795 7.26175C10.1795 5.66305 8.87089 4.3623 7.26193 4.3623C5.65297 4.3623 4.34473 5.66305 4.34473 7.26175C4.34512 8.86084 5.65336 10.1616 7.26193 10.1616ZM7.26193 5.81657C8.06898 5.81657 8.72527 6.46536 8.72527 7.26175C8.72527 8.05932 8.06898 8.70733 7.26193 8.70733C6.45528 8.70733 5.79899 8.05893 5.79899 7.26175C5.79899 6.46536 6.45528 5.81657 7.26193 5.81657Z" fill="#1A1A1A"/>
                                            </svg>
                                        </i>
                                    <p class="info-wrap-contact_title">Address</p>
                                    <p class="info-zone_contact_link pre-line">8119 Isabella Ln Ste 105
        Brentwood TN 37027</p>
                                </div>
                          </div>
                        <div class="info-zone_contact">
                            <div class="info-zone_contact_cell">
                                <p class="pre-line"><div></div><style>* { box-sizing: border-box; } body {margin: 0;}ul{list-style:inherit;}</style></p>
                            </div>
                        </div>
                        <ul class="lp-socials social_icons-style-2 socials socials--grey socials_zone footer__contact-column">
                        
                                <li>
                                  <a
                                    href="https://www.facebook.com/marybrownrealtor"
                                    class="lp-socials__link socials__item wow fadeInUp socials__link"
                                    data-wow-delay="0s"
                                    target="_blank"
                                    aria-label="FACEBOOK"
                                  >
                                      <span class="lp-i lp-i--facebook" aria-hidden="true"></span>
                                  </a>
                                </li>
                                <li>
                                  <a
                                    href="https://www.instagram.com/maryjbrownrealtor"
                                    class="lp-socials__link socials__item wow fadeInUp socials__link"
                                    data-wow-delay="0.1s"
                                    target="_blank"
                                    aria-label="INSTAGRAM"
                                  >
                                      <span class="lp-i lp-i--instagram" aria-hidden="true"></span>
                                  </a>
                                </li>
                                <li>
                                  <a
                                    href="https://www.linkedin.com/in/mary-brown-2309608/"
                                    class="lp-socials__link socials__item wow fadeInUp socials__link"
                                    data-wow-delay="0.2s"
                                    target="_blank"
                                    aria-label="LINKEDIN"
                                  >
                                      <span class="lp-i lp-i--linkedin" aria-hidden="true"></span>
                                  </a>
                                </li>
                                <li>
                                  <a
                                    href="https://www.yelp.com/biz/mary-j-brown-parks-brentwood"
                                    class="lp-socials__link socials__item wow fadeInUp socials__link"
                                    data-wow-delay="0.3s"
                                    target="_blank"
                                    aria-label="YELP"
                                  >
                                      <span class="lp-i lp-i--yelp" aria-hidden="true"></span>
                                  </a>
                                </li>
                                <li>
                                  <a
                                    href="https://www.google.com/search?q&#x3D;Mary+Brown+tn+compass&amp;oq&#x3D;Mary+Brown+tn+compass&amp;gs_lcrp&#x3D;EgZjaHJvbWUyBggAEEUYOTIJCAEQIRgKGKAB0gEIMjkwOWowajeoAgCwAgA&amp;sourceid&#x3D;chrome&amp;ie&#x3D;UTF-8#lrd&#x3D;0x88647b4a59336bc9:0xf7390f6bcabbdf3e,1,,,,"
                                    class="lp-socials__link socials__item wow fadeInUp socials__link"
                                    data-wow-delay="0.4s"
                                    target="_blank"
                                    aria-label="GOOGLE"
                                  >
                                      <span class="lp-i lp-i--google" aria-hidden="true"></span>
                                  </a>
                                </li>
                                <li>
                                  <a
                                    href="https://www.zillow.com/profile/Mary-Brown-Parks"
                                    class="lp-socials__link socials__item wow fadeInUp socials__link"
                                    data-wow-delay="0.5s"
                                    target="_blank"
                                    aria-label="ZILLOW"
                                  >
                                      <span class="lp-i lp-i--zillow" aria-hidden="true"></span>
                                  </a>
                                </li>
                          </ul>          </div>
              </div>
              <div class="section-message">
                  <form data-type="contact-form">
                      <h2>Submit a Message</h2>
                       <div class="h-pot">
                        <label for="-middleName">Middle Name</label>
                        <input id="-middleName" name="middleName" value="" autocomplete="off" tabindex="-1">
                      </div>
        
        
                      <div class="lp-input-group">
                          <label for="prod-name" class="lp-label">Name</label>
                          <input id="prod-name" name="name" value="" required="" class="lp-input lp-input--light">
                      </div>
                      <div class="lp-input-group">
                          <label for="prod-email" class="lp-label">Email</label>
                          <input id="prod-email" type="email" name="email" value="" required="" class="lp-input lp-input--light">
                      </div>
                      <div class="lp-input-group">
                          <label for="prod-phone" class="lp-label">Phone</label>
                          <input id="prod-phone" type="tel" name="phoneNumber" value="" required="" class="lp-input lp-input--light">
                      </div>
                      <div class="lp-input-group m16">
                          <label for="prod-message" class="lp-label">Message</label>
                          <textarea id="prod-message" name="message" value="" required="" class="lp-input"></textarea>
                      </div>
        
                      <div class="lp-disclaimer">  <label style='display: none;' for='-termsAccepted'>Opt In/Disclaimer Consent:</label>
          <label class='lp-tcr-content'>
            <span class='lp-tcr-checkbox'>
              <input
                type='checkbox'
                id='-termsAccepted'
                name='termsAccepted'
                oninvalid="this.setCustomValidity('Please accept the terms and conditions')"
                oninput="this.setCustomValidity('')"
                required
              /></span>
            <span class='lp-tcr-message'>
              
                I agree to be contacted by
                Mary Brown
                via call, email, and text for real estate services. To opt out, you can reply 'stop' at any time or reply 'help' for assistance.
                You can also click the unsubscribe link in the emails. Message and data rates may apply. Message frequency may vary.
                <a href='/terms-and-conditions' target='_blank'>Privacy Policy</a>.
            </span>
          </label>
        
        </div>
                      
                      <input style="display: none;" type="text" name="source" value="CONTACT_INQUIRY" />
                      
                      
                      <button type="submit" class="submitButton lp-btn button-style-1">
                          <span class="label-initial">Submit</span>
                          <span class="label-loading">Submitting</span>
                          <span class="label-success">Submitted</span>
                          <span class="submit-icon lp-i lp-i--circle-notch lp-i--spin"></span>
                      </button>
                      <p class="success-message success hide">
                        Message sent successfully!
                      </p>
                  </form>
                  
                  
              </div>
          </div>
        </div>
        
            </div>
            <button class="close lp-close" type="button" aria-label="close modal">
                <span class="lp-close-icon" aria-hidden="true"></span>
            </button>
        </div>
        <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;">
          <style>
            #qualifying-questions-modal .custom-select-toggle {
              border: 1px solid #848484;
              border-radius: 8px;
              padding: 12px 16px;
            }
        
            #qualifying-questions-modal .custom-select-toggle.is-placeholder {
              color: #848484;
            }
        
            #qualifying-questions-modal #qualifying-questions-modal-phoneNumber::placeholder {
              color: #848484;
              opacity: 1;
            }
        
            #qualifying-questions-modal .disclaimer-more {
              display: none;
            }
        
            #qualifying-questions-modal #qualifying-questions-modal-disclaimer-text:not(.collapsed) .disclaimer-more {
              display: inline;
            }
        
            #qualifying-questions-modal #qualifying-questions-modal-disclaimer-text:not(.collapsed) .disclaimer-ellipsis {
              display: none;
            }
          </style>
          <script>
            function toggleDisclaimerQualifyingQuestionsModal() {
              const disclaimerText = document.getElementById('qualifying-questions-modal-disclaimer-text');
              const toggleButton = document.getElementById('qualifying-questions-modal-toggle-disclaimer');
        
              if (disclaimerText.classList.contains('collapsed')) {
                disclaimerText.classList.remove('collapsed');
                toggleButton.textContent = 'Read less';
                toggleButton.setAttribute('aria-expanded', 'true');
              } else {
                disclaimerText.classList.add('collapsed');
                toggleButton.textContent = 'Read more';
                toggleButton.setAttribute('aria-expanded', 'false');
              }
            }
          </script>
          <div style="max-width: 400px; width: 95%; margin: 0 auto;">
            <div style="background: #fff; border: none; border-radius: 16px; color: black; box-shadow: none; position: relative;">
              <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;">
                <span aria-hidden="true">&times;</span>
              </button>
              <div style="padding: 40px 30px 32px;">
                <div style="text-align: left; margin-bottom: 32px;">
                  <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;">
                    Thanks, please provide more information to help serve you
                  </h2>
                </div>
                <form id="qualifying-questions-modal-form" data-type="contact-form">
                  <input type="hidden" name="source" value="PROFILE_UPDATE" />
                  <input type="hidden" name="email" value="" id="qualifying-questions-modal-email" />
                  <input type="hidden" name="triggerSource" id="qualifying-questions-modal-triggerSource" value="" />
                  <label for="qualifying-questions-modal-email" style="display:none;">
                    Email
                  </label>
                  <label for="qualifying-questions-modal-triggerSource" style="display:none;">
                    Trigger Source
                  </label>
        
                  <div style="margin-bottom: 20px;">
                    <label for="qualifying-questions-modal-phoneNumber" style="display:none;">
                      Phone Number
                    </label>
                    <input
                      type="tel"
                      id="qualifying-questions-modal-phoneNumber"
                      name="phoneNumber"
                      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;"
                      pattern="^\+?1?[-.\s]?\(?[0-9]{3}\)?[-.\s]?[0-9]{3}[-.\s]?[0-9]{4}$"
                      required
                      placeholder="Phone"
                      aria-label="Phone Number"
                      inputmode="tel"
                      autocomplete="tel"
                      onfocus="this.style.borderColor='black';"
                      onblur="this.style.borderColor='#848484';"
                    />
                  </div>
        
                  <div style="margin-bottom: 20px;">
                    <label for="qualifying-questions-modal-interest" style="display:none;">
                      Interest
                    </label>
                    <select
                      id="qualifying-questions-modal-interest"
                      name="interest"
                      required
                      data-label="Interest"
                      aria-label="Interest"
                      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;"
                      onfocus="this.style.borderColor='black'; this.style.color='black';"
                      onblur="this.style.borderColor='#848484'; if(this.value === '') this.style.color='#848484'; else this.style.color='black';"
                    >
                      <option value="" style="background: #fff; color: #848484;" disabled selected>Interested in...</option>
                      <option value="Selling & Buying" style="background: #fff; color: black;">Selling & Buying</option>
                      <option value="Selling" style="background: #fff; color: black;">Selling</option>
                      <option value="Buying" style="background: #fff; color: black;">Buying</option>
                      <option value="Renting" style="background: #fff; color: black;">Renting</option>
                      <option value="Other" style="background: #fff; color: black;">Other</option>
                    </select>
                  </div>
        
                  <div style="margin-bottom: 32px; font-size: 12px; line-height: 1.2;">
                    <label style='display: none;' for='qualifying-questions-modal-qualifying-questions-termsAccepted'>Opt In/Disclaimer Consent:</label>
                    <label class='lp-tcr-content'>
                      <span class='lp-tcr-checkbox'>
                        <input
                          type='checkbox'
                          id='qualifying-questions-modal-qualifying-questions-termsAccepted'
                          name='termsAccepted'
                          aria-describedby='qualifying-questions-modal-disclaimer-text'
                          oninvalid="this.setCustomValidity('Please accept the terms and conditions')"
                          oninput="this.setCustomValidity('')"
                          required
                        /></span>
                      <span class='lp-tcr-message'>
                        <div id="qualifying-questions-modal-disclaimer-text" class="collapsed" style="color: #848484;">
                          
                            I agree to be contacted by
                            <strong>Mary Brown</strong>
                            via call, email, and text <span class="disclaimer-more">for real estate services. 
                            To opt out, you can reply 'stop' at any time or reply 'help' for assistance. 
                            You can also click the unsubscribe link in the emails. 
                            Message and data rates may apply. Message frequency may vary.</span>
                            <span class="disclaimer-ellipsis">...</span>
                            <a href='/terms-and-conditions' target='_blank' rel='noopener noreferrer' style='text-decoration: underline;'>Privacy Policy</a>.
                        </div>
                        <button
                          id="qualifying-questions-modal-toggle-disclaimer"
                          type="button"
                          style="background: none; border: none; color: #848484; font-size: inherit; font-weight: bold; padding: 0; margin-top: 4px; cursor: pointer;"
                          aria-expanded="false"
                          onclick="toggleDisclaimerQualifyingQuestionsModal()"
                        >
                          Read more
                        </button>
                      </span>
                    </label>
                  </div>
        
                  <div>
                    <button
                      type="submit"
                      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;"
                      onmouseover="this.style.background='transparent'; this.style.color='black';"
                      onmouseout="this.style.background='black'; this.style.color='white';"
                    >
                      Submit
                    </button>
                  </div>
                </form>
              </div>
            </div>
          </div>
        </div>

    <script>
        (function() {
        var lazyVideos = [].slice.call(document.querySelectorAll("video.lazy"));

        if ("IntersectionObserver" in window && lazyVideos.length > 0) {
            var lazyVideoObserver = new IntersectionObserver(function(entries, observer) {
            entries.forEach(function(video) {
                if (video.isIntersecting) {
                for (var source in video.target.children) {
                    var videoSource = video.target.children[source];
                    if (typeof videoSource.tagName === "string" && videoSource.tagName === "SOURCE") {
                    videoSource.src = videoSource.dataset.src;
                    }
                }

                video.target.load();
                video.target.classList.remove("lazy");
                lazyVideoObserver.unobserve(video.target);
                }
            });
            });

            lazyVideos.forEach(function(lazyVideo) {
                lazyVideoObserver.observe(lazyVideo);
            });
        }
        })();
    </script>

        <!-- Global site tag (gtag.js) - Google Analytics -->
        <script defer src="https://www.googletagmanager.com/gtag/js"></script>

            <!-- Google Tag Manager -->
            <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
                new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
                j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.defer=true;j.async=false;j.src=
                'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
            })(window,document,'script','dataLayer','GTM-T9SFQGHZ');</script>
            <!-- End Google Tag Manager -->


        <!-- LP Tracker (divolte.js) - LP Divolte -->
            <script>window.divolteLp=window.divolteLp||function(){(divolteLp.q=divolteLp.q||[]).push(arguments)}</script>
        <!-- LP Tracker (eventBus) - LP EventBus -->
            <script>window.eventBusLp=window.eventBusLp||function(){(eventBusLp.q=eventBusLp.q||[]).push(arguments)}</script>

    <script>
        window.dataLayer = window.dataLayer || [];
        document.sendGoogleTagManagerEvent = function() {
            /* Honor GPC-enabled browsers and prevent GTM event if GPC is enabled. More details: https://global-privacy-control.glitch.me/ */
            if (window.navigator.globalPrivacyControl) {
                return;
            }

            dataLayer.push(arguments);
        }

        document.sendGoogleTagManagerEvent('js', new Date());
            document.sendGoogleTagManagerEvent('config', 'G-2CDXBSKV9K', { page: location.pathname, location: location.href });
        document.sendGoogleAnalyticsEvent = function(googleEvent) {
            document.sendGoogleTagManagerEvent('event', googleEvent.eventAction || googleEvent.hitType, {
                event_category: googleEvent.eventCategory,
                event_label: googleEvent.eventLabel,
                value: googleEvent.eventValue,
                page: googleEvent.page,
                location: googleEvent.location
            })
        };

        document.addEventListener("DOMContentLoaded", function() {
            (function() {
                //If the page has an element with ID of auto-year-update the element will be populated with the current year.
                var date = new Date();
                var elements = document.getElementsByClassName('auto-year-update');
                var i;
                for (i = 0; i < elements.length; i++) {
                    elements[i].innerText = date.getFullYear();
                }
            })();
            if (window.divolteLp) {
                window.divolteLp('sendLpPageView', {});
            }
            if (window.eventBusLp) {
                window.eventBusLp('sendLpPageView', {});
            }
        });
    </script>


    <script>
    // Function to dynamically load a script
    function loadScript(url, callback) {
        var script = document.createElement('script');
        script.type = 'text/javascript';
        script.src = url;
        script.defer = true;
        script.async = true;
        script.onload = callback;
        document.head.appendChild(script);
    }

    // Function to dynamically load CSS file
    function loadCSS(url) {
        var link = document.createElement("link");
        link.rel = "stylesheet";
        link.href = url;
        document.head.appendChild(link);
    }

    // Global methods / variables that can be accessed by element js
    window.luxuryPresence = {
        libs: {
            loadJs: loadScript,
            loadCss: loadCSS,
            jsLibsMap: {
                paroller: {
                    jsSrc: 'https://d1e1jt2fj4r8r.cloudfront.net/javascript/jquery.paroller.min.js',
                    isLoaded: false,
                },
                ionRangeSlider: {
                    jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/js/ion.rangeSlider.min.js',
                    cssSrc: 'https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/css/ion.rangeSlider.min.css',
                    isLoaded: false,
                    requires: ['jquery'],
                },
                splide: {
                    jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/splidejs/4.1.4/js/splide.min.js',
                    cssSrc: 'https://cdnjs.cloudflare.com/ajax/libs/splidejs/4.1.4/css/splide-core.min.css',
                    isLoaded: false,
                },
                wow: {
                    jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/wow/1.1.2/wow.min.js',
                    isLoaded: false,
                },
                jquery: {
                    jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js',
                    isLoaded: false,
                },
                slick: {
                    jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick.min.js',
                    isLoaded: false,
                    requires: ['jquery'],
                },
                libphonenumber: {
                    jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/libphonenumber-js/1.11.8/libphonenumber-js.min.js',
                    isLoaded: false,
                },
            },
        },
    };
    </script>
    <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>
    <script defer src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.7.8/handlebars.min.js"></script>
    <script defer src="https://cdn.jsdelivr.net/npm/handlebars-intl@1.1.2/dist/handlebars-intl.min.js"></script>
    <script defer src="https://cdnjs.cloudflare.com/ajax/libs/superagent/4.1.0/superagent.min.js"></script>
    <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>
    <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>
    <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>

    <!-- GOOGLE TRANSLATE SCRIPT -->
    <script>
        function googleTranslateElementInit() {
            // list of languages can be overridden by setting window.customLanguages in the head JS. example `window.customLanguages = 'en,de,fr,ro,sk,pl'`
            // Language codes can be taken from here https://cloud.google.com/translate/docs/languages
            const DEFAULT_LANGUAGES = 'en,es,zh-CN,zh-TW,tl,vi,ar,ko,ru,de,fr,hi,pt';
            document.querySelectorAll('[data-type="TRANSLATE"]').forEach(function(translate){
                translate.innerText = '';
                new google.translate.TranslateElement({
                    pageLanguage: 'en',
                    layout: google.translate.TranslateElement.InlineLayout.SIMPLE,
                    includedLanguages: window.customLanguages || DEFAULT_LANGUAGES,
                }, translate);
            });
        }
    </script>
    <script defer src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>
            <script defer src="https://accounts.google.com/gsi/intermediate"></script>

    <!-- GOOGLE TRANSLATE SCRIPT END-->
    <script>

        // UI helpers
        (function () {

            function getSideMenu () {
                return document.querySelector('body > div.sidemenu');
            }

            function sideMenuHide (instant) {
                var sideMenu = getSideMenu();
                if (!sideMenu || !sideMenu.classList.contains('visible')) {
                  return;
                }
                sideMenu.classList.remove('visible');
                sideMenu.dispatchEvent(new CustomEvent('lpui-hide', { detail: { instant: !!instant } }));
                window.dispatchEvent(new CustomEvent('lpui-sidemenu-hide', { detail: {instant: !!instant} }));
            }

            function sideMenuShow () {
                var sideMenu = getSideMenu();
                if (!sideMenu || sideMenu.classList.contains('visible')) {
                  return;
                }
                sideMenu.classList.add('visible');
                sideMenu.dispatchEvent(new Event('lpui-show'));
                window.dispatchEvent(new Event('lpui-sidemenu-show'));
            }

            function sideMenuToggle () {
                var sideMenu = getSideMenu();
                if (!sideMenu) {
                  return;
                }
                var isSideMenuVisible = sideMenu.classList.contains('visible');
                if (isSideMenuVisible) {
                    sideMenuHide();
                } else {
                    sideMenuShow();
                }
            }

            var scrollLockRequests = {};
            window.__debug_scrollLockRequests = scrollLockRequests;
            var hideScrollStyles = ''+
                    'body {'+
                    'overflow: hidden;' +
                    '}';
            var hideScrollId = 'hide-body-scroll-style';

            function scrollLock () {
                var style = document.createElement('style');
                style.id = hideScrollId;
                style.textContent = hideScrollStyles;
                document.head.appendChild(style);
                window.dispatchEvent(new Event('lpui-scroll-locked'));
            }

            function scrollUnlock () {
                document.getElementById(hideScrollId)?.remove();
                window.dispatchEvent(new Event('lpui-scroll-unlocked'));
            }

            function requestScrollLock (lockId) {
                var wasLocked = Object.keys(scrollLockRequests).length > 0;
                scrollLockRequests[lockId || '__anonymous_lock'] = true;
                if (!wasLocked) {
                    scrollLock();
                }
            }

            function releaseScrollLock (lockId) {
                if (lockId) {
                    delete scrollLockRequests[lockId];
                    if (!Object.keys(scrollLockRequests).length) {
                        scrollUnlock();
                    }
                } else {
                    scrollLockRequests = {};
                    window.__debug_scrollLockRequests = scrollLockRequests;
                    scrollUnlock();
                }
            }

            function showModal (modalId, options) {
                var modal = document.getElementById(modalId);
                if (!modal) {
                    return;
                }

                if (!modal.classList.contains('visible')) {
                    modal.classList.add('visible');
                    if (options && options.scrollLock) {
                        window.lpUI.requestScrollLock(modalId);
                    }
                    modal.dispatchEvent(new Event('lpui-show'));
                    window.dispatchEvent(new CustomEvent('lpui-modal-show', { detail: { id: modalId } }));
                }

                const visibleModals = document.querySelectorAll('.modal.visible');

                if (visibleModals.length > 1) {

                    const maxZIndex = Array.from(visibleModals).reduce((maxZIndex, modal) => {
                        const zIndex = window.getComputedStyle(modal).zIndex;
                        const parsedZIndex = zIndex !== 'auto' ? parseInt(zIndex) : 0;
                        return Math.max(maxZIndex, parsedZIndex);
                    }, 0);

                    modal.style.zIndex = maxZIndex + 1;
                }

            }

            function _hideModal (modalEl) {
                if (!modalEl) {
                    return;
                }
                if (!modalEl.classList.contains('visible')) {
                    return;
                }
                modalEl.classList.remove('visible');
                modalEl.style.zIndex = '';
                modalEl.dispatchEvent(new Event('lpui-hide'));
                var modalId = modalEl.getAttribute('id');
                if (modalId) {
                    window.lpUI.releaseScrollLock(modalId);
                    window.dispatchEvent(new CustomEvent('lpui-modal-hide', { detail: { id: modalId } }));
                }
            }

            function hideModal (modalId) {
                _hideModal(document.getElementById(modalId));
            }

            function hideClosestModal (el) {
              const modal = el?.closest('.modal');
              if (!modal) {
                return;
              }
              if (modal.classList) {
                _hideModal(modal);
                return;
              }
              if (modal.length && modal[0].classList) {
                _hideModal(modal[0]);
              }
            }

            window.lpUI = {
                sideMenuHide: sideMenuHide,
                sideMenuShow: sideMenuShow,
                sideMenuToggle: sideMenuToggle,
                requestScrollLock: requestScrollLock,
                releaseScrollLock: releaseScrollLock,
                showModal: showModal,
                hideModal: hideModal,
                hideClosestModal: hideClosestModal
            }
        })();

        var stringifyPrimitive = function(v) {
            switch (typeof v) {
                case 'string':
                    return v;

                case 'boolean':
                    return v ? 'true' : 'false';

                case 'number':
                    return isFinite(v) ? v : '';

                default:
                    return '';
            }
        };

        function objectToQuerystring(obj, sep, eq, name) {
            // https://github.com/Gozala/querystring/blob/master/encode.js
            sep = sep || '&';
            eq = eq || '=';
            if (obj === null) {
                obj = undefined;
            }

            if (typeof obj === 'object') {
                return Object.keys(obj).map(function(k) {
                    var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;
                    if (Array.isArray(obj[k])) {
                        return obj[k].map(function(v) {
                            return ks + encodeURIComponent(stringifyPrimitive(v));
                        }).join(sep);
                    } else {
                        return ks + encodeURIComponent(stringifyPrimitive(obj[k]));
                    }
                }).filter(Boolean).join(sep);

            }

            if (!name) return '';
            return encodeURIComponent(stringifyPrimitive(name)) + eq +
                    encodeURIComponent(stringifyPrimitive(obj));
        }

        function getPath(url, options) {
            var parser = document.createElement('a');
            parser.href = url || '';
            var path = parser.pathname || '';
            if (path[0] !== '/') {
              // IE does not return path starting with a slash
              path = '/' + path;
            }

            if (options && options.queryString) {
                path += parser.search;
            }

            return path;
        }

        function getMLSAutocomplete(keyword) {
            var searchURL = window.location.protocol + '//' + window.location.hostname + '/home-search/auto_complete';
            var query = {
                kind: 'listings',
                query: keyword
            };

            return superagent
                .get(searchURL)
                .query(query)
                .then(function(res) {
                    var data = res.body || [];
                    /*
                        Of the format:
                          [{
                            "_index": "listing_auto_completes_production_20190723232720775",
                            "_type": "listing_auto_complete",
                            "_id": "235875624",
                            "_score": 0,
                            "status_modified_at": 1553250708,
                            "city": "Jupiter",
                            "price": 1335743,
                            "display_address": "10088 Calabrese Trail Unit: 9 Jupiter FL 33478",
                            "sold_price": null,
                            "id": 235875624,
                            "state": "FL",
                            "photo_urls": [
                              "http://cdn.photos.sparkplatform.com/fl/20190322153144208228000000-o.jpg"
                            ],
                            "status": "Pending"
                          }, ...]
                      */

                    return data;
                });
        }

        function getMLSAutocompleteWithFilters(keyword, filters = {}) {
            var searchURL = window.location.protocol + '//' + window.location.hostname + '/home-search/auto_complete';

            return superagent
                .get(searchURL)
                .query({ kind: 'listings', query: keyword, ...filters })
                .then(function(res) {
                    /*
                        Of the format:
                          [{
                            "_index": "listing_auto_completes_production_20190723232720775",
                            "_type": "listing_auto_complete",
                            "_id": "235875624",
                            "_score": 0,
                            "status_modified_at": 1553250708,
                            "city": "Jupiter",
                            "price": 1335743,
                            "display_address": "10088 Calabrese Trail Unit: 9 Jupiter FL 33478",
                            "sold_price": null,
                            "id": 235875624,
                            "state": "FL",
                            "photo_urls": [
                              "http://cdn.photos.sparkplatform.com/fl/20190322153144208228000000-o.jpg"
                            ],
                            "status": "Pending"
                          }, ...]
                    */
                    return res.body || [];
                });
        }

        function makeMlsLink(data) {
            // Code Dupe from utils/googlePlace
            // mapping of google data type to mls data type
            var mapping = {
                neighborhood: 'neighborhood',
                locality: 'place',
                administrative_area_level_2: 'county',
                administrative_area_level_1: 'state',
                postal_code: 'postalcode',
            };

            function _filterTypes(types) {
                return types.filter(function(type) { return type !== 'political' });
            }

            if (!data || !Object.keys(data).length) {
                return '/home-search/listings';
            }

            var newData = {};
            _filterTypes(data.types).forEach(function(type) {
                if (mapping[type]) {
                    newData.search_type = mapping[type];
                }
            });
            newData.omnibox = data.formatted_address;
            data.address_components.forEach(function(component) {
                _filterTypes(component.types).forEach(function(type) {
                    if (mapping[type]) {
                        newData[mapping[type]] = component.long_name;
                    }
                });
            });
            var bounds = data.geometry.bounds;
            var convertedData = Object.assign(bounds, newData);

            return '/home-search/listings?' + objectToQuerystring(convertedData);
        }

        function debounce(func, wait) {
            let timeout;
            return function(...args) {
                const context = this;
                clearTimeout(timeout);
                timeout = setTimeout(() => func.apply(context, args), wait)
            }
        }

        // Global methods / variables that can be accessed by element js
        window.luxuryPresence = {
            ...window.luxuryPresence,
            defaults: {
                companyId: '0c2a6055-398b-4361-85b0-a2097d188244',
                apiGatewayUrl: '/api-gw',
                routerUrl: '/api-nv',
                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\n    }\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    $pressReleaseId: ID\n    $companyId: String\n    $offset: Int\n    $limit: Int\n    $sort: String\n    $sortDir: SortDirectionEnum\n    $search: String\n    $categories: [String!]\n    $propertyId: [String!]\n    $developmentId: [String!]\n    $agentId: [String!]\n    $teamId: [String!]\n  ) {\n    pressReleases (\n      pressReleaseId: $pressReleaseId\n      companyId: $companyId\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    ) {\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      }\n      publishedAt\n      categories\n    }\n    pressReleasesCount(\n      companyId: $companyId\n      search: $search\n      categories: $categories\n      propertyId: $propertyId\n      developmentId: $developmentId\n      agentId: $agentId\n      teamId: $teamId\n    ) {\n      count\n    }\n  }\n","posts":"\n  query Posts (\n    $postId: ID\n    $companyId: String\n    $offset: Int\n    $limit: Int\n    $order: String\n    $sortDir: SortDirectionEnum\n    $search: String\n    $featured: Boolean\n    $categoryId: String\n    $categoryIds: [String!]\n    $neighborhoodId: [String!]\n    ) {\n    posts (\n      postId: $postId\n      companyId: $companyId\n      offset: $offset\n      limit: $limit\n      order: $order\n      sortDir: $sortDir\n      search: $search\n      featured: $featured\n      postStatusId: \"5f528253-abb7-484e-95c3-330269ac1102\"\n      categoryId: $categoryId\n      categoryIds: $categoryIds\n      neighborhoodId: $neighborhoodId\n    ) {\n      id\n      title\n      subtitle\n      description\n      status\n      featured\n      slug\n      categories {\n        id\n        name\n      }\n      createdAt\n      publishedAt\n      scheduledAt\n      createdBy {\n        firstName\n        lastName\n      }\n      customAuthor\n      media {\n        smallUrl\n        mediumUrl\n        largeUrl\n        xLargeUrl\n        xxLargeUrl\n        height\n        width\n      }\n      seoTitle\n      seoDescription\n      slug\n    }\n    postsCount(\n      companyId: $companyId\n      search: $search\n      featured: $featured\n      postStatusId: \"5f528253-abb7-484e-95c3-330269ac1102\"\n      categoryId: $categoryId\n      categoryIds: $categoryIds\n      neighborhoodId: $neighborhoodId\n    ) {\n      count\n    }\n  }\n","testimonials":"\n  query Testimonials(\n    $testimonialId: ID\n    $agentId: ID\n    $teamId: ID\n    $companyId: String\n    $offset: Int\n    $limit: Int\n    $sort: String\n    $sortDir: SortDirectionEnum\n    $search: String\n  ) {\n    testimonials(\n      testimonialId: $testimonialId\n      agentId: $agentId\n      teamId: $teamId\n      companyId: $companyId\n      offset: $offset\n      limit: $limit\n      sort: $sort\n      sortDir: $sortDir\n      search: $search\n    ){\n      id\n      body\n      author\n      position\n      media {\n        smallUrl\n        mediumUrl\n        largeUrl\n        xLargeUrl\n        xxLargeUrl\n        height\n        width\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    testimonialsCount(\n      companyId: $companyId\n      agentId: $agentId\n      teamId: $teamId\n      search: $search\n    ) {\n      count\n    }\n  }\n","neighborhoods":"\n  query Neighborhoods (\n    $neighborhoodId: ID\n    $companyId: String\n    $search: String\n    $tag: String\n    $offset: Int\n    $limit: Int\n    $sort: String\n    $sortDir: SortDirectionEnum\n  ) {\n    neighborhoods (\n      neighborhoodId: $neighborhoodId\n      companyId: $companyId\n      search: $search\n      tag: $tag\n      offset: $offset\n      limit: $limit\n      sort: $sort\n      sortDir: $sortDir\n    ) {\n      id\n      name\n      description\n      descriptionShort\n      slug\n      tags\n      googlePlaceData\n      mlsLink\n      createdAt\n      media {\n        smallUrl\n        mediumUrl\n        largeUrl\n        xLargeUrl\n        xxLargeUrl\n        height\n        width\n      }\n      seoTitle\n      seoDescription\n    }\n    neighborhoodsCount(\n      companyId: $companyId\n      search: $search\n      tag: $tag\n    ) {\n      count\n    }\n  }\n","developments":"\n  query Developments (\n    $developmentId: ID\n    $companyId: String\n    $offset: Int\n    $limit: Int\n    $sort: String\n    $sortDir: SortDirectionEnum\n    $search: String\n    $tag: [String!]\n    $agentId: [ID!]\n    $neighborhoodId: ID\n    $neighborhoodIds: [ID!]\n  ) {\n    developments (\n      developmentId: $developmentId\n      companyId: $companyId\n      offset: $offset\n      limit: $limit\n      sort: $sort\n      sortDir: $sortDir\n      search: $search\n      tag: $tag\n      agentId: $agentId\n      neighborhoodId: $neighborhoodId\n      neighborhoodIds: $neighborhoodIds\n    ) {\n      id\n      name\n      description\n      descriptionShort\n      slug\n      createdAt\n      media {\n        smallUrl\n        mediumUrl\n        largeUrl\n        xLargeUrl\n        xxLargeUrl\n        height\n        width\n      }\n      googlePlaceData\n      seoTitle\n      seoDescription\n      tags\n    }\n    developmentsCount(\n      companyId: $companyId\n      search: $search\n      tag: $tag\n      agentId: $agentId\n      neighborhoodId: $neighborhoodId\n      neighborhoodIds: $neighborhoodIds\n    ) {\n      count\n    }\n  }\n","pois":"\nquery PointsOfInterest(\n  $regionId: String!,\n  $radius: Int,\n  $offset: Int,\n  $limit: Int,\n  $categories: [PoiCategoryEnum!],\n  $sortBy: PoiSortByEnum\n) {\n pois(\n     regionId: $regionId,\n     radius: $radius,\n     offset: $offset,\n     limit: $limit,\n     categories: $categories,\n     sortBy: $sortBy\n ) {\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 }\n","offices":"\n  query Offices (\n    $officeId: ID\n    $officeIds: [ID!]\n    $companyId: String\n    $slug: String\n    $sort: String\n    $sortDir: SortDirectionEnum\n    $search: String\n    $tags: [String]\n    $offset: Int\n    $limit: Int\n  ) {\n    offices (\n      officeId: $officeId\n      officeIds: $officeIds\n      companyId: $companyId\n      slug: $slug\n      sort: $sort\n      sortDir: $sortDir\n      search: $search\n      tags: $tags\n      offset: $offset\n      limit: $limit\n    ) {\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      media {\n        id\n        originalUrl\n        thumbnailUrl\n        smallUrl\n        mediumUrl\n        largeUrl\n        xLargeUrl\n        xxLargeUrl\n      }\n    }\n    officesCount(\n      companyId: $companyId\n      officeId: $officeId\n      officeIds: $officeIds\n      slug: $slug\n      search: $search\n      tags: $tags\n    ) {\n      count\n    }\n  }\n","teams":"query TeamsAndCount(\n  $offset: Int\n  $limit: Int\n  $search: String\n  $sort: String\n  $sortDir: SortDirectionEnum\n  $companyId: ID\n) {\n  teams(\n    offset: $offset\n    limit: $limit\n    sort: $sort\n    sortDir: $sortDir\n    search: $search\n    companyId: $companyId\n  ) {\n    \n  id\n  companyId\n  name\n  email\n  shortBio\n  fullBio\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  }\n  teamsCount(\n    search: $search\n    companyId: $companyId\n  ) {\n    count\n  }\n}"},
                propertyPlaceholderImage: {"id":"7950fc1d-77d4-445b-bc5a-4ea116e14950","alt":null,"bytes":23717,"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/8f4c1a3e-a64f-4cf5-bb8d-841b35eb6470","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/8f4c1a3e-a64f-4cf5-bb8d-841b35eb6470","authorUrl":null,"createdAt":"2025-02-28T23:58:04.769Z","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/8f4c1a3e-a64f-4cf5-bb8d-841b35eb6470","sourceUrl":null,"updatedAt":"2025-02-28T23:58:04.769Z","xLargeUrl":"https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/8f4c1a3e-a64f-4cf5-bb8d-841b35eb6470","__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/8f4c1a3e-a64f-4cf5-bb8d-841b35eb6470","description":null,"displayName":"property_lockup_logo-2","originalUrl":"https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/8f4c1a3e-a64f-4cf5-bb8d-841b35eb6470","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/8f4c1a3e-a64f-4cf5-bb8d-841b35eb6470","originalFileName":"Property_lockup_logo (2)","cloudinaryPublicId":"8f4c1a3e-a64f-4cf5-bb8d-841b35eb6470"}
            },
            objectToQuerystring: objectToQuerystring,
            getPath: getPath,
            getMLSAutocomplete: getMLSAutocomplete,
            getMLSAutocompleteWithFilters: getMLSAutocompleteWithFilters,
            makeMlsLink: makeMlsLink,
            debounce: debounce,
        };

        var wowOffset = 100;
    </script>
    <script>
        (() => {

function $parcel$interopDefault(a) {
  return a && a.__esModule ? a.default : a;
}
// Entry point for lp-sdk bundle
// This file exists to ensure Parcel v2 outputs the correct filename
/* global window */ var $53de3c160faf5a81$exports = {};
/*
WARNING!!! This file is used both on the server and in client's web-browser
please don't require/import any server-side related config/functions here
If we need something, let's pass it as a parameter of the factory
*/ var $0ce6edea77f7b81a$exports = {};
$0ce6edea77f7b81a$exports = {
    getVideoFirstFrame (videoUrl) {
        // The default Cloudinary asset delivery URL has the following structure: https://res.cloudinary.com/<cloud_name>/<asset_type>/<delivery_type>/<transformations>/<version>/<public_id>.<extension>
        //  https://cloudinary.com/documentation/video_manipulation_and_delivery#transformation_url_structure
        // The problem is that <transformations> and <version> are optional, and <transformations> can be chained separated by '/'
        // One more issue to be handled https://cloudinary.com/documentation/advanced_url_delivery_options#seo_friendly_media_asset_urls
        const CLOUDINARY_URL = 'https://res.cloudinary.com/';
        const invalid = !videoUrl || !videoUrl.startsWith(CLOUDINARY_URL);
        if (invalid) return null;
        const urlComponents = videoUrl.replace(CLOUDINARY_URL, '').replace('f_auto:video', 'f_auto').split('/');
        // checking if <asset_type> is not video or videos
        if (urlComponents[1].toLowerCase().indexOf('video') === -1) return null;
        // Filename is last urlComponent <public_id>.<extension>
        let filename = urlComponents[urlComponents.length - 1];
        if (filename.lastIndexOf('.') > -1) filename = `${filename.slice(0, filename.lastIndexOf('.'))}.jpg`;
        else filename += '.jpg';
        urlComponents[urlComponents.length - 1] = filename;
        // We need to add so_0,eo_0 transformation to the url to target the first frame.
        // we want to find the position at which we want to insert it as a chained transformation
        const firstFrameTransformation = 'so_0,eo_0';
        let firstFrameTransformationPosition = 3;
        // checking cases for SEO-friendly URLs
        if (urlComponents[1].toLowerCase() === 'videos' && urlComponents[2] !== '') firstFrameTransformationPosition = 2;
        // checking the last transformation position in the url
        // https://cloudinary.com/documentation/transformation_reference
        // https://regex101.com/r/lE3W6u/1
        const transformationRegex = /^(?:[a-z]{1,3}|\$\w+)_\S+$/;
        while(firstFrameTransformationPosition < urlComponents.length - 1 && transformationRegex.test(urlComponents[firstFrameTransformationPosition]))firstFrameTransformationPosition++;
        urlComponents.splice(firstFrameTransformationPosition, 0, firstFrameTransformation);
        return CLOUDINARY_URL + urlComponents.join('/');
    }
};


/**
 * Create helpers with given Handlebars instance
 *
 * @param {Object} HandlebarsInstance
 * @param {Function} isEqual - we use different implementation if isEqual on server and on client
 * @return {Object}
 */ function $53de3c160faf5a81$var$handlebarsHelpersFactory(HandlebarsInstance, { isEqual: isEqual }) {
    // notice!: code below assumes list is ordered lowest to highest width
    const MEDIA_SIZES = [
        {
            field: 'thumbnailUrl',
            w: 320
        },
        {
            field: 'smallUrl',
            w: 960
        },
        {
            field: 'mediumUrl',
            w: 1280
        },
        {
            field: 'largeUrl',
            w: 1920
        },
        {
            field: 'xLargeUrl',
            w: 2560
        },
        {
            field: 'xxLargeUrl',
            w: 3456
        }
    ];
    const MEDIA_SIZE_FOR_SRC = 1280;
    const lpFormatNumber = function(number, unit, precision) {
        const localization = 'en-US';
        if (!number) return '';
        if (typeof number === 'string') {
            const trimmed = number.trim();
            if (/[^+\-0-9.]/.test(trimmed)) return number; // returning text 'as is' assuming it already has all formatting
            // eslint-disable-next-line
            number = parseFloat(trimmed);
            if (!number) return '';
        }
        const currencyPrecision = typeof precision === 'number' ? precision : 0;
        const currencyFractionDigits = Number.isInteger(number) ? 0 : currencyPrecision;
        const currencyFractionOptions = {
            minimumFractionDigits: currencyFractionDigits,
            maximumFractionDigits: currencyFractionDigits
        };
        if (unit === 'USD') return `$${number.toLocaleString(localization, currencyFractionOptions)}`;
        if (unit === 'CAD') return `$${number.toLocaleString(localization, currencyFractionOptions)} CAD`;
        if (unit === 'EUR') return `\u{20AC}${number.toLocaleString(localization, currencyFractionOptions)}`;
        if (unit === 'GBP') return `\xa3${number.toLocaleString(localization, currencyFractionOptions)}`;
        if (unit === 'PERCENT') return `${number}%`;
        if (typeof precision === 'number' && precision > -1) return number.toLocaleString(localization, {
            maximumFractionDigits: precision
        });
        return number.toLocaleString(localization);
    };
    const formatFrequency = function(freqUnit) {
        switch(freqUnit){
            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 '';
        }
    };
    const formatFrequencyShort = function(freqUnit) {
        switch(freqUnit){
            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 '';
        }
    };
    const formatFrequencyStd = function(freqUnit) {
        switch(freqUnit){
            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 '';
        }
    };
    const formatFrequencyExt = function(unit, options) {
        let val;
        let separator;
        const opts = options || {};
        switch(opts.mode){
            case 'short':
                val = formatFrequencyShort(unit);
                separator = opts.frequencySeparator || '/';
                break;
            case 'standard':
            case 'std':
                val = formatFrequencyStd(unit);
                separator = opts.frequencySeparator || '/';
                break;
            case 'long':
            default:
                val = formatFrequency(unit);
                separator = opts.frequencySeparator || ' ';
        }
        if (!val) return '';
        if (!opts.frequencyTag && !opts.frequencyClass) return separator + val;
        return `${separator}<${opts.frequencyTag || 'span'}${opts.frequencyClass ? ` class="${opts.frequencyClass}"` : ''}>${val}</${opts.frequencyTag || 'span'}>`;
    };
    return {
        isEmpty (arg1, options) {
            const result = !arg1 || (typeof arg1 === 'string' ? !arg1.trim() : false) || !Object.keys(arg1).length;
            if (options.fn) return result ? options.fn(this) : options.inverse(this);
            return result;
        },
        ifEquals (arg1, arg2, options) {
            return isEqual(arg1, arg2) ? options.fn(this) : options.inverse(this);
        },
        'raw-helper': function(options) {
            return options.fn();
        },
        striptags (txt) {
            if (!txt) return '';
            // Remove HTML Comments (escaping something to not make real html comment by expression)
            // eslint-disable-next-line no-useless-escape,no-param-reassign
            txt = txt.replace(/<\!--(.|[\r\n])*?-\->/g, '');
            // Remove XML fragments and <style> and <svg> tags with content
            // eslint-disable-next-line
            txt = txt.replace(/<(xml|style|svg)("[^"]*"|'[^']*'|[^>])*>(.|[\r\n])*?<\/\1>/gi, '');
            // Replace &nbsp; with space
            // eslint-disable-next-line no-param-reassign
            txt = txt.replace(/&nbsp;/g, ' ');
            // Remove HTML Tags
            const regexp = /<\/?("[^"]*"|'[^']*'|[^>])*(>|$)/g;
            return txt.replace(regexp, '');
        },
        striptagsLineBreaks (txt) {
            if (!txt) return '';
            // Remove HTML Comments (escaping something to not make real html comment by expression)
            // eslint-disable-next-line no-useless-escape,no-param-reassign
            txt = txt.replace(/<\!--(.|[\r\n])*?-\->/g, '');
            // Remove XML fragments and <style> and <svg> tags with content
            // eslint-disable-next-line no-param-reassign
            txt = txt.replace(/<(xml|style|svg)("[^"]*"|'[^']*'|[^>])*>(.|[\r\n])*?<\/\1>/gi, '');
            // Replace <br> and </p> tags with line break char, skipping last </p> which is not followed by <br> or </p>
            // eslint-disable-next-line no-param-reassign
            txt = txt.replace(/(<br\s*\/?>)|(<\/p\s*>)(?=.*(<\/p\s*>|<br\s*\/?>))/g, '&#10;');
            // Replace &nbsp; with space
            // eslint-disable-next-line no-param-reassign
            txt = txt.replace(/&nbsp;/g, ' ');
            // Remove HTML Tags
            const regexp = /<\/?("[^"]*"|'[^']*'|[^>])*(>|$)/g;
            return txt.replace(regexp, '');
        },
        truncate (text, limit, suffix) {
            if (!text) return '';
            if (text.length > limit) return typeof suffix === 'string' ? text.slice(0, limit - suffix.length) + suffix : text.slice(0, limit);
            return text;
        },
        // eslint-disable-next-line
        setSubArray (items = [], start, end, subArrayName, options) {
            // eslint-disable-next-line
            options.data.root[subArrayName] = items.slice(start, end);
        },
        formatAreaUnit (areaUnit) {
            switch(areaUnit){
                case 'ACRE':
                    return 'Acres';
                case 'SQUARE_METER':
                    return 'Sq.M.';
                case 'SQUARE_YARD':
                    return 'Sq.Yd.';
                default:
                    return 'Sq.Ft.';
            }
        },
        formatFrequency: formatFrequency,
        formatFrequencyShort: formatFrequencyShort,
        lpFormatFrequency (freqUnit, options) {
            return formatFrequencyExt(freqUnit, options && options.hash);
        },
        subArray (index, start, end, options) {
            return index >= start && index < end ? options.fn(this) : options.inverse(this);
        },
        formatPropertyStatus (status, showSoldDate, date) {
            let formattedStatus = '';
            switch(status){
                case 'SOLD':
                    formattedStatus = 'Sold';
                    break;
                case 'FOR_SALE':
                    formattedStatus = 'For Sale';
                    break;
                case 'COMING_SOON':
                    formattedStatus = 'Coming Soon';
                    break;
                case 'INACTIVE':
                    formattedStatus = 'Inactive';
                    break;
                case 'POCKET_LISTING':
                    formattedStatus = 'Pocket Listing';
                    break;
                case 'PENDING':
                    formattedStatus = 'Pending';
                    break;
                case 'UNDER_CONTRACT':
                    formattedStatus = 'Under Contract';
                    break;
                case 'ACTIVE_UNDER_CONTRACT':
                    formattedStatus = 'Active Under Contract';
                    break;
                default:
                    formattedStatus = status;
            }
            // `typeof date === 'string'` matters: when called as
            // `{{formatPropertyStatus status}}` Handlebars passes its options object
            // as `showSoldDate`/`date`, and this guard keeps the legacy output.
            if ((formattedStatus === 'Sold' || formattedStatus === 'Leased') && showSoldDate && typeof date === 'string' && date) formattedStatus += ` on ${date}`;
            return formattedStatus;
        },
        formatGrade (gradeValue) {
            switch(gradeValue){
                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 (uri) {
            return encodeURI(uri);
        },
        encodeURIComponent (txt) {
            return encodeURIComponent(txt);
        },
        hbFormatDate (date, type) {
            if (!date) return '';
            const newDate = date === 'current' ? new Date() : new Date(date);
            if (Number.isNaN(newDate.getTime())) return '';
            const months = [
                'January',
                'February',
                'March',
                'April',
                'May',
                'June',
                'July',
                'August',
                'September',
                'October',
                'November',
                'December'
            ];
            if (type === 'YYYY' || type === 'year') return `${newDate.getFullYear()}`;
            if (type === 'MM/DD/YY') {
                let month = newDate.getMonth() + 1;
                if (month < 10) month = `0${month.toString()}`;
                return `${month}/${newDate.getDate()}/${newDate.getFullYear().toString().substr(-2)}`;
            }
            return `${months[newDate.getMonth()]} ${newDate.getDate()}, ${newDate.getFullYear()}`;
        },
        openHousesFormat (startDate, endDate, timeZone) {
            if (!startDate || !endDate) return '';
            /**
       * return formatted time.
       * @param {date} date
       * @return {time} time.
       */ const getTime = (date)=>{
                let hours = date.getHours();
                if (hours > 12) hours -= 12;
                const prefix = '0';
                let time = `${hours}:${date.getMinutes() > 9 ? date.getMinutes() : prefix + date.getMinutes()}`;
                if (date.getHours() > 11) time += 'PM';
                else time += 'AM';
                return time;
            };
            let tz = '';
            let startFDate = startDate;
            let endFDate = endDate;
            if (timeZone) {
                startFDate = new Date(startDate).toLocaleString('en-US', {
                    timeZone: timeZone
                });
                endFDate = new Date(endDate).toLocaleString('en-US', {
                    timeZone: timeZone
                });
                [, , , tz] = new Date(endDate).toLocaleString('en-US', {
                    timeZone: timeZone,
                    timeZoneName: 'short'
                }).split(' ');
            }
            const date = new Date(startFDate);
            const openHouseDate = date.toLocaleDateString('en-US');
            const time1 = getTime(date);
            const date2 = new Date(endFDate);
            const time2 = getTime(date2);
            return `${openHouseDate} ${time1} - ${time2} ${tz}`;
        },
        math (lvalue, operator, rvalue) {
            // eslint-disable-next-line
            lvalue = parseFloat(lvalue);
            // eslint-disable-next-line
            rvalue = parseFloat(rvalue);
            return ({
                '+': lvalue + rvalue,
                '-': lvalue - rvalue,
                '*': lvalue * rvalue,
                '/': lvalue / rvalue,
                '%': lvalue % rvalue
            })[operator];
        },
        findByKey (values, key, value, options) {
            const result = (values || []).find((entry)=>entry[key] === value);
            return options.fn(result);
        },
        capitalize (string, split, options) {
            let capitalized;
            if (typeof string === 'string' && string.length) capitalized = string.toLowerCase().split(split).map((w)=>w.charAt(0).toUpperCase() + w.slice(1)).join(' ').toString();
            return capitalized;
        },
        and (...arg) {
            return Array.prototype.slice.call(arg).every(Boolean);
        },
        or (...arg) {
            return Array.prototype.slice.call(arg, 0, -1).some(Boolean);
        },
        not (arg) {
            return !arg;
        },
        orderByIds (items, orderedIds, options) {
            let ret = '';
            let data = null;
            if (options.data) data = HandlebarsInstance.createFrame(options.data);
            // When passed orderedIds, filter out empty items including empty strings and
            // only show items (and in that order) in a loop
            //  If no orderedIds provided, show all items
            const filteredIds = (orderedIds || []).filter(Boolean);
            if (filteredIds && filteredIds.length) {
                let skippedItems = 0;
                ret = filteredIds.reduce((res, id, idx)=>{
                    const item = (items || []).find((item)=>item.id === id);
                    // ID doesn't exist so ditch it
                    if (!item) {
                        skippedItems += 1;
                        return res;
                    }
                    if (data) data.index = idx - skippedItems;
                    return res + options.fn(item, {
                        data: data
                    });
                }, '');
            } else for(let i = 0, j = (items || []).length; i < j; i++){
                if (data) data.index = i;
                ret += options.fn(items[i], {
                    data: data
                });
            }
            return ret;
        },
        ifIn (elem, list, options) {
            if (list && list.indexOf(elem) > -1) return options.fn(this);
            return options.inverse(this);
        },
        partial (name, options) {
            // Register a partial and output the content in a script for clientside rendering
            HandlebarsInstance.registerPartial(name, HandlebarsInstance.compile(options.fn()));
            // eslint-disable-next-line
            const script = `<script type="text/x-handlebars-template" class="${name} pagination-script">${options.fn()}</${'script'}>`;
            return script;
        },
        numCompare (l, r, operator, options) {
            const operators = {
                '==': function(l, r) {
                    // eslint-disable-next-line
                    return l == r;
                },
                '===': function(l, r) {
                    return l === r;
                },
                '!=': function(l, r) {
                    // eslint-disable-next-line
                    return l != r;
                },
                '<': function(l, r) {
                    return l < r;
                },
                '>': function(l, r) {
                    return l > r;
                },
                '<=': function(l, r) {
                    return l <= r;
                },
                '>=': function(l, r) {
                    return l >= r;
                }
            };
            const result = operators[operator](l, r);
            if (result) return options.fn ? options.fn(this) : true;
            return options.fn ? options.inverse(this) : false;
        },
        lpFormatNumber: lpFormatNumber,
        arrayToHtmlList (arr, options) {
            // eslint-disable-next-line
            return arr.reduce((acc, current)=>{
                try {
                    if (typeof current === 'object' || current === null) return acc;
                    // eslint-disable-next-line
                    return acc += `<li>${current}</li>`;
                } catch (e) {
                /* empty */ }
            }, '');
        },
        join (array, separator, options) {
            if (!array || !array.join) return '';
            return array.join(typeof separator === 'string' ? separator : ', ');
        },
        dedupe (items, key, options) {
            let data = null;
            let skippedItems = 0;
            const list = new Set();
            if (options.data) data = HandlebarsInstance.createFrame(options.data);
            return (items || []).reduce((res, item, idx)=>{
                const val = key ? item[key] : item;
                // Item is unique if we're passed a key that is not defined
                const isUnique = !list.has(val) || key && val === undefined;
                if (isUnique) list.add(val);
                else {
                    skippedItems += 1;
                    return res;
                }
                if (data) data.index = idx - skippedItems;
                return res + options.fn(item, {
                    data: data
                });
            }, '');
        },
        JSONstringify (obj, options) {
            return JSON.stringify(obj);
        },
        // eslint-disable-next-line sonarjs/cognitive-complexity
        formatPropertyPrice (...args) {
            const options = args[args.length - 1];
            const opts = options.hash;
            const property = args.length > 1 ? args[0] : opts.property;
            const precision = opts.precision || 0;
            if (args.length > 2) // eslint-disable-next-line
            opts.mode = args[1];
            if (!opts.mode) opts.mode = 'short';
            let separator = args.length > 3 ? args[2] : opts.separator;
            if (typeof separator !== 'string') separator = ' | ';
            if (property.isPasswordProtected) return 'Exclusive Listing';
            let priceUponRequestText = args.length > 4 ? args[3] : opts.priceUponRequestText;
            if (typeof priceUponRequestText !== 'string') priceUponRequestText = 'Price Upon Request';
            if (property.priceUponRequest) return priceUponRequestText;
            let price = property.salesPrice;
            let reduced = null;
            // eslint-disable-next-line sonarjs/no-collapsible-if
            if (property.status !== 'SOLD' && property.status !== 'Leased') {
                if (property.reducedPrice) {
                    if (!opts.reducedClass) price = property.reducedPrice;
                    else reduced = property.reducedPrice;
                }
            }
            let result = '';
            if (reduced) result += `<${opts.reducedTag || 'span'} class="${opts.reducedClass}">${lpFormatNumber(reduced, property.currency, precision)}</${opts.reducedTag || 'span'}>`;
            if (price) {
                price = lpFormatNumber(price, property.currency, precision);
                if (opts.priceTag || opts.priceClass) result += `<${opts.priceTag || 'span'}${opts.priceClass ? ` class="${opts.priceClass}"` : ''}>${price}</${opts.priceTag || 'span'}>`;
                else result += price;
            }
            const leasePrice = property.leasePrice && lpFormatNumber(property.leasePrice, property.currency, precision);
            if (leasePrice) {
                if (result) result += separator;
                const leaseText = `${leasePrice}${formatFrequencyExt(property.leasePeriod, opts)}`;
                if (opts.leaseTag || opts.leaseClass) result += `<${opts.leaseTag || 'span'}${opts.leaseClass ? ` class="${opts.leaseClass}"` : ''}>${leaseText}</${opts.leaseTag || 'span'}>`;
                else result += leaseText;
            }
            return new HandlebarsInstance.SafeString(result);
        },
        // eslint-disable-next-line sonarjs/cognitive-complexity
        mediaImage (mediaSource, options = {}) {
            if (!mediaSource) return;
            const { lazy: lazy, ...attributes } = options.hash;
            let src = '';
            let srcset = '';
            if (typeof mediaSource === 'string') src = mediaSource;
            else {
                const srcMap = {};
                const { height: height, width: width, altTagText: altTagText } = mediaSource;
                MEDIA_SIZES.forEach((src)=>{
                    if (mediaSource[src.field] && !srcMap[mediaSource[src.field]]) srcMap[mediaSource[src.field]] = src.w;
                });
                const srcs = Object.keys(srcMap);
                if (!srcs.length) return;
                if (altTagText) attributes.alt = altTagText;
                if (height && width) {
                    if (height >= width) {
                        if (attributes.class) attributes.class += ' portrait';
                        else attributes.class = 'portrait';
                    }
                    if ('setDims' in options.hash) {
                        attributes.width = width;
                        attributes.height = height;
                    }
                }
                if (srcs.length > 1 && width && width < srcMap[srcs[srcs.length - 1]]) {
                    const maxSrc = srcs.findIndex((src)=>srcMap[src] >= width);
                    srcs.splice(maxSrc + 1);
                    srcMap[srcs[srcs.length - 1]] = width;
                }
                if (srcs.length > 1) {
                    srcset = srcs.map((s)=>`${s} ${srcMap[s]}w`).join(', ');
                    srcs.sort((a, b)=>Math.abs(srcMap[a] - MEDIA_SIZE_FOR_SRC) - Math.abs(srcMap[b] - MEDIA_SIZE_FOR_SRC));
                }
                // eslint-disable-next-line
                src = srcs[0];
            }
            delete attributes.setDims;
            if (!srcset) delete attributes.sizes;
            if (!('alt' in attributes)) attributes.alt = '';
            if (!('loading' in attributes) && (options?.data?.root?.sectionIndex > 1 || lazy)) attributes.loading = 'lazy';
            const attrs = Object.keys(attributes).map((k)=>`${HandlebarsInstance.escapeExpression(k)}="${HandlebarsInstance.escapeExpression(attributes[k])}"`).join(' ');
            return new HandlebarsInstance.SafeString(// eslint-disable-next-line sonarjs/no-nested-template-literals
            `<img src="${src}"${srcset ? ` srcset="${srcset}"` : ''}${attrs ? ` ${attrs}` : ''}>`);
        },
        bgImage (mediaSource) {
            if (!mediaSource) return '';
            if (typeof mediaSource === 'string') return mediaSource;
            return mediaSource.largeUrl || mediaSource.url || '';
        },
        concat (...rest) {
            let outStr = '';
            // rest params are Array instances while arguments object is not
            for(const arg in rest)if (rest[arg] !== null && rest[arg] !== undefined && typeof rest[arg] !== 'object') outStr += rest[arg];
            return outStr;
        },
        setVideoExtension (uri, format) {
            if (!uri || !format) return '';
            const decodedUri = new URL(uri);
            if (decodedUri.host !== 'res.cloudinary.com') {
                // Not a cloudinary uri, do not rewrite
                if (decodedUri.pathname.endsWith(`.${format}`)) return uri;
                return '';
            }
            // Rewrite the cloudinary uri
            const lastPeriodIdx = decodedUri.pathname.lastIndexOf('.');
            let pathWithoutFormat = decodedUri.pathname;
            if (lastPeriodIdx !== -1) pathWithoutFormat = decodedUri.pathname.substr(0, lastPeriodIdx);
            decodedUri.pathname = `${pathWithoutFormat}.${format}`;
            return decodedUri.toString();
        },
        addVideoSources (uri) {
            if (!uri) return '';
            const VIDEO_VARIANTS = [
                {
                    format: 'webm',
                    codec: 'vp9',
                    htmlCodecs: ';codecs=vp9'
                },
                {
                    format: 'mp4',
                    codec: 'h265',
                    htmlCodecs: ';codecs=hvc1'
                },
                {
                    format: 'mp4',
                    codec: 'h264',
                    htmlCodecs: ''
                }
            ];
            const VIDEO_EXT_REGEXP = /\.(?:3gp|mpeg|mp4|m4v|m4p|ogv|ogg|mov|webm)$/;
            if (!uri.includes('res.cloudinary.com')) // keep existing or no extension for non Cloudinary urls
            return `<source data-src="${uri}">`;
            const CONSTRAINED_DELIVERY = 'q_auto,w_1280,c_limit';
            const uriNoExt = uri.replace(VIDEO_EXT_REGEXP, '');
            const sources = VIDEO_VARIANTS.map((type)=>{
                const cloudinaryFormatUrl = `${uriNoExt.replace(/f_auto(?::video)?(?:,q_auto(?::\w+)?)?/, `f_${type.format},vc_${type.codec},${CONSTRAINED_DELIVERY}`)}.${type.format}`;
                return `<source data-src="${cloudinaryFormatUrl}" type="video/${type.format}${type.htmlCodecs}">`;
            });
            return sources.join('\n');
        },
        cloudinaryVideoFirstFrame: $0ce6edea77f7b81a$exports.getVideoFirstFrame,
        initials (text, options) {
            if (!text) return '';
            if (options?.hash?.endChar) // eslint-disable-next-line
            text = text.split(options.hash.endChar)[0];
            // eslint-disable-next-line
            const maxChars = +options?.hash?.maxChars || 2; // we do not allow this to be 0
            let result = text.match(/\b\w/g)?.slice(0, maxChars);
            if (!result) return '';
            if (options?.hash?.addText) result = result.map((item)=>item + options.hash.addText);
            return result.join(options?.hash?.joinWith || '').toUpperCase();
        },
        normalizePhone (phone) {
            if (!phone) return '';
            const str = String(phone).trim();
            return (str.startsWith('+') ? '+' : '') + str.replace(/\D/g, '');
        }
    };
}
$53de3c160faf5a81$exports = $53de3c160faf5a81$var$handlebarsHelpersFactory;


/* global window, document */ // eslint-disable-next-line import/prefer-default-export
class $dc851cf3939b6ef5$export$ff0712c26d5458f7 {
    /**
   * Initialize Modal Controller
   * @param {Object} options
   */ constructor(options){
        this.isBuilder = false;
        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 = false;
        this.googleMapsAPIKey = null;
    }
    /**
   * Controllers must implement a "destroy" method to be called
   * after page navigation to remove event handlers / cleanup
   */ destroy() {}
    /**
   * Set page and supporting data
   * @param {string} pageId
   * @param {Object} options
   */ setPage(pageId, options = {}) {
        this.pageId = pageId;
        this.shareId = options.shareId || null;
        this.pageMeta = {
            sourceResource: options.sourceResource,
            pageElementId: options.pageElementId,
            pageQueryVariables: options.pageQueryVariables || {}
        };
    }
    /**
   * Sets if we are in pagebuilder context or not
   * @param {boolean} isBuilder
   */ setIsBuilder(isBuilder) {
        this.isBuilder = isBuilder;
    }
    /**
   * Set Company and supporting data
   * @param {string} companyId
   * @param {Object} options
   */ setCompany(companyId, options = {}) {
        this.companyId = companyId;
    }
    /**
   * Set website and supporting data
   * @param {string} websiteId
   * @param {Object} options
   */ setWebsite(websiteId, options = {}) {
        this.websiteId = websiteId;
        if (options.myhomeDashboardEnabled) this.myhomeDashboardEnabled = options.myhomeDashboardEnabled;
    }
    /**
   * Set websiteApiGatewayUrl
   * @param {string} websiteApiGatewayUrl
   * @param {Object} options
   */ setWebsiteApiGatewayUrl(websiteApiGatewayUrl, options = {}) {
        this.websiteApiGatewayUrl = websiteApiGatewayUrl;
    }
    /**
   * Set buyerSellerServiceUrl
   * @param {string} buyerSellerServiceUrl
   * @param {Object} options
   */ setBuyerSellerServiceUrl(buyerSellerServiceUrl, options = {}) {
        this.buyerSellerServiceUrl = buyerSellerServiceUrl;
    }
    /**
   * Set divolteServiceUrl and supporting data
   * @param {string} divolteServiceUrl
   * @param {Object} options
   */ setDivolteServiceUrl(divolteServiceUrl, options = {}) {
        this.divolteServiceUrl = divolteServiceUrl;
    }
    /**
   * Set eventBusUrl
   * @param {string} eventBusUrl
   * @param {Object} options
   */ setEventBusUrl(eventBusUrl, options = {}) {
        this.eventBusUrl = eventBusUrl;
    }
    /**
   * Set templateId and supporting data
   * @param {string} templateId
   * @param {Object} options
   */ setTemplateId(templateId, options = {}) {
        this.templateId = templateId;
    }
    /**
   * Set leadIngesterUrl
   * @param {string} leadIngesterUrl
   * @param {Object} options
   */ setLeadIngesterUrl(leadIngesterUrl, options = {}) {
        this.leadIngesterUrl = leadIngesterUrl;
    }
    /**
   * Set googleMapsAPIKey
   * @param {string} googleMapsAPIKey
   * @param {Object} options
   */ setGoogleMapsAPIKey(googleMapsAPIKey, options = {}) {
        this.googleMapsAPIKey = googleMapsAPIKey;
    }
    /**
   * Set eventBus
   * @param {Object} options
   */ setEventBus({ enabled: enabled, apiKey: apiKey, url: url }) {
        this.eventBus = {
            enabled: enabled,
            apiKey: apiKey,
            url: url
        };
    }
}


/* eslint-disable import/prefer-default-export */ // eslint-disable-next-line import/prefer-default-export
class $7c391e2f7931d60d$export$3b5bd9381a52554c {
    /**
   * Initialize Base Controller at build time
   * @param { ConfigController } config
   * @param {Window} window
   * @param {Document} document
   */ constructor(config, window, document){
        // TODO: Listen for events from configController to update configuration
        this.config = config;
        this.window = window;
        this.document = document;
        if (!this.destroy) // With turbolinks, we want to ensure that on each page load we have the latest version of the sdk
        //  Controllers are deconstructed and replaced (on the window object) per request
        //  Controllers must use the destory method to remove event handlers to prevent undefined behavior
        throw new Error('Controllers must implement a deconstructor');
    }
}


// eslint-disable-next-line import/prefer-default-export
const $a3e97e89bbc2a366$export$f037eeffb5561205 = 2000;


class $0ead03fdb95fa9ce$export$d507f25e63650365 extends (0, $7c391e2f7931d60d$export$3b5bd9381a52554c) {
    /**
   * Initialize Modal Controller at build time
   * @param { ConfigController } config
   * @param {Window} window
   * @param {Document} document
   */ constructor(config, window, document){
        super(config, window, document);
        this.setLoginState = this.setLoginState.bind(this);
        this.pageId = null;
        this.modals = [];
        this.exitModalTriggered = {};
        this.exitModalEventListeners = [];
    }
    /**
   * Initialize Modal Controller at run time
   * Attach handlers and events to DOM
   * @param {Object} options
   */ initialize(options) {
        try {
            const { config: config, document: document } = this;
            this.pageId = config.pageId;
            this.modals = document.querySelectorAll('body > #modals > .modal');
            options.modals.forEach((m)=>{
                this._attachModalHandler(m);
            });
        } catch (e) {
            // eslint-disable-next-line no-console
            console.log(e);
        }
    }
    /**
   * Controllers must implement a "destroy" method to be called
   * after page navigation to remove event handlers / cleanup
   */ destroy() {
        const { document: document } = this;
        this.exitModalEventListeners.forEach((listener)=>{
            document.removeEventListener('mouseout', listener);
        });
        this.modals = [];
        this.exitModalTriggered = {};
        this.exitModalEventListeners = [];
    }
    /**
   * Set modal to local storage with expiration
   * @param {string} modalId
   */ setModalWithExpiry(modalId) {
        const { window: window } = this;
        const TTL = 86400000; // 24 hours
        const now = new Date();
        const expiry = now.getTime() + TTL;
        const key = `modal-controller-${modalId}`;
        try {
            window.localStorage.setItem(key, JSON.stringify(expiry));
        } catch (err) {
        // catch error when setting item to storage on iOS private browser
        }
    }
    /**
   * Save success login modal to local storage
   */ setLoginState() {
        const { window: window } = this;
        try {
            window.localStorage.setItem('isSignedUp', 'true');
        } catch (err) {
        // catch error when setting item to storage on iOS private browser
        }
    }
    /**
   * Get modal and check expiration
   * @param {string} modalId
   * @return {boolean}
   */ getModalWithExpiry(modalId) {
        const { window: window } = this;
        const storage = window.localStorage;
        const expirationTime = storage.getItem(`modal-controller-${modalId}`);
        if (!expirationTime) return false;
        const expiry = JSON.parse(expirationTime);
        const now = new Date();
        if (now.getTime() > expiry) {
            storage.removeItem(`modal-controller-${modalId}`);
            return false;
        }
        return true;
    }
    /**
   * Make a modal visible
   * @param {string} modalId
   * @param {Object} options
   */ show(modalId, options = {}) {
        // TODO: migrate logic from page.handlebars
        const { window: window } = this;
        const modalViewed = this.getModalWithExpiry(modalId);
        // Only show a modal if it has not been seen
        // Does not affect "show modal on button click"
        if (modalId && !modalViewed || options.forced === true) {
            window.lpUI.showModal(`modal-${modalId}`, options);
            this.setModalWithExpiry(modalId);
        }
    }
    /**
   * Attach events based on Modal type and page settings
   * @param {Modal} modal
   */ _attachModalHandler(modal) {
        const { pageId: pageId } = this;
        const { trigger: trigger, pageSpecific: pageSpecific } = modal;
        if (pageSpecific) {
            const pageIds = modal.pages.map((p)=>p.pageId);
            if (!pageIds.includes(pageId)) // Modal does not belong to this page
            return;
        }
        if (trigger === 'EXIT') this._exitModalHandler(modal);
        else if (trigger === 'TIMER') this._timerModalHandler(modal);
        else if (trigger === 'FORCED') this._forcedModalHandler(modal);
    }
    /**
   * Attach events for exit Modals
   * @param {Modal} modal
   */ _exitModalHandler(modal) {
        // eslint-disable-next-line
        const that = this;
        const { document: document, exitModalTriggered: exitModalTriggered } = this;
        const { modalId: modalId } = modal;
        /**
     * Handle the mouseout dom event
     * @param {Event} event
     */ function triggerExitModal(event) {
            if (exitModalTriggered[modalId]) return;
            if (!event.toElement && !event.relatedTarget) {
                that.show(modalId);
                exitModalTriggered[modalId] = true;
            }
        }
        document.addEventListener('mouseout', triggerExitModal);
        this.exitModalEventListeners.push(triggerExitModal);
    }
    /**
   * Attach events for timer Modals
   * @param {Modal} modal
   */ _timerModalHandler(modal) {
        const { modalId: modalId, timerDelay: timerDelay } = modal;
        setTimeout(()=>{
            this.show(modalId);
        }, timerDelay);
    }
    /**
   * Attach events for Forced Modals
   * @param {Modal} modal
   */ _forcedModalHandler(modal) {
        const { modalId: modalId } = modal;
        const { window: window, document: document } = this;
        const isLoggedIn = window.localStorage.getItem('isSignedUp') === 'true';
        if (!isLoggedIn) {
            // watch for event triggering success login
            const forcedModal = document.querySelector(`#modal-${modalId}`);
            const contactForm = forcedModal?.querySelector('form');
            const MODAL_CLOSE_DELAY = contactForm?.dataset.delay || (0, $a3e97e89bbc2a366$export$f037eeffb5561205);
            // form submit autoclose is handled by contactForms controller
            contactForm.addEventListener('formsubmitted', ()=>{
                this.setLoginState();
            });
            window.addEventListener('oauthSuccess', ()=>{
                this.setLoginState();
                contactForm.classList.add('success');
                setTimeout(()=>{
                    window.lpUI.hideModal(`modal-${modalId}`);
                    contactForm.reset();
                    contactForm.classList.remove('success');
                }, MODAL_CLOSE_DELAY);
            });
            this.show(modalId, {
                forced: true
            });
        }
    }
}


/* eslint-disable import/prefer-default-export */ /* global window */ /* eslint-disable import/prefer-default-export */ /**
 * Handle navigation push
 * @param {string} href
 * @param {boolean} _blank
 */ const $fc0a058ae42af628$export$95e8d77caafa3e06 = (href, _blank = false)=>{
    if (!href) return;
    if (_blank) {
        window.open(href);
        return;
    }
    window.location.assign(href);
};
const $fc0a058ae42af628$export$267a1435fe18b8d4 = (obj, path, defValue)=>{
    if (!path) return undefined;
    const pathArray = Array.isArray(path) ? path : path.match(/([^[.\]])+/g);
    const result = pathArray.reduce((prevObj, key)=>prevObj && prevObj[key], obj);
    return result === undefined ? defValue : result;
};



class $d48f9f944810f613$export$ca3218b7861b9cb0 extends (0, $7c391e2f7931d60d$export$3b5bd9381a52554c) {
    /**
   * Initialize Button Controller at build time
   * @param { ConfigController } config
   * @param {Window} window
   * @param {Document} document
   */ constructor(config, window, document){
        super(config, window, document);
        this._boundClickHandler = this._buttonClickHandler.bind(this);
    }
    /**
   * Initialize Button Controller at run time
   * Attach handlers and events to DOM
   * @param {Object} options
   */ initialize(options = {}) {
        try {
            const { document: document } = this;
            document.body.removeEventListener('click', this._boundClickHandler);
            document.body.addEventListener('click', this._boundClickHandler);
        } catch (e) {
            // eslint-disable-next-line no-console
            console.error(e);
        }
    }
    /**
   * Controllers must implement a "destroy" method to be called
   * after page navigation to remove event handlers / cleanup
   */ destroy() {
        const { document: document } = this;
        document.body.removeEventListener('click', this._boundClickHandler);
    }
    /**
   * Buttons click handler
   * @param {event} e
   */ _buttonClickHandler(e) {
        this._handleButtonClick(e).catch((e)=>console.error(e));
    }
    /**
   * Handle button click
   * We need special function to have easy way to detach listener
   * @param {Event} e
   */ async _handleButtonClick(e) {
        const { window: window, document: document } = this;
        const button = e.target.closest('button, a');
        if (!button) return;
        const type = button.dataset.type || '';
        const href = button.href || button.dataset.href || '';
        const target = button.target || '';
        const { submit: submit } = button.dataset;
        if (submit) {
            try {
                await this._handleSubmit(button);
            } catch (err) {
                // eslint-disable-next-line no-console
                console.error(err);
            }
            (0, $fc0a058ae42af628$export$95e8d77caafa3e06)(href, target === '_blank');
        }
        this._trackConversion(button);
        if (type === 'VIDEO') {
            this._handleVideoButton(button);
            return;
        }
        if (type === 'CONTACT_US') {
            this._handleContactUsButton(button);
            return;
        }
        if (type === 'SUBSCRIBE') {
            // TODO: Extend for an overwritten subscribe
            window.lpUI.showModal('modal-global-subscribe');
            return;
        }
        if (type === 'MY_ACCOUNT') {
            // TODO: Extend for an overwritten subscribe
            window.lpUI.showModal('modal-global-my-account');
            return;
        }
        if (type === 'SHARE_POPUP') {
            // TODO: Extend for an overwritten subscribe
            const sharePopup = button.querySelector('.share-popup');
            if (sharePopup) sharePopup.style.display = 'flex';
            e.stopPropagation(); // this may not work in current 'delegate' mode
            return;
        }
        // Custom modals
        if (type.substring(0, 6) === 'MODAL_') {
            const modalId = type.substring(6);
            window.lpUI.showModal(`modal-${modalId}`);
            return;
        }
        // MAILTO / TEL Event
        if (href?.startsWith('mailto:')) {
            const email = href.substring(7);
            // TODO: Replace with SDK method
            document.sendGoogleAnalyticsEvent({
                hitType: 'event',
                eventCategory: 'button',
                eventAction: 'click',
                eventLabel: 'Email',
                eventValue: email
            });
        } else if (href?.startsWith('tel:')) {
            const phoneNumber = href.substring(4);
            // TODO: Replace with SDK method
            document.sendGoogleAnalyticsEvent({
                hitType: 'event',
                eventCategory: 'button',
                eventAction: 'click',
                eventLabel: 'Phone',
                eventValue: phoneNumber
            });
        }
    }
    /**
   * Handle submit
   * @param {HTMLButtonElement|HTMLAnchorElement} button
   */ async _handleSubmit(button) {
        const form = button.closest('form');
        const { window: window } = this;
        if (form) return await window.luxuryPresence.contactForms.submitForm(form);
        return null;
    }
    _getVimeoSrc(link) {
        if (!link || !link.includes('vimeo.com') || link.length > 2000) return null;
        const matchResult = link.match(/(?:(?:www\.)?vimeo.com\/(?:channels\/(?:\w+\/)?|groups\/(?:[^/]*)\/videos\/|)|player.vimeo.com\/video\/)(\d+)(?:(?:\?.*&*h=|\/)+([\d,a-f]+))?/);
        if (!matchResult) return null;
        const [, vimeoId, vimeoHashParameter] = matchResult;
        let src = `https://player.vimeo.com/video/${vimeoId}?`;
        if (vimeoHashParameter) src += `h=${vimeoHashParameter}&`;
        src += 'autoplay=1';
        return src;
    }
    /**
   * Handle type video click
   * @param {HTMLElement} button
   */ // eslint-disable-next-line sonarjs/cognitive-complexity
    _handleVideoButton(button) {
        const { document: document } = this;
        const section = button.closest('section');
        // Embed youtube/vimeo video url
        let { src: src } = button.dataset;
        let youtubeId = '';
        if (src && (src.includes('youtube.com') || src.includes('youtu.be')) && !src.includes('youtube.com/embed')) {
            // test link: https://regexr.com/3anm9
            const youtubeRegex = /(?:youtube\.com\/\S*(?:(?:\/e(?:mbed))?\/|watch\?(?:\S*?&?v=))|youtu.be\/)([a-zA-Z0-9_-]{6,11})/;
            const youtubeResult = src.match(youtubeRegex);
            // eslint-disable-next-line
            if (youtubeResult) youtubeId = youtubeResult[1];
        }
        const vimeoSrc = this._getVimeoSrc(src);
        if (youtubeId) src = `https://youtube.com/embed/${youtubeId}?autoplay=1&controls=0`;
        else if (vimeoSrc) src = vimeoSrc;
        if (!src || !section) return;
        const isVideoFile = src.endsWith('.mp4') || src.endsWith('.webm') || src.includes('cloudinary.com');
        const modalHtml = `
      <div id="modal-${section.id}" class="modal visible">
        <div class="modal-content">
          <div class="lightbox-video">
            <div class="video-player">
              <div class="embed-container">
                ${isVideoFile ? `<video controls autoplay src="${src}"></video>` : `<iframe frameborder="0" allowfullscreen="1" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" title="YouTube video player" width="100%" height="100%" src="${src}"></iframe>`}
              </div>
            </div>
          </div>
        </div>
        <button class="close lp-close" type="button" aria-label="close modal"><span class="lp-close-icon" aria-hidden="true"></span></button>
      </div>
    `;
        document.body.insertAdjacentHTML('beforeend', modalHtml);
        const modal = document.getElementById(`modal-${section.id}`);
        const closeModal = modal.querySelector('.close');
        closeModal.addEventListener('click', ()=>{
            modal.remove();
        });
    }
    /**
   * Handle type contact us click
   * @param {HTMLElement} button
   */ _handleContactUsButton(button) {
        const { window: window, document: document } = this;
        // TODO: Extend for an overwritten contact us
        document.sendGoogleAnalyticsEvent({
            hitType: 'event',
            eventCategory: 'button',
            eventAction: 'click',
            eventLabel: 'contact'
        });
        window.lpUI.showModal('modal-global-contact-us', {
            scrollLock: true
        });
    }
    /**
   * Track conversion
   * @param {HTMLElement} button
   */ _trackConversion(button) {
        const { window: window, document: document } = this;
        // Conversion Tracking Options
        const { gtagConversionId: gtagConversionId, gtagConversionLabel: gtagConversionLabel, fbEventName: fbEventName } = button.dataset;
        if (gtagConversionId && gtagConversionLabel) {
            if (window.dataLayer && window.dataLayer.length) {
                const configured = window.dataLayer.some((layer)=>layer.length && layer[0] === 'config' && layer[1] === gtagConversionId);
                if (!configured) document.sendGoogleTagManagerEvent('config', gtagConversionId);
            }
            const sentTo = `${gtagConversionId}/${gtagConversionLabel}`;
            document.sendGoogleTagManagerEvent('event', 'conversion', {
                send_to: sentTo
            });
        }
        if (window.fbq && fbEventName) window.fbq('track', fbEventName, {});
    }
}


/* eslint-disable import/prefer-default-export */ 
class $68a2d4aa500c7a05$export$61ec8f2b6291ec31 extends (0, $7c391e2f7931d60d$export$3b5bd9381a52554c) {
    /**
   * Initialize Validation Controller at build time
   * @param { ConfigController } config
   * @param {Window} window
   * @param {Document} document
   */ constructor(config, window, document){
        super(config, window, document);
        this.validatedForms = [];
    }
    /**
   * Initialize Contact Form Controller at run time
   * Attach handlers and events to DOM
   * @param {Object} options
   */ initialize(options = {}) {
        try {
            const { window: window, document: document } = this;
            const { selector: selector } = options;
            let validatedForms = [];
            if (selector) validatedForms = document.querySelectorAll(`${selector} form[data-type="contact-form"]`);
            else validatedForms = document.querySelectorAll('form[data-type="contact-form"]');
            const isPhoneValidationLibRequired = !!document.querySelectorAll('input[type="tel"]').length;
            // we are loading the phone validation lib from the globally defined list of libs
            if (isPhoneValidationLibRequired && !window.libphonenumber && window?.luxuryPresence?.libs) {
                const { loadJs: loadJs, jsLibsMap: jsLibsMap } = window.luxuryPresence.libs;
                const { libphonenumber: libphonenumber } = jsLibsMap;
                loadJs(libphonenumber.jsSrc, this.attachValidation.bind(this, validatedForms));
            } else this.attachValidation(validatedForms);
            this.validatedForms = this.validatedForms.concat(validatedForms);
        } catch (e) {
            // eslint-disable-next-line no-console
            console.log(e);
        }
    }
    /**
   * Controllers must implement a "destroy" method to be called
   * after page navigation to remove event handlers / cleanup
   */ destroy() {
        this.validatedForms = [];
    }
    /**
   * Validate all forms in the document
   * @param {NodeListOf<HTMLFormElement>} forms
   */ attachValidation(forms) {
        forms.forEach((form)=>{
            const inputs = form.querySelectorAll('input, select, textarea');
            inputs.forEach((input)=>{
                this.applyFieldValidation(input);
            });
        });
    }
    /**
   * Field Validation Handler from global context
   * @param {HTMLInputElement|HTMLTextAreaElement|HTMLSelectElement} inputField
   */ applyFieldValidation(inputField) {
        const fieldType = inputField.getAttribute('type');
        if (fieldType === 'tel') this._applyPhoneValidation(inputField);
    }
    /**
   * Phone Field Validation Handler
   * @param {HTMLInputElement} inputField
   */ _applyPhoneValidation(inputField) {
        const { window: window } = this;
        if (window.libphonenumber) {
            // https://codepen.io/coinscope/pen/BaXBvBp?editors=1010
            const phoneUtil = window.libphonenumber.isValidPhoneNumber;
            inputField.addEventListener('keyup', function() {
                if (this.hasAttribute('required') || this.value.replace(/\s/g, '').length) try {
                    const phoneNumber = this.value;
                    const region = 'US';
                    const isValidNumber = phoneUtil(phoneNumber, region);
                    if (!isValidNumber) this.setCustomValidity('Please enter a valid phone number.');
                    else this.setCustomValidity('');
                } catch (e) {
                    this.setCustomValidity('Please enter a valid phone number.');
                }
                else this.setCustomValidity('');
            });
        }
    }
}




/**
 * Fires the `generate_lead` Google Ads conversion on any marketing-site lead
 * event — lead-form submits (all routed through ContactFormController) and
 * social sign-in (oauth.js) — at most once per session.
 *
 * Reuses the same `generate_lead` event the Home Search Tool fires; the page
 * template already configures the LP Google tags, so no new Google Ads setup is
 * needed. Cross-tab/visitor dedupe is left to the conversion action's
 * Count="One" — localStorage is intentionally avoided as it would suppress a
 * returning visitor's later lead.
 */ const $3ec2bf3965f87ecc$export$78b64890ea40f4e4 = 'generate_lead';
const $3ec2bf3965f87ecc$export$568da12be2433b06 = 'lp_lead_form_conversion_fired';
function $3ec2bf3965f87ecc$var$alreadyFired(window) {
    try {
        return window.sessionStorage.getItem($3ec2bf3965f87ecc$export$568da12be2433b06) === 'true';
    } catch  {
        // sessionStorage can throw in private browsing; fail open so we still fire.
        return false;
    }
}
function $3ec2bf3965f87ecc$var$markFired(window) {
    try {
        window.sessionStorage.setItem($3ec2bf3965f87ecc$export$568da12be2433b06, 'true');
    } catch  {
    // Ignore — see alreadyFired().
    }
}
function $3ec2bf3965f87ecc$export$e70565180c0e6950(window, document) {
    if (!window || !document) return;
    // GA bootstrap may not have run yet (or no pixel on this page); don't throw,
    // and don't burn the once-per-session flag if we can't actually fire.
    if (typeof document.sendGoogleTagManagerEvent !== 'function') return;
    if ($3ec2bf3965f87ecc$var$alreadyFired(window)) return;
    try {
        // Mark fired only AFTER a successful send, so a thrown GTM call doesn't
        // permanently suppress the conversion for the rest of the session — and
        // never let an analytics failure break the caller's success flow.
        document.sendGoogleTagManagerEvent('event', $3ec2bf3965f87ecc$export$78b64890ea40f4e4);
        $3ec2bf3965f87ecc$var$markFired(window);
    } catch  {
    // Swallow — analytics must not break form submit / sign-in.
    }
}



const $2aefad83322125c9$var$homeValuationRoute = '/api/v1/home-valuation';
class $2aefad83322125c9$export$2e2bcd8739ae039 extends (0, $7c391e2f7931d60d$export$3b5bd9381a52554c) {
    destroy() {
    //
    }
    /**
   * Clean address string by removing call time frame suffix and extra whitespace
   *
   * Handles 17 templates that append ", call time frame: [value]" to the address:
   * - TheTrailblazerSir_2, TheMasterpiece (2x), TheInspirationSir_1, TheIconSir_3
   * - Influencer, GlobalCollective, Evolution, CorcoranAgent_1
   * - CompassSE (2x), CompassPrestige (2x), CompassNavigator
   * - ColdwellBanker (2x), Classic
   *
   * @param {string} address - Raw address string that may contain time frame info
   * @return {string} - Cleaned address string
   */ _cleanAddressString(address) {
        if (!address || typeof address !== 'string') return '';
        let cleaned = address.trim();
        // Fix 1: Handle "User entered address:\n..." pattern from TheProducer templates
        // Extract only the user entered address, ignore geocoded part
        if (cleaned.includes('User entered address:')) {
            const match = cleaned.match(/User entered address:\s*\n?\s*([^\n]+)/);
            if (match && match[1]) cleaned = match[1].trim();
        }
        // Fix 2: Remove ", call time frame: ..." suffix if present (affects 17 templates)
        const timeFrameIndex = cleaned.indexOf(', call time frame:');
        if (timeFrameIndex !== -1) cleaned = cleaned.substring(0, timeFrameIndex).trim();
        return cleaned;
    }
    /**
   * Transform Google Maps address components to structured format
   * @param {Array} addressComponents - Google Maps address components
   * @return {Object} - Structured address object
   */ _transformAddressComponents(addressComponents) {
        const get = (t)=>(addressComponents.find((c)=>c.componentType === t) || {}).componentName?.text;
        const structuredAddress = {};
        const streetNumber = get('street_number');
        const streetName = get('route');
        const state = get('administrative_area_level_1');
        const zipcode = get('postal_code');
        const addressLine2 = get('subpremise');
        // explicit precedence for city
        const city = get('locality') || get('sublocality_level_1') || get('neighborhood');
        if (streetNumber) structuredAddress.streetNumber = streetNumber;
        if (streetName) structuredAddress.streetName = streetName;
        if (city) structuredAddress.city = city;
        if (state) structuredAddress.state = state;
        if (zipcode) structuredAddress.zipcode = zipcode;
        if (addressLine2) structuredAddress.addressLine2 = addressLine2;
        return structuredAddress;
    }
    /**
   * Extract address and coordinates from Google Maps validation data
   * @param {Object} validatedAddressData - Google Maps validation result
   * @return {Object} - Object containing structuredAddress and coordinates
   */ _extractAddressAndCoordinates(validatedAddressData) {
        let structuredAddress = null;
        let coordinates = null;
        if (validatedAddressData?.result) {
            const { result: result } = validatedAddressData;
            // Extract structured address components
            if (result.address?.addressComponents) structuredAddress = this._transformAddressComponents(result.address.addressComponents);
            // Extract coordinates
            if (result.geocode?.location) coordinates = {
                latitude: result.geocode.location.latitude,
                longitude: result.geocode.location.longitude
            };
        }
        return {
            structuredAddress: structuredAddress,
            coordinates: coordinates
        };
    }
    /**
   * Filter out empty string values from an object, keeping only non-empty values
   * @param {Object} obj - Object to filter
   * @return {Object} - Filtered object without empty strings
   */ _filterEmptyStrings(obj) {
        const filtered = {};
        for (const [key, value] of Object.entries(obj))if (value !== '' && value !== null && value !== undefined) filtered[key] = value;
        return filtered;
    }
    /**
   * Extract raw address from form data with priority fallback chain.
   * Order is critical to handle 38 home valuation templates with different field naming:
   *
   * IMPORTANT: contactForms.js (line 189) stores name="message" in comments_attributes[0].text
   * because 'message' is in DEFAULT_LEAD_FIELDS. Fields NOT in DEFAULT_LEAD_FIELDS go to content.
   *
   * Priority (most specific → most generic):
   * 1. address           - Pattern 1: 9 templates (explicit address, stored in content)
   * 2. property-address  - Pattern 3: 4 templates (dash variant with JS, stored in content)
   * 3. property_address  - Pattern 4: 3 templates (underscore, stored in content - handles VanguardProperties!)
   * 4. Property_Address  - Pattern 5: 1 template (capital P - TheProducer/HomeValuationRansomHouse, stored in content)
   * 5. comments_attributes[0].text - Pattern 2: ALL 17 templates with name="message" store HERE!
   *                                   (e.g., Evolution/HomeValuation, TheProducer/HomeValuation, etc.)
   * 6. message           - Pattern 6: 4 templates with JS-populated message (rare, checked last)
   * 7-8. homeValuationAddress, propertyAddress - Legacy/unknown formats
   *
   * Critical: Each field is cleaned BEFORE checking, so dropdown values are skipped and we try next field
   *
   * @param {Object} data - Form data
   * @return {string} - Raw address string (may contain trailing text like ", call time frame: ...")
   */ _getRawAddress(data) {
        const content = data.activity.content || {};
        const comments = data.activity.comments_attributes?.[0]?.text;
        const possibleFields = [
            content.address,
            content['property-address'],
            content.property_address,
            content.Property_Address,
            comments,
            content.message,
            content.homeValuationAddress,
            content.propertyAddress
        ];
        return possibleFields.map((field)=>field && this._cleanAddressString(field)).find(Boolean) || '';
    }
    /**
   * Logs lead-related events for monitoring
   * @param {string} eventType - Type of event
   * @param {Object} data - Form data
   * @param {Error} error - Optional error object
   */ _logLeadEvent(eventType, data, error = null) {
        const eventPayload = {
            event: eventType,
            companyId: this.config.companyId,
            websiteId: this.config.websiteId,
            timestamp: new Date().toISOString(),
            hasEmail: !!data.activity?.author_email,
            hasAddress: !!this._getRawAddress(data)
        };
        if (error) {
            // Use userMessage (sanitized) instead of raw message to prevent PII exposure
            // userMessage is set by _getUserFriendlyErrorMessage() which provides safe messages
            eventPayload.errorMessage = error.userMessage || (error.status ? `Request failed with status ${error.status}` : 'An error occurred');
            eventPayload.errorName = error.name;
            eventPayload.errorStatus = error.status;
        }
        // Log to console with structured format for log aggregation
        // eslint-disable-next-line no-console
        console.error(`[HomeValuation] ${eventType}`, JSON.stringify(eventPayload));
        // If PostHog is available, send event for analytics
        // Wrap in try/catch to prevent SDK failures from blocking submissions
        if (this.window.posthog) try {
            this.window.posthog.capture(eventType, eventPayload);
        } catch (posthogError) {
            // eslint-disable-next-line no-console
            console.error('[HomeValuation] PostHog capture failed:', posthogError);
        }
    }
    /**
   * Maps error types to user-friendly messages
   * @param {Error} error - The error object
   * @returns {string} - User-friendly message
   */ _getUserFriendlyErrorMessage(error) {
        if (error.name === 'AbortError' || error.message?.includes('timeout')) return 'Connection timed out. Please try again.';
        if (error.name === 'TypeError' && error.message?.includes('fetch')) return 'Unable to connect. Please check your internet connection and try again.';
        if (error.status === 503 || error.status === 502 || error.status === 504) return 'Service temporarily unavailable. Please try again in a moment.';
        if (error.status === 400) return 'Please check your information and try again.';
        return 'Something went wrong. Please try again or contact us directly.';
    }
    /**
   * Build formatted address string from structured address components
   * @param {Object} structuredAddress - Structured address object
   * @return {string} - Formatted address string
   */ _formatStructuredAddress(structuredAddress) {
        if (!structuredAddress || Object.keys(structuredAddress).length === 0) return '';
        const parts = [];
        // Line 1: streetNumber streetName addressLine2
        const line1 = [
            structuredAddress.streetNumber,
            structuredAddress.streetName,
            structuredAddress.addressLine2
        ].filter(Boolean).join(' ');
        parts.push(line1);
        // Line 2: city, state zipcode
        const cityState = [
            structuredAddress.city,
            structuredAddress.state
        ].filter(Boolean).join(', ');
        const line2 = [
            cityState,
            structuredAddress.zipcode
        ].filter(Boolean).join(' ');
        parts.push(line2);
        return parts.filter(Boolean).join(', ');
    }
    /**
   * Build home valuation data object
   * @param {Object} data - Form data
   * @param {string} homeValuationEstimate - Home valuation estimate
   * @param {Object} structuredAddress - Structured address object
   * @param {Object} coordinates - Coordinates object
   * @return {Object} - Home valuation data object
   */ _buildHomeValuationData(data, homeValuationEstimate, structuredAddress, coordinates) {
        // Build homeValuationAddress from structured address (validated by Google) if available
        // Format: streetNumber streetName, city, state zipcode, addressLine2
        const homeValuationAddress = this._formatStructuredAddress(structuredAddress) || this._getRawAddress(data);
        // Validate that we have an address before proceeding
        if (!homeValuationAddress) throw new Error('Unable to extract home valuation address from form data');
        // Required fields that must always be included
        const requiredFields = {
            companyId: data.companyId,
            homeValuationAddress: homeValuationAddress,
            homeValuationEstimate: homeValuationEstimate ? new Intl.NumberFormat('en-US', {
                style: 'currency',
                currency: 'USD',
                maximumFractionDigits: 0,
                minimumFractionDigits: 0
            }).format(homeValuationEstimate) : null,
            websiteId: data.page.websiteId,
            sourceUrl: data.activity.source_url
        };
        // Optional fields that will be filtered if empty
        const optionalFields = {
            leadEmailAddress: data.activity.author_email,
            leadFullName: data.activity.author_name,
            leadPhoneNumber: data.activity.author_phone,
            parcelId: data.activity.content?.parcelId,
            resourceId: data.page.pageMeta?.resourceId,
            pageId: data.page.pageId,
            sourceResource: data.page.pageMeta?.sourceResource,
            pageElementId: data.page.pageMeta?.pageElementId,
            formId: data.page.pageMeta?.formId,
            utmSource: data.activity.content?.utm_source,
            utmMedium: data.activity.content?.utm_medium,
            utmCampaign: data.activity.content?.utm_campaign,
            utmTerm: data.activity.content?.utm_term,
            utmContent: data.activity.content?.utm_content,
            utmId: data.activity.content?.utm_id,
            timeToSell: data.activity.content?.timeToSell,
            lookingToBuy: data.activity.content?.lookingToBuy,
            referrer: data.referrer,
            content: data.activity.content || {},
            fields: data.fields || {}
        };
        // Filter out empty strings from optional fields
        const filteredOptionalFields = this._filterEmptyStrings(optionalFields);
        return {
            ...requiredFields,
            ...filteredOptionalFields,
            // Add structured address and coordinates if they exist
            ...structuredAddress && {
                address: structuredAddress
            },
            ...coordinates && {
                coordinates: coordinates
            }
        };
    }
    /**
   * Validate address with Google Maps
   * @param {string} rawAddress - Raw address string
   * @returns {Promise<Object|null>} - Validated address data or null
   * @throws {Error} - If validation fails, error is thrown with userMessage
   */ async _validateAddressSafely(rawAddress) {
        if (!rawAddress) {
            // eslint-disable-next-line no-console
            console.error('Home valuation: No address found in form data');
            return null;
        }
        try {
            return await this._validateAddressWithGoogleMaps(rawAddress);
        } catch (error) {
            // eslint-disable-next-line no-console
            console.error('Error validating address with Google Maps:', error);
            // Attach user-friendly message and throw so user sees the error
            error.userMessage = this._getUserFriendlyErrorMessage(error);
            throw error;
        }
    }
    /**
   * Get home valuation estimate
   * @param {Object} validatedAddressData - Validated address data
   * @returns {Promise<number|null>} - Home valuation estimate or null
   * @throws {Error} - If estimate fetch fails, error is thrown with userMessage
   */ async _getHomeValuationEstimateSafely(validatedAddressData) {
        try {
            return await this._getHomeValuationEstimate(validatedAddressData);
        } catch (error) {
            // eslint-disable-next-line no-console
            console.error('Error getting home valuation estimate:', error);
            // Attach user-friendly message and throw so user sees the error
            error.userMessage = this._getUserFriendlyErrorMessage(error);
            throw error;
        }
    }
    /**
   * Parse response text into payload object
   * @param {string} text - Response text
   * @returns {Object} - Parsed payload
   */ _parseResponsePayload(text) {
        try {
            return text ? JSON.parse(text) : {};
        } catch  {
            return {
                raw: text
            };
        }
    }
    /**
   * Create error from failed response
   * @param {Object} payload - Response payload
   * @param {number} status - HTTP status code
   * @returns {Error} - Error object with status and payload
   */ _createResponseError(payload, status) {
        const errorMessage = payload && typeof payload === 'object' && Object.keys(payload).length ? payload.message || JSON.stringify(payload) : 'Request failed';
        const error = new Error(errorMessage);
        // Preserve payload properties if it's an object
        if (payload && typeof payload === 'object' && Object.keys(payload).length) Object.assign(error, payload);
        // Preserve numeric HTTP status - must be set after Object.assign
        // to ensure it takes precedence over any status in payload
        error.status = status;
        return error;
    }
    /**
   * Submit lead to API endpoint
   * @param {string} leadRoute - API endpoint URL
   * @param {Object} homeValuationData - Data to submit
   * @returns {Promise<Object>} - Submission result
   */ async _submitLead(leadRoute, homeValuationData) {
        const controller = new AbortController();
        const timeoutId = setTimeout(()=>controller.abort(), 10000);
        try {
            const response = await fetch(leadRoute, {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify(homeValuationData),
                signal: controller.signal
            });
            clearTimeout(timeoutId);
            const text = await response.text();
            const payload = this._parseResponsePayload(text);
            if (!response.ok) throw this._createResponseError(payload, response.status);
            if (payload && payload.status === 'success' && payload.redirectUrl) {
                this.window.location.href = payload.redirectUrl;
                return {
                    redirected: true,
                    url: payload.redirectUrl
                };
            }
            return payload;
        } catch (error) {
            clearTimeout(timeoutId);
            throw error;
        }
    }
    /**
   * Submit home valuation request with Google Maps validation
   * @param {Object} data
   * @return {Promise<Object>}
   */ async _submitHomeValuationRequest(data) {
        const { config: config } = this;
        // Use websiteApiGatewayUrl from config
        if (!config.websiteApiGatewayUrl) throw new Error('websiteApiGatewayUrl not configured for home valuation');
        // Log submission started
        this._logLeadEvent('home_valuation_submission_started', data);
        try {
            // Validate address with Google Maps
            const rawAddress = this._getRawAddress(data);
            let validatedAddressData = null;
            try {
                validatedAddressData = await this._validateAddressSafely(rawAddress);
            } catch (error) {
                // Error already has userMessage from _validateAddressSafely
                this._logLeadEvent('home_valuation_address_validation_failed', data, error);
                throw error;
            }
            // Get home valuation estimate.
            // The estimate is best-effort: many valid properties (e.g. commercial
            // parcels or addresses without AVM coverage) have no estimate and the
            // estimate endpoint returns a non-OK status for them. A missing estimate
            // must never block lead capture, so we log the failure and continue with
            // a null estimate rather than aborting the whole submission.
            let homeValuationEstimate = null;
            try {
                homeValuationEstimate = await this._getHomeValuationEstimateSafely(validatedAddressData);
            } catch (error) {
                // Error already has userMessage from _getHomeValuationEstimateSafely
                this._logLeadEvent('home_valuation_estimate_failed', data, error);
                homeValuationEstimate = null;
            }
            // Extract structured address and coordinates from Google Maps validation
            const { structuredAddress: structuredAddress, coordinates: coordinates } = this._extractAddressAndCoordinates(validatedAddressData);
            const leadRoute = `${config.websiteApiGatewayUrl}${$2aefad83322125c9$var$homeValuationRoute}`;
            const homeValuationData = this._buildHomeValuationData(data, homeValuationEstimate, structuredAddress, coordinates);
            const result = await this._submitLead(leadRoute, homeValuationData);
            // Log success
            this._logLeadEvent('home_valuation_submission_success', data);
            return result;
        } catch (error) {
            // Ensure error has user-friendly message (may already be set by helper methods)
            if (!error.userMessage) error.userMessage = this._getUserFriendlyErrorMessage(error);
            this._logLeadEvent('home_valuation_submission_failed', data, error);
            throw error;
        }
    }
    /**
   * Validate address using Google Maps Address Validation API
   * @param {string} addressStr - The address string to validate
   * @returns {Promise<Object|null>} - Validated address data or null if validation fails
   */ async _validateAddressWithGoogleMaps(addressStr) {
        const { config: config, window: window } = this;
        // Ensure Google Maps API key is loaded
        let apiKey = config.googleMapsAPIKey;
        if (!apiKey && window.luxuryPresence?.mapApiLoader) apiKey = await window.luxuryPresence.mapApiLoader.getMapApiKey();
        if (!apiKey) throw new Error('Google Maps API key not configured');
        const controller = new AbortController();
        const timeoutId = setTimeout(()=>controller.abort(), 10000);
        try {
            const response = await fetch(`https://addressvalidation.googleapis.com/v1:validateAddress?key=${apiKey}`, {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify({
                    address: {
                        addressLines: [
                            addressStr
                        ]
                    },
                    enableUspsCass: false
                }),
                signal: controller.signal
            });
            clearTimeout(timeoutId);
            if (!response.ok) {
                const error = new Error(`Address validation failed: ${response.status}`);
                error.status = response.status;
                throw error;
            }
            return response.json();
        } catch (error) {
            clearTimeout(timeoutId);
            throw error;
        }
    }
    /**
   * Check if structured address has all mandatory fields
   * @param {Object} structuredAddress - Structured address object
   * @return {boolean}
   */ _hasMandatoryAddressFields(structuredAddress) {
        return !!(structuredAddress.streetNumber && structuredAddress.streetName && structuredAddress.city && structuredAddress.state && structuredAddress.zipcode);
    }
    /**
   * Log missing mandatory address fields
   * @param {Object} structuredAddress - Structured address object
   */ _logMissingAddressFields(structuredAddress) {
        const missingFields = [];
        if (!structuredAddress.streetNumber) missingFields.push('streetNumber');
        if (!structuredAddress.streetName) missingFields.push('streetName');
        if (!structuredAddress.city) missingFields.push('city');
        if (!structuredAddress.state) missingFields.push('state');
        if (!structuredAddress.zipcode) missingFields.push('zipcode');
        // eslint-disable-next-line no-console
        console.log('Home valuation estimate skipped - missing required fields:', missingFields.join(', '), 'Available fields:', Object.keys(structuredAddress).join(', '));
    }
    /**
   * Build query string from structured address
   * @param {Object} structuredAddress - Structured address object
   * @return {string}
   */ _buildAddressQueryString(structuredAddress) {
        return Object.entries(structuredAddress).map(([key, value])=>`${encodeURIComponent(key)}=${encodeURIComponent(value)}`).join('&');
    }
    /**
   * GET home valuation estimate
   * @param {string} address
   * @param {Object} validatedAddressData - Google Maps validated address data
   * @return {Promise<number|null>}
   */ async _getHomeValuationEstimate(validatedAddressData = null) {
        const { config: config } = this;
        if (!config.websiteApiGatewayUrl) throw new Error('websiteApiGatewayUrl not configured');
        const base = `${config.websiteApiGatewayUrl}${$2aefad83322125c9$var$homeValuationRoute}`;
        // Check if we have validated address data
        if (!validatedAddressData?.result?.address?.addressComponents) return null;
        const structuredAddress = this._transformAddressComponents(validatedAddressData.result.address.addressComponents);
        // Check if all mandatory fields exist
        if (!this._hasMandatoryAddressFields(structuredAddress)) {
            this._logMissingAddressFields(structuredAddress);
            return null;
        }
        // Build URL with query string
        const qs = this._buildAddressQueryString(structuredAddress);
        const homeValURL = `${base}?${qs}`;
        const controller = new AbortController();
        const timeoutId = setTimeout(()=>controller.abort(), 10000);
        try {
            const response = await fetch(homeValURL, {
                headers: {
                    Accept: 'application/json'
                },
                signal: controller.signal
            });
            clearTimeout(timeoutId);
            if (!response.ok) {
                const error = new Error(`Home valuation estimate failed: ${response.status}`);
                error.status = response.status;
                throw error;
            }
            const data = await response.json();
            return data?.valueDollars ?? null;
        } catch (error) {
            clearTimeout(timeoutId);
            // Re-throw to allow retry logic to handle it
            throw error;
        }
    }
}


const $e10bd00497be8876$export$97de66002300ed70 = 'middleName';
// Default lead fields
const $e10bd00497be8876$var$DEFAULT_LEAD_FIELDS = [
    'name',
    'firstName',
    'lastName',
    $e10bd00497be8876$export$97de66002300ed70,
    'email',
    'phone',
    'phoneNumber',
    'source',
    'message',
    'mlsId',
    'sourceUrl'
];
class $e10bd00497be8876$export$3c5380623cf51249 extends (0, $7c391e2f7931d60d$export$3b5bd9381a52554c) {
    /**
   * Initialize Contact Form Controller at build time
   * @param { ConfigController } config
   * @param {Window} window
   * @param {Document} document
   */ constructor(config, window, document){
        super(config, window, document);
        this.forms = [];
        this.homeValuationService = new (0, $2aefad83322125c9$export$2e2bcd8739ae039)(config, window, document);
    }
    /**
   * Initialize Contact Form Controller at run time
   * Attach handlers and events to DOM
   * @param {Object} options
   */ initialize(options = {}) {
        try {
            const { document: document } = this;
            const { selector: selector } = options;
            let forms = [];
            if (selector) forms = document.querySelectorAll(`${selector} form[data-type="contact-form"]`);
            else forms = document.querySelectorAll('form[data-type="contact-form"]');
            forms.forEach((form)=>{
                this._attachSubmitHandler(form);
            // this._attachValidation(form);
            });
            this.forms = this.forms.concat(forms);
        } catch (e) {
            // eslint-disable-next-line no-console
            console.log(e);
        }
    }
    /**
   * Controllers must implement a "destroy" method to be called
   * after page navigation to remove event handlers / cleanup
   */ destroy() {
        this.forms = [];
    }
    /**
   * Handle submit from global context
   * @param {HTMLFormElement} form
   */ submitForm(form) {
        this._handleSubmit(null, form).catch((e)=>console.error(e));
    }
    /**
   * Attach submit event for form
   * @param {HTMLFormElement} contactForm
   */ _attachValidation(contactForm) {
        const { window: window } = this;
        const inputs = contactForm.querySelectorAll('input, select, textarea');
        inputs.forEach((input)=>{
            window.luxuryPresence.validation.applyFieldValidation(input);
        });
    }
    /**
   * Attach submit event for form
   * @param {HTMLFormElement} contactForm
   */ _attachSubmitHandler(contactForm) {
        contactForm.addEventListener('submit', (e)=>this._handleSubmit(e, contactForm));
    }
    /**
   * Extract and process form values
   * @param {HTMLFormElement} contactForm
   * @return {Object} - Processed form values
   */ _extractFormValues(contactForm) {
        const formData = new FormData(contactForm);
        const values = {};
        const nameParts = [];
        const nameKeyRegex = /^name(?:-\d+)?$/;
        formData.forEach((value, key)=>{
            if (typeof value === 'string') {
                const curr = value.trim();
                if (nameKeyRegex.test(key) && curr) nameParts.push(curr);
                const prev = values[key];
                values[key] = prev ? `${prev} ${curr}` : curr;
            } else values[key] = value;
        });
        if (nameParts.length) values.name = nameParts.join(' ').trim();
        else if (!values.name && values.firstName) {
            values.name = values.firstName;
            if (values.lastName) values.name += ` ${values.lastName}`;
        }
        return values;
    }
    /**
   * Build submission data object
   * @param {Object} values - Form values
   * @param {Object} fields - Form fields
   * @param {HTMLFormElement} contactForm - Form element
   * @return {Object} - Submission data
   */ _buildSubmissionData(values, fields, contactForm) {
        const { window: window, config: config } = this;
        const content = Object.keys(values).filter((key)=>!$e10bd00497be8876$var$DEFAULT_LEAD_FIELDS.includes(key)).reduce((result, key)=>{
            // eslint-disable-next-line
            result[key] = values[key];
            return result;
        }, {});
        const { pageId: pageId, companyId: companyId, websiteId: websiteId, pageMeta: pageMeta } = config;
        const utm = window.localStorage.getItem('utm_vars') || '{}';
        const referrer = window.localStorage.getItem('referrer') || '';
        const formId = this._getFormId(contactForm);
        return {
            activity: {
                author_email: values.email,
                author_name: values.name,
                author_phone: values.phone || values.phoneNumber,
                activity_source: values.source || 'CONTACT_INQUIRY',
                comments_attributes: [
                    {
                        text: values.message || undefined
                    }
                ],
                source_url: window.location.href,
                content: {
                    ...content,
                    ...JSON.parse(utm)
                }
            },
            page: {
                pageId: pageId,
                companyId: companyId,
                websiteId: websiteId,
                pageMeta: {
                    ...pageMeta,
                    formId: formId
                }
            },
            companyId: companyId,
            referrer: referrer,
            fields: fields
        };
    }
    /**
   * Handle successful form submission
   * @param {HTMLFormElement} contactForm - Form element
   */ _handleSubmissionSuccess(contactForm) {
        const { window: window } = this;
        const closeDelay = contactForm.dataset.delay || (0, $a3e97e89bbc2a366$export$f037eeffb5561205);
        contactForm.classList.remove('loading');
        contactForm.classList.remove('error');
        contactForm.classList.add('success');
        // TODO: Review producer and classic to deprecate "hide"
        contactForm.querySelectorAll('.success').forEach((el)=>el.classList.remove('hide'));
        contactForm.dispatchEvent(new Event('formsubmitted'));
        // Any successful lead submit credits the Google Ads lead conversion
        // (reuses the existing `generate_lead` action), once per session.
        (0, $3ec2bf3965f87ecc$export$e70565180c0e6950)(this.window, this.document);
        setTimeout(()=>{
            window.lpUI.hideClosestModal(contactForm);
            contactForm.reset();
            window.lpUI.sideMenuHide();
            contactForm.querySelectorAll('.success').forEach((el)=>el.classList.add('hide'));
            contactForm.classList.remove('success');
        }, closeDelay);
    }
    /**
   * Submit Contact Form Handler
   * @param {Event} e
   * @param {HTMLFormElement} contactForm
   * @return {Promise<Object>}
   */ async _handleSubmit(e, contactForm) {
        if (e) e.preventDefault();
        if (contactForm.classList.contains('loading')) // Form already submitting
        return;
        // Hide any previous error message and clear error state
        this._hideSubmissionError(contactForm);
        contactForm.classList.remove('error');
        contactForm.classList.add('loading');
        try {
            // Extract form values first (before async operations)
            const values = this._extractFormValues(contactForm);
            // TODO: HoneyPot should still send request
            if (values.middleName) {
                contactForm.classList.remove('loading');
                return;
            }
            const fields = this._getFields(contactForm);
            const data = this._buildSubmissionData(values, fields, contactForm);
            await this._submitLeadRequest(data);
            this._sendGAEvent(data);
            this._handleSubmissionSuccess(contactForm);
        } catch (err) {
            // eslint-disable-next-line no-console
            console.error('Form submission failed:', err);
            contactForm.dispatchEvent(new Event('formsubmiterror'));
            contactForm.classList.remove('loading');
            contactForm.classList.add('error');
            // Show user-friendly error message if available (from home valuation service)
            if (err.userMessage) this._showSubmissionError(contactForm, err.userMessage);
            else this._showSubmissionError(contactForm, 'Something went wrong. Please try again.');
        }
    }
    /**
   * Alias anonymous user with canonical ID using event bus
   * Links the user's anonymous browsing session to their canonical identity
   * @param {Object} data - Form submission data
   * @private
   */ _aliasUserWithEventBus(data) {
        try {
            // Check if event bus library and required methods are available
            if (!this.window.eventBusProvider?.alias || !this.window.eventBusProvider?.isIdentified || !this.window.eventBusProvider?.getDistinctId || !this.window.LuxuryPresenceEventBus?.generateUUIDv5FromCompanyEmail) return; // Event bus or required methods not available
            // Skip if user is already identified
            if (this.window.eventBusProvider.isIdentified()) {
                console.log('[EventBus] User already identified, skipping alias');
                return;
            }
            const email = data.activity?.author_email;
            const { companyId: companyId } = this.config;
            if (!email || !companyId) {
                console.warn('[EventBus] Missing required data for user alias');
                return;
            }
            // Get the anonymous distinct ID from PostHog
            const anonId = this.window.eventBusProvider.getDistinctId();
            if (!anonId) {
                console.warn('[EventBus] No anonymous ID available for alias');
                return;
            }
            // Generate deterministic canonical ID from company + email
            const canonicalId = this.window.LuxuryPresenceEventBus.generateUUIDv5FromCompanyEmail(companyId, email);
            // Create alias linking anonymous ID to canonical ID
            this.window.eventBusProvider.alias({
                anonId: anonId,
                canonicalId: canonicalId
            });
            console.log('[EventBus] User aliased with canonical ID');
        } catch (error) {
            // Never block form submission due to analytics errors
            console.error('[EventBus] User alias failed:', error);
        }
    }
    /**
   * Send Lead Request
   * @param {Object} data
   * @return {Promise<Object>}
   */ async _submitLeadRequest(data) {
        const { config: config } = this;
        // Alias user with event bus before submitting the lead
        this._aliasUserWithEventBus(data);
        if (config.myhomeDashboardEnabled && (data.activity?.activity_source === 'HOME_VALUATION' || data.activity?.activity_source === 'HOME_VALUE')) return this.homeValuationService._submitHomeValuationRequest(data);
        const leadRoute = `${config.leadIngesterUrl}/api/v1/leads`;
        return fetch(leadRoute, {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json'
            },
            body: JSON.stringify(data)
        }).then((response)=>{
            if (!response.ok) return response.json().then((error)=>{
                throw error;
            });
            return response.json();
        });
    }
    /**
   * Send GA event
   * @param {Object} data
   */ _sendGAEvent(data) {
        const { document: document } = this;
        let event = {
            hitType: 'event',
            eventCategory: 'button',
            eventAction: 'click'
        };
        switch(data.activity.activity_source){
            case 'NEWSLETTER_SIGNUP':
                event.eventLabel = 'Newsletter';
                document.sendGoogleTagManagerEvent('event', 'newsletter_signup');
                break;
            case 'HOME_SEARCH':
                event.eventLabel = 'HomeSearch';
                document.sendGoogleTagManagerEvent('event', 'home_search');
                break;
            case 'HOME_VALUE':
            case 'HOME_VALUATION':
                event.eventLabel = 'HomeValue';
                document.sendGoogleTagManagerEvent('event', 'home_valuation');
                break;
            case 'EBOOK':
                event.eventLabel = 'Ebook';
                document.sendGoogleTagManagerEvent('event', 'ebook_download');
                break;
            case 'CONTACT_INQUIRY':
            default:
                // for contact forms, Marketing has requested that they see a page-view of 'thank-you' as indication of success
                // Note that this will break if we have actual page with url of /thank-you
                event = {
                    hitType: 'pageview',
                    page: '/thank-you'
                };
                document.sendGoogleTagManagerEvent('event', 'contact_inquiry');
                break;
        }
        document.sendGoogleAnalyticsEvent(event);
    }
    /**
   * Gather fields / schema for form, used for display in CRM
   * @param {HTMLFormElement} form
   * @return {Object}
   */ _getFields(form) {
        const inputs = form.querySelectorAll('input, select, textarea');
        const fields = {};
        inputs.forEach((input)=>{
            const { id: id, name: name, type: inputType } = input;
            if (name === $e10bd00497be8876$export$97de66002300ed70) // Honeypot continue
            return true;
            let label = '';
            if (id) {
                const labelNode = form.querySelector(`label[for='${id}']`);
                if (labelNode) label = labelNode.textContent.trim();
                else if (input.placeholder) label = input.placeholder.trim();
            }
            fields[name] = {
                label: label,
                type: input.tagName,
                inputType: input.tagName === 'INPUT' ? inputType : 'text'
            };
        });
        return fields;
    }
    /**
   * Figure out relevant section or div ID for form
   * @param {HTMLFormElement} form
   * @return {string}
   */ _getFormId(form) {
        const SELECTORS = "section[id^='section-'], footer[id], .modal[id^='modal-']";
        const parent = form.closest(SELECTORS);
        return parent?.id ? this._cleanFormId(parent.id) : '';
    }
    /**
   * Remove prefix from formID
   * @param {string} formId
   * @return {string}
   */ _cleanFormId(formId) {
        const PREFIXES = [
            'section-',
            'modal-'
        ];
        for (const prefix of PREFIXES){
            if (formId.startsWith(prefix)) return formId.substring(prefix.length);
        }
        return formId;
    }
    /**
   * Show submission error message on form
   * @param {HTMLFormElement} form
   * @param {string} message
   */ _showSubmissionError(form, message) {
        const errorEl = form.querySelector('.submission-error-message');
        if (errorEl) {
            errorEl.textContent = message || 'Something went wrong. Please try again.';
            errorEl.style.display = 'block';
        }
    }
    /**
   * Hide submission error message on form
   * @param {HTMLFormElement} form
   */ _hideSubmissionError(form) {
        const errorEl = form.querySelector('.submission-error-message');
        if (errorEl) errorEl.style.display = 'none';
    }
}



const $ea6901fdf47e0ec1$var$CALLBACK = '__googleMapsCallback';
const $ea6901fdf47e0ec1$var$GOOGLE_MAPS_URL = 'https://maps.googleapis.com/maps/api/js';
const $ea6901fdf47e0ec1$export$76299006759be400 = 1024;
class $ea6901fdf47e0ec1$export$3c19195edca3fa5c extends (0, $7c391e2f7931d60d$export$3b5bd9381a52554c) {
    /**
   * Initialize Button Controller at build time
   * @param { ConfigController } config
   * @param {Window} window
   * @param {Document} document
   */ constructor(config, window, document){
        super(config, window, document);
        this.retries = 3;
        this.callbacks = [];
        this.id = `__googleMapsScriptId${Date.now()}`;
        this._apiKey = '';
        this.reset();
    }
    /**
   * Set the Google Maps api key
   * @param {string} apiKey
   */ set apiKey(apiKey) {
        this._apiKey = apiKey;
        this.config.setGoogleMapsAPIKey(apiKey);
    }
    /**
   * Get the Google Maps api key
   * @return {string}
   */ get apiKey() {
        return this._apiKey;
    }
    /**
   * Reset the loader state.
   */ reset() {
        this.deleteScript();
        this.done = false;
        this.loading = false;
        this.errors = [];
        this.onerrorEvent = null;
    }
    /**
   * Destroy
   */ destroy() {
        this.reset();
    }
    /**
   * get map api Key
   * @return {Promise<string>}
   */ async getMapApiKey() {
        if (this.apiKey) return this.apiKey;
        try {
            const response = await fetch(`${this._getBaseUrl()}/api/v1/map`);
            if (!response.ok) throw new Error('Failed to fetch API key');
            const code = await response.text();
            this.apiKey = code;
            return this.apiKey;
        } catch (e) {
            // eslint-disable-next-line no-console
            console.error(e);
            return '';
        }
    }
    /**
   * CreateUrl returns the Google Maps JavaScript API script url ].
   * @return {string}
   */ async createUrl() {
        let url = $ea6901fdf47e0ec1$var$GOOGLE_MAPS_URL;
        url += `?callback=${$ea6901fdf47e0ec1$var$CALLBACK}`;
        const apiKey = await this.getMapApiKey();
        if (apiKey) url += `&key=${apiKey}`;
        url += `&libraries=places`;
        return url;
    }
    /**
   * Set the script on document.
   */ async setScript() {
        if (this.document.getElementById(this.id)) {
            this.callback();
            return;
        }
        const url = await this.createUrl();
        const script = this.document.createElement('script');
        script.id = this.id;
        script.type = 'text/javascript';
        script.src = url;
        script.onerror = this.loadErrorCallback.bind(this);
        script.defer = true;
        script.async = true;
        this.document.head.appendChild(script);
    }
    /**
   * Function to be called if script tag fails
   * @param {Error} e
   */ loadErrorCallback(e) {
        this.errors.push(e);
        if (this.errors.length <= this.retries) {
            const delay = this.errors.length * 2 ** this.errors.length;
            // eslint-disable-next-line no-console
            console.log(`Failed to load Google Maps script, retrying in ${delay} ms.`);
            setTimeout(()=>{
                this.deleteScript();
                this.setScript().catch((e)=>console.error(e));
            }, delay);
        } else {
            this.onerrorEvent = e;
            this.callback();
        }
    }
    /**
   * Delete the script tag
   */ deleteScript() {
        const script = this.document.getElementById(this.id);
        if (script) script.remove();
    }
    /**
   * Load the Google Maps JavaScript API script and return a Promise.
   * @return {Promise}
   */ load() {
        return this.loadPromise();
    }
    /**
   * Load the Google Maps JavaScript API script and return a Promise.
   * @return {Promise}
   */ loadPromise() {
        return new Promise((resolve, reject)=>{
            this.loadCallback((err)=>{
                if (!err) resolve();
                else reject(err);
            });
        });
    }
    /**
   * Load the Google Maps JavaScript API script with a callback.
   * @param {Function<Event>} fn
   */ loadCallback(fn) {
        this.callbacks.push(fn);
        this.execute();
    }
    /**
   * Sets the callback function that will be sent as part of the script URL.
   */ setCallback() {
        this.window.__googleMapsCallback = this.callback.bind(this);
    }
    /**
   * Reset if failed
   */ resetIfRetryingFailed() {
        if (this.failed) this.reset();
    }
    /**
   * This is the function that we set the callback parameter to.
   */ callback() {
        this.done = true;
        this.loading = false;
        this.callbacks.forEach((cb)=>{
            cb(this.onerrorEvent);
        });
        this.callbacks = [];
    }
    /**
   * Set the script a if needed; set the callback
   */ execute() {
        if (this.window.google && this.window.google.maps && this.window.google.maps.version) // Google Maps already loaded
        this.callback();
        this.resetIfRetryingFailed();
        if (this.done) this.callback();
        else if (this.loading) ;
        else {
            this.loading = true;
            this.setCallback();
            this.setScript().catch((e)=>console.error(e));
        }
    }
    /**
   * get base url based on current config
   * @return {string}
   */ _getBaseUrl() {
        // Special handling for page builder since no wag available
        const { isBuilder: isBuilder, websiteApiGatewayUrl: websiteApiGatewayUrl } = this.config;
        return isBuilder ? websiteApiGatewayUrl : '';
    }
    /**
   * Resize static map requests to the max 1024px while preserving aspect ratio
   * @param {number} width
   * @param {number} height
   * @return {{width, height}}
   */ resizeStaticMapDimensions(width, height) {
        if (width <= $ea6901fdf47e0ec1$export$76299006759be400 && height <= $ea6901fdf47e0ec1$export$76299006759be400) return {
            width: width,
            height: height
        };
        // Size param ignored if dimensions exceed STATIC_MAP_MAX_DIM
        const ratio = Math.min($ea6901fdf47e0ec1$export$76299006759be400 / width, $ea6901fdf47e0ec1$export$76299006759be400 / height);
        return {
            width: parseInt(width * ratio),
            height: parseInt(height * ratio)
        };
    }
    /**
   * Convert theme to static api param object
   * @param {Object} theme
   * @return {Object}
   */ convertThemeToStaticApiUrl(theme) {
        // https://developers.google.com/maps/documentation/maps-static/style-reference
        // Google Maps Static API uses a special syntax for it's urls based on the interactive map styles
        return theme.map((t)=>{
            const styles = t.stylers.reduce((acc, s)=>{
                const visibility = s.visibility ? `visibility:${s.visibility}` : '';
                const color = s.color ? `color:${s.color.replace('#', '0x')}` : '';
                const lightness = s.lightness ? `lightness:${s.lightness}` : '';
                return `${acc}|${visibility}${color}${lightness}`;
            }, '');
            const element = t.elementType ? `|element:${t.elementType}` : '';
            return `feature:${t.featureType}${element}${styles}`;
        });
    }
    /**
   * generate digital signature for url
   * @param {string} queryString to sign
   * @return {Promise<string>} digitally signed url
   */ async getMapApiSignedUrl(queryString) {
        try {
            const response = await fetch(`${this._getBaseUrl()}/api/v1/map/signature?${queryString}`);
            if (!response.ok) throw new Error('Failed to fetch signed URL');
            const { url: url } = await response.json();
            return url;
        } catch (e) {
            // eslint-disable-next-line no-console
            console.error(e);
            return '';
        }
    }
    /**
   * Generate static map url
   * @param {number} lat
   * @param {number} lng
   * @param {number} zoom
   * @param {Object} theme
   * @param {number} srcWidth
   * @param {number} srcHeight
   * @return {string}
   */ generateStaticMapUrl(lat, lng, zoom, theme, srcWidth, srcHeight) {
        const baseUrl = 'https://maps.googleapis.com/maps/api/staticmap';
        const { width: width, height: height } = this.resizeStaticMapDimensions(srcWidth, srcHeight);
        const query = {
            center: `${lat},${lng}`,
            zoom: zoom,
            scale: 2,
            size: `${width}x${height}`,
            key: this.apiKey
        };
        if (theme) query.style = this.convertThemeToStaticApiUrl(theme);
        const params = new URLSearchParams();
        Object.entries(query).forEach(([key, value])=>{
            if (Array.isArray(value)) value.forEach((v)=>params.append(key, v.toString()));
            else params.append(key, value.toString());
        });
        return `${baseUrl}?${params.toString()}`;
    }
    /**
   * Generate static map url with digital signature
   * @param {Object} {
   *  srcWidth {number}, required
   *  srcHeight {number}, required
   *  theme {array},
   *  center: `${lat},${lng}`, required
   *  zoom: number, required
   *  markers: `${lat},${lng}`,
   *  scale: number,
   *  otherQueryParams... (these must match what is compatible with google maps static api query params)
   * }
   * @return {Promise<string>} digitally signed url
   */ async generateDigitallySignedStaticMapUrl({ srcWidth: srcWidth, srcHeight: srcHeight, theme: theme, ...query }) {
        const { width: width, height: height } = this.resizeStaticMapDimensions(srcWidth, srcHeight);
        const queryParams = {
            ...query,
            size: `${width}x${height}`
        };
        if (theme) queryParams.style = this.convertThemeToStaticApiUrl(theme);
        const params = new URLSearchParams();
        Object.entries(queryParams).forEach(([key, value])=>{
            if (Array.isArray(value)) value.forEach((v)=>params.append(key, v.toString()));
            else params.append(key, value.toString());
        });
        const queryString = params.toString();
        try {
            // fetch digitally signed url
            return await this.getMapApiSignedUrl(queryString);
        } catch (e) {
            console.error(e);
            return '';
        }
    }
}


/* eslint-disable import/prefer-default-export */ 

class $0a0ad49f13c0b8fd$export$ba9afeb75f20f616 extends (0, $7c391e2f7931d60d$export$3b5bd9381a52554c) {
    // constructor is not needed as it is inherited from BaseController
    /**
   * Controllers must implement a "destroy" method to be called
   * after page navigation to remove event handlers / cleanup
   */ destroy() {}
    /**
   * Places (re-places) a value into the query string under specified key
   *   or removes it if new value is null or undefined
   * @param {string} key
   * @param {string|null|undefined|object|array} value
   * @param {string} url - defaults to window.location.href
   * @return {string}
   */ // eslint-disable-next-line sonarjs/cognitive-complexity
    updateQueryString(key, value, url) {
        // https://stackoverflow.com/questions/5999118/how-can-i-add-or-update-a-query-string-parameter
        if (!url) // eslint-disable-next-line
        url = this.window.location.href;
        let re = new RegExp(`([?&])${key}=.*?(&|#|$)`, 'i');
        let replacement = '';
        if (typeof value !== 'undefined' && value !== null) {
            if (Array.isArray(value)) {
                if (value.length) replacement = this.serializeArray(key, value);
            } else if (typeof value === 'object') {
                re = new RegExp(`([?&])${key}\\[[^=]*\\]=.*?(&|#|$)`, 'i');
                replacement = this.serializeObj(value, '', key);
            } else replacement = `${key}=${encodeURIComponent(value)}`;
        }
        const hash = url.split('#');
        let result = hash[0];
        if (re.test(url)) {
            let clean = result;
            replacement = replacement ? `$1${replacement}$2` : '$1';
            while(re.test(clean)){
                result = clean.replace(re, replacement);
                clean = clean.replace(re, '$1');
            }
            result = result.replace(/(&|\?)$/, '');
        } else if (replacement) {
            const separator = result.indexOf('?') !== -1 ? '&' : '?';
            result += `${separator}${replacement}`;
        }
        if (typeof hash[1] !== 'undefined' && hash[1] !== null) result += `#${hash[1]}`;
        return result;
    }
    /**
   * Returns variable from query string specified by parameter name
   * @param {string} name
   * @param {string} url defaults to window.location.href
   * @return {string|null}
   */ getParameterByName(name, url) {
        if (!url) // eslint-disable-next-line
        url = this.window.location.href;
        // eslint-disable-next-line
        name = name.replace(/[[\]]/g, '\\$&');
        const regex = new RegExp(`[?&]${name}(=([^&#]*)|&|#|$)`);
        let results = Array.from(RegExp.prototype[Symbol.matchAll].call(regex, url)).flat();
        // check for object like syntax where the last value can be an array eg. advancedFilters[query][statusIds][in][0] or advancedFilters[query][city]
        if (!results.length) {
            const objRegex = new RegExp(`[?&]${name}(\\[.*?\\])=(.*?)(?=&|#|$)`, 'g');
            results = Array.from(RegExp.prototype[Symbol.matchAll].call(objRegex, url)).flat();
            return this._parseParamToObject(results, name === 'advancedFilters');
        }
        // For multiple param values, eg arrays
        /* Results from regex match all come in this form:
    [ '&advancedFilters[query][statusIds][in]=uuid-segundo-123', '[query][statusIds][in]', 'uuid-segundo-123' ]
    So using every third value will be the actual value and the second value will be the path
    */ if (results.length > 3) return results.reduce((acc, value, index)=>{
            if ((index + 1) % 3 === 0) acc.push(decodeURIComponent(value.replace(/\+/g, ' ')));
            return acc;
        }, []);
        if (!results[2]) return '';
        return decodeURIComponent(results[2].replace(/\+/g, ' '));
    }
    /**
   * Generates section specific key to store page number in the URL
   * @param {string} sectionDomId
   * @return {string}
   */ makePageKey(sectionDomId) {
        return sectionDomId.replace('section-', '').replace(/-/g, '');
    }
    /**
   * Generates specific key to store parameter in the URL
   * uses prevsiouly calculated baseKey for section specific parameters
   * @param {Object} formParam
   * @param {string} baseKey pre-calculated base for section specific parameters
   * @return {string}
   */ makeParamKey(formParam, baseKey) {
        return formParam.global ? formParam.urlKey : `${baseKey}-${formParam.urlKey}`;
    }
    /**
   * Gets a set of parameters from window query string
   * always returns value of "page" parameter if present
   * @param {Object[]} formConfig
   * @param {string} sectionDomId
   * @return {Object}
   */ deserializeParams(formConfig, sectionDomId) {
        const params = {};
        const urlPageKey = this.makePageKey(sectionDomId);
        const page = this.getParameterByName(urlPageKey);
        if (page) params.page = parseInt(page);
        if (Array.isArray(formConfig)) formConfig.forEach((formParam)=>{
            const key = this.makeParamKey(formParam, urlPageKey);
            let urlValue = this.getParameterByName(key);
            if (formParam.type === 'int') {
                urlValue = parseInt(urlValue);
                // eslint-disable-next-line
                if (!isFinite(urlValue)) urlValue = null;
            } else if (formParam.type === 'bool' || formParam.type === 'boolean') urlValue = // eslint-disable-next-line
            urlValue === 'true' ? true : urlValue === 'false' ? false : null;
            else if (formParam.type === 'json') try {
                urlValue = JSON.parse(urlValue);
            } catch (e) {
            // no need to do anything
            }
            params[formParam.formKey || formParam.param] = urlValue;
        });
        return params;
    }
    /**
   * Serializes set of parameters defined by formConfig into the URL
   * adding or replacing or removing required parameters
   * @param {Object[]} formConfig
   * @param {string} sectionDomId
   * @param {Object} params
   * @return {string}
   */ serializeParams(formConfig, sectionDomId, params) {
        let result = this.window.location.href;
        const urlPageKey = this.makePageKey(sectionDomId);
        result = this.updateQueryString(urlPageKey, params.page, result);
        if (Array.isArray(formConfig)) formConfig.forEach((formParam)=>{
            const key = this.makeParamKey(formParam, urlPageKey);
            let value = params[formParam.formKey || formParam.param];
            if (formParam.type === 'json' && value !== null && typeof value !== 'undefined') value = JSON.stringify(value);
            result = this.updateQueryString(key, value, result);
        });
        return result;
    }
    /**
   * Formats small number for slider values
   * @param {number} value
   * @param {string} currency
   * @return {string}
   */ formatSliderAtom(value, currency = '') {
        const formattedValue = Number.isInteger(value) ? value : value.toFixed(2);
        return currency + formattedValue;
    }
    /**
   * Formats a number for slider values
   * @param {number} value
   * @param {string} currency
   * @param {string} delimiter
   * @return {string}
   */ formatSliderValue(value, currency = '', delimiter = '') {
        if (value < 1000) return this.formatSliderAtom(value, currency);
        if (value < 1000000) return `${this.formatSliderAtom(value / 1000, currency)}${delimiter}K`;
        return `${this.formatSliderAtom(value / 1000000, currency)}${delimiter}M`;
    }
    /**
   * Format price slider range
   * @param {number} value
   * @param {Object} range
   * @param {string} currency
   * @param {Object} options
   * @return {string}
   */ formatSliderPriceRange(value, range, currency, options) {
        if (range.min === value && value !== 0) return `${options.lowPrefix}${this.formatSliderValue(value, currency, ' ')}`;
        if (range.max === value) return `${this.formatSliderValue(value, currency, ' ')}${options.highSuffix}`;
        return `${this.formatSliderValue(value, currency, ' ')}`;
    }
    /**
   * Format area slider range
   * @param {number} value
   * @param {Object} range
   * @param {string} suffix
   * @param {Object} options
   * @return {string}
   */ formatSliderAreaRange(value, range, suffix, options) {
        if (range.min === value && value !== 0) return `${options.lowPrefix}${this.formatSliderValue(value)} ${suffix}`;
        if (range.max === value) return `${this.formatSliderValue(value)}${options.highSuffix} ${suffix}`;
        return `${this.formatSliderValue(value)} ${suffix}`;
    }
    /**
   * Utility function to get properties search parameters from a set of jQuery objects
   * @param {Object} options
   * @param {jQuery|HTMLElement} [options.queryElement]
   * @param {jQuery|HTMLElement} [options.priceSliderElement]
   * @param {jQuery|HTMLElement} [options.areaSliderElement]
   * @param {jQuery|HTMLElement} [options.neighborhoodSelect]
   * @return {Object}
   */ // eslint-disable-next-line sonarjs/cognitive-complexity
    getSearchFormValues(options) {
        const { queryElement: queryElement, priceSliderElement: priceSliderElement, areaSliderElement: areaSliderElement, neighborhoodSelect: neighborhoodSelect } = options;
        const result = {};
        if (queryElement) result.search = queryElement.value || null;
        if (priceSliderElement) {
            const priceValues = priceSliderElement.value.split(';');
            const priceMinLimit = parseInt(priceSliderElement.dataset.min);
            const priceMaxLimit = parseInt(priceSliderElement.dataset.max);
            const priceMin = parseInt(priceValues[0]);
            const priceMax = parseInt(priceValues[1]);
            result.priceMin = priceMin !== priceMinLimit ? priceMin : null;
            result.priceMax = priceMax !== priceMaxLimit ? priceMax : null;
        }
        if (areaSliderElement) {
            const areaValues = areaSliderElement.value.split(';');
            const areaMinLimit = parseInt(areaSliderElement.dataset.min);
            const areaMaxLimit = parseInt(areaSliderElement.dataset.max);
            const areaMin = parseInt(areaValues[0]);
            const areaMax = parseInt(areaValues[1]);
            result.areaMin = areaMin !== areaMinLimit ? areaMin : null;
            result.areaMax = areaMax !== areaMaxLimit ? areaMax : null;
        }
        if (neighborhoodSelect) result.neighborhoodId = neighborhoodSelect.value || null;
        return result;
    }
    /**
   * Add supports for object typeof values to be encoded on URL
   * Ref: https://stackoverflow.com/questions/1714786/query-string-encoding-of-a-javascript-object
   * @param {*} obj
   * @param {string} prefix
   * @param {string} baseParam used for grouping in case of nested objects
   * @returns
   */ // eslint-disable-next-line sonarjs/cognitive-complexity
    serializeObj(obj, prefix = '', baseParam = '') {
        const result = [];
        for(const prop in obj)if (obj.hasOwnProperty(prop)) {
            const value = obj[prop];
            let k;
            if (baseParam) {
                const newPrefix = prefix ? `[${prefix}][${prop}]` : `[${prop}]`;
                k = `${baseParam}${newPrefix}`;
            } else k = prefix ? `${prefix}[${prop}]` : prop;
            if (value !== null && Array.isArray(value)) {
                if (value.length) result.push(this.serializeArray(k, value));
            } else if (value !== null && typeof value === 'object') result.push(this.serializeObj(value, k));
            else result.push(`${k}=${encodeURIComponent(value)}`);
        }
        return result.join('&');
    }
    /**
   * Adds support for array values to be encoded on URL
   * @param {string} key
   * @param {Array} value
   * @param {string} baseParam
   */ serializeArray(key, value, baseParam = '') {
        const result = [];
        value.forEach((val)=>{
            const paramName = baseParam ? `${baseParam}${key}` : key;
            result.push(`${paramName}=${encodeURIComponent(val)}`);
        });
        return result.join('&');
    }
    /**
   * Private method to process string search values.
   * @param {Array} results comes from regex matchAll.
   * @param {Boolean} isAdvancedFilters flag to determine if the search is for advanced filters.
   * @returns
   */ _parseParamToObject(results, isAdvancedFilters = false) {
        if (!results.length) return null;
        const obj = {};
        for(let i = 0; i < results.length; i++)/* Results from regex match all come in this form:
      [ '&advancedFilters[query][statusIds][in]=uuid-segundo-123', '[query][statusIds][in]', 'uuid-segundo-123' ]
      So using every third value will be the actual value and the second value will be the path
    */ if ((i + 1) % 3 === 0) {
            const value = decodeURIComponent(results[i].replace(/\+/g, ' '));
            const path = results[i - 1];
            Object.assign(obj, this._setObjectPath(path, value, obj, isAdvancedFilters));
        }
        return obj;
    }
    /** *
   * Private method to set object value given a path
   * @param {String} path
   * @param {*} value
   * @param {Object} baseObj
   * @param {Boolean} isAdvancedFilters flag to determine if the search is for advanced filters.
   */ _setObjectPath(path, value, baseObj, isAdvancedFilters = false) {
        // eslint-disable-next-line
        const keys = path.split(/[\[\]]/).filter(Boolean);
        const afArrayKeys = [
            'in',
            'nin',
            'btw',
            'ciin',
            'cinin'
        ];
        const obj = {};
        let ref = obj;
        const valueExists = (0, $fc0a058ae42af628$export$267a1435fe18b8d4)(baseObj, keys.join('.'));
        keys.forEach((key, index)=>{
            if (index === keys.length - 1) {
                if (valueExists) ref[key] = Array.isArray(valueExists) ? [
                    ...valueExists,
                    value
                ] : [
                    valueExists,
                    value
                ];
                else ref[key] = isAdvancedFilters && afArrayKeys.includes(key) ? [
                    value
                ] : value;
            } else {
                ref[key] = baseObj[key] ? baseObj[key] : {};
                ref = ref[key];
            }
        });
        return obj;
    }
}


/* eslint-disable import/prefer-default-export */ 
class $2b1790aa32f109d1$export$43e435c053a109f6 extends (0, $7c391e2f7931d60d$export$3b5bd9381a52554c) {
    /**
   * Initialize Expand Slider Controller at build time
   * @param { ConfigController } config
   * @param {Window} window
   * @param {Document} document
   */ constructor(config, window, document){
        super(config, window, document);
        this._createLightbox = this._createLightbox.bind(this);
        this.expandSliders = [];
    }
    /**
   * Initialize Expand Slider Controller at run time
   * Attach handlers and events to DOM
   * @param {Object} options
   */ initialize(options = {}) {
        try {
            const { document: document } = this;
            const expandSliders = document.querySelectorAll('.has-mobile-expand');
            expandSliders.forEach((block)=>{
                this._addExpandButton(block);
            });
            this.expandSliders = this.expandSliders.concat(expandSliders);
        } catch (e) {
            // eslint-disable-next-line no-console
            console.log(e);
        }
    }
    /**
   * Controllers must implement a "destroy" method to be called
   * after page navigation to remove event handlers / cleanup
   */ destroy() {
        const { document: document } = this;
        document.querySelectorAll('.lp-expand-btn, .lp-expand-btn-wrapper').forEach((element)=>element.remove());
        this.expandSliders = [];
    }
    /**
   * Create expand button for sliders
   * @param {HTMLElement} slider
   */ _addExpandButton(slider) {
        const { document: document } = this;
        const section = slider.closest('section[id]');
        const appendTargetSelector = slider.dataset.append;
        let expandBtn = section.querySelector('.lp-expand-btn');
        if (!expandBtn) {
            expandBtn = document.createElement('button');
            expandBtn.className = 'lp-expand-btn';
            expandBtn.setAttribute('aria-label', 'Open a lightbox');
            expandBtn.innerHTML = `<span class="lp-i lp-i--expand-alt" aria-hidden="true"></span>`;
            if (appendTargetSelector) {
                const appendTarget = section.querySelector(appendTargetSelector);
                if (appendTarget) appendTarget.appendChild(expandBtn);
            } else {
                const wrapper = document.createElement('div');
                wrapper.className = 'lp-expand-btn-wrapper';
                wrapper.style.position = 'relative';
                wrapper.appendChild(expandBtn);
                slider.parentNode.insertBefore(wrapper, slider.nextSibling);
            }
        }
        expandBtn.addEventListener('click', ()=>{
            this._createLightbox({
                slider: slider,
                section: section
            });
        });
    }
    /**
   * Creates a lightbox modal for displaying slider images in a larger view.
   *
   * @param {Object} params - The parameters for the function.
   * @param {HTMLElement} params.slider - The slider element containing images.
   * @param {HTMLElement} params.section - The section element related to the slider.
   * @param {number} [params.initialIndex] - Optional index of the image to show initially.
   */ _createLightbox({ slider: slider, section: section, initialIndex: initialIndex }) {
        const { window: window, document: document } = this;
        const modalId = `lightbox-for-${section?.id}`;
        const isSlickAvailable = window.$ && window.$.fn.slick;
        const isSectionSlickInitialized = isSlickAvailable && slider.slick;
        const isSplideAvailable = typeof window.Splide === 'function';
        const isSectionSplideInitialized = slider.classList.contains('is-initialized') && slider.classList.contains('splide');
        if (typeof window.lpUI.requestScrollLock === 'function') window.lpUI.requestScrollLock(modalId);
        else document.body.style.overflow = 'hidden';
        function createSlickLightbox() {
            const slickOverlayOptions = {
                arrows: true,
                dots: false,
                infinite: true,
                draggable: true,
                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>'
            };
            const modal = document.createElement('div');
            modal.id = modalId;
            modal.className = 'lp-lightbox';
            modal.setAttribute('tabindex', '-1');
            modal.setAttribute('role', 'dialog');
            modal.setAttribute('aria-modal', 'true');
            modal.innerHTML = `
        <button class="lp-lightbox__close" aria-label="close modal"></button>
        <div class="lp-lightbox__content">
          <div class="lp-lightbox__carousel"></div>
        </div>
      `;
            document.body.appendChild(modal);
            const overlaySlider = modal.querySelector('.lp-lightbox__carousel');
            modal.classList.add('show');
            let sourceImages;
            if (isSectionSlickInitialized) {
                sourceImages = slider.slick.$slides.find('img');
                slickOverlayOptions.initialSlide = slider.slick?.currentSlide || 0;
                sourceImages.each(function() {
                    window.$('.lp-lightbox__carousel').append(window.$(this).clone(false).removeAttr('style').wrap('<div class="lp-lightbox__slide"></div>').parent());
                });
            } else {
                sourceImages = slider.querySelectorAll('img');
                sourceImages.forEach((img)=>{
                    const imgClone = img.cloneNode(true);
                    imgClone.removeAttribute('style');
                    const slide = document.createElement('div');
                    slide.className = 'lp-lightbox__slide';
                    slide.appendChild(imgClone);
                    overlaySlider.appendChild(slide);
                });
            }
            window.$(overlaySlider).slick(slickOverlayOptions);
            // Focus modal after it's created
            setTimeout(()=>{
                modal.focus();
            }, 100);
            // Keyboard navigation handler
            const handleKeydown = (e)=>{
                if (!modal.classList.contains('show')) return;
                const prevArrow = modal.querySelector('.lp-lightbox-arrow--prev');
                const nextArrow = modal.querySelector('.lp-lightbox-arrow--next');
                const closeBtn = modal.querySelector('.lp-lightbox__close');
                if (e.key === 'ArrowLeft' && prevArrow) {
                    e.preventDefault();
                    prevArrow.click();
                } else if (e.key === 'ArrowRight' && nextArrow) {
                    e.preventDefault();
                    nextArrow.click();
                } else if (e.key === 'Escape' && closeBtn) {
                    e.preventDefault();
                    closeBtn.click();
                }
            };
            document.addEventListener('keydown', handleKeydown);
            modal.querySelector('.lp-lightbox__close').addEventListener('click', ()=>{
                document.removeEventListener('keydown', handleKeydown);
                modal.classList.remove('show');
                const currentSlide = overlaySlider?.slick ? window.$(overlaySlider).slick('slickCurrentSlide') : 0;
                if (overlaySlider?.slick) window.$(overlaySlider).slick('unslick');
                if (isSectionSlickInitialized) window.$(slider).slick('slickGoTo', currentSlide);
                if (typeof window.lpUI.releaseScrollLock === 'function') window.lpUI.releaseScrollLock(modalId);
                else document.body.style.overflow = '';
                modal.remove();
            });
        }
        function createSplideLightbox() {
            const splideOptions = {
                rewind: true,
                arrows: true,
                arrowPath: '',
                type: 'loop',
                clones: 1,
                pagination: false,
                perPage: 1,
                perMove: 1
            };
            const modal = document.createElement('div');
            modal.id = modalId;
            modal.className = 'lp-lightbox';
            modal.setAttribute('tabindex', '-1');
            modal.setAttribute('role', 'dialog');
            modal.setAttribute('aria-modal', 'true');
            modal.innerHTML = `
      <button class="lp-lightbox__close" aria-label="close modal"></button>
      <div class="lp-lightbox__content">
        <div class="lp-lightbox__carousel splide" role="group" aria-label="Image Gallery">
          <div class="splide__arrows">
            <button class="splide__arrow splide__arrow--prev lp-lightbox-arrow lp-lightbox-arrow--prev"></button>
            <button class="splide__arrow splide__arrow--next lp-lightbox-arrow lp-lightbox-arrow--next"></button>
          </div>
          <div class="splide__track">
            <ul class="splide__list"></ul>
          </div>
        </div>
      </div>
    `;
            if (typeof window.lpUI.requestScrollLock === 'function') window.lpUI.requestScrollLock(modalId);
            else document.body.style.overflow = 'hidden';
            document.body.appendChild(modal);
            const overlaySlider = modal.querySelector('.lp-lightbox__carousel');
            const overlaySliderList = overlaySlider.querySelector('.splide__list');
            modal.classList.add('show');
            let sourceImages;
            if (isSectionSplideInitialized) sourceImages = slider.querySelectorAll('.splide__slide:not(.splide__slide--clone) img');
            else sourceImages = slider.querySelectorAll('img');
            sourceImages.forEach((img)=>{
                const imgClone = img.cloneNode(true);
                imgClone.removeAttribute('style');
                const slide = document.createElement('li');
                slide.className = 'lp-lightbox__slide splide__slide';
                slide.appendChild(imgClone);
                overlaySliderList.appendChild(slide);
            });
            const overlaySplide = new window.Splide(overlaySlider, splideOptions);
            overlaySplide.mount();
            // Navigate to initial index if provided
            if (typeof initialIndex !== 'undefined' && initialIndex >= 0) overlaySplide.go(initialIndex);
            // Focus modal after it's created and mounted
            setTimeout(()=>{
                modal.focus();
            }, 100);
            // Keyboard navigation handler
            const handleKeydown = (e)=>{
                if (!modal.classList.contains('show')) return;
                const prevArrow = modal.querySelector('.splide__arrow--prev');
                const nextArrow = modal.querySelector('.splide__arrow--next');
                const closeBtn = modal.querySelector('.lp-lightbox__close');
                if (e.key === 'ArrowLeft' && prevArrow) {
                    e.preventDefault();
                    prevArrow.click();
                } else if (e.key === 'ArrowRight' && nextArrow) {
                    e.preventDefault();
                    nextArrow.click();
                } else if (e.key === 'Escape' && closeBtn) {
                    e.preventDefault();
                    closeBtn.click();
                }
            };
            document.addEventListener('keydown', handleKeydown);
            modal.querySelector('.lp-lightbox__close').addEventListener('click', ()=>{
                document.removeEventListener('keydown', handleKeydown);
                modal.classList.remove('show');
                if (overlaySplide) overlaySplide.destroy();
                if (typeof window.lpUI.releaseScrollLock === 'function') window.lpUI.releaseScrollLock(modalId);
                else document.body.style.overflow = '';
                modal.remove();
            });
        }
        if (isSlickAvailable && !isSectionSplideInitialized) createSlickLightbox();
        else if (isSplideAvailable) createSplideLightbox();
        else {
            window.luxuryPresence.libs.loadCss(window.luxuryPresence.libs.jsLibsMap.splide.cssSrc);
            window.luxuryPresence.libs.loadJs(window.luxuryPresence.libs.jsLibsMap.splide.jsSrc, ()=>{
                createSplideLightbox();
                window.luxuryPresence.libs.jsLibsMap.splide.isLoaded = true;
            });
        }
    }
}


/* eslint-disable import/prefer-default-export */ 
class $4f184d9bd3037f15$export$7a6215890afba974 extends (0, $7c391e2f7931d60d$export$3b5bd9381a52554c) {
    // constructor is not needed as it is inherited from BaseController
    /**
   * Destroy
   */ destroy() {
        if (!this.window.divolte) this.window.divolteLp = function() {
            (this.window.divolteLp.q = this.window.divolteLp.q || []).push(// eslint-disable-next-line prefer-rest-params
            arguments);
        };
    }
    /**
   * Initialize divolte controller
   * @param {Object} options
   */ initialize(options = {}) {
        const { divolteServiceUrl: divolteServiceUrl } = this.config;
        if (!divolteServiceUrl || this.window.divolte) return;
        this.loadScript();
    }
    /**
   * loads divolte
   */ loadScript() {
        const { divolteServiceUrl: divolteServiceUrl } = this.config;
        const script = this.document.createElement('script');
        script.id = 'divolte-script';
        script.type = 'text/javascript';
        script.defer = true;
        script.async = true;
        script.src = `${divolteServiceUrl}/divolte.js`;
        this.document.head.appendChild(script);
        script.addEventListener('load', this.executeQueue.bind(this));
    }
    /**
   * executeQueue
   */ executeQueue() {
        (this.window.divolteLp.q || []).forEach(([methodName, params])=>{
            this[methodName](params);
        });
        this.window.divolteLp = this.divolteLp.bind(this);
    }
    /**
   * divolteLp
   * @param {string} name
   * @param {Object} params
   */ divolteLp(name, params) {
        try {
            this[name](params);
        } catch (error) {
            // eslint-disable-next-line no-console
            console.log(error);
        }
    }
    /**
   * sendLpEvent
   * @param {string} name
   * @param {Object} params
   */ sendLpEvent(name, params) {
        // Events must be defined in divolte schema! To ensure correct usage, event names are validated here.
        if (!name.includes('pageView')) {
            // Event not defined
            // eslint-disable-next-line no-console
            console.log(`${name} IS NOT SUPPORTED`);
            return;
        }
        const { companyId: companyId, templateId: templateId, websiteId: websiteId, pageId: pageId, shareId: shareId, pageMeta: pageMeta } = this.config;
        const baseParams = {
            companyId: companyId,
            templateId: templateId,
            websiteId: websiteId,
            pageId: pageId,
            shareId: shareId,
            pageMeta: pageMeta
        };
        this.window.divolte.signal(name, Object.assign(baseParams, params));
    }
    /**
   * sendLpPageView
   */ sendLpPageView() {
        this.sendLpEvent('pageView', {});
    }
}


/* eslint-disable import/prefer-default-export */ 
const $102039871668a1df$var$EVENT_BUS_SCRIPT = 'event-bus-js.js';
const $102039871668a1df$var$EVENT_BUS_VERSION = 'v2.1.0';
class $102039871668a1df$export$e22e4b1be0bb6c61 extends (0, $7c391e2f7931d60d$export$3b5bd9381a52554c) {
    // eslint-disable-next-line @typescript-eslint/no-useless-constructor
    constructor(config, window, document){
        super(config, window, document);
    }
    /**
   * Initialize EventBus controller
   * @param {Object} options
   */ initialize(options = {}) {
        const enabled = options.enabled !== undefined ? options.enabled : this.config.eventBus?.enabled;
        if (enabled && this.config.eventBus?.apiKey && this.config.eventBus?.url) this.loadScript();
    }
    /**
   * loads eventBus script
   */ loadScript() {
        const { eventBusUrl: eventBusUrl } = this.config;
        const script = this.document.createElement('script');
        script.id = 'posthog-script';
        script.type = 'text/javascript';
        script.defer = true;
        script.async = true;
        script.src = `${eventBusUrl}/${$102039871668a1df$var$EVENT_BUS_VERSION}/${$102039871668a1df$var$EVENT_BUS_SCRIPT}`;
        this.document.head.appendChild(script);
        script.addEventListener('load', this.executeQueue.bind(this));
    }
    /**
   * executeQueue - Process queued eventBusLp calls
   */ executeQueue() {
        // Initialize the event bus provider using the global EventBusJS
        if (this.window.LuxuryPresenceEventBus) this.window.eventBusProvider = this.window.LuxuryPresenceEventBus.createEventBusProvider({
            apiKey: this.config.eventBus.apiKey,
            host: this.config.eventBus.url
        });
        (this.window.eventBusLp.q || []).forEach(([methodName, params])=>{
            this[methodName](params);
        });
        // Replace queue function with real function
        this.window.eventBusLp = this.eventBusLp.bind(this);
    }
    /**
   * Destroy
   */ destroy() {
        if (!this.window.eventBusProvider) {
            // Reset to queue function if no provider exists
            this.window.eventBusLp = function() {
                (this.window.eventBusLp.q = this.window.eventBusLp.q || []).push(// eslint-disable-next-line prefer-rest-params
                arguments);
            };
            return;
        }
        this.window.eventBusProvider.shutdown();
    }
    /**
   * sendLpEvent
   * @param {string} eventType
   * @param {Object} data
   */ sendLpEvent(eventType, data) {
        // Events must be defined in event-bus schema! To ensure correct usage, event types are validated here.
        if (eventType !== 'user.activity.page.viewed') {
            // Event type not defined
            // eslint-disable-next-line no-console
            console.log(`${eventType} IS NOT SUPPORTED`);
            return;
        }
        if (!this.window.eventBusProvider) return;
        const { companyId: companyId } = this.config;
        const eventData = {
            company: companyId,
            data: {}
        };
        try {
            this.window.eventBusProvider.capture(eventType, eventData);
        } catch (error) {
            // eslint-disable-next-line no-console
            console.log('EventBus capture error:', error);
        }
    }
    /**
   * eventBusLp
   * @param {string} name
   * @param {Object} params
   */ eventBusLp(name, params) {
        try {
            this[name](params);
        } catch (error) {
            // eslint-disable-next-line no-console
            console.log(error);
        }
    }
    /**
   * sendLpPageView
   */ sendLpPageView() {
        this.sendLpEvent('user.activity.page.viewed', {});
    }
}


/* eslint-disable import/prefer-default-export */ 

const $0d25a3fa2e0f4f92$var$EVENT_NAME = 'oauthSuccess';
class $0d25a3fa2e0f4f92$export$b718a981691eae5c extends (0, $7c391e2f7931d60d$export$3b5bd9381a52554c) {
    /**
   * Initialize Button Controller at build time
   * @param { ConfigController } config
   * @param {Window} window
   * @param {Document} document
   */ constructor(config, window, document){
        super(config, window, document);
        this.successListeners = [];
        this._listenToMessages = this._listenToMessages.bind(this);
        this._listenToOneTapMessage = this._listenToOneTapMessage.bind(this);
    }
    /**
   * Initialize OAuth Controller at run time
   * Swap out special buttons for the iframe
   * @param {Object} options
   */ initialize(options = {}) {
        try {
            // handle google one tap
            if (options.googleSignOnEnabled && !options.iframe) this._renderGoogleOneTap();
            // handle google sign in buttons
            this.document.querySelectorAll('div[data-signin-type="google-sign-in"]').forEach((el)=>this._convertGoogleSignIn(el));
            // handle facebook sign in buttons
            this.document.querySelectorAll('div[data-signin-type="facebook-sign-in"]').forEach((el)=>this._convertFacebookSignIn(el));
        } catch (e) {
            // eslint-disable-next-line no-console
            console.log(e);
        }
    }
    /**
   * Controllers must implement a "destroy" method to be called
   * after page navigation to remove event handlers / cleanup
   */ destroy() {
        this.successListeners.forEach((callback)=>{
            this.window.removeEventListener('message', this._listenToMessages);
            this.window.removeEventListener('message', this._listenToOneTapMessage);
            this.window.removeEventListener($0d25a3fa2e0f4f92$var$EVENT_NAME, this.window[callback]);
        });
    }
    /**
   * Convert google one tap
   */ _renderGoogleOneTap() {
        if (!this._isGoogleOneTapOnCooldown()) {
            const dummyEl = this.document.createElement('div');
            // eslint-disable-next-line no-undef
            google.accounts.id.initializeIntermediate({
                src: this._buildUrlAndCopyAttributes(dummyEl, dummyEl, 'googleOneTap')
            });
            this.window.localStorage.removeItem('googleOneTapExpiration');
            this.window.addEventListener('message', this._listenToOneTapMessage);
        }
    }
    /**
   * Listening for messages from BSS one tap iframes
   * @param {MessageEvent} e
   */ _listenToOneTapMessage(e) {
        const messageTypes = {
            SHOW_INTERMEDIATE_IFRAME: 'show_intermediate_iframe',
            HIDE_INTERMEDIATE_IFRAME: 'hide_intermediate_iframe'
        };
        const iframeId = 'onetap_google_intermediate_iframe';
        const { buyerSellerServiceUrl: buyerSellerServiceUrl } = this.config;
        const { data: data, origin: origin } = e;
        const { type: type, height: height, event: event, source: source, token: token } = data;
        if (type === messageTypes.SHOW_INTERMEDIATE_IFRAME || type === messageTypes.HIDE_INTERMEDIATE_IFRAME) {
            const bssIframe = this.document.getElementById(iframeId);
            if (bssIframe) {
                bssIframe.style.height = height;
                bssIframe.style.display = type === messageTypes.SHOW_INTERMEDIATE_IFRAME ? 'unset' : 'none';
            }
        }
        // these events are generated by our code in the bss iframe
        if (origin === buyerSellerServiceUrl && source === 'GOOGLE_SIGN_ON') {
            if (event === 'success') {
                this._setExpirationLsItem(86400000); // 24 hours
                this._handleQualifyingQuestionsModal(token);
            } else if (event === 'cancel') this._setExpirationLsItem(7200000); // 2 hours
        }
    }
    /**
   * Set expiration local storage item for google one tap
   * @param {number} ms
   */ _setExpirationLsItem(ms) {
        const expiration = new Date().getTime() + ms;
        this.window.localStorage.setItem('googleOneTapExpiration', expiration);
    }
    /**
   * Check if google one tap is expired
   * @return {boolean}
   */ _isGoogleOneTapOnCooldown() {
        const expirationTime = this.window.localStorage.getItem('googleOneTapExpiration');
        return Number(expirationTime) > new Date().getTime();
    }
    /**
   * Convert google sign in buttons
   * @param {HTMLElement} el
   */ _convertGoogleSignIn(el) {
        this._replaceWithIframe('googleSignIn', el);
    }
    /**
   * Convert google sign in buttons
   * @param {HTMLElement} el
   */ _convertFacebookSignIn(el) {
        this._replaceWithIframe('facebookSignIn', el);
    }
    /**
   * Convert google sign in buttons
   * @param {'googleSignIn' | 'facebookSignIn'} provider
   * @param {HTMLElement} el
   */ _replaceWithIframe(provider, el) {
        this._attachSuccessCallback(el);
        const iframe = this.document.createElement('iframe');
        iframe.src = this._buildUrlAndCopyAttributes(el, iframe, provider);
        iframe.dataset.isSocialOauthButton = true;
        el.replaceWith(iframe);
    }
    /**
   * Listening for messages from BSS iframes
   * @param {Event} e
   */ _listenToMessages(e) {
        const { buyerSellerServiceUrl: buyerSellerServiceUrl } = this.config;
        // eslint-disable-next-line sonarjs/no-collapsible-if
        if (e.origin === buyerSellerServiceUrl) {
            if (e.data.event === 'success') {
                const event = new Event($0d25a3fa2e0f4f92$var$EVENT_NAME);
                this.window.dispatchEvent(event);
                // Registration / social sign-in is a lead event — credit the conversion.
                (0, $3ec2bf3965f87ecc$export$e70565180c0e6950)(this.window, this.document);
                this.successListeners.forEach((callback)=>{
                    if (this.window[callback]) this.window[callback](event);
                    else // eslint-disable-next-line no-console
                    console.error(`Callback function ${callback} not found on window object`);
                });
                this.document.documentElement.classList.add('is-login-success');
            }
        }
    }
    /**
   * Attach callback to iframe
   * @param {HTMLElement} el
   */ _attachSuccessCallback(el) {
        this.window.addEventListener('message', this._listenToMessages);
        const callbackFunction = el.dataset.onSuccessFunctionName;
        if (callbackFunction) this.successListeners.push(callbackFunction);
    }
    /**
   * Build Iframe URL
   * @param {HTMLElement} source
   * @param {HTMLElement} target
   * @param {string} provider
   * @return {string}
   */ _buildUrlAndCopyAttributes(source, target, provider) {
        const { buyerSellerServiceUrl: buyerSellerServiceUrl, companyId: companyId, websiteId: websiteId, pageId: pageId, pageMeta: pageMeta } = this.config;
        const { location: location } = this.window;
        const sourceUrl = location.origin + location.pathname;
        const destination = new URL(`${buyerSellerServiceUrl}/buttons/${provider}`);
        const utm = this.window.localStorage.getItem('utm_vars');
        const referrer = this.window.localStorage.getItem('referrer');
        destination.searchParams.append('companyId', companyId);
        destination.searchParams.append('websiteId', websiteId);
        destination.searchParams.append('pageId', pageId);
        destination.searchParams.append('sourceUrl', sourceUrl);
        destination.searchParams.append('pageMeta', JSON.stringify(pageMeta));
        if (utm) destination.searchParams.append('utm', utm);
        if (referrer) destination.searchParams.append('referrer', referrer);
        // Google and Facebook Attributes used to style the social button
        const RESERVED_ATTRIBUTES = [
            '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'
        ];
        Array.from(source.attributes).forEach((attribute)=>{
            if (RESERVED_ATTRIBUTES.includes(attribute.nodeName)) destination.searchParams.append(attribute.nodeName, attribute.nodeValue);
            else target.setAttribute(attribute.nodeName === 'id' ? 'data-id' : attribute.nodeName, attribute.nodeValue);
        });
        return destination.toString();
    }
    /**
   * Decode a JWT token to extract payload information
   * @param {string} token - The JWT token to decode
   * @return {Object|null} The decoded payload object or null if decoding fails
   */ _decodeToken(token) {
        try {
            const parts = token.split('.');
            const payload = parts[1];
            const base64 = payload.replace(/-/g, '+').replace(/_/g, '/');
            const padding = 4 - base64.length % 4;
            const padded = padding === 4 ? base64 : base64 + '='.repeat(padding);
            return JSON.parse(atob(padded));
        } catch (error) {
            return null;
        }
    }
    /**
   * Handle qualifying questions modal showing for Google Sign On
   * Decodes the JWT token to extract user email and shows the modal if available
   * @param {string} token - The JWT token containing user information
   */ _handleQualifyingQuestionsModal(token) {
        if (token && this.window.luxuryPresence && this.window.luxuryPresence.qualifyingQuestionsModal) {
            // Decoding only for lead attribution, fine to skip signature verification
            const decoded = this._decodeToken(token);
            if (decoded && decoded.email) this.window.luxuryPresence.qualifyingQuestionsModal.showModal(decoded.email, 'Google Sign On');
        }
    }
}


/* eslint-disable import/prefer-default-export */ 
class $dcf72769f009ff26$export$b900d6fe921fd49c extends (0, $7c391e2f7931d60d$export$3b5bd9381a52554c) {
    /**
   * Initialize Qualifying Questions Modal Controller at build time
   * @param { ConfigController } config
   * @param {Window} window
   * @param {Document} document
   */ constructor(config, window, document){
        super(config, window, document);
        this.showModal = this.showModal.bind(this);
        this.hasModalBeenSubmitted = this.hasModalBeenSubmitted.bind(this);
        this.modalId = 'qualifying-questions-modal';
        this.cookieKey = 'qualifyingQuestionsModalSubmitted';
        this.qualifyingQuestionsModalEnabled = true;
        // Store references for cleanup
        this.eventListeners = [];
        this.timeouts = [];
    }
    initialize(options = {}) {
        this.qualifyingQuestionsModalEnabled = options.qualifyingQuestionsModalEnabled ?? this.qualifyingQuestionsModalEnabled;
        if (!this.qualifyingQuestionsModalEnabled) return;
        this.attachModalCloseListeners();
    }
    destroy() {
        // Remove all stored event listeners
        this.eventListeners.forEach(({ element: element, event: event, handler: handler })=>{
            if (element && element.removeEventListener) element.removeEventListener(event, handler);
        });
        this.timeouts.forEach((timeoutId)=>{
            clearTimeout(timeoutId);
        });
        this.restoreBodyScroll();
        this.eventListeners = [];
        this.timeouts = [];
    }
    /**
   * Check if modal has been submitted using cookie-based deduplication
   * @return {boolean}
   */ hasModalBeenSubmitted() {
        const cookieValue = this.getCookie(this.cookieKey);
        return cookieValue === 'true';
    }
    /**
   * Set cookie to prevent modal from showing again
   */ setModalSubmittedCookie() {
        this.setCookie(this.cookieKey, 'true', 365); // 1 year
    }
    showModal(email, triggerSource) {
        if (!this.qualifyingQuestionsModalEnabled || this.hasModalBeenSubmitted()) return;
        this.updateEmailValue(email);
        this.updateTriggerSourceValue(triggerSource);
        this.showModalElement();
    }
    /**
   * Get modal element with error handling
   * @return {Element|null}
   */ getModalElement() {
        const modal = this.document.getElementById(this.modalId);
        if (!modal) console.error('Modal element not found:', this.modalId);
        return modal;
    }
    updateEmailValue(email) {
        const modal = this.getModalElement();
        if (!modal) return;
        const emailInput = modal.querySelector('input[name="email"]');
        if (emailInput && typeof email === 'string') emailInput.value = email;
    }
    updateTriggerSourceValue(triggerSource) {
        const modal = this.getModalElement();
        if (!modal) return;
        const triggerSourceInput = modal.querySelector(`#${this.modalId}-triggerSource`);
        if (triggerSourceInput && typeof triggerSource === 'string') triggerSourceInput.value = triggerSource;
    }
    showModalElement() {
        const modal = this.getModalElement();
        if (!modal) return;
        modal.style.display = 'flex';
        this.blockBodyScroll();
    }
    /**
   * Helper method to get cookie value
   * @param {string} name
   * @return {string|null}
   */ getCookie(name) {
        const value = `; ${this.document.cookie}`;
        const parts = value.split(`; ${name}=`);
        if (parts.length === 2) return decodeURIComponent(parts.pop().split(';').shift());
        return null;
    }
    /**
   * Helper method to set cookie
   * @param {string} name
   * @param {string} value
   * @param {number} days
   */ setCookie(name, value, days) {
        let expires = '';
        if (days) {
            const date = new Date();
            date.setTime(date.getTime() + days * 86400000);
            expires = `; expires=${date.toUTCString()}`;
        }
        let attrs = '; path=/; SameSite=Lax';
        if (this.window && this.window.location && this.window.location.protocol === 'https:') attrs += '; Secure';
        this.document.cookie = `${name}=${encodeURIComponent(value || '')}${expires}${attrs}`;
    }
    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() {
        const modal = this.getModalElement();
        if (!modal) return;
        // Listen for form submission success (when modal closes automatically)
        const form = this.document.getElementById(`${this.modalId}-form`);
        if (form) {
            const formSubmittedHandler = ()=>{
                // Set cookie to prevent showing again and hide modal
                this.setModalSubmittedCookie();
                const timeoutId = setTimeout(()=>{
                    modal.style.display = 'none';
                    this.restoreBodyScroll();
                }, 100);
                this.timeouts.push(timeoutId);
            };
            form.addEventListener('formsubmitted', formSubmittedHandler);
            this.eventListeners.push({
                element: form,
                event: 'formsubmitted',
                handler: formSubmittedHandler
            });
        }
        // Listen for close button clicks
        const closeButton = modal.querySelector('[data-dismiss="modal"]');
        if (closeButton) {
            const closeButtonHandler = ()=>{
                modal.style.display = 'none';
                this.restoreBodyScroll();
            };
            closeButton.addEventListener('click', closeButtonHandler);
            this.eventListeners.push({
                element: closeButton,
                event: 'click',
                handler: closeButtonHandler
            });
        }
        // Listen for backdrop clicks
        const backdropClickHandler = (e)=>{
            // Check if click is on the modal backdrop (not on the modal content)
            if (e.target === modal || e.target.id === this.modalId) {
                modal.style.display = 'none';
                this.restoreBodyScroll();
            }
        };
        modal.addEventListener('click', backdropClickHandler);
        this.eventListeners.push({
            element: modal,
            event: 'click',
            handler: backdropClickHandler
        });
    }
}


/* eslint-disable import/prefer-default-export */ 
class $50eefeef8d1f2372$export$8a2bf06fbae4dde extends (0, $7c391e2f7931d60d$export$3b5bd9381a52554c) {
    constructor(configController, window, document){
        super(configController, window, document);
        this.isValidating = false;
        this.lastValidationResult = null;
        this.lastValidationTime = null;
        this.validationCacheDuration = 300000; // 5 minutes
    }
    /**
   * Destroy
   */ destroy() {
        this.isValidating = false;
        this.lastValidationResult = null;
        this.lastValidationTime = null;
    }
    /**
   * Validate user session using GraphQL validSession query
   * @param {Object} options - Options for session validation
   * @param {boolean} options.useCache - Whether to use cached validation result
   * @returns {Promise<boolean>} - true if session is valid, false otherwise
   */ async validateSession(options = {}) {
        const { useCache: useCache = true } = options;
        if (useCache && this.lastValidationResult !== null && this.lastValidationTime) {
            const timeSinceLastValidation = Date.now() - this.lastValidationTime;
            if (timeSinceLastValidation < this.validationCacheDuration) return this.lastValidationResult;
        }
        if (this.isValidating) return this.lastValidationResult !== null ? this.lastValidationResult : false;
        this.isValidating = true;
        const query = `
      query {
        validSession {
          success
        }
      }
    `;
        try {
            // query from same domain as the website
            const response = await this.window.fetch(`/graphql`, {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json'
                },
                credentials: 'include',
                body: JSON.stringify({
                    query: query
                })
            });
            if (!response.ok) {
                // eslint-disable-next-line no-console
                console.error('SessionController: HTTP error during session validation', response.status);
                this.lastValidationResult = false;
                this.lastValidationTime = Date.now();
                return false;
            }
            const data = await response.json();
            if (data.errors) {
                this.lastValidationResult = false;
                this.lastValidationTime = Date.now();
                return false;
            }
            const isValid = data.data?.validSession?.success === true;
            this.lastValidationResult = isValid;
            this.lastValidationTime = Date.now();
            return isValid;
        } catch (error) {
            // eslint-disable-next-line no-console
            console.error('SessionController: Error validating session', error);
            this.lastValidationResult = false;
            this.lastValidationTime = Date.now();
            return false;
        } finally{
            this.isValidating = false;
        }
    }
    /**
   * Clear validation cache
   */ clearCache() {
        this.lastValidationResult = null;
        this.lastValidationTime = null;
    }
}


/* eslint-disable import/prefer-default-export */ 
function $396d9f0ca7465335$export$48d5542b9e3ba39(document) {
    const match = document.cookie.match(/cookieyes-consent=([^;]+)/);
    if (!match) return false;
    try {
        const cookieValue = decodeURIComponent(match[1]);
        if (cookieValue.includes(',')) {
            const segments = cookieValue.split(',').map((c)=>c.trim());
            if (segments.some((s)=>s.includes(':'))) return segments.some((s)=>s === 'analytics:yes');
            return segments.includes('analytics');
        }
        return cookieValue.includes('analytics');
    } catch (error) {
        return false;
    }
}
/**
 * Consent providers. Each entry isolates the only things that differ between
 * integrations: the change-event name, how to read the *initial* analytics
 * consent, and how to interpret a change event's detail. Everything else
 * (loading/removing trackers, lifecycle) is shared by the controller.
 */ const $396d9f0ca7465335$var$PROVIDERS = {
    // Third-party CookieYes banner.
    cookieyes: {
        eventName: 'cookieyes_consent_update',
        hasAnalyticsConsent: (document)=>$396d9f0ca7465335$export$48d5542b9e3ba39(document),
        isAnalyticsAccepted: (detail)=>Array.isArray(detail?.accepted) && detail.accepted.includes('analytics')
    },
    // LP in-house consent widget (lp-consent-widget). It exposes resolved state on
    // window.__lpConsent and emits `lp_consent_update` with detail.choices.
    'lp-consent': {
        eventName: 'lp_consent_update',
        hasAnalyticsConsent: (_document, window)=>!!window.__lpConsent?.state?.c?.analytics,
        isAnalyticsAccepted: (detail)=>!!detail?.choices?.analytics
    }
};
class $396d9f0ca7465335$export$bb018224876724b9 extends (0, $7c391e2f7931d60d$export$3b5bd9381a52554c) {
    constructor(config, window, document){
        super(config, window, document);
        this.consentListener = null;
        this.eventName = null;
    }
    /**
   * Destroy and cleanup event listeners
   */ destroy() {
        if (this.consentListener && this.eventName) {
            this.document.removeEventListener(this.eventName, this.consentListener);
            this.consentListener = null;
        }
    }
    /**
   * Load PostHog and Divolte scripts (idempotent — guarded by element id).
   */ loadScript() {
        if (!this.document.getElementById('posthog-script')) this.window.luxuryPresence.eventBus.initialize({
            enabled: this.config.eventBus?.enabled
        });
        if (!this.document.getElementById('divolte-script')) this.window.luxuryPresence.divolte.initialize({});
    }
    /**
   * Remove PostHog and Divolte scripts (used on consent withdrawal).
   */ removeScripts() {
        this.window.luxuryPresence?.eventBus?.destroy?.();
        this.window.luxuryPresence?.divolte?.destroy?.();
        this.document.getElementById('posthog-script')?.remove();
        this.document.getElementById('divolte-script')?.remove();
    }
    /**
   * Initialize the consent controller for a given provider.
   * @param {{ provider: 'cookieyes' | 'lp-consent' }} options
   */ async initialize(options = {}) {
        const provider = $396d9f0ca7465335$var$PROVIDERS[options.provider];
        if (!provider) return;
        this.eventName = provider.eventName;
        const isAuthenticated = await this.window.luxuryPresence.session.validateSession();
        if (provider.hasAnalyticsConsent(this.document, this.window) || isAuthenticated) this.loadScript();
        if (!this.consentListener) {
            this.consentListener = (eventData)=>{
                if (provider.isAnalyticsAccepted(eventData.detail)) this.loadScript();
                else this.removeScripts();
            };
            this.document.addEventListener(provider.eventName, this.consentListener);
        }
    }
}


const $fa0280e505379701$export$1fd2b467a3644d37 = new (0, $dc851cf3939b6ef5$export$ff0712c26d5458f7)({});
const $fa0280e505379701$export$e12694e911a05f40 = new (0, $0ead03fdb95fa9ce$export$d507f25e63650365)($fa0280e505379701$export$1fd2b467a3644d37, window, document);
const $fa0280e505379701$export$3de614e59a842917 = new (0, $d48f9f944810f613$export$ca3218b7861b9cb0)($fa0280e505379701$export$1fd2b467a3644d37, window, document);
const $fa0280e505379701$export$fb9b298fdbf31455 = new (0, $68a2d4aa500c7a05$export$61ec8f2b6291ec31)($fa0280e505379701$export$1fd2b467a3644d37, window, document);
const $fa0280e505379701$export$178cc3119b453c2a = new (0, $e10bd00497be8876$export$3c5380623cf51249)($fa0280e505379701$export$1fd2b467a3644d37, window, document);
const $fa0280e505379701$export$9376af1a01686f2 = new (0, $ea6901fdf47e0ec1$export$3c19195edca3fa5c)($fa0280e505379701$export$1fd2b467a3644d37, window, document);
const $fa0280e505379701$export$94d36f806562393e = new (0, $0a0ad49f13c0b8fd$export$ba9afeb75f20f616)($fa0280e505379701$export$1fd2b467a3644d37, window, document);
const $fa0280e505379701$export$89e66d1faf94651e = new (0, $2b1790aa32f109d1$export$43e435c053a109f6)($fa0280e505379701$export$1fd2b467a3644d37, window, document);
const $fa0280e505379701$export$7743b07270cd6d6c = new (0, $4f184d9bd3037f15$export$7a6215890afba974)($fa0280e505379701$export$1fd2b467a3644d37, window, document);
const $fa0280e505379701$export$40a7039551318c37 = new (0, $102039871668a1df$export$e22e4b1be0bb6c61)($fa0280e505379701$export$1fd2b467a3644d37, window, document);
const $fa0280e505379701$export$8a0bbf7e7652fcfc = new (0, $0d25a3fa2e0f4f92$export$b718a981691eae5c)($fa0280e505379701$export$1fd2b467a3644d37, window, document);
const $fa0280e505379701$export$b313b3f6544c97a3 = new (0, $dcf72769f009ff26$export$b900d6fe921fd49c)($fa0280e505379701$export$1fd2b467a3644d37, window, document);
const $fa0280e505379701$export$b526bc4ac03268ef = new (0, $50eefeef8d1f2372$export$8a2bf06fbae4dde)($fa0280e505379701$export$1fd2b467a3644d37, window, document);
const $fa0280e505379701$export$c0affdb0a7a2ef6 = new (0, $396d9f0ca7465335$export$bb018224876724b9)($fa0280e505379701$export$1fd2b467a3644d37, window, document);


/**
 * Attach controller to window for usage
 * @param {string} key
 * @param {any} controller
 */ function $89a8a84b77163415$var$attachController(key, controller) {
    if (window.luxuryPresence[key]) try {
        // New version of sdk, destroy previous
        window.luxuryPresence[key].destroy();
    } catch (e) {
        // eslint-disable-next-line no-console
        console.log(e);
    }
    window.luxuryPresence[key] = controller;
}
$89a8a84b77163415$var$attachController('config', (0, $fa0280e505379701$export$1fd2b467a3644d37));
$89a8a84b77163415$var$attachController('modals', (0, $fa0280e505379701$export$e12694e911a05f40));
$89a8a84b77163415$var$attachController('buttons', (0, $fa0280e505379701$export$3de614e59a842917));
$89a8a84b77163415$var$attachController('validation', (0, $fa0280e505379701$export$fb9b298fdbf31455));
$89a8a84b77163415$var$attachController('contactForms', (0, $fa0280e505379701$export$178cc3119b453c2a));
$89a8a84b77163415$var$attachController('mapApiLoader', (0, $fa0280e505379701$export$9376af1a01686f2));
$89a8a84b77163415$var$attachController('pagination', (0, $fa0280e505379701$export$94d36f806562393e));
$89a8a84b77163415$var$attachController('expandSliders', (0, $fa0280e505379701$export$89e66d1faf94651e));
$89a8a84b77163415$var$attachController('divolte', (0, $fa0280e505379701$export$7743b07270cd6d6c));
$89a8a84b77163415$var$attachController('eventBus', (0, $fa0280e505379701$export$40a7039551318c37));
$89a8a84b77163415$var$attachController('oauth', (0, $fa0280e505379701$export$8a0bbf7e7652fcfc));
$89a8a84b77163415$var$attachController('qualifyingQuestionsModal', (0, $fa0280e505379701$export$b313b3f6544c97a3));
$89a8a84b77163415$var$attachController('session', (0, $fa0280e505379701$export$b526bc4ac03268ef));
$89a8a84b77163415$var$attachController('consent', (0, $fa0280e505379701$export$c0affdb0a7a2ef6));
// methods for existing elements (can be removed later after elements updated)
window.luxuryPresence.formatSliderPriceRange = (0, $fa0280e505379701$export$94d36f806562393e).formatSliderPriceRange.bind((0, $fa0280e505379701$export$94d36f806562393e));
window.luxuryPresence.formatSliderAreaRange = (0, $fa0280e505379701$export$94d36f806562393e).formatSliderAreaRange.bind((0, $fa0280e505379701$export$94d36f806562393e));
// method below doesn't use 'this', but just to be safe in case of further method updates
window.luxuryPresence.getSearchFormValues = (0, $fa0280e505379701$export$94d36f806562393e).getSearchFormValues.bind((0, $fa0280e505379701$export$94d36f806562393e));
window.luxuryPresence.handlebarsHelpersFactory = function(handlebarsInstance) {
    return (0, (/*@__PURE__*/$parcel$interopDefault($53de3c160faf5a81$exports)))(handlebarsInstance, {
        isEqual (a, b) {
            // eslint-disable-next-line
            return a == b;
        }
    });
};



})();
//# sourceMappingURL=lp-sdk.js.map

    </script>

    <script>
        var lpGlobalInitialized = false;

        function lpGlobalInit () {
          if (lpGlobalInitialized) {
            return;
          }
            lpGlobalInitialized = true;
            // Initialize wow animation plugin only according to turbolinks
            var wow;
            if (window.WOW) {
                wow = new WOW({
                    animateClass: 'animated',
                    offset: wowOffset,
                    live: false,
                    callback: function(box) {}
                });
            }
            // Initialize handlebar helpers only once
            function handlebarsInit() {
              if (!window.Handlebars) {
                return;
              }
              HandlebarsIntl.registerWith(Handlebars);
              Handlebars.registerHelper(window.luxuryPresence.handlebarsHelpersFactory(Handlebars));
            }

            handlebarsInit();

              var modalContentUrl = "/modals.html";
                const modalsContainer = document.getElementById('modals');
                if (modalsContainer) {
                  fetch(modalContentUrl).then(function(res) {
                    if (!res.ok) {
                      throw new Error(`HTTP error! Status: ${res.status}`);
                    }
                    return res.text();
                  }).then(function(resultText) {
                    modalsContainer.innerHTML = resultText;

                    // now we need to execute all script elements
                    Array.from(modalsContainer.getElementsByTagName('script')).forEach(function (s) {
                      const script  = document.createElement("script");
                      script.text = s.innerHTML;
                      Array.from(s.attributes).forEach(function (a) {
                        script.setAttribute(a.name, a.value);
                      })
                      s.parentNode.replaceChild(script, s);
                    });

                    try {
                      window.luxuryPresence.modals.initialize(window.luxuryPresence._modalIncludes);
                      window.luxuryPresence.contactForms.initialize({ selector: '#modals' });
                      window.luxuryPresence.validation.initialize({ selector: '#modals' });
                      window.luxuryPresence.oauth.initialize({
                        googleSignOnEnabled: true,
                        iframe: false });
                    } catch (e) {
                      console.log(e);
                    }
                    document.querySelectorAll('.modals > .modal .close').forEach(closeModalBtn => {
                      closeModalBtn.addEventListener('click', function() {
                        window.lpUI.hideClosestModal(closeModalBtn);
                      });
                    });
                  }).catch((e) => console.log(e));
                }
            /* Initialize Luxury Presence SDK */
            try {
                window.luxuryPresence.config.setCompany("0c2a6055-398b-4361-85b0-a2097d188244", {});
                window.luxuryPresence.config.setWebsite("34c81d73-b250-4401-8732-7b34b8da50a6", {
                    myhomeDashboardEnabled: true
                });
                const url = new URL(window.location.href);
                const shareId = url.searchParams.get('shareId');
                window.luxuryPresence.config.setPage("b7d79df6-33ec-4cdf-ab81-8a28cc2fdfb6", {
                    sourceResource: "",
                    pageElementId: "",
                    pageQueryVariables: {},
                    shareId: "",
                });
                window.luxuryPresence.config.setWebsiteApiGatewayUrl("https://wgw.luxurypresence.com", {});
                window.luxuryPresence.config.setBuyerSellerServiceUrl("https://bss.luxurypresence.com", {});
                    window.luxuryPresence.config.setDivolteServiceUrl("https://t.luxurypresence.com", {});
                  window.luxuryPresence.config.setEventBusUrl("https://cdn.luxurypresence.com/scripts/event-bus-js", {});
                  window.luxuryPresence.config.setEventBus({
                    enabled: true,
                    apiKey: "phc_PMYT31xlmXBaTCwpIRx1v6RrpLVZIuP47N3mOT6KLnr",
                    url: "https://p.luxurypresence.com",
                  });
                window.luxuryPresence.config.setTemplateId("0c2b9641-6f2a-40f2-a2e0-dabc022eb278", {});
                window.luxuryPresence.config.setLeadIngesterUrl("https://leads.luxurypresence.com", {});
                window.luxuryPresence.buttons.initialize({});
                    window.luxuryPresence.eventBus.initialize({});
                window.luxuryPresence.contactForms.initialize({});
                window.luxuryPresence.validation.initialize({});
                window.luxuryPresence.expandSliders.initialize({});
                window.luxuryPresence.oauth.initialize({ googleSignOnEnabled: true, iframe: false });
                window.luxuryPresence.qualifyingQuestionsModal.initialize({ qualifyingQuestionsModalEnabled: true });
                      window.luxuryPresence.divolte.initialize({});
            } catch (e) {
                console.log(e);
            }

            /* Inject Section Specific Javascript */
                try {
(function init(sectionDomId) {
  const disclaimerLabel = document.querySelector('#' + sectionDomId + ' .lp-tcr-content');
  if (disclaimerLabel) {
    const input = disclaimerLabel.querySelector('input');
    if (input) {
      input.setAttribute('id', `${sectionDomId}-termsAccepted`);
      input.value = 'true';
      const label = document.createElement('label');
      label.setAttribute('for', `${sectionDomId}-termsAccepted`);
      label.classList.add('lp-visually-hidden');
      label.textContent = 'Opt in/Disclaimer Consent:';
      disclaimerLabel.prepend(label);
    }
  }
  function setHttp(link) {
    if (link.search(/^http[s]?\:\/\/|\//) == -1) {
      link = 'https://' + link;
    }
    return link;
  }
  const socialLinks = document.querySelectorAll('#' + sectionDomId + ' .socials__link, #' + sectionDomId + ' .lp-socials__link');
  socialLinks.forEach(linkElement => {
    const href = linkElement.getAttribute('href');
    if (href) {
      linkElement.setAttribute('href', setHttp(href));
    }
  });
  const redirectLink = $('#' + sectionDomId + ' .redirect-link');
  if (redirectLink.length) {
    const rawHref = setHttp(redirectLink.attr('href'));
    let formEvent;
    if (rawHref) {
      formEvent = redirectLink.data('redirect') ? 'formsubmitted' : 'reset';
      $('#' + sectionDomId + ' .contact-form').find('form').on(formEvent, function () {
        redirectLink.attr('href', rawHref);
        redirectLink[0].click();
      });
    }
  }
})('modal-global-contact-us');
} catch(e) {
console.log(e);
}
                
                try {
(function init(sectionDomId) {
  const $section = $('#' + sectionDomId);
  const $hamburger = $section.find('.hamburger-component');
  function onSideMenuShow() {
    if (!$hamburger.hasClass('active')) {
      $hamburger.addClass('active');
    }
  }
  function onSideMenuHide() {
    $hamburger.removeClass('active');
  }
  const $window = $(window);
  $window.on('lpui-sidemenu-show.lpui-auto-clean', onSideMenuShow);
  $window.on('lpui-sidemenu-hide.lpui-auto-clean', onSideMenuHide);
  const $subContainers = $section.find('.navigation__item.sub-nav-container');
  $subContainers.hover(function () {
    $(this).find('.sub-nav').addClass('visible');
  }, function () {
    $(this).find('.sub-nav').removeClass('visible');
  });
  $window.on('click.lpui-auto-clean', function () {
    $('.sub-nav-container.visible-dropdown').removeClass('visible-dropdown');
  });
  let fixedWidth = 0;
  const rightPad = 20;
  function fixSubsPosition() {
    const wWidth = window.innerWidth;
    if (innerWidth === fixedWidth) {
      return;
    }
    fixedWidth = wWidth;
    $subContainers.each(function () {
      const $sub = $(this).find('.sub-nav');
      $sub[0].style.right = '';
      const sRect = $sub[0].getBoundingClientRect();
      const sRight = sRect.left + sRect.width;
      if (sRight > wWidth - rightPad) {
        const parentRect = $sub[0].offsetParent.getBoundingClientRect();
        const parentRight = parentRect.left + parentRect.width;
        $sub[0].style.right = `${parentRight - wWidth + rightPad}px`;
      }
    });
  }
  var debouncer;
  $window.on('resize.lpui-auto-clean', function () {
    clearTimeout(debouncer);
    debouncer = setTimeout(fixSubsPosition, 500);
  });
  fixSubsPosition();
  if ($('.property-intro').length || $('.property-intro-2').length) {
    $('nav').addClass('dark-opening');
    $("#global-navbar").css({
      "background-color": "rgb(26, 26, 26)",
      "color": "rgb(255, 255, 255)"
    });
  }
})('global-navbar');
} catch(e) {
console.log(e);
}
                try {
(function init(sectionDomId, options) {
  var elementSelector = options.elementSelector || 'nav';
  var element = document.querySelector(elementSelector);
  var sections = document.querySelectorAll('body > section');
  var subNavContainers = element.querySelectorAll('.sub-nav');
  var initialBackgroundColor = options.initialBackgroundColor || element.style.backgroundColor;
  var backgroundColorScroll = options.backgroundColorScroll || '#191919';
  var fontColor = options.fontColor || '#fff';
  var fontColorScroll = options.fontColorScroll || '#000';
  var didScroll = false;
  var lastScrollTop = 0;
  var delta = 5;

  // eslint-disable-next-line sonarjs/no-collapsible-if
  if (wow) {
    // Wowjs might not trigger for position fixed elements
    if (window.scrollY > 0) {
      element.querySelectorAll('.wow').forEach(el => wow.show(el));
    }
  }
  function adjustNavPinState() {
    // Remove 'visible' class from all subNavContainers
    for (let i = 0; i < subNavContainers.length; i++) {
      subNavContainers[i].classList.remove('visible');
    }
    if (window.scrollY > 0) {
      element.style.backgroundColor = backgroundColorScroll;
      element.style.color = fontColorScroll;
      element.classList.add('scroll');
    } else {
      element.style.backgroundColor = initialBackgroundColor;
      element.style.color = fontColor;
      element.classList.remove('scroll');
    }
  }
  adjustNavPinState();
  function onScroll() {
    didScroll = true;
  }
  window.addEventListener('scroll', onScroll);

  // eslint-disable-next-line
  var debounceInterval = setInterval(() => {
    if (didScroll) {
      // eslint-disable-next-line
      hasScrolled();
      didScroll = false;
    }
  }, 250);
  function hasScrolled() {
    adjustNavPinState();
    // eslint-disable-next-line
    var navbarHeight = element.offsetHeight;
    // eslint-disable-next-line
    var st = window.scrollY;

    // Make sure they scroll more than delta
    if (Math.abs(lastScrollTop - st) <= delta) {
      return;
    }
    if (st > lastScrollTop && st > navbarHeight) {
      // Scroll Down
      element.style.transform = `translateY(-${navbarHeight}px) scaleY(0)`;
      document.documentElement.style.setProperty('--global-header-height', '0px');

      // Some sections "follow" the navbar with class sticky (i.e. Producer search)
      sections.forEach(section => {
        if (section.classList.contains('sticky')) {
          section.style.top = '0px';
        }
      });
    } else {
      // Scroll Up
      // eslint-disable-next-line
      if (st + window.innerHeight < document.documentElement.scrollHeight) {
        element.style.transform = `translateY(0) scaleY(1)`;
        document.documentElement.style.setProperty('--global-header-height', `${navbarHeight}px`);
        sections.forEach(section => {
          if (section.classList.contains('sticky')) {
            section.style.top = `${navbarHeight}px`;
          }
        });
      }
    }
    lastScrollTop = st;
  }
})('NAVBAR', JSON.parse("{\"fontColor\":\"#fff\",\"elementSelector\":\"nav\",\"fontColorScroll\":\"#fff\",\"initialFontColor\":\"#fff\",\"backgroundColorScroll\":\"#1a1a1a\",\"initialBackgroundColor\":\"rgba(0,0,0,0)\"}"));
} catch(e) {
console.log(e);
}
                try {
(function init(sectionDomId) {
  var sidemenu = $('#' + sectionDomId);
  sidemenu.on('lpui-sidemenu-show.lpui-auto-clean', function () {
    window.lpUI.requestScrollLock(sectionDomId);
  });
  $(window).on('lpui-sidemenu-hide.lpui-auto-clean', function () {
    window.lpUI.releaseScrollLock(sectionDomId);
  });
  $(window).click(function (e) {
    let targetContactForm = $(e.target).closest('#modal-global-contact-us').length;
    let targetSideMenu = $(e.target).closest('.sidemenu').length;
    let targetContactItem = $(e.target).closest('[data-type="CONTACT_US"]').length;
    let targetHamburger = $(e.target).closest('.hamburger-component').length;
    if (!(targetContactForm || targetSideMenu || targetContactItem || targetHamburger)) {
      $('body').removeClass('locked');
      $('.hamburger').removeClass('active');
      $('.sidemenu').removeClass('visible');
      $('#modal-global-contact-us').removeClass('visible');
    }
  });
})('global-sidemenu');
} catch(e) {
console.log(e);
}
                
                try {
(function init(footerId) {
  var textContent = $(".text_content_wrap p").text().trim().length;
  const socialLinks = $(`#${footerId} .lp-socials__link`);
  if (textContent < 1) {
    $(".text_content_wrap").remove();
    $(".second_text_footer").css({
      'margin-bottom': 0
    });
  }
  if (socialLinks.length > 0) {
    socialLinks.attr('data-wow-offset', '10');
  }
  if ($(window).width() > 1280) {
    let footer = document.querySelector("#" + footerId);
    let copyrightElem = footer.querySelector(".copy_zone");
    if (copyrightElem) {
      copyrightElem.style.whiteSpace = "nowrap";
      let nowrapElemWidth = copyrightElem.clientWidth;
      copyrightElem.style.whiteSpace = "";
      let normalElemWidth = copyrightElem.clientWidth;
      if (nowrapElemWidth > normalElemWidth) {
        footer.querySelector(".form-col--socials").classList.add("form-col--xl-auto");
      }
    }
  }
  const form = $("#" + footerId).find("form");
  const redirectLink = $('#' + footerId + ' .redirect-link');
  form.on("reset", function () {
    redirectPage(redirectLink);
  });
  function redirectPage(link) {
    if (link.length) {
      const rawHref = link.attr('href');
      link.attr('href', setHttp(rawHref));
      link[0].click();
    }
  }
  function setHttp(link) {
    if (link.search(/^http[s]?\:\/\/|\//) == -1) {
      link = 'http://' + link;
    }
    return link;
  }
})('global-footer');
} catch(e) {
console.log(e);
}
                
                try {
(function init(sectionDomId) {
  var _section = $('#' + sectionDomId);
  var _footer = document.getElementById('global-footer');
  const emailInput = _section.find('.js-email-input');
  const emailRegex = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~\-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)+/;
  emailInput.on('input', function () {
    if (emailRegex.test(this.value)) {
      this.setCustomValidity('');
    } else {
      this.setCustomValidity('Please enter a valid email address.');
    }
    this.reportValidity();
  });
  _section.find('input[name="name"]').on("keyup", function () {
    if (this.value.replaceAll(/\d/g, "").trim().split(" ").length < 2 || this.value.replaceAll(/\d/g, "").trim() === "") {
      this.setCustomValidity("Please input your first name and last name.");
    } else {
      this.setCustomValidity("");
    }
  });
  _section.find('form').on("reset", function () {
    $(this).addClass("show-success");
  });
  $(window).scroll(function () {
    if ($(this).scrollTop() >= 150) _section.find('.btn-holder').addClass('visible');else _section.find('.btn-holder').removeClass('visible');
  });
  _section.find('.close-btn, .connect-btn').click(function () {
    _section.find('.pop-up').toggle();
    _section.find('.btn-holder').toggle();
  });
  if (!_footer) return;
  const observer = new IntersectionObserver(entries => {
    entries.forEach(entry => {
      if (entry.isIntersecting) _section.hide();else _section.show();
    });
  }, {
    threshold: 0.1
  });
  observer.observe(_footer);
  function selectToDropdown(selectItem) {
    let customDropdown = `
        <div class="custom-select" role="presentation">
        <button class="custom-select-toggle is-placeholder" type="button" aria-haspopup="true" aria-expanded="false"></button>
        <div class="custom-select-menu" style="display: none;max-height: none;">
        <div class="custom-select-content">
        </div>
        </div>
        </div>`;
    $(customDropdown).insertAfter(selectItem);
    let $dropdown = $($(selectItem).next());
    let $dropdownToggle = $dropdown.find(".custom-select-toggle");
    let $dropdownMenu = $dropdown.find(".custom-select-menu");
    let $dropdownContent = $dropdown.find(".custom-select-content");
    $dropdownToggle.addClass($(selectItem).attr("class")).removeClass("dropdown-select");
    $dropdownToggle.attr("id", $(selectItem).attr("id") + "custom");
    $dropdownMenu.attr("aria-labelledby", $dropdownToggle.attr("id"));
    appendOptionButtons(selectItem, $dropdownContent);
    $(selectItem).removeClass().addClass("sr-only");
    var toggleText = $(selectItem).find(":selected").first().text() || $(selectItem).children().first().text();
    $dropdownToggle.html(toggleText);
    $dropdown.on("click", ".custom-select-item", function (e) {
      if ($(this).hasClass("is-disabled")) return;
      let elementNumber = $(this).index();
      let $originalSelect = $(this).closest(".custom-select").siblings("select");
      let $linkedOption = $originalSelect.find("option").eq(elementNumber);
      if (!$linkedOption.prop("selected")) {
        $linkedOption.prop("selected", true);
        $originalSelect.change();
        $(this).addClass("is-selected").siblings(".custom-select-item").removeClass("is-selected");
        $dropdownToggle.html($(this).html());
        closeSelectMenu($(this).closest(".custom-select-menu"));
      }
      $dropdownToggle.removeClass("is-placeholder");
    });
    function convertOptionToButton(option) {
      var optionText = $(option).text();
      var optionValue = $(option).attr("value") || $(option).text();
      var optionIsDisabled = $(option).prop("disabled");
      var outputButton = `<button value="${optionValue}" class="custom-select-item" type="button" ${optionIsDisabled ? "disabled" : ""}>${optionText}</button>`;
      return outputButton;
    }
    function appendOptionButtons(selectItem, appendTarget) {
      $(selectItem).find("option").each(function () {
        let currentButton = convertOptionToButton(this);
        $(appendTarget).append(currentButton);
      });
    }
    function showSelectMenu(selectMenu) {
      var customSelect = $(selectMenu).closest(".custom-select")[0];
      $(customSelect).addClass("open");
      $(selectMenu).slideDown();
    }
    function closeSelectMenu(selectMenu) {
      var customSelect = $(selectMenu).closest(".custom-select")[0];
      $(customSelect).removeClass("open");
      $(selectMenu).slideUp();
    }
    $dropdown.on("click", ".custom-select-toggle", function (e) {
      var $customSelect = $(this).closest(".custom-select");
      var selectMenu = $customSelect.find(".custom-select-menu")[0];
      if ($customSelect.hasClass("open")) {
        closeSelectMenu(selectMenu);
      } else {
        showSelectMenu(selectMenu);
      }
    });
    $(document).on("click", function (e) {
      if ($(e.target).closest(".custom-select").length < 1 && $(".custom-select").hasClass("open")) {
        $(".custom-select.open").each(function () {
          var selectMenu = $(this).find(".custom-select-menu")[0];
          closeSelectMenu(selectMenu);
        });
      }
    });
  }
  $(".pop-up select[name='interest']").each(function () {
    selectToDropdown(this);
  });
})('global-mobile-contact');
} catch(e) {
console.log(e);
}
                

            var { body } = document;
            var globalNav = body.querySelector(':scope > nav');
            var globalSideMenu = body.querySelector(':scope > div.sidemenu');

            document.querySelectorAll('body > .modal .close').forEach(modalCloseBtn => {
                modalCloseBtn.addEventListener('click', function() {
                window.lpUI.hideClosestModal(modalCloseBtn);
              });
            });

            window.addEventListener('click', function() {
                document.querySelectorAll('.share-popup').forEach(sharedPopup => {
                    sharedPopup.style.display = 'none' ;
                });
            });

            /* Misc Partials / Addons */
            function initWOW() {
                if (wow) {
                    wow.init();
                    wow.scrollHandler();
                    setTimeout(function () {
                        const wowHideStyle = document.getElementById('wow-hide-elements');
                        if(wowHideStyle) {
                            wowHideStyle.disabled = true;
                        }
                    }, 1);
                }
            }

            const wowHideElements =  document.getElementById('wow-hide-elements');
            if (wowHideElements) {
               wowHideElements.disabled = false;
            }

                var globalLoader = document.getElementById('global-loader');
                if (globalLoader) {
                    setTimeout(function() {
                        globalLoader.style.height = "0px";
                        window.sessionStorage.setItem('global_loading_displayed', 'yes');

                        // Remove global-loader to prevent caching issues with turbolinks
                        globalLoader.addEventListener('transitionend',
                                function(e) {
                                    globalLoader.remove();
                                    initWOW();
                                });
                    }, 1000);
                } else {
                    initWOW();
                }

            /* Generic Navbar Handling */
            globalNav?.querySelectorAll('.hamburger-component').forEach(hamburgerComponent => {
                hamburgerComponent.addEventListener('click', function() {
                window.lpUI.sideMenuToggle();
              });
            });
            globalSideMenu?.querySelectorAll('.toggle').forEach(toggleEl => {
                toggleEl.addEventListener('click', function() {
                window.lpUI.sideMenuToggle();
              });
            });

            document.querySelectorAll('body > nav .sub-nav-container > a, body > div.sidemenu .sub-nav-container > a').forEach(linkEl => {
                linkEl.addEventListener('click', function(e) {
                  e.preventDefault();
                  e.stopPropagation();
                  var subNav = linkEl.parentElement.querySelector(':scope > .sub-nav');
                  if (subNav && subNav.classList.contains('visible')){
                    subNav.classList.remove('visible');
                  } else {
                    globalNav?.querySelectorAll('.sub-nav-container .sub-nav').forEach(globalSubNav => {
                      globalSubNav.classList.remove('visible');
                    });
                    globalSideMenu?.querySelectorAll('.sub-nav').forEach(sideMenuSubNav => {
                        sideMenuSubNav.classList.remove('visible');
                    });
                    subNav?.classList.add('visible');
                  }
                });
            });
            window.addEventListener('click', function() {
                document.querySelectorAll('nav .sub-nav.visible, .sidemenu .sub-nav.visible').forEach(subNavEl => {
                    subNavEl.classList.remove('visible');
                });
            });

        }

        document.addEventListener('DOMContentLoaded', lpGlobalInit);

    </script>

    <script type="module">
    function selectorExists(selector) {
        return document.querySelector(selector) !== null;
    }

    // Function to initialize the third-party library
    function initParoller(selector = '.my-paroller') {
        var $parollerElements = $(selector);
        if ($parollerElements.length > 0 && typeof $parollerElements.paroller === 'function') {
            $parollerElements.paroller();
        }
    }

    const parollerSelector = '.my-paroller';

    if (selectorExists(parollerSelector)) {
        window.luxuryPresence.libs.loadJs(window.luxuryPresence.libs.jsLibsMap.paroller.jsSrc, function() {
            initParoller(parollerSelector);
            window.luxuryPresence.libs.jsLibsMap.paroller.isLoaded = true;
        });
    }
    </script>

            <!-- Google Tag Manager (noscript) -->
            <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-T9SFQGHZ"
            height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
            <!-- End Google Tag Manager -->
        
                <script
                    src="https://cdn.luxurypresence.com/scripts/a11y-widget/latest/widget.js"
                    data-website-id="34c81d73-b250-4401-8732-7b34b8da50a6"
                    
                    defer></script>
</body>
</html>
