1<!DOCTYPE html> 2<html lang="en"> 3 <head> 4 <meta charset="utf-8" /> 5<meta name="viewport" content="width=device-width, initial-scale=1.0" /> 6<meta name="csrf-token" content="9ghEubkJTep89b0znOYODOU91KqhnmMbPc0O2ewA" /> 7 8 9 10
10<script> 11 if (!window.__gtmBoot) { 12 window.__gtmBoot = 1 13 ;(function (w, d, s, l, i) { 14 w[l] = w[l] || [] 15 w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' }) 16 var f = d.getElementsByTagName(s)[0], 17 j = d.createElement(s), 18 dl = l != 'dataLayer' ? '&l=' + l : '' 19 j.async = true 20 j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl 21 f.parentNode.insertBefore(j, f) 22 })(window, document, 'script', 'dataLayer', 'GTM-5RKVL3W') 23 } 24 </script>
24 25 26<title>Alpine Property - Guides Et Marché Immobilier</title> 27 28<link 29 href="https://alpine-property.com/css/filament-environment-indicator/styles.css?v=4.13.4.0" 30 rel="stylesheet" 31 data-navigate-track 32 /> 33 <link 34 href="https://alpine-property.com/css/solution-forest/filament-tree/filament-tree-min.css?v=3.1.6.0" 35 rel="stylesheet" 36 data-navigate-track 37 /> 38 <link 39 href="https://alpine-property.com/fonts/filament/filament/inter/index.css?v=4.13.4.0" 40 rel="stylesheet" 41 data-navigate-track 42 /> 43 44<style> 45 :root { 46 --danger-50:oklch(0.971 0.013 17.38); --danger-100:oklch(0.936 0.032 17.717); --danger-200:oklch(0.885 0.062 18.334); --danger-300:oklch(0.808 0.114 19.571); --danger-400:oklch(0.704 0.191 22.216); --danger-500:oklch(0.637 0.237 25.331); --danger-600:oklch(0.577 0.245 27.325); --danger-700:oklch(0.505 0.213 27.518); --danger-800:oklch(0.444 0.177 26.899); --danger-900:oklch(0.396 0.141 25.723); --danger-950:oklch(0.258 0.092 26.042); --gray-50:oklch(0.985 0 0); --gray-100:oklch(0.967 0.001 286.375); --gray-200:oklch(0.92 0.004 286.32); --gray-300:oklch(0.871 0.006 286.286); --gray-400:oklch(0.705 0.015 286.067); --gray-500:oklch(0.552 0.016 285.938); --gray-600:oklch(0.442 0.017 285.786); --gray-700:oklch(0.37 0.013 285.805); --gray-800:oklch(0.274 0.006 286.033); --gray-900:oklch(0.21 0.006 285.885); --gray-950:oklch(0.141 0.005 285.823); --info-50:oklch(0.97 0.014 254.604); --info-100:oklch(0.932 0.032 255.585); --info-200:oklch(0.882 0.059 254.128); --info-300:oklch(0.809 0.105 251.813); --info-400:oklch(0.707 0.165 254.624); --info-500:oklch(0.623 0.214 259.815); --info-600:oklch(0.546 0.245 262.881); --info-700:oklch(0.488 0.243 264.376); --info-800:oklch(0.424 0.199 265.638); --info-900:oklch(0.379 0.146 265.522); --info-950:oklch(0.282 0.091 267.935); --primary-50:oklch(0.987 0.022 95.277); --primary-100:oklch(0.962 0.059 95.617); --primary-200:oklch(0.924 0.12 95.746); --primary-300:oklch(0.879 0.169 91.605); --primary-400:oklch(0.828 0.189 84.429); --primary-500:oklch(0.769 0.188 70.08); --primary-600:oklch(0.666 0.179 58.318); --primary-700:oklch(0.555 0.163 48.998); --primary-800:oklch(0.473 0.137 46.201); --primary-900:oklch(0.414 0.112 45.904); --primary-950:oklch(0.279 0.077 45.635); --success-50:oklch(0.982 0.018 155.826); --success-100:oklch(0.962 0.044 156.743); --success-200:oklch(0.925 0.084 155.995); --success-300:oklch(0.871 0.15 154.449); --success-400:oklch(0.792 0.209 151.711); --success-500:oklch(0.723 0.219 149.579); --success-600:oklch(0.627 0.194 149.214); --success-700:oklch(0.527 0.154 150.069); --success-800:oklch(0.448 0.119 151.328); --success-900:oklch(0.393 0.095 152.535); --success-950:oklch(0.266 0.065 152.934); --warning-50:oklch(0.987 0.022 95.277); --warning-100:oklch(0.962 0.059 95.617); --warning-200:oklch(0.924 0.12 95.746); --warning-300:oklch(0.879 0.169 91.605); --warning-400:oklch(0.828 0.189 84.429); --warning-500:oklch(0.769 0.188 70.08); --warning-600:oklch(0.666 0.179 58.318); --warning-700:oklch(0.555 0.163 48.998); --warning-800:oklch(0.473 0.137 46.201); --warning-900:oklch(0.414 0.112 45.904); --warning-950:oklch(0.279 0.077 45.635); } 47 48 </style> 49 50<link rel="preload" as="style" href="https://alpine-property.com/build/assets/app-CEOUOdTz.css" /><link rel="modulepreload" as="script" href="https://alpine-property.com/build/assets/app-C9dV7QkH.js" /><link rel="modulepreload" as="script" href="https://alpine-property.com/build/assets/dist-SwqmWDbT.js" /><link rel="stylesheet" href="https://alpine-property.com/build/assets/app-CEOUOdTz.css" data-navigate-track="reload" />
50<script type="module" src="https://alpine-property.com/build/assets/app-C9dV7QkH.js" data-navigate-track="reload"></script>
50 <style> 51 @keyframes lazy-image-skeleton { 52 0% { 53 background-position: 200% 0; 54 } 55 100% { 56 background-position: -200% 0; 57 } 58 } 59 </style> 60 61<link href="https://fonts.bunny.net" rel="preconnect" /> 62 <link href="https://fls-a1569c84-ada7-455e-9b34-6fd3a11d7485.laravel.cloud/tenant4f7ab57b-46ca-4888-9ba7-963b34f11668/tenant/favicon.ico" rel="icon" sizes="any" /> 63 64 <link href="https://fls-a1569c84-ada7-455e-9b34-6fd3a11d7485.laravel.cloud/tenant4f7ab57b-46ca-4888-9ba7-963b34f11668/tenant/favicon.svg" rel="icon" type="image/svg+xml" /> 65 66 <link href="https://fls-a1569c84-ada7-455e-9b34-6fd3a11d7485.laravel.cloud/tenant4f7ab57b-46ca-4888-9ba7-963b34f11668/tenant/favicon-96x96.png" rel="icon" sizes="96x96" type="image/png" /> 67 68 <link href="https://fls-a1569c84-ada7-455e-9b34-6fd3a11d7485.laravel.cloud/tenant4f7ab57b-46ca-4888-9ba7-963b34f11668/tenant/apple-touch-icon.png" rel="apple-touch-icon" /> 69 70 <link href="https://fonts.bunny.net/css?family=inter:400,500,600&display=swap" rel="stylesheet" /> 71 <style> 72 :root { 73 --font-sans: 'Inter', sans-serif; 74 } 75 </style> 76 77 <style> 78 :root { 79 --livewire-progress-bar-color: #c70036 !important; 80 --color-primary: #c70036; 81 } 82 </style> 83 84 <style> 85 :root { 86 --color-secondary: #ab002e; 87 } 88 </style> 89 90 <style> 91 :root { 92 --color-page-bg: #f8f7f2; 93 } 94 </style> 95 <!--[if BLOCK]><![endif]--> <meta name="description" content="Stay informed with our latest market reports, news, property insights, area information and alpine living guides." /> 96<!--[if ENDBLOCK]><![endif]--> 97<!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]--> 98<!--[if BLOCK]><![endif]--> <link href="https://alpine-property.com/blog" rel="canonical" /> 99<!--[if ENDBLOCK]><![endif]--> 100<!--[if BLOCK]><![endif]--> <!--[if BLOCK]><![endif]--> <link href="https://alpine-property.com/blog" hreflang="en" rel="alternate" /> 101 <link href="https://alpine-property.com/fr/blog" hreflang="fr" rel="alternate" /> 102 <!--[if ENDBLOCK]><![endif]--> 103 <!--[if BLOCK]><![endif]--> <link href="https://alpine-property.com/blog" hreflang="x-default" rel="alternate" /> 104 <!--[if ENDBLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]--> 105 106<meta content="Guides Et Marché Immobilier - Alpine Property" property="og:title" /> 107<!--[if BLOCK]><![endif]--> <meta content="Stay informed with our latest market reports, news, property insights, area information and alpine living guides." property="og:description" /> 108<!--[if ENDBLOCK]><![endif]--> 109<meta content="website" property="og:type" /> 110<!--[if BLOCK]><![endif]--> <meta content="https://alpine-property.com/blog" property="og:url" /> 111<!--[if ENDBLOCK]><![endif]--> 112<!--[if BLOCK]><![endif]--> <meta content="Alpine Property" property="og:site_name" /> 113<!--[if ENDBLOCK]><![endif]--> 114<meta content="en_GB" property="og:locale" /> 115<!--[if BLOCK]><![endif]--> <!--[if BLOCK]><![endif]--> <!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]--> <!--[if BLOCK]><![endif]--> <meta content="fr_FR" property="og:locale:alternate" /> 116 <!--[if ENDBLOCK]><![endif]--> <!--[if ENDBLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]--> 117<!--[if BLOCK]><![endif]--> <meta content="https://fls-a1569c84-ada7-455e-9b34-6fd3a11d7485.laravel.cloud/tenant4f7ab57b-46ca-4888-9ba7-963b34f11668/page-blocks/3554/blog-featured.webp" property="og:image" /> 118<!--[if ENDBLOCK]><![endif]--> 119 120<meta name="twitter:card" content="summary_large_image" /> 121<!--[if BLOCK]><![endif]--> <meta name="twitter:site" content="@alpineproperty" /> 122<!--[if ENDBLOCK]><![endif]--> 123<meta name="twitter:title" content="Guides Et Marché Immobilier - Alpine Property" /> 124<!--[if BLOCK]><![endif]--> <meta name="twitter:description" content="Stay informed with our latest market reports, news, property insights, area information and alpine living guides." /> 125<!--[if ENDBLOCK]><![endif]--> 126<!--[if BLOCK]><![endif]--> <meta name="twitter:image" content="https://fls-a1569c84-ada7-455e-9b34-6fd3a11d7485.laravel.cloud/tenant4f7ab57b-46ca-4888-9ba7-963b34f11668/page-blocks/3554/blog-featured.webp" /> 127<!--[if ENDBLOCK]><![endif]--> 128 129<!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]--> 130
130<script type="application/ld+json"> 131 {"@context":"https://schema.org","@type":"WebSite","name":"Alpine Property","url":"https://alpine-property.com/blog"} 132</script>
132 133 134<!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]--> 135<!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]--> 136<!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]--> 137<!--[if BLOCK]><![endif]--> 138
138<script type="application/ld+json"> 139 {"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Alpine Property","item":"https://alpine-property.com/home"},{"@type":"ListItem","position":2,"name":"Blog","item":"https://alpine-property.com/blog"}]} 140 </script>
140 141<!--[if ENDBLOCK]><![endif]--> 142 <!-- Livewire Styles --><style >[wire\:loading][wire\:loading], [wire\:loading\.delay][wire\:loading\.delay], [wire\:loading\.inline-block][wire\:loading\.inline-block], [wire\:loading\.inline][wire\:loading\.inline], [wire\:loading\.block][wire\:loading\.block], [wire\:loading\.flex][wire\:loading\.flex], [wire\:loading\.table][wire\:loading\.table], [wire\:loading\.grid][wire\:loading\.grid], [wire\:loading\.inline-flex][wire\:loading\.inline-flex] {display: none;}[wire\:loading\.delay\.none][wire\:loading\.delay\.none], [wire\:loading\.delay\.shortest][wire\:loading\.delay\.shortest], [wire\:loading\.delay\.shorter][wire\:loading\.delay\.shorter], [wire\:loading\.delay\.short][wire\:loading\.delay\.short], [wire\:loading\.delay\.default][wire\:loading\.delay\.default], [wire\:loading\.delay\.long][wire\:loading\.delay\.long], [wire\:loading\.delay\.longer][wire\:loading\.delay\.longer], [wire\:loading\.delay\.longest][wire\:loading\.delay\.longest] {display: none;}[wire\:offline][wire\:offline] {display: none;}[wire\:dirty]:not(textarea):not(input):not(select) {display: none;}:root {--livewire-progress-bar-color: #2299dd;}[x-cloak="x-cloak"],[x-cloak=""] {display: none !important;}[wire\:cloak="wire:cloak"],[wire\:cloak=""] {display: none !important;}dialog#livewire-error::backdrop {background-color: rgba(0, 0, 0, .6);}</style> 143</head> 144 <body style="background-color: #f8f7f2" > 145 <div wire:snapshot="{"data":{"page":[null,{"class":"App\\Models\\Page","key":160,"s":"mdl"}],"currentEstate":null,"isPermanentUrl":false,"permanentPrettyPath":null,"currentZone":null,"currentParentZone":null},"memo":{"id":"SnJr9LMpgR8LmDhi9QZi","name":"dynamic-page","path":"blog","method":"GET","release":"a-a-a","children":{"layout-header-header-0":["header","iX02agC4lQNpTxMLVcG2"],"blog-listing-0":["","cr7ZWHOmrfogt0gk0E3u"],"layout-footer-contact-0":["section","w79UkDKR2FxiCxEOZVb4"],"layout-footer-footer-1":["footer","l6MBMhgSq5V1fZH5wn0T"]},"scripts":[],"assets":[],"errors":[],"locale":"en"},"checksum":"9b8be8dd640ed6cafc9d7fd75d27d88e5eca4955b7dc14a51858c832afd38d56"}" wire:effects="{"partials":[],"listeners":["locale-changed"]}" wire:id="SnJr9LMpgR8LmDhi9QZi"> 146 147 148 149 <!--[if BLOCK]><![endif]--> <!--[if BLOCK]><![endif]--> <header wire:snapshot="{"data":{"data":[{"id":"e8979e93-e39c-4e07-865b-16b5e920143e","phone":"+44 (0)208 123 2384","design":"with-multiple-flyout-menus","sample":false,"brand_name":"Alpine Property"},{"s":"arr"}],"design":null,"estate":null,"page":null,"sample":false,"zone":null,"blockIndex":-1,"blockType":"header"},"memo":{"id":"iX02agC4lQNpTxMLVcG2","name":"blocks.header","path":"blog","method":"GET","release":"a-a-a","children":[],"scripts":[],"assets":[],"errors":[],"locale":"en"},"checksum":"ebf41b16116c94e01d0d59cc47b6bce14b24113cf2bc9dc00041ea270c471e91"}" wire:effects="{"partials":[]}" wire:id="iX02agC4lQNpTxMLVcG2" 150 x-data="{ 151 mobileMenuOpen: false, 152 activeMenu: null, 153 scrollOpacity: 0, 154 isDark: false, 155 initScrollListener() { 156 const scrollContainer = 157 this.$root.closest('.overflow-y-scroll') || window 158 const handleScroll = () => { 159 const scrollTop = 160 scrollContainer === window 161 ? window.scrollY
162 : scrollContainer.scrollTop 163 this.scrollOpacity = Math.min(1, scrollTop / 100) 164 } 165 scrollContainer.addEventListener('scroll', handleScroll, { 166 passive: true, 167 }) 168 handleScroll() 169 }, 170 initDarkModeObserver() { 171 this.isDark = document.documentElement.classList.contains('dark') 172 const observer = new MutationObserver(() => { 173 this.isDark = document.documentElement.classList.contains('dark') 174 }) 175 observer.observe(document.documentElement, { 176 attributes: true, 177 attributeFilter: ['class'], 178 }) 179 }, 180 get navBgColor() { 181 return this.isDark ? '17 24 39' : '255 255 255' 182 }, 183 }" 184 x-init=" 185 initScrollListener() 186 initDarkModeObserver() 187 " 188 x-on:keydown.escape.window="mobileMenuOpen = false" 189 @click.outside="activeMenu = null" 190 style="--header-bg: #c70036; --header-text: #fff; --header-text-muted: rgba(255,255,255,0.6);" 191 > 192 193 <div 194 class="fixed inset-x-0 top-0 z-[70] flex items-center justify-between p-4 shadow-sm lg:hidden text-white" 195 style="background-color: var(--header-bg)" > 196 <a class="flex cursor-pointer items-center gap-2" href="/home" wire:navigate> 197 <!--[if BLOCK]><![endif]--> <!--[if BLOCK]><![endif]--> 198 <img class="h-9 w-auto shrink-0" alt="Alpine Property" src="https://fls-a1569c84-ada7-455e-9b34-6fd3a11d7485.laravel.cloud/tenant4f7ab57b-46ca-4888-9ba7-963b34f11668/tenant/logo.svg" /> 199 <!--[if ENDBLOCK]><![endif]--> <!--[if ENDBLOCK]><![endif]--> 200 <span class="text-white font-bold whitespace-nowrap"> 201 Alpine Property 202 </span> 203 </a> 204 205 206 <button 207 :aria-expanded="mobileMenuOpen" 208 x-on:click="mobileMenuOpen = !mobileMenuOpen" 209 class="relative flex size-10 items-center justify-center text-white hover:bg-white/10" 210 aria-label="Toggle menu" 211 type="button" 212 > 213 <span x-text="mobileMenuOpen ? 'Close menu' : 'Open menu'" class="sr-only"></span> 214 <div class="flex h-5 w-6 flex-col items-center justify-center"> 215 <span 216 :class="mobileMenuOpen ? 'rotate-45' : '-translate-y-1.5'" 217 class="absolute h-0.5 w-5 rounded-full bg-current transition-all duration-300 ease-out" 218 ></span> 219 <span 220 :class="mobileMenuOpen ? 'opacity-0 scale-0' : 'opacity-100 scale-100'" 221 class="absolute h-0.5 w-5 rounded-full bg-current transition-all duration-300 ease-out" 222 ></span> 223 <span 224 :class="mobileMenuOpen ? '-rotate-45' : 'translate-y-1.5'" 225 class="absolute h-0.5 w-5 rounded-full bg-current transition-all duration-300 ease-out" 226 ></span> 227 </div> 228 </button> 229 </div> 230 231 232 <div 233 class="fixed inset-x-0 top-0 z-[70] hidden h-14 px-12 shadow-md md:px-16 lg:flex text-white" 234 style="background-color: var(--header-bg)" > 235 <nav class="flex w-full items-center" aria-label="Global navigation"> 236 237 <div class="flex h-full items-center"> 238 <a class="flex cursor-pointer items-center gap-3" href="/home" wire:navigate> 239 <!--[if BLOCK]><![endif]--> <!--[if BLOCK]><![endif]--> 240 <img class="h-9 w-auto shrink-0 object-contain" alt="Alpine Property" src="https://fls-a1569c84-ada7-455e-9b34-6fd3a11d7485.laravel.cloud/tenant4f7ab57b-46ca-4888-9ba7-963b34f11668/tenant/logo.svg" /> 241 <!--[if ENDBLOCK]><![endif]--> <!--[if ENDBLOCK]><![endif]--> 242 <span 243 class="font-bold whitespace-nowrap text-white" 244 > 245 Alpine Property 246 </span> 247 </a> 248 </div> 249 250 251 <div class="flex h-full flex-1 items-stretch pl-16"> 252 <!--[if BLOCK]><![endif]--> 253 <div class="relative flex"> 254 <!--[if BLOCK]><![endif]--> <button 255 @click="activeMenu = activeMenu === 'buy' ? null : 'buy'" 256 style="--nav: #0a97d4; --nav-hover: #0b88bf; --nav-fg: #fff;" 257 class="flex h-full min-w-28 items-center justify-center gap-2 px-6 text-sm font-semibold text-[color:var(--nav-fg)
257] [text-shadow:0_1px_2px_rgb(0_0_0/0.5)] transition-colors bg-[var(--nav)] hover:bg-[var(--nav-hover)]" 258 > 259 Buy 260 <svg class="shrink-0 [:where(&)]:size-4 size-4 transition-transform duration-200 ease-in-out" :class="activeMenu === 'buy' && 'rotate-180'" data-flux-icon xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true" data-slot="icon"> 261 <path fill-rule="evenodd" d="M4.22 6.22a.75.75 0 0 1 1.06 0L8 8.94l2.72-2.72a.75.75 0 1 1 1.06 1.06l-3.25 3.25a.75.75 0 0 1-1.06 0L4.22 7.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd"/> 262</svg> 263 264 </button> 265 <div 266 x-cloak 267 x-show="activeMenu === 'buy'" 268 x-transition:enter="transition duration-100 ease-out" 269 x-transition:enter-end="scale-100 opacity-100" 270 x-transition:enter-start="scale-95 opacity-0" 271 x-transition:leave="transition duration-75 ease-in" 272 x-transition:leave-end="scale-95 opacity-0" 273 x-transition:leave-start="scale-100 opacity-100" 274 class="absolute top-full left-0 z-50 min-w-48 shadow-lg" 275 style="--nav: #0a97d4; --nav-hover: #0b88bf; --nav-fg: #fff; background-color: var(--nav);" 276 > 277 <div class="py-1"> 278 <!--[if BLOCK]><![endif]--> <a 279 class="block px-4 py-2 text-sm text-[color:var(--nav-fg)] transition-colors hover:bg-[var(--nav-hover)]" 280 href="/our-properties" wire:navigate > 281 All our properties 282 </a> 283 <a 284 class="block px-4 py-2 text-sm text-[color:var(--nav-fg)] transition-colors hover:bg-[var(--nav-hover)]" 285 href="/map" wire:navigate > 286 Map Search 287 </a> 288 <a 289 class="block px-4 py-2 text-sm text-[color:var(--nav-fg)] transition-colors hover:bg-[var(--nav-hover)]" 290 href="/buyers-guide" wire:navigate > 291 Buyers Guide 292 </a> 293 <a 294 class="block px-4 py-2 text-sm text-[color:var(--nav-fg)] transition-colors hover:bg-[var(--nav-hover)]" 295 href="/faq" wire:navigate > 296 FAQ 297 </a> 298 <a 299 class="block px-4 py-2 text-sm text-[color:var(--nav-fg)
299] transition-colors hover:bg-[var(--nav-hover)]" 300 href="/video-faq" wire:navigate > 301 Video FAQ 302 </a> 303 <a 304 class="block px-4 py-2 text-sm text-[color:var(--nav-fg)] transition-colors hover:bg-[var(--nav-hover)]" 305 href="/finances" wire:navigate > 306 Finances 307 </a> 308 <!--[if ENDBLOCK]><![endif]--> </div> 309 </div> 310 <!--[if ENDBLOCK]><![endif]--> </div> 311 312 <div class="relative flex"> 313 <!--[if BLOCK]><![endif]--> <button 314 @click="activeMenu = activeMenu === 'sell' ? null : 'sell'" 315 style="--nav: #17bf82; --nav-hover: #17ab76; --nav-fg: #fff;" 316 class="flex h-full min-w-28 items-center justify-center gap-2 px-6 text-sm font-semibold text-[color:var(--nav-fg)] [text-shadow:0_1px_2px_rgb(0_0_0/0.5)] transition-colors bg-[var(--nav)] hover:bg-[var(--nav-hover)]" 317 > 318 Sell 319 <svg class="shrink-0 [:where(&)]:size-4 size-4 transition-transform duration-200 ease-in-out" :class="activeMenu === 'sell' && 'rotate-180'" data-flux-icon xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true" data-slot="icon"> 320 <path fill-rule="evenodd" d="M4.22 6.22a.75.75 0 0 1 1.06 0L8 8.94l2.72-2.72a.75.75 0 1 1 1.06 1.06l-3.25 3.25a.75.75 0 0 1-1.06 0L4.22 7.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd"/> 321</svg> 322 323 </button> 324 <div 325 x-cloak 326 x-show="activeMenu === 'sell'" 327 x-transition:enter="transition duration-100 ease-out" 328 x-transition:enter-end="scale-100 opacity-100" 329 x-transition:enter-start="scale-95 opacity-0" 330 x-transition:leave="transition duration-75 ease-in" 331 x-transition:leave-end="scale-95 opacity-0" 332 x-transition:leave-start="scale-100 opacity-100" 333 class="absolute top-full left-0 z-50 min-w-48 shadow-lg" 334 style="--nav: #17bf82; --nav-hover: #17ab76; --nav-fg: #fff; background-color: var(--nav);" 335 > 336 <div class="py-1"> 337 <!--[if BLOCK]><![endif]--> <a 338 class="block px-4 py-2 text-sm text-[color:var(--nav-fg)] transition-colors hover:bg-[var(--nav-hover)]" 339 href="/why-us" wire:navigate > 340 Why Us? 341 </a> 342 <a 343 class="block px-4 py-2 text-sm text-[color:var(--nav-fg)
343] transition-colors hover:bg-[var(--nav-hover)]" 344 href="/our-fees" wire:navigate > 345 Our Fees 346 </a> 347 <a 348 class="block px-4 py-2 text-sm text-[color:var(--nav-fg)] transition-colors hover:bg-[var(--nav-hover)]" 349 href="/get-valuation" wire:navigate > 350 Get a Valuation 351 </a> 352 <a 353 class="block px-4 py-2 text-sm text-[color:var(--nav-fg)] transition-colors hover:bg-[var(--nav-hover)]" 354 href="/sold-listings" wire:navigate > 355 Sold Properties 356 </a> 357 <!--[if ENDBLOCK]><![endif]--> </div> 358 </div> 359 <!--[if ENDBLOCK]><![endif]--> </div> 360 361 <div class="relative flex"> 362 <!--[if BLOCK]><![endif]--> <button 363 @click="activeMenu = activeMenu === 'areas' ? null : 'areas'" 364 style="--nav: #846fd9; --nav-hover: #7764c4; --nav-fg: #fff;" 365 class="flex h-full min-w-28 items-center justify-center gap-2 px-6 text-sm font-semibold text-[color:var(--nav-fg)] [text-shadow:0_1px_2px_rgb(0_0_0/0.5)] transition-colors bg-[var(--nav)] hover:bg-[var(--nav-hover)]" 366 > 367 Areas 368 <svg class="shrink-0 [:where(&)]:size-4 size-4 transition-transform duration-200 ease-in-out" :class="activeMenu === 'areas' && 'rotate-180'" data-flux-icon xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true" data-slot="icon"> 369 <path fill-rule="evenodd" d="M4.22 6.22a.75.75 0 0 1 1.06 0L8 8.94l2.72-2.72a.75.75 0 1 1 1.06 1.06l-3.25 3.25a.75.75 0 0 1-1.06 0L4.22 7.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd"/> 370</svg> 371 372 </button> 373 <div 374 x-cloak 375 x-show="activeMenu === 'areas'" 376 x-transition:enter="transition duration-100 ease-out" 377 x-transition:enter-end="scale-100 opacity-100" 378 x-transition:enter-start="scale-95 opacity-0" 379 x-transition:leave="transition duration-75 ease-in" 380 x-transition:leave-end="scale-95 opacity-0" 381 x-transition:leave-start="scale-100 opacity-100" 382 class="absolute top-full left-0 z-50 min-w-48 shadow-lg" 383 style="--nav: #846fd9; --nav-hover: #7764c4; --nav-fg: #fff; background-color: var(--nav);" 384 > 385 <div class="py-1"> 386 <!--[if BLOCK]><![endif]--> <a 387 class="block px-4 py-2 text-sm text-[color:var(--nav-fg)
387] transition-colors hover:bg-[var(--nav-hover)]" 388 href="/our-properties/mont-blanc" wire:navigate > 389 Mont Blanc 390 </a> 391 <a 392 class="block px-4 py-2 text-sm text-[color:var(--nav-fg)] transition-colors hover:bg-[var(--nav-hover)]" 393 href="/our-properties/grand-massif" wire:navigate > 394 Grand Massif 395 </a> 396 <a 397 class="block px-4 py-2 text-sm text-[color:var(--nav-fg)] transition-colors hover:bg-[var(--nav-hover)]" 398 href="/our-properties/portes-du-soleil" wire:navigate > 399 Portes du Soleil 400 </a> 401 <a 402 class="block px-4 py-2 text-sm text-[color:var(--nav-fg)] transition-colors hover:bg-[var(--nav-hover)]" 403 href="/our-properties/alpes-du-leman" wire:navigate > 404 Les Alpes du Léman 405 </a> 406 <a 407 class="block px-4 py-2 text-sm text-[color:var(--nav-fg)] transition-colors hover:bg-[var(--nav-hover)]" 408 href="/our-properties/aravis" wire:navigate > 409 Aravis 410 </a> 411 <a 412 class="block px-4 py-2 text-sm text-[color:var(--nav-fg)] transition-colors hover:bg-[var(--nav-hover)]" 413 href="/our-properties/lac-annecy" wire:navigate > 414 Lac Annecy 415 </a> 416 <!--[if ENDBLOCK]><![endif]--> </div> 417 </div> 418 <!--[if ENDBLOCK]><![endif]--> </div> 419 420 <div class="relative flex"> 421 <!--[if BLOCK]><![endif]--> <button 422 @click="activeMenu = activeMenu === 'about-us' ? null : 'about-us'" 423 style="--nav: #deb510; --nav-hover: #c8a312; --nav-fg: #fff;" 424 class="flex h-full min-w-28 items-center justify-center gap-2 px-6 text-sm font-semibold text-[color:var(--nav-fg)
424] [text-shadow:0_1px_2px_rgb(0_0_0/0.5)] transition-colors bg-[var(--nav)] hover:bg-[var(--nav-hover)]" 425 > 426 About Us 427 <svg class="shrink-0 [:where(&)]:size-4 size-4 transition-transform duration-200 ease-in-out" :class="activeMenu === 'about-us' && 'rotate-180'" data-flux-icon xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true" data-slot="icon"> 428 <path fill-rule="evenodd" d="M4.22 6.22a.75.75 0 0 1 1.06 0L8 8.94l2.72-2.72a.75.75 0 1 1 1.06 1.06l-3.25 3.25a.75.75 0 0 1-1.06 0L4.22 7.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd"/> 429</svg> 430 431 </button> 432 <div 433 x-cloak 434 x-show="activeMenu === 'about-us'" 435 x-transition:enter="transition duration-100 ease-out" 436 x-transition:enter-end="scale-100 opacity-100" 437 x-transition:enter-start="scale-95 opacity-0" 438 x-transition:leave="transition duration-75 ease-in" 439 x-transition:leave-end="scale-95 opacity-0" 440 x-transition:leave-start="scale-100 opacity-100" 441 class="absolute top-full left-0 z-50 min-w-48 shadow-lg" 442 style="--nav: #deb510; --nav-hover: #c8a312; --nav-fg: #fff; background-color: var(--nav);" 443 > 444 <div class="py-1"> 445 <!--[if BLOCK]><![endif]--> <a 446 class="block px-4 py-2 text-sm text-[color:var(--nav-fg)] transition-colors hover:bg-[var(--nav-hover)]" 447 href="/our-way" wire:navigate > 448 Our Way 449 </a> 450 <a 451 class="block px-4 py-2 text-sm text-[color:var(--nav-fg)] transition-colors hover:bg-[var(--nav-hover)]" 452 href="/the-company" wire:navigate > 453 Company & Team 454 </a> 455 <a 456 class="block px-4 py-2 text-sm text-[color:var(--nav-fg)] transition-colors hover:bg-[var(--nav-hover)]" 457 href="/careers" wire:navigate > 458 Careers 459 </a> 460 <a 461 class="block px-4 py-2 text-sm text-[color:var(--nav-fg)] transition-colors hover:bg-[var(--nav-hover)]" 462 href="/blog" wire:navigate > 463 Blog 464 </a> 465 <a 466 class="block px-4 py-2 text-sm text-[color:var(--nav-fg)
466] transition-colors hover:bg-[var(--nav-hover)]" 467 href="/reviews" wire:navigate > 468 Reviews 469 </a> 470 <a 471 class="block px-4 py-2 text-sm text-[color:var(--nav-fg)] transition-colors hover:bg-[var(--nav-hover)]" 472 href="/legal" wire:navigate > 473 Legal 474 </a> 475 <!--[if ENDBLOCK]><![endif]--> </div> 476 </div> 477 <!--[if ENDBLOCK]><![endif]--> </div> 478 <!--[if ENDBLOCK]><![endif]--> </div> 479 480 481 <div class="flex items-center gap-4"> 482 <a 483 x-on:click="document.getElementById('contact')?.scrollIntoView({ behavior: 'smooth', block: 'start' })" 484 class="cursor-pointer text-sm font-semibold text-white hover:text-white/80" 485 > 486 Contact 487 </a> 488 <!--[if BLOCK]><![endif]--> <span class="hidden text-sm text-white/60 xl:inline">|</span> 489 <a 490 class="hidden text-sm font-semibold text-white hover:text-white/80 xl:inline" 491 href="tel:+442081232384" 492 > 493 +44 (0)208 123 2384 494 </a> 495 <!--[if ENDBLOCK]><![endif]--> 496 <!--[if BLOCK]><![endif]--> <div 497 x-data="{ localeOpen: false }" 498 class="relative border-l border-white/30 pl-4" 499 @click.away="localeOpen = false" 500 > 501 502 <button 503 class="flex items-center gap-2 text-sm font-medium text-white/80 transition hover:text-white" 504 @click="localeOpen = !localeOpen" 505 type="button" 506 > 507 <!--[if BLOCK]><![endif]--> <span class="iti__flag iti__flag iti__gb"></span> 508 <!--[if ENDBLOCK]><![endif]--> 509 <span>EN</span> 510 <svg 511 :class="localeOpen ? 'rotate-180' : ''" 512 class="size-3 transition-transform" 513 fill="none" 514 stroke="currentColor"
515 viewBox="0 0 24 24" 516 > 517 <path 518 d="M19 9l-7 7-7-7" 519 stroke-linecap="round" 520 stroke-linejoin="round" 521 stroke-width="2" 522 /> 523 </svg> 524 </button> 525 526 527 <div 528 x-cloak 529 x-show="localeOpen" 530 x-transition:enter="transition duration-100 ease-out" 531 x-transition:enter-end="scale-100 transform opacity-100" 532 x-transition:enter-start="scale-95 transform opacity-0" 533 x-transition:leave="transition duration-75 ease-in" 534 x-transition:leave-end="scale-95 transform opacity-0" 535 x-transition:leave-start="scale-100 transform opacity-100" 536 class="absolute right-0 z-50 mt-2 w-40 origin-top-right overflow-hidden rounded-md bg-white shadow-lg ring-1 ring-black/5" 537 > 538 <!--[if BLOCK]><![endif]--> 539 <a 540 class="flex items-center gap-3 px-4 py-2.5 text-sm transition bg-gray-100 font-medium text-gray-900" 541 href="https://alpine-property.com/locale/en?from=%2Fblog" 542 wire:navigate 543 > 544 <!--[if BLOCK]><![endif]--> <span class="iti__flag iti__flag iti__gb"></span> 545 <span>English</span> 546 <!--[if ENDBLOCK]><![endif]--> </a> 547 548 <a 549 class="flex items-center gap-3 px-4 py-2.5 text-sm transition text-gray-700 hover:bg-gray-50" 550 href="https://alpine-property.com/locale/fr?from=%2Fblog" 551 wire:navigate 552 > 553 <!--[if BLOCK]><![endif]--> <span class="iti__flag iti__flag iti__fr"></span> 554 <span>Français</span> 555 <!--[if ENDBLOCK]><![endif]--> </a> 556 <!--[if ENDBLOCK]><![endif]--> </div> 557 </div> 558 <!--[if ENDBLOCK]><![endif]--> </div> 559 </nav> 560 </div> 561 562 563 <div 564 x-cloak 565 x-on:click="mobileMenuOpen = false" 566 x-show="mobileMenuOpen" 567 x-transition:enter="transition duration-300 ease-out" 568 x-transition:enter-end="opacity-100" 569 x-transition:enter-start="opacity-0" 570 x-transition:leave="transition duration-200 ease-in" 571 x-transition:leave-end="opacity-0" 572 x-transition:leave-start="opacity-100" 573 class="fixed inset-0 z-[65] bg-black/20 backdrop-blur-sm lg:hidden" 574 aria-hidden="true" 575 ></div> 576 577 578 <div 579 x-cloak 580 x-show="mobileMenuOpen"
581 x-transition:enter="transition duration-400 ease-[cubic-bezier(0.34,1.56,0.64,1)]" 582 x-transition:enter-end="translate-y-0 opacity-100" 583 x-transition:enter-start="-translate-y-full opacity-0" 584 x-transition:leave="transition duration-200 ease-in" 585 x-transition:leave-end="-translate-y-full opacity-0" 586 x-transition:leave-start="translate-y-0 opacity-100" 587 x-trap.noscroll.inert="mobileMenuOpen" 588 class="fixed inset-x-0 top-0 z-[65] max-h-dvh overflow-y-auto pt-[72px] shadow-xl lg:hidden text-white" 589 style="background-color: var(--header-bg)" > 590 <div class="p-4"> 591 <!--[if BLOCK]><![endif]--> 592 <!--[if BLOCK]><![endif]--> <div x-data="{ open: false }" class="mb-1"> 593 <button 594 :aria-expanded="open" 595 x-on:click="open = !open" 596 style="--nav: #0a97d4; --nav-hover: #0b88bf; --nav-fg: #fff;" 597 class="flex w-full items-center justify-between px-4 py-3 text-base font-semibold text-[color:var(--nav-fg)] [text-shadow:0_1px_2px_rgb(0_0_0/0.5)] bg-[var(--nav)] hover:bg-[var(--nav-hover)]" 598 type="button" 599 > 600 Buy 601 <svg 602 :class="open ? 'rotate-180' : ''" 603 class="text-white/60 size-5 flex-none transition-transform duration-200" 604 aria-hidden="true" 605 fill="currentColor"
606 viewBox="0 0 20 20" 607 > 608 <path 609 clip-rule="evenodd" 610 d="M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z" 611 fill-rule="evenodd" 612 /> 613 </svg> 614 </button> 615 <div 616 x-cloak 617 x-collapse 618 x-show="open" 619 style="--nav: #0a97d4; --nav-hover: #0b88bf; --nav-fg: #fff; background-color: var(--nav);" 620 > 621 <!--[if BLOCK]><![endif]--> <a 622 class="block px-6 py-2.5 text-sm text-[color:var(--nav-fg)] transition-colors hover:bg-[var(--nav-hover)]" 623 href="/our-properties" wire:navigate > 624 All our properties 625 </a> 626 <a 627 class="block px-6 py-2.5 text-sm text-[color:var(--nav-fg)] transition-colors hover:bg-[var(--nav-hover)]" 628 href="/map" wire:navigate > 629 Map Search 630 </a> 631 <a 632 class="block px-6 py-2.5 text-sm text-[color:var(--nav-fg)] transition-colors hover:bg-[var(--nav-hover)]" 633 href="/buyers-guide" wire:navigate > 634 Buyers Guide 635 </a> 636 <a 637 class="block px-6 py-2.5 text-sm text-[color:var(--nav-fg)] transition-colors hover:bg-[var(--nav-hover)]" 638 href="/faq" wire:navigate > 639 FAQ 640 </a> 641 <a 642 class="block px-6 py-2.5 text-sm text-[color:var(--nav-fg)] transition-colors hover:bg-[var(--nav-hover)]" 643 href="/video-faq" wire:navigate > 644 Video FAQ 645 </a> 646 <a 647 class="block px-6 py-2.5 text-sm text-[color:var(--nav-fg)] transition-colors hover:bg-[var(--nav-hover)]" 648 href="/finances" wire:navigate > 649 Finances 650 </a> 651 <!--[if ENDBLOCK]><![endif]--> </div> 652 </div> 653 <!--[if ENDBLOCK]><![endif]--> 654 <!--[if BLOCK]><![endif]--> <div x-data="{ open: false }" class="mb-1"> 655 <button 656 :aria-expanded="open" 657 x-on:click="open = !open" 658 style="--nav: #17bf82; --nav-hover: #17ab76; --nav-fg: #fff;" 659 class="flex w-full items-center justify-between px-4 py-3 text-base font-semibold text-[color:var(--nav-fg)
659] [text-shadow:0_1px_2px_rgb(0_0_0/0.5)] bg-[var(--nav)] hover:bg-[var(--nav-hover)]" 660 type="button" 661 > 662 Sell 663 <svg 664 :class="open ? 'rotate-180' : ''" 665 class="text-white/60 size-5 flex-none transition-transform duration-200" 666 aria-hidden="true" 667 fill="currentColor" 668 viewBox="0 0 20 20" 669 > 670 <path 671 clip-rule="evenodd" 672 d="M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z" 673 fill-rule="evenodd" 674 /> 675 </svg> 676 </button> 677 <div 678 x-cloak 679 x-collapse 680 x-show="open" 681 style="--nav: #17bf82; --nav-hover: #17ab76; --nav-fg: #fff; background-color: var(--nav);" 682 > 683 <!--[if BLOCK]><![endif]--> <a 684 class="block px-6 py-2.5 text-sm text-[color:var(--nav-fg)] transition-colors hover:bg-[var(--nav-hover)]" 685 href="/why-us" wire:navigate > 686 Why Us? 687 </a> 688 <a 689 class="block px-6 py-2.5 text-sm text-[color:var(--nav-fg)] transition-colors hover:bg-[var(--nav-hover)]" 690 href="/our-fees" wire:navigate > 691 Our Fees 692 </a> 693 <a 694 class="block px-6 py-2.5 text-sm text-[color:var(--nav-fg)] transition-colors hover:bg-[var(--nav-hover)]" 695 href="/get-valuation" wire:navigate > 696 Get a Valuation 697 </a> 698 <a 699 class="block px-6 py-2.5 text-sm text-[color:var(--nav-fg)] transition-colors hover:bg-[var(--nav-hover)]" 700 href="/sold-listings" wire:navigate > 701 Sold Properties 702 </a> 703 <!--[if ENDBLOCK]><![endif]--> </div> 704 </div> 705 <!--[if ENDBLOCK]><![endif]--> 706 <!--[if BLOCK]><![endif]--> <div x-data="{ open: false }" class="mb-1"> 707 <button 708 :aria-expanded="open" 709 x-on:click="open = !open" 710 style="--nav: #846fd9; --nav-hover: #7764c4; --nav-fg: #fff;" 711 class="flex w-full items-center justify-between px-4 py-3 text-base font-semibold text-[color:var(--nav-fg)
711] [text-shadow:0_1px_2px_rgb(0_0_0/0.5)] bg-[var(--nav)] hover:bg-[var(--nav-hover)]" 712 type="button" 713 > 714 Areas 715 <svg 716 :class="open ? 'rotate-180' : ''" 717 class="text-white/60 size-5 flex-none transition-transform duration-200" 718 aria-hidden="true" 719 fill="currentColor" 720 viewBox="0 0 20 20" 721 > 722 <path 723 clip-rule="evenodd" 724 d="M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z" 725 fill-rule="evenodd" 726 /> 727 </svg> 728 </button> 729 <div 730 x-cloak 731 x-collapse 732 x-show="open" 733 style="--nav: #846fd9; --nav-hover: #7764c4; --nav-fg: #fff; background-color: var(--nav);" 734 > 735 <!--[if BLOCK]><![endif]--> <a 736 class="block px-6 py-2.5 text-sm text-[color:var(--nav-fg)] transition-colors hover:bg-[var(--nav-hover)]" 737 href="/our-properties/mont-blanc" wire:navigate > 738 Mont Blanc 739 </a> 740 <a 741 class="block px-6 py-2.5 text-sm text-[color:var(--nav-fg)] transition-colors hover:bg-[var(--nav-hover)]" 742 href="/our-properties/grand-massif" wire:navigate > 743 Grand Massif 744 </a> 745 <a 746 class="block px-6 py-2.5 text-sm text-[color:var(--nav-fg)] transition-colors hover:bg-[var(--nav-hover)]" 747 href="/our-properties/portes-du-soleil" wire:navigate > 748 Portes du Soleil 749 </a> 750 <a 751 class="block px-6 py-2.5 text-sm text-[color:var(--nav-fg)] transition-colors hover:bg-[var(--nav-hover)]" 752 href="/our-properties/alpes-du-leman" wire:navigate > 753 Les Alpes du Léman 754 </a> 755 <a 756 class="block px-6 py-2.5 text-sm text-[color:var(--nav-fg)] transition-colors hover:bg-[var(--nav-hover)]" 757 href="/our-properties/aravis" wire:navigate > 758 Aravis 759 </a> 760 <a 761 class="block px-6 py-2.5 text-sm text-[color:var(--nav-fg)
761] transition-colors hover:bg-[var(--nav-hover)]" 762 href="/our-properties/lac-annecy" wire:navigate > 763 Lac Annecy 764 </a> 765 <!--[if ENDBLOCK]><![endif]--> </div> 766 </div> 767 <!--[if ENDBLOCK]><![endif]--> 768 <!--[if BLOCK]><![endif]--> <div x-data="{ open: false }" class="mb-1"> 769 <button 770 :aria-expanded="open" 771 x-on:click="open = !open" 772 style="--nav: #deb510; --nav-hover: #c8a312; --nav-fg: #fff;" 773 class="flex w-full items-center justify-between px-4 py-3 text-base font-semibold text-[color:var(--nav-fg)] [text-shadow:0_1px_2px_rgb(0_0_0/0.5)] bg-[var(--nav)] hover:bg-[var(--nav-hover)]" 774 type="button" 775 > 776 About Us 777 <svg 778 :class="open ? 'rotate-180' : ''" 779 class="text-white/60 size-5 flex-none transition-transform duration-200" 780 aria-hidden="true" 781 fill="currentColor"
782 viewBox="0 0 20 20" 783 > 784 <path 785 clip-rule="evenodd" 786 d="M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z" 787 fill-rule="evenodd" 788 /> 789 </svg> 790 </button> 791 <div 792 x-cloak 793 x-collapse 794 x-show="open" 795 style="--nav: #deb510; --nav-hover: #c8a312; --nav-fg: #fff; background-color: var(--nav);" 796 > 797 <!--[if BLOCK]><![endif]--> <a 798 class="block px-6 py-2.5 text-sm text-[color:var(--nav-fg)] transition-colors hover:bg-[var(--nav-hover)]" 799 href="/our-way" wire:navigate > 800 Our Way 801 </a> 802 <a 803 class="block px-6 py-2.5 text-sm text-[color:var(--nav-fg)] transition-colors hover:bg-[var(--nav-hover)]" 804 href="/the-company" wire:navigate > 805 Company & Team 806 </a> 807 <a 808 class="block px-6 py-2.5 text-sm text-[color:var(--nav-fg)] transition-colors hover:bg-[var(--nav-hover)]" 809 href="/careers" wire:navigate > 810 Careers 811 </a> 812 <a 813 class="block px-6 py-2.5 text-sm text-[color:var(--nav-fg)] transition-colors hover:bg-[var(--nav-hover)]" 814 href="/blog" wire:navigate > 815 Blog 816 </a> 817 <a 818 class="block px-6 py-2.5 text-sm text-[color:var(--nav-fg)] transition-colors hover:bg-[var(--nav-hover)]" 819 href="/reviews" wire:navigate > 820 Reviews 821 </a> 822 <a 823 class="block px-6 py-2.5 text-sm text-[color:var(--nav-fg)] transition-colors hover:bg-[var(--nav-hover)]" 824 href="/legal" wire:navigate > 825 Legal 826 </a> 827 <!--[if ENDBLOCK]><![endif]--> </div> 828 </div> 829 <!--[if ENDBLOCK]><![endif]--> <!--[if ENDBLOCK]><![endif]--> 830 831 <a 832 x-on:click=" 833 mobileMenuOpen = false 834 $nextTick(() => 835 [...$root.closest('.overflow-y-scroll')?.querySelectorAll('#contact')] 836 .find((el) => el.offsetParent !== null) 837 ?.scrollIntoView({ behavior: 'smooth' }), 838 ) 839 " 840 class="mb-4 block cursor-pointer border-b px-4 py-3 text-base font-semibold border-white/15 text-white hover:bg-white/10" 841 > 842 Contact 843 </a> 844 845 846 <!--[if BLOCK]><![endif]--> <div class="mb-4 flex items-center gap-2 border-b px-4 pb-4 border-white/15"> 847 <!--[if BLOCK]><![endif]--> <a 848 class="flex items-center gap-2 rounded px-3 py-1.5 text-sm transition bg-white/20 font-semibold text-white" 849 href="https://alpine-property.com/locale/en?from=%2Fblog" 850 wire:navigate 851 > 852 <!--[if BLOCK]><![endif]-->
852 <span class="iti__flag iti__flag iti__gb"></span> 853 <span>English</span> 854 <!--[if ENDBLOCK]><![endif]--> </a> 855 <a 856 class="flex items-center gap-2 rounded px-3 py-1.5 text-sm transition text-white/80 hover:bg-white/10" 857 href="https://alpine-property.com/locale/fr?from=%2Fblog" 858 wire:navigate 859 > 860 <!--[if BLOCK]><![endif]--> <span class="iti__flag iti__flag iti__fr"></span> 861 <span>Français</span> 862 <!--[if ENDBLOCK]><![endif]--> </a> 863 <!--[if ENDBLOCK]><![endif]--> </div> 864 <!--[if ENDBLOCK]><![endif]--> 865 866 <!--[if BLOCK]><![endif]--> <div class="mt-4 border-t pt-4 border-white/15"> 867 <a 868 class="flex items-center justify-center gap-2 px-4 py-3 text-sm font-semibold bg-white/15 text-white hover:bg-white/25" 869 href="tel:+442081232384" 870 > 871 <svg class="shrink-0 [:where(&)]:size-6 size-5" data-flux-icon xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true" data-slot="icon"> 872 <path stroke-linecap="round" stroke-linejoin="round" d="M2.25 6.75c0 8.284 6.716 15 15 15h2.25a2.25 2.25 0 0 0 2.25-2.25v-1.372c0-.516-.351-.966-.852-1.091l-4.423-1.106c-.44-.11-.902.055-1.173.417l-.97 1.293c-.282.376-.769.542-1.21.38a12.035 12.035 0 0 1-7.143-7.143c-.162-.441.004-.928.38-1.21l1.293-.97c.363-.271.527-.734.417-1.173L6.963 3.102a1.125 1.125 0 0 0-1.091-.852H4.5A2.25 2.25 0 0 0 2.25 4.5v2.25Z"/> 873</svg> 874 875 +44 (0)208 123 2384 876 </a> 877 </div> 878 <!--[if ENDBLOCK]><![endif]--> </div> 879 </div> 880</header> 881 <!--[if ENDBLOCK]><![endif]--> <!--[if ENDBLOCK]><![endif]--> 882 883 <!--[if BLOCK]><![endif]--> <div class="relative min-h-screen"> 884 885 <div class="fixed inset-0 -z-10 h-[90vh]"> 886 <img class="h-full w-full object-cover" alt="" src="https://fls-a1569c84-ada7-455e-9b34-6fd3a11d7485.laravel.cloud/tenant4f7ab57b-46ca-4888-9ba7-963b34f11668/page-blocks/3554/blog-featured.webp" /> 887 <div class="absolute inset-0 bg-black/30"></div> 888 </div> 889 890 891 <div> 892 <div class="pt-8"> 893 894 <div class="h-12 lg:h-16"></div> 895 896 897 <!--[if BLOCK]><![endif]--> <!--[if BLOCK]><![endif]--> <div > 898 <!--[if BLOCK]><![endif]--> 899 <div wire:snapshot="{"data":{"selectedCategory":"","searchQuery":"","data":[{"id":null,"design":"grid","sample":false,"heading":"Our Blog","subtitle":"Stay informed with our latest news, property insights, and alpine living guides.","category_id":null,"section_icon":null,"posts_per_page":9},{"s":"arr"}],"design":null,"estate":null,"page":[null,{"class":"App\\Models\\Page","key":160,"s":"mdl"}],"sample":false,"zone":null,"blockIndex":0,"blockType":"blog-listing","paginators":[{"page":1},{"s":"arr"}]},"memo":{"id":"cr7ZWHOmrfogt0gk0E3u","name":"blocks.blog-listing","path":"blog","method":"GET","release":"a-a-a","children":[],"scripts":[],"assets":[],"errors":[],"locale":"en"},"checksum":"398e8f0f7f121ff1fc47acd5d72dbb5709890a7e40f947e2b7538e60f53dda32"}" wire:effects="{"partials":[],"url":{"paginators.page":{"as":"page","use":"push","alwaysShow":false,"except":null}}}" wire:id="cr7ZWHOmrfogt0gk0E3u" class="mx-auto max-w-7xl px-4 pt-8 pb-16 sm:px-6 lg:px-8" x-data="window.blogCardLazy()"> 900 <div class=" relative z-0 bg-white/80 p-6 shadow-lg sm:p-8"> 901 <!--[if BLOCK]><![endif]--> <h2 class="mb-6 text-3xl font-black tracking-tight text-gray-800 sm:text-4xl"> 902 Blog 903 </h2> 904 <!--[if ENDBLOCK]><![endif]--> 905 906 <!--[if BLOCK]><![endif]--> <div class="mb-8 flex flex-wrap items-center gap-3"> 907 <div class="flex flex-wrap gap-2"> 908 <button 909 wire:click="$set('selectedCategory', '')" 910 class=" px-3 py-1.5 text-sm font-medium transition bg-accent text-white" 911 > 912 All 913 </button> 914 <!--[if BLOCK]><![endif]--> <button 915 wire:click="$set('selectedCategory', '1')" 916 class=" px-3 py-1.5 text-sm font-medium transition bg-gray-100 text-gray-700 hover:bg-gray-200" 917 > 918 Advice 919 </button> 920 <button 921 wire:click="$set('selectedCategory', '2')" 922 class=" px-3 py-1.5 text-sm font-medium transition bg-gray-100 text-gray-700 hover:bg-gray-200" 923 > 924 Community 925 </button> 926 <button 927 wire:click="$set('selectedCategory', '3')" 928 class=" px-3 py-1.5 text-sm font-medium transition bg-gray-100 text-gray-700 hover:bg-gray-200" 929 > 930 Guides 931 </button> 932 <button 933 wire:click="$set('selectedCategory', '4')" 934 class=" px-3 py-1.5 text-sm font-medium transition bg-gray-100 text-gray-700 hover:bg-gray-200" 935 > 936 Latest News 937 </button> 938 <button 939 wire:click="$set('selectedCategory', '5')" 940 class=" px-3 py-1.5 text-sm font-medium transition bg-gray-100 text-gray-700 hover:bg-gray-200" 941 > 942 Sustainability 943 </button> 944 <!--[if ENDBLOCK]><![endif]--> </div> 945 946 <div class="relative ml-auto w-full sm:w-64"> 947 <input 948 wire:model.live.debounce.300ms="searchQuery" 949 type="text" 950 class=" w-full border border-gray-300 bg-white/60 py-1.5 pr-3 pl-9 text-sm text-gray-900 placeholder-gray-400 backdrop-blur-sm focus:border-gray-400 focus:ring-0 focus:outline-none" 951 placeholder="Search articles..." 952 /> 953 <svg class="absolute top-1/2 left-3 size-4 -translate-y-1/2 text-gray-400" fill="none" stroke="currentColor" viewBox="0 0 24 24"> 954 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" /> 955 </svg> 956 <!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]--> </div> 957 </div> 958 <!--[if ENDBLOCK]><![endif]--> 959 <div class="grid grid-cols-1 gap-x-8 gap-y-12 sm:grid-cols-2 lg:grid-cols-3"> 960 <!--[if BLOCK]><![endif]--> <div wire:key="blog-card-8" class="contents"> 961 <div 962 class=" -m-1.5 grid grid-cols-1 shadow-[inset_0_0_2px_1px_#ffffff4d] ring-1 ring-black/5" 963> 964<div class="grid grid-cols-1 p-1.5 shadow-md shadow-black/5 dark:shadow-none"> 965<article class=" group flex h-full flex-col items-start justify-between overflow-hidden bg-white shadow-xl ring-1 ring-black/5 dark:bg-gray-800 dark:shadow-none dark:ring-white/10"> 966 967 <a class="relative block w-full overflow-hidden" href="/blog/morzine-vallee-daulps-property-market-winter-2025" wire:navigate> 968 <div 969 class="aspect-video w-full bg-gray-100 sm:aspect-2/1 lg:aspect-3/2 dark:bg-gray-800" 970 data-blog-image-cell 971 data-page-id="8" 972 data-page-alt="Winter 2025/26 Alpine Property Market Report: Morzine & Vallée d'Aulps" 973 data-img-class="aspect-video w-full bg-gray-100 object-cover transition-transform duration-300 group-hover:scale-105 sm:aspect-2/1 lg:aspect-3/2 dark:bg-gray-800" 974 style="background: linear-gradient(90deg, #f3f4f6 25%, #e5e7eb 50%, #f3f4f6 75%); background-size: 200% 100%; animation: lazy-image-skeleton 1.4s ease-in-out infinite;" 975 aria-busy="true" 976 ></div> 977 <div class="absolute inset-0 inset-ring inset-ring-gray-900/10 dark:inset-ring-white/10"></div> 978 </a> 979 <div class="flex w-full max-w-xl grow flex-col justify-between p-6 [&>*:first-child]:mt-0"> 980 981 <!--[if BLOCK]><![endif]--> <div class="mt-8 flex items-center gap-x-4 text-xs"> 982 <time class="text-gray-500 dark:text-gray-400" datetime="2025-12-27"> 983 27 Dec 2025 984 </time> 985 </div> 986 <!--[if ENDBLOCK]><![endif]--> <div class="group relative grow"> 987 <h3 class="mt-3 text-lg/6 font-semibold text-gray-900 group-hover:text-accent dark:text-white dark:group-hover:text-accent"> 988 <a href="/blog/morzine-vallee-daulps-property-market-winter-2025" wire:navigate>
989 <span class="absolute inset-0"></span> 990 Winter 2025/26 Alpine Property Market Report: Morzine & Vallée d'Aulps 991 </a> 992 </h3> 993 <!--[if BLOCK]><![endif]--> <p class="mt-5 line-clamp-5 text-sm/6 text-gray-600 dark:text-gray-400">Market analysis showing apartment price increases of 28% in Morzine over the past year, with demand strength in mid-range properties. French mortgage rates below 4% support buyer confidence.</p> 994 <!--[if ENDBLOCK]><![endif]--> </div> 995 </div> 996</article> 997</div> 998</div> 999 </div> 1000 <div wire:key="blog-card-9" class="contents"> 1001 <div 1002 class=" -m-1.5 grid grid-cols-1 shadow-[inset_0_0_2px_1px_#ffffff4d] ring-1 ring-black/5" 1003> 1004<div class="grid grid-cols-1 p-1.5 shadow-md shadow-black/5 dark:shadow-none"> 1005<article class=" group flex h-full flex-col items-start justify-between overflow-hidden bg-white shadow-xl ring-1 ring-black/5 dark:bg-gray-800 dark:shadow-none dark:ring-white/10"> 1006 1007 <a class="relative block w-full overflow-hidden" href="/blog/alpine-property-market-report-may-2025" wire:navigate> 1008 <div 1009 class="aspect-video w-full bg-gray-100 sm:aspect-2/1 lg:aspect-3/2 dark:bg-gray-800" 1010 data-blog-image-cell 1011 data-page-id="9" 1012 data-page-alt="Alpine Property Market Report May 2025" 1013 data-img-class="aspect-video w-full bg-gray-100 object-cover transition-transform duration-300 group-hover:scale-105 sm:aspect-2/1 lg:aspect-3/2 dark:bg-gray-800" 1014 style="background: linear-gradient(90deg, #f3f4f6 25%, #e5e7eb 50%, #f3f4f6 75%); background-size: 200% 100%; animation: lazy-image-skeleton 1.4s ease-in-out infinite;" 1015 aria-busy="true" 1016 ></div> 1017 <div class="absolute inset-0 inset-ring inset-ring-gray-900/10 dark:inset-ring-white/10"></div> 1018 </a> 1019 <div class="flex w-full max-w-xl grow flex-col justify-between p-6 [&>*:first-child]:mt-0"> 1020 1021 <!--[if BLOCK]><![endif]--> <div class="mt-8 flex items-center gap-x-4 text-xs"> 1022 <time class="text-gray-500 dark:text-gray-400" datetime="2025-06-02"> 1023 02 Jun 2025 1024 </time> 1025 </div> 1026 <!--[if ENDBLOCK]><![endif]--> <div class="group relative grow"> 1027 <h3 class="mt-3 text-lg/6 font-semibold text-gray-900 group-hover:text-accent dark:text-white dark:group-hover:text-accent"> 1028 <a href="/blog/alpine-property-market-report-may-2025" wire:navigate> 1029 <span class="absolute inset-0"></span> 1030 Alpine Property Market Report May 2025 1031 </a> 1032 </h3> 1033 <!--[if BLOCK]><![endif]--> <p class="mt-5 line-clamp-5 text-sm/6 text-gray-600 dark:text-gray-400">Comprehensive regional pricing analysis across ski areas. Chamonix T4 apartments up 40% since 2020; Samoëns showing 20% growth in mid-range properties. Geneva-area villages emerge as affordable alternatives.</p> 1034 <!--[if ENDBLOCK]><![endif]--> </div> 1035 </div> 1036</article> 1037</div> 1038</div> 1039 </div> 1040 <div wire:key="blog-card-10" class="contents"> 1041 <div 1042 class=" -m-1.5 grid grid-cols-1 shadow-[inset_0_0_2px_1px_#ffffff4d] ring-1 ring-black/5" 1043> 1044<div class="grid grid-cols-1 p-1.5 shadow-md shadow-black/5 dark:shadow-none"> 1045<article class=" group flex h-full flex-col items-start justify-between overflow-hidden bg-white shadow-xl ring-1 ring-black/5 dark:bg-gray-800 dark:shadow-none dark:ring-white/10"> 1046 1047 <a class="relative block w-full overflow-hidden" href="/blog/greenwashing-living-with-contradictions-running-an-estate-agency-in-the-alps" wire:navigate> 1048 <div 1049 class="aspect-video w-full bg-gray-100 sm:aspect-2/1 lg:aspect-3/2 dark:bg-gray-800" 1050 data-blog-image-cell 1051 data-page-id="10" 1052 data-page-alt="Greenwashing? Living With Contradictions: Running an Estate Agency in the Alps" 1053 data-img-class="aspect-video w-full bg-gray-100 object-cover transition-transform duration-300 group-hover:scale-105 sm:aspect-2/1 lg:aspect-3/2 dark:bg-gray-800" 1054 style="background: linear-gradient(90deg, #f3f4f6 25%, #e5e7eb 50%, #f3f4f6 75%); background-size: 200% 100%; animation: lazy-image-skeleton 1.4s ease-in-out infinite;" 1055 aria-busy="true" 1056 ></div> 1057 <div class="absolute inset-0 inset-ring inset-ring-gray-900/10 dark:inset-ring-white/10"></div> 1058 </a> 1059 <div class="flex w-full max-w-xl grow flex-col justify-between p-6 [&>*:first-child]:mt-0"> 1060 1061 <!--[if BLOCK]><![endif]--> <div class="mt-8 flex items-center gap-x-4 text-xs"> 1062 <time class="text-gray-500 dark:text-gray-400" datetime="2025-05-09"> 1063 09 May 2025 1064 </time> 1065 </div> 1066 <!--[if ENDBLOCK]><![endif]--> <div class="group relative grow"> 1067 <h3 class="mt-3 text-lg/6 font-semibold text-gray-900 group-hover:text-accent dark:text-white dark:group-hover:text-accent"> 1068 <a href="/blog/greenwashing-living-with-contradictions-running-an-estate-agency-in-the-alps" wire:navigate>
1069 <span class="absolute inset-0"></span> 1070 Greenwashing? Living With Contradictions: Running an Estate Agency in the Alps 1071 </a> 1072 </h3> 1073 <!--[if BLOCK]><![endif]--> <p class="mt-5 line-clamp-5 text-sm/6 text-gray-600 dark:text-gray-400">Personal reflection on environmental responsibility in tourism. The company has donated nearly â¬60,000 through 1% for the Planet since 2022, supporting local conservation initiatives.</p> 1074 <!--[if ENDBLOCK]><![endif]--> </div> 1075 </div> 1076</article> 1077</div> 1078</div> 1079 </div> 1080 <div wire:key="blog-card-11" class="contents"> 1081 <div 1082 class=" -m-1.5 grid grid-cols-1 shadow-[inset_0_0_2px_1px_#ffffff4d] ring-1 ring-black/5" 1083> 1084<div class="grid grid-cols-1 p-1.5 shadow-md shadow-black/5 dark:shadow-none"> 1085<article class=" group flex h-full flex-col items-start justify-between overflow-hidden bg-white shadow-xl ring-1 ring-black/5 dark:bg-gray-800 dark:shadow-none dark:ring-white/10"> 1086 1087 <a class="relative block w-full overflow-hidden" href="/blog/compost-ecotrivelo-chamonix-spring-2025" wire:navigate> 1088 <div 1089 class="aspect-video w-full bg-gray-100 sm:aspect-2/1 lg:aspect-3/2 dark:bg-gray-800" 1090 data-blog-image-cell 1091 data-page-id="11" 1092 data-page-alt="How Compost is Transforming Chamonix's Gardens" 1093 data-img-class="aspect-video w-full bg-gray-100 object-cover transition-transform duration-300 group-hover:scale-105 sm:aspect-2/1 lg:aspect-3/2 dark:bg-gray-800" 1094 style="background: linear-gradient(90deg, #f3f4f6 25%, #e5e7eb 50%, #f3f4f6 75%); background-size: 200% 100%; animation: lazy-image-skeleton 1.4s ease-in-out infinite;" 1095 aria-busy="true" 1096 ></div> 1097 <div class="absolute inset-0 inset-ring inset-ring-gray-900/10 dark:inset-ring-white/10"></div> 1098 </a> 1099 <div class="flex w-full max-w-xl grow flex-col justify-between p-6 [&>*:first-child]:mt-0"> 1100 1101 <!--[if BLOCK]><![endif]--> <div class="mt-8 flex items-center gap-x-4 text-xs"> 1102 <time class="text-gray-500 dark:text-gray-400" datetime="2025-04-28"> 1103 28 Apr 2025 1104 </time> 1105 </div> 1106 <!--[if ENDBLOCK]><![endif]--> <div class="group relative grow"> 1107 <h3 class="mt-3 text-lg/6 font-semibold text-gray-900 group-hover:text-accent dark:text-white dark:group-hover:text-accent"> 1108 <a href="/blog/compost-ecotrivelo-chamonix-spring-2025" wire:navigate> 1109 <span class="absolute inset-0"></span> 1110 How Compost is Transforming Chamonix's Gardens 1111 </a> 1112 </h3> 1113 <!--[if BLOCK]><![endif]--> <p class="mt-5 line-clamp-5 text-sm/6 text-gray-600 dark:text-gray-400">Feature on Ecotrivélo's composting initiative, which collected 79 tonnes of food waste in 2024. The organization produced 20 tonnes of mature compost available this spring for local gardeners.</p> 1114 <!--[if ENDBLOCK]><![endif]--> </div> 1115 </div> 1116</article> 1117</div> 1118</div> 1119 </div> 1120 <div wire:key="blog-card-12" class="contents"> 1121 <div 1122 class=" -m-1.5 grid grid-cols-1 shadow-[inset_0_0_2px_1px_#ffffff4d] ring-1 ring-black/5" 1123> 1124<div class="grid grid-cols-1 p-1.5 shadow-md shadow-black/5 dark:shadow-none"> 1125<article class=" group flex h-full flex-col items-start justify-between overflow-hidden bg-white shadow-xl ring-1 ring-black/5 dark:bg-gray-800 dark:shadow-none dark:ring-white/10"> 1126 1127 <a class="relative block w-full overflow-hidden" href="/blog/torrent-de-boue-mudslide-in-saint-jean-daulps" wire:navigate> 1128 <div 1129 class="aspect-video w-full bg-gray-100 sm:aspect-2/1 lg:aspect-3/2 dark:bg-gray-800" 1130 data-blog-image-cell 1131 data-page-id="12" 1132 data-page-alt="Torrent de Boue: Mudslide in Saint-Jean-d'Aulps" 1133 data-img-class="aspect-video w-full bg-gray-100 object-cover transition-transform duration-300 group-hover:scale-105 sm:aspect-2/1 lg:aspect-3/2 dark:bg-gray-800" 1134 style="background: linear-gradient(90deg, #f3f4f6 25%, #e5e7eb 50%, #f3f4f6 75%); background-size: 200% 100%; animation: lazy-image-skeleton 1.4s ease-in-out infinite;" 1135 aria-busy="true" 1136 ></div> 1137 <div class="absolute inset-0 inset-ring inset-ring-gray-900/10 dark:inset-ring-white/10"></div> 1138 </a> 1139 <div class="flex w-full max-w-xl grow flex-col justify-between p-6 [&>*:first-child]:mt-0"> 1140 1141 <!--[if BLOCK]><![endif]--> <div class="mt-8 flex items-center gap-x-4 text-xs"> 1142 <time class="text-gray-500 dark:text-gray-400" datetime="2025-03-24"> 1143 24 Mar 2025 1144 </time> 1145 </div> 1146 <!--[if ENDBLOCK]><![endif]--> <div class="group relative grow"> 1147 <h3 class="mt-3 text-lg/6 font-semibold text-gray-900 group-hover:text-accent dark:text-white dark:group-hover:text-accent"> 1148 <a href="/blog/torrent-de-boue-mudslide-in-saint-jean-daulps" wire:navigate>
1149 <span class="absolute inset-0"></span> 1150 Torrent de Boue: Mudslide in Saint-Jean-d'Aulps 1151 </a> 1152 </h3> 1153 <!--[if BLOCK]><![endif]--> <p class="mt-5 line-clamp-5 text-sm/6 text-gray-600 dark:text-gray-400">Historical account of a 1966 mudslide event in the Vallée d'Aulps, examining geological risks in Alpine communities and natural disaster preparedness.</p> 1154 <!--[if ENDBLOCK]><![endif]--> </div> 1155 </div> 1156</article> 1157</div> 1158</div> 1159 </div> 1160 <div wire:key="blog-card-13" class="contents"> 1161 <div 1162 class=" -m-1.5 grid grid-cols-1 shadow-[inset_0_0_2px_1px_#ffffff4d] ring-1 ring-black/5" 1163> 1164<div class="grid grid-cols-1 p-1.5 shadow-md shadow-black/5 dark:shadow-none"> 1165<article class=" group flex h-full flex-col items-start justify-between overflow-hidden bg-white shadow-xl ring-1 ring-black/5 dark:bg-gray-800 dark:shadow-none dark:ring-white/10"> 1166 1167 <a class="relative block w-full overflow-hidden" href="/blog/what-do-you-need-to-know-about-st-jean-daulps" wire:navigate> 1168 <div 1169 class="aspect-video w-full bg-gray-100 sm:aspect-2/1 lg:aspect-3/2 dark:bg-gray-800" 1170 data-blog-image-cell 1171 data-page-id="13" 1172 data-page-alt="What Do You Need to Know About St Jean d'Aulps?" 1173 data-img-class="aspect-video w-full bg-gray-100 object-cover transition-transform duration-300 group-hover:scale-105 sm:aspect-2/1 lg:aspect-3/2 dark:bg-gray-800" 1174 style="background: linear-gradient(90deg, #f3f4f6 25%, #e5e7eb 50%, #f3f4f6 75%); background-size: 200% 100%; animation: lazy-image-skeleton 1.4s ease-in-out infinite;" 1175 aria-busy="true" 1176 ></div> 1177 <div class="absolute inset-0 inset-ring inset-ring-gray-900/10 dark:inset-ring-white/10"></div> 1178 </a> 1179 <div class="flex w-full max-w-xl grow flex-col justify-between p-6 [&>*:first-child]:mt-0"> 1180 1181 <!--[if BLOCK]><![endif]--> <div class="mt-8 flex items-center gap-x-4 text-xs"> 1182 <time class="text-gray-500 dark:text-gray-400" datetime="2024-10-22"> 1183 22 Oct 2024 1184 </time> 1185 </div> 1186 <!--[if ENDBLOCK]><![endif]--> <div class="group relative grow"> 1187 <h3 class="mt-3 text-lg/6 font-semibold text-gray-900 group-hover:text-accent dark:text-white dark:group-hover:text-accent"> 1188 <a href="/blog/what-do-you-need-to-know-about-st-jean-daulps" wire:navigate> 1189 <span class="absolute inset-0"></span> 1190 What Do You Need to Know About St Jean d'Aulps? 1191 </a> 1192 </h3> 1193 <!--[if BLOCK]><![endif]--> <p class="mt-5 line-clamp-5 text-sm/6 text-gray-600 dark:text-gray-400">Community profile covering village amenities, schools, skiing infrastructure, and historical development. Population growth of 30% since 2015 reflects increasing appeal.</p> 1194 <!--[if ENDBLOCK]><![endif]--> </div> 1195 </div> 1196</article> 1197</div> 1198</div> 1199 </div> 1200 <div wire:key="blog-card-14" class="contents"> 1201 <div 1202 class=" -m-1.5 grid grid-cols-1 shadow-[inset_0_0_2px_1px_#ffffff4d] ring-1 ring-black/5" 1203> 1204<div class="grid grid-cols-1 p-1.5 shadow-md shadow-black/5 dark:shadow-none"> 1205<article class=" group flex h-full flex-col items-start justify-between overflow-hidden bg-white shadow-xl ring-1 ring-black/5 dark:bg-gray-800 dark:shadow-none dark:ring-white/10"> 1206 1207 <a class="relative block w-full overflow-hidden" href="/blog/using-the-train-from-thonon-to-geneva-airport" wire:navigate> 1208 <div 1209 class="aspect-video w-full bg-gray-100 sm:aspect-2/1 lg:aspect-3/2 dark:bg-gray-800" 1210 data-blog-image-cell 1211 data-page-id="14" 1212 data-page-alt="Using the Train from Thonon to Geneva Airport" 1213 data-img-class="aspect-video w-full bg-gray-100 object-cover transition-transform duration-300 group-hover:scale-105 sm:aspect-2/1 lg:aspect-3/2 dark:bg-gray-800" 1214 style="background: linear-gradient(90deg, #f3f4f6 25%, #e5e7eb 50%, #f3f4f6 75%); background-size: 200% 100%; animation: lazy-image-skeleton 1.4s ease-in-out infinite;" 1215 aria-busy="true" 1216 ></div> 1217 <div class="absolute inset-0 inset-ring inset-ring-gray-900/10 dark:inset-ring-white/10"></div> 1218 </a> 1219 <div class="flex w-full max-w-xl grow flex-col justify-between p-6 [&>*:first-child]:mt-0"> 1220 1221 <!--[if BLOCK]><![endif]--> <div class="mt-8 flex items-center gap-x-4 text-xs"> 1222 <time class="text-gray-500 dark:text-gray-400" datetime="2024-10-14"> 1223 14 Oct 2024 1224 </time> 1225 </div> 1226 <!--[if ENDBLOCK]><![endif]--> <div class="group relative grow"> 1227 <h3 class="mt-3 text-lg/6 font-semibold text-gray-900 group-hover:text-accent dark:text-white dark:group-hover:text-accent"> 1228 <a href="/blog/using-the-train-from-thonon-to-geneva-airport" wire:navigate>
1229 <span class="absolute inset-0"></span> 1230 Using the Train from Thonon to Geneva Airport 1231 </a> 1232 </h3> 1233 <!--[if BLOCK]><![endif]--> <p class="mt-5 line-clamp-5 text-sm/6 text-gray-600 dark:text-gray-400">Practical guide to Léman Express rail service connecting Alpine villages to Geneva airport, offering alternatives to costly parking and long driving times.</p> 1234 <!--[if ENDBLOCK]><![endif]--> </div> 1235 </div> 1236</article> 1237</div> 1238</div> 1239 </div> 1240 <div wire:key="blog-card-15" class="contents"> 1241 <div 1242 class=" -m-1.5 grid grid-cols-1 shadow-[inset_0_0_2px_1px_#ffffff4d] ring-1 ring-black/5" 1243> 1244<div class="grid grid-cols-1 p-1.5 shadow-md shadow-black/5 dark:shadow-none"> 1245<article class=" group flex h-full flex-col items-start justify-between overflow-hidden bg-white shadow-xl ring-1 ring-black/5 dark:bg-gray-800 dark:shadow-none dark:ring-white/10"> 1246 1247 <a class="relative block w-full overflow-hidden" href="/blog/supporting-ecotrivelo-sustainable-waste-management-chamonix" wire:navigate> 1248 <div 1249 class="aspect-video w-full bg-gray-100 sm:aspect-2/1 lg:aspect-3/2 dark:bg-gray-800" 1250 data-blog-image-cell 1251 data-page-id="15" 1252 data-page-alt="Ecotrivelo in Chamonix" 1253 data-img-class="aspect-video w-full bg-gray-100 object-cover transition-transform duration-300 group-hover:scale-105 sm:aspect-2/1 lg:aspect-3/2 dark:bg-gray-800" 1254 style="background: linear-gradient(90deg, #f3f4f6 25%, #e5e7eb 50%, #f3f4f6 75%); background-size: 200% 100%; animation: lazy-image-skeleton 1.4s ease-in-out infinite;" 1255 aria-busy="true" 1256 ></div> 1257 <div class="absolute inset-0 inset-ring inset-ring-gray-900/10 dark:inset-ring-white/10"></div> 1258 </a> 1259 <div class="flex w-full max-w-xl grow flex-col justify-between p-6 [&>*:first-child]:mt-0"> 1260 1261 <!--[if BLOCK]><![endif]--> <div class="mt-8 flex items-center gap-x-4 text-xs"> 1262 <time class="text-gray-500 dark:text-gray-400" datetime="2024-09-12"> 1263 12 Sep 2024 1264 </time> 1265 </div> 1266 <!--[if ENDBLOCK]><![endif]--> <div class="group relative grow"> 1267 <h3 class="mt-3 text-lg/6 font-semibold text-gray-900 group-hover:text-accent dark:text-white dark:group-hover:text-accent"> 1268 <a href="/blog/supporting-ecotrivelo-sustainable-waste-management-chamonix" wire:navigate> 1269 <span class="absolute inset-0"></span> 1270 Ecotrivelo in Chamonix 1271 </a> 1272 </h3> 1273 <!--[if BLOCK]><![endif]--> <p class="mt-5 line-clamp-5 text-sm/6 text-gray-600 dark:text-gray-400">Overview of sustainable waste management organization collecting organic material by bicycle and producing nutrient-rich compost for local use.</p> 1274 <!--[if ENDBLOCK]><![endif]--> </div> 1275 </div> 1276</article> 1277</div> 1278</div> 1279 </div> 1280 <div wire:key="blog-card-16" class="contents"> 1281 <div 1282 class=" -m-1.5 grid grid-cols-1 shadow-[inset_0_0_2px_1px_#ffffff4d] ring-1 ring-black/5" 1283> 1284<div class="grid grid-cols-1 p-1.5 shadow-md shadow-black/5 dark:shadow-none"> 1285<article class=" group flex h-full flex-col items-start justify-between overflow-hidden bg-white shadow-xl ring-1 ring-black/5 dark:bg-gray-800 dark:shadow-none dark:ring-white/10"> 1286 1287 <a class="relative block w-full overflow-hidden" href="/blog/alpine-property-market-report-april-2024" wire:navigate> 1288 <div 1289 class="aspect-video w-full bg-gray-100 sm:aspect-2/1 lg:aspect-3/2 dark:bg-gray-800" 1290 data-blog-image-cell 1291 data-page-id="16" 1292 data-page-alt="Alpine Property Market Report April 2024" 1293 data-img-class="aspect-video w-full bg-gray-100 object-cover transition-transform duration-300 group-hover:scale-105 sm:aspect-2/1 lg:aspect-3/2 dark:bg-gray-800" 1294 style="background: linear-gradient(90deg, #f3f4f6 25%, #e5e7eb 50%, #f3f4f6 75%); background-size: 200% 100%; animation: lazy-image-skeleton 1.4s ease-in-out infinite;" 1295 aria-busy="true" 1296 ></div> 1297 <div class="absolute inset-0 inset-ring inset-ring-gray-900/10 dark:inset-ring-white/10"></div> 1298 </a> 1299 <div class="flex w-full max-w-xl grow flex-col justify-between p-6 [&>*:first-child]:mt-0"> 1300 1301 <!--[if BLOCK]><![endif]--> <div class="mt-8 flex items-center gap-x-4 text-xs"> 1302 <time class="text-gray-500 dark:text-gray-400" datetime="2024-04-23"> 1303 23 Apr 2024 1304 </time> 1305 </div> 1306 <!--[if ENDBLOCK]><![endif]--> <div class="group relative grow"> 1307 <h3 class="mt-3 text-lg/6 font-semibold text-gray-900 group-hover:text-accent dark:text-white dark:group-hover:text-accent"> 1308 <a href="/blog/alpine-property-market-report-april-2024" wire:navigate>
1309 <span class="absolute inset-0"></span> 1310 Alpine Property Market Report April 2024 1311 </a> 1312 </h3> 1313 <!--[if BLOCK]><![endif]--> <p class="mt-5 line-clamp-5 text-sm/6 text-gray-600 dark:text-gray-400">Seasonal analysis with regional price trends showing 18% average increases over two years. Discussion of mortgage accessibility improvements supporting market activity.</p> 1314 <!--[if ENDBLOCK]><![endif]--> </div> 1315 </div> 1316</article> 1317</div> 1318</div> 1319 </div> 1320 <!--[if ENDBLOCK]><![endif]--> </div> 1321 1322 <!--[if BLOCK]><![endif]--> <div class="mt-8"> 1323 <div> 1324 <!--[if BLOCK]><![endif]--> <nav role="navigation" aria-label="Pagination Navigation" class="flex items-center justify-between"> 1325 <div class="flex justify-between flex-1 sm:hidden"> 1326 <span> 1327 <!--[if BLOCK]><![endif]--> <span class="relative inline-flex items-center px-4 py-2 text-sm font-medium text-gray-500 bg-white border border-gray-300 cursor-default leading-5 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-300"> 1328 « Previous 1329 </span> 1330 <!--[if ENDBLOCK]><![endif]--> </span> 1331 1332 <span> 1333 <!--[if BLOCK]><![endif]--> <button type="button" wire:click="nextPage('page')" x-on:click=" ($el.closest('body') || document.querySelector('body')).scrollIntoView()" wire:loading.attr="disabled" dusk="nextPage.before" class="relative inline-flex items-center px-4 py-2 ml-3 text-sm font-medium text-gray-700 bg-white border border-gray-300 leading-5 hover:text-gray-500 focus:outline-none focus:ring ring-primary-300 focus:border-primary-300 active:bg-gray-100 active:text-gray-700 transition ease-in-out duration-150 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-300 dark:active:bg-gray-700 dark:active:text-gray-300"> 1334 Next » 1335 </button> 1336 <!--[if ENDBLOCK]><![endif]--> </span> 1337 </div> 1338 1339 <div class="hidden sm:flex-1 sm:flex sm:items-center sm:justify-between"> 1340 <div> 1341 <p class="text-sm text-gray-700 leading-5 dark:text-gray-400"> 1342 <span>Showing</span> 1343 <span class="font-medium">1</span> 1344 <span>to</span> 1345 <span class="font-medium">9</span> 1346 <span>of</span> 1347 <span class="font-medium">139</span> 1348 <span>results</span> 1349 </p> 1350 </div> 1351 1352 <div> 1353 <span class="relative z-0 inline-flex rtl:flex-row-reverse shadow-sm"> 1354 <span> 1355 1356 <!--[if BLOCK]><![endif]--> <span aria-disabled="true" aria-label="&laquo; Previous"> 1357 <span class="relative inline-flex items-center px-2 py-2 text-sm font-medium text-gray-500 bg-white border border-gray-300 cursor-default leading-5 dark:bg-gray-800 dark:border-gray-600" aria-hidden="true"> 1358 <svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20"> 1359 <path fill-rule="evenodd" d="M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z" clip-rule="evenodd" /> 1360 </svg> 1361 </span> 1362 </span> 1363 <!--[if ENDBLOCK]><![endif]--> </span> 1364 1365 1366 <!--[if BLOCK]><![endif]--> 1367 <!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]--> 1368 1369 <!--[if BLOCK]><![endif]--> <!--[if BLOCK]><![endif]-->
1369 <span wire:key="paginator-page-page1"> 1370 <!--[if BLOCK]><![endif]--> <span aria-current="page"> 1371 <span class="relative inline-flex items-center px-4 py-2 -ml-px text-sm font-medium bg-primary-600 text-white border border-primary-600 cursor-default leading-5">1</span> 1372 </span> 1373 <!--[if ENDBLOCK]><![endif]--> </span> 1374 <span wire:key="paginator-page-page2"> 1375 <!--[if BLOCK]><![endif]--> <button type="button" wire:click="gotoPage(2, 'page')" x-on:click=" ($el.closest('body') || document.querySelector('body')).scrollIntoView()" class="relative inline-flex items-center px-4 py-2 -ml-px text-sm font-medium text-gray-700 bg-white border border-gray-300 leading-5 hover:text-gray-500 hover:bg-gray-50 focus:z-10 focus:outline-none focus:border-primary-300 focus:ring ring-primary-300 active:bg-gray-100 active:text-gray-700 transition ease-in-out duration-150 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-400 dark:hover:text-gray-300 dark:active:bg-gray-700" aria-label="Go to page 2"> 1376 2 1377 </button> 1378 <!--[if ENDBLOCK]><![endif]--> </span> 1379 <span wire:key="paginator-page-page3"> 1380 <!--[if BLOCK]><![endif]--> <button type="button" wire:click="gotoPage(3, 'page')" x-on:click=" ($el.closest('body') || document.querySelector('body')).scrollIntoView()" class="relative inline-flex items-center px-4 py-2 -ml-px text-sm font-medium text-gray-700 bg-white border border-gray-300 leading-5 hover:text-gray-500 hover:bg-gray-50 focus:z-10 focus:outline-none focus:border-primary-300 focus:ring ring-primary-300 active:bg-gray-100 active:text-gray-700 transition ease-in-out duration-150 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-400 dark:hover:text-gray-300 dark:active:bg-gray-700" aria-label="Go to page 3"> 1381 3 1382 </button> 1383 <!--[if ENDBLOCK]><![endif]--> </span> 1384 <span wire:key="paginator-page-page4"> 1385 <!--[if BLOCK]><![endif]--> <button type="button" wire:click="gotoPage(4, 'page')" x-on:click=" ($el.closest('body') || document.querySelector('body')).scrollIntoView()" class="relative inline-flex items-center px-4 py-2 -ml-px text-sm font-medium text-gray-700 bg-white border border-gray-300 leading-5 hover:text-gray-500 hover:bg-gray-50 focus:z-10 focus:outline-none focus:border-primary-300 focus:ring ring-primary-300 active:bg-gray-100 active:text-gray-700 transition ease-in-out duration-150 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-400 dark:hover:text-gray-300 dark:active:bg-gray-700" aria-label="Go to page 4"> 1386 4 1387 </button> 1388 <!--[if ENDBLOCK]><![endif]--> </span> 1389 <span wire:key="paginator-page-page5"> 1390 <!--[if BLOCK]><![endif]--> <button type="button" wire:click="gotoPage(5, 'page')" x-on:click=" ($el.closest('body') || document.querySelector('body')).scrollIntoView()" class="relative inline-flex items-center px-4 py-2 -ml-px text-sm font-medium text-gray-700 bg-white border border-gray-300 leading-5 hover:text-gray-500 hover:bg-gray-50 focus:z-10 focus:outline-none focus:border-primary-300 focus:ring ring-primary-300 active:bg-gray-100 active:text-gray-700 transition ease-in-out duration-150 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-400 dark:hover:text-gray-300 dark:active:bg-gray-700" aria-label="Go to page 5"> 1391 5 1392 </button> 1393 <!--[if ENDBLOCK]><![endif]--> </span> 1394 <sp
1394an wire:key="paginator-page-page6"> 1395 <!--[if BLOCK]><![endif]--> <button type="button" wire:click="gotoPage(6, 'page')" x-on:click=" ($el.closest('body') || document.querySelector('body')).scrollIntoView()" class="relative inline-flex items-center px-4 py-2 -ml-px text-sm font-medium text-gray-700 bg-white border border-gray-300 leading-5 hover:text-gray-500 hover:bg-gray-50 focus:z-10 focus:outline-none focus:border-primary-300 focus:ring ring-primary-300 active:bg-gray-100 active:text-gray-700 transition ease-in-out duration-150 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-400 dark:hover:text-gray-300 dark:active:bg-gray-700" aria-label="Go to page 6"> 1396 6 1397 </button> 1398 <!--[if ENDBLOCK]><![endif]--> </span> 1399 <span wire:key="paginator-page-page7"> 1400 <!--[if BLOCK]><![endif]--> <button type="button" wire:click="gotoPage(7, 'page')" x-on:click=" ($el.closest('body') || document.querySelector('body')).scrollIntoView()" class="relative inline-flex items-center px-4 py-2 -ml-px text-sm font-medium text-gray-700 bg-white border border-gray-300 leading-5 hover:text-gray-500 hover:bg-gray-50 focus:z-10 focus:outline-none focus:border-primary-300 focus:ring ring-primary-300 active:bg-gray-100 active:text-gray-700 transition ease-in-out duration-150 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-400 dark:hover:text-gray-300 dark:active:bg-gray-700" aria-label="Go to page 7"> 1401 7 1402 </button> 1403 <!--[if ENDBLOCK]><![endif]--> </span> 1404 <span wire:key="paginator-page-page8"> 1405 <!--[if BLOCK]><![endif]--> <button type="button" wire:click="gotoPage(8, 'page')" x-on:click=" ($el.closest('body') || document.querySelector('body')).scrollIntoView()" class="relative inline-flex items-center px-4 py-2 -ml-px text-sm font-medium text-gray-700 bg-white border border-gray-300 leading-5 hover:text-gray-500 hover:bg-gray-50 focus:z-10 focus:outline-none focus:border-primary-300 focus:ring ring-primary-300 active:bg-gray-100 active:text-gray-700 transition ease-in-out duration-150 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-400 dark:hover:text-gray-300 dark:active:bg-gray-700" aria-label="Go to page 8"> 1406 8 1407 </button> 1408 <!--[if ENDBLOCK]><![endif]--> </span> 1409 <span wire:key="paginator-page-page9"> 1410 <!--[if BLOCK]><![endif]--> <button type="button" wire:click="gotoPage(9, 'page')" x-on:click=" ($el.closest('body') || document.querySelector('body')).scrollIntoView()" class="relative inline-flex items-center px-4 py-2 -ml-px text-sm font-medium text-gray-700 bg-white border border-gray-300 leading-5 hover:text-gray-500 hover:bg-gray-50 focus:z-10 focus:outline-none focus:border-primary-300 focus:ring ring-primary-300 active:bg-gray-100 active:text-gray-700 transition ease-in-out duration-150 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-400 dark:hover:text-gray-300 dark:active:bg-gray-700" aria-label="Go to page 9"> 1411 9 1412 </button> 1413 <!--[if ENDBLOCK]><![endif]--> </span> 1414 <sp
1414an wire:key="paginator-page-page10"> 1415 <!--[if BLOCK]><![endif]--> <button type="button" wire:click="gotoPage(10, 'page')" x-on:click=" ($el.closest('body') || document.querySelector('body')).scrollIntoView()" class="relative inline-flex items-center px-4 py-2 -ml-px text-sm font-medium text-gray-700 bg-white border border-gray-300 leading-5 hover:text-gray-500 hover:bg-gray-50 focus:z-10 focus:outline-none focus:border-primary-300 focus:ring ring-primary-300 active:bg-gray-100 active:text-gray-700 transition ease-in-out duration-150 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-400 dark:hover:text-gray-300 dark:active:bg-gray-700" aria-label="Go to page 10"> 1416 10 1417 </button> 1418 <!--[if ENDBLOCK]><![endif]--> </span> 1419 <!--[if ENDBLOCK]><![endif]--> <!--[if ENDBLOCK]><![endif]--> 1420 <!--[if BLOCK]><![endif]--> <span aria-disabled="true"> 1421 <span class="relative inline-flex items-center px-4 py-2 -ml-px text-sm font-medium text-gray-700 bg-white border border-gray-300 cursor-default leading-5 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-300">...</span> 1422 </span> 1423 <!--[if ENDBLOCK]><![endif]--> 1424 1425 <!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]--> 1426 <!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]--> 1427 1428 <!--[if BLOCK]><![endif]--> <!--[if BLOCK]><![endif]--> <span wire:key="paginator-page-page15"> 1429 <!--[if BLOCK]><![endif]--> <button type="button" wire:click="gotoPage(15, 'page')" x-on:click=" ($el.closest('body') || document.querySelector('body')).scrollIntoView()" class="relative inline-flex items-center px-4 py-2 -ml-px text-sm font-medium text-gray-700 bg-white border border-gray-300 leading-5 hover:text-gray-500 hover:bg-gray-50 focus:z-10 focus:outline-none focus:border-primary-300 focus:ring ring-primary-300 active:bg-gray-100 active:text-gray-700 transition ease-in-out duration-150 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-400 dark:hover:text-gray-300 dark:active:bg-gray-700" aria-label="Go to page 15"> 1430 15 1431 </button> 1432 <!--[if ENDBLOCK]><![endif]--> </span> 1433 <span wire:key="paginator-page-page16"> 1434 <!--[if BLOCK]><![endif]--> <button type="button" wire:click="gotoPage(16, 'page')" x-on:click=" ($el.closest('body') || document.querySelector('body')).scrollIntoView()" class="relative inline-flex items-center px-4 py-2 -ml-px text-sm font-medium text-gray-700 bg-white border border-gray-300 leading-5 hover:text-gray-500 hover:bg-gray-50 focus:z-10 focus:outline-none focus:border-primary-300 focus:ring ring-primary-300 active:bg-gray-100 active:text-gray-700 transition ease-in-out duration-150 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-400 dark:hover:text-gray-300 dark:active:bg-gray-700" aria-label="Go to page 16"> 1435 16 1436 </button> 1437 <!--[if ENDBLOCK]><![endif]--> </span> 1438 <!--[if ENDBLOCK]><![endif]--> <!--[if ENDBLOCK]><![endif]--> <!--[if ENDBLOCK]><![endif]-->
1439 <span> 1440 1441 <!--[if BLOCK]><![endif]--> <button type="button" wire:click="nextPage('page')" x-on:click=" ($el.closest('body') || document.querySelector('body')).scrollIntoView()" dusk="nextPage.after" class="relative inline-flex items-center px-2 py-2 -ml-px text-sm font-medium text-gray-500 bg-white border border-gray-300 leading-5 hover:text-gray-400 focus:z-10 focus:outline-none focus:border-primary-300 focus:ring ring-primary-300 active:bg-gray-100 active:text-gray-500 transition ease-in-out duration-150 dark:bg-gray-800 dark:border-gray-600 dark:active:bg-gray-700" aria-label="Next &raquo;"> 1442 <svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20"> 1443 <path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd" /> 1444 </svg> 1445 </button> 1446 <!--[if ENDBLOCK]><![endif]--> </span> 1447 </span> 1448 </div> 1449 </div> 1450 </nav> 1451 <!--[if ENDBLOCK]><![endif]--></div> 1452 1453 </div> 1454 <!--[if ENDBLOCK]><![endif]--> </div> 1455 </div> 1456<!--[if ENDBLOCK]><![endif]--> 1457</div> 1458 <!--[if ENDBLOCK]><![endif]--> <!--[if ENDBLOCK]><![endif]--> 1459 1460 <div class="h-16"></div> 1461 </div> 1462 </div> 1463 </div> 1464 <!--[if ENDBLOCK]><![endif]--> 1465 1466 <!--[if BLOCK]><![endif]--> <!--[if BLOCK]><![endif]--> <section wire:snapshot="{"data":{"form":[{"firstName":"","lastName":"","email":"","phone":"","company":"","subject":"","address":"","budget":"","propertyRef":"","contactMethod":"","message":"","agreement":false,"propertyId":null,"prospection":true,"phoneOptional":false,"propertyTitle":null,"propertyUrl":null,"agentName":null,"propertyReference":null,"enabledFields":[["first_name","last_name","email","phone","subject","message"],{"s":"arr"}],"subjectLabels":[{"buying":"Buying","selling":"Selling","renting":"Renting","valuation":"Valuation","other":"Other"},{"s":"arr"}],"ownerSubjectValues":[[],{"s":"arr"}]},{"class":"App\\Livewire\\Forms\\ContactForm","s":"form"}],"fields":[["first_name","last_name","email","phone","subject","message"],{"s":"arr"}],"justSent":false,"lastSendFailed":false,"throttleMessage":"","modalName":null,"propertyTitle":null,"propertyUrl":null,"agentName":null,"propertyReference":null,"data":[{"id":"5baef29e-9bbd-4dfd-86a5-5925b66a427f","design":"simple-centered","fields":[["first_name","last_name","email","phone","subject","message"],{"s":"arr"}],"heading":"Contact Us","subtitle":"Have a question about a property or looking for something specific? Get in touch with our team.","background":null,"button_label":"Send Message","section_icon":"heroicon-s-envelope","agreement_text":"I agree to the privacy policy and consent to being contacted regarding my enquiry.","subject_options":[[[{"label":"Buying","value":"buying"},{"s":"arr"}],[{"label":"Selling","value":"selling"},{"s":"arr"}],[{"label":"Renting","value":"renting"},{"s":"arr"}],[{"label":"Valuation","value":"valuation"},{"s":"arr"}],[{"label":"Other","value":"other"},{"s":"arr"}]],{"s":"arr"}],"owner_subject_values":[[],{"s":"arr"}]},{"s":"arr"}],"design":null,"estate":null,"page":null,"sample":false,"zone":null,"blockIndex":999,"blockType":"contact"},"memo":{"id":"w79UkDKR2FxiCxEOZVb4","name":"blocks.contact","path":"blog","method":"GET","release":"a-a-a","children":[],"scripts":[],"assets":[],"errors":[],"locale":"en"},"checksum":"a2d0a07eaf4c22af3741e555e53ec1da9e7041214eb854d2ce33d343cada6079"}" wire:effects="{"partials":[]}" wire:id="w79UkDKR2FxiCxEOZVb4" 1467 id="contact" 1468 class="px-4 py-16 sm:px-6 sm:py-20 lg:px-8 dark:bg-gray-900" 1469 > 1470 <div class="mx-auto max-w-2xl"> 1471 1472 <div class="mb-10"> 1473 <div class="flex items-center gap-3"> 1474 <!--[if BLOCK]><![endif]--> <svg class="text-accent size-8" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" data-slot="icon"> 1475 <path d="M1.5 8.67v8.58a3 3 0 0 0 3 3h15a3 3 0 0 0 3-3V8.67l-8.928 5.493a3 3 0 0 1-3.144 0L1.5 8.67Z"/> 1476 <path d="M22.5 6.908V6.75a3 3 0 0 0-3-3h-15a3 3 0 0 0-3 3v.158l9.714 5.978a1.5 1.5 0 0 0 1.572 0L22.5 6.908Z"/> 1477</svg> <!--[if ENDBLOCK]><![endif]--> <h2 class="text-3xl font-bold text-gray-800 dark:text-white">Contact Us</h2> 1478 </div> 1479 <!--[if BLOCK]><![endif]--> <p class="mt-2 text-sm text-gray-600 dark:text-gray-400">Have a question about a property or looking for something specific? Get in touch with our team.</p> 1480 <!--[if ENDBLOCK]><![endif]--> </div> 1481 1482 1483 <!--[if BLOCK]><![endif]--> 1484 <!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]--> 1485 1486 <form wire:submit="save" class="space-y-5"> 1487 <!--[if BLOCK]><![endif]--> <div class="grid grid-cols-1 gap-5 sm:grid-cols-2"> 1488 <!--[if BLOCK]><![endif]--> <ui-field class="min-w-0 [&:not(:has([data-flux-field])):has([data-flux-control][disabled])>[data-flux-label]]:opacity-50 [&:has(>[data-flux-radio-group][disabled])>[data-flux-label]]:opacity-50 [&:has(>[data-flux-checkbox-group][disabled])>[data-flux-label]]:opacity-50 block *:data-flux-label:mb-3 [&>[data-flux-label]:has(+[data-flux-description])]:mb-2 [&>[data-flux-label]+[data-flux-description]]:mt-0 [&>[data-flux-label]+[data-flux-description]]:mb-3 [&>[data-flux-description]:first-child:has(+*)]:mb-3 [&>*:not([data-flux-label])+[data-flux-description]]:mt-3" data-flux-field> 1489 <ui-label class="inline-flex items-center text-sm font-medium [:where(&)]:text-zinc-800 [:where(&)]:dark:text-white [&:has([data-flux-label-trailing])]:flex" data-flux-label> 1490 First name 1491 1492 1493 1494 </ui-label> 1495 1496 1497 <div class="w-full relative block group/input !rounded-none [&_input]:!rounded-none [&_input]:!bg-white dark:[&_input]:!bg-gray-800" data-flux-input> 1498 1499 <input 1500 type="text" 1501 1502 class="w-full border block disabled:shadow-none dark:shadow-none appearance-none text-base sm:text-sm rounded-lg py-2 h-10 leading-[1.375rem] ps-3 pe-3 bg-white dark:bg-white/10 dark:disabled:bg-white/[7%] text-zinc-700 disabled:text-zinc-500 placeholder-zinc-400 disabled:placeholder-zinc-400/70 dark:text-zinc-300 dark:disabled:text-zinc-400 dark:placeholder-zinc-400 dark:disabled:placeholder-zinc-500 shadow-xs border-zinc-200 border-b-zinc-300/80 disabled:border-b-zinc-200 dark:border-white/10 dark:disabled:border-white/5 data-invalid:shadow-none data-invalid:border-red-500 dark:data-invalid:border-red-500 disabled:data-invalid:border-red-500 dark:disabled:data-invalid:border-red-500" required="required" wire:model="form.firstName" autocomplete="given-name" label="First name" 1503 name="form.firstName" data-flux-control 1504 data-flux-group-target 1505 > 1506 1507 </div> 1508 1509 1510 <div role="alert" aria-live="polite" aria-atomic="true" class="mt-3 text-sm font-medium text-red-500 dark:text-red-400 hidden" data-flux-error> 1511 </div> 1512</ui-field> 1513 <!--[if ENDBLOCK]><![endif]--> <!--[if BLOCK]><![endif]--> <ui-field class="min-w-0 [&:not(:has([data-flux-field])):has([data-flux-control][disabled])>[data-flux-label]]:opacity-50 [&:has(>[data-flux-radio-group][disabled])>[data-flux-label]]:opacity-50 [&:has(>[data-flux-checkbox-group][disabled])>[data-flux-label]]:opacity-50 block *:data-flux-label:mb-3 [&>[data-flux-label]:has(+[data-flux-description])]:mb-2 [&>[data-flux-label]+[data-flux-description]]:mt-0 [&>[data-flux-label]+[data-flux-description]]:mb-3 [&>[data-flux-description]:first-child:has(+*)]:mb-3 [&>*:not([data-flux-label])+[data-flux-description]]:mt-3" data-flux-field> 1514 <ui-label class="inline-flex items-center text-sm font-medium [:where(&)]:text-zinc-800 [:where(&)]:dark:text-white [&:has([data-flux-label-trailing])]:flex" data-flux-label> 1515 Last name 1516 1517 1518 1519 </ui-label> 1520 1521 1522 <div class="w-full relative block group/input !rounded-none [&_input]:!rounded-none [&_input]:!bg-white dark:[&_input]:!bg-gray-800" data-flux-input> 1523 1524 <input 1525 type="text" 1526 1527 class="w-full border block disabled:shadow-none dark:shadow-none appearance-none text-base sm:text-sm rounded-lg py-2 h-10 leading-[1.375rem] ps-3 pe-3 bg-white dark:bg-white/10 dark:disabled:bg-white/[7%] text-zinc-700 disabled:text-zinc-500 placeholder-zinc-400 disabled:placeholder-zinc-400/70 dark:text-zinc-300 dark:disabled:text-zinc-400 dark:placeholder-zinc-400 dark:disabled:placeholder-zinc-500 shadow-xs border-zinc-200 border-b-zinc-300/80 disabled:border-b-zinc-200 dark:border-white/10 dark:disabled:border-white/5 data-invalid:shadow-none data-invalid:border-red-500 dark:data-invalid:border-red-500 disabled:data-invalid:border-red-500 dark:disabled:data-invalid:border-red-500" wire:model="form.lastName" autocomplete="family-name" label="Last name" 1528 name="form.lastName" data-flux-control 1529 data-flux-group-target 1530 > 1531 1532 </div> 1533 1534 1535 <div role="alert" aria-live="polite" aria-atomic="true" class="mt-3 text-sm font-medium text-red-500 dark:text-red-400 hidden" data-flux-error> 1536 </div> 1537</ui-field> 1538 <!--[if ENDBLOCK]><![endif]--> </div> 1539 <!--[if ENDBLOCK]><![endif]--> 1540 <!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]--> 1541 <!--[if BLOCK]><![endif]--> <div class="grid grid-cols-1 gap-5 sm:grid-cols-2"> 1542 <!--[if BLOCK]><![endif]--> <ui-field class="min-w-0 [&:not(:has([data-flux-field])):has([data-flux-control][disabled])>[data-flux-label]]:opacity-50 [&:has(>[data-flux-radio-group][disabled])>[data-flux-label]]:opacity-50 [&:has(>[data-flux-checkbox-group][disabled])>[data-flux-label]]:opacity-50 block *:data-flux-label:mb-3 [&>[data-flux-label]:has(+[data-flux-description])]:mb-2 [&>[data-flux-label]+[data-flux-description]]:mt-0 [&>[data-flux-label]+[data-flux-description]]:mb-3 [&>[data-flux-description]:first-child:has(+*)]:mb-3 [&>*:not([data-flux-label])+[data-flux-description]]:mt-3" data-flux-field> 1543 <ui-label class="inline-flex items-center text-sm font-medium [:where(&)]:text-zinc-800 [:where(&)]:dark:text-white [&:has([data-flux-label-trailing])]:flex" data-flux-label> 1544 Email 1545 1546 1547 1548 </ui-label> 1549 1550 1551 <div class="w-full relative block group/input !rounded-none [&_input]:!rounded-none [&_input]:!bg-white dark:[&_input]:!bg-gray-800" data-flux-input> 1552 1553 <input 1554 type="email" 1555 1556 class="w-full border block disabled:shadow-none dark:shadow-none appearance-none text-base sm:text-sm rounded-lg py-2 h-10 leading-[1.375rem] ps-3 pe-3 bg-white dark:bg-white/10 dark:disabled:bg-white/[7%] text-zinc-700 disabled:text-zinc-500 placeholder-zinc-400 disabled:placeholder-zinc-400/70 dark:text-zinc-300 dark:disabled:text-zinc-400 dark:placeholder-zinc-400 dark:disabled:placeholder-zinc-500 shadow-xs border-zinc-200 border-b-zinc-300/80 disabled:border-b-zinc-200 dark:border-white/10 dark:disabled:border-white/5 data-invalid:shadow-none data-invalid:border-red-500 dark:data-invalid:border-red-500 disabled:data-invalid:border-red-500 dark:disabled:data-invalid:border-red-500" required="required" wire:model="form.email" autocomplete="email" label="Email" 1557 name="form.email" data-flux-control 1558 data-flux-group-target 1559 > 1560 1561 </div> 1562 1563 1564 <div role="alert" aria-live="polite" aria-atomic="true" class="mt-3 text-sm font-medium text-red-500 dark:text-red-400 hidden" data-flux-error> 1565 </div> 1566</ui-field> 1567 <!--[if ENDBLOCK]><![endif]--> <!--[if BLOCK]><![endif]--> <ui-field class="min-w-0 [&:not(:has([data-flux-field])):has([data-flux-control][disabled])>[data-flux-label]]:opacity-50 [&:has(>[data-flux-radio-group][disabled])>[data-flux-label]]:opacity-50 [&:has(>[data-flux-checkbox-group][disabled])>[data-flux-label]]:opacity-50 block *:data-flux-label:mb-3 [&>[data-flux-label]:has(+[data-flux-description])]:mb-2 [&>[data-flux-label]+[data-flux-description]]:mt-0 [&>[data-flux-label]+[data-flux-description]]:mb-3 [&>[data-flux-description]:first-child:has(+*)]:mb-3 [&>*:not([data-flux-label])+[data-flux-description]]:mt-3" data-flux-field> 1568 <ui-label class="inline-flex items-center text-sm font-medium [:where(&)]:text-zinc-800 [:where(&)]:dark:text-white [&:has([data-flux-label-trailing])]:flex" data-flux-label> 1569 Phone 1570 1571 1572 1573 </ui-label> 1574 1575 1576 <div class="w-full relative block group/input !rounded-none [&_input]:!rounded-none [&_input]:!bg-white dark:[&_input]:!bg-gray-800" data-flux-input> 1577 1578 <input 1579 type="tel" 1580 1581 class="w-full border block disabled:shadow-none dark:shadow-none appearance-none text-base sm:text-sm rounded-lg py-2 h-10 leading-[1.375rem] ps-3 pe-3 bg-white dark:bg-white/10 dark:disabled:bg-white/[7%] text-zinc-700 disabled:text-zinc-500 placeholder-zinc-400 disabled:placeholder-zinc-
1581400/70 dark:text-zinc-300 dark:disabled:text-zinc-400 dark:placeholder-zinc-400 dark:disabled:placeholder-zinc-500 shadow-xs border-zinc-200 border-b-zinc-300/80 disabled:border-b-zinc-200 dark:border-white/10 dark:disabled:border-white/5 data-invalid:shadow-none data-invalid:border-red-500 dark:data-invalid:border-red-500 disabled:data-invalid:border-red-500 dark:disabled:data-invalid:border-red-500" wire:model="form.phone" autocomplete="tel" label="Phone" 1582 name="form.phone" data-flux-control 1583 data-flux-group-target 1584 > 1585 1586 </div> 1587 1588 1589 <div role="alert" aria-live="polite" aria-atomic="true" class="mt-3 text-sm font-medium text-red-500 dark:text-red-400 hidden" data-flux-error> 1590 </div> 1591</ui-field> 1592 <!--[if ENDBLOCK]><![endif]--> </div> 1593 <!--[if ENDBLOCK]><![endif]--> 1594 <!--[if BLOCK]><![endif]--> <!--[if BLOCK]><![endif]--> <ui-field class="min-w-0 [&:not(:has([data-flux-field])):has([data-flux-control][disabled])>[data-flux-label]]:opacity-50 [&:has(>[data-flux-radio-group][disabled])>[data-flux-label]]:opacity-50 [&:has(>[data-flux-checkbox-group][disabled])>[data-flux-label]]:opacity-50 block *:data-flux-label:mb-3 [&>[data-flux-label]:has(+[data-flux-description])]:mb-2 [&>[data-flux-label]+[data-flux-description]]:mt-0 [&>[data-flux-label]+[data-flux-description]]:mb-3 [&>[data-flux-description]:first-child:has(+*)]:mb-3 [&>*:not([data-flux-label])+[data-flux-description]]:mt-3" data-flux-field> 1595 <ui-label class="inline-flex items-center text-sm font-medium [:where(&)]:text-zinc-800 [:where(&)]:dark:text-white [&:has([data-flux-label-trailing])]:flex" data-flux-label> 1596 Subject 1597 1598 1599 1600 </ui-label> 1601 1602 1603 <select 1604 class="appearance-none [:where(&)]:w-full ps-3 pe-10 block h-10 py-2 text-base sm:text-sm leading-[1.375rem] rounded-lg shadow-xs border bg-white dark:bg-white/10 dark:disabled:bg-white/[7%] text-zinc-700 dark:text-zinc-300 disabled:text-zinc-500 dark:disabled:text-zinc-400 has-[option.placeholder:checked]:text-zinc-400 dark:has-[option.placeholder:checked]:text-zinc-400 dark:[&_option]:bg-zinc-700 dark:[&_option]:text-white disabled:shadow-none border border-zinc-200 border-b-zinc-300/80 dark:border-white/10 !rounded-none !bg-white dark:!bg-gray-800" wire:model="form.subject" label="Subject" 1605 name="form.subject" data-flux-control 1606 data-flux-select-native 1607 data-flux-group-target 1608> 1609 <option value="" disabled selected class="placeholder">Select a subject...</option> 1610 1611 <!--[if BLOCK]><![endif]--> <option 1612 1613 value="buying" wire:key="buying" >Buying</option> <option 1614 1615 value="selling" wire:key="selling" >Selling</option> <option 1616 1617 value="renting" wire:key="renting" >Renting</option> <option 1618 1619 value="valuation" wire:key="valuation" >Valuation</option> <option 1620 1621 value="other" wire:key="other" >Other</option> <!--[if ENDBLOCK]><![endif]--> 1622</select> 1623 1624 1625 <div role="alert" aria-live="polite" aria-atomic="true" class="mt-3 text-sm font-medium text-red-500 dark:text-red-400 hidden" data-flux-error> 1626 </div> 1627</ui-field> 1628 <!--[if ENDBLOCK]><![endif]--> <!--[if ENDBLOCK]><![endif]--> 1629 <!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]--> 1630 <!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]--> 1631 <!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]--> 1632 <!--[if BLOCK]><![endif]--> 1633 <ui-field class="min-w-0 [&:not(:has([data-flux-field])):has([data-flux-control][disabled])>[data-flux-label]]:opacity-50 [&:has(>[data-flux-radio-group][disabled])>[data-flux-label]]:opacity-50 [&:has(>[data-flux-checkbox-group][disabled])>[data-flux-label]]:opacity-50 block *:data-flux-label:mb-3 [&>[data-flux-label]:has(+[data-flux-description])]:mb-2 [&>[data-flux-label]+[data-flux-description]]:mt-0 [&>[data-flux-label]+[data-flux-description]]:mb-3 [&>[data-flux-description]:first-child:has(+*)]:mb-3 [&>*:not([data-flux-label])+[data-flux-description]]:mt-3" data-flux-field> 1634 <ui-label class="inline-flex items-center text-sm font-medium [:where(&)]:text-zinc-800 [:where(&)]:dark:text-white [&:has([data-flux-label-trailing])]:flex" data-flux-label> 1635 Message 1636 1637 1638 1639 </ui-label> 1640 1641 <ui-description class="text-sm text-zinc-500 dark:text-white/60" data-flux-description> 1642 Tell us what you're looking for â e.g. preferred location, property type, budget range, timeframe, must-haves... 1643</ui-description> 1644 1645 <textarea 1646 class="block p-3 w-full shadow-xs disabled:shadow-none border rounded-lg bg-white dark:bg-white/10 dark:disabled:bg-white/[7%] resize-y text-base sm:text-sm text-zinc-700 disabled:text-zinc-500 placeholder-zinc-400 disabled:placeholder-zinc-400/70 dark:text-zinc-300 dark:disabled:text-zinc-400 dark:placeholder-zinc-400 dark:disabled:placeholder-zinc-500 border-zinc-200 border-b-zinc-300/80 dark:border-white/10 data-invalid:shadow-none data-invalid:border-red-500 dark:data-invalid:border-red-500 !rounded-none [&_textarea]:!rounded-none [&_textarea]:!bg-white dark:[&_textarea]:!bg-gray-800" required="required" wire:model="form.message" label="Message" description="Tell us what you're looking for â e.g. preferred location, property type, budget range, timeframe, must-haves..." 1647 rows="5" 1648 name="form.message" data-flux-control 1649 data-flux-textarea 1650 ></textarea> 1651 1652 1653 <div role="alert" aria-live="polite" aria-atomic="true" class="mt-3 text-sm font-medium text-red-500 dark:text-red-400 hidden" data-flux-error> 1654 </div> 1655</ui-field> 1656 <!--[if ENDBLOCK]><![endif]--> 1657 <!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]--> 1658 1659 <div class="flex items-center justify-between gap-4"> 1660 <div class="flex-1 text-sm text-red-600 dark:text-red-400"></div> 1661 <button type="submit" class="relative items-center font-medium justify-center whitespace-nowrap disabled:opacity-50 dark:disabled:opacity-50 disabled:cursor-default disabled:pointer-events-none disabled:shadow-none justify-center h-10 text-sm rounded-lg gap-2 ps-4 pe-4 inline-flex bg-[var(--color-accent)] hover:bg-[color-mix(in_oklab,_var(--color-accent),_transparent_10%)] text-[var(--color-accent-foreground)] border border-black/10 dark:border-0 shadow-[inset_0px_1px_--theme(--color-white/.2)] [[data-flux-button-group]_&]:border-e-0 [:is([data-flux-button-group]>&:last-child,_[data-flux-button-group]_:last-child>&)]:border-e-[1px] dark:[:is([data-flux-button-group]>&:last-child,_[data-flux-button-group]_:last-child>&)]:border-e-0 [:is([data-flux-button-group]>&:not(:first-child),_[data-flux-button-group]_:not(:first-child)>&)]:border-s-[1px]! [:is([data-flux-button-group]>&:not(:first-child),_[data-flux-button-group]_:not(:first-child)>&)]:border-s-[color-mix(in_srgb,var(--color-accent-foreground),transparent_85%)] *:transition-opacity [&[disabled]>:not([data-flux-loading-indicator])]:opacity-0 [&[disabled]>[data-flux-loading-indicator]]:opacity-100 [&[disabled]]:pointer-events-none !rounded-none" data-flux-button="data-flux-button" data-flux-group-target="data-flux-group-target"> 1662 <div class="absolute inset-0 flex items-center justify-center opacity-0" data-flux-loading-indicator> 1663 <svg class="shrink-0 [:where(&)]:size-4 animate-spin" data-flux-icon xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" aria-hidden="true" data-slot="icon"> 1664 <circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle> 1665 <path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path> 1666</svg> 1667 </div> 1668 1669 1670 1671
1672 <span><span wire:loading.remove wire:target="save">Send Message</span> 1673 <span wire:loading wire:target="save">Sending...</span></span> 1674 </button> 1675 </div> 1676 </form> 1677 <!--[if ENDBLOCK]><![endif]--> </div> 1678</section> 1679 <footer wire:snapshot="{"data":{"data":[{"id":"a6787a15-2423-42d2-b16f-ecf8f1c473bc","email":"[email protected]","design":"four-columns-with-socials-bellow","address":"627 route du Jourdil\n74430 Saint-Jean-d'Aulps, France","columns":[[[{"links":[[[{"url":"https:\/\/alpine-property.com\/our-properties\/portes-du-soleil\/morzine","label":"Morzine","page_id":159,"link_type":"custom","page_suffix":"?city=Morzine"},{"s":"arr"}],[{"url":"https:\/\/alpine-property.com\/our-properties\/portes-du-soleil\/les-gets","label":"Les Gets","page_id":159,"link_type":"custom","page_suffix":"?city=Les+Gets"},{"s":"arr"}],[{"url":"https:\/\/alpine-property.com\/our-properties\/portes-du-soleil\/chatel-vallee","label":"Ch\u00e2tel","page_id":159,"link_type":"custom","page_suffix":"?city=Ch%C3%A2tel"},{"s":"arr"}],[{"url":"https:\/\/alpine-property.com\/our-properties\/grand-massif\/samoens-vallee","label":"Samo\u00ebns","page_id":159,"link_type":"custom","page_suffix":"?city=Samo%C3%ABns"},{"s":"arr"}],[{"url":"https:\/\/alpine-property.com\/our-properties\/aravis\/la-clusaz","label":"La Clusaz","page_id":159,"link_type":"custom","page_suffix":"?city=La+Clusaz"},{"s":"arr"}],[{"url":"https:\/\/alpine-property.com\/our-properties\/mont-blanc\/chamonix-vallee","label":"Chamonix","page_id":159,"link_type":"custom","page_suffix":"?city=Chamonix"},{"s":"arr"}],[{"url":"https:\/\/alpine-property.com\/our-properties\/mont-blanc\/st-gervais","label":"St Gervais","page_id":159,"link_type":"custom","page_suffix":"?city=St+Gervais"},{"s":"arr"}],[{"url":"https:\/\/alpine-property.com\/our-properties\/grand-massif\/flaine-les-carroz","label":"Les Carroz","page_id":159,"link_type":"custom","page_suffix":"?city=Les+Carroz"},{"s":"arr"}]],{"s":"arr"}],"title":"Popular Locations"},{"s":"arr"}],[{"links":[[[{"url":"\/our-properties","label":"Buy Property","page_id":159,"link_type":"page","page_suffix":null},{"s":"arr"}],[{"url":"\/our-fees","label":"Sell Property","page_id":150,"link_type":"page","page_suffix":null},{"s":"arr"}],[{"url":"\/get-valuation","label":"Get a Valuation","page_id":165,"link_type":"page","page_suffix":null},{"s":"arr"}]],{"s":"arr"}],"title":"Properties"},{"s":"arr"}],[{"links":[[[{"url":"\/the-company","label":"About Us","page_id":147,"link_type":"page","page_suffix":null},{"s":"arr"}],[{"url":"\/blog","label":"Blog","page_id":160,"link_type":"page","page_suffix":null},{"s":"arr"}],[{"url":"\/faq","label":"FAQ","page_id":153,"link_type":"page","page_suffix":null},{"s":"arr"}],[{"url":"\/contact","label":"Contact Us","page_id":167,"link_type":"page","page_suffix":null},{"s":"arr"}]],{"s":"arr"}],"title":"Company"},{"s":"arr"}],[{"links":[[[{"url":"\/privacy-policy","label":"Privacy Policy","page_id":157,"link_type":"page","page_suffix":null},{"s":"arr"}],[{"url":"\/legal","label":"Legal Notices","page_id":155,"link_type":"page","page_suffix":null},{"s":"arr"}]],{"s":"arr"}],"title":"Legal"},{"s":"arr"}]],{"s":"arr"}],"brand_name":"Alpine Property","legal_text":"**Alpine Property SAS** au capital de 3 450 \u20ac \u2014 RCS Thonon les Bains 508 578 556\n\nTitulaire de la Carte Professionnelle n\u00b0 CPI 7401 2016 000 017 391 d\u00e9livr\u00e9e par la CCI de la Haute Savoie.\n\nAlpine Property does not hold client funds. All transactions are handled by a Notaire in accordance with French law.","description":"Specialists in Alpine property since 1999. We help you find the perfect chalet, apartment, or investment property in the French Alps.","phone_lines":[[[{"label":"FR","number":"+33 (0)4 50 04 86 07"},{"s":"arr"}],[{"label":"UK","number":"+44 (0)208 123 2384"},{"s":"arr"}]],{"s":"arr"}],"social_links":[[[{"url":"https:\/\/alpine-property.com\/blog","platform":"blog"},{"s":"arr"}],[{"url":"https:\/\/twitter.com\/alpineproperty","platform":"twitter"},{"s":"arr"}],[{"url":"https:\/\/facebook.com\/alpineproperty","platform":"facebook"},{"s":"arr"}],[{"url":"https:\/\/linkedin.com\/company\/alpine-property","platform":"linkedin"},{"s":"arr"}],[{"url":"https:\/\/instagram.com\/alpineproperty","platform":"instagram"},{"s":"arr"}]],{"s":"arr"}],"copyright_text":"Alpine Property - All rights reserved."},{"s":"arr"}],"design":null,"estate":null,"page":null,"sample":false,"zone":null,"blockIndex":999,"blockType":"footer"},"memo":{"id":"l6MBMhgSq5V1fZH5wn0T","name":"blocks.footer","path":"blog","method":"GET","release":"a-a-a","children":[],"scripts":[],"assets":[],"errors":[],"locale":"en"},"checksum":"dd61bdaf8096d1fa6a489f87a04778fe6609625780c7e6675be3b5ba333618d8"}" wire:effects="{"partials":[]}" wire:id="l6MBMhgSq5V1fZH5wn0T" 1680 class="border-t border-current/10" 1681 style="--footer-bg: #f8f7f2; --footer-fg: oklch(from var(--footer-bg) clamp(0, (0.6 - l) * 1000, 1) 0 0); background-color: var(--footer-bg); color: var(--footer-fg);" 1682 > 1683 1684 <div class="mx-auto max-w-7xl px-4 pt-12 pb-12 sm:px-6 sm:pt-14 sm:pb-14 lg:px-8 lg:pt-16 lg:pb-16"> 1685 <div class="lg:grid lg:grid-cols-3 lg:gap-8"> 1686 1687 <div class="lg:pr-20"> 1688 <div class="flex items-center gap-3"> 1689 <!--[if BLOCK]><![endif]--> <img 1690 class="h-10 w-auto object-contain" 1691 alt="Alpine Property" 1692 src="https://fls-a1569c84-ada7-455e-9b34-6fd3a11d7485.laravel.cloud/tenant4f7ab57b-46ca-4888-9ba7-963b34f11668/tenant/logo.svg" 1693 /> 1694 <!--[if ENDBLOCK]><![endif]-->
1695 <span class="text-xl font-bold">Alpine Property</span> 1696 </div> 1697 1698 <!--[if BLOCK]><![endif]--> <p class="mt-6 text-sm leading-relaxed opacity-80">Specialists in Alpine property since 1999. We help you find the perfect chalet, apartment, or investment property in the French Alps.</p> 1699 <!--[if ENDBLOCK]><![endif]--> 1700 <div class="mt-8 grid grid-cols-1 items-start gap-4 text-sm sm:grid-cols-3 lg:grid-cols-1"> 1701 <!--[if BLOCK]><![endif]--> <div class="flex items-start gap-3"> 1702 <svg style="color: #c70036;" class="mt-0.5 size-5 shrink-0" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon"> 1703 <path fill-rule="evenodd" d="m9.69 18.933.003.001C9.89 19.02 10 19 10 19s.11.02.308-.066l.002-.001.006-.003.018-.008a5.741 5.741 0 0 0 .281-.14c.186-.096.446-.24.757-.433.62-.384 1.445-.966 2.274-1.765C15.302 14.988 17 12.493 17 9A7 7 0 1 0 3 9c0 3.492 1.698 5.988 3.355 7.584a13.731 13.731 0 0 0 2.273 1.765 11.842 11.842 0 0 0 .976.544l.062.029.018.008.006.003ZM10 11.25a2.25 2.25 0 1 0 0-4.5 2.25 2.25 0 0 0 0 4.5Z" clip-rule="evenodd"/> 1704</svg> <span class="whitespace-pre-line opacity-80">627 route du Jourdil 170574430 Saint-Jean-d'Aulps, France</span> 1706 </div> 1707 <!--[if ENDBLOCK]><![endif]--> 1708 <!--[if BLOCK]><![endif]--> <div class="flex items-start gap-3"> 1709 <svg style="color: #c70036;" class="mt-0.5 size-5 shrink-0" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon"> 1710 <path fill-rule="evenodd" d="M2 3.5A1.5 1.5 0 0 1 3.5 2h1.148a1.5 1.5 0 0 1 1.465 1.175l.716 3.223a1.5 1.5 0 0 1-1.052 1.767l-.933.267c-.41.117-.643.555-.48.95a11.542 11.542 0 0 0 6.254 6.254c.395.163.833-.07.95-.48l.267-.933a1.5 1.5 0 0 1 1.767-1.052l3.223.716A1.5 1.5 0 0 1 18 15.352V16.5a1.5 1.5 0 0 1-1.5 1.5H15c-1.149 0-2.263-.15-3.326-.43A13.022 13.022 0 0 1 2.43 8.326 13.019 13.019 0 0 1 2 5V3.5Z" clip-rule="evenodd"/> 1711</svg> <div class="opacity-80"> 1712 <!--[if BLOCK]><![endif]--> <p> 1713 <!--[if BLOCK]><![endif]--> FR: 1714 <!--[if ENDBLOCK]><![endif]--> 1715 +33 (0)4 50 04 86 07 1716 </p> 1717 <p> 1718 <!--[if BLOCK]><![endif]--> UK: 1719 <!--[if ENDBLOCK]><![endif]--> 1720 +44 (0)208 123 2384 1721 </p> 1722 <!--[if ENDBLOCK]><![endif]--> </div> 1723 </div> 1724 <!--[if ENDBLOCK]><![endif]--> 1725 <!--[if BLOCK]><![endif]--> <div class="flex items-center gap-3"> 1726 <svg style="color: #c70036;" class="size-5 shrink-0" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon"> 1727 <path d="M3 4a2 2 0 0 0-2 2v1.161l8.441 4.221a1.25 1.25 0 0 0 1.118 0L19 7.162V6a2 2 0 0 0-2-2H3Z"/> 1728 <path d="m19 8.839-7.77 3.885a2.75 2.75 0 0 1-2.46 0L1 8.839V14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V8.839Z"/> 1729</svg> <a class="opacity-80 transition-opacity hover:opacity-100" href="mailto:[email protected]"> 1730 [email protected] 1731 </a> 1732 </div> 1733 <!--[if ENDBLOCK]><![endif]--> </div> 1734 1735 1736 <!--[if BLOCK]><![endif]--> <div class="mt-10 flex items-center gap-x-6 sm:justify-center lg:justify-start"> 1737 <!--[if BLOCK]><![endif]--> <a 1738 class="text-[color:var(--ic)] transition-colors hover:text-[color:var(--ic-h)]" 1739 style="--ic: #c70036; --ic-h: #ab002e;" 1740 href="https://alpine-property.com/blog" 1741 rel="nofollow noopener" 1742 >
1743 <span class="sr-only">Blog</span> 1744 <!--[if BLOCK]><![endif]--> <svg class="size-7" aria-hidden="true" fill="currentColor" viewBox="0 0 24 24"> 1745 <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 17.93c-3.95-.49-7-3.85-7-7.93 0-.62.08-1.21.21-1.79L9 15v1c0 1.1.9 2 2 2v1.93zm6.9-2.54c-.26-.81-1-1.39-1.9-1.39h-1v-3c0-.55-.45-1-1-1H8v-2h2c.55 0 1-.45 1-1V7h2c1.1 0 2-.9 2-2v-.41c2.93 1.19 5 4.06 5 7.41 0 2.08-.8 3.97-2.1 5.39z"/> 1746 </svg> 1747<!--[if ENDBLOCK]><![endif]--> </a> 1748 <a 1749 class="text-[color:var(--ic)] transition-colors hover:text-[color:var(--ic-h)]" 1750 style="--ic: #c70036; --ic-h: #ab002e;" 1751 href="https://twitter.com/alpineproperty" 1752 rel="nofollow noopener" 1753 > 1754 <span class="sr-only">Twitter</span> 1755 <!--[if BLOCK]><![endif]--> <svg class="size-7" aria-hidden="true" fill="currentColor" viewBox="0 0 24 24"> 1756 <path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"/> 1757 </svg> 1758<!--[if ENDBLOCK]><![endif]--> </a> 1759 <a 1760 class="text-[color:var(--ic)] transition-colors hover:text-[color:var(--ic-h)]" 1761 style="--ic: #c70036; --ic-h: #ab002e;" 1762 href="https://facebook.com/alpineproperty" 1763 rel="nofollow noopener" 1764 > 1765 <span class="sr-only">Facebook</span> 1766 <!--[if BLOCK]><![endif]--> <svg class="size-7" aria-hidden="true" fill="currentColor" viewBox="0 0 24 24"> 1767 <path fill-rule="evenodd" d="M22 12c0-5.523-4.477-10-10-10S2 6.477 2 12c0 4.991 3.657 9.128 8.438 9.878v-6.987
1767h-2.54V12h2.54V9.797c0-2.506 1.492-3.89 3.777-3.89 1.094 0 2.238.195 2.238.195v2.46h-1.26c-1.243 0-1.63.771-1.63 1.562V12h2.773l-.443 2.89h-2.33v6.988C18.343 21.128 22 16.991 22 12z" clip-rule="evenodd" /> 1768 </svg> 1769<!--[if ENDBLOCK]><![endif]--> </a> 1770 <a 1771 class="text-[color:var(--ic)] transition-colors hover:text-[color:var(--ic-h)]" 1772 style="--ic: #c70036; --ic-h: #ab002e;" 1773 href="https://linkedin.com/company/alpine-property" 1774 rel="nofollow noopener" 1775 > 1776 <span class="sr-only">Linkedin</span> 1777 <!--[if BLOCK]><![endif]--> <svg class="size-7" aria-hidden="true" fill="currentColor" viewBox="0 0 24 24"> 1778 <path fill-rule="evenodd" d="M19 0h-14c-2.761 0-5 2.239-5 5v14c0 2.761 2.239 5 5 5h14c2.762 0 5-2.239 5-5v-14c0-2.761-2.238-5-5-5zm-11 19h-3v-11h3v11zm-1.5-12.268c-.966 0-1.75-.79-1.75-1.764s.784-1.764 1.75-1.764 1.75.79 1.75 1.764-.783 1.764-1.75 1.764zm13.5 12.268h-3v-5.604c0-3.368-4-3.113-4 0v5.604h-3v-11h3v1.765c1.396-2.586 7-2.777 7 2.476v6.759z" clip-rule="evenodd" /> 1779 </svg> 1780<!--[if ENDBLOCK]><![endif]--> </a> 1781 <a 1782 class="text-[color:var(--ic)] transition-colors hover:text-[color:var(--ic-h)]" 1783 style="--ic: #c70036; --ic-h: #ab002e;" 1784 href="https://instagram.com/alpineproperty" 1785 rel="nofollow noopener" 1786 > 1787 <span class="sr-only">Instagram</span> 1788 <!--[if BLOCK]><![endif]--> <svg class="size-7" aria-hidden="true" fill="currentColor" viewBox="0 0 24 24"> 1789 <path fill-rule="evenodd" d="M12.315 2c2.43 0 2.784.013 3.808.06 1.064.049 1.791.218 2.427.465a4.902 4.902 0 011.772 1.153 4.902 4.902 0 011.153 1.772c.247.636.416 1.363.465 2.427.048 1.067.06 1.407.06 4.123v.08c0 2.643-.012 2.987-.06 4.043-.049 1.064-.218 1.791-.465 2.427a4.902 4.902 0 01-1.153 1.772 4.902 4.902 0 01-1.772 1.153c-.636.247-1.363.416-2.427.465-1.067.048-1.407.06-4.123.06h-.08c-2.643 0-2.987-.012-4.043-.06-1.064-.049-1.791-.218-2.427-.465a4.902 4.902 0 01-1.772-1.153 4.902 4.902 0 01-1.153-1.772c-.247-.636-.416-1.363-.465-2.427-.047-1.024-.06-1.379-.06-3.808v-.63c0-2.43.013-2.784.06-3.808.049-1.064.218-1.791.465-2.427a4.902 4.902 0 011.153-1.772A4.902 4.902 0 015.45 2.525c.636-.247 1.363-.416 2.427-.465C8.901 2.013 9.256 2 11.685 2h.63zm-.081 1.802h-.468c-2.456 0-2.784.011-3.807.058-.975.045-1.504.207-1.857.344-.467.182-.8.398-1.15.748-.35.35-.566.683-.748 1.15-.137.353-.3.882-.344 1.857-.047 1.023-.058 1.351-.058 3.807v.468c0 2.456.011 2.784.058 3.807.045.975.207 1.504.344 1.857.182.466.399.8.748 1.15.35.35.683.566 1.15.748.353.137.882.3 1.857.344 1.054.048 1.37.058 4.041.058h.08c2.597 0 2.917-.01 3.96-.058.976-.045 1.505-.207 1.858-.344.466-.182.8-.398 1.15-.748.35-.35.566-.683.748-1.15.137-.353.3-.882.344-1.857.048-1.055.058-1.37.058-4.041v-.08c0-2.597-.01-2.917-.058-3.96-.045-.976-.207-1.505-.344-1.858a3.097 3.097 0 00-.748-1.15 3.098 3.098 0 00-1.15-.748c-.353-.137-.882-.3-1.857-.344-1.023-.047-1.351-.058-3.807-.058zM12 6.865a5.135 5.135 0 110 10.27 5.135 5.135 0 010-10.27zm0 1.802a3.333 3.333 0 100 6.666 3.333 3.333 0 000-6.666zm5.338-3.205a1.2 1.2 0 110 2.4 1.2 1.2 0 010-2.4z" clip-rule="evenodd" /> 1790 </svg> 1791<!--[if ENDBLOCK]><![endif]--> </a> 1792 <!--[if ENDBLOCK]><![endif]--> </div> 1793 <!--[if ENDBLOCK]><![endif]--> </div> 1794 1795 1796 <!--[if BLOCK]><![endif]--> <div class="mt-12 grid grid-cols-2 gap-8 lg:col-span-2 lg:mt-0"> 1797 <!--[if BLOCK]><![endif]--> <div class="md:grid md:grid-cols-2 md:gap-8"> 1798 <!--[if BLOCK]><![endif]--> <div class=""> 1799 <h3 class="text-sm font-semibold tracking-wider up
1799percase"> 1800 Popular Locations 1801 </h3> 1802 <!--[if BLOCK]><![endif]--> <ul class="mt-5 space-y-3" role="list"> 1803 <!--[if BLOCK]><![endif]--> <li> 1804 <a 1805 class="text-sm opacity-70 transition-opacity hover:opacity-100" 1806 href="https://alpine-property.com/our-properties/portes-du-soleil/morzine" 1807 rel="nofollow noopener" 1808 > 1809 Morzine 1810 </a> 1811 </li> 1812 <li> 1813 <a 1814 class="text-sm opacity-70 transition-opacity hover:opacity-100" 1815 href="https://alpine-property.com/our-properties/portes-du-soleil/les-gets" 1816 rel="nofollow noopener" 1817 > 1818 Les Gets 1819 </a> 1820 </li> 1821 <li> 1822 <a 1823 class="text-sm opacity-70 transition-opacity hover:opacity-100" 1824 href="https://alpine-property.com/our-properties/portes-du-soleil/chatel-vallee" 1825 rel="nofollow noopener" 1826 > 1827 Châtel 1828 </a> 1829 </li> 1830 <li> 1831 <a 1832 class="text-sm opacity-70 transition-opacity hover:opacity-100" 1833 href="https://alpine-property.com/our-properties/grand-massif/samoens-vallee" 1834 rel="nofollow noopener" 1835 > 1836 Samoëns 1837 </a> 1838 </li> 1839 <li> 1840 <a 1841 class="text-sm opacity-70 transition-opacity hover:opacity-100" 1842 href="https://alpine-property.com/our-properties/aravis/la-clusaz" 1843 rel="nofollow noopener" 1844 > 1845 La Clusaz 1846 </a> 1847 </li> 1848 <li> 1849 <a 1850 class="text-sm opacity-70 transition-opacity hover:opacity-100" 1851 href="https://alpine-property.com/our-properties/mont-blanc/chamonix-vallee" 1852 rel="nofollow noopener" 1853 > 1854 Chamonix 1855 </a> 1856 </li> 1857 <li> 1858 <a 1859 class="text-sm opacity-70 transition-opacity hover:opacity-100" 1860 href="https://alpine-property.com/our-properties/mont-blanc/st-gervais" 1861 rel="nofollow noopener" 1862 > 1863 St Gervais 1864 </a> 1865 </li> 1866 <li> 1867 <a 1868 class="text-sm opacity-70 transition-opacity hover:opacity-100" 1869 href="https://alpine-property.com/our-properties/grand-massif/flaine-les-carroz" 1870 rel="nofollow noopener" 1871 > 1872 Les Carroz 1873 </a> 1874 </li> 1875 <!--[if ENDBLOCK]><![endif]--> </ul> 1876 <!--[if ENDBLOCK]><![endif]--> </div> 1877 <div class="mt-12 md:mt-0"> 1878 <h3 class="text-sm font-semibold tracking-wider up
1878percase"> 1879 Properties 1880 </h3> 1881 <!--[if BLOCK]><![endif]--> <ul class="mt-5 space-y-3" role="list"> 1882 <!--[if BLOCK]><![endif]--> <li> 1883 <a 1884 class="text-sm opacity-70 transition-opacity hover:opacity-100" 1885 href="/our-properties" 1886 wire:navigate 1887 > 1888 Buy Property 1889 </a> 1890 </li> 1891 <li> 1892 <a 1893 class="text-sm opacity-70 transition-opacity hover:opacity-100" 1894 href="/our-fees" 1895 wire:navigate 1896 > 1897 Sell Property 1898 </a> 1899 </li> 1900 <li> 1901 <a 1902 class="text-sm opacity-70 transition-opacity hover:opacity-100" 1903 href="/get-valuation" 1904 wire:navigate 1905 > 1906 Get a Valuation 1907 </a> 1908 </li> 1909 <!--[if ENDBLOCK]><![endif]--> </ul> 1910 <!--[if ENDBLOCK]><![endif]--> </div> 1911 <!--[if ENDBLOCK]><![endif]--> </div> 1912 <div class="md:grid md:grid-cols-2 md:gap-8"> 1913 <!--[if BLOCK]><![endif]--> <div class=""> 1914 <h3 class="text-sm font-semibold tracking-wider uppercase"> 1915 Company 1916 </h3> 1917 <!--[if BLOCK]><![endif]--> <ul class="mt-5 space-y-3" role="list"> 1918 <!--[if BLOCK]><![endif]--> <li> 1919 <a 1920 class="text-sm opacity-70 transition-opacity hover:opacity-100" 1921 href="/the-company" 1922 wire:navigate 1923 > 1924 About Us 1925 </a> 1926 </li> 1927 <li> 1928 <a 1929 class="text-sm opacity-70 transition-opacity hover:opacity-100" 1930 href="/blog" 1931 wire:navigate 1932 > 1933 Blog 1934 </a> 1935 </li> 1936 <li> 1937 <a 1938 class="text-sm opacity-70 transition-opacity hover:opacity-100" 1939 href="/faq" 1940 wire:navigate 1941 > 1942 FAQ 1943 </a> 1944 </li> 1945 <li> 1946 <a 1947 class="text-sm opacity-70 transition-opacity hover:opacity-100" 1948 href="/contact" 1949 wire:navigate 1950 > 1951 Contact Us 1952 </a> 1953 </li> 1954 <!--[if ENDBLOCK]><![endif]--> </ul> 1955 <!--[if ENDBLOCK]><![endif]--> </div> 1956 <div class="mt-12 md:mt-0"> 1957 <h3 class="text-sm font-semibold tracking-wider up
1957percase"> 1958 Legal 1959 </h3> 1960 <!--[if BLOCK]><![endif]--> <ul class="mt-5 space-y-3" role="list"> 1961 <!--[if BLOCK]><![endif]--> <li> 1962 <a 1963 class="text-sm opacity-70 transition-opacity hover:opacity-100" 1964 href="/privacy-policy" 1965 wire:navigate 1966 > 1967 Privacy Policy 1968 </a> 1969 </li> 1970 <li> 1971 <a 1972 class="text-sm opacity-70 transition-opacity hover:opacity-100" 1973 href="/legal" 1974 wire:navigate 1975 > 1976 Legal Notices 1977 </a> 1978 </li> 1979 <!--[if ENDBLOCK]><![endif]--> </ul> 1980 <!--[if ENDBLOCK]><![endif]--> </div> 1981 <!--[if ENDBLOCK]><![endif]--> </div> 1982 <!--[if ENDBLOCK]><![endif]--> </div> 1983 <!--[if ENDBLOCK]><![endif]--> </div> 1984 </div> 1985 1986 1987 <!--[if BLOCK]><![endif]--> <div 1988 style="--legal-bg: #ab002e; background-color: var(--legal-bg); color: oklch(from var(--legal-bg) clamp(0, (0.6 - l) * 1000, 1) 0 0)" 1989 > 1990 <div class="mx-auto max-w-7xl px-4 py-10 sm:px-6 lg:px-8"> 1991 <!--[if BLOCK]><![endif]--> <div 1992 class="text-left text-xs leading-relaxed opacity-70 [&_a]:underline [&_p]:mb-1 [&_strong]:font-semibold" 1993 > 1994 <p><strong>Alpine Property SAS</strong> au capital de 3 450 ⬠â RCS Thonon les Bains 508 578 556</p> 1995<p>Titulaire de la Carte Professionnelle n° CPI 7401 2016 000 017 391 délivrée par la CCI de la Haute Savoie.</p> 1996<p>Alpine Property does not hold client funds. All transactions are handled by a Notaire in accordance with French law.</p> 1997 1998 </div> 1999 <div class="my-8 border-t border-current/15"></div> 2000 <!--[if ENDBLOCK]><![endif]--> 2001 <!--[if BLOCK]><![endif]--> <div class="flex flex-col items-center justify-between gap-4 text-center sm:flex-row sm:text-left"> 2002 <p class="text-xs opacity-60">© 2026 Alpine Property - All rights reserved.</p> 2003 2004 <!--[if BLOCK]><![endif]--><!--[if ENDBLOCK]><![endif]--> </div> 2005 <!--[if ENDBLOCK]><![endif]--> </div> 2006 </div> 2007 <!--[if ENDBLOCK]><![endif]--></footer> 2008 <!--[if ENDBLOCK]><![endif]--> <!--[if ENDBLOCK]><![endif]--></div> 2009 2010 <div 2011 x-data="{ 2012 visible: false, 2013 cookieOpen: false, 2014 init() { 2015 window.addEventListener( 2016 'scroll', 2017 () => { 2018 this.visible = window.scrollY > window.innerHeight 2019 }, 2020 { passive: true }, 2021 ) 2022 }, 2023 }" 2024 x-on:cookie-consent-visibility.document="cookieOpen = $event.detail.open" 2025 class="bottom-6 fixed right-6 z-50 flex flex-col items-end gap-3" 2026> 2027 2028 <button 2029 x-cloak 2030 x-on:click="window.scrollTo({ top: 0, behavior: 'smooth' })" 2031 x-show="visible" 2032 x-transition:enter="transition-all duration-500 ease-out" 2033 x-transition:enter-end="translate-y-0 opacity-100" 2034 x-transition:enter-start="translate-y-4 opacity-0" 2035 x-transition:leave="transition-all duration-300 ease-in" 2036 x-transition:leave-end="translate-y-4 opacity-0" 2037 x-transition:leave-start="translate-y-0 opacity-100" 2038 class=" flex size-12 items-center justify-center text-white shadow-lg hover:scale-110 hover:shadow-xl" 2039 style="background-color: #c70036" 2040 type="button" 2041 >
2042 <span class="sr-only">Scroll to top</span> 2043 <svg class="size-6" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"> 2044 <path d="M4.5 15.75l7.5-7.5 7.5 7.5" stroke-linecap="round" stroke-linejoin="round" /> 2045 </svg> 2046 </button> 2047</div> 2048 <ui-toast x-data x-on:toast-show.document="! $el.closest('ui-toast-group') && $el.showToast($event.detail)" popover="manual" position="bottom end" wire:ignore> 2049 <template> 2050 <div class="group/toast max-w-sm in-[ui-toast-group]:max-w-auto in-[ui-toast-group]:w-xs sm:in-[ui-toast-group]:w-sm" data-variant="" data-flux-toast-dialog> 2051 <div class="p-2 flex rounded-xl shadow-lg bg-white border border-zinc-200 border-b-zinc-300/80 dark:bg-zinc-700 dark:border-zinc-600 group-data-invert/toast:bg-zinc-800 group-data-invert/toast:border-zinc-700 dark:group-data-invert/toast:bg-white dark:group-data-invert/toast:border-zinc-200 dark:group-data-invert/toast:border-b-zinc-300/80"> 2052 <div class="flex-1 flex items-start gap-4 has-data-flux-toast-action:gap-2 overflow-hidden"> 2053 <div class="flex-1 py-1.5 ps-2.5 flex gap-2"> 2054 2055 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" class="hidden [[data-flux-toast-dialog][data-variant=success]_&]:block shrink-0 mt-0.5 size-4 text-lime-600 dark:text-lime-400"> 2056 <path fill-rule="evenodd" d="M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14Zm3.844-8.791a.75.75 0 0 0-1.188-.918l-3.7 4.79-1.649-1.833a.75.75 0 1 0-1.114 1.004l2.25 2.5a.75.75 0 0 0 1.15-.043l4.25-5.5Z" clip-rule="evenodd" /> 2057 </svg> 2058 2059 2060 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" class="hidden [[data-flux-toast-dialog][data-variant=warning]_&]:block shrink-0 mt-0.5 size-4 text-amber-500 dark:text-amber-400"> 2061 <path fill-rule="evenodd" d="M6.701 2.25c.577-1 2.02-1 2.598 0l5.196 9a1.5 1.5 0 0 1-1.299 2.25H2.804a1.5 1.5 0 0 1-1.3-2.25l5.197-9ZM8 4a.75.75 0 0 1 .75.75v3a.75.75 0 1 1-1.5 0v-3A.75.75 0 0 1 8 4Zm0 8a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z" clip-rule="evenodd" /> 2062 </svg> 2063 2064 2065 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" class="hidden [[data-flux-toast-dialog][data-variant=info]_&]:block shrink-0 mt-0.5 size-4 text-cyan-500 dark:text-cyan-400"> 2066 <path fill-rule="evenodd" d="M15 8A7 7 0 1 1 1 8a7 7 0 0 1 14 0ZM9 5a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM6.75 8a.75.75 0 0 0 0 1.5h.75v1.75a.75.75 0 0 0 1.5 0v-2.5A.75.75 0 0 0 8.25 8h-1.5Z" clip-rule="evenodd" /> 2067 </svg> 2068 2069 2070 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" class="hidden [[data-flux-toast-dialog][data-variant=danger]_&]:block shrink-0 mt-0.5 size-4 text-rose-500 dark:text-rose-400"> 2071 <path fill-rule="evenodd" d="M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14ZM8 4a.75.75 0 0 1 .75.75v3a.75.75 0 0 1-1.5 0v-3A.75.75 0 0 1 8 4Zm0 8a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z" clip-rule="evenodd" /> 2072 </svg> 2073 2074 <div> 2075 2076 <div class="font-medium text-sm text-zinc-800 dark:text-white group-data-invert/toast:text-white dark:group-data-invert/toast:text-zinc-800 [&:not(:empty)+div]:font-normal [&:not(:empty)+div]:text-zinc-500 [&:not(:empty)+div]:dark:text-zinc-300 group-data-invert/toast:[&:not(:empty)+div]:text-zinc-300 dark:group-data-invert/toast:[&:not(:empty)+div]:text-zinc-500 [&:not(:empty)]:pb-2"><slot name="heading"></slot></div> 2077 2078 2079 <div class="font-medium text-sm text-zinc-800 dark:text-white group-data-invert/toast:text-white dark:group-data-invert/toast:text-zinc-800"><slot name="text"></slot></div> 2080 2081 2082 <template name="link"> 2083 <a class="block mt-2 font-medium text-sm text-[var(--color-accent-content)] decoration-[color-mix(in_oklab,var(--color-accent-content),transparent_80%)] underline underline-offset-[6px] hover:decoration-current group-data-invert/toast:text-white group-data-invert/toast:decoration-white/20 dark:group-data-invert/toast:text-zinc-800 dark:group-data-invert/toast:decoration-zinc-800/20"><slot name="text"></slot></a> 2084 </template> 2085 </div> 2086 </div> 2087 2088 <div class="flex items-center gap-1"> 2089 2090 <template name="action"> 2091 <div class="flex items-center" data-flux-toast-action> 2092 <button type="button" data-flux-toast-action-button class="relative inline-flex h-8 items-center justify-center gap-2 whitespace-nowrap rounded-md bg-zinc-800/5 px-3 text-sm font-medium text-zinc-800 hover:bg-zinc-800/10 data-loading:pointer-events-none dark:bg-white/10 dark:text-white dark:hover:bg-white/20 group-data-invert/toast:bg-white/10 group-data-invert/toast:text-white group-data-invert/toast:hover:bg-white/20 dark:group-data-invert/toast:bg-zinc-800/5 dark:group-data-invert/toast:text-zinc-800 dark:group-data-invert/toast:hover:bg-zinc-800/10 [&[data-loading]_[data-flux-toast-action-label]]:opacity-0 [&[data-loading]_[data-flux-loading-indicator]]:opacity-100">
2093 <span class="transition-opacity" data-flux-toast-action-label></span> 2094 <span class="absolute inset-0 flex items-center justify-center opacity-0 transition-opacity" data-flux-loading-indicator> 2095 <svg class="size-4 animate-spin" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" aria-hidden="true"> 2096 <circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle> 2097 <path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 0 1 8-8V0C5.373 0 0 5.373 0 12h4Z"></path> 2098 </svg> 2099 </span> 2100 </button> 2101 2102 <a data-flux-toast-action-link class="inline-flex h-8 items-center justify-center gap-2 whitespace-nowrap rounded-md bg-zinc-800/5 px-3 text-sm font-medium text-zinc-800 hover:bg-zinc-800/10 dark:bg-white/10 dark:text-white dark:hover:bg-white/20 group-data-invert/toast:bg-white/10 group-data-invert/toast:text-white group-data-invert/toast:hover:bg-white/20 dark:group-data-invert/toast:bg-zinc-800/5 dark:group-data-invert/toast:text-zinc-800 dark:group-data-invert/toast:hover:bg-zinc-800/10"> 2103 <span data-flux-toast-action-label></span> 2104 </a> 2105 </div> 2106 </template> 2107 2108 2109 <ui-close class="flex items-center"> 2110 <button type="button" class="inline-flex items-center font-medium justify-center gap-2 truncate disabled:opacity-50 dark:disabled:opacity-75 disabled:cursor-default h-8 text-sm rounded-md w-8 bg-transparent hover:bg-zinc-800/5 dark:hover:bg-white/15 text-zinc-400 hover:text-zinc-800 dark:text-zinc-400 dark:hover:text-white group-data-invert/toast:hover:bg-white/15 group-data-invert/toast:hover:text-white dark:group-data-invert/toast:hover:bg-zinc-800/5 dark:group-data-invert/toast:hover:text-zinc-800" as="button"> 2111 <div> 2112 <svg class="[:where(&)]:size-5" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon"> 2113 <path d="M6.28 5.22a.75.75 0 0 0-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 1 0 1.06 1.06L10 11.06l3.72 3.72a.75.75 0 1 0 1.06-1.06L11.06 10l3.72-3.72a.75.75 0 0 0-1.06-1.06L10 8.94 6.28 5.22Z"></path> 2114 </svg> 2115 </div> 2116 </button> 2117 </ui-close> 2118 </div> 2119 </div> 2120 </div> 2121 </div> 2122 </template> 2123</ui-toast> 2124
2124<script src="https://alpine-property.com/flux/flux.min.js?id=505e8a75" data-navigate-once></script>
2124 2125
2125<script> 2126 window.filamentData = [] </script>
2126 2127 2128 2129
2129<script 2130 src="https://alpine-property.com/js/filament/actions/actions.js?v=4.13.4.0" 2131 2132 2133 2134 2135 2136 2137 ></script>
2137 2138 2139 2140
2140<script 2141 src="https://alpine-property.com/js/filament/notifications/notifications.js?v=4.13.4.0" 2142 2143 2144 2145 2146 2147 2148 ></script>
2148 2149 2150 2151
2151<script 2152 src="https://alpine-property.com/js/filament/schemas/schemas.js?v=4.13.4.0" 2153 2154 2155 2156 2157 2158 2159 ></script>
2159 2160 2161 2162
2162<script 2163 src="https://alpine-property.com/js/filament/support/support.js?v=4.13.4.0" 2164 2165 2166 2167 2168 2169 2170 ></script>
2170 2171 2172 2173
2173<script 2174 src="https://alpine-property.com/js/filament/tables/tables.js?v=4.13.4.0" 2175 2176 2177 2178 2179 2180 2181 ></script>
2181 2182 2183 2184
2184<script 2185 src="https://alpine-property.com/js/solution-forest/filament-tree/filament-tree.js?v=3.1.6.0" 2186 2187 2188 2189 2190 2191 2192 ></script>
2192 2193 2194 2195<style> 2196 :root { 2197 } 2198 2199 </style> 2200
2200<script> 2201 ;(function () { 2202 if (window.lazyImageGrid) return 2203 2204 // Wire-protocol markers (EstateThumbnailResolver::PENDING / 2205 // ::OUT_OF_SCOPE). Defined here too because grid pages 2206 // without a map block never load the map popup renderer that 2207 // also registers them. 2208 window.THUMB_PENDING = window.THUMB_PENDING || '__THUMB_PENDING__' 2209 window.THUMB_OOS = window.THUMB_OOS || '__THUMB_OOS__' 2210 2211 window.lazyImageGrid = function (config) { 2212 const STORE_KEY = config.storageKey 2213 const CELL_SELECTOR = `[${config.cellAttr}]` 2214 const ID_ATTR = config.idAttr 2215 const ALT_ATTR = config.altAttr 2216 const EVENT_NAME = config.eventName 2217 const WIRE_METHOD = config.wireMethod 2218 const DEFAULT_IMG_CLASS = config.defaultImgClass || 'size-full object-cover' 2219 2220 return { 2221 _queue: null, 2222 _debounce: null, 2223 _fetched: null, 2224 _negatives: null, 2225 _io: null, 2226 _mo: null, 2227 _timers: null, 2228 _alive: false, 2229 2230 init() { 2231 // Cleared in destroy(): pending/watchdog timers on 2232 // a torn-down instance must never poke a dead 2233 // component's $wire. 2234 this._alive = true 2235 this._timers = [] 2236 this._queue = new Set() 2237 this._fetched = new Set() 2238 // Ids resolved to "no image" this session. Kept in memory 2239 // only (never persisted), so a returning visitor re-checks 2240 // and a newly-photographed estate self-heals â while still 2241 // giving morph-reverted cells a zero-round-trip recovery path. 2242 this._negatives = new Set() 2243 2244 this.$wire.on(EVENT_NAME, (event) => { 2245 // Family rule: Livewire never unbinds $wire.on 2246 // â a destroyed instance's handler must be inert. 2247 if (!this._alive) return 2248 this.handleBatch(event.thumbnails || {}) 2249 }) 2250 2251 this.$nextTick(() => { 2252 this.hydrateFromStorage() 2253 this.installObserver() 2254 }) 2255 2256 // Pagination and filter/sort morphs rewrite $root: pagination 2257 // tears cards down + adds fresh ones (new wire:key), and an 2258 // in-place morph of a SURVIVING card reconciles its cell back 2259 // to the server skeleton â blanking the image we injected. The 2260 // MutationObserver catches both: re-hydrate reverted/new cells 2261 // from the cache (or the in-memory negatives) and observe any 2262 // still-empty newcomers. (The removed capture-phase click 2263 // listener used to blank EVERY loaded cell on a pagination 2264 // click, which the visitor saw as the whole page 2265 // "re-lazy-loading" during the round-trip â that was the flash.) 2266 const mo = (this._mo = new MutationObserver(() => { 2267 queueMicrotask(() => { 2268 if (!this._alive) return 2269 this.hydrateFromStorage() 2270 this.observeNew() 2271 }) 2272 })) 2273 this.$nextTick(() => { 2274 if (this._alive) mo.observe(this.$root, { childList: true, subtree: true }) 2275 }) 2276 }, 2277 2278 destroy() { 2279 this._alive = false 2280 if (this._debounce) clearTimeout(this._debounce) 2281 ;
2281(this._timers || []).forEach((t) => clearTimeout(t)) 2282 this._timers = [] 2283 this._io?.disconnect() 2284 this._io = null 2285 this._mo?.disconnect() 2286 this._mo = null 2287 }, 2288 2289 hydrateFromStorage() { 2290 // `:not([data-image-loaded])` selects cells that still need 2291 // rendering â both never-loaded cells AND cells a Livewire 2292 // morph just reverted to the server skeleton (which drops the 2293 // attribute). Restore each from the positive cache, else from 2294 // this session's negatives, without a round-trip. 2295 const cells = this.$root.querySelectorAll(`${CELL_SELECTOR}:not([data-image-loaded])`) 2296 cells.forEach((cell) => { 2297 const id = cell.getAttribute(ID_ATTR) 2298 if (!id) return 2299 let cached = null 2300 try { 2301 cached = localStorage.getItem(STORE_KEY + id) 2302 } catch { 2303 /* private mode etc. â silent */ 2304 } 2305 // Session truth beats a possibly-stale cached 2306 // positive: OOS and an authoritative negative 2307 // are both CURRENT-server verdicts, the cache 2308 // entry may predate them (same order as the 2309 // map sidebar). 2310 if (this._oosIds && this._oosIds.has(id)) { 2311 this.renderNoImage(cell) 2312 } else if (this._negatives.has(id)) { 2313 this.renderNoImage(cell) 2314 } else if (cached) { 2315 this._fetched.add(id) 2316 this.renderImage(cell, cached) 2317 } 2318 }) 2319 }, 2320 2321 installObserver() { 2322 this._io = new IntersectionObserver( 2323 (entries) => { 2324 for (const entry of entries) { 2325 if (!entry.isIntersecting) continue 2326 const id = entry.target.getAttribute(ID_ATTR) 2327 if (!id || this._fetched.has(id)) { 2328 this._io.unobserve(entry.target) 2329 continue 2330 } 2331 this._queue.add(id) 2332 this._io.unobserve(entry.target) 2333 } 2334 this.scheduleBatch() 2335 }, 2336 { rootMargin: '300px 0px', threshold: 0.01 } 2337 ) 2338 2339 this.observeNew() 2340 }, 2341 2342 observeNew() { 2343 if (!this._io) return 2344 const cells = this.$root.querySelectorAll(`${CELL_SELECTOR}:not([data-image-loaded])`) 2345 cells.forEach((cell) => { 2346 const id = cell.getAttribute(ID_ATTR) 2347 if (id && !this._fetched.has(id)) this._io.observe(cell) 2348 }) 2349 }, 2350 2351 scheduleBatch() { 2352 if (!this._alive) return 2353 if (this._debounce) clearTimeout(this._debounce) 2354 this._debounce = setTimeout(() => { 2355 const ids = [...this._queue] 2356 this._queue.clear() 2357 this._debounce = null 2358 if (ids.length === 0 || !this._alive) return 2359 ids.forEach((id) => this._fetched.add(id)) 2360 // Livewire method promises resolve with the 2361 // return value but NEVER reject â a .catch 2362 // would be dead code. On a missing settlement 2363 // (deploy window, network blip) the watchdog 2364 // re-queues the batch directly â the observer 2365 // already unobserved these cells, so un-marking 2366 // alone would leave them skeletons forever. 2367 // Bounded to one watchdog retry per id. 2368 let settled = false 2369 const watchdog = setTimeout(() => { 2370 if (settled || !this._alive) return 2371 this._wdRetried = this._wdRetried || new Set() 2372 const retryable = ids.filter((id) => !this._wdRetried.has(id)) 2373 ids.forEach((id) => this._fetched.delete(id)) 2374 if (retryable.length === 0) return 2375 retryable.forEach((id) => { 2376 this._wdRetried.add(id) 2377 this._queue.add(id) 2378 }) 2379 this.scheduleBatch() 2380 }, 15000) 2381 this._timers.push(watchdog) 2382 this.$wire[WIRE_METHOD](ids).then((result) => { 2383 settled = true 2384 clearTimeout(watchdog) 2385 this._timers = this._timers.filter((t) => t !== watchdog) 2386 if (!this._alive || !result || typeof result !== 'object') return 2387 // Ids the server omitted (batch cap) go 2388 // back in the queue â each follow-up 2389 // batch answers up to the cap, converging. 2390 const dropped = ids.filter((id) => !(id in result)) 2391 if (dropped.length === 0) return 2392 dropped.forEach((id) => { 2393 this._fetched.delete(id) 2394 this._queue.add(id) 2395 }) 2396 this.scheduleBatch() 2397 }) 2398 }, 150) 2399 }, 2400 2401 handleBatch(map) { 2402 for (const [id, url] of Object.entries(map)) { 2403 // ANY non-OOS answer (url, null, PENDING) 2404 // supersedes an earlier OOS verdict â clear it 2405 // FIRST so the PENDING early-exit can't leave 2406 // stale scope state behind.
2407 if (url !== window.THUMB_OOS) { 2408 this._oosIds?.delete(id) 2409 } 2410 // Outside the endpoint's filtered scope: stop 2411 // asking and show the placeholder on the 2412 // (stale) cell â no negative, no cache. The 2413 // OOS set gives morph-reverted cells the same 2414 // zero-round-trip recovery the negatives get, 2415 // or a reverted cell would skeleton forever 2416 // (fetched blocks the observer, nothing in 2417 // storage to hydrate from). 2418 if (url === window.THUMB_OOS) { 2419 this._fetched.add(id) 2420 this._oosIds = this._oosIds || new Set() 2421 this._oosIds.add(id) 2422 const cell = this.$root.querySelector(`${CELL_SELECTOR}[${ID_ATTR}="${id}"]`) 2423 if (cell) this.renderNoImage(cell) 2424 continue 2425 } 2426 // "Conversions still generating" (estate grids 2427 // only): keep the skeleton, never persist or
2428 // record a negative, and retry ONCE after the 2429 // typical conversion-drain delay. A false "no 2430 // photo" here is exactly the misclassification 2431 // the tri-state protocol exists to prevent. 2432 if (url === window.THUMB_PENDING) { 2433 // A stale PENDING must never displace a 2434 // real image a newer answer delivered. 2435 const loadedCell = this.$root.querySelector( 2436 `${CELL_SELECTOR}[${ID_ATTR}="${id}"] img` 2437 ) 2438 if (loadedCell) { 2439 this._fetched.add(id) 2440 continue 2441 } 2442 // Duplicate answers (slow response landing 2443 // after its watchdog re-asked) must not 2444 // burn the single retry into a false 2445 // negative â debounce per id. 2446 this._pendingSeenAt = this._pendingSeenAt || new Map() 2447 const seenAt = this._pendingSeenAt.get(id) || 0 2448 if (Date.now() - seenAt < 25000) { 2449 this._fetched.add(id) 2450 continue 2451 } 2452 this._pendingSeenAt.set(id, Date.now()) 2453 this._pendingTried = this._pendingTried || new Set() 2454 if (!this._pendingTried.has(id)) { 2455 this._pendingTried.add(id) 2456 this._fetched.add(id) 2457 this._timers.push( 2458 setTimeout(() => { 2459 if (!this._alive) return 2460 this._fetched.delete(id) 2461 this._queue.add(id) 2462 this.scheduleBatch() 2463 }, 45000) 2464 ) 2465 } else { 2466 this._fetched.add(id) 2467 this._negatives.add(id) 2468 const cell = this.$root.querySelector(`${CELL_SELECTOR}[${ID_ATTR}="${id}"]`) 2469 if (cell) this.renderNoImage(cell) 2470 } 2471 continue 2472 } 2473 this._fetched.add(id) 2474 // Persist positive URLs only; track "no image" in the 2475 // session-only negatives set. The old code cached a 2476 // permanent __NO_THUMB__ sentinel, so an estate that later 2477 // gained photos showed the placeholder forever. 2478 if (url) { 2479 this._negatives.delete(id) 2480 try { 2481 localStorage.setItem(STORE_KEY + id, url) 2482 } catch {} 2483 } else { 2484 this._negatives.add(id) 2485 // Purge any stale cached positive: the 2486 // authoritative null must not resurface 2487 // an old image on the next morph-revert. 2488 try { 2489 localStorage.removeItem(STORE_KEY + id) 2490 } catch {} 2491 } 2492 const cell = this.$root.querySelector(`${CELL_SELECTOR}[${ID_ATTR}="${id}"]`) 2493 if (!cell) continue 2494 if (url) this.renderImage(cell, url) 2495 else this.renderNoImage(cell) 2496 } 2497 }, 2498 2499 renderImage(cell, url) { 2500 cell.dataset.imageLoaded = '1' 2501 cell.removeAttribute('style') 2502 cell.removeAttribute('aria-busy') 2503 // A cell can arrive here styled as a placeholder 2504 // (error-retry renders one during the round-trip) 2505 // â strip those classes or the img sits in a grey 2506 // flexbox. 2507 cell.classList.remove( 2508 'flex', 2509 'items-center', 2510 'justify-center', 2511 'bg-gray-100', 2512 'text-gray-400', 2513 'dark:bg-gray-700', 2514 'dark:text-gray-500' 2515 ) 2516 // Build the node (not innerHTML) so the alt is escaped by the 2517 // DOM and the error handler stays out of markup â no inline 2518 // handler for the CSP to trip over. 2519 const img = document.createElement('img') 2520 img.className = cell.dataset.imgClass || DEFAULT_IMG_CLASS 2521 img.alt = cell.getAttribute(ALT_ATTR) || '' 2522 // No native loading="lazy" here: our IntersectionObserver 2523 // (rootMargin 300px) already defers the fetch until the cell 2524 // nears the viewport, so the URL is only injected when the 2525 // image is imminently needed. A second native-lazy gate on 2526 // top adds nothing in Chrome but, in privacy-hardened engines 2527 // (Brave), defers the fetch again and leaves the card blank 2528 // at the user's scroll position. Inject eagerly. 2529 img.addEventListener( 2530 'error', 2531 () => { 2532 // A resolved URL that 404s (moved/pruned R2 object) 2533 // proves only that THIS url is dead â never that the 2534 // record has no image. Drop the poisoned positive and 2535 // re-ask the SERVER once (its answer is authoritative, 2536 // same family rule as the map sidebar); only after a 2537 // second failure fall back to the placeholder. 2538 const id = cell.getAttribute(ID_ATTR) 2539 if (id) { 2540 try { 2541 localStorage.removeItem(STORE_KEY + id) 2542 } catch {} 2543 this._retried = this._retried || new Set() 2544 if (!this._retried.has(id)) { 2545 this._retried.add(id) 2546 this._fetched.delete(id) 2547 this._queue.add(id) 2548 this.scheduleBatch() 2549 // Placeholder (not a broken glyph) 2550 // while the retry round-trips; a 2551 // fresh URL swaps back in via 2552 // handleBatch. 2553 this.renderNoImage(cell) 2554 return 2555 } 2556 this._negatives.add(id) 2557 } 2558 this.renderNoImage(cell) 2559 }, 2560 { once: true } 2561 ) 2562 img.src = url 2563 cell.replaceChildren(img) 2564 }, 2565 2566 renderNoImage(cell) { 2567 cell.dataset.imageLoaded = '1' 2568 cell.removeAttribute('style') 2569 cell.removeAttribute('aria-busy') 2570 cell.classList.add( 2571 'flex', 2572 'items-center', 2573 'justify-center', 2574 'bg-gray-100', 2575 'text-gray-400', 2576 'dark:bg-gray-700', 2577 'dark:text-gray-500' 2578 ) 2579 cell.innerHTML = `<svg class="size-12" fill="none" stroke="currentColor" stroke-width="1.5" viewB
2579ox="0 0 24 24" aria-hidden="true"><path d="m2.25 15.75 5.159-5.159a2.25 2.25 0 0 1 3.182 0l5.159 5.159m-1.5-1.5 1.409-1.409a2.25 2.25 0 0 1 3.182 0l2.909 2.909m-18 3.75h16.5a1.5 1.5 0 0 0 1.5-1.5V6a1.5 1.5 0 0 0-1.5-1.5H3.75A1.5 1.5 0 0 0 2.25 6v12a1.5 1.5 0 0 0 1.5 1.5Z" stroke-linecap="round" stroke-linejoin="round"/></svg>` 2580 } 2581 } 2582 } 2583 })() 2584 </script>
2584 2585
2585<script> 2586 window.blogCardLazy = () => 2587 window.lazyImageGrid({ 2588 storageKey: 'blogcardthumb:v2:', 2589 cellAttr: 'data-blog-image-cell', 2590 idAttr: 'data-page-id', 2591 altAttr: 'data-page-alt', 2592 eventName: 'blog-thumbnails-loaded', 2593 wireMethod: 'loadThumbnailsForPages', 2594 defaultImgClass: 'size-full object-cover' 2595 }) 2596 </script>
2596 2597
2597<script src="/livewire/livewire.min.js?id=6f2ea2c9" data-csrf="9ghEubkJTep89b0znOYODOU91KqhnmMbPc0O2ewA" data-update-uri="/livewire/update" data-navigate-once="true"></script>
vendor: 1 bytes, line 2597
2597
2598<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:'a45715140d40f861',t:'MTc5MTE0NzI3Mg=='};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>
2598</body> 2599</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.