1<!DOCTYPE html> 2<html class="no-js" lang=en> 3<head> 4 <meta charset="utf-8"> 5 <meta http-equiv="x-ua-compatible" content="ie=edge"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 <meta name="twitter:card" content="summary_large_image"> 8 <meta property="og:type" content="website"> 9 <title>Recent Sales | Richard Scully & Associates</title> 10 <meta property="og:title" content="Recent Sales | Richard Scully & Associates"> 11 <meta name="twitter:title" content="Recent Sales | Richard Scully & Associates"> 12 <meta name="description" content="Explore sold properties and remarkable transactions in Ontario. Contact Richard Scully & Associates for exclusive real estate opportunities. Contact us now!"> 13 <meta property="og:description" content="Explore sold properties and remarkable transactions in Ontario. Contact Richard Scully & Associates for exclusive real estate opportunities. Contact us now!"> 14 <meta name="twitter:description" content="Explore sold properties and remarkable transactions in Ontario. Contact Richard Scully & Associates for exclusive real estate opportunities. Contact us now!"> 15 <meta property="og:image" content="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/4ea9b9cc-dcdc-4ba9-a438-68c930eb6431"> 16 <meta name="twitter:image" content="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/4ea9b9cc-dcdc-4ba9-a438-68c930eb6431"> 17 <meta property="og:url" content="https://muskokacottagesforsale.com/recent-sales"> 18 <link rel="canonical" href="https://muskokacottagesforsale.com/recent-sales"> 19
19<script>(function(html){html.className = html.className.replace(/\bno-js\b/,'js')})(document.documentElement);</script>
19 20 <link rel="preconnect" href="https://fonts.googleapis.com"> 21 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 22 <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Tenor%20Sans:400"><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:100,100i,300,300i,400,400i,700,700i,900,900i"> 23 <link rel="preload" href="https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/css/ion.rangeSlider.min.css" as="style" onload="this.onload=null;this.rel='stylesheet'"> 24 <noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/css/ion.rangeSlider.min.css"></noscript> 25 <link rel="icon" type="image/x-icon" href="/favicon.ico"> 26 <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"> 27 <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"> 28 <link rel="icon" type="image/png" sizes="48x48" href="/favicon-48x48.png"> 29 <style id="global-css">:root{--global-primary-font-family:'Tenor Sans',sans-serif;--global-primary-font-family-short:Tenor Sans;--global-secondary-font-family:Lato,sans-serif;--global-secondary-font-family-short:Lato;--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:Lato,sans-serif;font-size:16px;}@media (min-width: 768px){body{padding:0px 0px 0px 0px;}}h1,h2,h3,h4,h5,h6,button{font-family:'Tenor Sans',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> 30 <link rel="stylesheet" type="text/css" href="https://styles.luxurypresence.com/producer/index.css" /> 31 <style id="website-css">ul.slick-links-nav li span.link.slick-disabled{cursor:default;}.J-paginationjs-page a{margin:0 3px;}.lp-btn,.redesign .lp-btn{padding:20px 46px;}#modal-global-contact-us .contact-form .section-message form .submitButton{padding:14px 20px;}.lp-btn,.redesign .lp-btn,.redesign .btn{border-width:1px!important;font-weight:300!important;}nav#global-navbar a{font-weight:300;}button.newsletter-signup__form-item{line-height:1;font-weight:400;}nav#global-navbar .header .navigation .sub-nav ul{background-color:transparent;}nav#global-navbar .header .navigation .sub-nav ul li{background-color:#fff;}nav#global-navbar .header .navigation .sub-nav ul li:hover{background-color:#FFF;}nav#global-navbar .header .navigation .sub-nav ul a{color:#000!important;}nav#global-navbar.scroll{background-color:#000!important;}nav#global-navbar.scroll li.navigation__item a.navigation__link{color:#FFF!important;}nav#global-navbar.scroll li.navigation__item a.navigation__link:hover{color:#FFF!important;}nav#global-navbar.scroll li.navigation__item a.navigation__link span:after{background-color:#FFF!important;}nav#global-navbar.scroll button.hamburger-component.hamburger{color:#FFF;}nav#global-navbar.scroll button.hamburger-component.hamburger:hover{color:#FFF;}nav#global-navbar.scroll .navigation__item:last-child{-webkit-filter:invert(1);filter:invert(1);}nav#global-navbar .header .navigation .sub-nav ul a:hover{color:#FFF!important;background-color:#792617!important;}nav#global-navbar .header .navigation .sub-nav ul a:hover span:hover{color:#FFF!important;}nav#global-navbar .header .navigation .sub-nav ul a:hover span:after{background-color:#FFF!important;}nav .header .navigation .sub-nav__link{max-width:400px!important;}nav .header .navigation .sub-nav ul{max-width:400px!important;}nav#global-navbar.scroll li.navigation__item a.navigation__link:hover{color:#792617;}nav#global-navbar.scroll li.navigation__item a.navigation__link span:after{background-color:#792617;}#global-navbar .header .logo .logo__img{max-height:100%;max-width:300px;}@media only screen and (max-width:768px){#global-navbar .header .logo .logo__img{max-width:250px!important;}}#global-navbar .header{padding-top:15px;padding-bottom:15px;height:auto;}.company__info__newsletter h2{font-size:0px;}.company__info__newsletter h2:before{content:"";display:block;width:auto;height:40px;background-image:url(https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/124e6fd1-c91a-4767-8aec-b87e6e6b1291);-webkit-background-size:contain;background-size:contain;background-repeat:no-repeat;-webkit-background-position:left;background-position:left;margin:0 auto!important;}footer .footer .company__contacts{margin-top:0px!important;}
31footer .footer .newsletter__info{max-width:100%!important;}footer .luxury-link,.copyright-box .hyperlink-style-2,.info-wrap-contact_link,.ft-link{font-weight:400;position:relative!important;color:#fff!important;-webkit-text-decoration:none!important;text-decoration:none!important;-webkit-transition:0.4s;transition:0.4s;opacity:1!important;}footer .luxury-link:hover,.copyright-box .hyperlink-style-2:hover,.info-wrap-contact_link:hover,.ft-link:hover{color:#fff!important;}footer .luxury-link:before,.copyright-box .hyperlink-style-2:before,.info-wrap-contact_link:before,.ft-link:before,footer .luxury-link:after,.copyright-box .hyperlink-style-2:after,.info-wrap-contact_link:after,.ft-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 .luxury-link:before,.copyright-box .hyperlink-style-2:before,.info-wrap-contact_link:before,.ft-link:before{width:100%!important;background-color:#ccc!important;}footer .luxury-link:after,.copyright-box .hyperlink-style-2:after,.info-wrap-contact_link:after,.ft-link:after{width:0%!important;background-color:#fff!important;}footer .luxury-link:hover:after,.copyright-box .hyperlink-style-2:hover:after,.info-wrap-contact_link:hover:after,.ft-link:hover:after{width:100%!important;}div#global-sidemenu.sidemenu a:hover{color:#FFF!important;}body>div.sidemenu .sub-nav-container .main-nav:hover::after{border-bottom:1px solid #FFF!important;border-right:1px solid #FFF!important;}body>div.sidemenu .section-options a{color:#FFF!important;}@media (max-width: 768px){body>div.sidemenu .section-options a{font-size:25px!important;}}div#modal-global-contact-us .contact-form .info-zone .info-zone_contact_cell{margin-bottom:21px;}div#modal-global-contact-us .contact-form .info-zone .type_user:nth-of-type(2){margin-bottom:21px;}@media only screen and (max-width: 768px){div#modal-global-contact-us .contact-form .info-zone .type_user{margin-bottom:25px;}}div#modal-global-contact-us .contact-form .info-zone_contact{margin-bottom:14px;}div#modal-global-contact-us .contact-form .section-message h2{font-size:38px;}@media only screen and (max-width: 768px){div#modal-global-contact-us .contact-form .section-message h2{font-size:28px;}}div#modal-global-contact-us .contact-form h2{font-size:38px;}@media only screen and (max-width: 768px){div#modal-global-contact-us .contact-form h2{font-size:28px;}}#modal-global-contact-us .contact-form .section-message label{color:#fff!important;}#modal-global-contact-us .lp-input-group .lp-input{border-color:#fff!important;}div#modal-global-contact-us a:not(.lp-socials__link):after{background-color:#FFF!important;}.info-zone_contact_cell a:hover{color:#FFF!important;}.info-zone_contact_cell a:before{background-color:#ccc!important;width:100%;}.info-zone_contact_cell a:after{background-color:#FFF!important;}#modal-global-contact-us .contact-form .section-message label{text-transform:capitalize!important;}.section-message .lp-tcr-message{text-transform:none!important;font-weight:400;}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 div.modal-content div.contact-form.redesign:after{background-color:rgba(0, 0, 0, 0.6);}#modal-global-contact-us .lp-disclaimer a{-webkit-text-decoration:none!important;text-decoration:none!important;position:relative;display:inline-block;vertical-align:top;}#modal-global-contact-us .lp-disclaimer a:after,#modal-global-contact-us .lp-disclaimer a:before{content:"";height:1px;position:absolute;bottom:0;left:0;box-sizing:border-box;outline:none;-webkit-transition:0.4s;transition:0.4s;}#modal-global-contact-us .lp-disclaimer a:before{background-color:#ccc;width:100%;}#modal-global-contact-us .lp-disclaimer a:after{width:0%;background-color:#FFF!important;-webkit-transition:0.4s;transition:0.4s;}#modal-global-contact-us .lp-disclaimer a:hover{-webkit-text-decoration:none!important;text-decoration:none!important;}#modal-global-contact-us .lp-disclaimer a:hover:after{width:100%;}div#modal-global-contact-us .contact-form{-webkit-background-position:center;background-position:center;}div#modal-global-contact-us .contact-form h2{color:#FFF;}div.mobile-contact-wrapper .contact-form .lp-btn{background-color:#FFF;border-color:#FFF;color:#792617;}div.mobile-contact-wrapper .contact-form .lp-btn:hover{background-color:transparent;border-color:#FFF;color:#FFF;}footer .img-wrap img{-webkit-filter:invert(1);filter:invert(1);}footer .footer .first_text_footer .img_size img{-webkit-filter:invert(1);filter:invert(1);}.navbar .navigation .navigation__item:last-child{content:""!important;display:block;height:30px;background-image:url('https://media-production.lp-cdn.com/media/58cb8d09-2b18-463c-94d6-a81a57ca19b0');background-repeat:no-repeat;-webkit-background-size:contain;background-size:contain;margin-left:15px;margin-right:15px;-webkit-filter:invert(1);filter:invert(1);}.navbar .navigation .navigation__item:last-child .navigation__link span{font-size:0px!important;display:none!important;}@media (max-width: 768px){footer .footer__layout__right{margin-top:0px!important;padding-left:0;}}
31footer .footer .newsletter{margin-bottom:0px!important;}@media (max-width: 768px){body>div.sidemenu .section-options a{font-size:20px!important;}}@media (max-width: 768px){body>div.sidemenu li{margin-bottom:0!important;}}@media (max-width: 768px){nav .header .navbar{padding-left:10px;}nav .header .logo img{max-width:80%!important;}}@media (max-width: 575px){footer .footer__layout__left{margin-left:auto!important;margin-right:auto!important;}}</style> 32 <style id="wow-hide-elements">.wow{visibility:hidden!important}</style> 33 <style id="page-css"> 34 #section-b35e5a15-2810-4f45-b7c9-afd516c653fd{color:#fff;--fontColor:#fff;--fontColor_H:0;--fontColor_S:0%;--fontColor_L:100%;--fontColor_A:1;--fontColor_darkenDir:-1;--bgColor:#ffffff;--bgColor_H:0;--bgColor_S:0%;--bgColor_L:100%;--bgColor_A:1;--bgColor_darkenDir:-1;background-color:#ffffff;--gradient-color:var(--overlay-color, rgba(0, 0, 0, 0.3));background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/4ea9b9cc-dcdc-4ba9-a438-68c930eb6431');background-repeat:no-repeat;-webkit-background-position:center;background-position:center;-webkit-background-size:cover;background-size:cover;}#section-b35e5a15-2810-4f45-b7c9-afd516c653fd div.custom-intro{height:80vh;}#section-b35e5a15-2810-4f45-b7c9-afd516c653fd{background-position-y:50%!important;}#section-b35e5a15-2810-4f45-b7c9-afd516c653fd .custom-intro{-webkit-align-items:flex-end!important;-webkit-box-align:flex-end!important;-ms-flex-align:flex-end!important;align-items:flex-end!important;}#section-b35e5a15-2810-4f45-b7c9-afd516c653fd .custom-intro__title{margin-bottom:15vh!important;}#section-b35e5a15-2810-4f45-b7c9-afd516c653fd{background-attachment:fixed;-webkit-background-position:center;background-position:center;background-repeat:no-repeat;-webkit-background-size:cover;background-size:cover;}@media only screen and (max-width: 768px){#section-b35e5a15-2810-4f45-b7c9-afd516c653fd{background-attachment:unset;}}#section-b35e5a15-2810-4f45-b7c9-afd516c653fd .custom-intro{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;height:600px;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}#section-b35e5a15-2810-4f45-b7c9-afd516c653fd .custom-intro .container{z-index:1;text-align:center;max-width:900px;}#section-b35e5a15-2810-4f45-b7c9-afd516c653fd .custom-intro__title{margin-bottom:0px;font-weight:400;margin-bottom:24px;}@media (max-width: 768px){#section-b35e5a15-2810-4f45-b7c9-afd516c653fd .custom-intro__title{font-size:32px;}}@media (max-width: 360px){#section-b35e5a15-2810-4f45-b7c9-afd516c653fd .custom-intro__title{font-size:22px;}}#section-b35e5a15-2810-4f45-b7c9-afd516c653fd .custom-intro__subtitle{font-weight:400;white-space:pre-line;font-size:21px;line-height:1.57;}@media (max-width: 768px){#section-b35e5a15-2810-4f45-b7c9-afd516c653fd .custom-intro__subtitle{font-size:18px;}}#section-b35e5a15-2810-4f45-b7c9-afd516c653fd .description{margin-bottom:15px;}@media (min-width: 960px) and (orientation: landscape){#section-b35e5a15-2810-4f45-b7c9-afd516c653fd{background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/4ea9b9cc-dcdc-4ba9-a438-68c930eb6431');}}@media (min-width: 1280px) and (orientation: landscape){#section-b35e5a15-2810-4f45-b7c9-afd516c653fd{background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/4ea9b9cc-dcdc-4ba9-a438-68c930eb6431');}}@media (min-width: 1920px) and (orientation: landscape){#section-b35e5a15-2810-4f45-b7c9-afd516c653fd{background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/4ea9b9cc-dcdc-4ba9-a438-68c930eb6431');}}@media (min-width: 2560px) and (orientation: landscape){#section-b35e5a15-2810-4f45-b7c9-afd516c653fd{background-image:linear-gradient(var(--gradient-color), var(--gradient-color)),url('https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/4ea9b9cc-dcdc-4ba9-a438-68c930eb6431');}}#section-f49c80d5-1090-4356-bdb7-81766af37cfc{color:#000;--fontColor:#000;--fontColor_H:0;--fontColor_S:0%;--fontColor_L:0%;--fontColor_A:1;--fontColor_darkenDir:1;--bgColor:#2B2B2D;--bgColor_H:240;--bgColor_S:2%;--bgColor_L:17%;--bgColor_A:1;--bgColor_darkenDir:1;--section-padding-top:calc(4 / 4 * var(--global-section-padding));--section-padding-bottom:calc(4 / 4 * var(--global-section-padding));background-color:#2B2B2D;}#section-f49c80d5-1090-4356-bdb7-81766af37cfc div.redesign.property-list-section span.property-list__label{background:#792617!important;color:#FFF!important;text-transform:uppercase;}#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list__text{color:#000;background-color:#F9F9F8!important;}#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list__item{background-color:transparent!important;}#section-f49c80d5-1090-4356-bdb7-81766af37cfc div.container>ul.property-list .property-list__text{padding:40px;}@media only screen and (max-width: 768px){#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list button.btn{border:1px solid #fff!important;color:#792617!important;background-color:#FFF!important;}#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list button.btn:hover{border:1px solid #fff!important;color:#FFF!important;background-color:transparent!important;}}#section-f49c80d5-1090-4356-bdb7-81766af37cfc div.property-list-section{padding-top:77px;padding-bottom:88px;}@media only screen and (max-width: 768px){#section-f49c80d5-1090-4356-bdb7-81766af37cfc div.property-list-section{padding-top:50px;padding-bottom:64px;}}#section-f49c80d5-1090-4356-bdb7-81766af37cfc div.redesign ul.property-list{margin-top:0px;}#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list__text p:nth-of-type(2){dis
34play:none;}@media (max-width: 768px){#section-f49c80d5-1090-4356-bdb7-81766af37cfc .btn{width:100%;}}#section-f49c80d5-1090-4356-bdb7-81766af37cfc .redesign .feature h4{text-transform:initial;}#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section{padding-bottom:140px;}@media (max-width: 991px){#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section{padding-bottom:100px;}}@media (max-width: 768px){#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section{padding-bottom:40px;}}#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section h2{text-align:center;margin-bottom:0;}#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section .title-container{padding-top:100px;}@media (max-width: 768px){#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section .title-container{padding-top:60px;}}#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section .title-container +.search-container{margin-top:40px;}#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section .description-container{padding-top:32px;max-width:70%;margin:0 auto;text-align:center;}@media (max-width: 768px){#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section .description-container{max-width:100%;}}#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section .search-container{color:black;padding:25px 30px;background-color:white;display:-ms-grid;display:grid;-ms-grid-columns:1fr 1fr 1fr auto;grid-template-columns:1fr 1fr 1fr auto;-ms-grid-rows:1fr;grid-template-rows:1fr;gap:0px 15px;grid-template-areas:". . . . .";}#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section .search-container.show-neighborhood-select{-ms-grid-columns:1fr 1fr 1fr 1fr auto;grid-template-columns:1fr 1fr 1fr 1fr auto;}@media(max-width: 950px){#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section .search-container.show-neighborhood-select{-ms-grid-columns:1fr;grid-template-columns:1fr;-ms-grid-rows:auto auto auto auto;grid-template-rows:auto auto auto auto;grid-template-areas:"." "." "." ".";gap:25px;}}@media(max-width: 950px){#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section .search-container{-ms-grid-columns:1fr;grid-template-columns:1fr;-ms-grid-rows:auto auto auto auto;grid-template-rows:auto auto auto auto;grid-template-areas:"." "." "." ".";gap:25px;}}#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section .search-container input[name="area-slider"],#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section .search-container input[name="price-slider"]{position:absolute!important;display:block!important;top:0!important;left:0!important;width:0!important;height:0!important;font-size:0!important;line-height:0!important;padding:0!important;margin:0!important;overflow:hidden;outline:none!important;z-index:-9999!important;background:none!important;border-style:solid!important;border-color:transparent!important;}#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section .search-container select{line-height:1.2!important;width:100%;border:none;border-bottom:1px solid;padding:5px 0;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;border-radius:0px;background-color:transparent;outline:none;background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9Ii01NDAgLTMyMCA4MDAgODAwIj48cGF0aCBkPSJNMjI1LjgxMyA0OC45MDdMMTI4IDE0Ni43MiAzMC4xODcgNDguOTA3IDAgNzkuMDkzbDEyOCAxMjggMTI4LTEyOHoiLz48L3N2Zz4K) no-repeat 100% 50%;}#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section .search-container .text-search-input{border:none;border-bottom:1px solid;padding:5px 0;width:100%;border-radius:0;}#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section .search-container .irs--round{height:38px;}@media(max-width: 950px){#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section .search-container .irs--round{height:50px;}}#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section .search-container .irs--round .irs-handle{width:10px;height:10px;border-width:1px;border-color:black;top:32px;box-shadow:none;}#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section .search-container .irs--round .irs-bar{background-color:black;height:1px;}#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section .search-container .irs--round .irs-line{height:1px;}#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section .search-container .irs--round .irs-min,#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section .search-container .irs--round .irs-max{display:none;}#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section .search-container .irs--round .irs-from:before,#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section .search-container .irs--round .irs-to:before,#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section .search-container .irs--round .irs-single:before{display:none;}#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section .search-container .irs--round .irs-from,#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section .search-container .irs--round .irs-to,#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section .search-container .irs--round .irs-single{font-size:13px;}#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section .search-container .irs--round .irs-from{left:0!important;visibility:visible!important;}#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section .search-container .irs--round .irs-to{right:0!important;left:auto!important;visibility:visible!important;}#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section .search-container .irs--round .irs-single{display:none;}#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section .search-container .irs--round .irs-from,#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section .search-container .irs--round .irs-to,#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section .search-container .irs--round .irs-single{background-color:transparent;color:gray;}#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section .search-container .irs-from,#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section .search-container .irs-to,#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section .search-container .irs-single{top:10px;}#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section .search-container .search-item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:justify;
34-webkit-justify-content:space-between;justify-content:space-between;}#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section .search-container .search-item .search-title{font-weight:700;}#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section .search-container .btn-item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:flex-end;-webkit-box-align:flex-end;-ms-flex-align:flex-end;align-items:flex-end;}@media(max-width: 950px){#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list-section .search-container .btn-item{display:none;}}#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list{display:-ms-grid;display:grid;-ms-grid-columns:1fr 1fr;grid-template-columns:1fr 1fr;-ms-grid-rows:1fr;grid-template-rows:1fr;gap:55px 80px;grid-template-areas:". .";padding:0;color:#000;list-style:none;}@media (max-width: 991px){#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list{gap:55px 25px;}}@media (max-width: 768px){#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list{-ms-grid-columns:1fr;grid-template-columns:1fr;grid-template-areas:".";gap:35px 25px;justify-items:center;}}#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list.three-items{-ms-grid-columns:1fr 1fr 1fr;grid-template-columns:1fr 1fr 1fr;grid-template-areas:". . .";gap:55px 40px;}@media (max-width: 1200px){#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list.three-items{-ms-grid-columns:1fr 1fr;grid-template-columns:1fr 1fr;grid-template-areas:". .";gap:55px 80px;}}@media (max-width: 991px){#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list.three-items{gap:55px 25px;}}@media (max-width: 768px){#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list.three-items{-ms-grid-columns:1fr;grid-template-columns:1fr;grid-template-areas:".";gap:35px 25px;justify-items:center;}}#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list.property-list--share .property-list__share{display:inline-block;}#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list .property-list__item{background-color:#fff;text-align:center;font-weight:bold;position:relative;min-height:500px;}@media (max-width: 768px){#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list .property-list__item{min-height:1px;height:calc(100% - 1px);max-width:325px;width:99%;}}#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list .property-list__item:hover .property-list__hover{opacity:1;}#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list .property-list__item h4{margin:0 0 7px;}#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list .property-list__item p{white-space:normal;margin:0 0 7px;}@media (max-width: 768px){#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list .property-list__item p{margin-bottom:3px;}}#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list .property-list__item h5{text-transform:none;margin:0;font-family:var(--global-secondary-font-family);}#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list .property-list__item-link{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%;}@media (max-width: 768px){#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list .property-list__item-link{height:auto;}}#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list .property-list__img{width:100%;height:315px;vertical-align:top;background-color:gray;position:relative;}@media (max-width: 768px){#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list .property-list__img{height:200px;}}#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list .property-list__img img{width:100%;height:100%;object-fit:cover;}#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list .property-list__text{background-color:#fff;padding:25px 15px 15px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;}@media (max-width: 768px){#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list .property-list__text{margin-bottom:15px;}}#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list .property-list__label{position:absolute;top:0;right:0;background:#000;color:#fff;
34padding:4px 35px;z-index:2;}#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list .hover-link{position:absolute;top:0;left:0;width:100%;height:100%;}@media (max-width: 768px){#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list .hover-link{display:none;}}#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list .property-list__hover{position:absolute;top:0;left:0;width:100%;height:100%;background-color:rgba(255, 255, 255, 0.75);opacity:0;-webkit-transition:opacity .2s linear;transition:opacity .2s linear;z-index:3;cursor:pointer;}@media (max-width: 768px){#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list .property-list__hover{opacity:1;background-color:var(--bgColor);position:static;padding:15px 0 0;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;height:auto;margin:0 -2px;width:calc(100% + 4px);}}#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list .property-list__hover h4{text-transform:none;}@media(max-width: 768px){#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list .property-list__hover h4{display:none;}}@media (min-width: 769px){#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list .property-list__buttons{position:absolute;top:50%;left:50%;width:100%;-webkit-transform:translate(-50%, -50%);-moz-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);}}#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list .property-list__view .btn{margin-bottom:20px;}@media (max-width: 768px){#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list .property-list__view .btn{margin-bottom:0;}}#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list .btn{vertical-align:top;margin:0 10px;display:none;}@media(max-width: 768px){#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list .btn{margin:0;}}@media(min-width: 769px){#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list .btn.btn--primary-dark{display:inline-block;}}@media(max-width: 768px){#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list .btn.btn--primary-light{display:inline-block;}}#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list .property-list__share{position:relative;display:none;}@media(max-width: 768px){#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list .property-list__share{margin-bottom:25px;margin-top:15px;width:100%;}}#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list .property-list__share.property-list__share--opened .socials{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list .property-list__share .socials{-webkit-box-flex-wrap:nowrap;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;position:absolute;top:100%;left:50%;-webkit-transform:translateX(-50%);-moz-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);display:none;}#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list .property-list__share .socials .socials__link{width:70px;}#section-f49c80d5-1090-4356-bdb7-81766af37cfc .is-background-color-light ul.property-list .btn.btn--primary-dark{display:inline-block;}#section-f49c80d5-1090-4356-bdb7-81766af37cfc .is-background-color-light ul.property-list .btn.btn--primary-light{display:none;}#section-f49c80d5-1090-4356-bdb7-81766af37cfc .redesign ul.property-list{margin-bottom:60px;margin-top:60px;margin-left:0;}@media (max-width: 768px){#section-f49c80d5-1090-4356-bdb7-81766af37cfc .redesign ul.property-list{margin-bottom:30px;}}#section-f49c80d5-1090-4356-bdb7-81766af37cfc .empty-result{text-align:center;}#section-f49c80d5-1090-4356-bdb7-81766af37cfc .label-house{bottom:0;position:absolute;width:100%;padding:8px 0;background:rgba(255, 255, 255, 0.7);}@media (max-width: 768px){#section-f49c80d5-1090-4356-bdb7-81766af37cfc .label-house{font-size:12px;}}#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list .property-list__item .property-list__mls-attribution{text-shadow:none;width:calc(100% - 200px);margin:0;}@media (max-width: 1024px){#section-f49c80d5-1090-4356-bdb7-81766af37cfc ul.property-list .property-list__item .property-list__mls-attribution{width:100%;}}#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list__item .property-list__mls-attribution+.property-list__mls-logo{position:absolute!important;right:15px!important;bottom:15px!important;}@media (max-width: 1024px){#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list__item .property-list__mls-attribution+.property-list__mls-logo{position:relative!important;right:unset!important;bottom:unset!important;}}@media (max-width: 768px){#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list__item .property-list__mls-logo{display:inline-block!important;}}#section-f49c80d5-1090-4356-bdb7-81766af37cfc .property-list__item:has(.mls-compliance-container) .property-list__text{padding-bottom:0;}#section-f49c80d5-1090-4356-bdb7-81766af37cfc .mls-compliance-container{margin-top:auto;padding:0 15px 15px;}#section-f49c80d5-1090-4356-bdb7-81766af37cfc>div:last-child{padding-top:calc(4 / 4 * var(--global-section-padding))!important;padding-bottom:calc(4 / 4 * var(--global-section-padding))!important;}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e{display:none;color:#000;--fontColor:#000;--fontColor_H:0;--fontColor_S:0%;--fontColor_L:0%;--fontColor_A:1;--fontColor_darkenDir:1;--bgColor:#2B2B2D;--bgColor_H:240;--bgColor_S:2%;--bgColor_L:17%;--bgColor_A:1;--bgColor_darkenDir:1;--section-padding-top:calc(4 / 4 * var(--global-section-padding));--section-padding-bottom:calc(4 / 4 * var(--global-section-padding));background-color:#2B2B2D;}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e div.redesign.property-list-section span.property-list__label{background:#792617!important;color:#FFF!important;text-transform:uppercase;}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list__text{color:#000;background-color:#F9F9F8!important;}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list__item{background-color:transparent!important;}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e div.container>ul.property-list .property-list__text{padding:40px;}@media only screen and (max-width: 768px){#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list button.btn{border:1px solid #fff!important;color:#792617!important;background-color:#FFF!important;}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list button.btn:hover{border:1px solid #fff!important;color:#FFF!important;background-color:transparent!important;}}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e div.property-list-section{padding-top:77px;padding-bottom:88px;}@media only screen and (max-width: 768px){#section-f0bc03e3-e280-4c80-b233-d55eb7df478e div.property-list-section{padding-top:50px;padding-bottom:64px;}}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e div.redesign ul.property-list{margin-top:0px;}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list__text p:nth-of-type(2){dis
34play:none;}@media (max-width: 768px){#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .btn{width:100%;}}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .redesign .feature h4{text-transform:initial;}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section{padding-bottom:140px;}@media (max-width: 991px){#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section{padding-bottom:100px;}}@media (max-width: 768px){#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section{padding-bottom:40px;}}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section h2{text-align:center;margin-bottom:0;}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section .title-container{padding-top:100px;}@media (max-width: 768px){#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section .title-container{padding-top:60px;}}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section .title-container +.search-container{margin-top:40px;}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section .description-container{padding-top:32px;max-width:70%;margin:0 auto;text-align:center;}@media (max-width: 768px){#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section .description-container{max-width:100%;}}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section .search-container{color:black;padding:25px 30px;background-color:white;display:-ms-grid;display:grid;-ms-grid-columns:1fr 1fr 1fr auto;grid-template-columns:1fr 1fr 1fr auto;-ms-grid-rows:1fr;grid-template-rows:1fr;gap:0px 15px;grid-template-areas:". . . . .";}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section .search-container.show-neighborhood-select{-ms-grid-columns:1fr 1fr 1fr 1fr auto;grid-template-columns:1fr 1fr 1fr 1fr auto;}@media(max-width: 950px){#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section .search-container.show-neighborhood-select{-ms-grid-columns:1fr;grid-template-columns:1fr;-ms-grid-rows:auto auto auto auto;grid-template-rows:auto auto auto auto;grid-template-areas:"." "." "." ".";gap:25px;}}@media(max-width: 950px){#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section .search-container{-ms-grid-columns:1fr;grid-template-columns:1fr;-ms-grid-rows:auto auto auto auto;grid-template-rows:auto auto auto auto;grid-template-areas:"." "." "." ".";gap:25px;}}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section .search-container input[name="area-slider"],#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section .search-container input[name="price-slider"]{position:absolute!important;display:block!important;top:0!important;left:0!important;width:0!important;height:0!important;font-size:0!important;line-height:0!important;padding:0!important;margin:0!important;overflow:hidden;outline:none!important;z-index:-9999!important;background:none!important;border-style:solid!important;border-color:transparent!important;}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section .search-container select{line-height:1.2!important;width:100%;border:none;border-bottom:1px solid;padding:5px 0;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;border-radius:0px;background-color:transparent;outline:none;background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9Ii01NDAgLTMyMCA4MDAgODAwIj48cGF0aCBkPSJNMjI1LjgxMyA0OC45MDdMMTI4IDE0Ni43MiAzMC4xODcgNDguOTA3IDAgNzkuMDkzbDEyOCAxMjggMTI4LTEyOHoiLz48L3N2Zz4K) no-repeat 100% 50%;}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section .search-container .text-search-input{border:none;border-bottom:1px solid;padding:5px 0;width:100%;border-radius:0;}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section .search-container .irs--round{height:38px;}@media(max-width: 950px){#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section .search-container .irs--round{height:50px;}}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section .search-container .irs--round .irs-handle{width:10px;height:10px;border-width:1px;border-color:black;top:32px;box-shadow:none;}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section .search-container .irs--round .irs-bar{background-color:black;height:1px;}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section .search-container .irs--round .irs-line{height:1px;}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section .search-container .irs--round .irs-min,#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section .search-container .irs--round .irs-max{display:none;}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section .search-container .irs--round .irs-from:before,#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section .search-container .irs--round .irs-to:before,#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section .search-container .irs--round .irs-single:before{display:none;}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section .search-container .irs--round .irs-from,#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section .search-container .irs--round .irs-to,#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section .search-container .irs--round .irs-single{font-size:13px;}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section .search-container .irs--round .irs-from{left:0!important;visibility:visible!important;}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section .search-container .irs--round .irs-to{right:0!important;left:auto!important;visibility:visible!important;}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section .search-container .irs--round .irs-single{display:none;}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section .search-container .irs--round .irs-from,#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section .search-container .irs--round .irs-to,#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section .search-container .irs--round .irs-single{background-color:transparent;color:gray;}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section .search-container .irs-from,#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section .search-container .irs-to,#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section .search-container .irs-single{top:10px;}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section .search-container .search-item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:justify;
34-webkit-justify-content:space-between;justify-content:space-between;}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section .search-container .search-item .search-title{font-weight:700;}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section .search-container .btn-item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:flex-end;-webkit-box-align:flex-end;-ms-flex-align:flex-end;align-items:flex-end;}@media(max-width: 950px){#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list-section .search-container .btn-item{display:none;}}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list{display:-ms-grid;display:grid;-ms-grid-columns:1fr 1fr;grid-template-columns:1fr 1fr;-ms-grid-rows:1fr;grid-template-rows:1fr;gap:55px 80px;grid-template-areas:". .";padding:0;color:#000;list-style:none;}@media (max-width: 991px){#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list{gap:55px 25px;}}@media (max-width: 768px){#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list{-ms-grid-columns:1fr;grid-template-columns:1fr;grid-template-areas:".";gap:35px 25px;justify-items:center;}}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list.three-items{-ms-grid-columns:1fr 1fr 1fr;grid-template-columns:1fr 1fr 1fr;grid-template-areas:". . .";gap:55px 40px;}@media (max-width: 1200px){#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list.three-items{-ms-grid-columns:1fr 1fr;grid-template-columns:1fr 1fr;grid-template-areas:". .";gap:55px 80px;}}@media (max-width: 991px){#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list.three-items{gap:55px 25px;}}@media (max-width: 768px){#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list.three-items{-ms-grid-columns:1fr;grid-template-columns:1fr;grid-template-areas:".";gap:35px 25px;justify-items:center;}}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list.property-list--share .property-list__share{display:inline-block;}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list .property-list__item{background-color:#fff;text-align:center;font-weight:bold;position:relative;min-height:500px;}@media (max-width: 768px){#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list .property-list__item{min-height:1px;height:calc(100% - 1px);max-width:325px;width:99%;}}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list .property-list__item:hover .property-list__hover{opacity:1;}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list .property-list__item h4{margin:0 0 7px;}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list .property-list__item p{white-space:normal;margin:0 0 7px;}@media (max-width: 768px){#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list .property-list__item p{margin-bottom:3px;}}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list .property-list__item h5{text-transform:none;margin:0;font-family:var(--global-secondary-font-family);}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list .property-list__item-link{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%;}@media (max-width: 768px){#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list .property-list__item-link{height:auto;}}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list .property-list__img{width:100%;height:315px;vertical-align:top;background-color:gray;position:relative;}@media (max-width: 768px){#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list .property-list__img{height:200px;}}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list .property-list__img img{width:100%;height:100%;object-fit:cover;}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list .property-list__text{background-color:#fff;padding:25px 15px 15px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;}@media (max-width: 768px){#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list .property-list__text{margin-bottom:15px;}}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list .property-list__label{position:absolute;top:0;right:0;background:#000;color:#fff;
34padding:4px 35px;z-index:2;}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list .hover-link{position:absolute;top:0;left:0;width:100%;height:100%;}@media (max-width: 768px){#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list .hover-link{display:none;}}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list .property-list__hover{position:absolute;top:0;left:0;width:100%;height:100%;background-color:rgba(255, 255, 255, 0.75);opacity:0;-webkit-transition:opacity .2s linear;transition:opacity .2s linear;z-index:3;cursor:pointer;}@media (max-width: 768px){#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list .property-list__hover{opacity:1;background-color:var(--bgColor);position:static;padding:15px 0 0;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;height:auto;margin:0 -2px;width:calc(100% + 4px);}}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list .property-list__hover h4{text-transform:none;}@media(max-width: 768px){#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list .property-list__hover h4{display:none;}}@media (min-width: 769px){#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list .property-list__buttons{position:absolute;top:50%;left:50%;width:100%;-webkit-transform:translate(-50%, -50%);-moz-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);}}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list .property-list__view .btn{margin-bottom:20px;}@media (max-width: 768px){#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list .property-list__view .btn{margin-bottom:0;}}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list .btn{vertical-align:top;margin:0 10px;display:none;}@media(max-width: 768px){#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list .btn{margin:0;}}@media(min-width: 769px){#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list .btn.btn--primary-dark{display:inline-block;}}@media(max-width: 768px){#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list .btn.btn--primary-light{display:inline-block;}}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list .property-list__share{position:relative;display:none;}@media(max-width: 768px){#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list .property-list__share{margin-bottom:25px;margin-top:15px;width:100%;}}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list .property-list__share.property-list__share--opened .socials{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list .property-list__share .socials{-webkit-box-flex-wrap:nowrap;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;position:absolute;top:100%;left:50%;-webkit-transform:translateX(-50%);-moz-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);display:none;}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list .property-list__share .socials .socials__link{width:70px;}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .is-background-color-light ul.property-list .btn.btn--primary-dark{display:inline-block;}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .is-background-color-light ul.property-list .btn.btn--primary-light{display:none;}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .redesign ul.property-list{margin-bottom:60px;margin-top:60px;margin-left:0;}@media (max-width: 768px){#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .redesign ul.property-list{margin-bottom:30px;}}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .empty-result{text-align:center;}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .label-house{bottom:0;position:absolute;width:100%;padding:8px 0;background:rgba(255, 255, 255, 0.7);}@media (max-width: 768px){#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .label-house{font-size:12px;}}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list .property-list__item .property-list__mls-attribution{text-shadow:none;width:calc(100% - 200px);margin:0;}@media (max-width: 1024px){#section-f0bc03e3-e280-4c80-b233-d55eb7df478e ul.property-list .property-list__item .property-list__mls-attribution{width:100%;}}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list__item .property-list__mls-attribution+.property-list__mls-logo{position:absolute!important;right:15px!important;bottom:15px!important;}@media (max-width: 1024px){#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list__item .property-list__mls-attribution+.property-list__mls-logo{position:relative!important;right:unset!important;bottom:unset!important;}}@media (max-width: 768px){#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list__item .property-list__mls-logo{display:inline-block!important;}}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .property-list__item:has(.mls-compliance-container) .property-list__text{padding-bottom:0;}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e .mls-compliance-container{margin-top:auto;padding:0 15px 15px;}#section-f0bc03e3-e280-4c80-b233-d55eb7df478e>div:last-child{padding-top:calc(4 / 4 * var(--global-section-padding))!important;padding-bottom:calc(4 / 4 * var(--global-section-padding))!important;}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655{color:#FFF;--fontColor:#FFF;--fontColor_H:0;--fontColor_S:0%;--fontColor_L:100%;--fontColor_A:1;--fontColor_darkenDir:-1;--bgColor:#000000;--bgColor_H:0;--bgColor_S:0%;--bgColor_L:0%;--bgColor_A:1;--bgColor_darkenDir:1;--section-padding-top:calc(4 / 4 * var(--global-section-padding));--section-padding-bottom:calc(4 / 4 * var(--global-section-padding));background-color:#000000;}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .ig-feed{padding:80px 0;}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .title{margin:0 20px 0 0;}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .instagram-link{display:block;margin:0 20px 0 0;color:var(--global-primary-font-color);}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .instagram-link .instagram-name{display:inline;margin:0;}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .title+.instagram-link{margin-top:5px;}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .top-wrapper{margin-bottom:20px;
34display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-align-items:flex-end;-webkit-box-align:flex-end;-ms-flex-align:flex-end;align-items:flex-end;}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .top-right{margin-left:auto;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:stretch;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .follow-button{margin:20px 0 0 0;display:block;}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .nav-button{margin-top:20px;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;width:42px;color:#1a1a1a;border:1px solid currentColor;cursor:pointer;transition-property:color,background-color,border-color;transition-duration:.3s;transition-timing-function:ease;}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .nav-button.slick-disabled{opacity:0.6;pointer-events:none;cursor:default;}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .nav-button:not(.slick-disabled):hover{background-color:#1a1a1a;border-color:#1a1a1a;color:#fff;}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .top-nav-prev{margin-left:30px;}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .top-nav-next{margin-left:10px;}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .hidden-control{display:none;}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .slide-single,#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .slide-multi{position:relative;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:calc(100% / 3);padding:10px;}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .slide-single:first-child,#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .slide-multi:first-child{margin-left:auto;}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .slide-single:last-child,#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .slide-multi:last-child{margin-right:auto;}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .slide-single.type2,#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .slide-multi.type2{width:calc(100% / 5 * 2);}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .slide-single.type3,#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .slide-multi.type3{width:calc(100% / 2);}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .slide-single.type4,#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .slide-multi.type4{width:calc(100% / 2);}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .slide-single.type5,#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .slide-multi.type5{width:100%;}@media (max-width: 440px){#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .ig-feed-container{padding:0;width:100%;}}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .ig-feed-feed{width:calc(100% + 20px);position:relative;left:-10px;overflow:hidden;}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .ig-feed-slider{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .ig-feed-item__img{position:absolute;left:-1px;top:-1px;bottom:-1px;right:-1px;background:center/cover no-repeat;}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .ig-feed-item__info{position:absolute;top:0;left:0;bottom:0;right:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;padding:10%;overflow:hidden;color:#fff;text-align:center;background-color:rgba(0, 0, 0, 0.8);opacity:0;-webkit-transition:opacity .3s ease;transition:opacity .3s ease;}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .ig-feed-item:hover .ig-feed-item__info{opacity:1;}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .ig-feed-item__caption{text-overflow:ellipsis;-webkit-line-clamp:4;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .video-icon{position:absolute;width:50px;height:50px;background-color:#fff;left:50%;
34top:50%;-webkit-transform:translate(-50%, -50%);-moz-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);border-radius:50%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-transition:opacity .2s ease;transition:opacity .2s ease;opacity:1;}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .video-icon::before{content:'';display:block;width:0px;height:0px;border-style:solid;position:relative;left:1px;border-width:7.5px 0px 7.5px 11px;border-color:transparent transparent transparent #292826;}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .ig-feed-item:hover .video-icon{opacity:0;}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .slide-single .ig-feed-item__info{padding:15%;}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .slide-single .ig-feed-item__caption{-webkit-line-clamp:7;}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .ig-feed-item{background-color:var(--tileColor, #000);display:block;width:100%;padding-bottom:125%;overflow:hidden;position:relative;}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .slide-multi::before{content:'';display:block;width:100%;padding-bottom:125%;}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .slide-multi-content{padding:10px;position:absolute;width:100%;height:100%;left:0;top:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;-webkit-align-items:flex-start;-webkit-box-align:flex-start;-ms-flex-align:flex-start;align-items:flex-start;overflow:hidden;}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .slide-multi-content .ig-feed-item{width:calc(50% - 10px);padding-bottom:calc(62.5% - 12.5px);}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .slide-multi-content .ig-feed-item:nth-child(n + 3){-webkit-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end;}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .bottom-controls{width:100%;display:none;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .bottom-nav-button{-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;margin:20px 10px 0;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;width:48px;height:48px;color:#1a1a1a;border:1px solid currentColor;cursor:pointer;}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .bottom-nav-button.slick-disabled{opacity:0.6;pointer-events:none;cursor:default;}@media (max-width: 767px){#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .top-right,#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .top-left{width:100%;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .title,#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .instagram-link{margin-right:0;text-align:center;}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .top-nav-prev,#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .top-nav-next{display:none;}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .bottom-controls{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .ig-feed{display:none;}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655 .has-data .ig-feed{display:block;}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655.has-data .ig-feed,#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655#section-temp .ig-feed{display:block;}#section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655>div:last-child{padding-top:calc(4 / 4 * var(--global-section-padding))!important;padding-bottom:calc(4 / 4 * var(--global-section-padding))!important;}#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;}
34#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
34-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;
34-webkit-justify-content:space-between;justify-content:space-between;min-height:70px;padding:8px 0 7px;width:100%;}nav .header .logo{z-index:911;position:relative;margin-right:10px;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;max-width:300px;}nav .header .logo a{overflow:hidden;display:inline-block;}nav .header .logo img{max-width:100%;max-height:52px;vertical-align:top;object-fit:contain;}@media (max-width: 1024px){nav .header .logo img{max-height:50px;}}nav .header .logo img.dark{display:none;}@media(max-width: 1024px){nav .header .logo img.dark{display:none!important;}}nav .header .logo img.light{display:block;}@media(max-width: 1024px){nav .header .logo img.light{display:inline-block!important;}}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;
34left: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;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;}body>div.sidemenu{background-color:rgba(43, 43, 45, 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(43, 43, 45, 1);--bgColor_H:240;--bgColor_S:2%;--bgColor_L:17%;--bgColor_A:1;--bgColor_darkenDir:1;}body>div.sidemenu{background-color:transparent;}body>div.sidemenu .wrapper{--linkColor:hsla( 35 var(--fontColor_H, 0), 36 var(--fontColor_S, 0%), 37 calc(50% + var(--fontColor_darkenDir, -1) * 13%), 38 var(--fontColor_A, 1) 39 );opacity:1;-webkit-transition:-webkit-transform 0s linear,opacity 0.2s ease-out;transition:transform 0s linear,opacity 0.2s ease-out;background-color:var(--bgColor, rgba(0, 0, 0, 0.9));color:var(--fontColor, #fff);position:fixed;top:0;right:0;height:100%;width:100vw;}body>div.sidemenu .holder{font-size:20px;top:150px;left:auto;right:0;position:absolute;max-width:1200px;width:100%;height:100%;}body>div.sidemenu .title{font-size:12px;text-align:right;width:100%;padding-right:150px;margin-bottom:30px;text-transform:uppercase;letter-spacing:1px;font-weight:bold;}@media (max-width: 992px){body>div.sidemenu .title{padding-right:20px;}}body>div.sidemenu .section-options{margin:0 auto;overflow-y:scroll;height:calc(100% - 200px);}body>div.sidemenu .section-options::-webkit-scrollbar{width:7px;}body>div.sidemenu .section-options::-webkit-scrollbar-thumb{border-radius:10px;background-color:#4d5259;}body>div.sidemenu .section-options .option{text-align:right;border-bottom:2px none;}body>div.sidemenu .section-options a,body>div.sidemenu .section-options button{font-family:var(--global-primary-font-family);line-height:70px;color:var(--linkColor);font-size:35px;-webkit-text-decoration:none;text-decoration:none;display:inline-block;padding-right:150px;border:none;background-color:transparent;cursor:pointer;border-bottom:2px solid transparent;text-transform:none;-webkit-transition:.3s linear all;transition:.3s linear all;}body>div.sidemenu .section-options a:hover:not(.sub-nav-link),body>div.sidemenu .section-options button:hover:not(.sub-nav-link){color:var(--fontColor, #fff);border-bottom:2px solid var(--fontColor, #fff);}@media (max-width: 992px){body>div.sidemenu .section-options a,body>div.sidemenu .section-options button{padding-right:20px;}}body>div.sidemenu .sidemenu-close{width:24px;height:24px;display:block;padding:0;border:none;background-color:transparent;cursor:pointer;-webkit-transition:all .3s ease;transition:all .3s ease;}body>
39div.sidemenu .sidemenu-close:hover{-webkit-transform:scale(1.3);-moz-transform:scale(1.3);-ms-transform:scale(1.3);transform:scale(1.3);}body>div.sidemenu .sidemenu-close:before,body>div.sidemenu .sidemenu-close:after{content:'';display:block;width:30px;height:2px;background-color:var(--fontColor, #fff);position:absolute;left:50%;top:50%;}body>div.sidemenu .sidemenu-close:before{-webkit-transform:translate(-50%, -50%) rotate(45deg);-moz-transform:translate(-50%, -50%) rotate(45deg);-ms-transform:translate(-50%, -50%) rotate(45deg);transform:translate(-50%, -50%) rotate(45deg);}body>div.sidemenu .sidemenu-close:after{-webkit-transform:translate(-50%, -50%) rotate(-45deg);-moz-transform:translate(-50%, -50%) rotate(-45deg);-ms-transform:translate(-50%, -50%) rotate(-45deg);transform:translate(-50%, -50%) rotate(-45deg);}body>div.sidemenu button.toggle{border:none;background:none;position:absolute;right:76px;top:74px;}body>div.sidemenu button.toggle:focus,body>div.sidemenu button.toggle:active{outline:none;}body>div.sidemenu .sub-nav-container{position:relative;}body>div.sidemenu .sub-nav{opacity:0;visibility:hidden;-webkit-transition:all .5s ease;transition:all .5s ease;max-height:0;}body>div.sidemenu .sub-nav ul{margin:0;padding-top:10px;}body>div.sidemenu .sub-nav.visible{opacity:1;visibility:visible;max-height:10000px;}body>div.sidemenu .sub-nav a,body>div.sidemenu .sub-nav button{font-size:25px;line-height:45px;}body>div.sidemenu .sub-nav a:hover,body>div.sidemenu .sub-nav button:hover{color:var(--fontColor, #fff);}footer{background-color:rgba(43, 43, 45, 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(43, 43, 45, 1);--bgColor_H:240;--bgColor_S:2%;--bgColor_L:17%;--bgColor_A:1;--bgColor_darkenDir:1;}footer .pre-wrap{white-space:pre-wrap;}footer ul{margin-top:0;margin-bottom:15px;}footer li{margin-bottom:0;}footer ul ul{margin-bottom:0;}footer a{background-color:transparent;color:inherit;-webkit-text-decoration:none;text-decoration:none;}footer a:-webkit-any-link{-webkit-text-decoration:none;text-decoration:none;}footer a:active,footer a:hover{outline:0;}footer a.underlined{-webkit-text-decoration:underline;text-decoration:underline;}footer a.underlined:hover{-webkit-text-decoration:none;text-decoration:none;}footer .container{width:100%;padding-right:16px;padding-left:16px;margin-right:auto;margin-left:auto;}@media (max-width: 576px){footer .container{max-width:100%;padding-right:16px;padding-left:16px;}}@media (min-width: 992px){footer .container{max-width:960px;}}@media (min-width: 1340px){footer .container{padding:0;max-width:1070px;}}footer h1,footer h2,footer h3{font-weight:normal;font-stretch:normal;font-style:normal;letter-spacing:normal;}footer h1{font-size:42px;line-height:1.19;}footer h2{font-size:30px;line-height:1.33;}footer h3{font-size:18px;line-height:1.67;}@media (max-width: 576px){footer h1{font-size:32px;line-height:1.31;}footer h2{font-size:26px;line-height:1.38;}footer h3{font-size:18px;line-height:1.56;}}footer .btn--subscribe{background-color:transparent;border:solid 2px;font-size:14px;line-height:1.5;color:var(--textColor);padding:14px 35px;cursor:pointer;font-weight:700;-webkit-transition:0.2s all;transition:0.2s all;}@media (min-width: 540px){footer .btn--subscribe:hover{color:var(--bgColor);background-color:var(--fontColor);border-color:var(--fontColor);}}footer .btn:disabled{background-color:#f4f4f4;color:#c1c1c1;}footer .btn--white{color:white;border-color:white;}@media (min-width: 540px){footer .btn--white:hover{background-color:#575757;border-color:#575757;color:white;}}footer .btn--white:disabled{background-color:#f4f4f4;color:#c1c1c1;}footer .footer{padding:91px 0 42px 0;}@media (max-width: 768px){footer .footer{padding:46px 0 100px;}}footer .footer .company-logo.light{display:none;}footer .footer.dark .company-logo.light{display:block;}footer .footer.dark .company-logo.dark{display:none;}footer .footer.light .company-logo.light{display:none;}footer .footer.light .company-logo.dark{display:block;}footer .footer .company-logo{display:block;
39max-width:200px;}footer .footer__layout{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: 576px){footer .footer__layout{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}}footer .footer__layout__left{-webkit-flex-basis:57%;-ms-flex-preferred-size:57%;flex-basis:57%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;}footer .footer__layout__right{font-size:18px;-webkit-flex-basis:40%;-ms-flex-preferred-size:40%;flex-basis:40%;padding-left:15px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;}@media (max-width: 576px){footer .footer__layout__right{margin-top:53px;padding-left:0;}}footer .footer .company{padding-right:15px;}@media (max-width: 576px){footer .footer .company{padding-right:0;}}footer .footer .company__info__newsletter{max-width:430px;}footer .footer .company__info__newsletter p{margin-bottom:0;}footer .footer .company__contacts{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin:0 -37px;margin-top:100px;-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;}@media (max-width: 768px){footer .footer .company__contacts{margin-top:40px;}}footer .footer .company__contacts>div{padding:0 37px 35px;}footer .footer .company__contacts p{margin-bottom:10px;}@media (max-width: 576px){footer .footer .company__contacts p{margin-bottom:0;}}@media (hover: hover) and (pointer: fine){footer .footer .company__contacts a:hover{-webkit-text-decoration:underline;text-decoration:underline;}}@media (max-width: 576px){footer .footer .company__contacts{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}}footer .footer .company__address{max-width:162px;margin-right:75px;}@media (max-width: 576px){footer .footer .company__address{margin-bottom:28px;}}footer .footer .newsletter{margin-bottom:58px;overflow:hidden;}footer .footer .newsletter__info{max-width:280px;}footer .footer .newsletter__subscribe{margin-top:47px;}footer .footer .newsletter__subscribe.hide{display:none;}footer .footer .newsletter__subscribe.success .btn{display:none;}footer .footer .newsletter__subscribe input[name='email']{background:none;border:none;border-bottom:solid 1px;font-size:15px;line-height:1.67;color:var(--fontColor);width:100%;margin-bottom:0;-webkit-transition:0.3s all;transition:0.3s all;border-radius:0;}footer .footer .newsletter__subscribe input[name='email']:focus{outline:none;}footer .footer .newsletter p.success{margin-top:1em;font-style:italic;-webkit-transition:all 0.4s ease;transition:all 0.4s ease;}footer .footer .newsletter p.hide{display:none;}footer .footer__middle{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}@media (max-width: 576px){footer .footer__middle{-webkit-align-items:flex-start;-webkit-box-align:flex-start;-ms-flex-align:flex-start;align-items:flex-start;-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;}}footer .footer .logos{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}@media (max-width: 576px){footer .footer .logos{margin-bottom:30px;margin-top:36px;}}footer .footer .logos__logo{width:50px;height:50px;margin-right:45px;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;}footer .footer .logos__logo img{max-width:100%;max-height:100%;}footer .footer .socials{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;font-size:12px;gap:15px;}@media (max-width: 576px){footer .footer .socials{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;}}footer .footer .socials>li{padding:0;margin:0;}footer .footer .socials__item{border-radius:50%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;
39-webkit-justify-content:center;justify-content:center;font-size:unset;position:relative;background-color:var(--fontColor, #000);color:var(--bgColor, #fff);}footer .footer .socials__item svg{width:1em;height:1em;}footer .footer .socials__item:hover{background-color:hsla(var(--fontColor_H, 0), var(--fontColor_S, 0%), var(--fontColor_L, 0%), .7);}footer .footer__bottom{margin-top:55px;padding-bottom:24px;}footer .footer__bottom-copyrights{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;}@media (max-width: 768px){footer .footer__bottom-copyrights{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-align-items:flex-start;-webkit-box-align:flex-start;-ms-flex-align:flex-start;align-items:flex-start;}}footer .h-pot{height:0;width:0;overflow:hidden;visibility:hidden;}footer .img-wrap{max-width:100px;width:100%;}@media (min-width: 769px){footer .img-wrap{margin:0 20px 0 0;}}footer .img-wrap img{width:100%;object-fit:cover;}footer .logo-powered{font-size:18px;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;}@media (max-width: 768px){footer .logo-powered{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-align-items:flex-start;-webkit-box-align:flex-start;-ms-flex-align:flex-start;align-items:flex-start;}}@media (max-width: 768px){footer .copyright-box{margin:5px 0 0 0;padding:0;}}footer .luxury-link{white-space:nowrap;position:relative;display:inline-block;}footer .luxury-link:after{content:"";position:absolute;display:block;width:100%;height:1px;bottom:0;left:0;-webkit-transition:.3s all linear;transition:.3s all linear;background:currentColor;}footer .luxury-link:hover:after{width:0;}footer .footer__disclaimers{padding-top:24px;padding-bottom:24px;}footer .footer .newsletter__subscribe input[name='email']::-webkit-input-placeholder{color:var(--fontColor);}footer .footer .newsletter__subscribe input[name='email']::-moz-placeholder{color:var(--fontColor);}footer .footer .newsletter__subscribe input[name='email']:-ms-input-placeholder{color:var(--fontColor);}footer .footer .newsletter__subscribe input[name='email']::placeholder{color:var(--fontColor);}body>div.mobile-contact-wrapper{z-index:200;position:relative;}body>div.mobile-contact-wrapper .lp-ico:before{content:'';width:1em;height:1em;background-color:currentColor;-webkit-background-size:cover;background-size:cover;display:block;-webkit-mask-position:center;-webkit-mask-position:center;mask-position:center;-webkit-mask-size:contain;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-transition:all .3s;transition:all .3s;}body>div.mobile-contact-wrapper .lp-ico-search:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='25' height='25' viewB
39ox='0 0 25 25' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21.6231 21.3002L17.1372 16.8143M19.5606 10.9877C19.5606 15.5441 15.8669 19.2377 11.3106 19.2377C6.75421 19.2377 3.06055 15.5441 3.06055 10.9877C3.06055 6.43135 6.75421 2.73769 11.3106 2.73769C15.8669 2.73769 19.5606 6.43135 19.5606 10.9877Z' stroke='black' stroke-width='1.82813' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='25' height='25' viewBox='0 0 25 25' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21.6231 21.3002L17.1372 16.8143M19.5606 10.9877C19.5606 15.5441 15.8669 19.2377 11.3106 19.2377C6.75421 19.2377 3.06055 15.5441 3.06055 10.9877C3.06055 6.43135 6.75421 2.73769 11.3106 2.73769C15.8669 2.73769 19.5606 6.43135 19.5606 10.9877Z' stroke='black' stroke-width='1.82813' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='25' height='25' viewBox='0 0 25 25' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21.6231 21.3002L17.1372 16.8143M19.5606 10.9877C19.5606 15.5441 15.8669 19.2377 11.3106 19.2377C6.75421 19.2377 3.06055 15.5441 3.06055 10.9877C3.06055 6.43135 6.75421 2.73769 11.3106 2.73769C15.8669 2.73769 19.5606 6.43135 19.5606 10.9877Z' stroke='black' stroke-width='1.82813' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");}body>div.mobile-contact-wrapper .lp-ico-arrow-top:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='17' height='16' viewBox='0 0 17 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.8716 9.99976L8.87158 5.99976L4.87158 9.99976' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='17' height='16' viewBox='0 0 17 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.8716 9.99976L8.87158 5.99976L4.87158 9.99976' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='17' height='16' viewBox='0 0 17 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.8716 9.99976L8.87158 5.99976L4.87158 9.99976' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");}body>div.mobile-contact-wrapper .lp-ico-scroll-top:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21 3H3M12 21V7M12 7L5 14M12 7L19 14' stroke='white' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E ");-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21 3H3M12 21V7M12 7L5 14M12 7L19 14' stroke='white' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E ");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21 3H3M12 21V7M12 7L5 14M12 7L19 14' stroke='white' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E ");}body>div.mobile-contact-wrapper .lp-ico-close:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M17.5986 6.32617L5.59863 18.3262M5.59863 6.32617L17.5986 18.3262' stroke='white' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E ");-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M17.5986 6.32617L5.59863 18.3262M5.59863 6.32617L17.5986 18.3262' stroke='white' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E ");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M17.5986 6.32617L5.59863 18.3262M5.59863 6.32617L17.5986 18.3262' stroke='white' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E ");}body>div.mobile-contact-wrapper .lp-ico-phone:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M13.8
39699 6.57142C14.7459 6.74157 15.551 7.16808 16.1821 7.79637C16.8132 8.42465 17.2416 9.22612 17.4126 10.0982M13.8699 3C15.6899 3.20128 17.3871 4.01265 18.6827 5.3009C19.9784 6.58914 20.7955 8.27768 21 10.0893M10.4412 13.592C9.36357 12.5192 8.51264 11.3061 7.88843 10.0118C7.83474 9.90047 7.80789 9.84481 7.78726 9.77437C7.71397 9.52405 7.76662 9.21668 7.91909 9.00469C7.962 8.94504 8.01326 8.894 8.11578 8.79194C8.42933 8.47979 8.58611 8.32372 8.6886 8.16677C9.07515 7.57491 9.07515 6.81189 8.6886 6.22002C8.58611 6.06308 8.42933 5.90701 8.11578 5.59486L7.94101 5.42087C7.46438 4.94637 7.22607 4.70912 6.97012 4.58024C6.4611 4.32392 5.85996 4.32392 5.35093 4.58024C5.09499 4.70912 4.85667 4.94637 4.38004 5.42087L4.23867 5.56161C3.76367 6.03449 3.52617 6.27093 3.34478 6.59239C3.1435 6.94909 2.99878 7.5031 3.00001 7.91222C3.00111 8.28092 3.07295 8.53291 3.21664 9.03688C3.98881 11.7453 5.44574 14.3009 7.58743 16.4331C9.72911 18.5652 12.2963 20.0156 15.0168 20.7843C15.523 20.9274 15.7761 20.9989 16.1465 21C16.5575 21.0012 17.114 20.8571 17.4723 20.6568C17.7952 20.4762 18.0327 20.2397 18.5077 19.7669L18.649 19.6261C19.1257 19.1516 19.364 18.9144 19.4934 18.6596C19.7509 18.1528 19.7509 17.5544 19.4934 17.0476C19.364 16.7928 19.1257 16.5556 18.649 16.0811L18.4743 15.9071C18.1607 15.5949 18.0039 15.4388 17.8463 15.3368C17.2518 14.952 16.4853 14.952 15.8908 15.3368C15.7332 15.4388 15.5764 15.5949 15.2628 15.9071C15.1603 16.0091 15.1091 16.0602 15.0491 16.1029C14.8362 16.2547 14.5274 16.3071 14.276 16.2341C14.2052 16.2136 14.1493 16.1869 14.0375 16.1334C12.7374 15.512 11.5189 14.6648 10.4412 13.592Z' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M13.8699 6.57142C14.7459 6.74157 15.551 7.16808 16.1821 7.79637C16.8132 8.42465 17.2416 9.22612 17.4126 10.0982M13.8699 3C15.6899 3.20128 17.3871 4.01265 18.6827 5.3009C19.9784 6.58914 20.7955 8.27768 21 10.0893M10.4412 13.592C9.36357 12.5192 8.51264 11.3061 7.88843 10.0118C7.83474 9.90047 7.80789 9.84481 7.78726 9.77437C7.71397 9.52405 7.76662 9.21668 7.91909 9.00469C7.962 8.94504 8.01326 8.894 8.11578 8.79194C8.42933 8.47979 8.58611 8.32372 8.6886 8.16677C9.07515 7.57491 9.07515 6.81189 8.6886 6.22002C8.58611 6.06308 8.42933 5.90701 8.11578 5.59486L7.94101 5.42087C7.46438 4.94637 7.22607 4.70912 6.97012 4.58024C6.4611 4.32392 5.85996 4.32392 5.35093 4.58024C5.09499 4.70912 4.85667 4.94637 4.38004 5.42087L4.23867 5.56161C3.76367 6.03449 3.52617 6.27093 3.34478 6.59239C3.1435 6.94909 2.99878 7.5031 3.00001 7.91222C3.00111 8.28092 3.07295 8.53291 3.21664 9.03688C3.98881 11.7453 5.44574 14.3009 7.58743 16.4331C9.72911 18.5652 12.2963 20.0156 15.0168 20.7843C15.523 20.9274 15.7761 20.9989 16.1465 21C16.5575 21.0012 17.114 20.8571 17.4723 20.6568C17.7952 20.4762 18.0327 20.2397 18.5077 19.7669L18.649 19.6261C19.1257 19.1516 19.364 18.9144 19.4934 18.6596C19.7509 18.1528 19.7509 17.5544 19.4934 17.0476C19.364 16.7928 19.1257 16.5556 18.649 16.0811L18.4743 15.9071C18.1607 15.5949 18.0039 15.4388 17.8463 15.3368C17.2518 14.952 16.4853 14.952 15.8908 15.3368C15.7332 15.4388 15.5764 15.5949 15.2628 15.9071C15.1603 16.0091 15.1091 16.0602 15.0491 16.1029C14.8362 16.2547 14.5274 16.3071 14.276 16.2341C14.2052 16.2136 14.1493 16.1869 14.0375 16.1334C12.7374 15.512 11.5189 14.6648 10.4412 13.592Z' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M13.8699 6.57142C14.7459 6.74157 15.551 7.16808 16.1821 7.79637C16.8132 8.42465 17.2416 9.22612 17.4126 10.0982M13.8699 3C15.6899 3.20128 17.3871 4.01265 18.6827 5.3009C19.9784 6.58914 20.7955 8.27768 21 10.0893M10.4412 13.592C9.36357 12.5192 8.51264 11.3061 7.88843 10.0118C7.83474 9.90047 7.80789 9.84481 7.78726 9.77437C7.71397 9.52405 7.76662 9.21668 7.91909 9.00469C7.962 8.94504 8.01326 8.894 8.11578 8.79194C8.42933 8.47979 8.58611 8.32372 8.6886 8.16677C9.07515 7.57491 9.07515 6.81189 8.6886 6.22002C8.58611 6.06308 8.42933 5.90701 8.11578 5.59486L7.94101 5.42087C7.46438 4.94637 7.22607 4.70912 6.97012 4.58024C6.4611 4.32392 5.85996 4.32392 5.35093 4.58024C5.09499 4.70912 4.85667 4.94637 4.38004 5.42087L4.23867 5.56161C3.76367 6.03449 3.52617 6.27093 3.34478 6.59239C3.1435 6.94909 2.99878 7.5031 3.00001 7.91222C3.00111 8.28092 3.07295 8.53291 3.21664 9.03688C3.98881 11.7453 5.44574 14.3009 7.58743 16.4331C9.72911 18.5652 12.2963 20.0156 15.0168 20.7843C15.523 20.9274 15.7761 20.9989 16.1465 21C16.5575 21.0012 17.114 20.8571 17.4723 20.6568C17.7952 20.4762 18.0327 20.2397 18.5077 19.7669L18.649 19.6261C19.1257 19.1516 19.364 18.9144 19.4934 18.6596C19.7509 18.1528 19.7509 17.5544 19.4934 17.0476C19.364 16.7928 19.1257 16.5556 18.649 16.0811L18.4743 15.9071C18.1607 15.5949 18.0039 15.4388 17.8463 15.3368C17.2518 14.952 16.4853 14.952 15.8908 15.3368C15.7332 15.4388 15.5764 15.5949 15.2628 15.9071C15.1603 16.0091 15.1091 16.0602 15.0491 16.1029C14.8362 16.2547 14.5274 16.3071 14.276 16.2341C14.2052 16.2136 14.1493 16.1869 14.0375 16.1334C12.7374 15.512 11.5189 14.6648 10.4412 13.592Z' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");}body>div.mobile-contact-wrapper .lp-ico-sms:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21 11.5C21.0034 12.8199 20.6951 14.1219 20.1 15.3C19.3944 16.7117 18.3098 17.8992 16.9674 18.7293C15.6251 19.5594 14.0782 19.9994 12.5 20C11.1801 20.0034 9.87812 19.6951 8.7 19.1L3 21L4.9 15.3C4.30493 14.1219 3.99656 12.8199 4 11.5C4.00061 9.92176 4.44061 8.37485 5.27072 7.03255C6.10083 5.69025 7.28825 4.60557 8.7 3.9C9.87812 3.30493 11.1801 2.99656 12.5 3H13C15.0843 3.11499 17.053 3.99476 18.5291 5.47086C20.0052 6.94695 20.885 8.91565 21 11V11.5Z' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21 11.5C21.0034 12.8199 20.6951 14.1219 20.1 15.3C19.3944 16.7117 18.3098 17.8992 16.9674 18.7293C15.6251 19.5594 14.0782 19.9994 12.5 20C11.1801 20.0034 9.87812 19.6951 8.7 19.1L3 21L4.9 15.3C4.30493 14.1219 3.99656 12.8199 4 11.5C4.00061 9.92176 4.44061 8.37485 5.27072 7.03255C6.10083 5.69025 7.28825 4.60557 8.7 3.9C9.87812 3.30493 11.1801 2.99656 12.5 3H13C15.0843 3.11499 17.053 3.99476 18.5291 5.47086C20.0052 6.94695 20.885 8.91565 21 11V11.5Z' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21 11.5C21.0034 12.8199 20.6951 14.1219 20.1 15.3C19.3944 16.7117 18.3098 17.8992 16.9674 18.7293C15.6251 19.5594 14.0782 19.9994 12.5 20C11.1801 20.0034 9.87812 19.6951 8.7 19.1L3 21L4.9 15.3C4.30493 14.1219 3.99656 12.8199 4 11.5C4.00061 9.92176 4.44061 8.37485 5.27072 7.03255C6.10083 5.69025 7.28825 4.60557 8.7 3.9C9.87812 3.30493 11.1801 2.99656 12.5 3H13C15.0843 3.11499 17.053 3.99476 18.5291 5.47086C20.0052 6.94695 20.885 8.91565 21 11V11.5Z' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");}body>div.mobile-contact-wrapper .lp-ico-email:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21.5 18L14.85
3971 12M9.14286 12L2.50003 18M2 7L10.1649 12.7154C10.8261 13.1783 11.1567 13.4097 11.5163 13.4993C11.8339 13.5785 12.1661 13.5785 12.4837 13.4993C12.8433 13.4097 13.1739 13.1783 13.8351 12.7154L22 7M6.8 20H17.2C18.8802 20 19.7202 20 20.362 19.673C20.9265 19.3854 21.3854 18.9265 21.673 18.362C22 17.7202 22 16.8802 22 15.2V8.8C22 7.11984 22 6.27976 21.673 5.63803C21.3854 5.07354 20.9265 4.6146 20.362 4.32698C19.7202 4 18.8802 4 17.2 4H6.8C5.11984 4 4.27976 4 3.63803 4.32698C3.07354 4.6146 2.6146 5.07354 2.32698 5.63803C2 6.27976 2 7.11984 2 8.8V15.2C2 16.8802 2 17.7202 2.32698 18.362C2.6146 18.9265 3.07354 19.3854 3.63803 19.673C4.27976 20 5.11984 20 6.8 20Z' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21.5 18L14.8571 12M9.14286 12L2.50003 18M2 7L10.1649 12.7154C10.8261 13.1783 11.1567 13.4097 11.5163 13.4993C11.8339 13.5785 12.1661 13.5785 12.4837 13.4993C12.8433 13.4097 13.1739 13.1783 13.8351 12.7154L22 7M6.8 20H17.2C18.8802 20 19.7202 20 20.362 19.673C20.9265 19.3854 21.3854 18.9265 21.673 18.362C22 17.7202 22 16.8802 22 15.2V8.8C22 7.11984 22 6.27976 21.673 5.63803C21.3854 5.07354 20.9265 4.6146 20.362 4.32698C19.7202 4 18.8802 4 17.2 4H6.8C5.11984 4 4.27976 4 3.63803 4.32698C3.07354 4.6146 2.6146 5.07354 2.32698 5.63803C2 6.27976 2 7.11984 2 8.8V15.2C2 16.8802 2 17.7202 2.32698 18.362C2.6146 18.9265 3.07354 19.3854 3.63803 19.673C4.27976 20 5.11984 20 6.8 20Z' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21.5 18L14.8571 12M9.14286 12L2.50003 18M2 7L10.1649 12.7154C10.8261 13.1783 11.1567 13.4097 11.5163 13.4993C11.8339 13.5785 12.1661 13.5785 12.4837 13.4993C12.8433 13.4097 13.1739 13.1783 13.8351 12.7154L22 7M6.8 20H17.2C18.8802 20 19.7202 20 20.362 19.673C20.9265 19.3854 21.3854 18.9265 21.673 18.362C22 17.7202 22 16.8802 22 15.2V8.8C22 7.11984 22 6.27976 21.673 5.63803C21.3854 5.07354 20.9265 4.6146 20.362 4.32698C19.7202 4 18.8802 4 17.2 4H6.8C5.11984 4 4.27976 4 3.63803 4.32698C3.07354 4.6146 2.6146 5.07354 2.32698 5.63803C2 6.27976 2 7.11984 2 8.8V15.2C2 16.8802 2 17.7202 2.32698 18.362C2.6146 18.9265 3.07354 19.3854 3.63803 19.673C4.27976 20 5.11984 20 6.8 20Z' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");}body>div.mobile-contact-wrapper a{-webkit-text-decoration:none;text-decoration:none;}body>div.mobile-contact-wrapper .btn-holder{bottom:-50px;left:19px;position:fixed;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;gap:13px;opacity:0;-webkit-transition:all .3s;transition:all .3s;}@media (max-width: 1024px){body>div.mobile-contact-wrapper .btn-holder{right:19px;padding:0 48px;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;}}body>div.mobile-contact-wrapper .btn-holder.visible{bottom:28px;opacity:1;}body>div.mobile-contact-wrapper .search-btn{width:48px;height:48px;border-radius:999px;font-size:0;line-height:0;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-transition:all .3s;transition:all .3s;padding:12px;color:#141414;background:#fff;}@media (max-width: 1024px){body>div.mobile-contact-wrapper .search-btn{position:absolute;left:0;bottom:0;}}body>div.mobile-contact-wrapper .search-btn:before{width:24px;height:24px;}body>div.mobile-contact-wrapper .connect-btn{height:48px;padding:0 24px;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:4px;text-transform:uppercase;border-radius:25px;color:var(--pillTextColor);background:var(--pillBackgroundColor);border:1px solid rgba(255, 255, 255, 0.2);cursor:pointer;font-size:10px;font-style:normal;font-weight:500;line-height:16px;letter-spacing:0.4px;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-webkit-transition:all .4s;transition:all .4s;box-shadow:0 0 0 0 rgba(255, 255, 255, 0.2);-webkit-animation:pulsate 2s ease infinite;animation:pulsate 2s ease infinite;}body>div.mobile-contact-wrapper .connect-btn:before{width:16px;height:16px;}body>div.mobile-contact-wrapper .pop-up{display:none;position:fixed;bottom:0;left:0;width:100%;-webkit-transition:all .3s;transition:all .3s;border-radius:16px 16px 0 0;color:var(--textColor);background:var(--backgroundColor);}@media (max-height: 850px){body>div.mobile-contact-wrapper .pop-up{max-height:85vh;overflow-y:auto;}}@media (min-width: 1025px){body>div.mobile-contact-wrapper .pop-up{max-height:none;overflow-y:initial;max-width:637px;border-radius:16px;bottom:28px;left:19px;}}body>div.mobile-contact-wrapper .pop-up .lp-container{padding-top:24px;padding-bottom:24px;-webkit-box-pack:center;-ms-flex-pack:center;
39-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;
39height: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);}} 40 </style> 41 <style id="custom-style-css">.hyperlink-style-1{color:rgba(0, 0, 0, 1)!important;}.hyperlink-style-1:hover{color:rgba(26, 26, 26, 1)!important;}.button-style-1{color:rgba(121, 38, 23, 1)!important;background-color:rgba(0, 0, 0, 0)!important;border-color:rgba(121, 38, 23, 1)!important;}.button-style-1:hover{color:rgba(255,255,255,1)!important;background-color:rgba(121, 38, 23, 1)!important;border-color:rgba(121, 38, 23, 1)!important;}.social_icons-style-1 a{border-color:rgba(121, 38, 23, 1)!important;background-color:rgba(121, 38, 23, 1)!important;color:rgba(255, 255, 255, 1)!important;}.social_icons-style-1 a:hover{border-color:rgba(121, 38, 23, 1)!important;background-color:rgba(0, 0, 0, 0)!important;color:rgba(121, 38, 23, 1)!important;}.social_icons-style-1 a i{color:inherit!important;}
41.social_icons-style-1 a svg,.social_icons-style-1 a svg path{fill:currentColor!important;}.pagination-style-1 li a{color:rgba(121, 38, 23, 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(121, 38, 23, 1)!important;border-color:rgba(121, 38, 23, 1)!important;}.pagination-style-1 li.active a{color:rgba(255, 255, 255, 1)!important;background-color:rgba(121, 38, 23, 1)!important;border-color:rgba(121, 38, 23, 1)!important;}.hyperlink-style-2{color:rgba(255, 255, 255, 1)!important;}.hyperlink-style-2:hover{color:rgba(255, 255, 255, 0.7)!important;}.social_icons-style-2 a{border-color:rgba(255, 255, 255, 1)!important;background-color:rgba(255, 255, 255, 1)!important;color:rgba(121, 38, 23, 1)!important;}.social_icons-style-2 a:hover{border-color:rgba(255, 255, 255, 1)!important;background-color:rgba(255, 255, 255, 0)!important;color:rgba(255, 255, 255, 1)!important;}.social_icons-style-2 a i{color:inherit!important;}
41.social_icons-style-2 a svg,.social_icons-style-2 a svg path{fill:currentColor!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(121, 38, 23, 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(121, 38, 23, 1)!important;background-color:rgba(255, 255, 255, 1)!important;border-color:rgba(255,255,255,1)!important;}.button-style-2{color:rgba(255, 255, 255, 1)!important;background-color:rgba(0, 0, 0, 0)!important;border-color:rgba(255, 255, 255, 1)!important;}.button-style-2:hover{color:rgba(121, 38, 23, 1)!important;background-color:rgba(255, 255, 255, 1)!important;border-color:rgba(255, 255, 255, 1)!important;}.button-style-5{color:rgba(255, 255, 255, 1)!important;background-color:rgba(121, 38, 23, 1)!important;border-color:rgba(121, 38, 23, 1)!important;}.button-style-5:hover{color:rgba(121, 38, 23, 1)!important;background-color:rgba(0, 0, 0, 0.01)!important;border-color:rgba(121, 38, 23, 1)!important;}.button-style-6{color:rgba(121, 38, 23, 1)!important;background-color:#FFFFFF!important;border-color:rgba(255, 255, 255, 1)!important;}.button-style-6:hover{color:#FFFFFF!important;background-color:rgba(0, 0, 0, 0)!important;border-color:#FFFFFF!important;}</style> 42 <!-- LP Consent bootstrap: blocking; resolves consent state, pushes Consent Mode 43 defaults, and dynamically loads the locale + main (and banner if needed). --> 44
44<script src="https://cdn.luxurypresence.com/scripts/lp-consent/latest/lp-consent-boot.js" data-website-id="ff06f655-0c64-45c8-9c55-e8468b4e5303"></script>
44 45 46 47
47<script> 48 (function utmParse() { 49 const url = new URL(window.location.href); 50 if (url.search) { 51 const utm = url.search.split(/\?|&/g).reduce((acc, current) => { 52 const matched = current.match(/utm_(content|campaign|medium|source|term|id)|gclid/g); 53 if (matched) { 54 acc[matched[0]] = current.replace(`${matched[0]}=`, ''); 55 } 56 return acc; 57 }, {}); 58 if (Object.keys(utm).length) { 59 window.localStorage.setItem('utm_vars', JSON.stringify(utm)); 60 } else { 61 // Remove old utm vars 62 window.localStorage.removeItem('utm_vars'); 63 } 64 } 65 // Set referrer in local storage 66 // This is meant to be stored once to avoid self-referrals and to have the first referrer only. 67 if (!window.localStorage.getItem('referrer')) { 68 // Capture the Referrer URL 69 const referrer = document.referrer; 70 if (referrer) { 71 // Only store the referrer if it comes from outside the current domain (to avoid self-referrals) 72 const currentDomain = window.location.hostname; 73 const referrerDomain = new URL(referrer).hostname; 74 75 if (referrerDomain !== currentDomain) { 76 // Store it in localStorage 77 localStorage.setItem('referrer', referrer); 78 } 79 } 80 } 81 })(); 82 </script>
82 83 <!-- Bing Webmaster Tools Verification -->
84<script> 85 // Check if on the homepage before the body loads 86 if (window.location.pathname === '/' || window.location.pathname === '/index.html') { 87 document.write('<meta name="msvalidate.01" content="1E5445451A7B3C43718A1C599CEBE653" />'); 88 } 89</script>
89 90 91 92<!-- Google tag (gtag.js) -->
vendor: 65 bytes, lines 92-93
92 93<script async src="https://www.googletagmanager.com/gtag/js?id=
93G-FY363TT7G6
vendor: 13 bytes, line 93
93"></script>
94<script>
vendor: 130 bytes, lines 95-98
95window.dataLayer = window.dataLayer || []; 96function gtag(){dataLayer.push(arguments);} 97gtag('js', new Date()); 98gtag('config', '
98G-FY363TT7G6
vendor: 5 bytes, line 98
98');
99</script>
99 100 <!-- GOOGLE TRANSLATE STYLES are moved to external CSS --> 101</head> 102<body> 103 <div id="google_translate_element" style="display: none"></div> 104 105 <div id="global-loader" style="height:100%;width:100%;position:fixed;z-index:9999;left:0;top:0;background-color:rgba(43, 43, 45, 1);overflow-x:hidden;transition:1s;"> 106 <div style="position:absolute;height:100vh;text-align:center;bottom:0;left:0;right: 0;display:flex;align-items:center;"> 107 <img style="margin:0 auto;" src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/3d3c6319-f7f9-41fd-bc4d-d3c27b2149fb" /> 108 </div> 109 </div> 110
110<script> 111 if (window.sessionStorage.getItem('global_loading_displayed') === 'yes') { 112 (function () { 113 document.getElementById('global-loader').remove(); 114 })(); 115 } 116 </script>
116 117 118 <nav id="global-navbar" data-el-id="43e7a874-fb1e-4cdd-91fe-eb6bf5b9179b"> 119 <div class="redesign"> 120 <div class="content-container header"> 121 <div class="container header__container"> 122 <div class="navbar"> 123 <div class="logo"> 124 <a href="/" class="logo__link"> 125 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/124e6fd1-c91a-4767-8aec-b87e6e6b1291" 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/124e6fd1-c91a-4767-8aec-b87e6e6b1291 320w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/124e6fd1-c91a-4767-8aec-b87e6e6b1291 598w" class="logo__img light" alt=""> 126 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/514fa9af-ef72-414f-b660-8b8edb538dab" 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/514fa9af-ef72-414f-b660-8b8edb538dab 320w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/514fa9af-ef72-414f-b660-8b8edb538dab 598w" class="logo__img dark" alt=""> 127 </a> 128 </div> 129 <div class="navigation"> 130 <ul> 131 <li class="navigation__item"> 132 <a href="/" class="navigation__link wow fadeInUp" data-wow-delay="2.0"><span>Home</span></a> 133 </li> 134 <li class="navigation__item"> 135 <a href="/properties/sale" class="navigation__link wow fadeInUp" data-wow-delay="2.1"><span>Listings</span></a> 136 </li> 137 <li class="navigation__item sub-nav-container"> 138 <a href="#" class="navigation__link wow fadeInUp">Solds</a> 139 <div class="sub-nav"> 140 <ul> 141 <li class="sub-nav__item"><a href="/recent-sales" class="nav-link sub-nav__link feature"><span>RECENT SALES</span></a></li> 142 <li class="sub-nav__item"><a href="/high-end-sales" class="nav-link sub-nav__link feature"><span>HIGH END SALES</span></a></li> 143 </ul> 144 </div> 145 </li> 146 <li class="navigation__item"> 147 <a href="/team" class="navigation__link wow fadeInUp" data-wow-delay="2.3"><span>About</span></a> 148 </li> 149 <li class="navigation__item"> 150 <a href="/contact-us" class="navigation__link wow fadeInUp" data-wow-delay="2.4"><span>CONTACT</span></a> 151 </li> 152 <li class="navigation__item"> 153 <a target="_blank" href="https://www.instagram.com/muskokacottagesforsale/" class="navigation__link wow fadeInUp" data-wow-delay="2.5"><span>IG</span></a> 154 </li> 155 </ul> 156 </div> 157 <div class="buttons-wrapper"> 158 <button type="button" class="hamburger-component hamburger"> 159 <span class="hamburger__bars"></span> 160 </button> 161 </div> 162 </div> 163 </div> 164 </div> 165</div> 166 167 </nav> 168 <div id="global-sidemenu" class="sidemenu" data-el-id="744a0561-da45-4129-9fa6-398537851996"> 169 <div class="wrapper"> 170 <div class="holder"> 171 <div class="title">RICHARD SCULLY & ASSOCIATES</div> 172 <ul class="section-options"> 173 <li class="option"><a href="/">Home</a></li> 174 <li class="option"><a href="/properties/sale">Listings</a></li> 175 <li class="option sub-nav-container"> 176 <a href="#" class="link sub-nav-heading">Solds</a> 177 <div class="sub-nav"> 178 <ul> 179 <li><a href="/recent-sales" class="link sub-nav-link">Recent Sales</a></li> 180 <li><a href="/high-end-sales" class="link sub-nav-link">High End Sales</a></li> 181 </ul> 182 </div> 183 </li> 184 <li class="option"><a href="/team">About</a></li> 185 <li class="option"><a href="/Vlog">Video Gallery</a></li> 186 <li class="option"><a href="/contact-us">Contact</a></li> 187 </ul> 188 </div> 189 <button class="toggle sidemenu-close"></button> 190</div> 191 192 </div> 193 <div id="global-mobile-contact" class="mobile-contact-wrapper" data-el-id="befe5af2-a6ca-4119-924a-a85d96d36b51"> 194 <div class="btn-holder" 195style=" 196--backgroundColor: rgba(43, 43, 45, 1); 197--textColor: rgba(255, 255, 255, 1); 198--pillTextColor: rgba(121, 38, 23, 1);
199--pillBackgroundColor: rgba(255, 255, 255, 1);"> 200 201 <button type="button" class="connect-btn lp-ico lp-ico-arrow-top visible">Contact Us</button> 202</div> 203 204 205<div class="pop-up" style="--backgroundColor: rgba(43, 43, 45, 1); --textColor: rgba(255, 255, 255, 1);"> 206 <div class="lp-container"> 207 <form data-type="contact-form" class="contact-form"> 208 <div class="contact-form__container"> 209 <h3 class="lp-h3">Leave a Message</h3> 210 211 <div class="contact-form__content"> 212 <div class="contact-form__inputs-container"> 213 <div class="contact-form__item"> 214 <input 215 id="__FullName" 216 type="text" name="name" 217 class="lp-input lp-input--light" 218 required 219 placeholder="Full Name"> 220 </div> 221 <div class="contact-form__item"> 222 <input 223 id="__Email" 224 type="email" name="email" 225 class="lp-input js-email-input lp-input--light" 226 required 227 placeholder="Email"> 228 </div> 229 <div class="contact-form__item"> 230 <input 231 class="lp-input lp-input--light" 232 type="tel" 233 placeholder="Phone" 234 id="__Phone" 235 name="phone" 236 required> 237 </div> 238 239 <div class="contact-form__item input-group-select"> 240 <select name="interest" id="-field-interest" placeholder="Interest" 241 class="lp-input dropdown-select js-select js-form-element lp-input--light" required> 242 <option value="" disabled selected data-label="Interest">Interested in...</option> 243 <option value="Selling & Buying">Selling & Buying</option> 244 <option value="Selling">Selling</option> 245 <option value="Buying">Buying</option> 246 <option value="Renting">Renting</option> 247 <option value="Other">Other</option> 248 </select> 249 <label for="-field-interest" class="lp-label sr-only">Interest</label> 250 </div> 251 252 <div class="contact-form__item"> 253 <textarea 254 name="message" 255 rows="4" 256 id="__Message" 257 class="lp-input lp-input--light" 258 placeholder="Message" 259 required></textarea> 260 </div> 261 <div class="lp-disclaimer"> <label style='display: none;' for='-termsAccepted'>Opt In/Disclaimer Consent:</label> 262 <label class='lp-tcr-content'> 263 <span class='lp-tcr-checkbox'> 264 <input 265 type='checkbox' 266 id='-termsAccepted' 267 name='termsAccepted' 268 oninvalid="this.setCustomValidity('Please accept the terms and conditions')" 269 oninput="this.setCustomValidity('')" 270 required 271 /></span> 272 <span class='lp-tcr-message'> 273 274 I agree to be contacted by 275 Richard Scully & Associates 276 via call, email, and text for real estate services. To opt out, you can reply 'stop' at any time or reply 'help' for assistance. 277 You can also click the unsubscribe link in the emails. Message and data rates may apply. Message frequency may vary. 278 <a href='/terms-and-conditions' target='_blank'>Privacy Policy</a>. 279 </span> 280 </label> 281 282</div> 283 <button type="submit" class="lp-btn lp-btn--filled lp-btn--dark submit contact-form__item">Submit</button> 284 285 <div class="lp-h-pot"> 286 <input id="__newsSignMiddleName" name="middleName" value="" autocomplete="off" tabindex="-1"> 287 </div> 288 289 <input style="display: none;" type="text" name="source" value="CONTACT_INQUIRY" /> 290 <input type="hidden" name="button_text" value="Contact Us"> 291 </div> 292 </div> 293 </div> 294 295 296 <div class="success-block"> 297 <h3 class="lp-h3 success-message">Thank you for your message. We will be in touch with you shortly.</h3> 298 299 </div> 300 </form> 301 302 <button type="button" class="close-btn lp-ico lp-ico-close"></button> 303 304 305 </div> 306</div> 307 308 309 </div> 310 <section class="image-section is-font-color-light is-background-color-light" id="section-b35e5a15-2810-4f45-b7c9-afd516c653fd" data-el-id="e6c6941b-dd32-4d6b-b4aa-56593f2d58bb"> 311 <div class="redesign custom-intro"> 312 <div class="container"> 313 <h1 class="custom-intro__title">Recent Sales</h1> 314 315 </div> 316</div> 317 318</section> 319<section id="section-f49c80d5-1090-4356-bdb7-81766af37cfc" class="solid-section is-font-color-dark is-background-color-dark" data-el-id="aeaf061e-5cc8-4b4a-9963-23f50ba3820f">
320<script type="text/x-handlebars-template" class="gridItem pagination-script"><li class="property-list__item feature"> 321 <a class="property-list__item-link" href="{{#if fromMLS}}/home-search/listings/{{id}}{{^}}/properties/{{slug}}{{/if}}" {{#if fromMLS}} data-turbolinks="false" {{/if}}> 322 <div class="property-list__img"> 323 {{{mediaImage media.[0]}}} 324 {{#if openHouseHours}} 325 <div class="open-house label-house bf1">Open House: {{openHouseHours}}</div> 326 {{/if}} 327 </div> 328 <span class="property-list__label"> 329 {{formatPropertyStatus status false (hbFormatDate soldDate)}} 330 </span> 331 <div class="property-list__text"> 332 <h4 class="serif">{{name}}</h4> 333 {{#if privateAddress}} 334 <p> 335 Call for Address 336 </p> 337 {{else}} 338 {{#if fullAddress}} 339 <p> 340 {{fullAddress}} 341 </p> 342 {{else}} 343 <p> 344 Call For Address 345 </p> 346 {{/if}} 347 {{/if}} 348 <p> 349 {{#if bedroomCount}} 350 {{bedroomCount}} BD | 351 {{else}} 352 {{#ifIn "daf8aaa2-8b6f-4f2d-a324-754e0316d2b6" (JSONstringify types)}} 353 {{#ifEquals bedroomCount 0}} 354 Studio | 355 {{/ifEquals}} 356 {{else}} 357 {{#ifIn "dea9daeb-4eb9-4bd8-8380-1a5c9384e817" (JSONstringify types)}} 358 {{#ifEquals bedroomCount 0}} 359 Studio | 360 {{/ifEquals}} 361 {{else}} 362 {{#ifIn "d6b17d8b-a7a2-4de5-95c0-c2783b26de7a" (JSONstringify types)}} 363 {{#ifEquals bedroomCount 0}} 364 Studio | 365 {{/ifEquals}} 366 {{else}} 367 {{#ifIn "9ac67b4b-bf76-4e0d-999e-701908f8f9ab" (JSONstringify types)}} 368 {{#ifEquals bedroomCount 0}} 369 Studio | 370 {{/ifEquals}} 371 {{else}} 372 {{#ifIn "9a70fec3-5946-4d04-9acb-74d98781f636" (JSONstringify types)}} 373 {{#ifEquals bedroomCount 0}} 374 Studio | 375 {{/ifEquals}} 376 {{else}} 377 {{#ifIn "c68279bc-2904-4ab8-9e84-42ecf6af008c" (JSONstringify types)}} 378 {{#ifEquals bedroomCount 0}} 379 Studio | 380 {{/ifEquals}} 381 {{/ifIn}} 382 {{/ifIn}} 383 {{/ifIn}} 384 {{/ifIn}} 385 {{/ifIn}} 386 {{/ifIn}} 387 {{/if}} 388 {{#if bathCount}} 389 {{bathCount}} BA 390 {{#if livingSpaceSize}} 391 | 392 {{/if}} 393 {{/if}} 394 {{#ifIn "2c63593e-4869-41f8-bc78-03fa80e24580" (JSONstringify types)}} 395 {{#if lotAreaSize}} {{lpFormatNumber lotAreaSize}} {{formatAreaUnit lotAreaUnits}}{{/if}} 396 {{else}} 397 {{#if livingSpaceSize}} {{lpFormatNumber livingSpaceSize}} {{formatAreaUnit livingSpaceUnits}}{{/if}} 398 {{/ifIn}} 399 </p> 400 <h5 style="text-transform: capitalize"> 401 {{formatPropertyPrice this}} 402 </h5> 403 </div> 404 </a> 405 406 407 <div class="property-list__hover"> 408 <a href="{{#if fromMLS}}/home-search/listings/{{id}}{{^}}/properties/{{slug}}{{/if}}" {{#if fromMLS}} data-turbolinks="false" {{/if}} class="hover-link"></a> 409 <div class="property-list__buttons"> 410 <a class="property-list__view" href="{{#if fromMLS}}/home-search/listings/{{id}}{{^}}/properties/{{slug}}{{/if}}" {{#if fromMLS}} data-turbolinks="false" {{/if}}> 411 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 412 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 413 </a> 414 <div class="property-list__share"> 415 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 416 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 417 <ul class="socials socials--block-dark"> 418 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/{{slug}}" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 419 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/{{slug}}&text={{name}}" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 420 <li><a href="mailto:?subject={{name}}&body={{name}} - https://muskokacottagesforsale.com/properties/{{slug}}" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 421 </ul> 422 </div> 423 </div> 424 </div> 425</li> 426</script>
426 427<div class="redesign property-list-section"> 428 <div> 429 <div class="container description-container"> 430 <div class="description"><p></p></div> 431 </div> 432 <div class="container"> 433 <ul class="property-list data-container"> 434 <li class="property-list__item feature"> 435 <a class="property-list__item-link" href="/properties/windrush" > 436 <div class="property-list__img"> 437 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/f22eb155-5e32-4fc4-9d9a-01b97bba1441" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/f22eb155-5e32-4fc4-9d9a-01b97bba1441 960w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/f22eb155-5e32-4fc4-9d9a-01b97bba1441 1024w" alt="" loading="lazy"> 438 </div> 439 <span class="property-list__label"> 440 Sold 441 </span> 442 <div class="property-list__text"> 443 <h4 class="serif">âWindrushâ**</h4> 444 <p> 445 Lake Rosseau 446 </p> 447 <p> 448 449 </p> 450 <h5 style="text-transform: capitalize"> 451 $13,779,000 452 </h5> 453 </div> 454 </a> 455 456 457 <div class="property-list__hover"> 458 <a href="/properties/windrush" class="hover-link"></a> 459 <div class="property-list__buttons"> 460 <a class="property-list__view" href="/properties/windrush" > 461 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 462 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 463 </a> 464 <div class="property-list__share"> 465 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 466 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 467 <ul class="socials socials--block-dark"> 468 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/windrush" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 469 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/windrush&text=âWindrushâ**" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 470 <li><a href="/cdn-cgi/l/email-protection#6e511d1b0c040b0d1a538ceef23907000a1c1b1d068ceef34444480c010a17538ceef23907000a1c1b1d068ceef344444e434e061a1a1e1d544141031b1d0501050f0d011a1a0f090b1d08011c1d0f020b400d0103411e1c011e0b1c1a070b1d411907000a1c1b1d06" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 471 </ul> 472 </div> 473 </div> 474 </div> 475 </li> 476 <li class="property-list__item feature"> 477 <a class="property-list__item-link" href="/properties/north-lake-joseph-1" > 478 <div class="property-list__img"> 479 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/f9b75312-e689-457a-b641-e5f6594da771" alt="" loading="lazy"> 480 </div> 481 <span class="property-list__label"> 482 Sold 483 </span> 484 <div class="property-list__text"> 485 <h4 class="serif">North Lake Joseph*</h4> 486 <p> 487 Lake Joseph 488 </p> 489 <p> 490 491 </p> 492 <h5 style="text-transform: capitalize"> 493 $10,900,000 494 </h5> 495 </div> 496 </a> 497 498 499 <div class="property-list__hover"> 500 <a href="/properties/north-lake-joseph-1" class="hover-link"></a> 501 <div class="property-list__buttons"> 502 <a class="property-list__view" href="/properties/north-lake-joseph-1" > 503 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 504 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 505 </a> 506 <div class="property-list__share"> 507 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 508 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 509 <ul class="socials socials--block-dark"> 510 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/north-lake-joseph-1" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 511 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/north-lake-joseph-1&text=North Lake Joseph*" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 512 <li><a href="/cdn-cgi/l/email-protection#ad92ded8cfc7c8ced990e3c2dfd9c58de1ccc6c88de7c2dec8ddc5878bcfc2c9d490e3c2dfd9c58de1ccc6c88de7c2dec8ddc5878d808dc5d9d9ddde978282c0d8dec6c2c6cccec2d9d9cccac8decbc2dfdeccc1c883cec2c082dddfc2ddc8dfd9c4c8de82c3c2dfd9c580c1ccc6c880c7c2dec8ddc5809c" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 513 </ul> 514 </div> 515 </div> 516 </div> 517 </li> 518 <li class="property-list__item feature"> 519 <a class="property-list__item-link" href="/properties/lake-joseph-2" > 520 <div class="property-list__img"> 521 <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/27c5d4f4-8444-4967-8360-4c5548135b1d" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/27c5d4f4-8444-4967-8360-4c5548135b1d 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/27c5d4f4-8444-4967-8360-4c5548135b1d 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/27c5d4f4-8444-4967-8360-4c5548135b1d 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/27c5d4f4-8444-4967-8360-4c5548135b1d 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/27c5d4f4-8444-4967-8360-4c5548135b1d 3456w" alt="" loading="lazy"> 522 </div>
523 <span class="property-list__label"> 524 Sold 525 </span> 526 <div class="property-list__text"> 527 <h4 class="serif">South Lake Joseph</h4> 528 <p> 529 Lake Joseph 530 </p> 531 <p> 532 8 BD | 533 7 BA 534 | 535 3,936 Sq.Ft. 536 </p> 537 <h5 style="text-transform: capitalize"> 538 $9,890,000 539 </h5> 540 </div> 541 </a> 542 543 544 <div class="property-list__hover"> 545 <a href="/properties/lake-joseph-2" class="hover-link"></a> 546 <div class="property-list__buttons"> 547 <a class="property-list__view" href="/properties/lake-joseph-2" > 548 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 549 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 550 </a> 551 <div class="property-list__share"> 552 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 553 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 554 <ul class="socials socials--block-dark"> 555 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/lake-joseph-2" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 556 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/lake-joseph-2&text=South Lake Joseph" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 557 <li><a href="/cdn-cgi/l/email-protection#8db2fef8efe7e8eef9b0dee2f8f9e5adc1ece6e8adc7e2fee8fde5abefe2e9f4b0dee2f8f9e5adc1ece6e8adc7e2fee8fde5ada0ade5f9f9fdfeb7a2a2e0f8fee6e2e6eceee2f9f9eceae8feebe2fffeece1e8a3eee2e0a2fdffe2fde8fff9e4e8fea2e1ece6e8a0e7e2fee8fde5a0bf" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 558 </ul> 559 </div> 560 </div> 561 </div> 562 </li> 563 <li class="property-list__item feature"> 564 <a class="property-list__item-link" href="/properties/ranwood" > 565 <div class="property-list__img"> 566 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/a99b8585-70b9-4fca-9dc6-f8124b7cc0a7" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/a99b8585-70b9-4fca-9dc6-f8124b7cc0a7 960w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/a99b8585-70b9-4fca-9dc6-f8124b7cc0a7 1024w" alt="" loading="lazy"> 567 </div> 568 <span class="property-list__label"> 569 Sold 570 </span> 571 <div class="property-list__text"> 572 <h4 class="serif">Ranwood</h4> 573 <p> 574 Lake Muskoka 575 </p> 576 <p> 577 578 </p> 579 <h5 style="text-transform: capitalize"> 580 $9,850,000 581 </h5> 582 </div> 583 </a> 584 585 586 <div class="property-list__hover"> 587 <a href="/properties/ranwood" class="hover-link"></a> 588 <div class="property-list__buttons"> 589 <a class="property-list__view" href="/properties/ranwood" > 590 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 591 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 592 </a> 593 <div class="property-list__share"> 594 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 595 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 596 <ul class="socials socials--block-dark"> 597 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/ranwood" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 598 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/ranwood&text=Ranwood" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 599 <li><a href="/cdn-cgi/l/email-protection#49763a3c2b232c2a3d741b28273e26262d6f2b262d30741b28273e26262d696469213d3d393a736666243c3a222622282a263d3d282e2c3a2f263b3a28252c672a262466393b26392c3b3d202c3a663b28273e26262d" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 600 </ul> 601 </div> 602 </div> 603 </div> 604 </li> 605 <li class="property-list__item feature"> 606 <a class="property-list__item-link" href="/properties/lake-rosseau" > 607 <div class="property-list__img"> 608 <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/897fd82c-2c97-4af0-838a-b6c1864cdce7" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/897fd82c-2c97-4af0-838a-b6c1864cdce7 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/897fd82c-2c97-4af0-838a-b6c1864cdce7 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/897fd82c-2c97-4af0-838a-b6c1864cdce7 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/897fd82c-2c97-4af0-838a-b6c1864cdce7 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/897fd82c-2c97-4af0-838a-b6c1864cdce7 3456w" alt="" loading="lazy"> 609 </div>
610 <span class="property-list__label"> 611 Sold 612 </span> 613 <div class="property-list__text"> 614 <h4 class="serif">Shamrock Road**</h4> 615 <p> 616 Lake Rosseau 617 </p> 618 <p> 619 5 BD | 620 6 BA 621 | 622 4,509 Sq.Ft. 623 </p> 624 <h5 style="text-transform: capitalize"> 625 $8,989,000 626 </h5> 627 </div> 628 </a> 629 630 631 <div class="property-list__hover"> 632 <a href="/properties/lake-rosseau" class="hover-link"></a> 633 <div class="property-list__buttons"> 634 <a class="property-list__view" href="/properties/lake-rosseau" > 635 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 636 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 637 </a> 638 <div class="property-list__share"> 639 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 640 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 641 <ul class="socials socials--block-dark"> 642 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/lake-rosseau" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 643 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/lake-rosseau&text=Shamrock Road**" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 644 <li><a href="/cdn-cgi/l/email-protection#82bdf1f7e0e8e7e1f6bfd1eae3eff0ede1e9a2d0ede3e6a8a8a4e0ede6fbbfd1eae3eff0ede1e9a2d0ede3e6a8a8a2afa2eaf6f6f2f1b8adadeff7f1e9ede9e3e1edf6f6e3e5e7f1e4edf0f1e3eee7ace1edefadf2f0edf2e7f0f6ebe7f1adeee3e9e7aff0edf1f1e7e3f7" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 645 </ul> 646 </div> 647 </div> 648 </div> 649 </li> 650 <li class="property-list__item feature"> 651 <a class="property-list__item-link" href="/properties/lake-muskoka" > 652 <div class="property-list__img"> 653 <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/2be9f20c-0927-4123-aff4-ff9720d1b1e6" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/2be9f20c-0927-4123-aff4-ff9720d1b1e6 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/2be9f20c-0927-4123-aff4-ff9720d1b1e6 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/2be9f20c-0927-4123-aff4-ff9720d1b1e6 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/2be9f20c-0927-4123-aff4-ff9720d1b1e6 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/2be9f20c-0927-4123-aff4-ff9720d1b1e6 3456w" alt="" loading="lazy"> 654 </div> 655 <span class="property-list__label"> 656 Sold 657 </span> 658 <div class="property-list__text"> 659 <h4 class="serif">Acton Island**</h4> 660 <p> 661 Lake Muskoka 662 </p> 663 <p> 664 5 BD | 665 6 BA 666 | 667 4,743 Sq.Ft. 668 </p> 669 <h5 style="text-transform: capitalize"> 670 $8,989,000 671 </h5> 672 </div> 673 </a> 674 675 676 <div class="property-list__hover"> 677 <a href="/properties/lake-muskoka" class="hover-link"></a> 678 <div class="property-list__buttons"> 679 <a class="property-list__view" href="/properties/lake-muskoka" > 680 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 681 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 682 </a> 683 <div class="property-list__share"> 684 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 685 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 686 <ul class="socials socials--block-dark"> 687 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/lake-muskoka" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 688 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/lake-muskoka&text=Acton Island**" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 689 <li><a href="/cdn-cgi/l/email-protection#37084442555d5254430a7654435859177e445b5659531d1d115558534e0a7654435859177e445b5659531d1d171a175f434347440d18185a42445c585c56545843435650524451584544565b521954585a18474558475245435e5244185b565c521a5a42445c585c56" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 690 </ul> 691 </div> 692 </div> 693 </div> 694 </li> 695 <li class="property-list__item feature"> 696 <a class="property-list__item-link" href="/properties/mortimers-point" > 697 <div class="property-list__img"> 698 <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/b9fa2d84-cf46-4580-b38c-3b7f17195b43" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/b9fa2d84-cf46-4580-b38c-3b7f17195b43 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/b9fa2d84-cf46-4580-b38c-3b7f17195b43 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/b9fa2d84-cf46-4580-b38c-3b7f17195b43 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/b9fa2d84-cf46-4580-b38c-3b7f17195b43 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/b9fa2d84-cf46-4580-b38c-3b7f17195b43 3456w" alt="" loading="lazy"> 699 </div>
700 <span class="property-list__label"> 701 Sold 702 </span> 703 <div class="property-list__text"> 704 <h4 class="serif">Mortimerâs Point**</h4> 705 <p> 706 Lake Muskoka 707 </p> 708 <p> 709 710 </p> 711 <h5 style="text-transform: capitalize"> 712 $8,595,000 713 </h5> 714 </div> 715 </a> 716 717 718 <div class="property-list__hover"> 719 <a href="/properties/mortimers-point" class="hover-link"></a> 720 <div class="property-list__buttons"> 721 <a class="property-list__view" href="/properties/mortimers-point" > 722 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 723 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 724 </a> 725 <div class="property-list__share"> 726 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 727 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 728 <ul class="socials socials--block-dark"> 729 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/mortimers-point" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 730 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/mortimers-point&text=Mortimerâs Point**" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 731 <li><a href="/cdn-cgi/l/email-protection#132c606671797670672e5e7c61677a7e7661f1938a6033437c7a7d67393935717c776a2e5e7c61677a7e7661f1938a6033437c7a7d673939333e337b67676360293c3c7e6660787c7872707c676772747660757c6160727f763d707c7e3c63617c637661677a76603c7e7c61677a7e7661603e637c7a7d67" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 732 </ul> 733 </div> 734 </div> 735 </div> 736 </li> 737 <li class="property-list__item feature"> 738 <a class="property-list__item-link" href="/properties/lake-joseph-1" > 739 <div class="property-list__img"> 740 <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/c6bfa57e-07a3-4598-b889-83079d5b9b43" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/c6bfa57e-07a3-4598-b889-83079d5b9b43 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/c6bfa57e-07a3-4598-b889-83079d5b9b43 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/c6bfa57e-07a3-4598-b889-83079d5b9b43 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/c6bfa57e-07a3-4598-b889-83079d5b9b43 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/c6bfa57e-07a3-4598-b889-83079d5b9b43 3456w" alt="" loading="lazy"> 741 </div> 742 <span class="property-list__label"> 743 Sold 744 </span> 745 <div class="property-list__text"> 746 <h4 class="serif">Avon Bay</h4> 747 <p> 748 Lake Joseph 749 </p> 750 <p> 751 6 BD | 752 5 BA 753 754 </p> 755 <h5 style="text-transform: capitalize"> 756 $8,539,000 757 </h5> 758 </div> 759 </a> 760 761 762 <div class="property-list__hover"> 763 <a href="/properties/lake-joseph-1" class="hover-link"></a> 764 <div class="property-list__buttons"> 765 <a class="property-list__view" href="/properties/lake-joseph-1" > 766 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 767 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 768 </a> 769 <div class="property-list__share"> 770 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 771 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 772 <ul class="socials socials--block-dark"> 773 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/lake-joseph-1" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 774 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/lake-joseph-1&text=Avon Bay" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 775 <li><a href="/cdn-cgi/l/email-protection#b38cc0c6d1d9d6d0c78ef2c5dcdd93f1d2ca95d1dcd7ca8ef2c5dcdd93f1d2ca939e93dbc7c7c3c0899c9cdec6c0d8dcd8d2d0dcc7c7d2d4d6c0d5dcc1c0d2dfd69dd0dcde9cc3c1dcc3d6c1c7dad6c09cdfd2d8d69ed9dcc0d6c3db9e82" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 776 </ul> 777 </div> 778 </div> 779 </div> 780 </li> 781 <li class="property-list__item feature"> 782 <a class="property-list__item-link" href="/properties/lake-joseph" > 783 <div class="property-list__img"> 784 <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/35c64c06-85b0-48a8-9a45-7ca1b6376c78" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/35c64c06-85b0-48a8-9a45-7ca1b6376c78 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/35c64c06-85b0-48a8-9a45-7ca1b6376c78 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/35c64c06-85b0-48a8-9a45-7ca1b6376c78 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/35c64c06-85b0-48a8-9a45-7ca1b6376c78 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/35c64c06-85b0-48a8-9a45-7ca1b6376c78 3456w" alt="" loading="lazy"> 785 </div>
786 <span class="property-list__label"> 787 Sold 788 </span> 789 <div class="property-list__text"> 790 <h4 class="serif">Richard's Bay</h4> 791 <p> 792 Lake Joseph 793 </p> 794 <p> 795 4 BD | 796 4 BA 797 | 798 3,050 Sq.Ft. 799 </p> 800 <h5 style="text-transform: capitalize"> 801 $6,995,000 802 </h5> 803 </div> 804 </a> 805 806 807 <div class="property-list__hover"> 808 <a href="/properties/lake-joseph" class="hover-link"></a> 809 <div class="property-list__buttons"> 810 <a class="property-list__view" href="/properties/lake-joseph" > 811 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 812 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 813 </a> 814 <div class="property-list__share"> 815 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 816 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 817 <ul class="socials socials--block-dark"> 818 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/lake-joseph" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 819 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/lake-joseph&text=Richard's Bay" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 820 <li><a href="/cdn-cgi/l/email-protection#3c034f495e56595f48016e555f545d4e581a1f440e0b074f1c7e5d451a5e535845016e555f545d4e581a1f440e0b074f1c7e5d451c111c5448484c4f06131351494f5753575d5f5348485d5b594f5a534e4f5d5059125f5351134c4e534c594e4855594f13505d57591156534f594c54" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 821 </ul> 822 </div> 823 </div> 824 </div> 825 </li> 826 <li class="property-list__item feature"> 827 <a class="property-list__item-link" href="/properties/little-lake-joseph" > 828 <div class="property-list__img"> 829 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/77c134f5-bea2-4bed-8972-001320a05be0" alt="" loading="lazy"> 830 </div> 831 <span class="property-list__label"> 832 Sold 833 </span> 834 <div class="property-list__text"> 835 <h4 class="serif">Little Lake Joseph*</h4> 836 <p> 837 Lake Joseph 838 </p> 839 <p> 840 841 </p> 842 <h5 style="text-transform: capitalize"> 843 $6,950,000 844 </h5> 845 </div> 846 </a> 847 848 849 <div class="property-list__hover"> 850 <a href="/properties/little-lake-joseph" class="hover-link"></a> 851 <div class="property-list__buttons"> 852 <a class="property-list__view" href="/properties/little-lake-joseph" > 853 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 854 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 855 </a> 856 <div class="property-list__share"> 857 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 858 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 859 <ul class="socials socials--block-dark"> 860 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/little-lake-joseph" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 861 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/little-lake-joseph&text=Little Lake Joseph*" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 862 <li><a href="/cdn-cgi/l/email-protection#9fa0eceafdf5fafceba2d3f6ebebf3fabfd3fef4fabfd5f0ecfaeff7b5b9fdf0fbe6a2d3f6ebebf3fabfd3fef4fabfd5f0ecfaeff7b5bfb2bff7ebebefeca5b0b0f2eaecf4f0f4fefcf0ebebfef8faecf9f0edecfef3fab1fcf0f2b0efedf0effaedebf6faecb0f3f6ebebf3fab2f3fef4fab2f5f0ecfaeff7" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 863 </ul> 864 </div> 865 </div> 866 </div> 867 </li> 868 <li class="property-list__item feature"> 869 <a class="property-list__item-link" href="/properties/heather-lodge" > 870 <div class="property-list__img"> 871 <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/d23c6568-2d17-49f0-ad2c-0db45e81d145" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/d23c6568-2d17-49f0-ad2c-0db45e81d145 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/d23c6568-2d17-49f0-ad2c-0db45e81d145 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/d23c6568-2d17-49f0-ad2c-0db45e81d145 1621w" alt="" loading="lazy"> 872 </div>
873 <span class="property-list__label"> 874 Sold 875 </span> 876 <div class="property-list__text"> 877 <h4 class="serif">Heather Lodge</h4> 878 <p> 879 Lake Muskoka 880 </p> 881 <p> 882 883 </p> 884 <h5 style="text-transform: capitalize"> 885 $6,495,000 886 </h5> 887 </div> 888 </a> 889 890 891 <div class="property-list__hover"> 892 <a href="/properties/heather-lodge" class="hover-link"></a> 893 <div class="property-list__buttons"> 894 <a class="property-list__view" href="/properties/heather-lodge" > 895 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 896 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 897 </a> 898 <div class="property-list__share"> 899 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 900 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 901 <ul class="socials socials--block-dark"> 902 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/heather-lodge" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 903 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/heather-lodge&text=Heather Lodge" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 904 <li><a href="/cdn-cgi/l/email-protection#f7c88482959d929483cabf9296839f9285d7bb98939092d19598938ecabf9296839f9285d7bb98939092d7dad79f83838784cdd8d89a82849c989c96949883839690928491988584969b92d994989ad8878598879285839e9284d89f9296839f9285da9b98939092" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 905 </ul> 906 </div> 907 </div> 908 </div> 909 </li> 910 <li class="property-list__item feature"> 911 <a class="property-list__item-link" href="/properties/pennwood" > 912 <div class="property-list__img"> 913 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/3511ab60-9b8f-4aa0-9fb4-b816eba5eb59" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/3511ab60-9b8f-4aa0-9fb4-b816eba5eb59 960w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/3511ab60-9b8f-4aa0-9fb4-b816eba5eb59 999w" alt="" loading="lazy"> 914 </div> 915 <span class="property-list__label"> 916 Sold 917 </span> 918 <div class="property-list__text"> 919 <h4 class="serif">Pennwood**</h4> 920 <p> 921 Lake Muskoka 922 </p> 923 <p> 924 925 </p> 926 <h5 style="text-transform: capitalize"> 927 $6,150,000 928 </h5> 929 </div> 930 </a> 931 932 933 <div class="property-list__hover"> 934 <a href="/properties/pennwood" class="hover-link"></a> 935 <div class="property-list__buttons"> 936 <a class="property-list__view" href="/properties/pennwood" > 937 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 938 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 939 </a> 940 <div class="property-list__share"> 941 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 942 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 943 <ul class="socials socials--block-dark"> 944 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/pennwood" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 945 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/pennwood&text=Pennwood**" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 946 <li><a href="/cdn-cgi/l/email-protection#b08fc3c5d2dad5d3c48de0d5dedec7dfdfd49a9a96d2dfd4c98de0d5dedec7dfdfd49a9a909d90d8c4c4c0c38a9f9fddc5c3dbdfdbd1d3dfc4c4d1d7d5c3d6dfc2c3d1dcd59ed3dfdd9fc0c2dfc0d5c2c4d9d5c39fc0d5dedec7dfdfd4"
946class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 947 </ul> 948 </div> 949 </div> 950 </div> 951 </li> 952 <li class="property-list__item feature"> 953 <a class="property-list__item-link" href="/properties/lake-rosseau-1" > 954 <div class="property-list__img"> 955 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/d8c05b80-b0d2-4ce7-acdb-fee08d5df2bd" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/d8c05b80-b0d2-4ce7-acdb-fee08d5df2bd 960w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/d8c05b80-b0d2-4ce7-acdb-fee08d5df2bd 1130w" alt="" loading="lazy"> 956 </div> 957 <span class="property-list__label"> 958 Sold 959 </span> 960 <div class="property-list__text"> 961 <h4 class="serif">Kingsett*</h4> 962 <p> 963 Lake Rosseau 964 </p> 965 <p> 966 967 </p> 968 <h5 style="text-transform: capitalize"> 969 $5,895,000 970 </h5> 971 </div> 972 </a> 973 974 975 <div class="property-list__hover"> 976 <a href="/properties/lake-rosseau-1" class="hover-link"></a> 977 <div class="property-list__buttons"> 978 <a class="property-list__view" href="/properties/lake-rosseau-1" > 979 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 980 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 981 </a> 982 <div class="property-list__share"> 983 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 984 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 985 <ul class="socials socials--block-dark"> 986 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/lake-rosseau-1" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 987 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/lake-rosseau-1&text=Kingsett*" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 988 <li><a href="/cdn-cgi/l/email-protection#9ea1edebfcf4fbfdeaa3d5f7f0f9edfbeaeab4b8fcf1fae7a3d5f7f0f9edfbeaeab4beb3bef6eaeaeeeda4b1b1f3ebedf5f1f5fffdf1eaeafff9fbedf8f1ecedfff2fbb0fdf1f3b1eeecf1eefbeceaf7fbedb1f2fff5fbb3ecf1ededfbffebb3af" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 989 </ul> 990 </div> 991 </div> 992 </div> 993 </li> 994 <li class="property-list__item feature"> 995 <a class="property-list__item-link" href="/properties/port-sandfield-3" > 996 <div class="property-list__img"> 997 <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/9134df78-639b-41b3-b400-2a52072bc226" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/9134df78-639b-41b3-b400-2a52072bc226 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/9134df78-639b-41b3-b400-2a52072bc226 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/9134df78-639b-41b3-b400-2a52072bc226 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/9134df78-639b-41b3-b400-2a
99752072bc226 2560w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/9134df78-639b-41b3-b400-2a52072bc226 3200w" alt="" loading="lazy"> 998 </div> 999 <span class="property-list__label"> 1000 Sold 1001 </span> 1002 <div class="property-list__text"> 1003 <h4 class="serif">Port Sandfield</h4> 1004 <p> 1005 Lake Rosseau 1006 </p> 1007 <p> 1008 1009 </p> 1010 <h5 style="text-transform: capitalize"> 1011 $5,889,000 1012 </h5> 1013 </div> 1014 </a> 1015 1016 1017 <div class="property-list__hover"> 1018 <a href="/properties/port-sandfield-3" class="hover-link"></a> 1019 <div class="property-list__buttons"> 1020 <a class="property-list__view" href="/properties/port-sandfield-3" > 1021 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 1022 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 1023 </a> 1024 <div class="property-list__share"> 1025 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 1026 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 1027 <ul class="socials socials--block-dark"> 1028 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/port-sandfield-3" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 1029 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/port-sandfield-3&text=Port Sandfield" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 1030 <li><a href="/cdn-cgi/l/email-protection#1f206c6a7d757a7c6b224f706d6b3f4c7e717b79767a737b397d707b66224f706d6b3f4c7e717b79767a737b3f323f776b6b6f6c253030726a6c7470747e7c706b6b7e787a6c79706d6c7e737a317c7072306f6d706f7a6d6b767a6c306f706d6b326c7e717b79767a737b322c" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 1031 </ul> 1032 </div> 1033 </div> 1034 </div> 1035 </li> 1036 <li class="property-list__item feature"> 1037 <a class="property-list__item-link" href="/properties/riverdale" > 1038 <div class="property-list__img"> 1039 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/8234c5de-f2b2-431d-a2e8-46edf70359f5" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/8234c5de-f2b2-431d-a2e8-46edf70359f5 960w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/8234c5de-f2b2-431d-a2e8-46edf70359f5 1024w" alt="" loading="lazy"> 1040 </div> 1041 <span class="property-list__label"> 1042 Sold 1043 </span> 1044 <div class="property-list__text"> 1045 <h4 class="serif">Riverdale**</h4> 1046 <p> 1047 Lake Joseph 1048 </p> 1049 <p> 1050 1051 </p> 1052 <h5 style="text-transform: capitalize"> 1053 $4,999,999 1054 </h5> 1055 </div> 1056 </a> 1057 1058 1059 <div class="property-list__hover"> 1060 <a href="/properties/riverdale" class="hover-link"></a> 1061 <div class="property-list__buttons"> 1062 <a class="property-list__view" href="/properties/riverdale" > 1063 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 1064 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 1065 </a> 1066 <div class="property-list__share"> 1067 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 1068 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 1069 <ul class="socials socials--block-dark"> 1070 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/riverdale" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 1071 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/riverdale&text=Riverdale**" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 1072 <li><a href="/cdn-cgi/l/email-protection#152a6660777f70766128477c637067717479703f3f33777a716c28477c637067717479703f3f3538357d616165662f3a3a7860667e7a7e74767a616174727066737a67667479703b767a783a65677a657067617c70663a677c63706771747970" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 1073 </ul> 1074 </div> 1075 </div> 1076 </div> 1077 </li> 1078 <li class="property-list__item feature"> 1079 <a class="property-list__item-link" href="/properties/little-lake-joseph-1" > 1080 <div class="property-list__img"> 1081 <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/82e96827-a63c-4e4b-8fd1-43b98c3760e1" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/82e96827-a63c-4e4b-8fd1-43b98c3760e1 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/82e96827-a63c-4e4b-8fd1-43b98c3760e1 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/82e96827-a63c-4e4b-8fd1-43b98c3760e1 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/82e96827-a63c-4e4b-8fd1-43b98c3760e1 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/82e96827-a63c-4e4b-8fd1-43b98c3760e1 3456w" alt="" loading="lazy"> 1082 </div>
1083 <span class="property-list__label"> 1084 Sold 1085 </span> 1086 <div class="property-list__text"> 1087 <h4 class="serif">Little Lake Joseph</h4> 1088 <p> 1089 Lake Joseph 1090 </p> 1091 <p> 1092 1093 </p> 1094 <h5 style="text-transform: capitalize"> 1095 $4,995,000 1096 </h5> 1097 </div> 1098 </a> 1099 1100 1101 <div class="property-list__hover"> 1102 <a href="/properties/little-lake-joseph-1" class="hover-link"></a> 1103 <div class="property-list__buttons"> 1104 <a class="property-list__view" href="/properties/little-lake-joseph-1" > 1105 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 1106 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 1107 </a> 1108 <div class="property-list__share"> 1109 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 1110 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 1111 <ul class="socials socials--block-dark"> 1112 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/little-lake-joseph-1" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 1113 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/little-lake-joseph-1&text=Little Lake Joseph" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 1114 <li><a href="/cdn-cgi/l/email-protection#c1feb2b4a3aba4a2b5fc8da8b5b5ada4e18da0aaa4e18baeb2a4b1a9e7a3aea5b8fc8da8b5b5ada4e18da0aaa4e18baeb2a4b1a9e1ece1a9b5b5b1b2fbeeeeacb4b2aaaeaaa0a2aeb5b5a0a6a4b2a7aeb3b2a0ada4efa2aeaceeb1b3aeb1a4b3b5a8a4b2eeada8b5b5ada4ecada0aaa4ecabaeb2a4b1a9ecf0" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 1115 </ul> 1116 </div> 1117 </div> 1118 </div> 1119 </li> 1120 <li class="property-list__item feature"> 1121 <a class="property-list__item-link" href="/properties/glencoe-heights" > 1122 <div class="property-list__img"> 1123 <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/b4ed9010-b900-46b6-a867-e15b8dacbaec" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/b4ed9010-b900-46b6-a867-e15b8dacbaec 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/b4ed9010-b900-46b6-a867-e15b8dacbaec 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/b4ed9010-b900-46b6-a867-e15b8dacbaec 1299w" alt="" loading="lazy"> 1124 </div> 1125 <span class="property-list__label"> 1126 Sold 1127 </span> 1128 <div class="property-list__text"> 1129 <h4 class="serif">Glencoe Heights**</h4> 1130 <p> 1131 Lake Joseph 1132 </p> 1133 <p> 1134 1135 </p> 1136 <h5 style="text-transform: capitalize"> 1137 $4,879,000 1138 </h5> 1139 </div> 1140 </a> 1141 1142 1143 <div class="property-list__hover"> 1144 <a href="/properties/glencoe-heights" class="hover-link"></a> 1145 <div class="property-list__buttons"> 1146 <a class="property-list__view" href="/properties/glencoe-heights" > 1147 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 1148 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 1149 </a> 1150 <div class="property-list__share"> 1151 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 1152 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 1153 <ul class="socials socials--block-dark"> 1154 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/glencoe-heights" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 1155 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/glencoe-heights&text=Glencoe Heights**" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 1156 <li><a href="/cdn-cgi/l/email-protection#a798d4d2c5cdc2c4d39ae0cbc2c9c4c8c287efc2cec0cfd3d48d8d81c5c8c3de9ae0cbc2c9c4c8c287efc2cec0cfd3d48d8d878a87cfd3d3d7d49d8888cad2d4ccc8ccc6c4c8d3d3c6c0c2d4c1c8d5d4c6cbc289c4c8ca88d7d5c8d7c2d5d3cec2d488c0cbc2c9c4c8c28acfc2cec0cfd3d4" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 1157 </ul> 1158 </div> 1159 </div> 1160 </div> 1161 </li> 1162 <li class="property-list__item feature"> 1163 <a class="property-list__item-link" href="/properties/southern-lake-rosseau" > 1164 <div class="property-list__img"> 1165 <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/a3a4354e-649a-43c9-81f9-6dd22a4d6977" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/a3a4354e-649a-43c9-81f9-6dd22a4d6977 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/a3a4354e-649a-43c9-81f9-6dd22a4d6977 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/a3a4354e-649a-43c9-81f9-6dd22a4d6977 1376w" alt="" loading="lazy"> 1166 </div>
1167 <span class="property-list__label"> 1168 Sold 1169 </span> 1170 <div class="property-list__text"> 1171 <h4 class="serif">Southern Lake Rosseau*</h4> 1172 <p> 1173 Lake Rosseau 1174 </p> 1175 <p> 1176 1177 </p> 1178 <h5 style="text-transform: capitalize"> 1179 $4,395,000 1180 </h5> 1181 </div> 1182 </a> 1183 1184 1185 <div class="property-list__hover"> 1186 <a href="/properties/southern-lake-rosseau" class="hover-link"></a> 1187 <div class="property-list__buttons"> 1188 <a class="property-list__view" href="/properties/southern-lake-rosseau" > 1189 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 1190 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 1191 </a> 1192 <div class="property-list__share"> 1193 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 1194 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 1195 <ul class="socials socials--block-dark"> 1196 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/southern-lake-rosseau" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 1197 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/southern-lake-rosseau&text=Southern Lake Rosseau*" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 1198 <li><a href="/cdn-cgi/l/email-protection#447b3731262e21273079172b31302c21362a6408252f2164162b37372125316e62262b203d79172b31302c21362a6408252f2164162b37372125316e6469642c303034377e6b6b2931372f2b2f25272b303025232137222b36372528216a272b296b34362b342136302d21376b372b31302c21362a6928252f2169362b3737212531" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 1199 </ul> 1200 </div> 1201 </div> 1202 </div> 1203 </li> 1204 <li class="property-list__item feature"> 1205 <a class="property-list__item-link" href="/properties/hemlock-point-8" > 1206 <div class="property-list__img"> 1207 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/a3fa031f-b28e-4a32-9bbc-87b0f77e681a" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/a3fa031f-b28e-4a32-9bbc-87b0f77e681a 960w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/a3fa031f-b28e-4a32-9bbc-87b0f77e681a 1280w" alt="" loading="lazy"> 1208 </div> 1209 <span class="property-list__label"> 1210 Sold 1211 </span> 1212 <div class="property-list__text"> 1213 <h4 class="serif">Hemlock Point</h4> 1214 <p> 1215 Lake Joseph 1216 </p> 1217 <p> 1218 1219 </p> 1220 <h5 style="text-transform: capitalize"> 1221 $3,995,000 1222 </h5> 1223 </div> 1224 </a> 1225 1226 1227 <div class="property-list__hover"> 1228 <a href="/properties/hemlock-point-8" class="hover-link"></a> 1229 <div class="property-list__buttons"> 1230 <a class="property-list__view" href="/properties/hemlock-point-8" > 1231 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 1232 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 1233 </a> 1234 <div class="property-list__share"> 1235 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 1236 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 1237 <ul class="socials socials--block-dark"> 1238 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/hemlock-point-8" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 1239 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/hemlock-point-8&text=Hemlock Point" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 1240 <li><a href="/cdn-cgi/l/email-protection#7e410d0b1c141b1d0a43361b1312111d155e2e1117100a581c111a0743361b1312111d155e2e1117100a5e535e160a0a0e0d445151130b0d1511151f1d110a0a1f191b0d18110c0d1f121b501d1113510e0c110e1b0c0a171b0d51161b1312111d15530e1117100a5346" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 1241 </ul> 1242 </div> 1243 </div> 1244 </div> 1245 </li> 1246 <li class="property-list__item feature"> 1247 <a class="property-list__item-link" href="/properties/bannockburn-1" > 1248 <div class="property-list__img"> 1249 <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/d3699264-ef19-4924-b36f-6d1c2037640a" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/d3699264-ef19-4924-b36f-6d1c2037640a 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/d3699264-ef19-4924-b36f-6d1c2037640a 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/d3699264-ef19-4924-b36f-6d1c2037640a 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/d3699264-ef19-4924-b36f-6d1c2037640a 2560w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/d3699264-ef19-4924-b36f-6d1c2037640a 3024w" class="portrait" alt="" loading="lazy"> 1250 </div>
1251 <span class="property-list__label"> 1252 Sold 1253 </span> 1254 <div class="property-list__text"> 1255 <h4 class="serif">Bannockburn*</h4> 1256 <p> 1257 Lake Muskoka 1258 </p> 1259 <p> 1260 1261 </p> 1262 <h5 style="text-transform: capitalize"> 1263 $3,995,000 1264 </h5> 1265 </div> 1266 </a> 1267 1268 1269 <div class="property-list__hover"> 1270 <a href="/properties/bannockburn-1" class="hover-link"></a> 1271 <div class="property-list__buttons"> 1272 <a class="property-list__view" href="/properties/bannockburn-1" > 1273 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 1274 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 1275 </a> 1276 <div class="property-list__share"> 1277 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 1278 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 1279 <ul class="socials socials--block-dark"> 1280 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/bannockburn-1" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 1281 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/bannockburn-1&text=Bannockburn*" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 1282 <li><a href="/cdn-cgi/l/email-protection#26195553444c4345521b6447484849454d445354480c004449425f1b6447484849454d445354480c060b064e525256551c09094b53554d494d47454952524741435540495455474a430845494b09565449564354524f4355094447484849454d445354480b17" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 1283 </ul> 1284 </div> 1285 </div> 1286 </div> 1287 </li> 1288 <li class="property-list__item feature"> 1289 <a class="property-list__item-link" href="/properties/lake-rosseau-2" > 1290 <div class="property-list__img"> 1291 <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/02e0553e-9bfd-47a0-874c-b2817cc4e075" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/02e0553e-9bfd-47a0-874c-b2817cc4e075 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/02e0553e-9bfd-47a0-874c-b2817cc4e075 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/02e0553e-9bfd-47a0-874c-b2817cc4e075 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/02e0553e-9bfd-47a0-874c-b2817cc4e075 2560w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/02e0553e-9bfd-47a0-874c-b2817cc4e075 3200w" alt="" loading="lazy"> 1292 </div> 1293 <span class="property-list__label"> 1294 Sold 1295 </span> 1296 <div class="property-list__text"> 1297 <h4 class="serif">Southern Lake Rosseau</h4> 1298 <p> 1299 Lake Rosseau 1300 </p> 1301 <p> 1302 3 BD | 1303 3 BA 1304 1305 </p> 1306 <h5 style="text-transform: capitalize"> 1307 $3,989,000 1308 </h5> 1309 </div> 1310 </a> 1311 1312 1313 <div class="property-list__hover"> 1314 <a href="/properties/lake-rosseau-2" class="hover-link"></a> 1315 <div class="property-list__buttons"> 1316 <a class="property-list__view" href="/properties/lake-rosseau-2" > 1317 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 1318 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 1319 </a> 1320 <div class="property-list__share"> 1321 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 1322 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 1323 <ul class="socials socials--block-dark"> 1324 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/lake-rosseau-2" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 1325 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/lake-rosseau-2&text=Southern Lake Rosseau" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 1326 <li><a href="/cdn-cgi/l/email-protection#635c101601090600175e300c16170b06110d432f02080643310c101006021645010c071a5e300c16170b06110d432f02080643310c1010060216434e430b17171310594c4c0e1610080c0802000c171
1326702040610050c1110020f064d000c0e4c13110c130611170a06104c0f0208064e110c10100602164e51" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 1327 </ul> 1328 </div> 1329 </div> 1330 </div> 1331 </li> 1332 <li class="property-list__item feature"> 1333 <a class="property-list__item-link" href="/properties/lake-joe-club" > 1334 <div class="property-list__img"> 1335 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/0e9ead28-56c2-4fe0-8b0c-d136a70d99eb" alt="" loading="lazy"> 1336 </div> 1337 <span class="property-list__label"> 1338 Sold 1339 </span> 1340 <div class="property-list__text"> 1341 <h4 class="serif">Lake Joe Club*</h4> 1342 <p> 1343 Lake Joe Club 1344 </p> 1345 <p> 1346 1347 </p> 1348 <h5 style="text-transform: capitalize"> 1349 $3,895,000 1350 </h5> 1351 </div> 1352 </a> 1353 1354 1355 <div class="property-list__hover"> 1356 <a href="/properties/lake-joe-club" class="hover-link"></a> 1357 <div class="property-list__buttons"> 1358 <a class="property-list__view" href="/properties/lake-joe-club" > 1359 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 1360 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 1361 </a> 1362 <div class="property-list__share"> 1363 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 1364 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 1365 <ul class="socials socials--block-dark"> 1366 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/lake-joe-club" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 1367 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/lake-joe-club&text=Lake Joe Club*" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 1368 <li><a href="/cdn-cgi/l/email-protection#7a45090f18101f190e47361b111f5a30151f5a39160f18505c18151e0347361b111f5a30151f5a39160f18505a575a120e0e0a09405555170f091115111b19150e0e1b1d1f091c1508091b161f54191517550a08150a1f080e131f0955161b111f5710151f5719160f18" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 1369 </ul> 1370 </div> 1371 </div> 1372 </div> 1373 </li> 1374 <li class="property-list__item feature"> 1375 <a class="property-list__item-link" href="/properties/muskadasa-island" > 1376 <div class="property-list__img"> 1377 <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/ebe6465c-2c5a-449f-8285-d0b030e1e703" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/ebe6465c-2c5a-449f-8285-d0b030e1e703 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/ebe6465c-2c5a-449f-8285-d0b030e1e703 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/ebe6465c-2c5a-449f-8285-d0b030e1e703 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/ebe6465c-2c5a-449f-8285-d0b030e1e703 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/ebe6465c-2c5a-449f-8285-d0b030e1e703 3456w" alt="" loading="lazy"> 1378 </div>
1379 <span class="property-list__label"> 1380 Sold 1381 </span> 1382 <div class="property-list__text"> 1383 <h4 class="serif">Muskadasa Island*</h4> 1384 <p> 1385 Lake Muskoka 1386 </p> 1387 <p> 1388 1389 </p> 1390 <h5 style="text-transform: capitalize"> 1391 $3,499,000 1392 </h5> 1393 </div> 1394 </a> 1395 1396 1397 <div class="property-list__hover"> 1398 <a href="/properties/muskadasa-island" class="hover-link"></a> 1399 <div class="property-list__buttons"> 1400 <a class="property-list__view" href="/properties/muskadasa-island" > 1401 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 1402 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 1403 </a> 1404 <div class="property-list__share"> 1405 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 1406 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 1407 <ul class="socials socials--block-dark"> 1408 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/muskadasa-island" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 1409 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/muskadasa-island&text=Muskadasa Island*" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 1410 <li><a href="/cdn-cgi/l/email-protection#300f4345525a5553440d7d45435b51545143511079435c515e541a16525f54490d7d45435b51545143511079435c515e541a101d1058444440430a1f1f5d45435b5f5b51535f444451575543565f4243515c551e535f5d1f40425f405542445955431f5d45435b51545143511d59435c515e54" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 1411 </ul> 1412 </div> 1413 </div> 1414 </div> 1415 </li> 1416 <li class="property-list__item feature"> 1417 <a class="property-list__item-link" href="/properties/lake-muskoka-3" > 1418 <div class="property-list__img"> 1419 <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/f472f0e2-1243-43fc-87cc-8c4e0ac28aae" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/f472f0e2-1243-43fc-87cc-8c4e0ac28aae 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/f472f0e2-1243-43fc-87cc-8c4e0ac28aae 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/f472f0e2-1243-43fc-87cc-8c4e0ac28aae 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/f472f0e2-1243-43fc-87cc-8c4e0ac28aae 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/f472f0e2-1243-43fc-87cc-8c4e0ac28aae 3456w" alt="" loading="lazy"> 1420 </div> 1421 <span class="property-list__label"> 1422 Sold 1423 </span> 1424 <div class="property-list__text"> 1425 <h4 class="serif">Bala Bay</h4> 1426 <p> 1427 Lake Muskoka 1428 </p> 1429 <p> 1430 3 BD | 1431 3 BA 1432 | 1433 3,098 Sq.Ft. 1434 </p> 1435 <h5 style="text-transform: capitalize"> 1436 $3,495,000 1437 </h5> 1438 </div> 1439 </a> 1440 1441 1442 <div class="property-list__hover"> 1443 <a href="/properties/lake-muskoka-3" class="hover-link"></a> 1444 <div class="property-list__buttons"> 1445 <a class="property-list__view" href="/properties/lake-muskoka-3" > 1446 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 1447 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 1448 </a> 1449 <div class="property-list__share"> 1450 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 1451 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 1452 <ul class="socials socials--block-dark"> 1453 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/lake-muskoka-3" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 1454 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/lake-muskoka-3&text=Bala Bay" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 1455 <li><a href="/cdn-cgi/l/email-protection#5a65292f38303f392e67183b363b7a183b237c38353e2367183b363b7a183b237a777a322e2e2a29607575372f293135313b39352e2e3b3d3f293c3528293b363f74393537752a28352a3f282e333f2975363b313f77372f293135313b7769" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 1456 </ul> 1457 </div> 1458 </div> 1459 </div> 1460 </li> 1461 </ul> 1462 <div class="empty-result" style="display: none"> 1463 <h3>No Results Found. Please Try Another Search.</h3> 1464 </div> 1465 <div class="lp-pagination pagination-container pagination-style-2"></div> 1466 </div> 1467 </div> 1468</div> 1469 1470</section> 1471<section id="section-f0bc03e3-e280-4c80-b233-d55eb7df478e" class="solid-section is-font-color-dark is-background-color-dark" data-el-id="aeaf061e-5cc8-4b4a-9963-23f50ba3820f">
vendor: 109 bytes, lines 1471-1472
1471 1472<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
1472<script type="text/x-handlebars-template" class="gridItem pagination-script"><li class="property-list__item feature"> 1473 <a class="property-list__item-link" href="{{#if fromMLS}}/home-search/listings/{{id}}{{^}}/properties/{{slug}}{{/if}}" {{#if fromMLS}} data-turbolinks="false" {{/if}}> 1474 <div class="property-list__img"> 1475 {{{mediaImage media.[0]}}} 1476 {{#if openHouseHours}} 1477 <div class="open-house label-house bf1">Open House: {{openHouseHours}}</div> 1478 {{/if}} 1479 </div> 1480 <span class="property-list__label"> 1481 {{formatPropertyStatus status false (hbFormatDate soldDate)}} 1482 </span> 1483 <div class="property-list__text"> 1484 <h4 class="serif">{{name}}</h4> 1485 {{#if privateAddress}} 1486 <p> 1487 Call for Address 1488 </p> 1489 {{else}} 1490 {{#if fullAddress}} 1491 <p> 1492 {{fullAddress}} 1493 </p> 1494 {{else}} 1495 <p> 1496 Call For Address 1497 </p> 1498 {{/if}} 1499 {{/if}} 1500 <p> 1501 {{#if bedroomCount}} 1502 {{bedroomCount}} BD | 1503 {{else}} 1504 {{#ifIn "daf8aaa2-8b6f-4f2d-a324-754e0316d2b6" (JSONstringify types)}} 1505 {{#ifEquals bedroomCount 0}} 1506 Studio | 1507 {{/ifEquals}} 1508 {{else}} 1509 {{#ifIn "dea9daeb-4eb9-4bd8-8380-1a5c9384e817" (JSONstringify types)}} 1510 {{#ifEquals bedroomCount 0}} 1511 Studio | 1512 {{/ifEquals}} 1513 {{else}} 1514 {{#ifIn "d6b17d8b-a7a2-4de5-95c0-c2783b26de7a" (JSONstringify types)}} 1515 {{#ifEquals bedroomCount 0}} 1516 Studio | 1517 {{/ifEquals}} 1518 {{else}} 1519 {{#ifIn "9ac67b4b-bf76-4e0d-999e-701908f8f9ab" (JSONstringify types)}} 1520 {{#ifEquals bedroomCount 0}} 1521 Studio | 1522 {{/ifEquals}} 1523 {{else}} 1524 {{#ifIn "9a70fec3-5946-4d04-9acb-74d98781f636" (JSONstringify types)}} 1525 {{#ifEquals bedroomCount 0}} 1526 Studio | 1527 {{/ifEquals}} 1528 {{else}} 1529 {{#ifIn "c68279bc-2904-4ab8-9e84-42ecf6af008c" (JSONstringify types)}} 1530 {{#ifEquals bedroomCount 0}} 1531 Studio | 1532 {{/ifEquals}} 1533 {{/ifIn}} 1534 {{/ifIn}} 1535 {{/ifIn}} 1536 {{/ifIn}} 1537 {{/ifIn}} 1538 {{/ifIn}} 1539 {{/if}} 1540 {{#if bathCount}} 1541 {{bathCount}} BA 1542 {{#if livingSpaceSize}} 1543 | 1544 {{/if}} 1545 {{/if}} 1546 {{#ifIn "2c63593e-4869-41f8-bc78-03fa80e24580" (JSONstringify types)}} 1547 {{#if lotAreaSize}} {{lpFormatNumber lotAreaSize}} {{formatAreaUnit lotAreaUnits}}{{/if}} 1548 {{else}} 1549 {{#if livingSpaceSize}} {{lpFormatNumber livingSpaceSize}} {{formatAreaUnit livingSpaceUnits}}{{/if}} 1550 {{/ifIn}} 1551 </p> 1552 <h5 style="text-transform: capitalize"> 1553 {{formatPropertyPrice this}} 1554 </h5> 1555 </div> 1556 </a> 1557 1558 1559 <div class="property-list__hover"> 1560 <a href="{{#if fromMLS}}/home-search/listings/{{id}}{{^}}/properties/{{slug}}{{/if}}" {{#if fromMLS}} data-turbolinks="false" {{/if}} class="hover-link"></a> 1561 <div class="property-list__buttons"> 1562 <a class="property-list__view" href="{{#if fromMLS}}/home-search/listings/{{id}}{{^}}/properties/{{slug}}{{/if}}" {{#if fromMLS}} data-turbolinks="false" {{/if}}> 1563 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 1564 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 1565 </a> 1566 <div class="property-list__share"> 1567 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 1568 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 1569 <ul class="socials socials--block-dark"> 1570 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/{{slug}}" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 1571 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/{{slug}}&text={{name}}" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 1572 <li><a href="mailto:?subject={{name}}&body={{name}} - https://muskokacottagesforsale.com/properties/{{slug}}" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 1573 </ul> 1574 </div> 1575 </div> 1576 </div> 1577</li> 1578</script>
1578 1579<div class="redesign property-list-section"> 1580 <div> 1581 <div class="container"> 1582 <ul class="property-list data-container"> 1583 <li class="property-list__item feature"> 1584 <a class="property-list__item-link" href="/properties/windrush" > 1585 <div class="property-list__img"> 1586 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/f22eb155-5e32-4fc4-9d9a-01b97bba1441" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/f22eb155-5e32-4fc4-9d9a-01b97bba1441 960w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/f22eb155-5e32-4fc4-9d9a-01b97bba1441 1024w" alt="" loading="lazy"> 1587 </div> 1588 <span class="property-list__label"> 1589 Sold 1590 </span> 1591 <div class="property-list__text"> 1592 <h4 class="serif">âWindrushâ**</h4> 1593 <p> 1594 Lake Rosseau 1595 </p> 1596 <p> 1597 1598 </p> 1599 <h5 style="text-transform: capitalize"> 1600 $13,779,000 1601 </h5> 1602 </div> 1603 </a> 1604 1605 1606 <div class="property-list__hover"> 1607 <a href="/properties/windrush" class="hover-link"></a> 1608 <div class="property-list__buttons"> 1609 <a class="property-list__view" href="/properties/windrush" > 1610 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 1611 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 1612 </a> 1613 <div class="property-list__share"> 1614 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 1615 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 1616 <ul class="socials socials--block-dark"> 1617 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/windrush" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 1618 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/windrush&text=âWindrushâ**" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 1619 <li><a href="/cdn-cgi/l/email-protection#95aae6e0f7fff0f6e1a8771509c2fcfbf1e7e0e6fd771508bfbfb3f7faf1eca8771509c2fcfbf1e7e0e6fd771508bfbfb5b8b5fde1e1e5e6afbabaf8e0e6fefafef4f6fae1e1f4f2f0e6f3fae7e6f4f9f0bbf6faf8bae5e7fae5f0e7e1fcf0e6bae2fcfbf1e7e0e6fd" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 1620 </ul> 1621 </div> 1622 </div> 1623 </div> 1624 </li> 1625 <li class="property-list__item feature"> 1626 <a class="property-list__item-link" href="/properties/north-lake-joseph-1" > 1627 <div class="property-list__img"> 1628 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/f9b75312-e689-457a-b641-e5f6594da771" alt="" loading="lazy"> 1629 </div> 1630 <span class="property-list__label"> 1631 Sold 1632 </span> 1633 <div class="property-list__text"> 1634 <h4 class="serif">North Lake Joseph*</h4> 1635 <p> 1636 Lake Joseph 1637 </p> 1638 <p> 1639 1640 </p> 1641 <h5 style="text-transform: capitalize"> 1642 $10,900,000 1643 </h5> 1644 </div> 1645 </a> 1646 1647 1648 <div class="property-list__hover"> 1649 <a href="/properties/north-lake-joseph-1" class="hover-link"></a> 1650 <div class="property-list__buttons"> 1651 <a class="property-list__view" href="/properties/north-lake-joseph-1" > 1652 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 1653 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 1654 </a> 1655 <div class="property-list__share"> 1656 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 1657 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 1658 <ul class="socials socials--block-dark"> 1659 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/north-lake-joseph-1" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 1660 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/north-lake-joseph-1&text=North Lake Joseph*" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 1661 <li><a href="/cdn-cgi/l/email-protection#ecd39f998e86898f98d1a2839e9884cca08d8789cca6839f899c84c6ca8e838895d1a2839e9884cca08d8789cca6839f899c84c6ccc1cc8498989c9fd6c3c381999f8783878d8f8398988d8b899f8a839e9f8d8089c28f8381c39c9e839c899e9885899fc382839e9884c1808d8789c186839f899c84c1dd" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 1662 </ul> 1663 </div> 1664 </div> 1665 </div> 1666 </li> 1667 <li class="property-list__item feature"> 1668 <a class="property-list__item-link" href="/properties/lake-joseph-2" > 1669 <div class="property-list__img"> 1670 <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/27c5d4f4-8444-4967-8360-4c5548135b1d" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/27c5d4f4-8444-4967-8360-4c5548135b1d 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/27c5d4f4-8444-4967-8360-4c5548135b1d 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/27c5d4f4-8444-4967-8360-4c5548135b1d 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/27c5d4f4-8444-4967-8360-4c5548135b1d 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/27c5d4f4-8444-4967-8360-4c5548135b1d 3456w" alt="" loading="lazy"> 1671 </div>
1672 <span class="property-list__label"> 1673 Sold 1674 </span> 1675 <div class="property-list__text"> 1676 <h4 class="serif">South Lake Joseph</h4> 1677 <p> 1678 Lake Joseph 1679 </p> 1680 <p> 1681 8 BD | 1682 7 BA 1683 | 1684 3,936 Sq.Ft. 1685 </p> 1686 <h5 style="text-transform: capitalize"> 1687 $9,890,000 1688 </h5> 1689 </div> 1690 </a> 1691 1692 1693 <div class="property-list__hover"> 1694 <a href="/properties/lake-joseph-2" class="hover-link"></a> 1695 <div class="property-list__buttons"> 1696 <a class="property-list__view" href="/properties/lake-joseph-2" > 1697 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 1698 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 1699 </a> 1700 <div class="property-list__share"> 1701 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 1702 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 1703 <ul class="socials socials--block-dark"> 1704 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/lake-joseph-2" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 1705 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/lake-joseph-2&text=South Lake Joseph" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 1706 <li><a href="/cdn-cgi/l/email-protection#c1feb2b4a3aba4a2b5fc92aeb4b5a9e18da0aaa4e18baeb2a4b1a9e7a3aea5b8fc92aeb4b5a9e18da0aaa4e18baeb2a4b1a9e1ece1a9b5b5b1b2fbeeeeacb4b2aaaeaaa0a2aeb5b5a0a6a4b2a7aeb3b2a0ada4efa2aeaceeb1b3aeb1a4b3b5a8a4b2eeada0aaa4ecabaeb2a4b1a9ecf3" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 1707 </ul> 1708 </div> 1709 </div> 1710 </div> 1711 </li> 1712 <li class="property-list__item feature"> 1713 <a class="property-list__item-link" href="/properties/ranwood" > 1714 <div class="property-list__img"> 1715 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/a99b8585-70b9-4fca-9dc6-f8124b7cc0a7" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/a99b8585-70b9-4fca-9dc6-f8124b7cc0a7 960w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/a99b8585-70b9-4fca-9dc6-f8124b7cc0a7 1024w" alt="" loading="lazy"> 1716 </div> 1717 <span class="property-list__label"> 1718 Sold 1719 </span> 1720 <div class="property-list__text"> 1721 <h4 class="serif">Ranwood</h4> 1722 <p> 1723 Lake Muskoka 1724 </p> 1725 <p> 1726 1727 </p> 1728 <h5 style="text-transform: capitalize"> 1729 $9,850,000 1730 </h5> 1731 </div> 1732 </a> 1733 1734 1735 <div class="property-list__hover"> 1736 <a href="/properties/ranwood" class="hover-link"></a> 1737 <div class="property-list__buttons"> 1738 <a class="property-list__view" href="/properties/ranwood" > 1739 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 1740 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 1741 </a> 1742 <div class="property-list__share"> 1743 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 1744 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 1745 <ul class="socials socials--block-dark"> 1746 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/ranwood" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 1747 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/ranwood&text=Ranwood" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 1748 <li><a href="/cdn-cgi/l/email-protection#f4cb8781969e919780c9a6959a839b9b90d2969b908dc9a6959a839b9b90d4d9d49c80808487cedbdb9981879f9b9f95979b808095939187929b8
1748687959891da979b99db84869b849186809d9187db86959a839b9b90" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 1749 </ul> 1750 </div> 1751 </div> 1752 </div> 1753 </li> 1754 <li class="property-list__item feature"> 1755 <a class="property-list__item-link" href="/properties/lake-rosseau" > 1756 <div class="property-list__img"> 1757 <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/897fd82c-2c97-4af0-838a-b6c1864cdce7" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/897fd82c-2c97-4af0-838a-b6c1864cdce7 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/897fd82c-2c97-4af0-838a-b6c1864cdce7 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/897fd82c-2c97-4af0-838a-b6c1864cdce7 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/897fd82c-2c97-4af0-838a-b6c1864cdce7 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/897fd82c-2c97-4af0-838a-b6c1864cdce7 3456w" alt="" loading="lazy"> 1758 </div> 1759 <span class="property-list__label"> 1760 Sold 1761 </span> 1762 <div class="property-list__text"> 1763 <h4 class="serif">Shamrock Road**</h4> 1764 <p> 1765 Lake Rosseau 1766 </p> 1767 <p> 1768 5 BD | 1769 6 BA 1770 | 1771 4,509 Sq.Ft. 1772 </p> 1773 <h5 style="text-transform: capitalize"> 1774 $8,989,000 1775 </h5> 1776 </div> 1777 </a> 1778 1779 1780 <div class="property-list__hover"> 1781 <a href="/properties/lake-rosseau" class="hover-link"></a> 1782 <div class="property-list__buttons"> 1783 <a class="property-list__view" href="/properties/lake-rosseau" > 1784 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 1785 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 1786 </a> 1787 <div class="property-list__share"> 1788 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 1789 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 1790 <ul class="socials socials--block-dark"> 1791 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/lake-rosseau" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 1792 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/lake-rosseau&text=Shamrock Road**" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 1793 <li><a href="/cdn-cgi/l/email-protection#516e2224333b3432256c0239303c233e323a71033e30357b7b77333e35286c0239303c233e323a71033e30357b7b717c7139252521226b7e7e3c24223a3e3a30323e252530363422373e2322303d347f323e3c7e21233e213423253834227e3d303a347c233e2222343024" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 1794 </ul> 1795 </div> 1796 </div> 1797 </div> 1798 </li> 1799 <li class="property-list__item feature"> 1800 <a class="property-list__item-link" href="/properties/mortimers-point" > 1801 <div class="property-list__img"> 1802 <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/b9fa2d84-cf46-4580-b38c-3b7f17195b43" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/b9fa2d84-cf46-4580-b38c-3b7f17195b43 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/b9fa2d84-cf46-4580-b38c-3b7f17195b43 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/b9fa2d84-cf46-4580-b38c-3b7f17195b43 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/b9fa2d84-cf46-4580-b38c-3b7f17195b43 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/b9fa2d84-cf46-4580-b38c-3b7f17195b43 3456w" alt="" loading="lazy"> 1803 </div>
1804 <span class="property-list__label"> 1805 Sold 1806 </span> 1807 <div class="property-list__text"> 1808 <h4 class="serif">Mortimerâs Point**</h4> 1809 <p> 1810 Lake Muskoka 1811 </p> 1812 <p> 1813 1814 </p> 1815 <h5 style="text-transform: capitalize"> 1816 $8,595,000 1817 </h5> 1818 </div> 1819 </a> 1820 1821 1822 <div class="property-list__hover"> 1823 <a href="/properties/mortimers-point" class="hover-link"></a> 1824 <div class="property-list__buttons"> 1825 <a class="property-list__view" href="/properties/mortimers-point" > 1826 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 1827 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 1828 </a> 1829 <div class="property-list__share"> 1830 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 1831 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 1832 <ul class="socials socials--block-dark"> 1833 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/mortimers-point" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 1834 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/mortimers-point&text=Mortimerâs Point**" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 1835 <li><a href="/cdn-cgi/l/email-protection#c4fbb7b1a6aea1a7b0f989abb6b0ada9a1b626445db7e494abadaab0eeeee2a6aba0bdf989abb6b0ada9a1b626445db7e494abadaab0eeeee4e9e4acb0b0b4b7feebeba9b1b7afabafa5a7abb0b0a5a3a1b7a2abb6b7a5a8a1eaa7aba9ebb4b6abb4a1b6b0ada1b7eba9abb6b0ada9a1b6b7e9b4abadaab0" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 1836 </ul> 1837 </div> 1838 </div> 1839 </div> 1840 </li> 1841 <li class="property-list__item feature"> 1842 <a class="property-list__item-link" href="/properties/lake-joseph-1" > 1843 <div class="property-list__img"> 1844 <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/c6bfa57e-07a3-4598-b889-83079d5b9b43" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/c6bfa57e-07a3-4598-b889-83079d5b9b43 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/c6bfa57e-07a3-4598-b889-83079d5b9b43 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/c6bfa57e-07a3-4598-b889-83079d5b9b43 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/c6bfa57e-07a3-4598-b889-83079d5b9b43 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/c6bfa57e-07a3-4598-b889-83079d5b9b43 3456w" alt="" loading="lazy"> 1845 </div> 1846 <span class="property-list__label"> 1847 Sold 1848 </span> 1849 <div class="property-list__text"> 1850 <h4 class="serif">Avon Bay</h4> 1851 <p> 1852 Lake Joseph 1853 </p> 1854 <p> 1855 6 BD | 1856 5 BA 1857 1858 </p> 1859 <h5 style="text-transform: capitalize"> 1860 $8,539,000 1861 </h5> 1862 </div> 1863 </a> 1864 1865 1866 <div class="property-list__hover"> 1867 <a href="/properties/lake-joseph-1" class="hover-link"></a> 1868 <div class="property-list__buttons"> 1869 <a class="property-list__view" href="/properties/lake-joseph-1" > 1870 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 1871 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 1872 </a> 1873 <div class="property-list__share"> 1874 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 1875 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 1876 <ul class="socials socials--block-dark"> 1877 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/lake-joseph-1" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 1878 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/lake-joseph-1&text=Avon Bay" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 1879 <li><a href="/cdn-cgi/l/email-protection#645b1711060e0107105925120b0a4426051d42060b001d5925120b0a4426051d4449440c101014175e4b4b0911170f0b0f05070b101005030117020b16170508014a070b094b14160b140116100d01174b08050f01490e0b1701140c4955" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 1880 </ul> 1881 </div> 1882 </div> 1883 </div> 1884 </li> 1885 <li class="property-list__item feature"> 1886 <a class="property-list__item-link" href="/properties/little-lake-joseph" > 1887 <div class="property-list__img"> 1888 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/77c134f5-bea2-4bed-8972-001320a05be0" alt="" loading="lazy"> 1889 </div>
1890 <span class="property-list__label"> 1891 Sold 1892 </span> 1893 <div class="property-list__text"> 1894 <h4 class="serif">Little Lake Joseph*</h4> 1895 <p> 1896 Lake Joseph 1897 </p> 1898 <p> 1899 1900 </p> 1901 <h5 style="text-transform: capitalize"> 1902 $6,950,000 1903 </h5> 1904 </div> 1905 </a> 1906 1907 1908 <div class="property-list__hover"> 1909 <a href="/properties/little-lake-joseph" class="hover-link"></a> 1910 <div class="property-list__buttons"> 1911 <a class="property-list__view" href="/properties/little-lake-joseph" > 1912 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 1913 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 1914 </a> 1915 <div class="property-list__share"> 1916 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 1917 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 1918 <ul class="socials socials--block-dark"> 1919 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/little-lake-joseph" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 1920 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/little-lake-joseph&text=Little Lake Joseph*" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 1921 <li><a href="/cdn-cgi/l/email-protection#36094543545c5355420b7a5f42425a53167a575d53167c594553465e1c105459524f0b7a5f42425a53167a575d53167c594553465e1c161b165e424246450c19195b43455d595d57555942425751534550594445575a531855595b19464459465344425f5345195a5f42425a531b5a575d531b5c594553465e" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 1922 </ul> 1923 </div> 1924 </div> 1925 </div> 1926 </li> 1927 <li class="property-list__item feature"> 1928 <a class="property-list__item-link" href="/properties/heather-lodge" > 1929 <div class="property-list__img"> 1930 <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/d23c6568-2d17-49f0-ad2c-0db45e81d145" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/d23c6568-2d17-49f0-ad2c-0db45e81d145 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/d23c6568-2d17-49f0-ad2c-0db45e81d145 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/d23c6568-2d17-49f0-ad2c-0db45e81d145 1621w" alt="" loading="lazy"> 1931 </div> 1932 <span class="property-list__label"> 1933 Sold 1934 </span> 1935 <div class="property-list__text"> 1936 <h4 class="serif">Heather Lodge</h4> 1937 <p> 1938 Lake Muskoka 1939 </p> 1940 <p> 1941 1942 </p> 1943 <h5 style="text-transform: capitalize"> 1944 $6,495,000 1945 </h5> 1946 </div> 1947 </a> 1948 1949 1950 <div class="property-list__hover"> 1951 <a href="/properties/heather-lodge" class="hover-link"></a> 1952 <div class="property-list__buttons"> 1953 <a class="property-list__view" href="/properties/heather-lodge" > 1954 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 1955 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 1956 </a> 1957 <div class="property-list__share"> 1958 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 1959 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 1960 <ul class="socials socials--block-dark"> 1961 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/heather-lodge" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 1962 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/heather-lodge&text=Heather Lodge" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 1963 <li><a href="/cdn-cgi/l/email-protection#fdc28e889f97989e89c0b5989c8995988fddb192999a98db9f929984c0b5989c8995988fddb192999a98ddd0dd9589898d8ec7d2d290888e9692969c9e9289899c9a988e9b928f8e9c9198d39e9290d28d8f928d988f8994988ed295989c8995988fd09192999a98" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 1964 </ul> 1965 </div> 1966 </div> 1967 </div> 1968 </li> 1969 <li class="property-list__item feature"> 1970 <a class="property-list__item-link" href="/properties/pennwood" > 1971 <div class="property-list__img"> 1972 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/3511ab60-9b8f-4aa0-9fb4-b816eba5eb59" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/3511ab60-9b8f-4aa0-9fb4-b816eba5eb59 960w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/3511ab60-9b8f-4aa0-9fb4-b816eba5eb59 999w" alt="" loading="lazy"> 1973 </div>
1974 <span class="property-list__label"> 1975 Sold 1976 </span> 1977 <div class="property-list__text"> 1978 <h4 class="serif">Pennwood**</h4> 1979 <p> 1980 Lake Muskoka 1981 </p> 1982 <p> 1983 1984 </p> 1985 <h5 style="text-transform: capitalize"> 1986 $6,150,000 1987 </h5> 1988 </div> 1989 </a> 1990 1991 1992 <div class="property-list__hover"> 1993 <a href="/properties/pennwood" class="hover-link"></a> 1994 <div class="property-list__buttons"> 1995 <a class="property-list__view" href="/properties/pennwood" > 1996 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 1997 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 1998 </a> 1999 <div class="property-list__share"> 2000 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 2001 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 2002 <ul class="socials socials--block-dark"> 2003 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/pennwood" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 2004 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/pennwood&text=Pennwood**" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 2005 <li><a href="/cdn-cgi/l/email-protection#f7c88482959d929483caa792999980989893ddddd19598938ecaa792999980989893ddddd7dad79f83838784cdd8d89a82849c989c96949883839690928491988584969b92d994989ad8878598879285839e9284d88792999980989893" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 2006 </ul> 2007 </div> 2008 </div> 2009 </div> 2010 </li> 2011 <li class="property-list__item feature"> 2012 <a class="property-list__item-link" href="/properties/lake-joe-club" > 2013 <div class="property-list__img"> 2014 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/0e9ead28-56c2-4fe0-8b0c-d136a70d99eb" alt="" loading="lazy"> 2015 </div> 2016 <span class="property-list__label"> 2017 Sold 2018 </span> 2019 <div class="property-list__text"> 2020 <h4 class="serif">Lake Joe Club*</h4> 2021 <p> 2022 Lake Joe Club 2023 </p> 2024 <p> 2025 2026 </p> 2027 <h5 style="text-transform: capitalize"> 2028 $3,895,000 2029 </h5> 2030 </div> 2031 </a> 2032 2033 2034 <div class="property-list__hover"> 2035 <a href="/properties/lake-joe-club" class="hover-link"></a> 2036 <div class="property-list__buttons"> 2037 <a class="property-list__view" href="/properties/lake-joe-club" > 2038 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 2039 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 2040 </a> 2041 <div class="property-list__share"> 2042 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 2043 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 2044 <ul class="socials socials--block-dark"> 2045 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/lake-joe-club" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 2046 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/lake-joe-club&text=Lake Joe Club*" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 2047 <li><a href="/cdn-cgi/l/email-protection#a798d4d2c5cdc2c4d39aebc6ccc287edc8c287e4cbd2c58d81c5c8c3de9aebc6ccc287edc8c287e4cbd2c58d878a87cfd3d3d7d49d8888cad2d4ccc8ccc6c4c8d3d3c6c0c2d4c1c8d5d4c6cbc289c4c8ca88d7d5c8d7c2d5d3cec2d488cbc6ccc28acdc8c28ac4cbd2c5" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 2048 </ul> 2049 </div> 2050 </div> 2051 </div> 2052 </li> 2053 <li class="property-list__item feature"> 2054 <a class="property-list__item-link" href="/properties/riverdale" > 2055 <div class="property-list__img"> 2056 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/8234c5de-f2b2-431d-a2e8-46edf70359f5" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/8234c5de-f2b2-431d-a2e8-46edf70359f5 960w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/8234c5de-f2b2-431d-a2e8-46edf70359f5 1024w" alt="" loading="lazy"> 2057 </div>
2058 <span class="property-list__label"> 2059 Sold 2060 </span> 2061 <div class="property-list__text"> 2062 <h4 class="serif">Riverdale**</h4> 2063 <p> 2064 Lake Joseph 2065 </p> 2066 <p> 2067 2068 </p> 2069 <h5 style="text-transform: capitalize"> 2070 $4,999,999 2071 </h5> 2072 </div> 2073 </a> 2074 2075 2076 <div class="property-list__hover"> 2077 <a href="/properties/riverdale" class="hover-link"></a> 2078 <div class="property-list__buttons"> 2079 <a class="property-list__view" href="/properties/riverdale" > 2080 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 2081 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 2082 </a> 2083 <div class="property-list__share"> 2084 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 2085 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 2086 <ul class="socials socials--block-dark"> 2087 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/riverdale" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 2088 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/riverdale&text=Riverdale**" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 2089 <li><a href="/cdn-cgi/l/email-protection#a09fd3d5c2cac5c3d49df2c9d6c5d2c4c1ccc58a8a86c2cfc4d99df2c9d6c5d2c4c1ccc58a8a808d80c8d4d4d0d39a8f8fcdd5d3cbcfcbc1c3cfd4d4c1c7c5d3c6cfd2d3c1ccc58ec3cfcd8fd0d2cfd0c5d2d4c9c5d38fd2c9d6c5d2c4c1ccc5" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 2090 </ul> 2091 </div> 2092 </div> 2093 </div> 2094 </li> 2095 <li class="property-list__item feature"> 2096 <a class="property-list__item-link" href="/properties/glencoe-heights" > 2097 <div class="property-list__img"> 2098 <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/b4ed9010-b900-46b6-a867-e15b8dacbaec" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/b4ed9010-b900-46b6-a867-e15b8dacbaec 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/b4ed9010-b900-46b6-a867-e15b8dacbaec 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/b4ed9010-b900-46b6-a867-e15b8dacbaec 1299w" alt="" loading="lazy"> 2099 </div> 2100 <span class="property-list__label"> 2101 Sold 2102 </span> 2103 <div class="property-list__text"> 2104 <h4 class="serif">Glencoe Heights**</h4> 2105 <p> 2106 Lake Joseph 2107 </p> 2108 <p> 2109 2110 </p> 2111 <h5 style="text-transform: capitalize"> 2112 $4,879,000 2113 </h5> 2114 </div> 2115 </a> 2116 2117 2118 <div class="property-list__hover"> 2119 <a href="/properties/glencoe-heights" class="hover-link"></a> 2120 <div class="property-list__buttons"> 2121 <a class="property-list__view" href="/properties/glencoe-heights" > 2122 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 2123 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 2124 </a> 2125 <div class="property-list__share"> 2126 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 2127 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 2128 <ul class="socials socials--block-dark"> 2129 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/glencoe-heights" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 2130 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/glencoe-heights&text=Glencoe Heights**" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 2131 <li><a href="/cdn-cgi/l/email-protection#f4cb8781969e919780c9b398919a979b91d4bc919d939c8087deded2969b908dc9b398919a979b91d4bc919d939c8087deded4d9d49c80808487cedbdb9981879f9b9f95979b808095939187929b8
2131687959891da979b99db84869b849186809d9187db9398919a979b91d99c919d939c8087" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 2132 </ul> 2133 </div> 2134 </div> 2135 </div> 2136 </li> 2137 <li class="property-list__item feature"> 2138 <a class="property-list__item-link" href="/properties/southern-lake-rosseau" > 2139 <div class="property-list__img"> 2140 <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/a3a4354e-649a-43c9-81f9-6dd22a4d6977" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/a3a4354e-649a-43c9-81f9-6dd22a4d6977 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/a3a4354e-649a-43c9-81f9-6dd22a4d6977 1280w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/a3a4354e-649a-43c9-81f9-6dd22a4d6977 1376w" alt="" loading="lazy"> 2141 </div> 2142 <span class="property-list__label"> 2143 Sold 2144 </span> 2145 <div class="property-list__text"> 2146 <h4 class="serif">Southern Lake Rosseau*</h4> 2147 <p> 2148 Lake Rosseau 2149 </p> 2150 <p> 2151 2152 </p> 2153 <h5 style="text-transform: capitalize"> 2154 $4,395,000 2155 </h5> 2156 </div> 2157 </a> 2158 2159 2160 <div class="property-list__hover"> 2161 <a href="/properties/southern-lake-rosseau" class="hover-link"></a> 2162 <div class="property-list__buttons"> 2163 <a class="property-list__view" href="/properties/southern-lake-rosseau" > 2164 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 2165 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 2166 </a> 2167 <div class="property-list__share"> 2168 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 2169 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 2170 <ul class="socials socials--block-dark"> 2171 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/southern-lake-rosseau" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 2172 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/southern-lake-rosseau&text=Southern Lake Rosseau*" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 2173 <li><a href="/cdn-cgi/l/email-protection#8fb0fcfaede5eaecfbb2dce0fafbe7eafde1afc3eee4eaafdde0fcfceaeefaa5a9ede0ebf6b2dce0fafbe7eafde1afc3eee4eaafdde0fcfceaeefaa5afa2afe7fbfbfffcb5a0a0e2fafce4e0e4eeece0fbfbeee8eafce9e0fdfceee3eaa1ece0e2a0fffde0ffeafdfbe6eafca0fce0fafbe7eafde1a2e3eee4eaa2fde0fcfceaeefa" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 2174 </ul> 2175 </div> 2176 </div> 2177 </div> 2178 </li> 2179 <li class="property-list__item feature"> 2180 <a class="property-list__item-link" href="/properties/hemlock-point-8" > 2181 <div class="property-list__img"> 2182 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/a3fa031f-b28e-4a32-9bbc-87b0f77e681a" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/a3fa031f-b28e-4a32-9bbc-87b0f77e681a 960w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/a3fa031f-b28e-4a32-9bbc-87b0f77e681a 1280w" alt="" loading="lazy"> 2183 </div>
2184 <span class="property-list__label"> 2185 Sold 2186 </span> 2187 <div class="property-list__text"> 2188 <h4 class="serif">Hemlock Point</h4> 2189 <p> 2190 Lake Joseph 2191 </p> 2192 <p> 2193 2194 </p> 2195 <h5 style="text-transform: capitalize"> 2196 $3,995,000 2197 </h5> 2198 </div> 2199 </a> 2200 2201 2202 <div class="property-list__hover"> 2203 <a href="/properties/hemlock-point-8" class="hover-link"></a> 2204 <div class="property-list__buttons"> 2205 <a class="property-list__view" href="/properties/hemlock-point-8" > 2206 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 2207 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 2208 </a> 2209 <div class="property-list__share"> 2210 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 2211 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 2212 <ul class="socials socials--block-dark"> 2213 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/hemlock-point-8" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 2214 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/hemlock-point-8&text=Hemlock Point" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 2215 <li><a href="/cdn-cgi/l/email-protection#6f501c1a0d050a0c1b52270a0203000c044f3f0006011b490d000b1652270a0203000c044f3f0006011b4f424f071b1b1f1c554040021a1c0400040e0c001b1b0e080a1c09001d1c0e030a410c0002401f1d001f0a1d1b060a1c40070a0203000c04421f0006011b4257" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 2216 </ul> 2217 </div> 2218 </div> 2219 </div> 2220 </li> 2221 <li class="property-list__item feature"> 2222 <a class="property-list__item-link" href="/properties/acton-island-3" > 2223 <div class="property-list__img"> 2224 <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/19ddc163-1410-4fe1-873c-6bbb2864c1bf" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/19ddc163-1410-4fe1-873c-6bbb2864c1bf 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/19ddc163-1410-4fe1-873c-6bbb2864c1bf 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/19ddc163-1410-4fe1-873c-6bbb2864c1bf 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/19ddc163-1410-4fe1-873c-6bbb2864c1bf 2560w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/19ddc163-1410-4fe1-873c-6bbb2864c1bf 3024w" class="portrait" alt="" loading="lazy"> 2225 </div> 2226 <span class="property-list__label"> 2227 Sold 2228 </span> 2229 <div class="property-list__text"> 2230 <h4 class="serif">Acton Island*</h4> 2231 <p> 2232 Lake Muskoka 2233 </p> 2234 <p> 2235 2236 </p> 2237 <h5 style="text-transform: capitalize"> 2238 $2,895,000 2239 </h5> 2240 </div> 2241 </a> 2242 2243 2244 <div class="property-list__hover"> 2245 <a href="/properties/acton-island-3" class="hover-link"></a> 2246 <div class="property-list__buttons"> 2247 <a class="property-list__view" href="/properties/acton-island-3" > 2248 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 2249 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 2250 </a> 2251 <div class="property-list__share"> 2252 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 2253 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 2254 <ul class="socials socials--block-dark"> 2255 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/acton-island-3" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 2256 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/acton-island-3&text=Acton Island*" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 2257 <li><a href="/cdn-cgi/l/email-protection#b48bc7c1d6ded1d7c089f5d7c0dbda94fdc7d8d5dad09e92d6dbd0cd89f5d7c0dbda94fdc7d8d5dad09e949994dcc0c0c4c78e9b9bd9c1c7dfdbdfd5d7dbc0c0d5d3d1c7d2dbc6c7d5d8d19ad7dbd99bc4c6dbc4d1c6c0ddd1c79bd5d7c0dbda99ddc7d8d5dad09987" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 2258 </ul> 2259 </div> 2260 </div> 2261 </div> 2262 </li> 2263 <li class="property-list__item feature"> 2264 <a class="property-list__item-link" href="/properties/bannockburn-1" > 2265 <div class="property-list__img"> 2266 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=1280/https://media-production.lp-cdn.com/media/d3699264-ef19-4924-b36f-6d1c2037640a" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/d3699264-ef19-4924-b36f-6d1c2037640a 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/d3699264-ef19-4924-b36f-6d1c2037640a 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/d3699264-ef19-4924-b36f-6d1c2037640a 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/d3699264-ef19-4924-b36f-6d1c2037640a 2560w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/d3699264-ef19-4924-b36f-6d1c2037640a 3024w" class="portrait" alt="" loading="lazy"> 2267 </div>
2268 <span class="property-list__label"> 2269 Sold 2270 </span> 2271 <div class="property-list__text"> 2272 <h4 class="serif">Bannockburn*</h4> 2273 <p> 2274 Lake Muskoka 2275 </p> 2276 <p> 2277 2278 </p> 2279 <h5 style="text-transform: capitalize"> 2280 $3,995,000 2281 </h5> 2282 </div> 2283 </a> 2284 2285 2286 <div class="property-list__hover"> 2287 <a href="/properties/bannockburn-1" class="hover-link"></a> 2288 <div class="property-list__buttons"> 2289 <a class="property-list__view" href="/properties/bannockburn-1" > 2290 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 2291 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 2292 </a> 2293 <div class="property-list__share"> 2294 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 2295 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 2296 <ul class="socials socials--block-dark"> 2297 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/bannockburn-1" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 2298 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/bannockburn-1&text=Bannockburn*" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 2299 <li><a href="/cdn-cgi/l/email-protection#ab94d8dec9c1cec8df96e9cac5c5c4c8c0c9ded9c5818dc9c4cfd296e9cac5c5c4c8c0c9ded9c5818b868bc3dfdfdbd8918484c6ded8c0c4c0cac8c4dfdfcaccced8cdc4d9d8cac7ce85c8c4c684dbd9c4dbced9dfc2ced884c9cac5c5c4c8c0c9ded9c5869a" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 2300 </ul> 2301 </div> 2302 </div> 2303 </div> 2304 </li> 2305 <li class="property-list__item feature"> 2306 <a class="property-list__item-link" href="/properties/lake-rosseau-2" > 2307 <div class="property-list__img"> 2308 <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/02e0553e-9bfd-47a0-874c-b2817cc4e075" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/02e0553e-9bfd-47a0-874c-b2817cc4e075 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/02e0553e-9bfd-47a0-874c-b2817cc4e075 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/02e0553e-9bfd-47a0-874c-b2817cc4e075 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/02e0553e-9bfd-47a0-874c-b2817cc4e075 2560w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/02e0553e-9bfd-47a0-874c-b2817cc4e075 3200w" alt="" loading="lazy"> 2309 </div> 2310 <span class="property-list__label"> 2311 Sold 2312 </span> 2313 <div class="property-list__text"> 2314 <h4 class="serif">Southern Lake Rosseau</h4> 2315 <p> 2316 Lake Rosseau 2317 </p> 2318 <p> 2319 3 BD | 2320 3 BA 2321 2322 </p> 2323 <h5 style="text-transform: capitalize"> 2324 $3,989,000 2325 </h5> 2326 </div> 2327 </a> 2328 2329 2330 <div class="property-list__hover"> 2331 <a href="/properties/lake-rosseau-2" class="hover-link"></a> 2332 <div class="property-list__buttons"> 2333 <a class="property-list__view" href="/properties/lake-rosseau-2" > 2334 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 2335 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 2336 </a> 2337 <div class="property-list__share"> 2338 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 2339 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 2340 <ul class="socials socials--block-dark"> 2341 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/lake-rosseau-2" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 2342 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/lake-rosseau-2&text=Southern Lake Rosseau" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 2343 <li><a href="/cdn-cgi/l/email-protection#241b5751464e41475019774b51504c41564a04
234368454f4104764b575741455102464b405d19774b51504c41564a0468454f4104764b57574145510409044c505054571e0b0b4951574f4b4f45474b505045434157424b56574548410a474b490b54564b544156504d41570b48454f4109564b57574145510916" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 2344 </ul> 2345 </div> 2346 </div> 2347 </div> 2348 </li> 2349 <li class="property-list__item feature"> 2350 <a class="property-list__item-link" href="/properties/muskadasa-island" > 2351 <div class="property-list__img"> 2352 <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/ebe6465c-2c5a-449f-8285-d0b030e1e703" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/ebe6465c-2c5a-449f-8285-d0b030e1e703 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/ebe6465c-2c5a-449f-8285-d0b030e1e703 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/ebe6465c-2c5a-449f-8285-d0b030e1e703 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/ebe6465c-2c5a-449f-8285-d0b030e1e703 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/ebe6465c-2c5a-449f-8285-d0b030e1e703 3456w" alt="" loading="lazy"> 2353 </div> 2354 <span class="property-list__label"> 2355 Sold 2356 </span> 2357 <div class="property-list__text"> 2358 <h4 class="serif">Muskadasa Island*</h4> 2359 <p> 2360 Lake Muskoka 2361 </p> 2362 <p> 2363 2364 </p> 2365 <h5 style="text-transform: capitalize"> 2366 $3,499,000 2367 </h5> 2368 </div> 2369 </a> 2370 2371 2372 <div class="property-list__hover"> 2373 <a href="/properties/muskadasa-island" class="hover-link"></a> 2374 <div class="property-list__buttons"> 2375 <a class="property-list__view" href="/properties/muskadasa-island" > 2376 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 2377 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 2378 </a> 2379 <div class="property-list__share"> 2380 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 2381 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 2382 <ul class="socials socials--block-dark"> 2383 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/muskadasa-island" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 2384 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/muskadasa-island&text=Muskadasa Island*" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 2385 <li><a href="/cdn-cgi/l/email-protection#c9f6babcaba3acaabdf484bcbaa2a8ada8baa8e980baa5a8a7ade3efaba6adb0f484bcbaa2a8ada8baa8e980baa5a8a7ade3e9e4e9a1bdbdb9baf3e6e6a4bcbaa2a6a2a8aaa6bdbda8aeacbaafa6bbbaa8a5ace7aaa6a4e6b9bba6b9acbbbda0acbae6a4bcbaa2a8ada8baa8e4a0baa5a8a7ad" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 2386 </ul> 2387 </div> 2388 </div> 2389 </div> 2390 </li> 2391 <li class="property-list__item feature"> 2392 <a class="property-list__item-link" href="/properties/lake-muskoka-3" > 2393 <div class="property-list__img"> 2394 <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/f472f0e2-1243-43fc-87cc-8c4e0ac28aae" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/f472f0e2-1243-43fc-87cc-8c4e0ac28aae 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/f472f0e2-1243-43fc-87cc-8c4e0ac28aae 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/f472f0e2-1243-43fc-87cc-8c4e0ac28aae 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/f472f0e2-1243-43fc-87cc-8c4e0ac28aae 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/f472f0e2-1243-43fc-87cc-8c4e0ac28aae 3456w" alt="" loading="lazy"> 2395 </div>
2396 <span class="property-list__label"> 2397 Sold 2398 </span> 2399 <div class="property-list__text"> 2400 <h4 class="serif">Bala Bay</h4> 2401 <p> 2402 Lake Muskoka 2403 </p> 2404 <p> 2405 3 BD | 2406 3 BA 2407 | 2408 3,098 Sq.Ft. 2409 </p> 2410 <h5 style="text-transform: capitalize"> 2411 $3,495,000 2412 </h5> 2413 </div> 2414 </a> 2415 2416 2417 <div class="property-list__hover"> 2418 <a href="/properties/lake-muskoka-3" class="hover-link"></a> 2419 <div class="property-list__buttons"> 2420 <a class="property-list__view" href="/properties/lake-muskoka-3" > 2421 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 2422 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 2423 </a> 2424 <div class="property-list__share"> 2425 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 2426 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 2427 <ul class="socials socials--block-dark"> 2428 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/lake-muskoka-3" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 2429 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/lake-muskoka-3&text=Bala Bay" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 2430 <li><a href="/cdn-cgi/l/email-protection#c2fdb1b7a0a8a7a1b6ff80a3aea3e280a3bbe4a0ada6bbff80a3aea3e280a3bbe2efe2aab6b6b2b1f8ededafb7b1a9ada9a3a1adb6b6a3a5a7b1a4adb0b1a3aea7eca1adafedb2b0adb2a7b0b6aba7b1edaea3a9a7efafb7b1a9ada9a3eff1" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 2431 </ul> 2432 </div> 2433 </div> 2434 </div> 2435 </li> 2436 <li class="property-list__item feature"> 2437 <a class="property-list__item-link" href="/properties/lake-muskoka-6" > 2438 <div class="property-list__img"> 2439 <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/06bddec8-6c92-45cb-9de4-b5f51f819211" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/06bddec8-6c92-45cb-9de4-b5f51f819211 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/06bddec8-6c92-45cb-9de4-b5f51f819211 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/06bddec8-6c92-45cb-9de4-b5f51f819211 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/06bddec8-6c92-45cb-9de4-b5f51f819211 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/06bddec8-6c92-45cb-9de4-b5f51f819211 3456w" alt="" loading="lazy"> 2440 </div> 2441 <span class="property-list__label"> 2442 Sold 2443 </span> 2444 <div class="property-list__text"> 2445 <h4 class="serif">Lake Muskoka</h4> 2446 <p> 2447 Lake Muskoka 2448 </p> 2449 <p> 2450 3 BD | 2451 3 BA 2452 | 2453 2,475 Sq.Ft. 2454 </p> 2455 <h5 style="text-transform: capitalize"> 2456 $2,789,000 2457 </h5> 2458 </div> 2459 </a> 2460 2461 2462 <div class="property-list__hover"> 2463 <a href="/properties/lake-muskoka-6" class="hover-link"></a> 2464 <div class="property-list__buttons"> 2465 <a class="property-list__view" href="/properties/lake-muskoka-6" > 2466 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 2467 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 2468 </a> 2469 <div class="property-list__share"> 2470 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 2471 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 2472 <ul class="socials socials--block-dark"> 2473 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/lake-muskoka-6" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 2474 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/lake-muskoka-6&text=Lake Muskoka" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 2475 <li><a href="/cdn-cgi/l/email-protection#c5fab6b0a7afa0a6b1f889a4aea0e588b0b6aeaaaea4e3a7aaa1bcf889a4aea0e588b0b6aeaaaea4e5e8e5adb1b1b5b6ffeaeaa8b0b6aeaaaea4a6aab1b1a4a2a0b6
2475a3aab7b6a4a9a0eba6aaa8eab5b7aab5a0b7b1aca0b6eaa9a4aea0e8a8b0b6aeaaaea4e8f3" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 2476 </ul> 2477 </div> 2478 </div> 2479 </div> 2480 </li> 2481 <li class="property-list__item feature"> 2482 <a class="property-list__item-link" href="/properties/lake-of-bays" > 2483 <div class="property-list__img"> 2484 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/d0e34f27-a579-40e4-be4e-e0e339798cf7" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/d0e34f27-a579-40e4-be4e-e0e339798cf7 960w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/d0e34f27-a579-40e4-be4e-e0e339798cf7 1270w" alt="" loading="lazy"> 2485 </div> 2486 <span class="property-list__label"> 2487 Sold 2488 </span> 2489 <div class="property-list__text"> 2490 <h4 class="serif">Lake of Bays*</h4> 2491 <p> 2492 Lake of Bays 2493 </p> 2494 <p> 2495 2496 </p> 2497 <h5 style="text-transform: capitalize"> 2498 $2,200,000 2499 </h5> 2500 </div> 2501 </a> 2502 2503 2504 <div class="property-list__hover"> 2505 <a href="/properties/lake-of-bays" class="hover-link"></a> 2506 <div class="property-list__buttons"> 2507 <a class="property-list__view" href="/properties/lake-of-bays" > 2508 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 2509 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 2510 </a> 2511 <div class="property-list__share"> 2512 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 2513 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 2514 <ul class="socials socials--block-dark"> 2515 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/lake-of-bays" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 2516 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/lake-of-bays&text=Lake of Bays*" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 2517 <li><a href="/cdn-cgi/l/email-protection#b788c4c2d5ddd2d4c38afbd6dcd297d8d197f5d6cec49d91d5d8d3ce8afbd6dcd297d8d197f5d6cec49d979a97dfc3c3c7c48d9898dac2c4dcd8dcd6d4d8c3c3d6d0d2c4d1d8c5c4d6dbd299d4d8da98c7c5d8c7d2c5c3ded2c498dbd6dcd29ad8d19ad5d6cec4" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 2518 </ul> 2519 </div> 2520 </div> 2521 </div> 2522 </li> 2523 <li class="property-list__item feature"> 2524 <a class="property-list__item-link" href="/properties/silver-lake" > 2525 <div class="property-list__img"> 2526 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/f4a6afaf-afa9-4099-8dd9-47b031db855e" srcset="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85,fit=scale-down,width=960/https://media-production.lp-cdn.com/media/f4a6afaf-afa9-4099-8dd9-47b031db855e 960w, https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/f4a6afaf-afa9-4099-8dd9-47b031db855e 1266w" alt="" loading="lazy"> 2527 </div> 2528 <span class="property-list__label"> 2529 Sold 2530 </span> 2531 <div class="property-list__text"> 2532 <h4 class="serif">Silver Lake*</h4> 2533 <p> 2534 Port Carling 2535 </p> 2536 <p> 2537 2538 </p> 2539 <h5 style="text-transform: capitalize"> 2540 $2,195,000 2541 </h5> 2542 </div> 2543 </a> 2544 2545 2546 <div class="property-list__hover"> 2547 <a href="/properties/silver-lake" class="hover-link"></a> 2548 <div class="property-list__buttons"> 2549 <a class="property-list__view" href="/properties/silver-lake" > 2550 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 2551 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 2552 </a> 2553 <div class="property-list__share"> 2554 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 2555 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 2556 <ul class="socials socials--block-dark"> 2557 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/silver-lake" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 2558 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/silver-lake&text=Silver Lake*" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 2559 <li><a href="/cdn-cgi/l/email-protection#013e7274636b6462753c52686d776473214d606a642b27636e65783c52686d776473214d606a642b212c2169757571723b2e2e6c74726a6e6a60626e757560666472676e7372606d642f626e6c2e71736e716473756864722e72686d7764732c6d606a64" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 2560 </ul> 2561 </div> 2562 </div> 2563 </div> 2564 </li> 2565 <li class="property-list__item feature"> 2566 <a class="property-list__item-link" href="/properties/lake-muskoka-1" > 2567 <div class="property-list__img"> 2568 <img src="https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/cecc37a2-e353-45ae-a952-76e0700415ce" alt="" loading="lazy"> 2569 </div>
2570 <span class="property-list__label"> 2571 Sold 2572 </span> 2573 <div class="property-list__text"> 2574 <h4 class="serif">Fenn's Point</h4> 2575 <p> 2576 Lake Muskoka 2577 </p> 2578 <p> 2579 5 BD | 2580 2581 </p> 2582 <h5 style="text-transform: capitalize"> 2583 $1,875,000 2584 </h5> 2585 </div> 2586 </a> 2587 2588 2589 <div class="property-list__hover"> 2590 <a href="/properties/lake-muskoka-1" class="hover-link"></a> 2591 <div class="property-list__buttons"> 2592 <a class="property-list__view" href="/properties/lake-muskoka-1" > 2593 <button class="btn btn--primary-dark button-style-5">VIEW PROPERTY</button> 2594 <button class="btn btn--primary-light button-style-5">VIEW PROPERTY</button> 2595 </a> 2596 <div class="property-list__share"> 2597 <a class="btn btn--primary-dark button-style-5">SHARE PROPERTY</a> 2598 <a class="btn btn--primary-light button-style-5">SHARE PROPERTY</a> 2599 <ul class="socials socials--block-dark"> 2600 <li><a href="https://www.facebook.com/sharer/sharer.php?u=https://muskokacottagesforsale.com/properties/lake-muskoka-1" target="_blank" class="socials__link"><i class="lp-i lp-i--facebook"></i></a></li> 2601 <li><a href="https://twitter.com/intent/tweet?url=https://muskokacottagesforsale.com/properties/lake-muskoka-1&text=Fenn's Point" target="_blank" class="socials__link"><i class="lp-i lp-i--twitter"></i></a></li> 2602 <li><a href="/cdn-cgi/l/email-protection#b689c5c3d4dcd3d5c28bf0d3d8d89095ce84818dc596e6d9dfd8c290d4d9d2cf8bf0d3d8d89095ce84818dc596e6d9dfd8c2969b96dec2c2c6c58c9999dbc3c5ddd9ddd7d5d9c2c2d7d1d3c5d0d9c4c5d7dad398d5d9db99c6c4d9c6d3c4c2dfd3c599dad7ddd39bdbc3c5ddd9ddd79b87" class="socials__link" target="_blank"><i class="lp-i lp-i--envelope"></i></a></li> 2603 </ul> 2604 </div> 2605 </div> 2606 </div> 2607 </li> 2608 </ul> 2609 <div class="empty-result" style="display: none"> 2610 <h3>No Results Found. Please Try Another Search.</h3> 2611 </div> 2612 <div class="lp-pagination pagination-container pagination-style-2"></div> 2613 </div> 2614 </div> 2615</div> 2616 2617</section> 2618<section id="section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655" class="solid-section is-font-color-light is-background-color-dark" data-el-id="5db65d6a-01e9-4ee3-babf-2748e074a284">
vendor: 111 bytes, lines 2618-2619
2618 2619 <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
2619<script type="text/x-handlebars-template" class="jsIGItem"> 2620 <a href="{{permalink}}" target="_blank" class="ig-feed-item insta-type-{{mediaType}}"> 2621 <div class="ig-feed-item__img" style="background-image: url('{{#ifEquals mediaType 'VIDEO'}}{{thumbnailUrl}}{{^}}{{mediaUrl}}{{/ifEquals}}');"></div> 2622 <div class="ig-feed-item__info"><div class="ig-feed-item__caption">{{caption}}</div></div> 2623 {{#ifEquals mediaType 'VIDEO'}}<div class="video-icon"></div>{{/ifEquals}} 2624 </a> 2625</script>
2625 2626<div class="ig-feed redesign"> 2627 <div class="ig-feed-top lp-container"> 2628 <div class="top-wrapper"> 2629 <div class="top-left"> 2630 <h3 class="lp-h3 title">Follow Us on Instagram</h3> 2631 <a href="#" target="_blank" class="instagram-link jsIGLink"><h4 class="lp-h4 instagram-name jsIGName"></h4></a> 2632 </div> 2633 <div class="top-right"> 2634 <a href="#" target="_blank" class="lp-btn lp-btn--dark lp-btn--outline lp-btn--mob-full-width follow-button jsIGLink button-style-6">Follow Us</a> 2635 <a class="nav-button top-nav-prev hidden-control button-style-6"> 2636 <svg width="9" height="15" viewBox="0 0 9 15" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M7.099 13.25l-5.25-5.775L7.099 1.7" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg> 2637 </a> 2638 <a class="nav-button top-nav-next hidden-control button-style-6"> 2639 <svg width="9" height="15" viewBox="0 0 9 15" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1.90137 1.75L7.15137 7.525L1.90137 13.3" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg> 2640 </a> 2641 </div> 2642 </div> 2643 </div> 2644 <div class="lp-container ig-feed-container "> 2645 <div class="ig-feed-feed" data-limit="33"> 2646 </div> 2647 </div> 2648 <div class="bottom-controls"> 2649 <a class="bottom-nav-button bottom-nav-prev button-style-6"> 2650 <svg width="9" height="15" viewBox="0 0 9 15" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M7.099 13.25l-5.25-5.775L7.099 1.7" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg> 2651 </a> 2652 <a class="bottom-nav-button bottom-nav-next button-style-6"> 2653 <svg width="9" height="15" viewBox="0 0 9 15" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1.90137 1.75L7.15137 7.525L1.90137 13.3" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg> 2654 </a> 2655 </div> 2656</div> 2657 2658</section> 2659 2660 <div id="modals" class="modals"></div> 2661 <footer id="global-footer" class="is-font-color-light is-background-color-dark" data-el-id="bf83e0d0-0a3d-4cf5-a94c-daba8415ab49"> 2662 <div class="footer redesign"> 2663 <div class="footer__layout container"> 2664 <div class="footer__layout__left company"> 2665 <div class="company__info__newsletter"> 2666 <h2> 2667 Richard Scully & Associates 2668 </h2> 2669 <p class="pre-wrap"></p> 2670 </div> 2671 <div class="company__contacts"> 2672 <div> 2673 <p><b>RICHARD SCULLY & ASSOCIATES</b></p> 2674 <div><div> 2675<p class="contact_title"><a class="ft-link" href="/cdn-cgi/l/email-protection#7b0908180e1717023b160e081014101a55181416"><span class="__cf_email__" data-cfemail="32404151475e5e4b725f4741595d59531c515d5f">[email protected]</span></a><br><a class="ft-link" href="tel:7056449393">(705) 644-9393</a></p> 2676</div> 2677<style>* { box-sizing: border-box; } body {margin: 0;}ul{list-style:inherit;}</style></div> 2678 </div> 2679 <div> 2680 <p><b>ADDRESS</b></p> 2681 <div><div> 2682<div> 2683<p class="contact_title">1A Lee Valley Dr<br>Port Carling ON P0B 1J0</p> 2684</div> 2685</div> 2686<style>* { box-sizing: border-box; } body {margin: 0;}ul{list-style:inherit;}</style> 2687<p> </p> 2688<style>* { box-sizing: border-box; } body {margin: 0;}ul{list-style:inherit;}</style></div> 2689 </div> 2690 <div> 2691 <p><b></b></p> 2692 <div><p style="font-size: 12px;">All information is deemed reliable but not guaranteed and should be independently reviewed and verified.</p> 2693<p style="opacity: 1;"><img style="width: 60px; height: auto; filter: invert(1); margin-left: -10px; margin-top: 10px;" src="https://res.cloudinary.com/luxuryp/image/upload/v1675453847/Single_Realtor_Black_hwazek.png"></p></div> 2694 </div> 2695 </div> 2696 </div> 2697 2698 <div class="footer__layout__right"> 2699 <div class="newsletter"> 2700 <div class="newsletter__info"> 2701 <h2>NEWSLETTER</h2> 2702 <p class="pre-wrap">Sign up to be the first to know about our new listings.</p> 2703 </div> 2704 <form class="newsletter__subscribe" data-type="contact-form"> 2705 <div class="h-pot"> 2706 <label for="-middleName">Middle Name</label> 2707 <input id="-middleName" name="middleName" value="" autocomplete="off" tabindex="-1"> 2708 </div> 2709 <input type="hidden" name="source" value="NEWSLETTER_SIGNUP" /> 2710 <input required placeholder="Email Address" name="email" type="email" /> 2711 <div class="lp-disclaimer"> <label style='display: none;' for='-termsAccepted'>Opt In/Disclaimer Consent:</label> 2712 <label class='lp-tcr-content'> 2713 <span class='lp-tcr-checkbox'> 2714 <input 2715 type='checkbox' 2716 id='-termsAccepted' 2717 name='termsAccepted' 2718 oninvalid="this.setCustomValidity('Please accept the terms and conditions')"
2719 oninput="this.setCustomValidity('')" 2720 required 2721 /></span> 2722 <span class='lp-tcr-message'> 2723 2724 I agree to be contacted by 2725 Richard Scully & Associates 2726 via call, email, and text for real estate services. To opt out, you can reply 'stop' at any time or reply 'help' for assistance. 2727 You can also click the unsubscribe link in the emails. Message and data rates may apply. Message frequency may vary. 2728 <a href='/terms-and-conditions' target='_blank'>Privacy Policy</a>. 2729 </span> 2730 </label> 2731 2732</div> 2733 <input type="submit" value="SUBSCRIBE" class="btn btn--subscribe button-style-6" /> 2734 <p class="success hide">Email Submitted!</p> 2735 </form> 2736 2737 </div> 2738 </div> 2739 2740 2741 </div> 2742 <div class="container footer__layout footer__middle"> 2743 <div class="footer__layout__left"> 2744 <ul class="lp-socials social_icons-style-2 footer__socials socials"> 2745 2746 <li> 2747 <a 2748 href="https://www.instagram.com/muskokacottagesforsale/" 2749 class="lp-socials__link socials__item wow fadeInUp" 2750 data-wow-delay="0s" 2751 target="_blank" 2752 aria-label="INSTAGRAM" 2753 > 2754 <span class="lp-i lp-i--instagram" aria-hidden="true"></span> 2755 </a> 2756 </li> 2757 <li> 2758 <a 2759 href="https://www.youtube.com/@muskokacottagesforsale" 2760 class="lp-socials__link socials__item wow fadeInUp" 2761 data-wow-delay="0.1s" 2762 target="_blank" 2763 aria-label="YOUTUBE" 2764 > 2765 <span class="lp-i lp-i--youtube" aria-hidden="true"></span> 2766 </a> 2767 </li> 2768 </ul> </div> 2769 <div class="footer__layout__right"> 2770 <div class="logos"> 2771 </div> 2772 </div> 2773 </div> 2774 <div class="footer__bottom"> 2775 <div class="container"> 2776 <div class="footer__bottom-copyrights footer__layout"> 2777 <div class="footer__layout__left logo-powered"> 2778 <div class="img-wrap"> 2779 <img src="https://media-production.lp-cdn.com/media/b517d231-d9f5-4e15-870d-852a977c9204" alt=""> 2780 </div> 2781 <div> 2782 Real Estate Website Design by <a href="https://www.luxurypresence.com/real-estate-website-design/" target="_blank" class="luxury-link hyperlink-style-2">Luxury Presence</a> 2783 </div> 2784 </div> 2785 <div class="footer__layout__right copyright-box"> 2786 Copyright <span class="auto-year-update">2026</span> | <a href="/terms-and-conditions" class="hyperlink-style-2">Privacy Policy</a> 2787 </div> 2788 </div> 2789 </div> 2790 </div> 2791</div> 2792 2793 </footer> 2794 2795 <div id="modal-global-contact-us" class="modal " 2796 data-el-id="" 2797 style="background-color: ;" 2798 > 2799 <div class="modal-content"> 2800 <div class="contact-form redesign " style="background-image: url('')"> 2801 <div class="container"> 2802 <div class="section-details" style="--colorTxt: #ffffff"> 2803 <h2>Contact Details</h2> 2804 2805 <div class="info-zone"> 2806 2807 <div class="info-zone_contact type_user"> 2808 <h4 class="serif">RICHARD SCULLY & ASSOCIATES</h4> 2809 <div class="info-zone_contact_cell"> 2810 <i> 2811 <svg width="30" height="25" viewBox="0 0 30 25" fill="none" xmlns="http://www.w3.org/2000/svg"> 2812 <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.48
281215 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"/> 2813 </svg> 2814 </i> 2815 <p class="contact_title">Phone</p> 2816 <a href="tel:(705) 644-9393" class="lp-link info-zone_contact_link link hyperlink-style-2">(705) 644-9393</a> 2817 </div> 2818 <div class="info-zone_contact_cell"> 2819 <i> 2820 <svg width="30" height="19" viewBox="0 0 30 19" fill="none" xmlns="http://www.w3.org/2000/svg"> 2821 <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"/> 2822 </svg> 2823 </i> 2824 <p class="contact_title">Email</p> 2825 <a href="/cdn-cgi/l/email-protection#f7858494829b9b8eb79a82849c989c96d994989a" class="lp-link info-zone_contact_link link hyperlink-style-2"><span class="__cf_email__" data-cfemail="4b3938283e2727320b263e382024202a65282426">[email protected]</span></a> 2826 </div> 2827 </div> 2828 <div class="info-zone_contact"> 2829 <div class="info-zone_contact_cell"> 2830 <i> 2831 <svg width="31" height="30" viewBox="0 0 31 30" fill="none" xmlns="http://www.w3.org/2000/svg"> 2832 <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"/> 2833 <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"/> 2834 <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"/> 2835 </svg> 2836 </i> 2837 <p class="info-wrap-contact_title">Address</p> 2838 <p class="info-zone_contact_link pre-line">1A Lee Valley Dr 2839 Port Carling ON P0B 1J0</p> 2840 </div> 2841 </div> 2842 <div class="info-zone_contact"> 2843 <div class="info-zone_contact_cell"> 2844 <p class="pre-line"><div></div><style>* { box-sizing: border-box; } body {margin: 0;}ul{list-style:inherit;}</style></p> 2845 </div> 2846 </div> 2847 <ul class="lp-socials social_icons-style-2 socials socials--grey socials_zone footer__c
2847ontact-column"> 2848 2849 <li> 2850 <a 2851 href="https://www.instagram.com/muskokacottagesforsale/" 2852 class="lp-socials__link socials__item wow fadeInUp socials__link" 2853 data-wow-delay="0s" 2854 target="_blank" 2855 aria-label="INSTAGRAM" 2856 > 2857 <span class="lp-i lp-i--instagram" aria-hidden="true"></span> 2858 </a> 2859 </li> 2860 <li> 2861 <a 2862 href="https://www.youtube.com/@muskokacottagesforsale" 2863 class="lp-socials__link socials__item wow fadeInUp socials__link" 2864 data-wow-delay="0.1s" 2865 target="_blank" 2866 aria-label="YOUTUBE" 2867 > 2868 <span class="lp-i lp-i--youtube" aria-hidden="true"></span> 2869 </a> 2870 </li> 2871 </ul> </div> 2872 </div> 2873 <div class="section-message"> 2874 <form data-type="contact-form"> 2875 <h2>Submit a Message</h2> 2876 <div class="h-pot"> 2877 <label for="-middleName">Middle Name</label> 2878 <input id="-middleName" name="middleName" value="" autocomplete="off" tabindex="-1"> 2879 </div> 2880 2881 2882 <div class="lp-input-group"> 2883 <label for="prod-name" class="lp-label">Name</label> 2884 <input id="prod-name" name="name" value="" required="" class="lp-input lp-input--light"> 2885 </div> 2886 <div class="lp-input-group"> 2887 <label for="prod-email" class="lp-label">Email</label> 2888 <input id="prod-email" type="email" name="email" value="" required="" class="lp-input lp-input--light"> 2889 </div> 2890 <div class="lp-input-group"> 2891 <label for="prod-phone" class="lp-label">Phone</label> 2892 <input id="prod-phone" type="tel" name="phoneNumber" value="" required="" class="lp-input lp-input--light"> 2893 </div> 2894 <div class="lp-input-group m16"> 2895 <label for="prod-message" class="lp-label">Message</label> 2896 <textarea id="prod-message" name="message" value="" required="" class="lp-input"></textarea> 2897 </div> 2898 2899 <div class="lp-disclaimer"> <label style='display: none;' for='-termsAccepted'>Opt In/Disclaimer Consent:</label> 2900 <label class='lp-tcr-content'> 2901 <span class='lp-tcr-checkbox'> 2902 <input 2903 type='checkbox' 2904 id='-termsAccepted' 2905 name='termsAccepted' 2906 oninvalid="this.setCustomValidity('Please accept the terms and conditions')" 2907 oninput="this.setCustomValidity('')" 2908 required 2909 /></span> 2910 <span class='lp-tcr-message'> 2911 2912 I agree to be contacted by 2913 Richard Scully & Associates 2914 via call, email, and text for real estate services. To opt out, you can reply 'stop' at any time or reply 'help' for assistance. 2915 You can also click the unsubscribe link in the emails. Message and data rates may apply. Message frequency may vary. 2916 <a href='/terms-and-conditions' target='_blank'>Privacy Policy</a>. 2917 </span> 2918 </label> 2919 2920 </div> 2921 2922 <input style="display: none;" type="text" name="source" value="CONTACT_INQUIRY" /> 2923 2924 2925 <button type="submit" class="submitButton lp-btn button-style-2">
2926 <span class="label-initial">Submit</span> 2927 <span class="label-loading">Submitting</span> 2928 <span class="label-success">Submitted</span> 2929 <span class="submit-icon lp-i lp-i--circle-notch lp-i--spin"></span> 2930 </button> 2931 <p class="success-message success hide"> 2932 Message sent successfully! 2933 </p> 2934 </form> 2935 2936 2937 </div> 2938 </div> 2939 </div> 2940 2941 </div> 2942 <button class="close lp-close" type="button" aria-label="close modal"> 2943 <span class="lp-close-icon" aria-hidden="true"></span> 2944 </button> 2945 </div> 2946 <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;"> 2947 <style> 2948 #qualifying-questions-modal .custom-select-toggle { 2949 border: 1px solid #848484; 2950 border-radius: 8px; 2951 padding: 12px 16px; 2952 } 2953 2954 #qualifying-questions-modal .custom-select-toggle.is-placeholder { 2955 color: #848484; 2956 } 2957 2958 #qualifying-questions-modal #qualifying-questions-modal-phoneNumber::placeholder { 2959 color: #848484; 2960 opacity: 1; 2961 } 2962 2963 #qualifying-questions-modal .disclaimer-more { 2964 display: none; 2965 } 2966 2967 #qualifying-questions-modal #qualifying-questions-modal-disclaimer-text:not(.collapsed) .disclaimer-more { 2968 display: inline; 2969 } 2970 2971 #qualifying-questions-modal #qualifying-questions-modal-disclaimer-text:not(.collapsed) .disclaimer-ellipsis { 2972 display: none; 2973 } 2974 </style>
vendor: 119 bytes, lines 2974-2975
2974 2975 <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
2975<script> 2976 function toggleDisclaimerQualifyingQuestionsModal() { 2977 const disclaimerText = document.getElementById('qualifying-questions-modal-disclaimer-text'); 2978 const toggleButton = document.getElementById('qualifying-questions-modal-toggle-disclaimer'); 2979 2980 if (disclaimerText.classList.contains('collapsed')) { 2981 disclaimerText.classList.remove('collapsed'); 2982 toggleButton.textContent = 'Read less'; 2983 toggleButton.setAttribute('aria-expanded', 'true'); 2984 } else { 2985 disclaimerText.classList.add('collapsed'); 2986 toggleButton.textContent = 'Read more'; 2987 toggleButton.setAttribute('aria-expanded', 'false'); 2988 } 2989 } 2990 </script>
2990 2991 <div style="max-width: 400px; width: 95%; margin: 0 auto;"> 2992 <div style="background: #fff; border: none; border-radius: 16px; color: black; box-shadow: none; position: relative;"> 2993 <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;"> 2994 <span aria-hidden="true">×</span> 2995 </button> 2996 <div style="padding: 40px 30px 32px;"> 2997 <div style="text-align: left; margin-bottom: 32px;"> 2998 <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;"> 2999 Thanks, please provide more information to help serve you 3000 </h2> 3001 </div> 3002 <form id="qualifying-questions-modal-form" data-type="contact-form"> 3003 <input type="hidden" name="source" value="PROFILE_UPDATE" /> 3004 <input type="hidden" name="email" value="" id="qualifying-questions-modal-email" /> 3005 <input type="hidden" name="triggerSource" id="qualifying-questions-modal-triggerSource" value="" /> 3006 <label for="qualifying-questions-modal-email" style="display:none;"> 3007 Email 3008 </label> 3009 <label for="qualifying-questions-modal-triggerSource" style="display:none;"> 3010 Trigger Source 3011 </label> 3012 3013 <div style="margin-bottom: 20px;"> 3014 <label for="qualifying-questions-modal-phoneNumber" style="display:none;"> 3015 Phone Number 3016 </label> 3017 <input 3018 type="tel" 3019 id="qualifying-questions-modal-phoneNumber" 3020 name="phoneNumber" 3021 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;" 3022 pattern="^\+?1?[-.\s]?\(?[0-9]{3}\)?[-.\s]?[0-9]{3}[-.\s]?[0-9]{4}$" 3023 required 3024 placeholder="Phone" 3025 aria-label="Phone Number" 3026 inputmode="tel" 3027 autocomplete="tel" 3028 onfocus="this.style.borderColor='black';" 3029 onblur="this.style.borderColor='#848484';" 3030 /> 3031 </div> 3032 3033 <div style="margin-bottom: 20px;"> 3034 <label for="qualifying-questions-modal-interest" style="display:none;"> 3035 Interest 3036 </label> 3037 <select 3038 id="qualifying-questions-modal-interest" 3039 name="interest" 3040 required 3041 data-label="Interest" 3042 aria-label="Interest" 3043 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;" 3044 onfocus="this.style.borderColor='black'; this.style.color='black';" 3045 onblur="this.style.borderColor='#848484'; if(this.value === '') this.style.color='#848484'; else this.style.color='black';" 3046 > 3047 <option value="" style="background: #fff; color: #848484;" disabled selected>Interested in...</option> 3048 <option value="Selling & Buying" style="background: #fff; color: black;">Selling & Buying</option> 3049 <option value="Selling" style="background: #fff; color: black;">Selling</option> 3050 <option value="Buying" style="background: #fff; color: black;">Buying</option> 3051 <option value="Renting" style="background: #fff; color: black;">Renting</option> 3052 <option value="Other" style="background: #fff; color: black;">Other</option> 3053 </select> 3054 </div> 3055 3056 <div style="margin-bottom: 32px; font-size: 12px; line-height: 1.2;"> 3057 <label style='display: none;' for='qualifying-questions-modal-qualifying-questions-termsAccepted'>Opt In/Disclaimer Consent:</label> 3058 <label class='lp-tcr-content'>
3059 <span class='lp-tcr-checkbox'> 3060 <input 3061 type='checkbox' 3062 id='qualifying-questions-modal-qualifying-questions-termsAccepted' 3063 name='termsAccepted' 3064 aria-describedby='qualifying-questions-modal-disclaimer-text' 3065 oninvalid="this.setCustomValidity('Please accept the terms and conditions')" 3066 oninput="this.setCustomValidity('')" 3067 required 3068 /></span> 3069 <span class='lp-tcr-message'> 3070 <div id="qualifying-questions-modal-disclaimer-text" class="collapsed" style="color: #848484;"> 3071 3072 I agree to be contacted by 3073 <strong>Richard Scully & Associates</strong> 3074 via call, email, and text <span class="disclaimer-more">for real estate services. 3075 To opt out, you can reply 'stop' at any time or reply 'help' for assistance. 3076 You can also click the unsubscribe link in the emails. 3077 Message and data rates may apply. Message frequency may vary.</span> 3078 <span class="disclaimer-ellipsis">...</span> 3079 <a href='/terms-and-conditions' target='_blank' rel='noopener noreferrer' style='text-decoration: underline;'>Privacy Policy</a>. 3080 </div> 3081 <button 3082 id="qualifying-questions-modal-toggle-disclaimer" 3083 type="button" 3084 style="background: none; border: none; color: #848484; font-size: inherit; font-weight: bold; padding: 0; margin-top: 4px; cursor: pointer;" 3085 aria-expanded="false" 3086 onclick="toggleDisclaimerQualifyingQuestionsModal()" 3087 > 3088 Read more 3089 </button> 3090 </span> 3091 </label> 3092 </div> 3093 3094 <div> 3095 <button 3096 type="submit" 3097 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;" 3098 onmouseover="this.style.background='transparent'; this.style.color='black';" 3099 onmouseout="this.style.background='black'; this.style.color='white';" 3100 > 3101 Submit 3102 </button> 3103 </div> 3104 </form> 3105 </div> 3106 </div> 3107 </div> 3108 </div> 3109 3110
3110<script> 3111 (function() { 3112 var lazyVideos = [].slice.call(document.querySelectorAll("video.lazy")); 3113 3114 if ("IntersectionObserver" in window && lazyVideos.length > 0) { 3115 var lazyVideoObserver = new IntersectionObserver(function(entries, observer) { 3116 entries.forEach(function(video) { 3117 if (video.isIntersecting) { 3118 for (var source in video.target.children) { 3119 var videoSource = video.target.children[source]; 3120 if (typeof videoSource.tagName === "string" && videoSource.tagName === "SOURCE") { 3121 videoSource.src = videoSource.dataset.src; 3122 } 3123 } 3124 3125 video.target.load(); 3126 video.target.classList.remove("lazy"); 3127 lazyVideoObserver.unobserve(video.target); 3128 } 3129 }); 3130 }); 3131 3132 lazyVideos.forEach(function(lazyVideo) { 3133 lazyVideoObserver.observe(lazyVideo); 3134 }); 3135 } 3136 })(); 3137 </script>
3137 3138 3139 <!-- Global site tag (gtag.js) - Google Analytics --> 3140
3140<script defer src="https://www.googletagmanager.com/gtag/js"></script>
3140 3141 3142 <!-- Google Tag Manager --> 3143
3143<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 3144 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 3145 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.defer=true;j.async=false;j.src= 3146 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 3147 })(window,document,'script','dataLayer','GTM-T9SFQGHZ');</script>
3147 3148 <!-- End Google Tag Manager --> 3149 3150 3151 <!-- LP Tracker (divolte.js) - LP Divolte --> 3152
3152<script>window.divolteLp=window.divolteLp||function(){(divolteLp.q=divolteLp.q||[]).push(arguments)}</script>
3152 3153 <!-- LP Tracker (eventBus) - LP EventBus --> 3154
3154<script>window.eventBusLp=window.eventBusLp||function(){(eventBusLp.q=eventBusLp.q||[]).push(arguments)}</script>
3154 3155 3156
3156<script> 3157 window.dataLayer = window.dataLayer || []; 3158 document.sendGoogleTagManagerEvent = function() { 3159 /* Honor GPC-enabled browsers and prevent GTM event if GPC is enabled. More details: https://global-privacy-control.glitch.me/ */ 3160 if (window.navigator.globalPrivacyControl) { 3161 return; 3162 } 3163 3164 dataLayer.push(arguments); 3165 } 3166 3167 document.sendGoogleTagManagerEvent('js', new Date()); 3168 document.sendGoogleTagManagerEvent('config', 'G-RP3QBYL2WD', { page: location.pathname, location: location.href }); 3169 document.sendGoogleAnalyticsEvent = function(googleEvent) { 3170 document.sendGoogleTagManagerEvent('event', googleEvent.eventAction || googleEvent.hitType, { 3171 event_category: googleEvent.eventCategory, 3172 event_label: googleEvent.eventLabel, 3173 value: googleEvent.eventValue, 3174 page: googleEvent.page, 3175 location: googleEvent.location 3176 }) 3177 }; 3178 3179 document.addEventListener("DOMContentLoaded", function() { 3180 (function() { 3181 //If the page has an element with ID of auto-year-update the element will be populated with the current year. 3182 var date = new Date(); 3183 var elements = document.getElementsByClassName('auto-year-update'); 3184 var i; 3185 for (i = 0; i < elements.length; i++) { 3186 elements[i].innerText = date.getFullYear(); 3187 } 3188 })(); 3189 if (window.divolteLp) { 3190 window.divolteLp('sendLpPageView', {}); 3191 } 3192 if (window.eventBusLp) { 3193 window.eventBusLp('sendLpPageView', {}); 3194 } 3195 }); 3196 </script>
3196 3197 3198 3199
3199<script> 3200 // Function to dynamically load a script 3201 function loadScript(url, callback) { 3202 var script = document.createElement('script'); 3203 script.type = 'text/javascript'; 3204 script.src = url; 3205 script.defer = true; 3206 script.async = true; 3207 script.onload = callback; 3208 document.head.appendChild(script); 3209 } 3210 3211 // Function to dynamically load CSS file 3212 function loadCSS(url) { 3213 var link = document.createElement("link"); 3214 link.rel = "stylesheet"; 3215 link.href = url; 3216 document.head.appendChild(link); 3217 } 3218 3219 // Global methods / variables that can be accessed by element js 3220 window.luxuryPresence = { 3221 libs: { 3222 loadJs: loadScript, 3223 loadCss: loadCSS, 3224 jsLibsMap: { 3225 paroller: { 3226 jsSrc: 'https://d1e1jt2fj4r8r.cloudfront.net/javascript/jquery.paroller.min.js', 3227 isLoaded: false, 3228 }, 3229 ionRangeSlider: { 3230 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/js/ion.rangeSlider.min.js', 3231 cssSrc: 'https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/css/ion.rangeSlider.min.css', 3232 isLoaded: false, 3233 requires: ['jquery'], 3234 }, 3235 splide: { 3236 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/splidejs/4.1.4/js/splide.min.js', 3237 cssSrc: 'https://cdnjs.cloudflare.com/ajax/libs/splidejs/4.1.4/css/splide-core.min.css', 3238 isLoaded: false, 3239 }, 3240 wow: { 3241 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/wow/1.1.2/wow.min.js', 3242 isLoaded: false, 3243 }, 3244 jquery: { 3245 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js', 3246 isLoaded: false, 3247 }, 3248 slick: { 3249 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick.min.js', 3250 isLoaded: false, 3251 requires: ['jquery'], 3252 }, 3253 libphonenumber: { 3254 jsSrc: 'https://cdnjs.cloudflare.com/ajax/libs/libphonenumber-js/1.11.8/libphonenumber-js.min.js', 3255 isLoaded: false, 3256 }, 3257 }, 3258 }, 3259 }; 3260 </script>
3260 3261
3261<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>
3261 3262
3262<script defer src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.7.8/handlebars.min.js"></script>
3262 3263
3263<script defer src="https://cdn.jsdelivr.net/npm/[email protected]/dist/handlebars-intl.min.js"></script>
3263 3264
3264<script defer src="https://cdnjs.cloudflare.com/ajax/libs/superagent/4.1.0/superagent.min.js"></script>
3264 3265
3265<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>
3265 3266
3266<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>
3266 3267
3267<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>
3267 3268 3269 <!-- GOOGLE TRANSLATE SCRIPT --> 3270
3270<script> 3271 function googleTranslateElementInit() { 3272 // list of languages can be overridden by setting window.customLanguages in the head JS. example `window.customLanguages = 'en,de,fr,ro,sk,pl'` 3273 // Language codes can be taken from here https://cloud.google.com/translate/docs/languages 3274 const DEFAULT_LANGUAGES = 'en,es,zh-CN,zh-TW,tl,vi,ar,ko,ru,de,fr,hi,pt'; 3275 document.querySelectorAll('[data-type="TRANSLATE"]').forEach(function(translate){ 3276 translate.innerText = ''; 3277 new google.translate.TranslateElement({ 3278 pageLanguage: 'en', 3279 layout: google.translate.TranslateElement.InlineLayout.SIMPLE, 3280 includedLanguages: window.customLanguages || DEFAULT_LANGUAGES, 3281 }, translate); 3282 }); 3283 } 3284 </script>
3284 3285
3285<script defer src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>
3285 3286
3286<script defer src="https://accounts.google.com/gsi/intermediate"></script>
3286 3287 3288 <!-- GOOGLE TRANSLATE SCRIPT END--> 3289
3289<script> 3290 3291 // UI helpers 3292 (function () { 3293 3294 function getSideMenu () { 3295 return document.querySelector('body > div.sidemenu'); 3296 } 3297 3298 function sideMenuHide (instant) { 3299 var sideMenu = getSideMenu(); 3300 if (!sideMenu || !sideMenu.classList.contains('visible')) { 3301 return; 3302 } 3303 sideMenu.classList.remove('visible'); 3304 sideMenu.dispatchEvent(new CustomEvent('lpui-hide', { detail: { instant: !!instant } })); 3305 window.dispatchEvent(new CustomEvent('lpui-sidemenu-hide', { detail: {instant: !!instant} })); 3306 } 3307 3308 function sideMenuShow () { 3309 var sideMenu = getSideMenu(); 3310 if (!sideMenu || sideMenu.classList.contains('visible')) { 3311 return; 3312 } 3313 sideMenu.classList.add('visible'); 3314 sideMenu.dispatchEvent(new Event('lpui-show')); 3315 window.dispatchEvent(new Event('lpui-sidemenu-show')); 3316 } 3317 3318 function sideMenuToggle () { 3319 var sideMenu = getSideMenu(); 3320 if (!sideMenu) { 3321 return; 3322 } 3323 var isSideMenuVisible = sideMenu.classList.contains('visible'); 3324 if (isSideMenuVisible) { 3325 sideMenuHide(); 3326 } else { 3327 sideMenuShow(); 3328 } 3329 } 3330 3331 var scrollLockRequests = {}; 3332 window.__debug_scrollLockRequests = scrollLockRequests; 3333 var hideScrollStyles = ''+ 3334 'body {'+ 3335 'overflow: hidden;' + 3336 '}'; 3337 var hideScrollId = 'hide-body-scroll-style'; 3338 3339 function scrollLock () { 3340 var style = document.createElement('style'); 3341 style.id = hideScrollId; 3342 style.textContent = hideScrollStyles; 3343 document.head.appendChild(style); 3344 window.dispatchEvent(new Event('lpui-scroll-locked')); 3345 } 3346 3347 function scrollUnlock () { 3348 document.getElementById(hideScrollId)?.remove(); 3349 window.dispatchEvent(new Event('lpui-scroll-unlocked')); 3350 } 3351 3352 function requestScrollLock (lockId) { 3353 var wasLocked = Object.keys(scrollLockRequests).length > 0; 3354 scrollLockRequests[lockId || '__anonymous_lock'] = true; 3355 if (!wasLocked) { 3356 scrollLock(); 3357 } 3358 } 3359 3360 function releaseScrollLock (lockId) { 3361 if (lockId) { 3362 delete scrollLockRequests[lockId]; 3363 if (!Object.keys(scrollLockRequests).length) { 3364 scrollUnlock(); 3365 } 3366 } else { 3367 scrollLockRequests = {}; 3368 window.__debug_scrollLockRequests = scrollLockRequests; 3369 scrollUnlock(); 3370 } 3371 } 3372 3373 function showModal (modalId, options) { 3374 var modal = document.getElementById(modalId); 3375 if (!modal) { 3376 return; 3377 } 3378 3379 if (!modal.classList.contains('visible')) { 3380 modal.classList.add('visible'); 3381 if (options && options.scrollLock) { 3382 window.lpUI.requestScrollLock(modalId); 3383 } 3384 modal.dispatchEvent(new Event('lpui-show')); 3385 window.dispatchEvent(new CustomEvent('lpui-modal-show', { detail: { id: modalId } })); 3386 } 3387 3388 const visibleModals = document.querySelectorAll('.modal.visible'); 3389 3390 if (visibleModals.length > 1) { 3391 3392 const maxZIndex = Array.from(visibleModals).reduce((maxZIndex, modal) => { 3393 const zIndex = window.getComputedStyle(modal).zIndex; 3394 const parsedZIndex = zIndex !== 'auto' ? parseInt(zIndex) : 0; 3395 return Math.max(maxZIndex, parsedZIndex); 3396 }, 0); 3397 3398 modal.style.zIndex = maxZIndex + 1; 3399 } 3400 3401 } 3402 3403 function _hideModal (modalEl) { 3404 if (!modalEl) { 3405 return; 3406 } 3407 if (!modalEl.classList.contains('visible')) { 3408 return; 3409 } 3410 modalEl.classList.remove('visible'); 3411 modalEl.style.zIndex = '';
3412 modalEl.dispatchEvent(new Event('lpui-hide')); 3413 var modalId = modalEl.getAttribute('id'); 3414 if (modalId) { 3415 window.lpUI.releaseScrollLock(modalId); 3416 window.dispatchEvent(new CustomEvent('lpui-modal-hide', { detail: { id: modalId } })); 3417 } 3418 } 3419 3420 function hideModal (modalId) { 3421 _hideModal(document.getElementById(modalId)); 3422 } 3423 3424 function hideClosestModal (el) { 3425 const modal = el?.closest('.modal'); 3426 if (!modal) { 3427 return; 3428 } 3429 if (modal.classList) { 3430 _hideModal(modal); 3431 return; 3432 } 3433 if (modal.length && modal[0].classList) { 3434 _hideModal(modal[0]); 3435 } 3436 } 3437 3438 window.lpUI = { 3439 sideMenuHide: sideMenuHide, 3440 sideMenuShow: sideMenuShow, 3441 sideMenuToggle: sideMenuToggle, 3442 requestScrollLock: requestScrollLock, 3443 releaseScrollLock: releaseScrollLock, 3444 showModal: showModal, 3445 hideModal: hideModal, 3446 hideClosestModal: hideClosestModal 3447 } 3448 })(); 3449 3450 var stringifyPrimitive = function(v) { 3451 switch (typeof v) { 3452 case 'string': 3453 return v; 3454 3455 case 'boolean': 3456 return v ? 'true' : 'false'; 3457 3458 case 'number': 3459 return isFinite(v) ? v : ''; 3460 3461 default: 3462 return ''; 3463 } 3464 }; 3465 3466 function objectToQuerystring(obj, sep, eq, name) { 3467 // https://github.com/Gozala/querystring/blob/master/encode.js 3468 sep = sep || '&'; 3469 eq = eq || '='; 3470 if (obj === null) { 3471 obj = undefined; 3472 } 3473 3474 if (typeof obj === 'object') { 3475 return Object.keys(obj).map(function(k) { 3476 var ks = encodeURIComponent(stringifyPrimitive(k)) + eq; 3477 if (Array.isArray(obj[k])) { 3478 return obj[k].map(function(v) { 3479 return ks + encodeURIComponent(stringifyPrimitive(v)); 3480 }).join(sep); 3481 } else { 3482 return ks + encodeURIComponent(stringifyPrimitive(obj[k])); 3483 } 3484 }).filter(Boolean).join(sep); 3485 3486 } 3487 3488 if (!name) return ''; 3489 return encodeURIComponent(stringifyPrimitive(name)) + eq + 3490 encodeURIComponent(stringifyPrimitive(obj)); 3491 } 3492 3493 function getPath(url, options) { 3494 var parser = document.createElement('a'); 3495 parser.href = url || ''; 3496 var path = parser.pathname || ''; 3497 if (path[0] !== '/') { 3498 // IE does not return path starting with a slash 3499 path = '/' + path; 3500 } 3501 3502 if (options && options.queryString) { 3503 path += parser.search; 3504 } 3505 3506 return path; 3507 } 3508 3509 function getMLSAutocomplete(keyword) { 3510 var searchURL = window.location.protocol + '//' + window.location.hostname + '/home-search/auto_complete'; 3511 var query = { 3512 kind: 'listings', 3513 query: keyword 3514 }; 3515 3516 return superagent 3517 .get(searchURL) 3518 .query(query) 3519 .then(function(res) { 3520 var data = res.body || []; 3521 // Array of listing_auto_complete documents: id, display_address, city, state, 3522 // price, sold_price, status, status_modified_at, photo_urls (array of URLs). 3523 3524 return data; 3525 }); 3526 } 3527 3528 function getMLSAutocompleteWithFilters(keyword, filters = {}) { 3529 var searchURL = window.location.protocol + '//' + window.location.hostname + '/home-search/auto_complete'; 3530 3531 return superagent 3532 .get(searchURL) 3533 .query({ kind: 'listings', query: keyword, ...filters }) 3534 .then(function(res) { 3535 // Same response shape as getMLSAutocomplete. 3536 return res.body || []; 3537 }); 3538 } 3539 3540 function makeMlsLink(data) { 3541 // Code Dupe from utils/googlePlace 3542 // mapping of google data type to mls data type 3543 var mapping = { 3544 neighborhood: 'neighborhood', 3545 locality: 'place', 3546 administrative_area_level_2: 'county', 3547 administrative_area_level_1: 'state', 3548 postal_code: 'postalcode', 3549 }; 3550 3551 function _filterTypes(types) { 3552 return types.filter(function(type) { return type !== 'political' }); 3553 } 3554 3555 if (!data || !Object.keys(data).length) { 3556 return '/home-search/listings'; 3557 } 3558 3559 var newData = {};
3560 _filterTypes(data.types).forEach(function(type) { 3561 if (mapping[type]) { 3562 newData.search_type = mapping[type]; 3563 } 3564 }); 3565 newData.omnibox = data.formatted_address; 3566 data.address_components.forEach(function(component) { 3567 _filterTypes(component.types).forEach(function(type) { 3568 if (mapping[type]) { 3569 newData[mapping[type]] = component.long_name; 3570 } 3571 }); 3572 }); 3573 var bounds = data.geometry.bounds; 3574 var convertedData = Object.assign(bounds, newData); 3575 3576 return '/home-search/listings?' + objectToQuerystring(convertedData); 3577 } 3578 3579 function debounce(func, wait) { 3580 let timeout; 3581 return function(...args) { 3582 const context = this; 3583 clearTimeout(timeout); 3584 timeout = setTimeout(() => func.apply(context, args), wait) 3585 } 3586 } 3587 3588 // Global methods / variables that can be accessed by element js 3589 window.luxuryPresence = { 3590 ...window.luxuryPresence, 3591 defaults: { 3592 companyId: 'c3076ecb-c2d7-457b-a426-bcf036133f1f', 3593 apiGatewayUrl: '/api-gw', 3594 routerUrl: '/api-nv', 3595 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\
3595n }\n propertiesCount(\n \n agentIds: $agentIds\n teamIds: $teamIds\n propertyId: $propertyId\n propertyIds: $propertyIds\n prioritizeIds: $prioritizeIds\n companyId: $companyId\n network: $network\n networkId: $networkId\n statusId: $statusId\n statusIds: $statusIds\n excludeStatusId: $excludeStatusId\n neighborhoodId: $neighborhoodId\n neighborhoodIds: $neighborhoodIds\n officeIds: $officeIds\n addressState: $addressState\n addressCity: $addressCity\n developmentId: $developmentId\n featuredListing: $featuredListing\n leaseProperty: $leaseProperty\n search: $search\n searchTermMode: $searchTermMode\n salesPriceGTE: $salesPriceGTE\n salesPriceLTE: $salesPriceLTE\n leasePriceGTE: $leasePriceGTE\n leasePriceLTE: $leasePriceLTE\n livingSpaceSizeGTE: $livingSpaceSizeGTE\n livingSpaceSizeLTE: $livingSpaceSizeLTE\n bathCountGTE: $bathCountGTE\n bathCountLTE: $bathCountLTE\n bedroomCountGTE: $bedroomCountGTE\n bedroomCountLTE: $bedroomCountLTE\n architectureStyle: $architectureStyle\n lifestyle: $lifestyle\n propertyTypeId: $propertyTypeId\n propertyTypeIds: $propertyTypeIds\n spaceTypeIds: $spaceTypeIds\n tag: $tag\n archived: $archived\n globalProperty: $globalProperty\n withGeo: $withGeo\n openHouse: $openHouse\n displayMLSListings: $displayMLSListings\n advancedFilters: $advancedFilters\n seasonalPriceId: $seasonalPriceId\n\n ) {\n count\n }\n }\n","pressReleases":"\n query PressReleases (\n $companyId: ID\n $pressReleaseIds: [ID!]\n $offset: Int\n $limit: Int\n $sort: String\n $sortDir: String\n $search: String\n $categories: [String!]\n $propertyId: [ID!]\n $developmentId: [ID!]\n $agentId: [ID!]\n $teamId: [ID!]\n $year: [Int!]\n ) {\n pressReleases (\n companyId: $companyId\n pressReleaseIds: $pressReleaseIds\n offset: $offset\n limit: $limit\n sort: $sort\n sortDir: $sortDir\n search: $search\n categories: $categories\n propertyId: $propertyId\n developmentId: $developmentId\n agentId: $agentId\n teamId: $teamId\n year: $year\n ) {\n items {\n id\n title\n description\n author\n externalUrl\n media {\n smallUrl\n mediumUrl\n largeUrl\n xLargeUrl\n xxLargeUrl\n height\n width\n altTagText\n }\n publishedAt\n categories\n }\n total\n }\n }\n","posts":"\n query Posts (\n $companyId: String\n $postId: [ID!]\n $slug: String\n $offset: Int\n $limit: Int\n $sort: String\n $sortDir: String\n $search: String\n $featured: Boolean\n $categoryId: [String!]\n $neighborhoodId: [String!]\n ) {\n posts (\n companyId: $companyId\n postId: $postId\n slug: $slug\n offset: $offset\n limit: $limit\n sort: $sort\n sortDir: $sortDir\n search: $search\n featured: $featured\n postStatusId: \"5f528253-abb7-484e-95c3-330269ac1102\"\n categoryId: $categoryId\n neighborhoodId: $neighborhoodId\n ) {\n items {\n id\n postId\n title\n subtitle\n description\n status: postStatus\n featured\n slug\n categories {\n id\n name\n }\n createdAt\n publishedAt\n scheduledAt\n createdBy {\n ... on Agent {\n firstName\n lastName\n }\n }\n customAuthor\n media {\n smallUrl\n mediumUrl\n largeUrl\n xLargeUrl\n xxLargeUrl\n height\n width\n altTagText\n }\n seoTitle\n seoDescription\n }\n total\n }\n }\n","testimonials":"\n query Testimonials (\n $companyId: String\n $agentId: ID\n $teamId: ID\n $testimonialIds: [ID!]\n $offset: Int\n $limit: Int\n $sort: String\n $sortDir: String\n $search: String\n ) {\n testimonials (\n companyId: $companyId\n agentId: $agentId\n teamId: $teamId\n testimonialIds: $testimonialIds\n offset: $offset\n limit: $limit\n sort: $sort\n sortDir: $sortDir\n search: $search\n ) {\n items {\n id\n testimonialId\n body\n author\n position\n media {\n smallUrl\n mediumUrl\n largeUrl\n xLargeUrl\n xxLargeUrl\n height\n width\n altTagText\n }\n seoTitle\n seoDescription\n agents {\n slug\n email\n firstName\n lastName\n avatar {\n smallUrl\n height\n width\n }\n }\n }\n total\n }\n }\n","neighborhoods":"\n query Neighborhoods (\n $neighborhoodId: ID\n $companyId: String\n $search: String\n $tag: String\n $offset: Int\n $limit: Int\n $sort: String\n $sortDir: SortDirectionEnum\n ) {\n neighborhoods (\n neighborhoodId: $neighborhoodId\n companyId: $companyId\n search: $search\n tag: $tag\n offset: $offset\n limit: $limit\n sort: $sort\n sortDir: $sortDir\n ) {\n id\n name\n description\n descriptionShort\n slug\n tags\n googlePlaceData\n mlsLink\n createdAt\n media {\n smallUrl\n mediumUrl\n largeUrl\n xLargeUrl\n xxLargeUrl\n height\n width\n }\n seoTitle\n seoDescription\n }\n neighborhoodsCount(\n companyId: $companyId\n search: $search\n tag: $tag\n ) {\n count\n }\n }\n","developments":"\n query Developments (\n $developmentId: ID\n $companyId: String\n $offset: Int\n $limit: Int\n $sort: String\n $sortDir: SortDirectionEnum\n $search: String\n $tag: [String!]\n $agentId: [ID!]\n $neighborhoodId: ID\n $neighborhoodIds: [ID!]\n ) {\n developments (\n developmentId: $developmentId\n companyId: $companyId\n offset: $offset\n limit: $limit\n sort: $sort\n sortDir: $sortDir\n search: $search\n tag: $tag\n agentId: $agentId\n neighborhoodId: $neighborhoodId\n neighborhoodIds: $neighborhoodIds\n ) {\n id\n name\n description\n descriptionShort\n slug\n createdAt\n media {\n smallUrl\n mediumUrl\n largeUrl\n xLargeUrl\n xxLargeUrl\n height\n width\n }\n googlePlaceData\n seoTitle\n seoDescription\n tags\n }\n developmentsCount(\n companyId: $companyId\n search: $search\n tag: $tag\n agentId: $agentId\n neighborhoodId: $neighborhoodId\n neighborhoodIds: $neighborhoodIds\n ) {\n count\n }\n }\n","pois":"\n query PointsOfInterest (\n $regionId: UUID!\n $radiu
3595s: Int\n $offset: Int\n $limit: Int\n $categories: [AreasOfInterestCategories!]\n $sortBy: AreasOfInterestSorting\n ) {\n pois: areasOfInterest (\n input: {\n regionId: $regionId\n radius: $radius\n offset: $offset\n limit: $limit\n categories: $categories\n sortBy: $sortBy\n }\n ) {\n items {\n name\n imageUrl\n url\n reviewCount\n rating\n price\n displayPhone\n distance\n category\n location {\n address1\n address2\n address3\n city\n zipCode\n country\n state\n }\n }\n total\n }\n }\n","offices":"\n query Offices (\n $companyId: ID!\n $officeIds: [ID!]\n $officeMlsIds: [String!]\n $externalIds: [String!]\n $externalSource: String\n $agentId: ID\n $archived: Boolean\n $tags: [String!]\n $slug: String\n $search: String\n $sort: String\n $sortDir: SortDirection\n $offset: Int\n $limit: Int\n ) {\n offices (\n companyId: $companyId\n officeIds: $officeIds\n officeMlsIds: $officeMlsIds\n externalIds: $externalIds\n externalSource: $externalSource\n agentId: $agentId\n archived: $archived\n tags: $tags\n slug: $slug\n search: $search\n sort: $sort\n sortDir: $sortDir\n offset: $offset\n limit: $limit\n ) {\n items {\n id\n companyId\n name\n slug\n officeMlsId\n shortDescription\n fullDescription\n addressLine1\n addressLine2\n addressCity\n addressState\n addressPostalCode\n addressCountry\n phone\n email\n officeHours\n coordinates\n googlePlaceData\n seoTitle\n seoDescription\n fullAddress\n tags\n media {\n id\n originalUrl\n thumbnailUrl\n smallUrl\n mediumUrl\n largeUrl\n xLargeUrl\n xxLargeUrl\n }\n }\n total\n }\n }\n","teams":"\n query Teams (\n $companyId: ID\n $teamIds: [ID!]\n $agentId: ID\n $externalIds: [String!]\n $externalSource: String\n $slug: String\n $search: String\n $sort: String\n $sortDir: String\n $offset: Int\n $limit: Int\n ) {\n teams (\n companyId: $companyId\n teamIds: $teamIds\n agentId: $agentId\n externalIds: $externalIds\n externalSource: $externalSource\n slug: $slug\n search: $search\n sort: $sort\n sortDir: $sortDir\n offset: $offset\n limit: $limit\n ) {\n items {\n id\n companyId\n name\n email\n shortBio\n addressLine1\n addressLine2\n addressCity\n addressState\n addressCountry\n phoneNumber1\n phoneNumber2\n postalCode\n avatar {\n id\n thumbnailUrl\n smallUrl\n mediumUrl\n largeUrl\n }\n urlWebsite\n socialLinks\n socialLinksArray\n tags\n seoTitle\n seoDesc\n slug\n displayOrder\n }\n total\n }\n }\n"}, 3596 propertyPlaceholderImage: {"id":"20c18a72-fa66-4e51-9f6a-0ab3003403c5","alt":null,"bytes":43683,"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/c7438ea9-abb7-47be-b004-8d4abcf471e0","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/c7438ea9-abb7-47be-b004-8d4abcf471e0","authorUrl":null,"createdAt":"2025-04-17T18:38:20.808Z","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/c7438ea9-abb7-47be-b004-8d4abcf471e0","sourceUrl":null,"updatedAt":"2025-04-17T18:38:20.808Z","xLargeUrl":"https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/c7438ea9-abb7-47be-b004-8d4abcf471e0","__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/c7438ea9-abb7-47be-b004-8d4abcf471e0","de
3596scription":null,"displayName":"property_richard-scully-and-associates","originalUrl":"https://media-production.lp-cdn.com/cdn-cgi/image/format=auto,quality=85/https://media-production.lp-cdn.com/media/c7438ea9-abb7-47be-b004-8d4abcf471e0","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/c7438ea9-abb7-47be-b004-8d4abcf471e0","originalFileName":"Property_Richard Scully & Associates","cloudinaryPublicId":"c7438ea9-abb7-47be-b004-8d4abcf471e0"} 3597 }, 3598 objectToQuerystring: objectToQuerystring, 3599 getPath: getPath, 3600 getMLSAutocomplete: getMLSAutocomplete, 3601 getMLSAutocompleteWithFilters: getMLSAutocompleteWithFilters, 3602 makeMlsLink: makeMlsLink, 3603 debounce: debounce, 3604 }; 3605 3606 var wowOffset = 100; 3607 </script>
3607 3608
3608<script> 3609 (()=>{function e(e){return e&&e.__esModule?e.default:e}var t={},i={};i={getVideoFirstFrame(e){let t="https://res.cloudinary.com/";if(!e||!e.startsWith(t))return null;let i=e.replace(t,"").replace("f_auto:video","f_auto").split("/");if(-1===i[1].toLowerCase().indexOf("video"))return null;let r=i[i.length-1];r.lastIndexOf(".")>-1?r=`${r.slice(0,r.lastIndexOf("."))}.jpg`:r+=".jpg",i[i.length-1]=r;let s=3;"videos"===i[1].toLowerCase()&&""!==i[2]&&(s=2);let a=/^(?:[a-z]{1,3}|\$\w+)_\S+$/;for(;s<i.length-1&&a.test(i[s]);)s++;return i.splice(s,0,"so_0,eo_0"),t+i.join("/")}};let r={amp:"&",lt:"<",gt:">",quot:'"',apos:"'",nbsp:" "},s=/&(?:amp|lt|gt|quot|apos|nbsp|#(?:[0-9]+|[xX][0-9a-fA-F]+));/y,a=/[<&]/g,o=/["'>]/g,n=/<\/p\s*>|<br\s*\/?>|[\r\n\u2028\u2029]/g;function l(e,t){let i="";for(let l=0;l<e.length;){a.lastIndex=l;let d=a.exec(e);if(!d){i+=e.slice(l);break}let c=d.index;i+=e.slice(l,c);let u="&"===e[c]?function(e,t){s.lastIndex=t;let i=s.exec(e);return{text:i?function(e){if("#"!==e[1])return r[e.slice(1,-1)];
3609let t="x"===e[2]||"X"===e[2],i=parseInt(e.slice(t?3:2,-1),t?16:10);return 0===i||i>1114111||i>=55296&&i<=57343?e:160===i?" ":String.fromCodePoint(i)}(i[0]):"&",end:i?s.lastIndex:t+1}}(e,c):function(e,t,i){let r=function(e,t){let i=null;o.lastIndex=t+1;let r=o.exec(e);for(;r;){let t=r[0];if(i)t===i&&(i=null);else if('"'===t||"'"===t)i=t;else if(">"===t)return o.lastIndex;r=o.exec(e)}return -1}(e,t);return{text:-1===r?"<":function(e,t,i,r){if(!r)return"";let s=e.slice(t,i);if(/^<br\s*\/?>$/.test(s))return" ";if(/^<\/p\s*>$/.test(s)){n.lastIndex=i;let t=n.exec(e);if(t&&"<"===t[0][0])return" "}return""}(e,t,r,i),end:-1===r?t+1:r}}(e,c,t);i+=u.text,l=u.end}return i}t=function(e,{isEqual:t}){let r=[{field:"thumbnailUrl",w:320},{field:"smallUrl",w:960},{field:"mediumUrl",w:1280},{field:"largeUrl",w:1920},{field:"xLargeUrl",w:2560},{field:"xxLargeUrl",w:3456}],s=function(e,t,i){let r="en-US";if(!e)return"";if("string"==typeof e){let t=e.trim();if(/[^+\-0-9.]/.test(t))return e;if(!(e=parseFloat(t)))return""}let s="number"==typeof i?i:0,a=Number.isInteger(e)?0:s,o={minimumFractionDigits:a,maximumFractionDigits:a};return"USD"===t?`$${e.toLocaleString(r,o)}`:"CAD"===t?`$${e.toLocaleString(r,o)} CAD`:"EUR"===t?`\u{20AC}${e.toLocaleString(r,o)}`:"GBP"===t?`\xa3${e.toLocaleString(r,o)}`:"PERCENT"===t?`${e}%`:"number"==typeof i&&i>-1?e.toLocaleString(r,{maximumFractionDigits:i}):e.toLocaleString(r)},a=function(e){switch(e){case"DAY":return"daily";case"MONTH":return"monthly";case"WEEK":return"weekly";case"YEAR":return"yearly";case"QUARTER":return"quarterly";case"HALF_YEAR":return"semi-annually";case"NIGHTLY":return"nightly";case"SEASONAL":return"seasonally";default:return""}},o=function(e){switch(e){case"DAY":return"day";case"WEEK":return"wk";case"MONTH":return"mo";case"YEAR":return"yr";case"QUARTER":return"3 mos";case"HALF_YEAR":return"6 mos";case"NIGHTLY":return"night";case"SEASONAL":return"season";default:return""}},n=function(e){switch(e){case"DAY":return"day";case"WEEK":return"week";case"MONTH":return"month";case"YEAR":return"year";case"QUARTER":return"quarter";case"HALF_YEAR":return"6 months";case"NIGHTLY":return"night";case"SEASONAL":return"season";default:return""}},d=function(e,t){let i,r,s=t||{};switch(s.mode){case"short":i=o(e),r=s.frequencySeparator||"/";break;case"standard":case"std":i=n(e),r=s.frequencySeparator||"/";break;default:i=a(e),r=s.frequencySeparator||" "}return i?s.frequencyTag||s.frequencyClass?`${r}<${s.frequencyTag||"span"}${s.frequencyClass?` class="${s.frequencyClass}"`:""}>${i}</${s.frequencyTag||"span"}>`:r+i:""};return{isEmpty(e,t){let i=!e||"string"==typeof e&&!e.trim()||!Object.keys(e).length;return t.fn?i?t.fn(this):t.inverse(this):i},ifEquals(e,i,r){return t(e,i)?r.fn(this):r.inverse(this)},"raw-helper":function(e){return e.fn()},striptags:e=>e?l(e=(e=e.replace(/<\!--(.|[\r\n])*?-\->/g,"")).replace(/<(xml|style|svg)("[^"]*"|'[^']*'|[^>])*>(.|[\r\n])*?<\/\1>/gi,""),!1):"",striptagsLineBreaks:e=>e?l(e=(e=e.replace(/<\!--(.|[\r\n])*?-\->/g,"")).replace(/<(xml|style|svg)("[^"]*"|'[^']*'|[^>])*>(.|[\r\n])*?<\/\1>/gi,""),!0):"",truncate:(e,t,i)=>e?e.length>t?"string"==typeof i?e.slice(0,t-i.length)+i:e.slice(0,t):e:"",setSubArray(e=[],t,i,r,s){s.data.root[r]=e.slice(t,i)},formatAreaUnit(e){switch(e){case"ACRE":return"Acres";case"SQUARE_METER":return"Sq.M.";case"SQUARE_YARD":return"Sq.Yd.";default:return"Sq.Ft."}},formatFrequency:a,formatFrequencyShort:o,lpFormatFrequency:(e,t)=>d(e,t&&t.hash),subArray(e,t,i,r){return e>=t&&e<i?r.fn(this):r.inverse(this)},formatPropertyStatus(e,t,i){let r="";switch(e){case"SOLD":r="Sold";break;case"FOR_SALE":r="For Sale";break;case"COMING_SOON":r="Coming Soon";break;case"INACTIVE":r="Inactive";break;case"POCKET_LISTING":r="Pocket Listing";break;case"PENDING":r="Pending";break;case"UNDER_CONTRACT":r="Under Contract";break;case"ACTIVE_UNDER_CONTRACT":r="Active Under Contract";break;default:r=e}return("Sold"===r||"Leased"===r)&&t&&"string"==typeof i&&i&&(r+=` on ${i}`),r},formatGrade(e){switch(e){case"UNDERGRADUATE_COURSES":return"Undergrad";case"PRE_KINDERGARTEN":return"PreK";case"KINDERGARTEN":return"K";case"FIRST_GRADE":return"1st";case"SECOND_GRADE":return"2nd";case"THIRD_GRADE":return"3rd";case"FOURTH_GRADE":return"4th";case"FIFTH_GRADE":return"5th";case"SIXTH_GRADE":return"6th";case"SEVENTH_GRADE":return"7th";case"EIGHTH_GRADE":return"8th";case"NINTH_GRADE":return"9th";case"TENTH_GRADE":return"10th";case"ELEVENTH_GRADE":return"11th";case"TWELFTH_GRADE":return"12th";default:return""}},encodeURI:e=>encodeURI(e),encodeURIComponent:e=>encodeURIComponent(e),hbFormatDate(e,t){if(!e)return"";let i="current"===e?new Date:new Date(e);if(Number.isNaN(i.getTime()))return"";if("YYYY"===t||"year"===t)return`${i.getFullYear()}`;if("MM/DD/YY"===t){let e=i.getMonth()+1;return e<10&&(e=`0${e.toString()}`),`${e}/${i.getDate()}/${i.getFullYear().toString().substr(-2)}`}return`${["January","February","March","April","May","June","July","August","September","October","November","December"][i.getMonth()]} ${i.getDate()}, ${i.getFullYear()}`},openHousesFormat(e,t,i){if(!e||!t)return"";let r=e=>{let t=e.getHours();t>12&&(t-=12);let i=`${t}:${e.getMinutes()>9?e.getMinutes():"0"+e.getMinutes()}`;return e.getHours()>11?i+="PM":i+="AM",i},s="",a=e,o=t;
3609i&&(a=new Date(e).toLocaleString("en-US",{timeZone:i}),o=new Date(t).toLocaleString("en-US",{timeZone:i}),[,,,s]=new Date(t).toLocaleString("en-US",{timeZone:i,timeZoneName:"short"}).split(" "));let n=new Date(a),l=n.toLocaleDateString("en-US"),d=r(n),c=r(new Date(o));return`${l} ${d} - ${c} ${s}`},math:(e,t,i)=>(e=parseFloat(e),({"+":e+(i=parseFloat(i)),"-":e-i,"*":e*i,"/":e/i,"%":e%i})[t]),findByKey(e,t,i,r){let s=(e||[]).find(e=>e[t]===i);return r.fn(s)},capitalize(e,t,i){let r;return"string"==typeof e&&e.length&&(r=e.toLowerCase().split(t).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ").toString()),r},and:(...e)=>Array.prototype.slice.call(e).every(Boolean),or:(...e)=>Array.prototype.slice.call(e,0,-1).some(Boolean),not:e=>!e,orderByIds(t,i,r){let s="",a=null;r.data&&(a=e.createFrame(r.data));let o=(i||[]).filter(Boolean);if(o&&o.length){let e=0;s=o.reduce((i,s,o)=>{let n=(t||[]).find(e=>e.id===s);return n?(a&&(a.index=o-e),i+r.fn(n,{data:a})):(e+=1,i)},"")}else for(let e=0,i=(t||[]).length;e<i;e++)a&&(a.index=e),s+=r.fn(t[e],{data:a});return s},ifIn(e,t,i){return t&&t.indexOf(e)>-1?i.fn(this):i.inverse(this)},partial:(t,i)=>(e.registerPartial(t,e.compile(i.fn())),`
3609<script type="text/x-handlebars-template" class="${t} pagination-script">${i.fn()}<\/script>`),numCompare(e,t,i,r){return({"==":function(e,t){return e==t},"===":function(e,t){return e===t},"!=":function(e,t){return e!=t},"<":function(e,t){return e<t},">":function(e,t){return e>t},"<=":function(e,t){return e<=t},">=":function(e,t){return e>=t}})[i](e,t)?!r.fn||r.fn(this):!!r.fn&&r.inverse(this)},lpFormatNumber:s,arrayToHtmlList:(e,t)=>e.reduce((e,t)=>{try{if("object"==typeof t||null===t)return e;return e+=`<li>${t}</li>`}catch(e){}},""),join:(e,t,i)=>e&&e.join?e.join("string"==typeof t?t:", "):"",dedupe(t,i,r){let s=null,a=0,o=new Set;return r.data&&(s=e.createFrame(r.data)),(t||[]).reduce((e,t,n)=>{let l=i?t[i]:t;return!o.has(l)||i&&void 0===l?(o.add(l),s&&(s.index=n-a),e+r.fn(t,{data:s})):(a+=1,e)},"")},JSONstringify:(e,t)=>JSON.stringify(e),formatPropertyPrice(...t){let i=t[t.length-1].hash,r=t.length>1?t[0]:i.property,a=i.precision||0;t.length>2&&(i.mode=t[1]),i.mode||(i.mode="short");let o=t.length>3?t[2]:i.separator;if("string"!=typeof o&&(o=" | "),r.isPasswordProtected)return"Exclusive Listing";let n=t.length>4?t[3]:i.priceUponRequestText;if("string"!=typeof n&&(n="Price Upon Request"),r.priceUponRequest)return n;let l=r.salesPrice,c=null;"SOLD"!==r.status&&"Leased"!==r.status&&r.reducedPrice&&(i.reducedClass?c=r.reducedPrice:l=r.reducedPrice);let u="";c&&(u+=`<${i.reducedTag||"span"} class="${i.reducedClass}">${s(c,r.currency,a)}</${i.reducedTag||"span"}>`),l&&(l=s(l,r.currency,a),i.priceTag||i.priceClass?u+=`<${i.priceTag||"span"}${i.priceClass?` class="${i.priceClass}"`:""}>${l}</${i.priceTag||"span"}>`:u+=l);let h=r.leasePrice&&s(r.leasePrice,r.currency,a);if(h){u&&(u+=o);let e=`${h}${d(r.leasePeriod,i)}`;i.leaseTag||i.leaseClass?u+=`<${i.leaseTag||"span"}${i.leaseClass?` class="${i.leaseClass}"`:""}>${e}</${i.leaseTag||"span"}>`:u+=e}
3609return new e.SafeString(u)},mediaImage(t,i={}){if(!t)return;let{lazy:s,...a}=i.hash,o="",n="";if("string"==typeof t)o=t;else{let e={},{height:s,width:l,altTagText:d}=t;r.forEach(i=>{t[i.field]&&!e[t[i.field]]&&(e[t[i.field]]=i.w)});let c=Object.keys(e);if(!c.length)return;if(d&&(a.alt=d),s&&l&&(s>=l&&(a.class?a.class+=" portrait":a.class="portrait"),"setDims"in i.hash&&(a.width=l,a.height=s)),c.length>1&&l&&l<e[c[c.length-1]]){let t=c.findIndex(t=>e[t]>=l);c.splice(t+1),e[c[c.length-1]]=l}c.length>1&&(n=c.map(t=>`${t} ${e[t]}w`).join(", "),c.sort((t,i)=>Math.abs(e[t]-1280)-Math.abs(e[i]-1280))),o=c[0]}delete a.setDims,n||delete a.sizes,"alt"in a||(a.alt=""),!("loading"in a)&&(i?.data?.root?.sectionIndex>1||s)&&(a.loading="lazy");let l=Object.keys(a).map(t=>`${e.escapeExpression(t)}="${e.escapeExpression(a[t])}"`).join(" ");return new e.SafeString(`<img src="${o}"${n?` srcset="${n}"`:""}${l?` ${l}`:""}>`)},bgImage:e=>e?"string"==typeof e?e:e.largeUrl||e.url||"":"",concat(...e){let t="";for(let i in e)null!==e[i]&&void 0!==e[i]&&"object"!=typeof e[i]&&(t+=e[i]);return t},setVideoExtension(e,t){if(!e||!t)return"";let i=new URL(e);if("res.cloudinary.com"!==i.host)return i.pathname.endsWith(`.${t}`)?e:"";let r=i.pathname.lastIndexOf("."),s=i.pathname;return -1!==r&&(s=i.pathname.substr(0,r)),i.pathname=`${s}.${t}`,i.toString()},addVideoSources(e){if(!e)return"";if(!e.includes("res.cloudinary.com"))return`<source data-src="${e}">`;let t=e.replace(/\.(?:3gp|mpeg|mp4|m4v|m4p|ogv|ogg|mov|webm)$/,"");return[{format:"webm",codec:"vp9",htmlCodecs:";codecs=vp9"},{format:"mp4",codec:"h265",htmlCodecs:";codecs=hvc1"},{format:"mp4",codec:"h264",htmlCodecs:""}].map(e=>{let i=`${t.replace(/f_auto(?::video)?(?:,q_auto(?::\w+)?)?/,`f_${e.format},vc_${e.codec},q_auto:best,w_1920,c_limit`)}.${e.format}`;return`<source data-src="${i}" type="video/${e.format}${e.htmlCodecs}">`}).join("\n")},cloudinaryVideoFirstFrame:i.getVideoFirstFrame,initials(e,t){if(!e)return"";t?.hash?.endChar&&(e=e.split(t.hash.endChar)[0]);let i=+t?.hash?.maxChars||2,r=e.match(/\b\w/g)?.slice(0,i);return r?(t?.hash?.addText&&(r=r.map(e=>e+t.hash.addText)),r.join(t?.hash?.joinWith||"").toUpperCase()):""},normalizePhone(e){if(!e)return"";let t=String(e).trim();return(t.startsWith("+")?"+":"")+t.replace(/\D/g,"")}}};class d{constructor(e,t,i){if(this.config=e,this.window=t,this.document=i,!this.destroy)throw Error("Controllers must implement a deconstructor")}}let c="lp_lead_form_conversion_fired";function u(e,t){if(e&&t&&"function"==typeof t.sendGoogleTagManagerEvent&&!function(e){try{return"true"===e.sessionStorage.getItem(c)}catch{return!1}}(e))try{t.sendGoogleTagManagerEvent("event","generate_lead");try{e.sessionStorage.setItem(c,"true")}catch{}}catch{}}function h(e){return!!e&&(!!e.expired||Date.now()>=e.expiresAt)}let p="/api/v1/home-valuation";class m extends d{destroy(){}_cleanAddressString(e){if(!e||"string"!=typeof e)return"";let t=e.trim();if(t.includes("User entered address:")){let e=t.match(/User entered address:\s*\n?\s*([^\n]+)/);e&&e[1]&&(t=e[1].trim())}let i=t.indexOf(", call time frame:");return -1!==i&&(t=t.substring(0,i).trim()),t}_transformAddressComponents(e){let t=t=>(e.find(e=>e.componentType===t)||{}).componentName?.text,i={},r=t("street_number"),s=t("route"),a=t("administrative_area_level_1"),o=t("postal_code"),n=t("subpremise"),l=t("locality")||t("sublocality_level_1")||t("neighborhood");return r&&(i.streetNumber=r),s&&(i.streetName=s),l&&(i.city=l),a&&(i.state=a),o&&(i.zipcode=o),n&&(i.addressLine2=n),i}_extractAddressAndCoordinates(e){let t=null,i=null;if(e?.result){let{result:r}=e;r.address?.addressComponents&&(t=this._transformAddressComponents(r.address.addressComponents)),r.geocode?.location&&(i={latitude:r.geocode.location.latitude,longitude:r.geocode.location.longitude})}return{structuredAddress:t,coordinates:i}}_filterEmptyStrings(e){let t={};for(let[i,r]of Object.entries(e))""!==r&&null!=r&&(t[i]=r);return t}_getRawAddress(e){let t=e.activity.content||{},i=e.activity.comments_attributes?.[0]?.text;return[t.address,t["property-address"],t.property_address,t.Property_Address,i,t.message,t.homeValuationAddress,t.propertyAddress].map(e=>e&&this._cleanAddressString(e)).find(Boolean)||""}_logLeadEvent(e,t,i=null){let r={event:e,companyId:this.config.companyId,websiteId:this.config.websiteId,timestamp:new Date().toISOString(),hasEmail:!!t.activity?.author_email,hasAddress:!!this._getRawAddress(t)};if(i&&(r.errorMessage=i.userMessage||(i.status?`Request failed with status ${i.status}`:"An error occurred"),r.errorName=i.name,r.errorStatus=i.status),console.error(`[HomeValuation] ${e}`,JSON.stringify(r)),this.window.posthog)try{this.window.posthog.capture(e,r)}catch(e){console.error("[HomeValuation] PostHog capture failed:",e)}}_getUserFriendlyErrorMessage(e){return"AbortError"===e.name||e.message?.includes("timeout")?"Connection timed out. Please try again.":"TypeError"===e.name&&e.message?.includes("fetch")?"Unable to connect. Please check your internet connection and try again.":503===e.status||502===e.status||504===e.status?"Service temporarily unavailable. Please try again in a moment.":400===e.status?"Please check your information and try again.":"Something went wrong. Please try again or c
3609ontact us directly."}_formatStructuredAddress(e){if(!e||0===Object.keys(e).length)return"";let t=[];return t.push([e.streetNumber,e.streetName,e.addressLine2].filter(Boolean).join(" ")),t.push([[e.city,e.state].filter(Boolean).join(", "),e.zipcode].filter(Boolean).join(" ")),t.filter(Boolean).join(", ")}_buildHomeValuationData(e,t,i,r){let s=this._formatStructuredAddress(i)||this._getRawAddress(e);if(!s)throw Error("Unable to extract home valuation address from form data");let a={companyId:e.companyId,homeValuationAddress:s,homeValuationEstimate:t?new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",maximumFractionDigits:0,minimumFractionDigits:0}).format(t):null,websiteId:e.page.websiteId,sourceUrl:e.activity.source_url},o={leadEmailAddress:e.activity.author_email,leadFullName:e.activity.author_name,leadFirstName:e.activity.firstName,leadLastName:e.activity.lastName,leadPhoneNumber:e.activity.author_phone,parcelId:e.activity.content?.parcelId,resourceId:e.page.pageMeta?.resourceId,pageId:e.page.pageId,sourceResource:e.page.pageMeta?.s
3609ourceResource,pageElementId:e.page.pageMeta?.pageElementId,formId:e.page.pageMeta?.formId,utmSource:e.activity.content?.utm_source,utmMedium:e.activity.content?.utm_medium,utmCampaign:e.activity.content?.utm_campaign,utmTerm:e.activity.content?.utm_term,utmContent:e.activity.content?.utm_content,utmId:e.activity.content?.utm_id,timeToSell:e.activity.content?.timeToSell,lookingToBuy:e.activity.content?.lookingToBuy,consented:!!e.activity.content?.termsAccepted,referrer:e.referrer,content:e.activity.content||{},fields:e.fields||{}},n=this._filterEmptyStrings(o);return{...a,...n,...i&&{address:i},...r&&{coordinates:r}}}async _validateAddressSafely(e){if(!e)return console.error("Home valuation: No address found in form data"),null;try{return await this._validateAddressWithGoogleMaps(e)}catch(e){throw console.error("Error validating address with Google Maps:",e),e.userMessage=this._getUserFriendlyErrorMessage(e),e}}async _getHomeValuationEstimateSafely(e){try{return await this._getHomeValuationEstimate(e)}catch(e){throw console.error("Error getting home valuation estimate:",e),e.userMessage=this._getUserFriendlyErrorMessage(e),e}}_isSafeRedirectUrl(e){try{let{protocol:t}=new URL(e,this.window.location.href);return"https:"===t||"http:"===t}catch{return!1}}_parseResponsePayload(e){try{return e?JSON.parse(e):{}}catch{return{raw:e}}}_createResponseError(e,t){let i=Error(e&&"object"==typeof e&&Object.keys(e).length?e.message||JSON.stringify(e):"Request failed");return e&&"object"==typeof e&&Object.keys(e).length&&Object.assign(i,e),i.status=t,i}_resolveValuationApiBase(){let{config:e}=this;if(void 0!==e.valuationApiBase&&null!==e.valuationApiBase&&(""!==e.valuationApiBase||!e.isBuilder))return e.valuationApiBase;if(e.websiteApiGatewayUrl)return e.websiteApiGatewayUrl;throw Error("websiteApiGatewayUrl/valuationApiBase not configured for home valuation")}async _submitLead(e,t,i){let r=new AbortController,s=setTimeout(()=>r.abort(),1e4);try{let a=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t),signal:r.signal});clearTimeout(s);let o=await a.text(),n=this._parseResponsePayload(o);if(!a.ok)throw this._createResponseError(n,a.status);if(n&&"success"===n.status&&n.redirectUrl){if(h(i))return n;if(!this._isSafeRedirectUrl(n.redirectUrl))return console.error("Home valuation: refusing redirect to unsupported protocol"),n;return this.window.location.href=n.redirectUrl,{redirected:!0,url:n.redirectUrl}}return n}catch(e){throw clearTimeout(s),e}}async _submitHomeValuationRequest(e){let t=this._resolveValuationApiBase();this._logLeadEvent("home_valuation_submission_started",e);try{let i=this._getRawAddress(e),r=null;try{r=await this._validateAddressSafely(i)}catch(t){throw this._logLeadEvent("home_valuation_address_validation_failed",e,t),t}let s=null;try{s=await this._getHomeValuationEstimateSafely(r)}catch(t){this._logLeadEvent("home_valuation_estimate_failed",e,t),s=null}let{structuredAddress:a,coordinates:o}=this._extractAddressAndCoordinates(r),n=`${t}${p}`,l=this._buildHomeValuationData(e,s,a,o),d=await this._submitLead(n,l,e.deadline);return this._logLeadEvent("home_valuation_submission_success",e),d}catch(t){throw t.userMessage||(t.userMessage=this._getUserFriendlyErrorMessage(t)),this._logLeadEvent("home_valuation_submission_failed",e,t),t}}async _validateAddressWithGoogleMaps(e){let{config:t,window:i}=this,r=t.googleMapsAPIKey;if(!r&&i.luxuryPresence?.mapApiLoader&&(r=await i.luxuryPresence.mapApiLoader.getMapApiKey()),!r)throw Error("Google Maps API key not configured");let s=new AbortController,a=setTimeout(()=>s.abort(),1e4);try{let t=await fetch(`https://addressvalidation.googleapis.com/v1:validateAddress?key=${r}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({address:{addressLines:[e]},enableUspsCass:!1}),signal:s.signal});if(clearTimeout(a),!t.ok){let e=Error(`Address validation failed: ${t.status}`);throw e.status=t.status,e}return t.json()}catch(e){throw clearTimeout(a),e}}_hasMandatoryAddressFields(e){return!!(e.streetNumber&&e.streetName&&e.city&&e.state&&e.zipcode)}_logMissingAddressFields(e){let t=[];e.streetNumber||t.push("streetNumber"),e.streetName||t.push("streetName"),e.city||t.push("city"),e.state||t.push("state"),e.zipcode||t.push("zipcode"),console.log("Home valuation estimate skipped - missing required fields:",t.join(", "),"Available fields:",Object.keys(e).join(", "))}_buildAddressQueryString(e){return Object.entries(e).map(([e,t])=>`${encodeURIComponent(e)}=${encodeURIComponent(t)}`).join("&")}async _getHomeValuationEstimate(e=null){let t=`${this._resolveValuationApiBase()}${p}`;if(!e?.result?.address?.addressComponents)return null;let i=this._transformAddressComponents(e.result.address.addressComponents);if(!this._hasMandatoryAddressFields(i))return this._logMissingAddressFields(i),null;let r=this._buildAddressQueryString(i),s=`${t}?${r}`,a=new AbortController,o=setTimeout(()=>a.abort(),1e4);try{let e=await fetch(s,{headers:{Accept:"application/json"},signal:a.signal});if(clearTimeout(o),!e.ok){let t=Error(`Home valuation estimate failed: ${e.status}`);throw t.status=e.status,t}let t=await e.json();return t?.valueDollars??null}catch(e){throw clearTimeout(o),e}}}let g="middleName",y="redirect-pending",f=["name","firstName","lastName",g,"email","phone","phoneNumber","source","message","mlsId","sourceUrl"],v="lp_map_key_failed",w="oauthSuccess",b={cookieyes:{eventName:"cookieyes_consent_update",hasAnalyticsConsent:e=>(function(e){let t=e.cookie.match(/cookieyes-consent=([^;
3609]+)/);if(!t)return!1;try{let e=decodeURIComponent(t[1]);if(e.includes(",")){let t=e.split(",").map(e=>e.trim());if(t.some(e=>e.includes(":")))return t.some(e=>"analytics:yes"===e);return t.includes("analytics")}return e.includes("analytics")}catch(e){return!1}})(e),isAnalyticsAccepted:e=>Array.isArray(e?.accepted)&&e.accepted.includes("analytics")},"lp-consent":{eventName:"lp_consent_update",hasAnalyticsConsent:(e,t)=>!!t.__lpConsent?.state?.c?.analytics,isAnalyticsAccepted:e=>!!e?.choices?.analytics}};function S(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function _(e,t){t.forEach(t=>{let i=e[t];Array.isArray(i)&&0===i.length&&delete e[t]})}function I(e,t,i,r){let s=t.map(t=>(function e(t){return Array.isArray(t)?t.flatMap(t=>e(t)):"string"==typeof t?t.split(/\s+/).filter(Boolean):null==t?[]:[t]})(e[t])),a=r?.merge?s.flat():s.find(e=>e.length>0)??[];t.forEach(t=>{delete e[t]}),a.length>0&&(e[i]=[...new Set(a)])}function E(e){let t={...e};if(t.urlWebsite||(t.urlWebsite=null),t.urlYoutube=null,t.urlFacebook=null,t.urlInstagram=null,t.urlLinkedin=null,t.urlPodcast=null,t.urlTwitter=null,Array.isArray(e.socialLinks)){let i=[...e.socialLinks].sort((e,t)=>{let i=e.type?.toLowerCase()||"",r=t.type?.toLowerCase()||"";return i.localeCompare(r)});t.socialLinks=i;let r={youtube:"urlYoutube",facebook:"urlFacebook",instagram:"urlInstagram",linkedin:"urlLinkedin",podcast:"urlPodcast",twitter:"urlTwitter"};i.forEach(e=>{let i=r[e.type?.toLowerCase()??""];i&&(t[i]=e.link)})}return t}function A(e){return e&&Array.isArray(e)?e.map(e=>E(e)):e}function L(e){let{region:t}=e;if(!S(t))return e;let{schools:i,pois:r,...s}=t,a={...s,schools:S(i)?i.data??[]:[],...Array.isArray(r)?{pois:r.map(e=>({...e,category:"string"==typeof e.category?e.category.toUpperCase():e.category}))}:{}};return{...e,region:a}}function x(e){return e&&Array.isArray(e)?e.map(e=>L(e)):e}function $(e){let t=e.featuresAndAmenities;if(!Array.isArray(t))return e;let i=t.map(e=>({featureIds:e.featureIds??[],features:e.features??[],description:e.description}));return{...e,featuresAndAmenities:i}}function T(e){return e&&Array.isArray(e)?e.map(e=>$(e)):e}function C(e,t){return S(e)?t(e):e}function k(e,t){return Array.isArray(e)?t(e):e}var M={};M=` 3610 query PropertyDisclaimers($input: PropertyDisclaimersInput!) { 3611 propertyDisclaimers(input: $input) { 3612 feedId 3613 listingId 3614 resolvedFromListing 3615 listingCardAttribution 3616 listingDetailCourtesy 3617 listingDetailFooter 3618 logo 3619 } 3620 } 3621`;let P={mlsAttribution:"listingCardAttribution",mlsLogo:"logo",listingDetailCourtesy:"listingDetailCourtesy",listingDetailFooter:"listingDetailFooter"},U=new class{constructor(e){this.isBuilder=!1,this.companyId=null,this.websiteId=null,this.pageId=null,this.shareId=null,this.pageMeta=null,this.websiteApiGatewayUrl=null,this.buyerSellerServiceUrl=null,this.leadIngesterUrl=null,this.divolteServiceUrl=null,this.eventBus=null,this.templateId=null,this.myhomeDashboardEnabled=!1,this.mlsEnabled=!1,this.hstValuationRedirectEnabled=!1,this.hvStepTwoCaptureEnabled=!1,this.googleMapsAPIKey=null}get valuationApiBase(){return this.isBuilder?this.websiteApiGatewayUrl:""}destroy(){}setPage(e,t={}){this.pageId=e,this.shareId=t.shareId||null,this.pageMeta={sourceResource:t.sourceResource,pageElementId:t.pageElementId,pageQueryVariables:t.pageQueryVariables||{}}}setIsBuilder(e){this.isBuilder=e}setCompany(e,t={}){this.companyId=e}setWebsite(e,t={}){this.websiteId=e,t.myhomeDashboardEnabled&&(this.myhomeDashboardEnabled=t.myhomeDashboardEnabled),t.mlsEnabled&&(this.mlsEnabled=t.mlsEnabled),t.hstValuationRedirectEnabled&&(this.hstValuationRedirectEnabled=t.hstValuationRedirectEnabled),t.hvStepTwoCaptureEnabled&&(this.hvStepTwoCaptureEnabled=t.hvStepTwoCaptureEnabled)}setWebsiteApiGatewayUrl(e,t={}){this.websiteApiGatewayUrl=e}setBuyerSellerServiceUrl(e,t={}){this.buyerSellerServiceUrl=e}setDivolteServiceUrl(e,t={}){this.divolteServiceUrl=e}setEventBusUrl(e,t={}){this.eventBusUrl=e}setTemplateId(e,t={}){this.templateId=e}setLeadIngesterUrl(e,t={}){this.leadIngesterUrl=e}setGoogleMapsAPIKey(e,t={}){this.googleMapsAPIKey=e}setEventBus({enabled:e,apiKey:t,url:i}){this.eventBus={enabled:e,apiKey:t,url:i}}}({}),N=new class extends d{constructor(e,t,i){super(e,t,i),this.setLoginState=this.setLoginState.bind(this),this.pageId=null,this.modals=[],this.exitModalTriggered={},this.exitModalEventListeners=[]}initialize(e){try{let{config:t,document:i}=this;this.pageId=t.pageId,this.modals=i.querySelectorAll("body > #modals >
3621 .modal"),e.modals.forEach(e=>{this._attachModalHandler(e)})}catch(e){console.log(e)}}destroy(){let{document:e}=this;this.exitModalEventListeners.forEach(t=>{e.removeEventListener("mouseout",t)}),this.modals=[],this.exitModalTriggered={},this.exitModalEventListeners=[]}setModalWithExpiry(e){let{window:t}=this,i=new Date().getTime()+864e5,r=`modal-controller-${e}`;try{t.localStorage.setItem(r,JSON.stringify(i))}catch(e){}}setLoginState(){let{window:e}=this;try{e.localStorage.setItem("isSignedUp","true")}catch(e){}}getModalWithExpiry(e){let{window:t}=this,i=t.localStorage,r=i.getItem(`modal-controller-${e}`);if(!r)return!1;let s=JSON.parse(r);return!(new Date().getTime()>s)||(i.removeItem(`modal-controller-${e}`),!1)}show(e,t={}){let{window:i}=this,r=this.getModalWithExpiry(e);(e&&!r||!0===t.forced)&&(i.lpUI.showModal(`modal-${e}`,t),this.setModalWithExpiry(e))}_attachModalHandler(e){let{pageId:t}=this,{trigger:i,pageSpecific:r}=e;(!r||e.pages.map(e=>e.pageId).includes(t))&&("EXIT"===i?this._exitModalHandler(e):"TIMER"===i?this._timerModalHandler(e):"FORCED"===i&&this._forcedModalHandler(e))}_exitModalHandler(e){let t=this,{document:i,exitModalTriggered:r}=this,{modalId:s}=e;function a(e){!r[s]&&(e.toElement||e.relatedTarget||(t.show(s),r[s]=!0))}i.addEventListener("mouseout",a),this.exitModalEventListeners.push(a)}_timerModalHandler(e){let{modalId:t,timerDelay:i}=e;setTimeout(()=>{this.show(t)},i)}_forcedModalHandler(e){let{modalId:t}=e,{window:i,document:r}=this;if("true"!==i.localStorage.getItem("isSignedUp")){let e=r.querySelector(`#modal-${t}`),s=e?.querySelector("form"),a=s?.dataset.delay||2e3;s.addEventListener("formsubmitted",()=>{this.setLoginState()}),i.addEventListener("oauthSuccess",()=>{this.setLoginState(),s.classList.add("success"),setTimeout(()=>{i.lpUI.hideModal(`modal-${t}`),s.reset(),s.classList.remove("success")},a)}),this.show(t,{forced:!0})}}}(U,window,document),R=new class extends d{constructor(e,t,i){super(e,t,i),this._boundClickHandler=this._buttonClickHandler.bind(this)}initialize(e={}){try{let{document:e}=this;e.body.removeEventListener("click",this._boundClickHandler),e.body.addEventListener("click",this._boundClickHandler)}catch(e){console.error(e)}}destroy(){let{document:e}=this;e.body.removeEventListener("click",this._boundClickHandler)}_buttonClickHandler(e){this._handleButtonClick(e).catch(e=>console.error(e))}async _handleButtonClick(e){let{window:t,document:i}=this,r=e.target.closest("button, a");if(!r)return;let s=r.dataset.type||"",a=r.href||r.dataset.href||"",o=r.target||"",{submit:n}=r.dataset;if(n){try{await this._handleSubmit(r)}catch(e){console.error(e)}((e,t=!1)=>{if(e){if(t)return window.open(e);window.location.assign(e)}})(a,"_blank"===o)}if(this._trackConversion(r),"VIDEO"===s)return void this._handleVideoButton(r);if("CONTACT_US"===s)return void this._handleContactUsButton(r);if("SUBSCRIBE"===s)return void t.lpUI.showModal("modal-global-subscribe");if("MY_ACCOUNT"===s)return void t.lpUI.showModal("modal-global-my-account");if("SHARE_POPUP"===s){let t=r.querySelector(".share-popup");t&&(t.style.display="flex"),e.stopPropagation();return}if("MODAL_"===s.substring(0,6)){let e=s.substring(6);t.lpUI.showModal(`modal-${e}`);return}if(a?.startsWith("mailto:")){let e=a.substring(7);i.sendGoogleAnalyticsEvent({hitType:"event",eventCategory:"button",eventAction:"click",eventLabel:"Email",eventValue:e})}else if(a?.startsWith("tel:")){let e=a.substring(4);i.sendGoogleAnalyticsEvent({hitType:"event",eventCategory:"button",eventAction:"click",eventLabel:"Phone",eventValue:e})}}async _handleSubmit(e){let t=e.closest("form"),{window:i}=this;return t?await i.luxuryPresence.contactForms.submitForm(t):null}_getVimeoSrc(e){if(!e||!e.includes("vimeo.com")||e.length>2e3)return null;let t=e.match(/(?:(?:www\.)?vimeo\.com\/(?:showcase\/\d+(?:\/video\/|\?video[=/])|channels\/(?:\w+\/)?|groups\/(?:[^/]*)\/videos\/|)|player\.vimeo\.com\/video\/)(\d+)(?:(?:\?.*&*h=|\/)+([\d,a-f]+))?/);if(!t)return null;let[,i,r]=t,s=`https://player.vimeo.com/video/${i}?`;return r&&(s+=`h=${r}&`),s+="autoplay=1"}_handleVideoButton(e){let{document:t}=this,i=e.closest("section"),{src:r}=e.dataset,s="";if(r&&(r.includes("youtube.com")||r.includes("youtu.be"))&&!r.includes("youtube.com/embed")){let e=r.match(/(?:youtube\.com\/\S*(?:(?:\/e(?:mbed))?\/|watch\?(?:\S*?&?v=)
3621)|youtu.be\/)([a-zA-Z0-9_-]{6,11})/);e&&(s=e[1])}let a=this._getVimeoSrc(r);if(s?r=`https://youtube.com/embed/${s}?autoplay=1&controls=0`:a&&(r=a),!r||!i)return;let o=r.endsWith(".mp4")||r.endsWith(".webm")||r.includes("cloudinary.com"),n=` 3622 <div id="modal-${i.id}" class="modal visible"> 3623 <div class="modal-content"> 3624 <div class="lightbox-video"> 3625 <div class="video-player"> 3626 <div class="embed-container"> 3627 ${o?`<video controls autoplay src="${r}"></video>`:`<iframe frameborder="0" allowfullscreen="1" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" title="YouTube video player" width="100%" height="100%" src="${r}"></iframe>`} 3628 </div> 3629 </div> 3630 </div> 3631 </div> 3632 <button class="close lp-close" type="button" aria-label="close modal"><span class="lp-close-icon" aria-hidden="true"></span></button> 3633 </div> 3634 `;t.body.insertAdjacentHTML("beforeend",n);let l=t.getElementById(`modal-${i.id}`);l.querySelector(".close").addEventListener("click",()=>{l.remove()})}_handleContactUsButton(e){let{window:t,document:i}=this;i.sendGoogleAnalyticsEvent({hitType:"event",eventCategory:"button",eventAction:"click",eventLabel:"contact"}),t.lpUI.showModal("modal-global-contact-us",{scrollLock:!0})}_trackConversion(e){let{window:t,document:i}=this,{gtagConversionId:r,gtagConversionLabel:s,fbEventName:a}=e.dataset;if(r&&s){t.dataLayer&&t.dataLayer.length&&(t.dataLayer.some(e=>e.length&&"config"===e[0]&&e[1]===r)||i.sendGoogleTagManagerEvent("config",r));let e=`${r}/${s}`;i.sendGoogleTagManagerEvent("event","conversion",{send_to:e})}t.fbq&&a&&t.fbq("track",a,{})}}(U,window,document),B=new class extends d{constructor(e,t,i){super(e,t,i),this.validatedForms=[]}initialize(e={}){try{let{window:t,document:i}=this,{selector:r}=e,s=[];if(s=r?i.querySelectorAll(`${r} form[data-type="contact-form"]`):i.querySelectorAll('form[data-type="contact-form"]'),i.querySelectorAll('input[type="tel"]').length&&!t.libphonenumber&&t?.luxuryPresence?.libs){let{loadJs:e,jsLibsMap:i}=t.luxuryPresence.libs,{libphonenumber:r}=i;e(r.jsSrc,this.attachValidation.bind(this,s))}else this.attachValidation(s);this.validatedForms=this.validatedForms.concat(s)}catch(e){console.log(e)}}destroy(){this.validatedForms=[]}attachValidation(e){e.forEach(e=>{e.querySelectorAll("input, select, textarea").forEach(e=>{this.applyFieldValidation(e)})})}applyFieldValidation(e){"tel"===e.getAttribute("type")&&this._applyPhoneValidation(e)}_applyPhoneValidation(e){let{window:t}=this;if(t.libphonenumber){let i=t.libphonenumber.isValidPhoneNumber;e.addEventListener("keyup",function(){if(this.hasAttribute("required")||this.value.replace(/\s/g,"").length)try{let e=this.value;i(e,"US")?this.setCustomValidity(""):this.setCustomValidity("Please enter a valid phone number.")}catch(e){this.setCustomValidity("Please enter a valid phone number.")}else this.setCustomValidity("")})}}}(U,window,document),D=new class extends d{constructor(e,t,i){super(e,t,i),this.forms=[],this.homeValuationService=new m(e,t,i)}initialize(e={}){try{let{document:t}=this,{selector:i}=e,r=[];(r=i?t.querySelectorAll(`${i} form[data-type="contact-form"]`):t.querySelectorAll('form[data-type="contact-form"]')).forEach(e=>{this._attachSubmitHandler(e)}),this.forms=this.forms.concat(r)}catch(e){console.log(e)}}destroy(){this.forms=[]}submitForm(e){this._handleSubmit(null,e).catch(e=>console.error(e))}_attachValidation(e){let{window:t}=this;e.querySelectorAll("input, select, textarea").forEach(e=>{t.luxuryPresence.validation.applyFieldValidation(e)})}_attachSubmitHandler(e){e.addEventListener("submit",t=>this._handleSubmit(t,e))}_extractFormValues(e){let t=new FormData(e),i={},r=[],s=/^name(?:-\d+)?$/;return t.forEach((e,t)=>{if("string"==typeof e){let a=e.trim();s.test(t)&&a&&r.push(a);let o=i[t];i[t]=o?`${o} ${a}`:a}else i[t]=e}),r.length?i.name=r.join(" ").trim():!i.name&&i.firstName&&(i.name=i.firstName,i.lastName&&(i.name+=` ${i.lastName}`)),this._deriveNameParts(i)}_deriveNameParts(e){if(e.firstName||!e.name)return e;let t=e.name.indexOf(" ");return -1===t?{...e,firstName:e.name}:{...e,firstName:e.name.slice(0,t),lastName:e.lastName||e.name.slice(t+1).trim()}}_buildSubmissionData(e,t,i){let{window:r,config:s}=this,a=Object.keys(e).filter(e=>!f.includes(e)).reduce((t,i)=>(t[i]=e[i],t),{}),{pageId:o,companyId:n,websiteId:l,pageMeta:d}=s,c=r.localStorage.getItem("utm_vars")||"{}",u=r.localStorage.getItem("referrer")||"",h=this._getFormId(i);return{activity:{author_email:e.email,author_name:e.name,firstName:e.firstName||void 0,lastName:e.lastName||void 0,author_phone:e.phone||e.phoneNumber,activity_source:e.source||"CONTACT_INQUIRY",comments_attributes:[{text:e.message||void 0}],source_url:r.location.href,content:{...a,...JSON.parse(c)}},page:{pageId:o,companyId:n,websiteId:l,pageMeta:{...d,formId:h}},companyId:n,referrer:u,fields:t}}_handleSubmissionSuccess(e){let{window:t}=this,i=e.dataset.delay||2e3;e.classList.remove("loading"),e.classList.remove("error"),e.classList.add("success"),e.querySelectorAll(".success").forEach(e
3634=>e.classList.remove("hide")),e.dispatchEvent(new Event("formsubmitted")),setTimeout(()=>{t.lpUI.hideClosestModal(e),e.reset(),t.lpUI.sideMenuHide(),e.querySelectorAll(".success").forEach(e=>e.classList.add("hide")),e.classList.remove("success")},i)}async _handleSubmit(e,t){if(e&&e.preventDefault(),!t.classList.contains("loading")){this._hideSubmissionError(t),t.classList.remove("error"),t.classList.add("loading");try{let e=this._extractFormValues(t);if(e.middleName)return void t.classList.remove("loading");let i=this._getFields(t),r=this._buildSubmissionData(e,i,t);u(this.window,this.document);let s=await this._waitForLeadSubmit(e=>this._submitLeadRequest(r,e));if(this._sendGAEvent(r),s?.redirected)return void this._showRedirectPending(t);this._handleSubmissionSuccess(t)}catch(e){console.error("Form submission failed:",e),t.dispatchEvent(new Event("formsubmiterror")),t.classList.remove("loading"),t.classList.add("error"),e.userMessage?this._showSubmissionError(t,e.userMessage):this._showSubmissionError(t,"Something went wrong. Please try again.")}}}async _waitForLeadSubmit(e){let t,i={expired:!1,expiresAt:Date.now()+6e3},r=new Promise(e=>{t=setTimeout(()=>{i.expired=!0,e(null)},6e3)}),s=e(i).catch(e=>{if(h(i))return null;throw e});try{return await Promise.race([s,r])}finally{clearTimeout(t)}}_showRedirectPending(e){if(e.classList.add(y),e.querySelector(`.${y}__indicator`))return;let t=this.document.createElement("div");t.className=`${y}__indicator`,t.setAttribute("role","status"),t.setAttribute("aria-label","Loading"),t.innerHTML='<span class="lp-i lp-i--spinner lp-i--pulse" aria-hidden="true"></span>',e.appendChild(t)}_aliasUserWithEventBus(e){try{if(!this.window.eventBusProvider?.alias||!this.window.eventBusProvider?.isIdentified||!this.window.eventBusProvider?.getDistinctId||!this.window.LuxuryPresenceEventBus?.generateUUIDv5FromCompanyEmail)return;if(this.window.eventBusProvider.isIdentified())return void console.log("[EventBus] User already identified, skipping alias");let t=e.activity?.author_email,{companyId:i}=this.config;if(!t||!i)return void console.warn("[EventBus] Missing required data for user alias");let r=this.window.eventBusProvider.getDistinctId();if(!r)return void console.warn("[EventBus] No anonymous ID available for alias");let s=this.window.LuxuryPresenceEventBus.generateUUIDv5FromCompanyEmail(i,t);this.window.eventBusProvider.alias({anonId:r,canonicalId:s}),console.log("[EventBus] User aliased with canonical ID")}catch(e){console.error("[EventBus] User alias failed:",e)}}async _submitLeadRequest(e,t){let{config:i}=this;return(this._aliasUserWithEventBus(e),i.myhomeDashboardEnabled&&(e.activity?.activity_source==="HOME_VALUATION"||e.activity?.activity_source==="HOME_VALUE"))?this.homeValuationService._submitHomeValuationRequest({...e,deadline:t}):fetch(`${i.leadIngesterUrl}/api/v1/leads`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}).then(e=>e.ok?e.json():e.json().then(e=>{throw e}))}_sendGAEvent(e){let{document:t}=this,i={hitType:"event",eventCategory:"button",eventAction:"click"};switch(e.activity.activity_source){case"NEWSLETTER_SIGNUP":i.eventLabel="Newsletter",t.sendGoogleTagManagerEvent("event","newsletter_signup");break;case"HOME_SEARCH":i.eventLabel="HomeSearch",t.sendGoogleTagManagerEvent("event","home_search");break;case"HOME_VALUE":case"HOME_VALUATION":i.eventLabel="HomeValue",t.sendGoogleTagManagerEvent("event","home_valuation");break;case"EBOOK":i.eventLabel="Ebook",t.sendGoogleTagManagerEvent("event","ebook_download");break;default:i={hitType:"pageview",page:"/thank-you"},t.sendGoogleTagManagerEvent("event","contact_inquiry")}t.sendGoogleAnalyticsEvent(i)}_getFields(e){let t=e.querySelectorAll("input, select, textarea"),i={};return t.forEach(t=>{let{id:r,name:s,type:a}=t;if(s===g)return!0;let o="";if(r){let i=e.querySelector(`label[for='${r}']`);i?o=i.textContent.trim():t.placeholder&&(o=t.placeholder.trim())}i[s]={label:o,type:t.tagName,inputType:"INPUT"===t.tagName?a:"text"}}),i}_getFormId(e){let t=e.closest("section[id^='section-'], footer[id], .modal[id^='modal-']");return t?.id?this._cleanFormId(t.id):""}_cleanFormId(e){for(let t of["section-","modal-"])if(e.startsWith(t))return e.substring(t.length);return e}_showSubmissionError(e,t){let i=e.querySelector(".submission-error-message");i||((i=this.document.createElement("div")).className="submission-error-message",i.setAttribute("role","alert"),e.appendChild(i)),i.textContent=t||"Something went wrong. Please try again.",i.style.display="block"}_hideSubmissionError(e){let t=e.querySelector(".submission-error-message");t&&(t.style.display="none")}}(U,window,document),O=new class extends d{constructor(e,t,i){super(e,t,i),this.retries=3,this.callbacks=[],this.id=`__googleMapsScriptId${Date.now()}`,this._apiKey="",this.reset()}set apiKey(e){this._apiKey=e,this.config.setGoogleMapsAPIKey(e)}get apiKey(){return this._apiKey}reset(){this.deleteScript(),this.done=!1,this.loading=!1,this.failed=!1,this.errors=[],this.onerrorEvent=null}destroy(){this.reset()}async getMapApiKey(){if(this.apiKey)return this.apiKey;let e=this._hadPreviousFailure(),t=!1;for(let i=1;i<=3;i+=1){let r=e&&!t;try{let e=await fetch(this._getMapKeyUrl(i,r));if(t=t||r,this._setFailureFlag(!1),!e.ok)throw Error(`Failed to fetch API key: ${e.status}`);let s=await e.text();if(!s)return"";return this.apiKey=s,this.apiKey}catch(e){console.error(e),i<3&&await this._delay(300*2**(i-1))}}return this._setFailureFlag(!0),""}_getMapKeyUrl(e,t){let i=[];e>1&&i.push(`attempt=${e}`),t&&i.push("recovered_after_failure=1");let r=i.length?`?${i.join("&")}`:"";return`${this._getBaseUrl()}/api/v1/map${r}`}_hadPreviousFailure(){try{return"1"===this.window.sessionStorage.getItem(v)}catch(e){return!1}}_setFailureFlag(e){try{e?this.window.sessionStorage.setItem(v,"1"):this.window.sessionStorage.removeItem(v)}catch(e){}}_delay(e){return new Promise(t=>{this.window.setTimeout(t,e)})}async createUrl(){let e=await this.getMapApiKey();if(!e)throw Error("Refusing to load Google Maps without an API key");
3634let t="https://maps.googleapis.com/maps/api/js";return t+`?callback=__googleMapsCallback&key=${e}&libraries=places`}async setScript(){let e;if(this.document.getElementById(this.id))return void this.callback();try{e=await this.createUrl()}catch(e){console.error(e),this.failed=!0,this.loading=!1,this.onerrorEvent=e,this.callback();return}let t=this.document.createElement("script");t.id=this.id,t.type="text/javascript",t.src=e,t.onerror=this.loadErrorCallback.bind(this),t.defer=!0,t.async=!0,this.document.head.appendChild(t)}loadErrorCallback(e){if(this.errors.push(e),this.errors.length<=this.retries){let e=this.errors.length*2**this.errors.length;console.log(`Failed to load Google Maps script, retrying in ${e} ms.`),setTimeout(()=>{this.deleteScript(),this.setScript().catch(e=>console.error(e))},e)}else this.failed=!0,this.onerrorEvent=e,this.callback()}deleteScript(){let e=this.document.getElementById(this.id);e&&e.remove()}load(){return this.loadPromise()}loadPromise(){return new Promise((e,t)=>{this.loadCallback(i=>{i?t(i):e()})})}loadCallback(e){this.callbacks.push(e),this.execute()}setCallback(){this.window.__googleMapsCallback=this.callback.bind(this)}resetIfRetryingFailed(){this.failed&&this.reset()}callback(){this.done=!0,this.loading=!1,this.callbacks.forEach(e=>{e(this.onerrorEvent)}),this.callbacks=[]}execute(){this.window.google&&this.window.google.maps&&this.window.google.maps.version&&this.callback(),this.resetIfRetryingFailed(),this.done?this.callback():this.loading||(this.loading=!0,this.setCallback(),this.setScript().catch(e=>console.error(e)))}_getBaseUrl(){let{isBuilder:e,websiteApiGatewayUrl:t}=this.config;return e?t:""}resizeStaticMapDimensions(e,t){if(e<=1024&&t<=1024)return{width:e,height:t};let i=Math.min(1024/e,1024/t);return{width:parseInt(e*i),height:parseInt(t*i)}}convertThemeToStaticApiUrl(e){return e.map(e=>{let t=e.stylers.reduce((e,t)=>{let i=t.visibility?`visibility:${t.visibility}`:"",r=t.color?`color:${t.color.replace("#","0x")}`:"",s=t.lightness?`lightness:${t.lightness}`:"";return`${e}|${i}${r}${s}`},""),i=e.elementType?`|element:${e.elementType}`:"";return`feature:${e.featureType}${i}${t}`})}async getMapApiSignedUrl(e){try{let t=await fetch(`${this._getBaseUrl()}/api/v1/map/signature?${e}`);if(!t.ok)throw Error("Failed to fetch signed URL");let{url:i}=await t.json();return i}catch(e){return console.error(e),""}}generateStaticMapUrl(e,t,i,r,s,a){let{width:o,height:n}=this.resizeStaticMapDimensions(s,a),l={center:`${e},${t}`,zoom:i,scale:2,size:`${o}x${n}`,key:this.apiKey};r&&(l.style=this.convertThemeToStaticApiUrl(r));let d=new URLSearchParams;return Object.entries(l).forEach(([e,t])=>{Array.isArray(t)?t.forEach(t=>d.append(e,t.toString())):d.append(e,t.toString())}),`https://maps.googleapis.com/maps/api/staticmap?${d.toString()}`}async generateDigitallySignedStaticMapUrl({srcWidth:e,srcHeight:t,theme:i,...r}){let{width:s,height:a}=this.resizeStaticMapDimensions(e,t),o={...r,size:`${s}x${a}`};i&&(o.style=this.convertThemeToStaticApiUrl(i));let n=new URLSearchParams;Object.entries(o).forEach(([e,t])=>{Array.isArray(t)?t.forEach(t=>n.append(e,t.toString())):n.append(e,t.toString())});let l=n.toString();try{return await this.getMapApiSignedUrl(l)}catch(e){return console.error(e),""}}}(U,window,document),q=new class extends d{destroy(){}updateQueryString(e,t,i){i||(i=this.window.location.href);let r=RegExp(`([?&])${e}=.*?(&|#|$)`,"i"),s="";null!=t&&(Array.isArray(t)?t.length&&(s=this.serializeArray(e,t)):"object"==typeof t?(r=RegExp(`([?&])${e}\\[[^=]*\\]=.*?(&|#|$)`,"i"),s=this.serializeObj(t,"",e)):s=`${e}=${encodeURIComponent(t)}`);let a=i.split("#"),o=a[0];if(r.test(i)){let e=o;for(s=s?`$1${s}$2`:"$1";r.test(e);)o=e.replace(r,s),e=e.replace(r,"$1");o=o.replace(/(&|\?)$/,"")}else if(s){let e=-1!==o.indexOf("?")?"&":"?";o+=`${e}${s}`}return void 0!==a[1]&&null!==a[1]&&(o+=`#${a[1]}`),o}getParameterByName(e,t){t||(t=this.window.location.href),e=e.replace(/[[\]]/g,"\\$&");let i=RegExp(`[?&]${e}(=([^&#]*)|&|#|$)`),r=Array.from(RegExp.prototype[Symbol.matchAll].call(i,t)).flat();if(!r.length){let i=RegExp(`[?&]${e}(\\[.*?\\])=(.*?)(?=&|#|$)`,"g");return r=Array.from(RegExp.prototype[Symbol.matchAll].call(i,t)).flat(),this._parseParamToObject(r,"advancedFilters"===e)}return r.length>3?r.reduce((e,t,i)=>((i+1)%3==0&&e.push(decodeURIComponent(t.replace(/\+/g," "))),e),[]):r[2]?decode
3634URIComponent(r[2].replace(/\+/g," ")):""}makePageKey(e){return e.replace("section-","").replace(/-/g,"")}makeParamKey(e,t){return e.global?e.urlKey:`${t}-${e.urlKey}`}deserializeParams(e,t){let i={},r=this.makePageKey(t),s=this.getParameterByName(r);return s&&(i.page=parseInt(s)),Array.isArray(e)&&e.forEach(e=>{let t=this.makeParamKey(e,r),s=this.getParameterByName(t);if("int"===e.type)isFinite(s=parseInt(s))||(s=null);else if("bool"===e.type||"boolean"===e.type)s="true"===s||"false"!==s&&null;else if("json"===e.type)try{s=JSON.parse(s)}catch(e){}i[e.formKey||e.param]=s}),i}serializeParams(e,t,i){let r=this.window.location.href,s=this.makePageKey(t);return r=this.updateQueryString(s,i.page,r),Array.isArray(e)&&e.forEach(e=>{let t=this.makeParamKey(e,s),a=i[e.formKey||e.param];"json"===e.type&&null!=a&&(a=JSON.stringify(a)),r=this.updateQueryString(t,a,r)}),r}formatSliderAtom(e,t=""){return t+(Number.isInteger(e)?e:e.toFixed(2))}formatSliderValue(e,t="",i=""){return e<1e3?this.formatSliderAtom(e,t):e<1e6?`${this.formatSliderAtom(e/1e3,t)}${i}K`:`${this.formatSliderAtom(e/1e6,t)}${i}M`}formatSliderPriceRange(e,t,i,r){return t.min===e&&0!==e?`${r.lowPrefix}${this.formatSliderValue(e,i," ")}`:t.max===e?`${this.formatSliderValue(e,i," ")}${r.highSuffix}`:`${this.formatSliderValue(e,i," ")}`}formatSliderAreaRange(e,t,i,r){return t.min===e&&0!==e?`${r.lowPrefix}${this.formatSliderValue(e)} ${i}`:t.max===e?`${this.formatSliderValue(e)}${r.highSuffix} ${i}`:`${this.formatSliderValue(e)} ${i}`}getSearchFormValues(e){let{queryElement:t,priceSliderElement:i,areaSliderElement:r,neighborhoodSelect:s}=e,a={};if(t&&(a.search=t.value||null),i){let e=i.value.split(";"),t=parseInt(i.dataset.min),r=parseInt(i.dataset.max),s=parseInt(e[0]),o=parseInt(e[1]);a.priceMin=s!==t?s:null,a.priceMax=o!==r?o:null}if(r){let e=r.value.split(";"),t=parseInt(r.dataset.min),i=parseInt(r.dataset.max),s=parseInt(e[0]),o=parseInt(e[1]);a.areaMin=s!==t?s:null,a.areaMax=o!==i?o:null}return s&&(a.neighborhoodId=s.value||null),a}serializeObj(e,t="",i=""){let r=[];for(let s in e)if(e.hasOwnProperty(s)){let a,o=e[s];if(i){let e=t?`[${t}][${s}]`:`[${s}]`;a=`${i}${e}`}else a=t?`${t}[${s}]`:s;null!==o&&Array.isArray(o)?o.length&&r.push(this.serializeArray(a,o)):null!==o&&"object"==typeof o?r.push(this.serializeObj(o,a)):r.push(`${a}=${encodeURIComponent(o)}`)}return r.join("&")}serializeArray(e,t,i=""){let r=[];return t.forEach(t=>{let s=i?`${i}${e}`:e;r.push(`${s}=${encodeURIComponent(t)}`)}),r.join("&")}_parseParamToObject(e,t=!1){if(!e.length)return null;let i={};for(let r=0;r<e.length;r++)if((r+1)%3==0){let s=decodeURIComponent(e[r].replace(/\+/g," ")),a=e[r-1];Object.assign(i,this._setObjectPath(a,s,i,t))}return i}_setObjectPath(e,t,i,r=!1){let s=e.split(/[\[\]]/).filter(Boolean),a=["in","nin","btw","ciin","cinin"],o={},n=o,l=((e,t,i)=>{if(!t)return;let r=(Array.isArray(t)?t:t.match(/([^[.\]])+/g)).reduce((e,t)=>e&&e[t],e);return void 0===r?i:r})(i,s.join("."));return s.forEach((e,o)=>{o===s.length-1?l?n[e]=Array.isArray(l)?[...l,t]:[l,t]:n[e]=r&&a.includes(e)?[t]:t:(n[e]=i[e]?i[e]:{},n=n[e])}),o}}(U,window,document),V=new class extends d{constructor(e,t,i){super(e,t,i),this._createLightbox=this._createLightbox.bind(this),this.expandSliders=[]}initialize(e={}){try{let{document:e}=this,t=e.querySelectorAll(".has-mobile-expand");t.forEach(e=>{this._addExpandButton(e)}),this.expandSliders=this.expandSliders.concat(t)}catch(e){console.log(e)}}destroy(){let{document:e}=this;e.querySelectorAll(".lp-expand-btn, .lp-expand-btn-wrapper").forEach(e=>e.remove()),this.expandSliders=[]}_addExpandButton(e){let{document:t}=this,i=e.closest("section[id]"),r=e.dataset.append,s=i.querySelector(".lp-expand-btn");if(!s)if((s=t.createElement("button")).className="lp-expand-btn",s.setAttribute("aria-label","Open a lightbox"),s.innerHTML='<span class="lp-i lp-i--expand-alt" aria-hidden="true"></span>',r){let e=i.querySelector(r);e&&e.appendChild(s)}else{let i=t.createElement("div");i.className="lp-expand-btn-wrapper",i.style.position="relative",i.appendChild(s),e.parentNode.insertBefore(i,e.nextSibling)}s.addEventListener("click",()=>{this._createLightbox({slider:e,section:i})})}_createLightbox({slider:e,section:t,initialIndex:i}){let{window:r,document:s}=this,a=`lightbox-for-${t?.id}`,o=r.$&&r.$.fn.slick,n=o&&e.slick,l="function"==typeof r.Splide,d=e.classList.contains("is-initialized")&&e.classList.contains("splide");function c(){let t=s.createElement("div");t.id=a,t.className="lp-lightbox",t.setAttribute("tabindex","-1"),t.setAttribute("role","dialog"),t.setAttribute("aria-modal","true"),t.innerHTML=` 3635 <button class="lp-lightbox__close" aria-label="close modal"></button> 3636 <div class="lp-lightbox__content"> 3637 <div class="lp-lightbox__carousel splide" role="group" aria-label="Image Gallery"> 3638 <div class="splide__arrows"> 3639 <button class="splide__arrow splide__arrow--prev lp-lightbox-arrow lp-lightbox-arrow--prev"></button> 3640 <button class="splide__arrow splide__arrow--next lp-lightbox-arrow lp-lightbox-arrow--next"></button> 3641 </div> 3642 <div class="splide__track"> 3643 <ul class="splide__list"></ul> 3644 </div> 3645 </div> 3646 </div> 3647 `,"function"==typeof r.lpUI.requestScrollLock?r.lpUI.requestScrollLock(a):s.body.style.overflow="hidden",s.body.appendChild(t);let o=t.querySelector(".lp-lightbox__carousel"),n=o.querySelector(".splide__list");t.classList.add("show"),(d?e.querySelectorAll(".splide__slide:not(.splide__slide--clone) img"):e.querySelectorAll("img")).forEac
3647h(e=>{let t=e.cloneNode(!0);t.removeAttribute("style");let i=s.createElement("li");i.className="lp-lightbox__slide splide__slide",i.appendChild(t),n.appendChild(i)});let l=new r.Splide(o,{rewind:!0,arrows:!0,arrowPath:"",type:"loop",clones:1,pagination:!1,perPage:1,perMove:1});l.mount(),void 0!==i&&i>=0&&l.go(i),setTimeout(()=>{t.focus()},100);let c=e=>{if(!t.classList.contains("show"))return;let i=t.querySelector(".splide__arrow--prev"),r=t.querySelector(".splide__arrow--next"),s=t.querySelector(".lp-lightbox__close");"ArrowLeft"===e.key&&i?(e.preventDefault(),i.click()):"ArrowRight"===e.key&&r?(e.preventDefault(),r.click()):"Escape"===e.key&&s&&(e.preventDefault(),s.click())};s.addEventListener("keydown",c),t.querySelector(".lp-lightbox__close").addEventListener("click",()=>{s.removeEventListener("keydown",c),t.classList.remove("show"),l&&l.destroy(),"function"==typeof r.lpUI.releaseScrollLock?r.lpUI.releaseScrollLock(a):s.body.style.overflow="",t.remove()})}if("function"==typeof r.lpUI.requestScrollLock?r.lpUI.requestScrollLock(a):s.body.style.overflow="hidden",o&&!d){let t,i,o,l,d;i={arrows:!0,dots:!1,infinite:!0,draggable:!0,prevArrow:'<button type="button" class="lp-lightbox-arrow--prev lp-lightbox-arrow" aria-label="Previous"></button>',nextArrow:'<button type="button" class="lp-lightbox-arrow--next lp-lightbox-arrow" aria-label="Next"></button>'},(o=s.createElement("div")).id=a,o.className="lp-lightbox",o.setAttribute("tabindex","-1"),o.setAttribute("role","dialog"),o.setAttribute("aria-modal","true"),o.innerHTML=` 3648 <button class="lp-lightbox__close" aria-label="close modal"></button> 3649 <div class="lp-lightbox__content"> 3650 <div class="lp-lightbox__carousel"></div> 3651 </div> 3652 `,s.body.appendChild(o),l=o.querySelector(".lp-lightbox__carousel"),o.classList.add("show"),n?(t=e.slick.$slides.find("img"),i.initialSlide=e.slick?.currentSlide||0,t.each(function(){r.$(".lp-lightbox__carousel").append(r.$(this).clone(!1).removeAttr("style").wrap('<div class="lp-lightbox__slide"></div>').parent())})):(t=e.querySelectorAll("img")).forEach(e=>{let t=e.cloneNode(!0);t.removeAttribute("style");let i=s.createElement("div");i.className="lp-lightbox__slide",i.appendChild(t),l.appendChild(i)}),r.$(l).slick(i),setTimeout(()=>{o.focus()},100),d=e=>{if(!o.classList.contains("show"))return;let t=o.querySelector(".lp-lightbox-arrow--prev"),i=o.querySelector(".lp-lightbox-arrow--next"),r=o.querySelector(".lp-lightbox__close");"ArrowLeft"===e.key&&t?(e.preventDefault(),t.click()):"ArrowRight"===e.key&&i?(e.preventDefault(),i.click()):"Escape"===e.key&&r&&(e.preventDefault(),r.click())},s.addEventListener("keydown",d),o.querySelector(".lp-lightbox__close").addEventListener("click",()=>{s.removeEventListener("keydown",d),o.classList.remove("show");let t=l?.slick?r.$(l).slick("slickCurrentSlide"):0;l?.slick&&r.$(l).slick("unslick"),n&&r.$(e).slick("slickGoTo",t),"function"==typeof r.lpUI.releaseScrollLock?r.lpUI.releaseScrollLock(a):s.body.style.overflow="",o.remove()})}else l?c():(r.luxuryPresence.libs.loadCss(r.luxuryPresence.libs.jsLibsMap.splide.cssSrc),r.luxuryPresence.libs.loadJs(r.luxuryPresence.libs.jsLibsMap.splide.jsSrc,()=>{c(),r.luxuryPresence.libs.jsLibsMap.splide.isLoaded=!0}))}}(U,window,document),F=new class extends d{destroy(){this.window.divolte||(this.window.divolteLp=function(){(this.window.divolteLp.q=this.window.divolteLp.q||[]).push(arguments)})}initialize(e={}){let{divolteServiceUrl:t}=this.config;t&&!this.window.divolte&&this.loadScript()}loadScript(){let{divolteServiceUrl:e}=this.config,t=this.document.createElement("script");t.id="divolte-script",t.type="text/javascript",t.defer=!0,t.async=!0,t.src=`${e}/divolte.js`,this.document.head.appendChild(t),t.addEventListener("load",this.executeQueue.bind(this))}executeQueue(){(this.window.divolteLp.q||[]).forEach(([e,t])=>{this[e](t)}),this.window.divolteLp=this.divolteLp.bind(this)}divolteLp(e,t){try{this[e](t)}catch(e){console.log(e)}}sendLpEvent(e,t){if(!e.includes("pageView"))return void console.log(`${e} IS NOT SUPPORTED`);let{companyId:i,templateId:r,websiteId:s,pageId:a,shareId:o,pageMeta:n}=this.config;this.window.divolte.signal(e,Object.assign({companyId:i,templateId:r,websiteId:s,pageId:a,shareId:o,pageMeta:n},t))}sendLpPageView(){this.sendLpEvent("pageView",{})}}(U,window,document),j=new class extends d{constructor(e,t,i){super(e,t,i)}initialize(e={}){(void 0!==e.enabled?e.enabled:this.config.eventBus?.enabled)&&this.config.eventBus?.apiKey&&this.config.eventBus?.url&&this.loadScript()}loadScript(){let{eventBusUrl:e}=this.config,t=this.document.createElement("script");t.id="posthog-script",t.type="text/javascript",t.defer=!0,t.async=!0,t.src=`${e}/v2.8.0/event-bus-js.js`,this.document.head.appendChild(t),t.addEventListener("load",this.executeQueue.bind(this))}executeQueue(){this.window.LuxuryPresenceEventBus&&(this.window.eventBusProvider=this.window.LuxuryPresenceEventBus.createEventBusProvider({apiKey:this.config.eventBus.apiKey,host:this.config.eventBus.url,defaultSource:"frontend://website-render-engine"}
3652)),(this.window.eventBusLp.q||[]).forEach(([e,t])=>{this[e](t)}),this.window.eventBusLp=this.eventBusLp.bind(this)}destroy(){if(!this.window.eventBusProvider){this.window.eventBusLp=function(){(this.window.eventBusLp.q=this.window.eventBusLp.q||[]).push(arguments)};return}this.window.eventBusProvider.shutdown()}sendLpEvent(e,t){if("user.activity.page.viewed"!==e)return void console.log(`${e} IS NOT SUPPORTED`);if(!this.window.eventBusProvider)return;let{companyId:i}=this.config;try{this.window.eventBusProvider.capture(e,{company:i,data:{}})}catch(e){console.log("EventBus capture error:",e)}}eventBusLp(e,t){try{this[e](t)}catch(e){console.log(e)}}sendLpPageView(){this.sendLpEvent("user.activity.page.viewed",{})}}(U,window,document),H=new class extends d{constructor(e,t,i){super(e,t,i),this.successListeners=[],this._listenToMessages=this._listenToMessages.bind(this),this._listenToOneTapMessage=this._listenToOneTapMessage.bind(this)}initialize(e={}){try{e.googleSignOnEnabled&&!e.iframe&&this._renderGoogleOneTap(),this.document.querySelectorAll('div[data-signin-type="google-sign-in"]').forEach(e=>this._convertGoogleSignIn(e)),this.document.querySelectorAll('div[data-signin-type="facebook-sign-in"]').forEach(e=>this._convertFacebookSignIn(e))}catch(e){console.log(e)}}destroy(){this.successListeners.forEach(e=>{this.window.removeEventListener("message",this._listenToMessages),this.window.removeEventListener("message",this._listenToOneTapMessage),this.window.removeEventListener(w,this.window[e])})}_renderGoogleOneTap(){if(!this._isGoogleOneTapOnCooldown()){let e=this.document.createElement("div");google.accounts.id.initializeIntermediate({src:this._buildUrlAndCopyAttributes(e,e,"googleOneTap")}),this.window.localStorage.removeItem("googleOneTapExpiration"),this.window.addEventListener("message",this._listenToOneTapMessage)}}_listenToOneTapMessage(e){let t="show_intermediate_iframe",{buyerSellerServiceUrl:i}=this.config,{data:r,origin:s}=e,{type:a,height:o,event:n,source:l,token:d}=r;if(a===t||"hide_intermediate_iframe"===a){let e=this.document.getElementById("onetap_google_intermediate_iframe");e&&(e.style.height=o,e.style.display=a===t?"unset":"none")}s===i&&"GOOGLE_SIGN_ON"===l&&("success"===n?(this._setExpirationLsItem(864e5),this._handleQualifyingQuestionsModal(d)):"cancel"===n&&this._setExpirationLsItem(72e5))}_setExpirationLsItem(e){let t=new Date().getTime()+e;this.window.localStorage.setItem("googleOneTapExpiration",t)}_isGoogleOneTapOnCooldown(){return Number(this.window.localStorage.getItem("googleOneTapExpiration"))>new Date().getTime()}_convertGoogleSignIn(e){this._replaceWithIframe("googleSignIn",e)}_convertFacebookSignIn(e){this._replaceWithIframe("facebookSignIn",e)}_replaceWithIframe(e,t){this._attachSuccessCallback(t);let i=this.document.createElement("iframe");i.src=this._buildUrlAndCopyAttributes(t,i,e),i.dataset.isSocialOauthButton=!0,t.replaceWith(i)}_listenToMessages(e){let{buyerSellerServiceUrl:t}=this.config;if(e.origin===t&&"success"===e.data.event){let e=new Event(w);this.window.dispatchEvent(e),u(this.window,this.document),this.successListeners.forEach(t=>{this.window[t]?this.window[t](e):console.error(`Callback function ${t} not found on window object`)}),this.document.documentElement.classList.add("is-login-success")}}_attachSuccessCallback(e){this.window.addEventListener("message",this._listenToMessages);let t=e.dataset.onSuccessFunctionName;t&&this.successListeners.push(t)}_buildUrlAndCopyAttributes(e,t,i){let{buyerSellerServiceUrl:r,companyId:s,websiteId:a,pageId:o,pageMeta:n}=this.config,{location:l}=this.window,d=l.origin+l.pathname,c=new URL(`${r}/buttons/${i}`),u=this.window.localStorage.getItem("utm_vars"),h=this.window.localStorage.getItem("referrer");c.searchParams.append("companyId",s),c.searchParams.append("websiteId",a),c.searchParams.append("pageId",o),c.searchParams.append("sourceUrl",d),c.searchParams.append("pageMeta",JSON.stringify(n)),u&&c.searchParams.append("utm",u),h&&c.searchParams.append("referrer",h);let p=["data-size","data-width","data-text","data-button-type","data-shape","data-layout","data-max-rows","data-use-continue-as","data-type","data-theme","data-logo_alignment","data-locale"];
3652return Array.from(e.attributes).forEach(e=>{p.includes(e.nodeName)?c.searchParams.append(e.nodeName,e.nodeValue):t.setAttribute("id"===e.nodeName?"data-id":e.nodeName,e.nodeValue)}),c.toString()}_decodeToken(e){try{let t=e.split(".")[1].replace(/-/g,"+").replace(/_/g,"/"),i=4-t.length%4,r=4===i?t:t+"=".repeat(i);return JSON.parse(atob(r))}catch(e){return null}}_handleQualifyingQuestionsModal(e){if(e&&this.window.luxuryPresence&&this.window.luxuryPresence.qualifyingQuestionsModal){let t=this._decodeToken(e);t&&t.email&&this.window.luxuryPresence.qualifyingQuestionsModal.showModal(t.email,"Google Sign On")}}}(U,window,document),G=new class extends d{constructor(e,t,i){super(e,t,i),this.showModal=this.showModal.bind(this),this.hasModalBeenSubmitted=this.hasModalBeenSubmitted.bind(this),this.modalId="qualifying-questions-modal",this.cookieKey="qualifyingQuestionsModalSubmitted",this.qualifyingQuestionsModalEnabled=!0,this.eventListeners=[],this.timeouts=[]}initialize(e={}){this.qualifyingQuestionsModalEnabled=e.qualifyingQuestionsModalEnabled??this.qualifyingQuestionsModalEnabled,this.qualifyingQuestionsModalEnabled&&this.attachModalCloseListeners()}destroy(){this.eventListeners.forEach(({element:e,event:t,handler:i})=>{e&&e.removeEventListener&&e.removeEventListener(t,i)}),this.timeouts.forEach(e=>{clearTimeout(e)}),this.restoreBodyScroll(),this.eventListeners=[],this.timeouts=[]}hasModalBeenSubmitted(){return"true"===this.getCookie(this.cookieKey)}setModalSubmittedCookie(){this.setCookie(this.cookieKey,"true",365)}showModal(e,t){!this.qualifyingQuestionsModalEnabled||this.hasModalBeenSubmitted()||(this.updateEmailValue(e),this.updateTriggerSourceValue(t),this.showModalElement())}getModalElement(){let e=this.document.getElementById(this.modalId);return e||console.error("Modal element not found:",this.modalId),e}updateEmailValue(e){let t=this.getModalElement();if(!t)return;let i=t.querySelector('input[name="email"]');i&&"string"==typeof e&&(i.value=e)}updateTriggerSourceValue(e){let t=this.getModalElement();if(!t)return;let i=t.querySelector(`#${this.modalId}-triggerSource`);i&&"string"==typeof e&&(i.value=e)}showModalElement(){let e=this.getModalElement();e&&(e.style.display="flex",this.blockBodyScroll())}getCookie(e){let t=`; ${this.document.cookie}`.split(`; ${e}=`);return 2===t.length?decodeURIComponent(t.pop().split(";").shift()):null}setCookie(e,t,i){let r="";if(i){let e=new Date;e.setTime(e.getTime()+864e5*i),r=`; expires=${e.toUTCString()}`}let s="; path=/; SameSite=Lax";this.window&&this.window.location&&"https:"===this.window.location.protocol&&(s+="; Secure"),this.document.cookie=`${e}=${encodeURIComponent(t||"")}${r}${s}`}blockBodyScroll(){this._prevOverflow=this.document.body.style.overflow,this.document.body.style.overflow="hidden"}restoreBodyScroll(){this.document.body.style.overflow=this._prevOverflow||"",this._prevOverflow=null}attachModalCloseListeners(){let e=this.getModalElement();if(!e)return;let t=this.document.getElementById(`${this.modalId}-form`);if(t){let i=()=>{this.setModalSubmittedCookie();let t=setTimeout(()=>{e.style.display="none",this.restoreBodyScroll()},100);this.timeouts.push(t)};t.addEventListener("formsubmitted",i),this.eventListeners.push({element:t,event:"formsubmitted",handler:i})}let i=e.querySelector('[data-dismiss="modal"]');if(i){let t=()=>{e.style.display="none",this.restoreBodyScroll()};i.addEventListener("click",t),this.eventListeners.push({element:i,event:"click",handler:t})}let r=t=>{(t.target===e||t.target.id===this.modalId)&&(e.style.display="none",this.restoreBodyScroll())};e.addEventListener("click",r),this.eventListeners.push({element:e,event:"click",handler:r})}}(U,window,document),K=new class extends d{constructor(e,t,i){super(e,t,i),this.isValidating=!1,this.lastValidationResult=null,this.lastValidationTime=null,this.validationCacheDuration=3e5}destroy(){this.isValidating=!1,this.lastValidationResult=null,this.lastValidationTime=null}async validateSession(e={}){let{useCache:t=!0}=e;if(t&&null!==this.lastValidationResult&&this.lastValidationTime&&Date.now()-this.lastValidationTime<this.validationCacheDuration)return this.lastValidationResult;if(this.isValidating)return null!==this.lastValidationResult&&this.lastValidationResult;this.isValidating=!0;let i=` 3653 query { 3654 validSession { 3655 success 3656 } 3657 } 3658 `;try{let e=await this.window.fetch("/graphql",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({query:i})});if(!e.ok)return console.error("SessionController: HTTP error during session validation",e.status),this.lastValidationResult=!1,this.lastValidationTime=Date.now(),!1;let t=await e.json();if(t.errors)return this.lastValidationResult=!1,this.lastValidationTime=Date.now(),!1;let r=t.data?.validSession?.success===!0;return this.lastValidationResult=r,this.lastValidationTime=Date.now(),r}catch(e){return console.error("SessionController: Error validating session",e),this.lastValidationResult=!1,this.lastValidationTime=Date.now(),!1}finally{this.isValidating=!1}}clearCache(){this.lastValidationResult=null,this.lastValidationTime=null}}(U,window,document),z=new class extends d{constructor(e,t,i){super(e,t,i),this.consentListener=null,this.eventName=null}destroy(){this.consentListener&&this.eventName&&(this.document.removeEventListener(this.eventName,this.consentListener),this.consentListener=null)}loadScript(){this.document.getElementById("posthog-script")||this.window.luxuryPresence.eventBus.initialize({enabled:this.config.eventBus?.enabled}),this.document.getElementById("divolte-script")||this.window.luxuryPresence.divolte.initialize({})}removeScripts(){this.window.luxuryPresence?.eventBus?.destroy?.(),this.window.luxuryPresence?.divolte?.destroy?.(),this.document.getElementById("posthog-script")?.remove(),this.document.getElementById("divolte-script")?.remove()}async initialize(e={}){let t=b[e.provider];if(!t)return;this.eventName=t.eventName;let i=await this.window.luxuryPresence.session.validateSession();(t.hasAnalyticsConsent(this.document,this.window)||i)&&this.loadScript(),this.consentListener||(this.consentListener=e=>{t.isAnalyticsAccepted(e.detail)?this.loadScript():this.removeScripts()},this.document.addEventListener(t.eventName,this.consentListener))}}(U,window,document),Q=new class extends d{destroy(){}transformVariables(e,t){let i;return _(i={...t},["testimonialId"]),I(i,["testimonialId"],"testimonialIds"),0===i.limit&&delete i.limit,(void 0===i.limit||null===i.limit)&&(("testimonials"===e||"testimonialsCount"===e)&&(i.limit=50),("agents"===e||"agentsCount"===e||"developments"===e||"developmentsCount"===e||"neighborhoods"===e||"neighborhoodsCount"===e||"posts"===e||"postsCount"===e||"pressReleases"===e||"pressReleasesCount"===e)&&(i.limit=100)),!function(e){let{sortDir:t}=e;"string"==typeof t&&t.includes("_")&&(e.sortDir=t.replace(/_/g," "))}(i),!function(e,t){switch(t){case"agent":break;case"testimonials":case"testimonialsCount":_(e,["testimonialIds"]);break;case"agents":case"agentsCount":_(e,["officeId","teamId","developmentId","agentIds","tags"]),I(e,["officeId"],"officeIds"),I(e,["teamId"],"teamIds"),I(e,["developmentId"],"developmentIds");break;case"neighborhoods":case"neighborhoodsCount":_(e,["neighborhoodIds","neighborhoodId"]),I(e,["neighborhoodIds","neighborhoodId"],"neighborhoodId");break;case"developments":case"developmentsCount":_(e,["agentId","neighborhoodIds","neighborhoodId","developmentIds","tag"]),e.agentId&&Array.isArray(e.agentId)&&([e.agentId]=e.agentId),I(e,["neighborhoodIds","neighborhoodId"],"neighborhoodIds");break;case"properties":case"propertiesCount":_(e,["statusIds","statusId","propertyTypeIds","propertyTypeId","propertyId","networkId","propertyIds","agentIds","teamIds","officeIds","neighborhoodIds","
3658spaceTypeIds","addressState","addressCity","backfillProviders","backfillMLSListingIds","backfillMLSAgentIds","backfillMLSOfficeIds"]),["propertyIds","agentIds","teamIds","officeIds","neighborhoodIds","spaceTypeIds","backfillMLSListingIds","backfillMLSAgentIds","backfillMLSOfficeIds"].forEach(t=>I(e,[t],t)),I(e,["statusIds","statusId"],"propertyStatusId"),e.excludeStatusId&&(e.excludePropertyStatusId=e.excludeStatusId,delete e.excludeStatusId),I(e,["propertyTypeIds","propertyTypeId"],"propertyTypeId"),I(e,["networkId"],"networkId"),I(e,["propertyId"],"propertyIds"),["salesPriceGTE","salesPriceLTE","leasePriceGTE","leasePriceLTE","livingSpaceSizeGTE","livingSpaceSizeLTE"].forEach(t=>{null!=e[t]&&(e[t]=Math.trunc(Number(e[t])))});break;case"posts":case"postsCount":_(e,["categoryIds","categoryId","neighborhoodId"]),void 0!==e.order&&(e.sort=e.order,delete e.order),I(e,["categoryIds","categoryId"],"categoryId");break;case"postCategories":_(e,["categoryId","categoryIds"]),void 0!==e.order&&(e.sort=e.order,delete e.order),I(e,["categoryIds","categoryId"],"categoryId");break;case"pressReleases":case"pressReleasesCount":_(e,["pressReleaseId","categories","propertyId","developmentId","agentId","teamId"]),I(e,["pressReleaseId"],"pressReleaseIds");break;case"offices":case"officesCount":_(e,["officeId","officeIds","tags"]),I(e,["officeId"],"officeIds");break;case"teams":case"teamsCount":_(e,["teamId","teamIds"]),I(e,["teamId"],"teamIds");break;case"pois":_(e,["categories"]),Array.isArray(e.categories)&&(e.categories=e.categories.map(e=>e.toLowerCase())),"string"==typeof e.sortBy&&(e.sortBy=e.sortBy.toLowerCase())}}(i,e),i}transformResponse(e,t){return"agent"===e?C(t,E):"agents"===e||"agentsCount"===e?k(t,A):"neighborhood"===e?C(t,L):"neighborhoods"===e||"neighborhoodsCount"===e?k(t,x):"development"===e?C(t,$):"developments"===e||"developmentsCount"===e?k(t,T):t}transformPage(e){return{items:e&&e.items||[],count:e&&e.total||0}}applyPropertyDisclaimers(t,i){if(!Array.isArray(t)||!t.length||!i||!i.length)return Promise.resolve(t);let r=t.filter(e=>e&&e.vendorId&&e.mlsId).map(e=>({feedId:e.vendorId,listingId:e.mlsId,officeName:e.officeName??null,agentMlsId:e.mlsAgentId??null,officeMlsId:e.mlsOfficeId??null,attributionContact:e.attributionContact??null,status:e.status??null,syncedAt:e.syncedAt??null})),s=e=>{let r={};return(e||[]).forEach(e=>{r[`${e.feedId}:${e.listingId}`]=e}),t.map(e=>{let t=e&&r[`${e.vendorId}:${e.mlsId}`],s={};return i.forEach(e=>{let i=t?t[P[e]]:void 0;s[e]=i??null}),{...e,...s}})};if(!r.length)return Promise.resolve(s([]));let{websiteId:a}=this.config;return this.window.superagent?this.window.superagent.post(`${this.window.luxuryPresence.defaults.routerUrl}/graphql`).withCredentials().send({query:e(M),variables:{input:{websiteId:"string"==typeof a?a:void 0,properties:r}}}).then(e=>s(e.body&&e.body.data&&e.body.data.propertyDisclaimers),e=>(console.warn("[RouterApiController] propertyDisclaimers lookup failed:",e),s([]))):Promise.resolve(s([]))}}(U,window,document);function W(e,t){if(window.luxuryPresence[e])try{window.luxuryPresence[e].destroy()}catch(e){console.log(e)}window.luxuryPresence[e]=t}W("config",U),W("modals",N),W("buttons",R),W("validation",B),W("contactForms",D),W("mapApiLoader",O),W("pagination",q),W("expandSliders",V),W("divolte",F),W("eventBus",j),W("oauth",H),W("qualifyingQuestionsModal",G),W("session",K),W("consent",z),W("redirects",{checkHstRedirect:function(e){let{config:t}=window.luxuryPresence;return!t.hvStepTwoCaptureEnabled&&!!t.hstValuationRedirectEnabled&&!!t.mlsEnabled&&!!t.myhomeDashboardEnabled&&(window.location.href=`/home-search/home-valuation?address=${encodeURIComponent(e)}`,!0)},destroy(){}}),W("routerApi",Q),window.luxuryPresence.formatSliderPriceRange=q.formatSliderPriceRange.bind(q),window.luxuryPresence.formatSliderAreaRange=q.formatSliderAreaRange.bind(q),window.luxuryPresence.getSearchFormValues=q.getSearchFormValues.bind(q),window.luxuryPresence.handlebarsHelpersFactory=function(i){return e(t)(i,{isEqual:(e,t)=>e==t})}})(); 3659//# sourceMappingURL=lp-sdk.js.map 3660 3661 </script>
3661 3662 3663
3663<script> 3664 var lpGlobalInitialized = false; 3665 3666 function lpGlobalInit () { 3667 if (lpGlobalInitialized) { 3668 return; 3669 } 3670 lpGlobalInitialized = true; 3671 // Initialize wow animation plugin only according to turbolinks 3672 var wow; 3673 if (window.WOW) { 3674 wow = new WOW({ 3675 animateClass: 'animated', 3676 offset: wowOffset, 3677 live: false, 3678 callback: function(box) {} 3679 }); 3680 } 3681 // Initialize handlebar helpers only once 3682 function handlebarsInit() { 3683 if (!window.Handlebars) { 3684 return; 3685 } 3686 HandlebarsIntl.registerWith(Handlebars); 3687 Handlebars.registerHelper(window.luxuryPresence.handlebarsHelpersFactory(Handlebars)); 3688 } 3689 3690 handlebarsInit(); 3691 3692 /* Initialize Luxury Presence SDK */ 3693 try { 3694 window.luxuryPresence.config.setCompany("c3076ecb-c2d7-457b-a426-bcf036133f1f", {}); 3695 window.luxuryPresence.config.setWebsite("ff06f655-0c64-45c8-9c55-e8468b4e5303", { 3696 myhomeDashboardEnabled: false, 3697 mlsEnabled: false, 3698 hstValuationRedirectEnabled: true, 3699 hvStepTwoCaptureEnabled: false 3700 }); 3701 const url = new URL(window.location.href); 3702 const shareId = url.searchParams.get('shareId'); 3703 window.luxuryPresence.config.setPage("a35725ca-686e-4e21-bdb6-de9a9c92f4b0", { 3704 sourceResource: "", 3705 pageElementId: "", 3706 pageQueryVariables: {}, 3707 shareId: "", 3708 }); 3709 window.luxuryPresence.config.setWebsiteApiGatewayUrl("https://wgw.luxurypresence.com", {}); 3710 window.luxuryPresence.config.setBuyerSellerServiceUrl("https://bss.luxurypresence.com", {}); 3711 window.luxuryPresence.config.setDivolteServiceUrl("https://t.luxurypresence.com", {}); 3712 window.luxuryPresence.config.setEventBusUrl("https://cdn.luxurypresence.com/scripts/event-bus-js", {}); 3713 window.luxuryPresence.config.setEventBus({ 3714 enabled: true, 3715 apiKey: "phc_PMYT31xlmXBaTCwpIRx1v6RrpLVZIuP47N3mOT6KLnr", 3716 url: "https://p.luxurypresence.com", 3717 }); 3718 window.luxuryPresence.config.setTemplateId("0c2b9641-6f2a-40f2-a2e0-dabc022eb278", {}); 3719 window.luxuryPresence.config.setLeadIngesterUrl("https://leads.luxurypresence.com", {}); 3720 window.luxuryPresence.buttons.initialize({}); 3721 window.luxuryPresence.consent.initialize({ provider: 'lp-consent' }); 3722 window.luxuryPresence.contactForms.initialize({}); 3723 window.luxuryPresence.validation.initialize({}); 3724 window.luxuryPresence.expandSliders.initialize({}); 3725 window.luxuryPresence.oauth.initialize({ googleSignOnEnabled: true, iframe: false }); 3726 window.luxuryPresence.qualifyingQuestionsModal.initialize({ qualifyingQuestionsModalEnabled: true }); 3727 } catch (e) { 3728 console.log(e); 3729 } 3730 3731 /* Inject Section Specific Javascript */ 3732 try { 3733(function init(sectionDomId) { 3734 const disclaimerLabel = document.querySelector('#' + sectionDomId + ' .lp-tcr-content'); 3735 if (disclaimerLabel) { 3736 const input = disclaimerLabel.querySelector('input'); 3737 if (input) { 3738 input.setAttribute('id', `${sectionDomId}-termsAccepted`); 3739 input.value = 'true'; 3740 const label = document.createElement('label'); 3741 label.setAttribute('for', `${sectionDomId}-termsAccepted`); 3742 label.classList.add('lp-visually-hidden'); 3743 label.textContent = 'Opt in/Disclaimer Consent:'; 3744 disclaimerLabel.prepend(label); 3745 } 3746 } 3747 function setHttp(link) { 3748 if (link.search(/^http[s]?\:\/\/|\//) == -1) { 3749 link = 'https://' + link; 3750 } 3751 return link; 3752 } 3753 const socialLinks = document.querySelectorAll('#' + sectionDomId + ' .socials__link, #' + sectionDomId + ' .lp-socials__link'); 3754 socialLinks.forEach(linkElement => { 3755 const href = linkElement.getAttribute('href'); 3756 if (href) { 3757 linkElement.setAttribute('href', setHttp(href)); 3758 } 3759 }); 3760 const redirectLink = $('#' + sectionDomId + ' .redirect-link'); 3761 if (redirectLink.length) { 3762 const rawHref = setHttp(redirectLink.attr('href')); 3763 let formEvent; 3764 if (rawHref) { 3765 formEvent = redirectLink.data('redirect') ? 'formsubmitted' : 'reset'; 3766 $('#' + sectionDomId + ' .contact-form').find('form').on(formEvent, function () { 3767 redirectLink.attr('href', rawHref); 3768 redirectLink[0].click(); 3769 }); 3770 } 3771 } 3772})('modal-global-contact-us'); 3773} catch(e) { 3774console.log(e); 3775} 3776 3777 try { 3778(function init(sectionDomId) { 3779 const $section = $('#' + sectionDomId); 3780 const $hamburger = $section.find('.hamburger-component'); 3781 function onSideMenuShow() { 3782 if (!$hamburger.hasClass('active')) { 3783 $hamburger.addClass('active'); 3784 } 3785 } 3786 function onSideMenuHide() { 3787 $hamburger.removeClass('active'); 3788 } 3789 const $window = $(window); 3790 $window.on('lpui-sidemenu-show.lpui-auto-clean', onSideMenuShow); 3791 $window.on('lpui-sidemenu-hide.lpui-auto-clean', onSideMenuHide); 3792 const $subContainers = $section.find('.navigation__item.sub-nav-container'); 3793 $subContainers.hover(function () { 3794 $(this).find('.sub-nav').addClass('visible'); 3795 }, function () { 3796 $(this).find('.sub-nav').removeClass('visible'); 3797 }); 3798 $window.on('click.lpui-auto-clean', function () { 3799 $('.sub-nav-container.visible-dropdown').removeClass('visible-dropdown'); 3800 }); 3801 let fixedWidth = 0; 3802 const rightPad = 20; 3803 function fixSubsPosition() { 3804 const wWidth = window.innerWidth; 3805 if (innerWidth === fixedWidth) { 3806 return; 3807 } 3808 fixedWidth = wWidth; 3809 $subContainers.each(function () { 3810 const $sub = $(this).find('.sub-nav'); 3811 $sub[0].style.right = '';
3812 const sRect = $sub[0].getBoundingClientRect(); 3813 const sRight = sRect.left + sRect.width; 3814 if (sRight > wWidth - rightPad) { 3815 const parentRect = $sub[0].offsetParent.getBoundingClientRect(); 3816 const parentRight = parentRect.left + parentRect.width; 3817 $sub[0].style.right = `${parentRight - wWidth + rightPad}px`; 3818 } 3819 }); 3820 } 3821 var debouncer; 3822 $window.on('resize.lpui-auto-clean', function () { 3823 clearTimeout(debouncer); 3824 debouncer = setTimeout(fixSubsPosition, 500); 3825 }); 3826 fixSubsPosition(); 3827 if ($('.property-intro').length || $('.property-intro-2').length) { 3828 $('nav').addClass('dark-opening'); 3829 $("#global-navbar").css({ 3830 "background-color": "rgb(26, 26, 26)", 3831 "color": "rgb(255, 255, 255)" 3832 }); 3833 } 3834 function initAutoTruncateMenu() { 3835 const $navbar = $section.find('.navbar'); 3836 const $navList = $section.find('.navigation > ul'); 3837 if (!$navbar.length || !$navList.length) { 3838 return; 3839 } 3840 const $logo = $section.find('.logo'); 3841 const $buttonsWrapper = $section.find('.buttons-wrapper'); 3842 const $allItems = $navList.children('.navigation__item'); 3843 const $phoneItem = $allItems.filter(function () { 3844 return $(this).find('a[href^="tel:"]').length > 0; 3845 }); 3846 const $menuItems = $allItems.not($phoneItem); 3847 if (!$menuItems.length) { 3848 return; 3849 } 3850 const buffer = 8; 3851 function measureFixedWidth() { 3852 let width = buffer; 3853 if ($logo.length) { 3854 width += $logo.outerWidth(true) || 0; 3855 } 3856 if ($buttonsWrapper.length) { 3857 width += $buttonsWrapper.outerWidth(true) || 0; 3858 } 3859 if ($phoneItem.length) { 3860 width += $phoneItem.outerWidth(true) || 0; 3861 } 3862 return width; 3863 } 3864 function truncateMenu() { 3865 if (!$navList.is(':visible')) { 3866 return; 3867 } 3868 $menuItems.css('display', ''); 3869 const availableWidth = $navbar[0].getBoundingClientRect().width - measureFixedWidth(); 3870 let widthSoFar = 0; 3871 let overflowed = false; 3872 $menuItems.each(function () { 3873 const $item = $(this); 3874 if (overflowed) { 3875 $item.css('display', 'none'); 3876 return; 3877 } 3878 widthSoFar += $item.outerWidth(true); 3879 if (widthSoFar > availableWidth) { 3880 $item.css('display', 'none'); 3881 overflowed = true; 3882 } 3883 }); 3884 } 3885 let truncateFrame; 3886 function scheduleTruncate() { 3887 if (truncateFrame) { 3888 return; 3889 } 3890 truncateFrame = window.requestAnimationFrame(function () { 3891 truncateFrame = null; 3892 truncateMenu(); 3893 }); 3894 } 3895 scheduleTruncate(); 3896 if (window.ResizeObserver) { 3897 const resizeObserver = new ResizeObserver(scheduleTruncate); 3898 resizeObserver.observe($navbar[0]); 3899 } else { 3900 $(window).on('resize.lpui-auto-truncate', scheduleTruncate); 3901 } 3902 $section.find('img').on('load.lpui-auto-truncate', scheduleTruncate); 3903 $(window).on('load.lpui-auto-truncate', scheduleTruncate); 3904 if (document.fonts && document.fonts.ready) { 3905 document.fonts.ready.then(scheduleTruncate); 3906 } 3907 } 3908 initAutoTruncateMenu(); 3909})('global-navbar'); 3910} catch(e) { 3911console.log(e); 3912} 3913 try { 3914(function init(sectionDomId, options) { 3915 var elementSelector = options.elementSelector || 'nav'; 3916 var element = document.querySelector(elementSelector); 3917 var sections = document.querySelectorAll('body > section'); 3918 var subNavContainers = element.querySelectorAll('.sub-nav'); 3919 var initialBackgroundColor = options.initialBackgroundColor || element.style.backgroundColor; 3920 var backgroundColorScroll = options.backgroundColorScroll || '#191919'; 3921 var fontColor = options.fontColor || '#fff'; 3922 var fontColorScroll = options.fontColorScroll || '#000'; 3923 var didScroll = false; 3924 var lastScrollTop = 0; 3925 var delta = 5; 3926 3927 // eslint-disable-next-line sonarjs/no-collapsible-if 3928 if (wow) { 3929 // Wowjs might not trigger for position fixed elements 3930 if (window.scrollY > 0) { 3931 element.querySelectorAll('.wow').forEach(el => wow.show(el)); 3932 } 3933 } 3934 function adjustNavPinState() { 3935 // Remove 'visible' class from all subNavContainers 3936 for (let i = 0; i < subNavContainers.length; i++) { 3937 subNavContainers[i].classList.remove('visible'); 3938 } 3939 if (window.scrollY > 0) { 3940 element.style.backgroundColor = backgroundColorScroll; 3941 element.style.color = fontColorScroll; 3942 element.classList.add('scroll'); 3943 } else {
3944 element.style.backgroundColor = initialBackgroundColor; 3945 element.style.color = fontColor; 3946 element.classList.remove('scroll'); 3947 } 3948 } 3949 adjustNavPinState(); 3950 function onScroll() { 3951 didScroll = true; 3952 } 3953 window.addEventListener('scroll', onScroll); 3954 3955 // eslint-disable-next-line 3956 var debounceInterval = setInterval(() => { 3957 if (didScroll) { 3958 // eslint-disable-next-line 3959 hasScrolled(); 3960 didScroll = false; 3961 } 3962 }, 250); 3963 function hasScrolled() { 3964 adjustNavPinState(); 3965 // eslint-disable-next-line 3966 var navbarHeight = element.offsetHeight; 3967 // eslint-disable-next-line 3968 var st = window.scrollY; 3969 3970 // Make sure they scroll more than delta 3971 if (Math.abs(lastScrollTop - st) <= delta) { 3972 return; 3973 } 3974 if (st > lastScrollTop && st > navbarHeight) { 3975 // Scroll Down 3976 element.style.transform = `translateY(-${navbarHeight}px) scaleY(0)`; 3977 document.documentElement.style.setProperty('--global-header-height', '0px'); 3978 3979 // Some sections "follow" the navbar with class sticky (i.e. Producer search) 3980 sections.forEach(section => { 3981 if (section.classList.contains('sticky')) { 3982 section.style.top = '0px'; 3983 } 3984 }); 3985 } else { 3986 // Scroll Up 3987 // eslint-disable-next-line 3988 if (st + window.innerHeight < document.documentElement.scrollHeight) { 3989 element.style.transform = `translateY(0) scaleY(1)`; 3990 document.documentElement.style.setProperty('--global-header-height', `${navbarHeight}px`); 3991 sections.forEach(section => { 3992 if (section.classList.contains('sticky')) { 3993 section.style.top = `${navbarHeight}px`; 3994 } 3995 }); 3996 } 3997 } 3998 lastScrollTop = st; 3999 } 4000})('NAVBAR', JSON.parse("{\"fontColor\":\"#fff\",\"elementSelector\":\"nav\",\"fontColorScroll\":\"#fff\",\"initialFontColor\":\"#fff\",\"backgroundColorScroll\":\"#1a1a1a\",\"initialBackgroundColor\":\"rgba(0,0,0,0)\"}")); 4001} catch(e) { 4002console.log(e); 4003} 4004 try { 4005(function init(sectionDomId) { 4006 var $sidemenu = $('#' + sectionDomId); 4007 var shown = false; 4008 function onShow() { 4009 if (shown) { 4010 return; 4011 } 4012 shown = true; 4013 window.lpUI.requestScrollLock(sectionDomId); 4014 } 4015 function onHide() { 4016 if (!shown) { 4017 return; 4018 } 4019 shown = false; 4020 window.lpUI.releaseScrollLock(sectionDomId); 4021 $('body').removeClass('locked'); 4022 $('.hamburger.active').removeClass('active'); 4023 } 4024 $sidemenu.on('lpui-show', onShow); 4025 $sidemenu.on('lpui-hide', onHide); 4026 $sidemenu.find('a:not(.sub-nav-heading)').click(function () { 4027 onHide(); 4028 window.lpUI.sideMenuHide(true); 4029 }); 4030})('global-sidemenu'); 4031} catch(e) { 4032console.log(e); 4033} 4034 4035 try { 4036(function init(sectionDomId) { 4037 function getNums(str) { 4038 return str.match(/^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+))?\)$/); 4039 } 4040 function getLightness(rgbaString) { 4041 let r = getNums(rgbaString)[1]; 4042 let g = getNums(rgbaString)[2]; 4043 let b = getNums(rgbaString)[3]; 4044 r /= 255; 4045 g /= 255; 4046 b /= 255; 4047 let cmin = Math.min(r, g, b), 4048 cmax = Math.max(r, g, b), 4049 delta = cmax - cmin, 4050 l = 0; 4051 l = (cmax + cmin) / 2; 4052 l = +(l * 100).toFixed(1); 4053 return l; 4054 } 4055 const $footer = $('.footer'); 4056 let footerBackgroundColor = $('footer').css('background-color'); 4057 if (getLightness(footerBackgroundColor) >= 50) { 4058 $footer.addClass('light'); 4059 } else { 4060 $footer.addClass('dark'); 4061 } 4062 var $footerWrap = $('.footer').closest("footer"); 4063 if ($footerWrap.length === 0) { 4064 $footerWrap = $('.footer').closest("body"); 4065 } 4066 var footerWrapBackgroundColor = $footerWrap.css('background-color'); 4067 var footerColor = $footerWrap.css('color'); 4068 $footerWrap.css({ 4069 "--fontColor": footerColor, 4070 "--bgColor": footerWrapBackgroundColor 4071 }); 4072 const form = $("#" + sectionDomId).find("form"); 4073 const redirectLink = $('#' + sectionDomId + ' .redirect-link'); 4074 form.on("reset", function () { 4075 redirectPage(redirectLink); 4076 }); 4077 function redirectPage(link) { 4078 if (link.length) { 4079 const rawHref = link.attr('href'); 4080 link.attr('href', setHttp(rawHref)); 4081 link[0].click(); 4082 } 4083 } 4084 function setHttp(link) { 4085 if (link.search(/^http[s]?\:\/\/|\//) == -1) { 4086 link = 'http://' + link; 4087 } 4088 return link; 4089 } 4090})('global-footer'); 4091} catch(e) { 4092console.log(e); 4093} 4094 4095 try { 4096(function init(sectionDomId) { 4097 var _section = $('#' + sectionDomId); 4098 var _footer = document.getElementById('global-footer'); 4099 const redirectLink = _section.find('.js-redirect-link'); 4100 function setHttp(link) { 4101 if (link.search(/^(http[s]?\:\/\/|\/)/) == -1) { 4102 link = 'https://' + link; 4103 } 4104 return link; 4105 } 4106 function redirectPage(link) { 4107 if (link.length) { 4108 window.location.href = setHttp(link.attr('href')); 4109 } 4110 } 4111 const emailInput = _section.find('.js-email-input'); 4112 const emailRegex = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~\-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)+/; 4113 emailInput.on('input', function () { 4114 if (emailRegex.test(this.value)) { 4115 this.setCustomValidity(''); 4116 } else { 4117 this.setCustomValidity('Please enter a valid email address.'); 4118 } 4119 this.reportValidity(); 4120 }); 4121 _section.find('input[name="name"]').on("keyup", function () { 4122 if (this.value.replaceAll(/\d/g, "").trim().split(" ").length < 2 || this.value.replaceAll(/\d/g, "").trim() === "") { 4123 this.setCustomValidity("Please input your first name and last name."); 4124 } else { 4125 this.setCustomValidity(""); 4126 } 4127 }); 4128 _section.find('form').on("reset", function () { 4129 $(this).addClass("show-success"); 4130 redirectPage(redirectLink); 4131 }); 4132 $(window).scroll(function () { 4133 if ($(this).scrollTop() >= 150) _section.find('.btn-holder').addClass('visible');else _section.find('.btn-holder').removeClass('visible'); 4134 }); 4135 _section.find('.close-btn, .connect-btn').click(function () { 4136 _section.find('.pop-up').toggle(); 4137 _section.find('.btn-holder').toggle(); 4138 }); 4139 if (!_footer) return; 4140 const observer = new IntersectionObserver(entries => {
4141 entries.forEach(entry => { 4142 if (entry.isIntersecting) _section.hide();else _section.show(); 4143 }); 4144 }, { 4145 threshold: 0.1 4146 }); 4147 observer.observe(_footer); 4148 function selectToDropdown(selectItem) { 4149 let customDropdown = ` 4150 <div class="custom-select" role="presentation"> 4151 <button class="custom-select-toggle is-placeholder" type="button" aria-haspopup="true" aria-expanded="false"></button> 4152 <div class="custom-select-menu" style="display: none;max-height: none;"> 4153 <div class="custom-select-content"> 4154 </div> 4155 </div> 4156 </div>`; 4157 $(customDropdown).insertAfter(selectItem); 4158 let $dropdown = $($(selectItem).next()); 4159 let $dropdownToggle = $dropdown.find(".custom-select-toggle"); 4160 let $dropdownMenu = $dropdown.find(".custom-select-menu"); 4161 let $dropdownContent = $dropdown.find(".custom-select-content"); 4162 $dropdownToggle.addClass($(selectItem).attr("class")).removeClass("dropdown-select"); 4163 $dropdownToggle.attr("id", $(selectItem).attr("id") + "custom"); 4164 $dropdownMenu.attr("aria-labelledby", $dropdownToggle.attr("id")); 4165 appendOptionButtons(selectItem, $dropdownContent); 4166 $(selectItem).removeClass().addClass("sr-only"); 4167 var toggleText = $(selectItem).find(":selected").first().text() || $(selectItem).children().first().text(); 4168 $dropdownToggle.html(toggleText); 4169 $dropdown.on("click", ".custom-select-item", function (e) { 4170 if ($(this).hasClass("is-disabled")) return; 4171 let elementNumber = $(this).index(); 4172 let $originalSelect = $(this).closest(".custom-select").siblings("select"); 4173 let $linkedOption = $originalSelect.find("option").eq(elementNumber); 4174 if (!$linkedOption.prop("selected")) { 4175 $linkedOption.prop("selected", true); 4176 $originalSelect.change(); 4177 $(this).addClass("is-selected").siblings(".custom-select-item").removeClass("is-selected"); 4178 $dropdownToggle.html($(this).html()); 4179 closeSelectMenu($(this).closest(".custom-select-menu")); 4180 } 4181 $dropdownToggle.removeClass("is-placeholder"); 4182 }); 4183 function convertOptionToButton(option) { 4184 var optionText = $(option).text(); 4185 var optionValue = $(option).attr("value") || $(option).text(); 4186 var optionIsDisabled = $(option).prop("disabled"); 4187 var outputButton = `<button value="${optionValue}" class="custom-select-item" type="button" ${optionIsDisabled ? "disabled" : ""}>${optionText}</button>`; 4188 return outputButton; 4189 } 4190 function appendOptionButtons(selectItem, appendTarget) { 4191 $(selectItem).find("option").each(function () { 4192 let currentButton = convertOptionToButton(this); 4193 $(appendTarget).append(currentButton); 4194 }); 4195 } 4196 function showSelectMenu(selectMenu) { 4197 var customSelect = $(selectMenu).closest(".custom-select")[0]; 4198 $(customSelect).addClass("open"); 4199 $(selectMenu).slideDown(); 4200 } 4201 function closeSelectMenu(selectMenu) { 4202 var customSelect = $(selectMenu).closest(".custom-select")[0]; 4203 $(customSelect).removeClass("open"); 4204 $(selectMenu).slideUp(); 4205 } 4206 $dropdown.on("click", ".custom-select-toggle", function (e) { 4207 var $customSelect = $(this).closest(".custom-select"); 4208 var selectMenu = $customSelect.find(".custom-select-menu")[0]; 4209 if ($customSelect.hasClass("open")) { 4210 closeSelectMenu(selectMenu); 4211 } else { 4212 showSelectMenu(selectMenu); 4213 } 4214 }); 4215 $(document).on("click", function (e) { 4216 if ($(e.target).closest(".custom-select").length < 1 && $(".custom-select").hasClass("open")) { 4217 $(".custom-select.open").each(function () { 4218 var selectMenu = $(this).find(".custom-select-menu")[0]; 4219 closeSelectMenu(selectMenu); 4220 }); 4221 } 4222 }); 4223 } 4224 $(".pop-up select[name='interest']").each(function () { 4225 selectToDropdown(this); 4226 }); 4227})('global-mobile-contact'); 4228} catch(e) { 4229console.log(e); 4230} 4231 4232 try { 4233(function init(sectionDomId, options) { 4234 let section = null; 4235 switch (sectionDomId) { 4236 case 'NAVBAR': 4237 section = document.querySelector('body > nav, #global-navbar'); 4238 break; 4239 case 'FOOTER': 4240 section = document.querySelector('body > footer, #global-footer'); 4241 break; 4242 case 'SIDEMENU': 4243 section = document.querySelector('body > div.sidemenu, #global-sidemenu'); 4244 break; 4245 case 'CONTACT':
4246 section = document.querySelector('#modal-global-contact-us'); 4247 break; 4248 case 'MOBILE_CONTACT': 4249 section = document.querySelector('body > div.mobile-contact-wrapper, #global-mobile-contact'); 4250 break; 4251 case 'SUBSCRIBE': 4252 // Subscribe Not Implemented 4253 section = null; 4254 break; 4255 case 'ACCOUNT': 4256 // Account Not Implemented 4257 section = null; 4258 break; 4259 default: 4260 section = document.querySelector('#' + sectionDomId); 4261 } 4262 if (!section) { 4263 return; 4264 } 4265 4266 // Where content / items are rendered 4267 const dataContainer = section.querySelector('.data-container'); 4268 if (!dataContainer) { 4269 // no place to render items = no need to query server or do anything else 4270 return; 4271 } 4272 let variables = options.variables || {}; 4273 4274 // Some variables in options may not have been injected - remove 4275 Object.keys(variables).forEach(function (variableName) { 4276 if (typeof variables[variableName] === 'string' && variables[variableName].match(/^{{.*}}$/)) { 4277 delete variables[variableName]; 4278 } 4279 }); 4280 4281 // Merge page query variables 4282 if (options.usePageResource) { 4283 variables = { 4284 ...variables, 4285 ...window.luxuryPresence.config.pageMeta.pageQueryVariables[options.resource] 4286 }; 4287 } 4288 4289 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. Callers 4290 // resolve the flag â fetchData reads the section stamp, aux fetches read 4291 // their own resource's stamp (auxUsesRouter). 4292 function apiUrl(useRouter) { 4293 return options.url || (useRouter ? window.luxuryPresence.defaults.routerUrl : window.luxuryPresence.defaults.apiGatewayUrl); 4294 } 4295 4296 // ROUTER-CLEANUP: aux resources roll out on their own flag, not the section's 4297 // (options.routerApiAux is stamped per aux resource server-side). 4298 function auxUsesRouter(resource) { 4299 return !!(options.routerApiAux && options.routerApiAux[resource]); 4300 } 4301 4302 // Pagination Executes on a Numbered Pagination Container 4303 // Or via a load more button 4304 let mode = 'BUTTONLESS_PAGINATION'; 4305 const container = section.querySelector('.pagination-container');
4306 const loadMoreButton = section.querySelector(options?.loadMoreSelector); 4307 if (container) { 4308 mode = 'NUMBERED_PAGINATION'; 4309 } 4310 if (loadMoreButton) { 4311 mode = 'LOAD_MORE_BUTTON'; 4312 } 4313 let searchContainer = section.querySelector('.search-container'); 4314 const hidePaginationOnFirstPage = options.hidePaginationOnFirstPage || false; 4315 const eventPrefix = '__pagination-'; 4316 const searchFormParams = options.searchFormParams || (options.resource === 'properties' ? [{ 4317 param: 'neighborhoodId', 4318 urlKey: 'neighborhood' 4319 }, { 4320 param: 'search', 4321 urlKey: 'search' 4322 }, { 4323 param: 'salesPriceGTE', 4324 urlKey: 'pricemin', 4325 formKey: 'priceMin', 4326 type: 'int' 4327 }, { 4328 param: 'salesPriceLTE', 4329 urlKey: 'pricemax', 4330 formKey: 'priceMax', 4331 type: 'int' 4332 }, { 4333 param: 'livingSpaceSizeGTE', 4334 urlKey: 'areamin', 4335 formKey: 'areaMin', 4336 type: 'int' 4337 }, { 4338 param: 'livingSpaceSizeLTE', 4339 urlKey: 'areamax', 4340 formKey: 'areaMax', 4341 type: 'int' 4342 }] : []); 4343 4344 // Total entries - initialized in first render 4345 let totalNumber = 0; 4346 const DefaultSearchParams = { 4347 page: 1 4348 }; 4349 searchFormParams.forEach(function (formParam) { 4350 DefaultSearchParams[formParam.formKey || formParam.param] = null; 4351 }); 4352 let searchParams = { 4353 ...DefaultSearchParams 4354 }; 4355 const offset = options.variables?.offset || 0; 4356 let scrollTarget = options.scrollTargetSelector ? section.querySelector(options.scrollTargetSelector) || section : section; 4357 let scrollOffset = (parseInt(options.scrollOffset, 10) || 0) ?? 100; 4358 4359 // entries of per page 4360 // when query variables for a given section would't be filled options.pageSize can store 4361 // template string, ex: "{{variables.limit}}", below code handles that case and set 9 as a default value 4362 let pageSize = parseInt(options.pageSize, 10) || 9; 4363 4364 // Adding mobile pageRange support 4365 var NARROW_BREAKPOINT = 600; 4366 var mobileBreakpoint = options.mobileBreakpoint > 0 ? options.mobileBreakpoint : NARROW_BREAKPOINT; 4367 var paginationMql = window.matchMedia(`(max-width: ${mobileBreakpoint}px)`); 4368 4369 // Page range (pages on both sides of the current page) 4370 var mobilePageRange = options.mobilePageRange > 0 ? options.mobilePageRange : 0; 4371 var desktopPageRange = options.pageRange >= 0 ? options.pageRange : 2; 4372 var pageRange = paginationMql.matches ? mobilePageRange : desktopPageRange; 4373 4374 // Whether to display the 'Previous' button 4375 var showPrevious = true; 4376 4377 // Whether to display the 'Next' button 4378 var showNext = true; 4379 4380 // Whether to display the page buttons 4381 var showPageNumbers = true; 4382 4383 // 'Previous' text 4384 var prevText = options.prevText || '«'; 4385 4386 // 'Next' text 4387 var nextText = options.nextText || '»'; 4388 4389 // Ellipsis text 4390 var ellipsisText = '…'; 4391 var classPrefix = 'paginationjs'; 4392 4393 // Default active class 4394 var activeClassName = 'active'; 4395 4396 // Default disable class 4397 var disableClassName = 'disabled'; 4398 4399 // Pagination element's position in the container 4400 var position = 'bottom'; 4401 4402 // Whether to trigger pagination at initialization 4403 var triggerPagingOnInit = !options.skipInitialLoad; 4404 var showFirstOnEllipsisShow = true; 4405 var showLastOnEllipsisShow = true; 4406 4407 // Instantiated in init() 4408 var el = null; 4409 4410 // Controls scrollTop logic 4411 var firstRender = true; 4412 var renderBySearch = false; 4413 var disabled = false; 4414 4415 // Pagination script class selector 4416 var paginationScriptSelector = options.paginationPartialName ? `.${options.paginationPartialName}` : '.pagination-script'; 4417 4418 // Property Specific Image Override if No Image 4419 var propertyPlaceholderImage = window.luxuryPresence.defaults.propertyPlaceholderImage; 4420 4421 // Construct template 4422 var templateHTML = section.querySelector(`script${paginationScriptSelector}`)?.innerHTML || ''; 4423 var template = Handlebars.compile(templateHTML); 4424 4425 // Initialize 4426 init(); 4427 function init() { 4428 Object.assign(searchParams, window.luxuryPresence.pagination.deserializeParams(searchFormParams, sectionDomId)); 4429 4430 // Append/prepend pagination element to the pagination container 4431 if (mode === 'NUMBERED_PAGINATION') { 4432 el = document.createElement('div'); 4433 el.className = 'paginationjs';
4434 container[position === 'bottom' ? 'append' : 'prepend'](el); 4435 } 4436 if (searchContainer) { 4437 initSearchContainer({ 4438 fetchNeighborhoods: searchContainer.dataset.fetchNeighborhoods === 'true', 4439 fetchPostCategories: searchContainer.dataset.fetchPostCategories === 'true', 4440 fetchOffices: searchContainer.dataset.fetchOffices === 'true', 4441 fetchRentalRates: searchContainer.dataset.fetchRentalRates === 'true' 4442 }, function () { 4443 syncSearchFormState(searchParams); 4444 }); 4445 } 4446 4447 // Bind events 4448 observer(); 4449 } 4450 function syncSearchFormState(params) { 4451 searchContainer.dispatchEvent(new CustomEvent('sync', { 4452 detail: params 4453 })); 4454 } 4455 function initSearchContainer(options, done) { 4456 var promises = []; 4457 if (options.fetchNeighborhoods) { 4458 promises.push(fetchAllNeighborhoods(function (neighborhoods) { 4459 searchContainer.dispatchEvent(new CustomEvent('neighborhoods-data', { 4460 detail: { 4461 data: neighborhoods.map(function (item) { 4462 return { 4463 value: item.id, 4464 label: item.name 4465 }; 4466 }) 4467 } 4468 })); 4469 })); 4470 } 4471 if (options.fetchPostCategories) { 4472 promises.push(fetchPostCategories(function (categories) { 4473 searchContainer.dispatchEvent(new CustomEvent('post-categories-data', { 4474 detail: { 4475 data: categories 4476 } 4477 })); 4478 })); 4479 } 4480 if (options.fetchOffices) { 4481 promises.push(fetchOffices(function (offices) { 4482 searchContainer.dispatchEvent(new CustomEvent('offices-data', { 4483 detail: { 4484 data: offices 4485 } 4486 })); 4487 })); 4488 } 4489 if (options.fetchRentalRates) { 4490 promises.push(fetchAllRentalRates(function (rentalRates) { 4491 searchContainer.dispatchEvent(new CustomEvent('rental-rates-data', { 4492 detail: { 4493 data: rentalRates 4494 } 4495 })); 4496 })); 4497 } 4498 if (promises.length > 0) { 4499 Promise.all(promises).then(function () { 4500 done(); 4501 }); 4502 } else { 4503 // element's custom code is not executed yet, so we're scheduling callback to after element's code 4504 setTimeout(done); 4505 } 4506 } 4507 function fetchAllNeighborhoods(done) { 4508 var useRouter = auxUsesRouter('neighborhoods'); 4509 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. Same 4510 // args on both APIs (the federated neighborhoods field accepts 4511 // withProperties/withBlogPosts); only the selection set differs. 4512 var gqlQuery = 'query ($companyId: String, $withProperties: NeighborhoodPropertiesFilter, $withBlogPosts: NeighborhoodBlogPostsFilter, $offset: Int, $limit: Int) {' + 'neighborhoods (companyId: $companyId, withProperties: $withProperties, withBlogPosts: $withBlogPosts, offset: $offset, limit: $limit) {' + (useRouter ? 'items {id, name}' : 'id, name') + '}}'; 4513 var payload = {}; 4514 payload.offset = 0; 4515 payload.limit = 100; 4516 payload.companyId = variables.companyId; 4517 if (options.resource === 'properties') { 4518 payload.withProperties = { 4519 active: true 4520 }; 4521 ['agentIds', 'tag', 'propertyTypeId', 'statusIds', 'architectureStyle', 'lifestyle', 'salesPriceGTE', 'salesPriceLTE', 'leasePriceGTE', 'leasePriceLTE', 'livingSpaceSizeGTE', 'livingSpaceSizeLTE', 'bathCountGTE', 'bathCountLTE', 'bedroomCountGTE', 'bedroomCountLTE', 'bathCountGTE', 'bathCountLTE', 'bedroomCountGTE', 'bedroomCountLTE', 'featuredListing', 'leaseProperty', 'neighborhoodId', 'developmentId', 'openHouse'].forEach(function (field) { 4522 if (variables[field] !== undefined && variables[field] !== null) { 4523 payload.withProperties[field] = variables[field]; 4524 } 4525 }); 4526 } 4527 if (options.resource === 'posts') { 4528 payload.withBlogPosts = { 4529 active: true 4530 }; 4531 ['search', 'postStatusId', 'featured', 'categoryId', 'categoryIds', 'neighborhoodId', 'slug'].forEach(function (field) { 4532 if (variables[field] !== undefined && variables[field] !== null) { 4533 payload.withBlogPosts[field] = variables[field]; 4534 } 4535 }); 4536 } 4537 4538 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 4539 if (useRouter) { 4540 payload = window.luxuryPresence.routerApi.transformVariables('neighborhoods', payload); 4541 } 4542 superagent.post(apiUrl(useRouter) + '/graphql').withCredentials().send({ 4543 query: gqlQuery, 4544 variables: payload 4545 }).then(function (res) { 4546 var value = res.body.data && res.body.data.neighborhoods || {}; 4547 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 4548 var items = useRouter ? window.luxuryPresence.routerApi.transformPage(value).items : value || []; 4549 done(items, items.length); 4550 }); 4551 } 4552 function fetchPostCategories(done) { 4553 var featured = options.resource === 'posts' && !!variables.featured; 4554 var useRouter = auxUsesRouter('postCategories'); 4555 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. Only the 4556 // selection set differs ({ items {...} } on the router). 4557 var selection = 'id, name, publishedCount, featuredPublishedCount'; 4558 var gqlQuery = 'query ($companyId: String, $offset: Int, $limit: Int) {' + 'postCategories (companyId: $companyId, offset: $offset, limit: $limit ' + (featured ? ' withFeaturedPublishedOnly: true' : ' withPublishedOnly: true') + ') {' + (useRouter ? 'items {' + selection + '}' : selection) + '}}'; 4559 var payload = {}; 4560 payload.offset = 0; 4561 payload.limit = 100; 4562 payload.companyId = variables.companyId; 4563 superagent.post(apiUrl(useRouter) + '/graphql').withCredentials().send({ 4564 query: gqlQuery, 4565 variables: payload 4566 }).then(function (res) { 4567 var value = res.body.data && res.body.data.postCategories || {}; 4568 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 4569 var items = useRouter ? window.luxuryPresence.routerApi.transformPage(value).items : value || []; 4570 done(items.map(function (item) { 4571 item.count = featured ? item.featuredPublishedCount : item.publishedCount; 4572 return item; 4573 }), items.length); 4574 }); 4575 } 4576 function fetchOffices(done) { 4577 var useRouter = auxUsesRouter('offices'); 4578 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. Only the 4579 // selection set differs ({ items {...} } on the router). 4580 var selection = 'id, name, tags'; 4581 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. The two 4582 // APIs differ in more than the items wrapper: federated offices takes 4583 // companyId: ID! (legacy gateway: String), so each branch builds its whole doc. 4584 var gqlQuery = useRouter ? 'query ($companyId: ID!, $offset: Int, $limit: Int) {' + 'offices (companyId: $companyId, offset: $offset, limit: $limit) {' + 'items {' + selection + '}}}' : 'query ($companyId: String, $offset: Int, $limit: Int) {' + 'offices (companyId: $companyId, offset: $offset, limit: $limit) {' + selection + '}}'; 4585 var payload = { 4586 offset: 0, 4587 limit: 100, 4588 companyId: variables.companyId 4589 }; 4590 4591 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 4592 if (useRouter) { 4593 payload = window.luxuryPresence.routerApi.transformVariables('office
4593s', payload); 4594 } 4595 superagent.post(apiUrl(useRouter) + '/graphql').withCredentials().send({ 4596 query: gqlQuery, 4597 variables: payload 4598 }).then(function (res) { 4599 var value = res.body.data && res.body.data.offices || {}; 4600 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 4601 var items = useRouter ? window.luxuryPresence.routerApi.transformPage(value).items : value || []; 4602 done(items, items.length); 4603 }); 4604 } 4605 4606 // ROUTER-CLEANUP: no rentalRates field on the federated router â legacy only. 4607 function fetchAllRentalRates(done) { 4608 var url = options.url || window.luxuryPresence.defaults.apiGatewayUrl; 4609 var gqlQuery = 'query ($companyId: String, $offset: Int, $limit: Int) {' + 'rentalRates (companyId: $companyId, offset: $offset, limit: $limit) {rentalRateId, label}}'; 4610 var payload = { 4611 offset: 0, 4612 limit: 100, 4613 companyId: variables.companyId 4614 }; 4615 superagent.post(url + '/graphql').withCredentials().send({ 4616 query: gqlQuery, 4617 variables: payload 4618 }).then(function (res) { 4619 var items = res.body.data && res.body.data.rentalRates || []; 4620 done(items, items.length); 4621 }).catch(function (err) { 4622 console.error('Error fetching rental rates:', err); 4623 done([], 0); 4624 }); 4625 } 4626 function fetchData(params, done) { 4627 var resource = options.resource; 4628 var gqlQuery = options.query || window.luxuryPresence.defaults.gql[resource]; 4629 var payload = {}; 4630 try { 4631 payload = JSON.parse(JSON.stringify(variables)); 4632 } catch (e) { 4633 Object.keys(variables).forEach(function (variableName) { 4634 payload[variableName] = variables[variableName]; 4635 }); 4636 } 4637 payload.offset = (params.page - 1) * pageSize + offset; 4638 payload.limit = pageSize; 4639 payload.companyId = options.companyId; 4640 searchFormParams.forEach(function (formParam) { 4641 var val = params[formParam.formKey || formParam.param]; 4642 if (val !== null && val !== undefined) { 4643 objSet(payload, formParam.param, val); 4644 } 4645 }); 4646 4647 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 4648 if (options.useRouterApi) { 4649 payload = window.luxuryPresence.routerApi.transformVariables(resource, payload); 4650 } 4651 4652 // TODO: Disabled loading due to jarring effect 4653 // dataContainer.html('Loading...'); 4654 superagent.post(apiUrl(options.useRouterApi) + '/graphql').withCredentials().send({ 4655 query: gqlQuery, 4656 variables: payload 4657 }).then(function (res) { 4658 if (res.body.errors) { 4659 done(res.body.errors); 4660 return; 4661 } 4662 var data = res.body.data || {}; 4663 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 4664 var resources; 4665 var resourceCount; 4666 if (options.useRouterApi) { 4667 var page = window.luxuryPresence.routerApi.transformPage(data[resource]); 4668 resources = window.luxuryPresence.routerApi.transformResponse(resource, page.items); 4669 resourceCount = page.count; 4670 } else { 4671 resources = data[resource] || []; 4672 resourceCount = data[resource + 'Count'] && data[resource + 'Count'].count ? data[resource + 'Count'].count : 0; 4673 } 4674 const finish = function (items) { 4675 if (resource === 'properties' && propertyPlaceholderImage?.id) { 4676 items = items.map(item => { 4677 if (item.media?.length === 0) { 4678 return Object.assign(item, { 4679 media: [propertyPlaceholderImage] 4680 }); 4681 } 4682 return item; 4683 }); 4684 } 4685 done(null, items, resourceCount); 4686 }; 4687 4688 // ROUTER-CLEANUP: client half of PLAT-4073 â resolve the requested 4689 // disclaimers before rendering; older SDKs skip (keys stay unset). 4690 if (options.useRouterApi && resource === 'properties' && options.routerPropertyDisclaimers && options.routerPropertyDisclaimers.length && window.luxuryPresence.routerApi && typeof window.luxuryPresence.routerApi.applyPropertyDisclaimers === 'function') { 4691 window.luxuryPresence.routerApi.applyPropertyDisclaimers(resources, options.routerPropertyDisclaimers).then(finish); 4692 return; 4693 } 4694 finish(resources); 4695 }); 4696 } 4697 function getTotalPage() { 4698 return Math.ceil(totalNumber / pageSize); 4699 } 4700 function renderPaginationList() { 4701 var totalPages = getTotalPage(); 4702 var rangeStart = searchParams.page - pageRange; 4703 var rangeEnd = searchParams.page + pageRange; 4704 if (rangeEnd > totalPages) { 4705 rangeEnd = totalPages; 4706 rangeStart = totalPages - pageRange * 2; 4707 rangeStart = rangeStart < 1 ? 1 : rangeStart; 4708 } 4709 if (rangeStart <= 1) { 4710 rangeStart = 1; 4711 rangeEnd = Math.min(pageRange * 2 + 1, totalPages); 4712 } 4713 4714 // Making sure that 1 more page button is shown in edge positions 4715 if (pageRange === 0) { 4716 if (searchParams.page === totalPages) { 4717 rangeStart = totalPages <= 1 ? 1 : totalPages - 1; 4718 } 4719 if (searchParams.page === 1) { 4720 rangeEnd = Math.min(2, totalPages); 4721 } 4722 } 4723 4724 // Render pagination list 4725 if (mode === 'NUMBERED_PAGINATION') { 4726 el.innerHTML = generateHTML({ 4727 currentPage: searchParams.page, 4728 pageRange: pageRange, 4729 rangeStart: rangeStart, 4730 rangeEnd: rangeEnd 4731 }); 4732 if (totalPages < 2 && hidePaginationOnFirstPage) { 4733 container.style.display = 'none'; 4734 } else { 4735 container.style.display = ''; 4736 } 4737 } else if (mode === 'LOAD_MORE_BUTTON') { 4738 if (searchParams.page >= totalPages) {
4739 loadMoreButton.style.display = 'none'; 4740 } else { 4741 loadMoreButton.style.display = ''; 4742 } 4743 } 4744 } 4745 function render(data) { 4746 renderPaginationList(); 4747 4748 // Render new content with handlebars 4749 var html = ''; 4750 if (mode === 'LOAD_MORE_BUTTON' && searchParams.page > 1) { 4751 // If using load more, append search results to existing results 4752 html = dataContainer.innerHTML; 4753 } 4754 for (var i = 0; i < data.length; i++) { 4755 var itemData = recursivelyParse(data[i]); 4756 itemData.sectionIndex = options.sectionIndex; 4757 itemData.renderOptions = options.renderOptions; 4758 html += template(itemData); 4759 } 4760 dataContainer.innerHTML = html; 4761 4762 // Scroll Top 4763 if (!firstRender && mode === 'NUMBERED_PAGINATION' && (!renderBySearch || !options.skipScrollOnSearch)) { 4764 // Only animate to the top if we replace dataContainer (numbered pagination) 4765 setTimeout(() => { 4766 const scrollTargetOffsetTop = scrollTarget.getBoundingClientRect().top + window.scrollY - scrollOffset; 4767 window.scrollTo({ 4768 top: scrollTargetOffsetTop, 4769 behavior: 'smooth' 4770 }); 4771 }, 250); 4772 } 4773 return true; 4774 } 4775 function generateHTML(args) { 4776 const totalPages = getTotalPage(); 4777 const { 4778 rangeStart, 4779 rangeEnd 4780 } = args; 4781 const makeLnk = page => window.luxuryPresence.pagination.serializeParams(searchFormParams, sectionDomId, { 4782 ...searchParams, 4783 page 4784 }); 4785 let html = ''; 4786 if (showPrevious || showPageNumbers || showNext) { 4787 html += '<div class="paginationjs-pages"><ul>'; 4788 4789 // Previous button 4790 if (showPrevious) { 4791 if (searchParams.page <= 1) { 4792 html += `<li class="${classPrefix}-prev ${disableClassName}"><a>${prevText}</a></li>`; 4793 } else { 4794 html += `<li class="${classPrefix}-prev J-paginationjs-previous" data-num="${searchParams.page - 1}" title="Previous page"><a href="${makeLnk(searchParams.page - 1)}">${prevText}</a></li>`; 4795 } 4796 } 4797 4798 // Pages 4799 if (showPageNumbers) { 4800 if (rangeStart <= 3) { 4801 for (let i = 1; i < rangeStart; i++) { 4802 html += `<li class="${classPrefix}-page J-paginationjs-page ${i === searchParams.page ? activeClassName : ''}" data-num="${i}"><a ${i === searchParams.page ? '' : `href="${makeLnk(i)}"`}>${i}</a></li>`; 4803 } 4804 } else { 4805 if (showFirstOnEllipsisShow) { 4806 html += `<li class="${classPrefix}-page ${classPrefix}-first J-paginationjs-page" data-num="1"><a href="${makeLnk(1)}">1</a></li>`; 4807 } 4808 html += `<li class="${classPrefix}-ellipsis ${disableClassName}"><a>${ellipsisText}</a></li>`; 4809 } 4810 for (let i = rangeStart; i <= rangeEnd; i++) { 4811 html += `<li class="${classPrefix}-page J-paginationjs-page ${i === searchParams.page ? activeClassName : ''}" data-num="${i}"><a ${i === searchParams.page ? '' : `href="${makeLnk(i)}"`}>${i}</a></li>`; 4812 } 4813 if (rangeEnd < totalPages - 2) { 4814 html += `<li class="${classPrefix}-ellipsis ${disableClassName}"><a>${ellipsisText}</a></li>`; 4815 if (showLastOnEllipsisShow) { 4816 html += `<li class="${classPrefix}-page ${classPrefix}-last J-paginationjs-page" data-num="${totalPages}"><a href="${makeLnk(totalPages)}">${totalPages}</a></li>`; 4817 } 4818 } else { 4819 for (let i = rangeEnd + 1; i <= totalPages; i++) { 4820 html += `<li class="${classPrefix}-page J-paginationjs-page" data-num="${i}"><a href="${makeLnk(i)}">${i}</a></li>`; 4821 } 4822 } 4823 } 4824 4825 // Next button 4826 if (showNext) { 4827 if (searchParams.page >= totalPages) { 4828 html += `<li class="${classPrefix}-next ${disableClassName}"><a>${nextText}</a></li>`; 4829 } else { 4830 html += `<li class="${classPrefix}-next J-paginationjs-next" data-num="${searchParams.page + 1}" title="Next page"><a href="${makeLnk(searchParams.page + 1)}">${nextText}</a></li>`; 4831 } 4832 } 4833 html += '</ul></div>'; 4834 } 4835 return html; 4836 } 4837 function go(newSearchParams, callback, restorationVisit) { 4838 if (disabled) return; 4839 var goToPageNumber = newSearchParams.page; 4840 4841 // Page number is out of bounds 4842 if (!goToPageNumber || goToPageNumber < 1) return; 4843 var totalPage = getTotalPage(); 4844 4845 // Page number is out of bounds 4846 if (!restorationVisit && totalNumber > 0) { 4847 if (goToPageNumber > totalPage) return; 4848 } 4849 if (!options.skipSerialization && (mode === 'NUMBERED_PAGINATION' || searchContainer)) {
4850 var newURL = window.luxuryPresence.pagination.serializeParams(searchFormParams, sectionDomId, { 4851 ...newSearchParams, 4852 page: goToPageNumber !== 1 && mode === 'NUMBERED_PAGINATION' ? newSearchParams.page : null 4853 }); 4854 if (!areQueryParamsEqual(newSearchParams, searchParams) && !restorationVisit) { 4855 window.history.pushState({}, '', window.luxuryPresence.getPath(newURL, { 4856 queryString: true 4857 })); 4858 } 4859 } 4860 4861 // Fetch and update page 4862 fetchData(newSearchParams, renderWithData); 4863 disabled = true; 4864 function renderWithData(err, data, count) { 4865 if (err) { 4866 dataContainer.dispatchEvent(new Event('error')); 4867 } else { 4868 searchParams = { 4869 ...newSearchParams 4870 }; 4871 totalNumber = count - offset; 4872 if (data.length === 0) { 4873 dataContainer.dispatchEvent(new Event('no-data')); 4874 } else { 4875 dataContainer.dispatchEvent(new Event('data')); 4876 } 4877 render(data); 4878 firstRender = false; 4879 } 4880 disabled = false; 4881 renderBySearch = false; 4882 } 4883 } 4884 function areQueryParamsEqual(first, second) { 4885 var differ = Object.keys(first).find(function (key) { 4886 return first[key] !== undefined && first[key] !== null && first[key] !== second[key]; 4887 }); 4888 if (differ) { 4889 return false; 4890 } 4891 differ = Object.keys(second).find(function (key) { 4892 return second[key] !== undefined && second[key] !== null && second[key] !== first[key]; 4893 }); 4894 return !differ; 4895 } 4896 function next(callback) { 4897 go({ 4898 ...searchParams, 4899 page: searchParams.page + 1 4900 }, callback); 4901 } 4902 function previous(callback) { 4903 go({ 4904 ...searchParams, 4905 page: searchParams.page - 1 4906 }, callback); 4907 } 4908 function refresh(callback) { 4909 go(searchParams, callback); 4910 } 4911 function update(params, callback) { 4912 renderBySearch = true; 4913 go(params, callback); 4914 } 4915 function observer() { 4916 if (searchContainer) { 4917 searchContainer.addEventListener('search', function (event, newSearchParams) { 4918 newSearchParams = event.detail || newSearchParams; 4919 update({ 4920 ...searchParams, 4921 ...newSearchParams, 4922 page: 1 4923 }); 4924 }); 4925 searchContainer.addEventListener('clear-search', function () { 4926 const defaultSearchParams = { 4927 ...DefaultSearchParams 4928 }; 4929 const isCurrentSearchFormStateDefault = areQueryParamsEqual({ 4930 ...defaultSearchParams, 4931 page: null 4932 }, { 4933 ...searchParams, 4934 page: null 4935 }); 4936 4937 // if mode is LOAD_MORE_BUTTON we should't make anything on clear 4938 // when search form have default state 4939 if (isCurrentSearchFormStateDefault && mode !== 'NUMBERED_PAGINATION') { 4940 return; 4941 } 4942 4943 // if someone initially go to some page and click 'Clear' on search from 4944 // we should't navigate to first page. We should preserve page value 4945 if (isCurrentSearchFormStateDefault) { 4946 defaultSearchParams.page = searchParams.page; 4947 } 4948 syncSearchFormState(defaultSearchParams); 4949 update(defaultSearchParams); 4950 }); 4951 } 4952 if (mode === 'LOAD_MORE_BUTTON') { 4953 loadMoreButton.addEventListener('click', function (event) { 4954 go({ 4955 ...searchParams, 4956 page: searchParams.page + 1 4957 }); 4958 return false; 4959 }); 4960 } 4961 if (mode === 'LOAD_MORE_BUTTON' || mode === 'BUTTONLESS_PAGINATION') { 4962 // Do initial render 4963 go(Object.assign({}, searchParams, { 4964 page: 1 4965 })); 4966 return; 4967 } 4968 if (mode === 'NUMBERED_PAGINATION') { 4969 // Go to specified page number 4970 container.addEventListener(eventPrefix + 'go', function (event) { 4971 let { 4972 pageNumber, 4973 done 4974 } = event.detail || {}; 4975 pageNumber = parseInt(pageNumber, 10); 4976 if (!pageNumber) { 4977 return; 4978 } 4979 go({ 4980 ...searchParams, 4981 page: pageNumber 4982 }, done); 4983 }); 4984 4985 // Page number button click 4986 el.addEventListener('click', function (event) { 4987 let clickTarget = event.target; 4988 let current = clickTarget.closest('.J-paginationjs-page, .J-paginationjs-previous, .J-paginationjs-next'); 4989 let pageNumber = current?.getAttribute('data-num'); 4990 if (!pageNumber || current.classList.contains(disableClassName) || current.classList.contains(activeClassName)) { 4991 return; 4992 } else { 4993 go({ 4994 ...searchParams, 4995 page: parseInt(pageNumber, 10) 4996 }); 4997 } 4998 event.preventDefault(); 4999 }); 5000 5001 // Whether to load the default page 5002 var defaultPageNumber = searchParams.page; 5003 if (triggerPagingOnInit) {
5004 container.dispatchEvent(new CustomEvent(eventPrefix + 'go', { 5005 detail: { 5006 pageNumber: defaultPageNumber 5007 } 5008 })); 5009 } 5010 } 5011 window.addEventListener('popstate', function (event) { 5012 var newParams = Object.assign({}, DefaultSearchParams, window.luxuryPresence.pagination.deserializeParams(searchFormParams, sectionDomId)); 5013 if (!areQueryParamsEqual(newParams, searchParams)) { 5014 go(newParams, null, true); 5015 if (searchContainer) { 5016 syncSearchFormState(newParams); 5017 } 5018 } 5019 }); 5020 } 5021 function replaceVariables(template, variables) { 5022 var formattedString; 5023 for (var key in variables) { 5024 var value = variables[key]; 5025 var regexp = new RegExp('<%=\\s*' + key + '\\s*%>', 'img'); 5026 formattedString = (formattedString || template).replace(regexp, value); 5027 } 5028 return formattedString; 5029 } 5030 function isTextEditorValue(obj) { 5031 return 'raw' in obj || 'gjs' in obj; 5032 } 5033 function getTextEditorValue(obj) { 5034 if (!obj.html) { 5035 return ''; 5036 } 5037 var data = obj.html; 5038 var css = (obj.raw || obj.gjs || {}).css; 5039 if (css) { 5040 data = data + '<style>' + css + '</style>'; 5041 } 5042 return data; 5043 } 5044 5045 /** 5046 * check rendered resources for html and raw properties that could indicate if resource is from an advanced text editor. 5047 * strips out raw proprties and returns only HTML if it exists. 5048 * @param {Object} resources a collection retrieved from the database 5049 * @return {Object} the newly modified object. 5050 */ 5051 function recursivelyParse(resources) { 5052 forEach(resources, function (value, key) { 5053 if (!value) { 5054 return; 5055 } 5056 if (value instanceof Object) { 5057 if (isTextEditorValue(value)) { 5058 resources[key] = getTextEditorValue(value); 5059 return; 5060 } else { 5061 return recursivelyParse(value); 5062 } 5063 } 5064 try { 5065 var parsedData = JSON.parse(value); 5066 if (isTextEditorValue(parsedData)) { 5067 resources[key] = getTextEditorValue(parsedData); 5068 } 5069 } catch (e) { 5070 // do nothing if we failed to parse value as JSON 5071 } 5072 }); 5073 return resources; 5074 } 5075 function forEach(collection, iteratee) { 5076 var func = Array.isArray(collection) ? arrayEach : baseFor; 5077 return func(collection, iteratee); 5078 } 5079 function baseFor(object, iteratee) { 5080 if (!object) { 5081 return; 5082 } 5083 var iterable = Object(object); 5084 var props = Object.keys(object); 5085 var length = props.length; 5086 var index = -1; 5087 while (length--) { 5088 var key = props[++index]; 5089 if (iteratee(iterable[key], key, iterable) === false) { 5090 break; 5091 } 5092 } 5093 return object; 5094 } 5095 function objSet(obj, path, value) { 5096 const pathArray = Array.isArray(path) ? path : path.match(/([^[.\]])+/g); 5097 pathArray.reduce((acc, key, i) => { 5098 if (acc[key] === undefined) acc[key] = {}; 5099 if (i === pathArray.length - 1) acc[key] = value; 5100 return acc[key]; 5101 }, obj); 5102 } 5103 function arrayEach(array, iteratee) { 5104 var index = -1; 5105 var length = array.length; 5106 while (++index < length) { 5107 if (iteratee(array[index], index, array) === false) { 5108 break; 5109 } 5110 } 5111 return array; 5112 } 5113 function selectPageRangeMode(e) { 5114 pageRange = e.matches ? mobilePageRange : desktopPageRange; 5115 renderPaginationList(); 5116 } 5117 paginationMql.addEventListener('change', selectPageRangeMode); 5118})('section-f49c80d5-1090-4356-bdb7-81766af37cfc', JSON.parse("{\"pageSize\":\"24\",\"resource\":\"properties\",\"pageRange\":0,\"variables\":{\"limit\":24,\"order\":\"salesPrice\",\"offset\":0,\"sortDir\":\"DESC\",\"statusId\":\"{{variables.statusId}}\",\"companyId\":\"c3076ecb-c2d7-457b-a426-bcf036133f1f\",\"categoryId\":\"{{pageElement.categoryId}}\",\"sort\":\"salesPrice\",\"statusIds\":[\"b0e88b38-7437-438d-a6fd-b13f135e1683\"],\"propertyIds\":[\"8bf71a0c-3ff9-404c-8842-268a1367d602\",\"0ace1ac7-0e53-440a-9e14-787c340f4915\",\"1146c6fc-5fc5-403a-ad09-716d08b9ccc5\",\"896f5b99-b0ee-451a-9a6f-407130dffe00\",\"a8212a3f-ded0-47a0-9b25-d36a5e305d8d\",\"07a8ebcc-23b0-4afd-9313-ae7f558093f3\",\"033065ee-863c-4d14-a0af-4b6336ddc5ef\",\"9cce0ba6-b894-462a-9ba6-8d1a43cea0e9\",\"a76bd4f6-3566-4cba-9a35-47f3fd98b64f\",\"a3a02081-1edf-4b0f-8b84-b4281292fb0a\",\"b35f9aac-10f8-4cb7-b3d2-77bda2807b9b\",\"4e4ff6f1-1291-4dc6-be15-c948e28125c1\",\"6780ca69-9e27-4af0-a94b-147ccf256efe\",\"35be51e2-62c3-423b-abf2-944a08966c59\",\"fcc02dc6-6cc1-47b5-860b-b
511818396d08af4\",\"9902cd68-bfd0-44f4-9f0e-00ee1b8f291a\",\"04692883-7857-4a7a-90a4-038ad1ed5e45\",\"f8c6457e-b7fc-4bd5-8177-714bcdca3aaa\",\"9edcb6b4-84dd-4a7e-a858-38d5bc9c8789\",\"f2ea3c84-332e-4a33-8081-bfb3cf089e67\",\"4a24724e-e98a-40dd-bf0d-819b6d4e0fb1\",\"fde207f0-67de-496f-9f9a-78a962417d69\",\"52332c59-2e51-4c07-ac7e-10082828fc76\",\"922a566c-0a1a-4e46-a533-51fea05da75b\",\"56c18fe1-9ac6-4cda-80bf-47a8ff1d6ee5\",\"571f9497-240d-4f45-8b74-fbb8737ca632\",\"e6ba757c-a3d0-4a61-9b13-13927f7bf380\",\"3ec26aba-8f88-401f-a48e-f2cdc3c7af35\",\"47a6395a-4f09-4cbc-99a0-27c7423f4c02\",\"19c7dfc1-a4c3-478d-8e9f-169bd0c1ddd8\",\"76191530-8ccb-4ff9-9c09-5fbfde3b098a\",\"cd36507a-46c6-4d08-ae5d-5acaf0988cc7\",\"a91f1984-f6d3-4946-8ef5-53a986bce631\",\"c45e6905-4d85-423c-a931-9fa40b6e82e4\",\"70b9795b-8238-4bb4-89a8-67f8404f653a\",\"6420fcf0-8552-4883-800f-f3c0f0d434e2\",\"00cb54ee-6c00-47a4-bfd2-a24d29575c8d\",\"c0f72676-6138-4179-8a1b-60748a717e71\",\"d50e081d-d27d-470b-8729-91d0f66b0522\",\"3337bcf5-1fc1-4a73-9ba5-c490d7c49d40\",\"8f33c8fa-e237-4851-9488-86b75775eda5\",\"12ee30ff-e1fd-4f1b-97d9-0846c3a8e734\",\"c276706b-74b8-4175-8b6e-bc6f627f18fd\",\"d4613c10-9166-47dc-88e9-85db3005bcca\"],\"advancedFilters\":{\"query\":{\"statusIds\":{\"in\":[\"b0e88b38-7437-438d-a6fd-b13f135e1683\"]}}},\"websiteId\":\"ff06f655-0c64-45c8-9c55-e8468b4e5303\"},\"searchFormParams\":[{\"param\":\"neighborhoodId\",\"urlKey\":\"neighborhood\"},{\"param\":\"search\",\"urlKey\":\"search\"},{\"type\":\"int\",\"param\":\"salesPriceGTE\",\"urlKey\":\"pricemin\",\"formKey\":\"priceMin\"},{\"type\":\"int\",\"param\":\"salesPriceLTE\",\"urlKey\":\"pricemax\",\"formKey\":\"priceMax\"},{\"type\":\"int\",\"param\":\"leasePriceGTE\",\"urlKey\":\"lpricemin\",\"formKey\":\"lpriceMin\"},{\"type\":\"int\",\"param\":\"leasePriceLTE\",\"urlKey\":\"lpricemax\",\"formKey\":\"lpriceMax\"},{\"type\":\"int\",\"param\":\"livingSpaceSizeGTE\",\"urlKey\":\"areamin\",\"formKey\":\"areaMin\"},{\"type\":\"int\",\"param\":\"livingSpaceSizeLTE\",\"urlKey\":\"areamax\",\"formKey\":\"areaMax\"}],\"resourceQueryOption\":\"query\",\"hidePaginationOnFirstPage\":true,\"query\":\"query Properties($agentIds: [ID!], $teamIds: [ID!], $neighborhoodIds: [ID!], $officeIds: [ID!], $propertyId: ID, $companyId: String, $networkId: String, $network: Boolean, $statusId: String, $propertyIds: [ID!], $prioritizeIds: Boolean, $statusIds: [String!], $excludeStatusId: [String!], $neighborhoodId: String, $addressState: [String!], $addressCity: [String!], $relatedNeighborhoodPropertyId: String, $developmentId: String, $featuredListing: Boolean, $leaseProperty: Boolean, $search: String, $searchTermMode: SearchTermModeEnum, $globalProperty: Boolean, $archived: Boolean, $salesPriceGTE: Float, $salesPriceLTE: Float, $leasePriceGTE: Float, $leasePriceLTE: Float, $livingSpaceSizeGTE: Float, $livingSpaceSizeLTE: Float, $bathCountGTE: Float, $bathCountLTE: Float, $bedroomCountGTE: Float, $bedroomCountLTE: Float, $architectureStyle: String, $lifestyle: String, $propertyTypeId: String, $propertyTypeIds: [String!], $spaceTypeIds: [ID!], $tag: String, $backfillMLSResults: Boolean, $displayMLSListings: String, $hostname: String, $websiteId: ID, $backfillProviders: [String!], $backfillMLSListingIds: [String!], $backfillMLSAgentIds: [String!], $backfillMLSOfficeIds: [String!], $backfillBoundary: JSON, $openHouse: Boolean, $withGeo: Boolean, $advancedFilters: JSON, $seasonalPriceId: ID, $offset: Int, $limit: Int, $sort: String, $sortDir: SortDirectionEnum) {\\n properties(\\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 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 slug\\n name\\n status\\n priceUponRequest\\n currency\\n salesPrice\\n reducedPrice\\n isPasswordProtected\\n leaseProperty\\n leasePrice\\n leasePeriod\\n privateAddress\\n fromMLS\\n mlsId\\n mlsLogo\\n mlsAttribution\\n openHouseHours\\n fullAddress\\n lotAreaSize\\n lotAreaUnits\\n media {\\n smallUrl\\n mediumUrl\\n largeUrl\\n xLargeUrl\\n xxLargeUrl\\n width\\n height\\n altTagText\\n }\\n bedroomCount\\n bathCount\\n soldDate\\n livingSpaceSize\\n livingSpaceUnits\\n types {\\n id\\n name\\n }\\n }\\n propertiesCount(\\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 count\\n }\\n}\",\"routerPropertyDisclaimers\":[\"mlsAttribution\",\"mlsLogo\"],\"companyId\":\"c3076ecb-c2d7-457b-a426-bcf036133f1f\",\"usePageResource\":false,\"sectionIndex\":2,\"useRouterApi\":false,\"routerApiAux\":{\"testimonials\":true,\"agents\":false,\"neighborhoods\":false,\"developments\":false,\"properties\":false,\"posts\":true,\"pressReleases\":true,\"offices\":true,\"teams\":true,\"pois\":true,\"postCategories\":true}}")); 5119} catch(e) { 5120console.log(e); 5121} 5122 try { 5123(function init(sectionDomId) { 5124 $(document).on("click", '#' + sectionDomId + ' .property-list__share .btn', function () { 5125 if ($(this).parent().hasClass('property-list__share--opened')) { 5126 $(this).parent().removeClass('property-list__share--opened'); 5127 } else { 5128 $('#' + sectionDomId + ' .property-list__share').removeClass('property-list__share--opened'); 5129 $(this).parent().addClass('property-list__share--opened'); 5130 } 5131 }); 5132 const emptyResultElement = $('#' + sectionDomId + ' .empty-result'); 5133 const searchContainer = $('#' + sectionDomId + ' .search-container'); 5134 const dataContainer = $('#' + sectionDomId + ' .data-container'); 5135 const paginationContainer = $(`#${sectionDomId} .pagination-container`); 5136 const priceSlider = searchContainer.find('input[name="price-slider"]');
5137 const areaSlider = searchContainer.find('input[name="area-slider"]'); 5138 const neighborhoodSelect = searchContainer.find('select[name="neighborhood-select"]'); 5139 const searchInput = searchContainer.find('input[name="search-input"]'); 5140 const clearBtn = searchContainer.find('.clear'); 5141 const priceMin = parseInt(priceSlider.attr('data-min')); 5142 const priceMax = parseInt(priceSlider.attr('data-max')); 5143 const areaMin = parseInt(areaSlider.attr('data-min')); 5144 const areaMax = parseInt(areaSlider.attr('data-max')); 5145 const rangeSliderInitialized = $(`#${sectionDomId} .search-item .irs`).length >= 1; 5146 const filterLease = searchContainer.data('filter-lease'); 5147 function onSearch() { 5148 const params = window.luxuryPresence.getSearchFormValues({ 5149 queryElement: searchInput[0], 5150 priceSliderElement: priceSlider[0], 5151 areaSliderElement: areaSlider[0], 5152 neighborhoodSelect: neighborhoodSelect[0] 5153 }); 5154 if (filterLease) { 5155 params.lpriceMin = params.priceMin; 5156 params.lpriceMax = params.priceMax; 5157 delete params.priceMin; 5158 delete params.priceMax; 5159 } 5160 if (!areaSlider.attr('data-min')) params.areaMin = null; 5161 if (!areaSlider.attr('data-max')) params.areaMax = null; 5162 searchContainer[0]?.dispatchEvent(new CustomEvent('search', { 5163 detail: params 5164 })); 5165 } 5166 searchContainer.on('neighborhoods-data', function (ev, neighborhoods) { 5167 neighborhoods = ev.detail || neighborhoods; 5168 neighborhoodSelect.append(neighborhoods.data.map(item => `<option value="${item.value}">${item.label}</option>`).join('\n')); 5169 }); 5170 searchContainer.on('sync', function (ev, params) { 5171 params = ev.detail || params; 5172 searchInput.val(params.search); 5173 neighborhoodSelect.val(params.neighborhoodId); 5174 priceSlider.data('ionRangeSlider').update({ 5175 from: filterLease ? params.lpriceMin : params.priceMin, 5176 to: filterLease ? params.lpriceMax : params.priceMax 5177 }); 5178 areaSlider.data('ionRangeSlider').update({ 5179 from: params.areaMin, 5180 to: params.areaMax 5181 }); 5182 }); 5183 dataContainer.on('no-data', function () { 5184 emptyResultElement.show(); 5185 }); 5186 dataContainer.on('data', function () { 5187 emptyResultElement.hide(); 5188 }); 5189 clearBtn.click(function () { 5190 searchContainer[0]?.dispatchEvent(new Event('clear-search')); 5191 }); 5192 searchInput.on('input', window.luxuryPresence.debounce(onSearch, 1000)); 5193 neighborhoodSelect.change(onSearch); 5194 if (rangeSliderInitialized) { 5195 if (!priceSlider.destroy) { 5196 $(`#${sectionDomId} .search-item.price >.irs`).remove(); 5197 initPriceSlider(); 5198 } 5199 if (!areaSlider.destroy) { 5200 $(`#${sectionDomId} .search-item.area >.irs`).remove(); 5201 initAreaSlider(); 5202 } 5203 } else { 5204 initPriceSlider(); 5205 initAreaSlider(); 5206 } 5207 function initPriceSlider() { 5208 priceSlider.ionRangeSlider({ 5209 type: "double", 5210 skin: 'round', 5211 grid: false, 5212 force_edges: false, 5213 hide_min_max: false, 5214 hide_from_to: false, 5215 block: false, 5216 prettify: function (val) { 5217 return window.luxuryPresence.formatSliderPriceRange(val, { 5218 min: priceMin, 5219 max: priceMax 5220 }, "$", { 5221 lowPrefix: "<", 5222 highSuffix: "+" 5223 }); 5224 }, 5225 onFinish: onSearch 5226 }); 5227 } 5228 function initAreaSlider() { 5229 areaSlider.ionRangeSlider({ 5230 type: "double", 5231 skin: 'round', 5232 grid: false, 5233 force_edges: false, 5234 hide_min_max: false, 5235 hide_from_to: false, 5236 block: false, 5237 prettify: function (val) { 5238 return window.luxuryPresence.formatSliderAreaRange(val, { 5239 min: areaMin, 5240 max: areaMax 5241 }, "sqft", { 5242 lowPrefix: "<", 5243 highSuffix: "+" 5244 }); 5245 }, 5246 onFinish: onSearch 5247 }); 5248 } 5249})('section-f49c80d5-1090-4356-bdb7-81766af37cfc', JSON.parse("{\"resource\":\"properties\",\"useRouterApi\":false,\"companyId\":\"c3076ecb-c2d7-457b-a426-bcf036133f1f\",\"usePageResource\":false,\"sectionIndex\":2,\"routerApiAux\":{\"testimonials\":true,\"agents\":false,\"neighborhoods\":false,\"developments\":false,\"properties\":false,\"posts\":true,\"pressReleases\":true,\"offices\":true,\"teams\":true,\"pois\":true,\"postCategories\":true}}")); 5250} catch(e) { 5251console.log(e); 5252} 5253 try { 5254(function init(sectionDomId, options) { 5255 let section = null; 5256 switch (sectionDomId) { 5257 case 'NAVBAR': 5258 section = document.querySelector('body > nav, #global-navbar'); 5259 break; 5260 case 'FOOTER': 5261 section = document.querySelector('body > footer, #global-footer'); 5262 break; 5263 case 'SIDEMENU': 5264 section = document.querySelector('body > div.sidemenu, #global-sidemenu'); 5265 break; 5266 case 'CONTACT':
5267 section = document.querySelector('#modal-global-contact-us'); 5268 break; 5269 case 'MOBILE_CONTACT': 5270 section = document.querySelector('body > div.mobile-contact-wrapper, #global-mobile-contact'); 5271 break; 5272 case 'SUBSCRIBE': 5273 // Subscribe Not Implemented 5274 section = null; 5275 break; 5276 case 'ACCOUNT': 5277 // Account Not Implemented 5278 section = null; 5279 break; 5280 default: 5281 section = document.querySelector('#' + sectionDomId); 5282 } 5283 if (!section) { 5284 return; 5285 } 5286 5287 // Where content / items are rendered 5288 const dataContainer = section.querySelector('.data-container'); 5289 if (!dataContainer) { 5290 // no place to render items = no need to query server or do anything else 5291 return; 5292 } 5293 let variables = options.variables || {}; 5294 5295 // Some variables in options may not have been injected - remove 5296 Object.keys(variables).forEach(function (variableName) { 5297 if (typeof variables[variableName] === 'string' && variables[variableName].match(/^{{.*}}$/)) { 5298 delete variables[variableName]; 5299 } 5300 }); 5301 5302 // Merge page query variables 5303 if (options.usePageResource) { 5304 variables = { 5305 ...variables, 5306 ...window.luxuryPresence.config.pageMeta.pageQueryVariables[options.resource] 5307 }; 5308 } 5309 5310 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. Callers 5311 // resolve the flag â fetchData reads the section stamp, aux fetches read 5312 // their own resource's stamp (auxUsesRouter). 5313 function apiUrl(useRouter) { 5314 return options.url || (useRouter ? window.luxuryPresence.defaults.routerUrl : window.luxuryPresence.defaults.apiGatewayUrl); 5315 } 5316 5317 // ROUTER-CLEANUP: aux resources roll out on their own flag, not the section's 5318 // (options.routerApiAux is stamped per aux resource server-side). 5319 function auxUsesRouter(resource) { 5320 return !!(options.routerApiAux && options.routerApiAux[resource]); 5321 } 5322 5323 // Pagination Executes on a Numbered Pagination Container 5324 // Or via a load more button 5325 let mode = 'BUTTONLESS_PAGINATION'; 5326 const container = section.querySelector('.pagination-container');
5327 const loadMoreButton = section.querySelector(options?.loadMoreSelector); 5328 if (container) { 5329 mode = 'NUMBERED_PAGINATION'; 5330 } 5331 if (loadMoreButton) { 5332 mode = 'LOAD_MORE_BUTTON'; 5333 } 5334 let searchContainer = section.querySelector('.search-container'); 5335 const hidePaginationOnFirstPage = options.hidePaginationOnFirstPage || false; 5336 const eventPrefix = '__pagination-'; 5337 const searchFormParams = options.searchFormParams || (options.resource === 'properties' ? [{ 5338 param: 'neighborhoodId', 5339 urlKey: 'neighborhood' 5340 }, { 5341 param: 'search', 5342 urlKey: 'search' 5343 }, { 5344 param: 'salesPriceGTE', 5345 urlKey: 'pricemin', 5346 formKey: 'priceMin', 5347 type: 'int' 5348 }, { 5349 param: 'salesPriceLTE', 5350 urlKey: 'pricemax', 5351 formKey: 'priceMax', 5352 type: 'int' 5353 }, { 5354 param: 'livingSpaceSizeGTE', 5355 urlKey: 'areamin', 5356 formKey: 'areaMin', 5357 type: 'int' 5358 }, { 5359 param: 'livingSpaceSizeLTE', 5360 urlKey: 'areamax', 5361 formKey: 'areaMax', 5362 type: 'int' 5363 }] : []); 5364 5365 // Total entries - initialized in first render 5366 let totalNumber = 0; 5367 const DefaultSearchParams = { 5368 page: 1 5369 }; 5370 searchFormParams.forEach(function (formParam) { 5371 DefaultSearchParams[formParam.formKey || formParam.param] = null; 5372 }); 5373 let searchParams = { 5374 ...DefaultSearchParams 5375 }; 5376 const offset = options.variables?.offset || 0; 5377 let scrollTarget = options.scrollTargetSelector ? section.querySelector(options.scrollTargetSelector) || section : section; 5378 let scrollOffset = (parseInt(options.scrollOffset, 10) || 0) ?? 100; 5379 5380 // entries of per page 5381 // when query variables for a given section would't be filled options.pageSize can store 5382 // template string, ex: "{{variables.limit}}", below code handles that case and set 9 as a default value 5383 let pageSize = parseInt(options.pageSize, 10) || 9; 5384 5385 // Adding mobile pageRange support 5386 var NARROW_BREAKPOINT = 600; 5387 var mobileBreakpoint = options.mobileBreakpoint > 0 ? options.mobileBreakpoint : NARROW_BREAKPOINT; 5388 var paginationMql = window.matchMedia(`(max-width: ${mobileBreakpoint}px)`); 5389 5390 // Page range (pages on both sides of the current page) 5391 var mobilePageRange = options.mobilePageRange > 0 ? options.mobilePageRange : 0; 5392 var desktopPageRange = options.pageRange >= 0 ? options.pageRange : 2; 5393 var pageRange = paginationMql.matches ? mobilePageRange : desktopPageRange; 5394 5395 // Whether to display the 'Previous' button 5396 var showPrevious = true; 5397 5398 // Whether to display the 'Next' button 5399 var showNext = true; 5400 5401 // Whether to display the page buttons 5402 var showPageNumbers = true; 5403 5404 // 'Previous' text 5405 var prevText = options.prevText || '«'; 5406 5407 // 'Next' text 5408 var nextText = options.nextText || '»'; 5409 5410 // Ellipsis text 5411 var ellipsisText = '…'; 5412 var classPrefix = 'paginationjs'; 5413 5414 // Default active class 5415 var activeClassName = 'active'; 5416 5417 // Default disable class 5418 var disableClassName = 'disabled'; 5419 5420 // Pagination element's position in the container 5421 var position = 'bottom'; 5422 5423 // Whether to trigger pagination at initialization 5424 var triggerPagingOnInit = !options.skipInitialLoad; 5425 var showFirstOnEllipsisShow = true; 5426 var showLastOnEllipsisShow = true; 5427 5428 // Instantiated in init() 5429 var el = null; 5430 5431 // Controls scrollTop logic 5432 var firstRender = true; 5433 var renderBySearch = false; 5434 var disabled = false; 5435 5436 // Pagination script class selector 5437 var paginationScriptSelector = options.paginationPartialName ? `.${options.paginationPartialName}` : '.pagination-script'; 5438 5439 // Property Specific Image Override if No Image 5440 var propertyPlaceholderImage = window.luxuryPresence.defaults.propertyPlaceholderImage; 5441 5442 // Construct template 5443 var templateHTML = section.querySelector(`script${paginationScriptSelector}`)?.innerHTML || ''; 5444 var template = Handlebars.compile(templateHTML); 5445 5446 // Initialize 5447 init(); 5448 function init() { 5449 Object.assign(searchParams, window.luxuryPresence.pagination.deserializeParams(searchFormParams, sectionDomId)); 5450 5451 // Append/prepend pagination element to the pagination container 5452 if (mode === 'NUMBERED_PAGINATION') { 5453 el = document.createElement('div'); 5454 el.className = 'paginationjs';
5455 container[position === 'bottom' ? 'append' : 'prepend'](el); 5456 } 5457 if (searchContainer) { 5458 initSearchContainer({ 5459 fetchNeighborhoods: searchContainer.dataset.fetchNeighborhoods === 'true', 5460 fetchPostCategories: searchContainer.dataset.fetchPostCategories === 'true', 5461 fetchOffices: searchContainer.dataset.fetchOffices === 'true', 5462 fetchRentalRates: searchContainer.dataset.fetchRentalRates === 'true' 5463 }, function () { 5464 syncSearchFormState(searchParams); 5465 }); 5466 } 5467 5468 // Bind events 5469 observer(); 5470 } 5471 function syncSearchFormState(params) { 5472 searchContainer.dispatchEvent(new CustomEvent('sync', { 5473 detail: params 5474 })); 5475 } 5476 function initSearchContainer(options, done) { 5477 var promises = []; 5478 if (options.fetchNeighborhoods) { 5479 promises.push(fetchAllNeighborhoods(function (neighborhoods) { 5480 searchContainer.dispatchEvent(new CustomEvent('neighborhoods-data', { 5481 detail: { 5482 data: neighborhoods.map(function (item) { 5483 return { 5484 value: item.id, 5485 label: item.name 5486 }; 5487 }) 5488 } 5489 })); 5490 })); 5491 } 5492 if (options.fetchPostCategories) { 5493 promises.push(fetchPostCategories(function (categories) { 5494 searchContainer.dispatchEvent(new CustomEvent('post-categories-data', { 5495 detail: { 5496 data: categories 5497 } 5498 })); 5499 })); 5500 } 5501 if (options.fetchOffices) { 5502 promises.push(fetchOffices(function (offices) { 5503 searchContainer.dispatchEvent(new CustomEvent('offices-data', { 5504 detail: { 5505 data: offices 5506 } 5507 })); 5508 })); 5509 } 5510 if (options.fetchRentalRates) { 5511 promises.push(fetchAllRentalRates(function (rentalRates) { 5512 searchContainer.dispatchEvent(new CustomEvent('rental-rates-data', { 5513 detail: { 5514 data: rentalRates 5515 } 5516 })); 5517 })); 5518 } 5519 if (promises.length > 0) { 5520 Promise.all(promises).then(function () { 5521 done(); 5522 }); 5523 } else { 5524 // element's custom code is not executed yet, so we're scheduling callback to after element's code 5525 setTimeout(done); 5526 } 5527 } 5528 function fetchAllNeighborhoods(done) { 5529 var useRouter = auxUsesRouter('neighborhoods'); 5530 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. Same 5531 // args on both APIs (the federated neighborhoods field accepts 5532 // withProperties/withBlogPosts); only the selection set differs. 5533 var gqlQuery = 'query ($companyId: String, $withProperties: NeighborhoodPropertiesFilter, $withBlogPosts: NeighborhoodBlogPostsFilter, $offset: Int, $limit: Int) {' + 'neighborhoods (companyId: $companyId, withProperties: $withProperties, withBlogPosts: $withBlogPosts, offset: $offset, limit: $limit) {' + (useRouter ? 'items {id, name}' : 'id, name') + '}}'; 5534 var payload = {}; 5535 payload.offset = 0; 5536 payload.limit = 100; 5537 payload.companyId = variables.companyId; 5538 if (options.resource === 'properties') { 5539 payload.withProperties = { 5540 active: true 5541 }; 5542 ['agentIds', 'tag', 'propertyTypeId', 'statusIds', 'architectureStyle', 'lifestyle', 'salesPriceGTE', 'salesPriceLTE', 'leasePriceGTE', 'leasePriceLTE', 'livingSpaceSizeGTE', 'livingSpaceSizeLTE', 'bathCountGTE', 'bathCountLTE', 'bedroomCountGTE', 'bedroomCountLTE', 'bathCountGTE', 'bathCountLTE', 'bedroomCountGTE', 'bedroomCountLTE', 'featuredListing', 'leaseProperty', 'neighborhoodId', 'developmentId', 'openHouse'].forEach(function (field) { 5543 if (variables[field] !== undefined && variables[field] !== null) { 5544 payload.withProperties[field] = variables[field]; 5545 } 5546 }); 5547 } 5548 if (options.resource === 'posts') { 5549 payload.withBlogPosts = { 5550 active: true 5551 }; 5552 ['search', 'postStatusId', 'featured', 'categoryId', 'categoryIds', 'neighborhoodId', 'slug'].forEach(function (field) { 5553 if (variables[field] !== undefined && variables[field] !== null) { 5554 payload.withBlogPosts[field] = variables[field]; 5555 } 5556 }); 5557 } 5558 5559 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 5560 if (useRouter) { 5561 payload = window.luxuryPresence.routerApi.transformVariables('neighborhoods', payload); 5562 } 5563 superagent.post(apiUrl(useRouter) + '/graphql').withCredentials().send({ 5564 query: gqlQuery, 5565 variables: payload 5566 }).then(function (res) { 5567 var value = res.body.data && res.body.data.neighborhoods || {}; 5568 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 5569 var items = useRouter ? window.luxuryPresence.routerApi.transformPage(value).items : value || []; 5570 done(items, items.length); 5571 }); 5572 } 5573 function fetchPostCategories(done) { 5574 var featured = options.resource === 'posts' && !!variables.featured; 5575 var useRouter = auxUsesRouter('postCategories'); 5576 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. Only the 5577 // selection set differs ({ items {...} } on the router). 5578 var selection = 'id, name, publishedCount, featuredPublishedCount'; 5579 var gqlQuery = 'query ($companyId: String, $offset: Int, $limit: Int) {' + 'postCategories (companyId: $companyId, offset: $offset, limit: $limit ' + (featured ? ' withFeaturedPublishedOnly: true' : ' withPublishedOnly: true') + ') {' + (useRouter ? 'items {' + selection + '}' : selection) + '}}'; 5580 var payload = {}; 5581 payload.offset = 0; 5582 payload.limit = 100; 5583 payload.companyId = variables.companyId; 5584 superagent.post(apiUrl(useRouter) + '/graphql').withCredentials().send({ 5585 query: gqlQuery, 5586 variables: payload 5587 }).then(function (res) { 5588 var value = res.body.data && res.body.data.postCategories || {}; 5589 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 5590 var items = useRouter ? window.luxuryPresence.routerApi.transformPage(value).items : value || []; 5591 done(items.map(function (item) { 5592 item.count = featured ? item.featuredPublishedCount : item.publishedCount; 5593 return item; 5594 }), items.length); 5595 }); 5596 } 5597 function fetchOffices(done) { 5598 var useRouter = auxUsesRouter('offices'); 5599 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. Only the 5600 // selection set differs ({ items {...} } on the router). 5601 var selection = 'id, name, tags'; 5602 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired. The two 5603 // APIs differ in more than the items wrapper: federated offices takes 5604 // companyId: ID! (legacy gateway: String), so each branch builds its whole doc. 5605 var gqlQuery = useRouter ? 'query ($companyId: ID!, $offset: Int, $limit: Int) {' + 'offices (companyId: $companyId, offset: $offset, limit: $limit) {' + 'items {' + selection + '}}}' : 'query ($companyId: String, $offset: Int, $limit: Int) {' + 'offices (companyId: $companyId, offset: $offset, limit: $limit) {' + selection + '}}'; 5606 var payload = { 5607 offset: 0, 5608 limit: 100, 5609 companyId: variables.companyId 5610 }; 5611 5612 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 5613 if (useRouter) { 5614 payload = window.luxuryPresence.routerApi.transformVariables('office
5614s', payload); 5615 } 5616 superagent.post(apiUrl(useRouter) + '/graphql').withCredentials().send({ 5617 query: gqlQuery, 5618 variables: payload 5619 }).then(function (res) { 5620 var value = res.body.data && res.body.data.offices || {}; 5621 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 5622 var items = useRouter ? window.luxuryPresence.routerApi.transformPage(value).items : value || []; 5623 done(items, items.length); 5624 }); 5625 } 5626 5627 // ROUTER-CLEANUP: no rentalRates field on the federated router â legacy only. 5628 function fetchAllRentalRates(done) { 5629 var url = options.url || window.luxuryPresence.defaults.apiGatewayUrl; 5630 var gqlQuery = 'query ($companyId: String, $offset: Int, $limit: Int) {' + 'rentalRates (companyId: $companyId, offset: $offset, limit: $limit) {rentalRateId, label}}'; 5631 var payload = { 5632 offset: 0, 5633 limit: 100, 5634 companyId: variables.companyId 5635 }; 5636 superagent.post(url + '/graphql').withCredentials().send({ 5637 query: gqlQuery, 5638 variables: payload 5639 }).then(function (res) { 5640 var items = res.body.data && res.body.data.rentalRates || []; 5641 done(items, items.length); 5642 }).catch(function (err) { 5643 console.error('Error fetching rental rates:', err); 5644 done([], 0); 5645 }); 5646 } 5647 function fetchData(params, done) { 5648 var resource = options.resource; 5649 var gqlQuery = options.query || window.luxuryPresence.defaults.gql[resource]; 5650 var payload = {}; 5651 try { 5652 payload = JSON.parse(JSON.stringify(variables)); 5653 } catch (e) { 5654 Object.keys(variables).forEach(function (variableName) { 5655 payload[variableName] = variables[variableName]; 5656 }); 5657 } 5658 payload.offset = (params.page - 1) * pageSize + offset; 5659 payload.limit = pageSize; 5660 payload.companyId = options.companyId; 5661 searchFormParams.forEach(function (formParam) { 5662 var val = params[formParam.formKey || formParam.param]; 5663 if (val !== null && val !== undefined) { 5664 objSet(payload, formParam.param, val); 5665 } 5666 }); 5667 5668 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 5669 if (options.useRouterApi) { 5670 payload = window.luxuryPresence.routerApi.transformVariables(resource, payload); 5671 } 5672 5673 // TODO: Disabled loading due to jarring effect 5674 // dataContainer.html('Loading...'); 5675 superagent.post(apiUrl(options.useRouterApi) + '/graphql').withCredentials().send({ 5676 query: gqlQuery, 5677 variables: payload 5678 }).then(function (res) { 5679 if (res.body.errors) { 5680 done(res.body.errors); 5681 return; 5682 } 5683 var data = res.body.data || {}; 5684 // ROUTER-CLEANUP: keep router branch, drop legacy when API retired 5685 var resources; 5686 var resourceCount; 5687 if (options.useRouterApi) { 5688 var page = window.luxuryPresence.routerApi.transformPage(data[resource]); 5689 resources = window.luxuryPresence.routerApi.transformResponse(resource, page.items); 5690 resourceCount = page.count; 5691 } else { 5692 resources = data[resource] || []; 5693 resourceCount = data[resource + 'Count'] && data[resource + 'Count'].count ? data[resource + 'Count'].count : 0; 5694 } 5695 const finish = function (items) { 5696 if (resource === 'properties' && propertyPlaceholderImage?.id) { 5697 items = items.map(item => { 5698 if (item.media?.length === 0) { 5699 return Object.assign(item, { 5700 media: [propertyPlaceholderImage] 5701 }); 5702 } 5703 return item; 5704 }); 5705 } 5706 done(null, items, resourceCount); 5707 }; 5708 5709 // ROUTER-CLEANUP: client half of PLAT-4073 â resolve the requested 5710 // disclaimers before rendering; older SDKs skip (keys stay unset). 5711 if (options.useRouterApi && resource === 'properties' && options.routerPropertyDisclaimers && options.routerPropertyDisclaimers.length && window.luxuryPresence.routerApi && typeof window.luxuryPresence.routerApi.applyPropertyDisclaimers === 'function') { 5712 window.luxuryPresence.routerApi.applyPropertyDisclaimers(resources, options.routerPropertyDisclaimers).then(finish); 5713 return; 5714 } 5715 finish(resources); 5716 }); 5717 } 5718 function getTotalPage() { 5719 return Math.ceil(totalNumber / pageSize); 5720 } 5721 function renderPaginationList() { 5722 var totalPages = getTotalPage(); 5723 var rangeStart = searchParams.page - pageRange; 5724 var rangeEnd = searchParams.page + pageRange; 5725 if (rangeEnd > totalPages) { 5726 rangeEnd = totalPages; 5727 rangeStart = totalPages - pageRange * 2; 5728 rangeStart = rangeStart < 1 ? 1 : rangeStart; 5729 } 5730 if (rangeStart <= 1) { 5731 rangeStart = 1; 5732 rangeEnd = Math.min(pageRange * 2 + 1, totalPages); 5733 } 5734 5735 // Making sure that 1 more page button is shown in edge positions 5736 if (pageRange === 0) { 5737 if (searchParams.page === totalPages) { 5738 rangeStart = totalPages <= 1 ? 1 : totalPages - 1; 5739 } 5740 if (searchParams.page === 1) { 5741 rangeEnd = Math.min(2, totalPages); 5742 } 5743 } 5744 5745 // Render pagination list 5746 if (mode === 'NUMBERED_PAGINATION') { 5747 el.innerHTML = generateHTML({ 5748 currentPage: searchParams.page, 5749 pageRange: pageRange, 5750 rangeStart: rangeStart, 5751 rangeEnd: rangeEnd 5752 }); 5753 if (totalPages < 2 && hidePaginationOnFirstPage) { 5754 container.style.display = 'none'; 5755 } else { 5756 container.style.display = ''; 5757 } 5758 } else if (mode === 'LOAD_MORE_BUTTON') { 5759 if (searchParams.page >= totalPages) {
5760 loadMoreButton.style.display = 'none'; 5761 } else { 5762 loadMoreButton.style.display = ''; 5763 } 5764 } 5765 } 5766 function render(data) { 5767 renderPaginationList(); 5768 5769 // Render new content with handlebars 5770 var html = ''; 5771 if (mode === 'LOAD_MORE_BUTTON' && searchParams.page > 1) { 5772 // If using load more, append search results to existing results 5773 html = dataContainer.innerHTML; 5774 } 5775 for (var i = 0; i < data.length; i++) { 5776 var itemData = recursivelyParse(data[i]); 5777 itemData.sectionIndex = options.sectionIndex; 5778 itemData.renderOptions = options.renderOptions; 5779 html += template(itemData); 5780 } 5781 dataContainer.innerHTML = html; 5782 5783 // Scroll Top 5784 if (!firstRender && mode === 'NUMBERED_PAGINATION' && (!renderBySearch || !options.skipScrollOnSearch)) { 5785 // Only animate to the top if we replace dataContainer (numbered pagination) 5786 setTimeout(() => { 5787 const scrollTargetOffsetTop = scrollTarget.getBoundingClientRect().top + window.scrollY - scrollOffset; 5788 window.scrollTo({ 5789 top: scrollTargetOffsetTop, 5790 behavior: 'smooth' 5791 }); 5792 }, 250); 5793 } 5794 return true; 5795 } 5796 function generateHTML(args) { 5797 const totalPages = getTotalPage(); 5798 const { 5799 rangeStart, 5800 rangeEnd 5801 } = args; 5802 const makeLnk = page => window.luxuryPresence.pagination.serializeParams(searchFormParams, sectionDomId, { 5803 ...searchParams, 5804 page 5805 }); 5806 let html = ''; 5807 if (showPrevious || showPageNumbers || showNext) { 5808 html += '<div class="paginationjs-pages"><ul>'; 5809 5810 // Previous button 5811 if (showPrevious) { 5812 if (searchParams.page <= 1) { 5813 html += `<li class="${classPrefix}-prev ${disableClassName}"><a>${prevText}</a></li>`; 5814 } else { 5815 html += `<li class="${classPrefix}-prev J-paginationjs-previous" data-num="${searchParams.page - 1}" title="Previous page"><a href="${makeLnk(searchParams.page - 1)}">${prevText}</a></li>`; 5816 } 5817 } 5818 5819 // Pages 5820 if (showPageNumbers) { 5821 if (rangeStart <= 3) { 5822 for (let i = 1; i < rangeStart; i++) { 5823 html += `<li class="${classPrefix}-page J-paginationjs-page ${i === searchParams.page ? activeClassName : ''}" data-num="${i}"><a ${i === searchParams.page ? '' : `href="${makeLnk(i)}"`}>${i}</a></li>`; 5824 } 5825 } else { 5826 if (showFirstOnEllipsisShow) { 5827 html += `<li class="${classPrefix}-page ${classPrefix}-first J-paginationjs-page" data-num="1"><a href="${makeLnk(1)}">1</a></li>`; 5828 } 5829 html += `<li class="${classPrefix}-ellipsis ${disableClassName}"><a>${ellipsisText}</a></li>`; 5830 } 5831 for (let i = rangeStart; i <= rangeEnd; i++) { 5832 html += `<li class="${classPrefix}-page J-paginationjs-page ${i === searchParams.page ? activeClassName : ''}" data-num="${i}"><a ${i === searchParams.page ? '' : `href="${makeLnk(i)}"`}>${i}</a></li>`; 5833 } 5834 if (rangeEnd < totalPages - 2) { 5835 html += `<li class="${classPrefix}-ellipsis ${disableClassName}"><a>${ellipsisText}</a></li>`; 5836 if (showLastOnEllipsisShow) { 5837 html += `<li class="${classPrefix}-page ${classPrefix}-last J-paginationjs-page" data-num="${totalPages}"><a href="${makeLnk(totalPages)}">${totalPages}</a></li>`; 5838 } 5839 } else { 5840 for (let i = rangeEnd + 1; i <= totalPages; i++) { 5841 html += `<li class="${classPrefix}-page J-paginationjs-page" data-num="${i}"><a href="${makeLnk(i)}">${i}</a></li>`; 5842 } 5843 } 5844 } 5845 5846 // Next button 5847 if (showNext) { 5848 if (searchParams.page >= totalPages) { 5849 html += `<li class="${classPrefix}-next ${disableClassName}"><a>${nextText}</a></li>`; 5850 } else { 5851 html += `<li class="${classPrefix}-next J-paginationjs-next" data-num="${searchParams.page + 1}" title="Next page"><a href="${makeLnk(searchParams.page + 1)}">${nextText}</a></li>`; 5852 } 5853 } 5854 html += '</ul></div>'; 5855 } 5856 return html; 5857 } 5858 function go(newSearchParams, callback, restorationVisit) { 5859 if (disabled) return; 5860 var goToPageNumber = newSearchParams.page; 5861 5862 // Page number is out of bounds 5863 if (!goToPageNumber || goToPageNumber < 1) return; 5864 var totalPage = getTotalPage(); 5865 5866 // Page number is out of bounds 5867 if (!restorationVisit && totalNumber > 0) { 5868 if (goToPageNumber > totalPage) return; 5869 } 5870 if (!options.skipSerialization && (mode === 'NUMBERED_PAGINATION' || searchContainer)) {
5871 var newURL = window.luxuryPresence.pagination.serializeParams(searchFormParams, sectionDomId, { 5872 ...newSearchParams, 5873 page: goToPageNumber !== 1 && mode === 'NUMBERED_PAGINATION' ? newSearchParams.page : null 5874 }); 5875 if (!areQueryParamsEqual(newSearchParams, searchParams) && !restorationVisit) { 5876 window.history.pushState({}, '', window.luxuryPresence.getPath(newURL, { 5877 queryString: true 5878 })); 5879 } 5880 } 5881 5882 // Fetch and update page 5883 fetchData(newSearchParams, renderWithData); 5884 disabled = true; 5885 function renderWithData(err, data, count) { 5886 if (err) { 5887 dataContainer.dispatchEvent(new Event('error')); 5888 } else { 5889 searchParams = { 5890 ...newSearchParams 5891 }; 5892 totalNumber = count - offset; 5893 if (data.length === 0) { 5894 dataContainer.dispatchEvent(new Event('no-data')); 5895 } else { 5896 dataContainer.dispatchEvent(new Event('data')); 5897 } 5898 render(data); 5899 firstRender = false; 5900 } 5901 disabled = false; 5902 renderBySearch = false; 5903 } 5904 } 5905 function areQueryParamsEqual(first, second) { 5906 var differ = Object.keys(first).find(function (key) { 5907 return first[key] !== undefined && first[key] !== null && first[key] !== second[key]; 5908 }); 5909 if (differ) { 5910 return false; 5911 } 5912 differ = Object.keys(second).find(function (key) { 5913 return second[key] !== undefined && second[key] !== null && second[key] !== first[key]; 5914 }); 5915 return !differ; 5916 } 5917 function next(callback) { 5918 go({ 5919 ...searchParams, 5920 page: searchParams.page + 1 5921 }, callback); 5922 } 5923 function previous(callback) { 5924 go({ 5925 ...searchParams, 5926 page: searchParams.page - 1 5927 }, callback); 5928 } 5929 function refresh(callback) { 5930 go(searchParams, callback); 5931 } 5932 function update(params, callback) { 5933 renderBySearch = true; 5934 go(params, callback); 5935 } 5936 function observer() { 5937 if (searchContainer) { 5938 searchContainer.addEventListener('search', function (event, newSearchParams) { 5939 newSearchParams = event.detail || newSearchParams; 5940 update({ 5941 ...searchParams, 5942 ...newSearchParams, 5943 page: 1 5944 }); 5945 }); 5946 searchContainer.addEventListener('clear-search', function () { 5947 const defaultSearchParams = { 5948 ...DefaultSearchParams 5949 }; 5950 const isCurrentSearchFormStateDefault = areQueryParamsEqual({ 5951 ...defaultSearchParams, 5952 page: null 5953 }, { 5954 ...searchParams, 5955 page: null 5956 }); 5957 5958 // if mode is LOAD_MORE_BUTTON we should't make anything on clear 5959 // when search form have default state 5960 if (isCurrentSearchFormStateDefault && mode !== 'NUMBERED_PAGINATION') { 5961 return; 5962 } 5963 5964 // if someone initially go to some page and click 'Clear' on search from 5965 // we should't navigate to first page. We should preserve page value 5966 if (isCurrentSearchFormStateDefault) { 5967 defaultSearchParams.page = searchParams.page; 5968 } 5969 syncSearchFormState(defaultSearchParams); 5970 update(defaultSearchParams); 5971 }); 5972 } 5973 if (mode === 'LOAD_MORE_BUTTON') { 5974 loadMoreButton.addEventListener('click', function (event) { 5975 go({ 5976 ...searchParams, 5977 page: searchParams.page + 1 5978 }); 5979 return false; 5980 }); 5981 } 5982 if (mode === 'LOAD_MORE_BUTTON' || mode === 'BUTTONLESS_PAGINATION') { 5983 // Do initial render 5984 go(Object.assign({}, searchParams, { 5985 page: 1 5986 })); 5987 return; 5988 } 5989 if (mode === 'NUMBERED_PAGINATION') { 5990 // Go to specified page number 5991 container.addEventListener(eventPrefix + 'go', function (event) { 5992 let { 5993 pageNumber, 5994 done 5995 } = event.detail || {}; 5996 pageNumber = parseInt(pageNumber, 10); 5997 if (!pageNumber) { 5998 return; 5999 } 6000 go({ 6001 ...searchParams, 6002 page: pageNumber 6003 }, done); 6004 }); 6005 6006 // Page number button click 6007 el.addEventListener('click', function (event) { 6008 let clickTarget = event.target; 6009 let current = clickTarget.closest('.J-paginationjs-page, .J-paginationjs-previous, .J-paginationjs-next'); 6010 let pageNumber = current?.getAttribute('data-num'); 6011 if (!pageNumber || current.classList.contains(disableClassName) || current.classList.contains(activeClassName)) { 6012 return; 6013 } else { 6014 go({ 6015 ...searchParams, 6016 page: parseInt(pageNumber, 10) 6017 }); 6018 } 6019 event.preventDefault(); 6020 }); 6021 6022 // Whether to load the default page 6023 var defaultPageNumber = searchParams.page; 6024 if (triggerPagingOnInit) {
6025 container.dispatchEvent(new CustomEvent(eventPrefix + 'go', { 6026 detail: { 6027 pageNumber: defaultPageNumber 6028 } 6029 })); 6030 } 6031 } 6032 window.addEventListener('popstate', function (event) { 6033 var newParams = Object.assign({}, DefaultSearchParams, window.luxuryPresence.pagination.deserializeParams(searchFormParams, sectionDomId)); 6034 if (!areQueryParamsEqual(newParams, searchParams)) { 6035 go(newParams, null, true); 6036 if (searchContainer) { 6037 syncSearchFormState(newParams); 6038 } 6039 } 6040 }); 6041 } 6042 function replaceVariables(template, variables) { 6043 var formattedString; 6044 for (var key in variables) { 6045 var value = variables[key]; 6046 var regexp = new RegExp('<%=\\s*' + key + '\\s*%>', 'img'); 6047 formattedString = (formattedString || template).replace(regexp, value); 6048 } 6049 return formattedString; 6050 } 6051 function isTextEditorValue(obj) { 6052 return 'raw' in obj || 'gjs' in obj; 6053 } 6054 function getTextEditorValue(obj) { 6055 if (!obj.html) { 6056 return ''; 6057 } 6058 var data = obj.html; 6059 var css = (obj.raw || obj.gjs || {}).css; 6060 if (css) { 6061 data = data + '<style>' + css + '</style>'; 6062 } 6063 return data; 6064 } 6065 6066 /** 6067 * check rendered resources for html and raw properties that could indicate if resource is from an advanced text editor. 6068 * strips out raw proprties and returns only HTML if it exists. 6069 * @param {Object} resources a collection retrieved from the database 6070 * @return {Object} the newly modified object. 6071 */ 6072 function recursivelyParse(resources) { 6073 forEach(resources, function (value, key) { 6074 if (!value) { 6075 return; 6076 } 6077 if (value instanceof Object) { 6078 if (isTextEditorValue(value)) { 6079 resources[key] = getTextEditorValue(value); 6080 return; 6081 } else { 6082 return recursivelyParse(value); 6083 } 6084 } 6085 try { 6086 var parsedData = JSON.parse(value); 6087 if (isTextEditorValue(parsedData)) { 6088 resources[key] = getTextEditorValue(parsedData); 6089 } 6090 } catch (e) { 6091 // do nothing if we failed to parse value as JSON 6092 } 6093 }); 6094 return resources; 6095 } 6096 function forEach(collection, iteratee) { 6097 var func = Array.isArray(collection) ? arrayEach : baseFor; 6098 return func(collection, iteratee); 6099 } 6100 function baseFor(object, iteratee) { 6101 if (!object) { 6102 return; 6103 } 6104 var iterable = Object(object); 6105 var props = Object.keys(object); 6106 var length = props.length; 6107 var index = -1; 6108 while (length--) { 6109 var key = props[++index]; 6110 if (iteratee(iterable[key], key, iterable) === false) { 6111 break; 6112 } 6113 } 6114 return object; 6115 } 6116 function objSet(obj, path, value) { 6117 const pathArray = Array.isArray(path) ? path : path.match(/([^[.\]])+/g); 6118 pathArray.reduce((acc, key, i) => { 6119 if (acc[key] === undefined) acc[key] = {}; 6120 if (i === pathArray.length - 1) acc[key] = value; 6121 return acc[key]; 6122 }, obj); 6123 } 6124 function arrayEach(array, iteratee) { 6125 var index = -1; 6126 var length = array.length; 6127 while (++index < length) { 6128 if (iteratee(array[index], index, array) === false) { 6129 break; 6130 } 6131 } 6132 return array; 6133 } 6134 function selectPageRangeMode(e) { 6135 pageRange = e.matches ? mobilePageRange : desktopPageRange; 6136 renderPaginationList(); 6137 } 6138 paginationMql.addEventListener('change', selectPageRangeMode); 6139})('section-f0bc03e3-e280-4c80-b233-d55eb7df478e', JSON.parse("{\"pageSize\":\"24\",\"resource\":\"properties\",\"pageRange\":0,\"variables\":{\"limit\":24,\"order\":\"salesPrice\",\"offset\":0,\"sortDir\":\"DESC\",\"statusId\":\"{{variables.statusId}}\",\"companyId\":\"c3076ecb-c2d7-457b-a426-bcf036133f1f\",\"categoryId\":\"{{pageElement.categoryId}}\",\"sort\":\"salesPrice\",\"statusIds\":[\"b0e88b38-7437-438d-a6fd-b13f135e1683\"],\"propertyIds\":[\"8bf71a0c-3ff9-404c-8842-268a1367d602\",\"0ace1ac7-0e53-440a-9e14-787c340f4915\",\"1146c6fc-5fc5-403a-ad09-716d08b9ccc5\",\"896f5b99-b0ee-451a-9a6f-407130dffe00\",\"a8212a3f-ded0-47a0-9b25-d36a5e305d8d\",\"033065ee-863c-4d14-a0af-4b6336ddc5ef\",\"9cce0ba6-b894-462a-9ba6-8d1a43cea0e9\",\"a3a02081-1edf-4b0f-8b84-b4281292fb0a\",\"b35f9aac-10f8-4cb7-b3d2-77bda2807b9b\",\"4e4ff6f1-1291-4dc6-be15-c948e28125c1\",\"fde207f
61390-67de-496f-9f9a-78a962417d69\",\"fcc02dc6-6cc1-47b5-860b-b18396d08af4\",\"04692883-7857-4a7a-90a4-038ad1ed5e45\",\"f8c6457e-b7fc-4bd5-8177-714bcdca3aaa\",\"9edcb6b4-84dd-4a7e-a858-38d5bc9c8789\",\"571f9497-240d-4f45-8b74-fbb8737ca632\",\"f2ea3c84-332e-4a33-8081-bfb3cf089e67\",\"4a24724e-e98a-40dd-bf0d-819b6d4e0fb1\",\"52332c59-2e51-4c07-ac7e-10082828fc76\",\"922a566c-0a1a-4e46-a533-51fea05da75b\",\"56c18fe1-9ac6-4cda-80bf-47a8ff1d6ee5\",\"e6ba757c-a3d0-4a61-9b13-13927f7bf380\",\"3ec26aba-8f88-401f-a48e-f2cdc3c7af35\",\"47a6395a-4f09-4cbc-99a0-27c7423f4c02\",\"19c7dfc1-a4c3-478d-8e9f-169bd0c1ddd8\",\"cd36507a-46c6-4d08-ae5d-5acaf0988cc7\",\"a91f1984-f6d3-4946-8ef5-53a986bce631\",\"c45e6905-4d85-423c-a931-9fa40b6e82e4\",\"79c8e74d-9cce-4774-8294-a4c13721340d\",\"07a8ebcc-23b0-4afd-9313-ae7f558093f3\",\"00cb54ee-6c00-47a4-bfd2-a24d29575c8d\",\"c0f72676-6138-4179-8a1b-60748a717e71\",\"d50e081d-d27d-470b-8729-91d0f66b0522\",\"3337bcf5-1fc1-4a73-9ba5-c490d7c49d40\",\"12ee30ff-e1fd-4f1b-97d9-0846c3a8e734\",\"a76bd4f6-3566-4cba-9a35-47f3fd98b64f\",\"6780ca69-9e27-4af0-a94b-147ccf256efe\",\"76191530-8ccb-4ff9-9c09-5fbfde3b098a\",\"8f33c8fa-e237-4851-9488-86b75775eda5\",\"c276706b-74b8-4175-8b6e-bc6f627f18fd\"],\"advancedFilters\":{\"query\":{\"statusIds\":{\"in\":[\"b0e88b38-7437-438d-a6fd-b13f135e1683\"]}}},\"websiteId\":\"ff06f655-0c64-45c8-9c55-e8468b4e5303\"},\"searchFormParams\":[{\"param\":\"neighborhoodId\",\"urlKey\":\"neighborhood\"},{\"param\":\"search\",\"urlKey\":\"search\"},{\"type\":\"int\",\"param\":\"salesPriceGTE\",\"urlKey\":\"pricemin\",\"formKey\":\"priceMin\"},{\"type\":\"int\",\"param\":\"salesPriceLTE\",\"urlKey\":\"pricemax\",\"formKey\":\"priceMax\"},{\"type\":\"int\",\"param\":\"leasePriceGTE\",\"urlKey\":\"lpricemin\",\"formKey\":\"lpriceMin\"},{\"type\":\"int\",\"param\":\"leasePriceLTE\",\"urlKey\":\"lpricemax\",\"formKey\":\"lpriceMax\"},{\"type\":\"int\",\"param\":\"livingSpaceSizeGTE\",\"urlKey\":\"areamin\",\"formKey\":\"areaMin\"},{\"type\":\"int\",\"param\":\"livingSpaceSizeLTE\",\"urlKey\":\"areamax\",\"formKey\":\"areaMax\"}],\"resourceQueryOption\":\"query\",\"hidePaginationOnFirstPage\":true,\"query\":\"query Properties($agentIds: [ID!], $teamIds: [ID!], $neighborhoodIds: [ID!], $officeIds: [ID!], $propertyId: ID, $companyId: String, $networkId: String, $network: Boolean, $statusId: String, $propertyIds: [ID!], $prioritizeIds: Boolean, $statusIds: [String!], $excludeStatusId: [String!], $neighborhoodId: String, $addressState: [String!], $addressCity: [String!], $relatedNeighborhoodPropertyId: String, $developmentId: String, $featuredListing: Boolean, $leaseProperty: Boolean, $search: String, $searchTermMode: SearchTermModeEnum, $globalProperty: Boolean, $archived: Boolean, $salesPriceGTE: Float, $salesPriceLTE: Float, $leasePriceGTE: Float, $leasePriceLTE: Float, $livingSpaceSizeGTE: Float, $livingSpaceSizeLTE: Float, $bathCountGTE: Float, $bathCountLTE: Float, $bedroomCountGTE: Float, $bedroomCountLTE: Float, $architectureStyle: String, $lifestyle: String, $propertyTypeId: String, $propertyTypeIds: [String!], $spaceTypeIds: [ID!], $tag: String, $backfillMLSResults: Boolean, $displayMLSListings: String, $hostname: String, $websiteId: ID, $backfillProviders: [String!], $backfillMLSListingIds: [String!], $backfillMLSAgentIds: [String!], $backfillMLSOfficeIds: [String!], $backfillBoundary: JSON, $openHouse: Boolean, $withGeo: Boolean, $advancedFilters: JSON, $seasonalPriceId: ID, $offset: Int, $limit: Int, $sort: String, $sortDir: SortDirectionEnum) {\\n properties(\\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 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 slug\\n name\\n status\\n priceUponRequest\\n currency\\n salesPrice\\n reducedPrice\\n isPasswordProtected\\n leaseProperty\\n leasePrice\\n leasePeriod\\n privateAddress\\n fromMLS\\n mlsId\\n mlsLogo\\n mlsAttribution\\n openHouseHours\\n fullAddress\\n lotAreaSize\\n lotAreaUnits\\n media {\\n smallUrl\\n mediumUrl\\n largeUrl\\n xLargeUrl\\n xxLargeUrl\\n width\\n height\\n altTagText\\n }\\n bedroomCount\\n bathCount\\n soldDate\\n livingSpaceSize\\n livingSpaceUnits\\n types {\\n id\\n name\\n }\\n }\\n propertiesCount(\\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 count\\n }\\n}\",\"routerPropertyDisclaimers\":[\"mlsAttribution\",\"mlsLogo\"],\"companyId\":\"c3076ecb-c2d7-457b-a426-bcf036133f1f\",\"usePageResource\":false,\"sectionIndex\":3,\"useRouterApi\":false,\"routerApiAux\":{\"testimonials\":true,\"agents\":false,\"neighborhoods\":false,\"developments\":false,\"properties\":false,\"posts\":true,\"pressReleases\":true,\"offices\":true,\"teams\":true,\"pois\":true,\"postCategories\":true}}")); 6140} catch(e) { 6141console.log(e); 6142} 6143 try { 6144(function init(sectionDomId) { 6145 $(document).on("click", '#' + sectionDomId + ' .property-list__share .btn', function () { 6146 if ($(this).parent().hasClass('property-list__share--opened')) { 6147 $(this).parent().removeClass('property-list__share--opened'); 6148 } else { 6149 $('#' + sectionDomId + ' .property-list__share').removeClass('property-list__share--opened'); 6150 $(this).parent().addClass('property-list__share--opened'); 6151 } 6152 }); 6153 const emptyResultElement = $('#' + sectionDomId + ' .empty-result'); 6154 const searchContainer = $('#' + sectionDomId + ' .search-container'); 6155 const dataContainer = $('#' + sectionDomId + ' .data-container'); 6156 const paginationContainer = $(`#${sectionDomId} .pagination-container`); 6157 const priceSlider = searchContainer.find('input[name="price-slider"]');
6158 const areaSlider = searchContainer.find('input[name="area-slider"]'); 6159 const neighborhoodSelect = searchContainer.find('select[name="neighborhood-select"]'); 6160 const searchInput = searchContainer.find('input[name="search-input"]'); 6161 const clearBtn = searchContainer.find('.clear'); 6162 const priceMin = parseInt(priceSlider.attr('data-min')); 6163 const priceMax = parseInt(priceSlider.attr('data-max')); 6164 const areaMin = parseInt(areaSlider.attr('data-min')); 6165 const areaMax = parseInt(areaSlider.attr('data-max')); 6166 const rangeSliderInitialized = $(`#${sectionDomId} .search-item .irs`).length >= 1; 6167 const filterLease = searchContainer.data('filter-lease'); 6168 function onSearch() { 6169 const params = window.luxuryPresence.getSearchFormValues({ 6170 queryElement: searchInput[0], 6171 priceSliderElement: priceSlider[0], 6172 areaSliderElement: areaSlider[0], 6173 neighborhoodSelect: neighborhoodSelect[0] 6174 }); 6175 if (filterLease) { 6176 params.lpriceMin = params.priceMin; 6177 params.lpriceMax = params.priceMax; 6178 delete params.priceMin; 6179 delete params.priceMax; 6180 } 6181 if (!areaSlider.attr('data-min')) params.areaMin = null; 6182 if (!areaSlider.attr('data-max')) params.areaMax = null; 6183 searchContainer[0]?.dispatchEvent(new CustomEvent('search', { 6184 detail: params 6185 })); 6186 } 6187 searchContainer.on('neighborhoods-data', function (ev, neighborhoods) { 6188 neighborhoods = ev.detail || neighborhoods; 6189 neighborhoodSelect.append(neighborhoods.data.map(item => `<option value="${item.value}">${item.label}</option>`).join('\n')); 6190 }); 6191 searchContainer.on('sync', function (ev, params) { 6192 params = ev.detail || params; 6193 searchInput.val(params.search); 6194 neighborhoodSelect.val(params.neighborhoodId); 6195 priceSlider.data('ionRangeSlider').update({ 6196 from: filterLease ? params.lpriceMin : params.priceMin, 6197 to: filterLease ? params.lpriceMax : params.priceMax 6198 }); 6199 areaSlider.data('ionRangeSlider').update({ 6200 from: params.areaMin, 6201 to: params.areaMax 6202 }); 6203 }); 6204 dataContainer.on('no-data', function () { 6205 emptyResultElement.show(); 6206 }); 6207 dataContainer.on('data', function () { 6208 emptyResultElement.hide(); 6209 }); 6210 clearBtn.click(function () { 6211 searchContainer[0]?.dispatchEvent(new Event('clear-search')); 6212 }); 6213 searchInput.on('input', window.luxuryPresence.debounce(onSearch, 1000)); 6214 neighborhoodSelect.change(onSearch); 6215 if (rangeSliderInitialized) { 6216 if (!priceSlider.destroy) { 6217 $(`#${sectionDomId} .search-item.price >.irs`).remove(); 6218 initPriceSlider(); 6219 } 6220 if (!areaSlider.destroy) { 6221 $(`#${sectionDomId} .search-item.area >.irs`).remove(); 6222 initAreaSlider(); 6223 } 6224 } else { 6225 initPriceSlider(); 6226 initAreaSlider(); 6227 } 6228 function initPriceSlider() { 6229 priceSlider.ionRangeSlider({ 6230 type: "double", 6231 skin: 'round', 6232 grid: false, 6233 force_edges: false, 6234 hide_min_max: false, 6235 hide_from_to: false, 6236 block: false, 6237 prettify: function (val) { 6238 return window.luxuryPresence.formatSliderPriceRange(val, { 6239 min: priceMin, 6240 max: priceMax 6241 }, "$", { 6242 lowPrefix: "<", 6243 highSuffix: "+" 6244 }); 6245 }, 6246 onFinish: onSearch 6247 }); 6248 } 6249 function initAreaSlider() { 6250 areaSlider.ionRangeSlider({ 6251 type: "double", 6252 skin: 'round', 6253 grid: false, 6254 force_edges: false, 6255 hide_min_max: false, 6256 hide_from_to: false, 6257 block: false, 6258 prettify: function (val) { 6259 return window.luxuryPresence.formatSliderAreaRange(val, { 6260 min: areaMin, 6261 max: areaMax 6262 }, "sqft", { 6263 lowPrefix: "<", 6264 highSuffix: "+" 6265 }); 6266 }, 6267 onFinish: onSearch 6268 }); 6269 } 6270})('section-f0bc03e3-e280-4c80-b233-d55eb7df478e', JSON.parse("{\"resource\":\"properties\",\"useRouterApi\":false,\"companyId\":\"c3076ecb-c2d7-457b-a426-bcf036133f1f\",\"usePageResource\":false,\"sectionIndex\":3,\"routerApiAux\":{\"testimonials\":true,\"agents\":false,\"neighborhoods\":false,\"developments\":false,\"properties\":false,\"posts\":true,\"pressReleases\":true,\"offices\":true,\"teams\":true,\"pois\":true,\"postCategories\":true}}")); 6271} catch(e) { 6272console.log(e); 6273} 6274 try { 6275(function init(sectionDomId, options) { 6276 let section = null; 6277 switch (sectionDomId) { 6278 case 'NAVBAR': 6279 section = document.querySelector('body > nav, #global-navbar'); 6280 break; 6281 case 'FOOTER': 6282 section = document.querySelector('body > footer, #global-footer'); 6283 break; 6284 case 'SIDEMENU': 6285 section = document.querySelector('body > div.sidemenu, #global-sidemenu'); 6286 break; 6287 case 'CONTACT':
6288 section = document.querySelector('#modal-global-contact-us'); 6289 break; 6290 case 'MOBILE_CONTACT': 6291 section = document.querySelector('body > div.mobile-contact-wrapper, #global-mobile-contact'); 6292 break; 6293 case 'SUBSCRIBE': 6294 // Subscribe Not Implemented 6295 section = null; 6296 break; 6297 case 'ACCOUNT': 6298 // Account Not Implemented 6299 section = null; 6300 break; 6301 default: 6302 section = document.querySelector('#' + sectionDomId); 6303 } 6304 if (!section) { 6305 return; 6306 } 6307 var url = window.luxuryPresence.defaults.routerUrl; 6308 var companyId = window.luxuryPresence.defaults.companyId; 6309 var limit = options.limit || 8; 6310 if (typeof limit === 'string') { 6311 limit = parseInt(limit, 10) || 8; // this NaN protection also filters out 0 - this is expected 6312 } 6313 var templateSelector = options.templateSelector || '.jsIGTemplate'; 6314 var containerSelector = options.containerSelector || '.jsIGContainer'; 6315 var hasDataClass = options.hasDataClass || 'has-data'; 6316 var hideActivateMessage = options.hasDataClass || false; 6317 var payload = { 6318 companyId: companyId, 6319 limit: limit 6320 }; 6321 if (options.resourceId && typeof options.resourceId === 'string' && !options.resourceId.match(/^{{.*}}$/)) { 6322 payload.resourceId = options.resourceId; 6323 // Federated enum values are uppercase (AGENT/TEAM); element configs carry lowercase 6324 payload.resource = String(options.resource || 'agent').toUpperCase(); 6325 payload.fallbackToNoResource = options.fallbackToNoResource === 'true' || options.fallbackToNoResource === true; 6326 } 6327 var query = 'query InstagramFeed (\n' + ' $companyId: ID!\n' + ' $instagramAuthorizationId: ID\n' + ' $username: String\n' + (payload.resourceId ? '$resource: InstagramContentAuthResourceEnum\n $resourceId: ID\n $fallbackToNoResource: Boolean' : '') + ' $limit: Int\n' + ') {\n' + ' instagramContentFeed (\n' + ' companyId: $companyId\n' + ' instagramAuthorizationId: $instagramAuthorizationId\n' + ' username: $username\n' + (payload.resourceId ? 'resource: $resource\n resourceId: $resourceId\n fallbackToNoResource: $fallbackToNoResource' : '') + ' limit: $limit\n' + ' ) {\n' + ' active\n' + ' feedUrl\n' + ' username\n' + ' items {\n' + ' id\n' + ' caption\n' + ' commentsCount\n' + ' likeCount\n' + ' mediaType\n' + ' mediaUrl\n' + ' permalink\n' + ' shortcode\n' + ' thumbnailUrl\n' + ' timestamp\n' + ' username\n' + ' }\n' + ' }\n' + '}\n'; 6328 var templateHTML = section.querySelector(templateSelector)?.innerHTML || ''; 6329 var template = Handlebars.compile(templateHTML); 6330 var container = section.querySelector(containerSelector); 6331 if (options.variables) { 6332 Object.keys(options.variables).forEach(function (key) { 6333 if (options.variables.hasOwnProperty(key) && (typeof options.variables[key] !== 'string' || !options.variables[key].match(/^{{.*}}$/))) { 6334 payload[key] = options.variables[key]; 6335 } 6336 }); 6337 } 6338 function getData() { 6339 var feed = { 6340 error: true 6341 }; 6342 if (payload.companyId == null || payload.companyId === '') { 6343 // instagramContentFeed requires companyId (ID!) â nothing to fetch without it. 6344 // Checked after the options.variables merge, which may override the default. 6345 // Deferred so element listeners (attached after this template runs) still receive it. 6346 setTimeout(function () { 6347 section.dispatchEvent(new CustomEvent('ig-data', { 6348 detail: feed 6349 })); 6350 }, 0); 6351 return; 6352 } 6353 superagent.post(url + '/graphql').send({ 6354 query: query, 6355 variables: payload 6356 }).then(res => { 6357 try { 6358 if (!res.body.errors) { 6359 feed = res.body.data.instagramContentFeed; 6360 if (!feed.active) { 6361 if (!hideActivateMessage && sectionDomId === 'section-temp' && container) { 6362 if (payload.resourceId) { 6363 container.innerHTML = '<div style="text-align: center">Instagram account is not connected to selected ' + payload.resource + '.<br /> Connect it on the ' + payload.resource + ' page</div>'; 6364 } else { 6365 container.innerHTML = '<div style="text-align: center">Instagram account is not connected.<br /> Connect it on <a href="/profile">Profile page</a></div>'; 6366 } 6367 } 6368 } else { 6369 if (feed.items.length) { 6370 if (hasDataClass) { 6371 section.classList.add(hasDataClass); 6372 } 6373 const feedName = feed.username; 6374 section.querySelectorAll('.jsIGLink').forEach(link => link.setAttribute('href', feed.feedUrl)); 6375 section.querySelectorAll('.jsIGName').forEach(name => { 6376 name.textContent = '@' + feedName; 6377 name.setAttribute('title', '@' + feedName); 6378 }); 6379 if (container && template) { 6380 container.innerHTML = template(feed); 6381 } 6382 } 6383 } 6384 } 6385 } catch (e) {} 6386 section.dispatchEvent(new CustomEvent('ig-data', { 6387 detail: feed 6388 })); 6389 }).catch(e => { 6390 console.log('err', e); 6391 section.dispatchEvent(new CustomEvent('ig-data', { 6392 detail: feed 6393 })); 6394 }); 6395 } 6396 getData(); 6397})('section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655', JSON.parse("{\"limit\":33,\"resource\":\"agent\",\"resourceId\":\"\",\"fallbackToNoResource\":\"true\",\"companyId\":\"c3076ecb-c2d7-457b-a426-bcf036133f1f\",\"usePageResource\":false,\"sectionIndex\":4,\"useRouterApi\":false,\"routerApiAux\":{\"testimonials\":true,\"agents\":false,\"neighborhoods\":false,\"developments\":false,\"properties\":false,\"posts\":true,\"pressReleases\":true,\"offices\":true,\"teams\":true,\"pois\":true,\"postCategories\":true}}")); 6398} catch(e) { 6399console.log(e); 6400} 6401 try { 6402(function init(sectionDomId) { 6403 const $section = $('#' + sectionDomId); 6404 var templateHTML = $section.find('.jsIGItem').html(); 6405 var itemTemplate = templateHTML && Handlebars.compile(templateHTML); 6406 const $container = $section.find('.ig-feed-feed'); 6407 const $topPrev = $section.find('.top-nav-prev'); 6408 const $topNext = $section.find('.top-nav-next'); 6409 const $bottomPrev = $section.find('.bottom-nav-prev'); 6410 const $bottomNext = $section.find('.bottom-nav-next'); 6411 let limit = 33; 6412 try { 6413 limit = parseInt($container[0].dataset['limit']); 6414 } catch (e) {} 6415 if (!limit) { 6416 limit = 33; 6417 } 6418 let igFeed = {}; 6419 let usedWidth = 0; 6420 let slider = null; 6421 $section.on('ig-data', function (ev, feed) { 6422 feed = ev.detail || feed; 6423 igFeed = feed; 6424 if (feed.active && feed.items.length) { 6425 buildSlider(); 6426 } 6427 }); 6428 $(window).on('resize.lpui-auto-clean', onResize); 6429 let timer = null; 6430 function onResize() { 6431 clearTimeout(timer); 6432 timer = window.setTimeout(buildSlider, 50); 6433 } 6434 function getLayout(w, n) { 6435 if (w > 1100) { 6436 if (n > 7) { 6437 return { 6438 type: 'type1', 6439 single: 1, 6440 multi: n, 6441 slides: 3, 6442 slider: n > 9 6443 }; 6444 } 6445 if (n > 5) { 6446 return { 6447 type: 'type1', 6448 single: 2, 6449 multi: n, 6450 slides: 3, 6451 slider: false 6452 }; 6453 } 6454 return { 6455 type: 'type1', 6456 single: n, 6457 multi: n, 6458 slides: 3, 6459 slider: n > 3 6460 }; 6461 } else if (w > 880) { 6462 if (n > 4) { 6463 return { 6464 type: 'type2', 6465 single: 1, 6466 multi: n, 6467 slides: 2.5, 6468 slider: n > 7 6469 }; 6470 } 6471 return { 6472 type: 'type1', 6473 single: n, 6474 multi: n, 6475 slides: 3, 6476 slider: n > 3 6477 }; 6478 } else if (w > 767) { 6479 if (n > 4) { 6480 return { 6481 type: 'type3', 6482 single: 1, 6483 multi: n, 6484 slides: 2, 6485 slider: n > 5 6486 }; 6487 } 6488 return { 6489 type: 'type4', 6490 single: n, 6491 multi: n, 6492 slides: 2, 6493 slider: n > 2 6494 }; 6495 } else if (w > 460) { 6496 return { 6497 type: 'type4', 6498 single: n, 6499 multi: n, 6500 slides: 2, 6501 slider: n > 2 6502 }; 6503 } 6504 return { 6505 type: 'type5', 6506 single: n, 6507 multi: n, 6508 slides: 1, 6509 slider: n > 1 6510 }; 6511 } 6512 function ensureClass($el, className) { 6513 if ($el.hasClass(className)) { 6514 return; 6515 } 6516 $el.addClass(className); 6517 } 6518 function makeSquare($el) { 6519 const el = $el[0]; 6520 el.style.width = ''; 6521 el.style.height = ''; 6522 const rect = el.getBoundingClientRect(); 6523 if (rect.width !== rect.height) { 6524 el.style.width = rect.height + 'px'; 6525 } 6526 } 6527 function buildSlider() { 6528 const cWidth = $container[0].getBoundingClientRect().width; 6529 if (cWidth === usedWidth) { 6530 return; 6531 } 6532 $container.empty();
6533 slider = $('<div class="ig-feed-slider"></div>'); 6534 const items = igFeed.items.slice(0, limit); 6535 const layout = getLayout(cWidth, items.length); 6536 let i = 0; 6537 let slide = null; 6538 while (i < layout.single) { 6539 slide = $(`<div class="slide-single ${layout.type}"></div>`).append(itemTemplate(items[i])).appendTo(slider); 6540 i++; 6541 } 6542 while (i < layout.multi) { 6543 slide = $(`<div class="slide-multi ${layout.type}"></div>`).appendTo(slider); 6544 let slideContent = $('<div class="slide-multi-content"></div>').appendTo(slide); 6545 const lim = i + 4; 6546 while (i < lim && i < layout.multi) { 6547 slideContent.append(itemTemplate(items[i])); 6548 i++; 6549 } 6550 } 6551 $container.append(slider); 6552 if (layout.slider) { 6553 $topPrev.removeClass('hidden-control'); 6554 $topNext.removeClass('hidden-control'); 6555 $bottomPrev.removeClass('hidden-control'); 6556 $bottomNext.removeClass('hidden-control'); 6557 let prev, next; 6558 if ($bottomPrev.parent()[0].getBoundingClientRect().width) { 6559 prev = $bottomPrev; 6560 next = $bottomNext; 6561 } else { 6562 prev = $topPrev; 6563 next = $topNext; 6564 makeSquare($topPrev); 6565 makeSquare($topNext); 6566 } 6567 slider.children().each(function () { 6568 this.style.width = this.getBoundingClientRect().width + 'px'; 6569 }); 6570 slider.slick({ 6571 dots: false, 6572 prevArrow: prev, 6573 nextArrow: next, 6574 slidesToScroll: 1, 6575 infinite: false, 6576 slidesToShow: layout.slides 6577 }); 6578 } else { 6579 ensureClass($topPrev, 'hidden-control'); 6580 ensureClass($topNext, 'hidden-control'); 6581 ensureClass($bottomPrev, 'hidden-control'); 6582 ensureClass($bottomNext, 'hidden-control'); 6583 } 6584 } 6585})('section-de8a42b3-5dab-4f33-a867-4c6c2a7e0655', JSON.parse("{\"resource\":\"agent\",\"useRouterApi\":false,\"companyId\":\"c3076ecb-c2d7-457b-a426-bcf036133f1f\",\"usePageResource\":false,\"sectionIndex\":4,\"routerApiAux\":{\"testimonials\":true,\"agents\":false,\"neighborhoods\":false,\"developments\":false,\"properties\":false,\"posts\":true,\"pressReleases\":true,\"offices\":true,\"teams\":true,\"pois\":true,\"postCategories\":true}}")); 6586} catch(e) { 6587console.log(e); 6588} 6589 6590 var { body } = document; 6591 var globalNav = body.querySelector(':scope > nav'); 6592 var globalSideMenu = body.querySelector(':scope > div.sidemenu'); 6593 6594 document.querySelectorAll('body > .modal .close').forEach(modalCloseBtn => { 6595 modalCloseBtn.addEventListener('click', function() { 6596 window.lpUI.hideClosestModal(modalCloseBtn); 6597 }); 6598 }); 6599 6600 window.addEventListener('click', function() { 6601 document.querySelectorAll('.share-popup').forEach(sharedPopup => { 6602 sharedPopup.style.display = 'none' ; 6603 }); 6604 }); 6605 6606 /* Misc Partials / Addons */ 6607 function initWOW() { 6608 if (wow) { 6609 wow.init(); 6610 wow.scrollHandler(); 6611 setTimeout(function () { 6612 const wowHideStyle = document.getElementById('wow-hide-elements'); 6613 if(wowHideStyle) { 6614 wowHideStyle.disabled = true; 6615 } 6616 }, 1); 6617 } 6618 } 6619 6620 const wowHideElements = document.getElementById('wow-hide-elements'); 6621 if (wowHideElements) { 6622 wowHideElements.disabled = false; 6623 } 6624 6625 var globalLoader = document.getElementById('global-loader'); 6626 if (globalLoader) { 6627 setTimeout(function() { 6628 globalLoader.style.height = "0px"; 6629 window.sessionStorage.setItem('global_loading_displayed', 'yes'); 6630 6631 // Remove global-loader to prevent caching issues with turbolinks 6632 globalLoader.addEventListener('transitionend', 6633 function(e) { 6634 globalLoader.remove(); 6635 initWOW(); 6636 }); 6637 }, 1000); 6638 } else { 6639 initWOW(); 6640 } 6641 6642 /* Generic Navbar Handling */ 6643 globalNav?.querySelectorAll('.hamburger-component').forEach(hamburgerComponent => { 6644 hamburgerComponent.addEventListener('click', function() { 6645 window.lpUI.sideMenuToggle(); 6646 }); 6647 }); 6648 globalSideMenu?.querySelectorAll('.toggle').forEach(toggleEl => { 6649 toggleEl.addEventListener('click', function() { 6650 window.lpUI.sideMenuToggle(); 6651 }); 6652 }); 6653 6654 document.querySelectorAll('body > nav .sub-nav-container > a, body > div.sidemenu .sub-nav-container > a').forEach(linkEl => { 6655 linkEl.addEventListener('click', function(e) { 6656 e.preventDefault(); 6657 e.stopPropagation();
6658 var subNav = linkEl.parentElement.querySelector(':scope > .sub-nav'); 6659 if (subNav && subNav.classList.contains('visible')){ 6660 subNav.classList.remove('visible'); 6661 } else { 6662 globalNav?.querySelectorAll('.sub-nav-container .sub-nav').forEach(globalSubNav => { 6663 globalSubNav.classList.remove('visible'); 6664 }); 6665 globalSideMenu?.querySelectorAll('.sub-nav').forEach(sideMenuSubNav => { 6666 sideMenuSubNav.classList.remove('visible'); 6667 }); 6668 subNav?.classList.add('visible'); 6669 } 6670 }); 6671 }); 6672 window.addEventListener('click', function() { 6673 document.querySelectorAll('nav .sub-nav.visible, .sidemenu .sub-nav.visible').forEach(subNavEl => { 6674 subNavEl.classList.remove('visible'); 6675 }); 6676 }); 6677 6678 } 6679 6680 document.addEventListener('DOMContentLoaded', lpGlobalInit); 6681 6682 </script>
6682 6683 6684
6684<script type="module"> 6685 function selectorExists(selector) { 6686 return document.querySelector(selector) !== null; 6687 } 6688 6689 // Function to initialize the third-party library 6690 function initParoller(selector = '.my-paroller') { 6691 var $parollerElements = $(selector); 6692 if ($parollerElements.length > 0 && typeof $parollerElements.paroller === 'function') { 6693 $parollerElements.paroller(); 6694 } 6695 } 6696 6697 const parollerSelector = '.my-paroller'; 6698 6699 if (selectorExists(parollerSelector)) { 6700 window.luxuryPresence.libs.loadJs(window.luxuryPresence.libs.jsLibsMap.paroller.jsSrc, function() { 6701 initParoller(parollerSelector); 6702 window.luxuryPresence.libs.jsLibsMap.paroller.isLoaded = true; 6703 }); 6704 } 6705 </script>
6705 6706 6707 <!-- Google Tag Manager (noscript) -->
vendor: 80 bytes, lines 6707-6708
6707 6708 <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
6708GTM-T9SFQGHZ
vendor: 107 bytes, lines 6708-6710
6708" 6709 height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> 6710
6710<!-- End Google Tag Manager --> 6711 6712
6712<script 6713 src="https://cdn.luxurypresence.com/scripts/a11y-widget/latest/widget.js" 6714 data-website-id="ff06f655-0c64-45c8-9c55-e8468b4e5303" 6715 6716 defer></script>
vendor: 1 bytes, line 6716
6716
6717<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a45fb3c5ba83e417',t:'MTc5MTIzNzY1OA=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
6717<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"d2a8f4b3d65944edb8fcd6ffce49ee5e","spa":2}' crossorigin="anonymous"></script>
6717 6718</body> 6719</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.