{"id":17232,"date":"2020-03-11T20:26:23","date_gmt":"2020-03-11T20:26:23","guid":{"rendered":"https:\/\/demo37.houzez.co\/?page_id=17232"},"modified":"2026-07-23T09:59:59","modified_gmt":"2026-07-23T09:59:59","slug":"hesperange-english-real-estate-agency","status":"publish","type":"page","link":"https:\/\/zeas.immo\/en\/","title":{"rendered":"Hesperange real estate"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"17232\" class=\"elementor elementor-17232\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7562bbd e-flex e-con-boxed e-con e-parent\" data-id=\"7562bbd\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-35172d9 elementor-widget elementor-widget-html\" data-id=\"35172d9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <title>Zeas Immo \u2014 Hesperange Real Estate<\/title>\n\n  <!-- Brand fonts: DM Sans (body) + Poppins (buttons). The CSS references these\n       throughout; without loading them the page silently falls back to Helvetica. -->\n  <link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n  <link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n  <link href=\"https:\/\/fonts.googleapis.com\/css2?family=DM+Sans:opsz,wght@9..40,300;9..40,400;9..40,500;9..40,600;9..40,700&family=Poppins:wght@400;500;600&display=swap\" rel=\"stylesheet\">\n\n  <style>\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   zeas.immo \u2014 Homepage Part 1  (v4 \u2014 Jul 2026)\n   v4 changes:\n   - Section reorder (widening lens): Market grid moved up under Pillars\n   - NEW International (exclusive) section \u2014 editorial cards\n   - eXp listings renamed \"The wider network behind us\" + eXp-blue accent\n   - NEW closing CTA band\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n\n.eyebrow {\n  display: flex; align-items: center; gap: 12px;\n  font-size: 11px; font-weight: 600;\n  letter-spacing: 0.18em; text-transform: uppercase;\n  color: #FF5C0B; margin-bottom: 16px;\n}\n.eyebrow::before, .eyebrow::after {\n  content: ''; width: 24px; height: 1px; background: #FF5C0B; flex-shrink: 0;\n}\n.eyebrow.center  { justify-content: center; }\n.eyebrow.no-line::before, .eyebrow.no-line::after { display: none; }\n.eyebrow.dk::before, .eyebrow.dk::after { background: #444240; }\n\n\/* Mobile-safe eyebrow for market section *\/\n.market-eyebrow {\n  width: 100%;\n  max-width: 100%;\n  padding: 0 16px;\n  box-sizing: border-box;\n}\n.market-eyebrow::before,\n.market-eyebrow::after {\n  flex: 1 1 24px;\n  width: auto;\n  min-width: 16px;\n}\n.market-eyebrow .eyebrow-text {\n  display: block;\n  min-width: 0;\n  text-align: center;\n  white-space: normal;\n  overflow-wrap: anywhere;\n  word-break: normal;\n  line-height: 1.45;\n}\n\n\n.stitle {\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: clamp(26px, 3vw, 40px); font-weight: 500;\n  color: #111110; line-height: 1.1; letter-spacing: -0.02em;\n}\n.stitle.dk  { color: #f5f3ef; }\n.stitle.ctr { text-align: center; }\n\n\/* \u2500\u2500\u2500 BUTTONS \u2500\u2500\u2500 *\/\n.btn-primary {\n  display: inline-flex; align-items: center; gap: 10px;\n  background: #FF5C0B !important; color: #fff !important;\n  padding: 15px 38px; font-family: 'Poppins', sans-serif;\n  font-size: 15px; font-weight: 500; letter-spacing: 0.05em;\n  text-decoration: none !important; border: none; cursor: pointer;\n  transition: background 220ms, transform 150ms;\n}\n.btn-primary:hover,\n.btn-primary:focus { background: #FF6E28 !important; color: #fff !important; transform: translateY(-2px); }\n.btn-primary svg   { width: 16px; height: 16px; transition: transform 220ms; color: #fff !important; }\n.btn-primary:hover svg { transform: translateX(4px); }\n\n.btn-outline {\n  display: inline-flex !important; align-items: center !important; gap: 10px !important;\n  background: transparent !important; color: #f5f3ef !important;\n  padding: 14px 36px !important; border: 1px solid rgba(255,255,255,0.35) !important;\n  font-family: 'Poppins', sans-serif !important; font-size: 15px !important;\n  font-weight: 500 !important; letter-spacing: 0.05em !important;\n  text-decoration: none !important; cursor: pointer !important;\n  transition: border-color 220ms, background 220ms, color 220ms !important;\n}\n.btn-outline:hover { border-color: #FF5C0B !important; background: #FF5C0B !important; color: #fff !important; }\n.btn-outline svg   { width: 16px; height: 16px; transition: transform 220ms; color: #f5f3ef !important; }\n.btn-outline:hover svg { transform: translateX(4px); }\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   HERO\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n.hero {\n  background: #111110;\n  position: relative; overflow: hidden; text-align: center;\n}\n.hero::after {\n  content: ''; position: absolute; inset: 0; pointer-events: none;\n  background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='300' height='300'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.75' numOctaves='4' stitchTiles='stitch'\/%3E%3C\/filter%3E%3Crect width='300' height='300' filter='url(%23n)' opacity='0.035'\/%3E%3C\/svg%3E\");\n}\n.hero-body {\n  position: relative; z-index: 1;\n  display: flex; flex-direction: column; align-items: center;\n  padding-top: 72px; padding-bottom: 64px;\n}\n.hero h1 {\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: clamp(40px, 5.5vw, 66px); font-weight: 500;\n  line-height: 1.05; letter-spacing: -0.025em;\n  color: #f5f3ef; margin-bottom: 24px; max-width: 820px;\n  white-space: normal !important; overflow-wrap: break-word;\n}\n.hero h1 em { font-style: italic; color: #FF5C0B; }\n.hero-sub {\n  font-size: 16px; font-weight: 300; color: #a9a49d;\n  line-height: 1.8; max-width: 560px; margin: 0 auto 64px;\n}\n.hero-cta-row {\n  display: flex; align-items: center;\n  justify-content: center; gap: 24px; flex-wrap: wrap;\n}\n.stat-bar {\n  position: relative; z-index: 1;\n  display: grid; grid-template-columns: repeat(4, 1fr);\n  border-top: 1px solid #2e2e2b;\n}\n.stat-item {\n  padding: 28px 20px; text-align: center;\n  border-right: 1px solid #2e2e2b;\n}\n.stat-item:last-child { border-right: none; }\n.stat-num {\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 48px; font-weight: 300;\n  line-height: 1; color: #f5f3ef; letter-spacing: -0.03em;\n}\n.stat-num sup { font-size: 20px; font-weight: 400; vertical-align: super; color: #FF5C0B; }\n.stat-label { font-size: 15px; font-weight: 300; color: #c8c4be; line-height: 1.5; margin-top: 6px; }\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   MANDATE BANNER\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n.mandate {\n  background: #FF5C0B; padding: 14px 60px;\n  display: flex; align-items: center; justify-content: center;\n  gap: 28px; flex-wrap: wrap;\n}\n.mitem { display: flex; align-items: center; gap: 8px; font-size: 13px; font-weight: 500; color: #fff; }\n.mitem svg { width: 15px; height: 15px; flex-shrink: 0; }\n.msep { width: 1px; height: 16px; background: rgba(255,255,255,0.3); }\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   THREE PILLARS\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n.pillars-section {\n  background: #faf9f7;\n  border-top: 1px solid #e4e0da;\n  border-bottom: 1px solid #e4e0da;\n  padding: 80px 0;\n}\n.pillars-intro {\n  text-align: center; margin-bottom: 56px;\n}\n.pillars-intro p {\n  font-size: 16px; color: #555552;\n  max-width: 540px; margin: 0 auto; line-height: 1.75;\n}\n\n\/* 3-column cards + shared panel below *\/\n.pillars-grid {\n  display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 20px;\n  max-width: 1240px !important; margin-left: auto !important; margin-right: auto !important; width: 100%;\n}\n.pillar-card {\n  display: flex; flex-direction: column; min-width: 0; overflow: hidden;\n  background: #fff; border: 1px solid #e4e0da; border-bottom: 2px solid transparent;\n  padding: 26px 24px 22px; text-align: left; cursor: pointer;\n  font-family: inherit;\n  transition: border-color .2s, transform .2s, box-shadow .2s;\n}\n.pillar-card:hover {\n  transform: translateY(-3px);\n  border-color: #d8d4ce !important;\n  box-shadow: 0 10px 28px rgba(17,17,16,.09) !important;\n}\n.pillar-card.open {\n  border-color: #d8d4ce;\n  border-bottom-color: #FF5C0B !important;\n  box-shadow: 0 8px 22px rgba(17,17,16,.07);\n}\n.pillar-tag {\n  font-size: 10px; font-weight: 600; letter-spacing: 0.2em;\n  text-transform: uppercase; color: #FF5C0B; margin-bottom: 12px;\n}\n.pillar-line-1, .pillar-line-2, .pillar-line-3 {\n  white-space: normal !important; overflow-wrap: break-word; word-break: normal; max-width: 100%;\n}\n.pillar-line-1 {\n  font-size: clamp(16px, 1.5vw, 19px); font-weight: 500;\n  color: #111110; line-height: 1.3; letter-spacing: -0.015em; margin-bottom: 8px;\n}\n.pillar-line-2 {\n  font-size: 14px; font-weight: 400; color: #FF5C0B; line-height: 1.45;\n}\n.pillar-card-foot {\n  display: flex; align-items: center; justify-content: space-between; gap: 12px;\n  margin-top: auto; padding-top: 20px;\n}\n.pillar-line-3 {\n  font-size: 12px; color: #999895; font-weight: 400; line-height: 1.4;\n  transition: color 220ms;\n}\n.pillar-card:hover .pillar-line-3, .pillar-card.open .pillar-line-3 { color: #FF5C0B; }\n.pillar-toggle {\n  width: 30px; height: 30px; flex-shrink: 0;\n  border: 1px solid #e4e0da; display: flex; align-items: center; justify-content: center;\n  transition: border-color 220ms, background 220ms;\n}\n.pillar-card:hover .pillar-toggle { border-color: #FF5C0B; background: rgba(255,92,11,.06); }\n.pillar-card.open .pillar-toggle { border-color: #FF5C0B; background: #FF5C0B; }\n.pillar-toggle-icon {\n  width: 13px; height: 13px; color: #FF5C0B; transition: transform 250ms, color 220ms;\n  animation: pillarPulse 2.4s ease-in-out infinite;\n}\n.pillar-card.open .pillar-toggle-icon { transform: rotate(45deg); color: #fff; animation: none; }\n@keyframes pillarPulse {\n  0%, 100% { opacity: 1; transform: scale(1); }\n  50%       { opacity: 0.45; transform: scale(0.82); }\n}\n\n\/* Shared panel below the card row \u2014 only the active one is visible *\/\n.pillars-panels { max-width: 1240px; margin: 0 auto; width: 100%; }\n.pillars-expanded {\n  max-height: 0; overflow: hidden;\n  transition: max-height 0.45s cubic-bezier(0, 0, 0.3, 1);\n}\n.pillars-expanded.visible { max-height: 1400px; }\n.pillars-expanded-inner {\n  position: relative;\n  margin-top: 18px; padding: 36px 40px;\n  background: #ffffff; border: 1px solid #e4e0da; border-top: 2px solid #FF5C0B;\n  display: grid; grid-template-columns: 1.6fr 1fr;\n  gap: 40px; align-items: stretch;\n}\n\/* Pointer\/notch connecting the panel to the active card *\/\n.pillars-expanded-inner::before {\n  content: ''; position: absolute; top: -9px; left: 50%; width: 16px; height: 16px;\n  background: #ffffff; border-left: 1px solid #e4e0da; border-top: 1px solid #e4e0da;\n  transform: translateX(-50%) rotate(45deg);\n}\n#expand-buying  .pillars-expanded-inner::before { left: 16.6%; }\n#expand-selling .pillars-expanded-inner::before { left: 50%; }\n#expand-renting .pillars-expanded-inner::before { left: 83.4%; }\n@media (max-width: 860px) {\n  .pillars-grid { grid-template-columns: 1fr; }\n  \/* panel now sits directly under its card (moved by JS) \u2014 the grid gap is enough *\/\n  .pillars-expanded-inner { margin-top: 0; }\n}\n.pillar-proof-label {\n  font-size: 11px; font-weight: 600; letter-spacing: 0.14em;\n  text-transform: uppercase; color: #FF5C0B; margin-bottom: 14px;\n  display: block;\n}\n.pillar-proof p {\n  font-size: 16px; color: #555552; line-height: 1.8;\n  font-weight: 300; margin-bottom: 14px;\n}\n.pillar-proof strong { color: #111110; font-weight: 500; }\n.pillar-proof-stat {\n  display: inline-flex; align-items: baseline; gap: 10px;\n  padding: 12px 20px; background: rgba(255,92,11,0.06);\n  border-left: 2px solid #FF5C0B; margin-top: 8px;\n}\n.pstat-num {\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 32px; font-weight: 300; color: #111110;\n  letter-spacing: -0.02em; line-height: 1;\n}\n.pstat-label { font-size: 13px; color: #555552; font-weight: 300; line-height: 1.4; }\n.pstat-note { font-size: 11px; color: #999895; margin-top: 8px; display: block; }\n.pillar-cta-col {\n  display: flex; flex-direction: column;\n  justify-content: center; gap: 18px;\n  background: #faf9f7; border: 1px solid #e4e0da; padding: 28px 26px;\n}\n.pillar-ac-label {\n  font-size: 11px; font-weight: 600; letter-spacing: 0.14em;\n  text-transform: uppercase; color: #999895;\n}\n.pillar-ac-stat { display: flex; align-items: baseline; gap: 10px; }\n.pillar-ac-stat .n {\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 40px; font-weight: 300; color: #111110; letter-spacing: -0.02em; line-height: 1;\n}\n.pillar-ac-stat .t { font-size: 13px; color: #555552; line-height: 1.4; }\n.pillar-ac-bullets { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 9px; }\n.pillar-ac-bullets li { display: flex; align-items: flex-start; gap: 9px; font-size: 14px; color: #555552; line-height: 1.4; }\n.pillar-ac-bullets svg { width: 15px; height: 15px; color: #FF5C0B; flex-shrink: 0; margin-top: 2px; }\n.pillar-cta-link {\n  display: inline-flex; align-items: center; gap: 10px;\n  background: #FF5C0B; color: #fff;\n  padding: 15px 32px; font-family: 'Poppins', sans-serif;\n  font-size: 14px; font-weight: 500; letter-spacing: 0.04em;\n  text-decoration: none; transition: background 220ms, transform 150ms;\n  align-self: flex-start;\n}\n.pillar-cta-link:hover { background: #FF6E28; transform: translateY(-2px); }\n.pillar-cta-link svg { width: 14px; height: 14px; transition: transform 200ms; }\n.pillar-cta-link:hover svg { transform: translateX(4px); }\n.pillar-secondary-link {\n  font-size: 13px; color: #555552; font-weight: 400;\n  border-bottom: 1px solid #e4e0da; padding-bottom: 2px;\n  align-self: flex-start;\n  transition: color 220ms, border-color 220ms;\n}\n.pillar-secondary-link:hover { color: #FF5C0B; border-color: #FF5C0B; }\n\n\/* \u2500\u2500 ANIMATIONS \u2500\u2500 *\/\n@keyframes fadeUp {\n  from { opacity: 0; transform: translateY(18px); }\n  to   { opacity: 1; transform: translateY(0); }\n}\n.hero .eyebrow { animation: fadeUp .5s cubic-bezier(0.25, 0.1, 0.25, 1) both; }\n.hero h1       { animation: fadeUp .6s .08s cubic-bezier(0.25, 0.1, 0.25, 1) both; }\n.hero-sub      { animation: fadeUp .6s .16s cubic-bezier(0.25, 0.1, 0.25, 1) both; }\n.hero-cta-row  { animation: fadeUp .6s .24s cubic-bezier(0.25, 0.1, 0.25, 1) both; }\n.stat-bar      { animation: fadeUp .5s .30s cubic-bezier(0.25, 0.1, 0.25, 1) both; }\n\n\/* \u2500\u2500 RESPONSIVE \u2500\u2500 *\/\n@media (max-width: 960px) {\n  .stat-bar { grid-template-columns: repeat(2, 1fr); }\n  .stat-item:nth-child(2) { border-right: none; }\n  .stat-item:nth-child(3), .stat-item:nth-child(4) { border-top: 1px solid #2e2e2b; }\n  .stat-item:nth-child(4) { border-right: none; }\n  .pillars-expanded-inner { padding: 28px 24px; grid-template-columns: 1fr; gap: 28px; }\n  .pillars-expanded-inner::before { display: none; }\n  .pillar-cta-col { padding-top: 4px; }\n  .msep      { display: none; }\n  .mandate   { gap: 12px; }\n  .drawer-sub { white-space: normal; }\n  .drawer-title { font-size: 20px; }\n  \/* Pillars container padding *\/\n  .pillars-inner { padding-left: 24px !important; padding-right: 24px !important; }\n  \/* Toggle box *\/\n  .pillar-toggle { width: 28px !important; height: 28px !important; }\n}\n@media (max-width: 600px) {\n  .hero h1 { font-size: 36px; }\n  .hero-cta-row { flex-direction: column; align-items: stretch; }\n  .btn-primary, .btn-outline { justify-content: center; }\n  .stat-bar { grid-template-columns: 1fr 1fr; }\n  .mandate   { flex-direction: column; gap: 8px; padding: 14px 20px; }\n  \/* Pillars container padding *\/\n  .pillars-inner { padding-left: 20px !important; padding-right: 20px !important; }\n  \/* Pillar cards tighter on mobile *\/\n  .pillar-card { padding: 22px 20px 20px; }\n  .pillar-line-1,\n  .pillar-line-2,\n  .pillar-line-3 {\n    white-space: normal !important;\n    word-break: break-word !important;\n    overflow-wrap: break-word !important;\n  }\n  \/* Expanded panel *\/\n  .pillars-expanded-inner { padding: 24px 20px !important; grid-template-columns: 1fr !important; gap: 20px !important; }\n}\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   FORM DRAWERS\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n.form-drawer {\n  background: #faf9f7; border-bottom: 1px solid #e4e0da;\n  max-height: 0; overflow: hidden;\n  transition: max-height 500ms cubic-bezier(0, 0, 0.3, 1), opacity 400ms ease;\n  opacity: 0;\n}\n.form-drawer.open { max-height: 800px; opacity: 1; }\n.drawer-inner { padding: 64px 0 40px; }\n.drawer-hd {\n  display: flex; align-items: flex-start;\n  justify-content: space-between; gap: 40px; margin-bottom: 40px;\n}\n.drawer-eyebrow { font-size: 10px; font-weight: 600; letter-spacing: 0.2em; text-transform: uppercase; color: #FF5C0B; margin-bottom: 8px; }\n.drawer-title {\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: clamp(22px, 2.5vw, 30px); font-weight: 500;\n  color: #111110; letter-spacing: -0.02em; margin-bottom: 8px;\n}\n.drawer-sub { font-size: 14px; color: #555552; line-height: 1.7; max-width: 480px; }\n.drawer-close {\n  flex-shrink: 0; width: 40px; height: 40px;\n  background: #edeae4; border: none; cursor: pointer;\n  display: flex; align-items: center; justify-content: center;\n  color: #555552; transition: background 220ms, color 220ms;\n}\n.drawer-close:hover { background: #FF5C0B; color: #fff; }\n.drawer-close svg { width: 18px; height: 18px; }\n.drawer-form-wrap { margin-bottom: 24px; }\n.form-placeholder {\n  background: #f5f3ef; border: 1px dashed #e4e0da;\n  padding: 32px; text-align: center;\n  font-size: 13px; color: #999895; font-style: italic;\n}\n.drawer-footer-link { font-size: 13px; color: #999895; }\n.drawer-footer-link a { color: #FF5C0B; }\n.drawer-footer-link a:hover { text-decoration: underline; }\n\n\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   zeas.immo \u2014 eXp Listings Section (homepage insert)\n   v6 \u2014 filters + enquiry modal, no agent names\n   Section \u2192 Full Width, Container \u2192 Full Width, Padding 0\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n\n.exp-section {\n  padding: 96px 0 72px;\n  background: #ffffff;\n  border-top: 1px solid #e4e0da;\n  border-bottom: 1px solid #e4e0da;\n}\n.exp-inner {\n  max-width: 1240px;\n  margin: 0 auto;\n  padding: 0 60px;\n}\n\n\/* \u2500\u2500 Header \u2500\u2500 *\/\n.exp-hd { text-align: center; margin-bottom: 36px; }\n.exp-eyebrow {\n  display: flex; align-items: center; justify-content: center; gap: 12px;\n  font-size: 12.5px; font-weight: 600;\n  letter-spacing: 0.18em; text-transform: uppercase;\n  color: #FF5C0B; margin-bottom: 22px;\n}\n.exp-eyebrow::before, .exp-eyebrow::after {\n  content: ''; width: 24px; height: 1px; background: #FF5C0B; flex-shrink: 0;\n}\n.exp-title {\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: clamp(26px, 3vw, 40px);\n  font-weight: 500; color: #111110;\n  line-height: 1.1; letter-spacing: -0.02em;\n  margin-bottom: 20px;\n}\n.exp-see-all {\n  display: inline-block;\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 13px; font-weight: 500;\n  color: #FF5C0B; text-decoration: none;\n  letter-spacing: 0.04em;\n  border-bottom: 1px solid #FF5C0B;\n  padding-bottom: 1px;\n  transition: opacity 200ms;\n}\n.exp-see-all:hover { opacity: 0.7; }\n\n\/* Shared \"See all \u2026\" button \u2014 orange, turns black on hover *\/\n.btn-seeall {\n  display: inline-flex !important; align-items: center; gap: 10px;\n  background: #FF5C0B !important; color: #ffffff !important;\n  padding: 15px 38px; font-family: 'Poppins', sans-serif;\n  font-size: 15px; font-weight: 500; letter-spacing: 0.05em;\n  text-decoration: none !important; border: none; cursor: pointer;\n  transition: background 220ms, transform 150ms;\n}\n.btn-seeall:hover, .btn-seeall:focus {\n  background: #111110 !important; color: #ffffff !important; transform: translateY(-2px);\n}\n\n\/* \u2500\u2500 Filter bar \u2500\u2500 *\/\n.exp-filter-row {\n  display: flex; align-items: center; gap: 12px;\n  flex-wrap: wrap; margin-bottom: 20px;\n  justify-content: center;\n}\n.exp-filter-label {\n  font-size: 11px; font-weight: 600;\n  letter-spacing: 0.1em; text-transform: uppercase;\n  color: #999895; flex-shrink: 0;\n}\n.exp-filters { display: flex; gap: 6px; flex-wrap: wrap; }\n.exp-filter-btn {\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 11px; font-weight: 500;\n  padding: 5px 14px;\n  border: 1.5px solid #e4e0da;\n  background: #ffffff; color: #555552;\n  cursor: pointer; transition: all 150ms;\n  text-transform: uppercase; letter-spacing: 0.05em; white-space: nowrap;\n}\n.exp-filter-btn:hover { border-color: #FF5C0B; color: #FF5C0B; }\n.exp-filter-btn.active { background: #FF5C0B; border-color: #FF5C0B; color: #ffffff; }\n\n.exp-reset-btn {\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 11px; font-weight: 500;\n  padding: 5px 16px;\n  border: 1.5px solid #d4cfc7;\n  background: #ffffff; color: #777470;\n  cursor: pointer; transition: all 150ms;\n  text-transform: uppercase; letter-spacing: 0.05em; white-space: nowrap;\n  margin-left: auto;\n}\n.exp-reset-btn:hover { border-color: #FF5C0B; background: #FF5C0B; color: #ffffff; }\n\n.exp-filter-select {\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 11px; color: #555552;\n  padding: 5px 26px 5px 11px;\n  border: 1.5px solid #e4e0da;\n  background: #ffffff url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%23999895' stroke-width='1.5' fill='none' stroke-linecap='round'\/%3E%3C\/svg%3E\") no-repeat right 9px center;\n  appearance: none; -webkit-appearance: none; cursor: pointer; outline: none;\n}\n.exp-filter-select:focus { border-color: #FF5C0B; }\n\n\/* \u2500\u2500 Refine panel: commune + price on one row \u2500\u2500 *\/\n.exp-refine {\n  display: flex; flex-wrap: wrap; align-items: center; justify-content: center;\n  gap: 30px; margin: 22px auto 0; max-width: 800px;\n  background: transparent; border: none; padding: 22px 32px;\n}\n.exp-f-field { display: flex; flex-direction: column; gap: 11px; min-width: 0; }\n.exp-f-label {\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 11px; font-weight: 600; letter-spacing: 0.12em; text-transform: uppercase;\n  color: #999895; text-align: left;\n}\n.exp-f-divider { width: 1px; align-self: stretch; background: #e4e0da; margin: 6px 0; }\n.exp-f-price { flex: 1 1 320px; }\n\n\/* Commune select *\/\n.exp-select-wrap { position: relative; display: inline-flex; align-items: center; }\n.exp-select-pin { position: absolute; left: 13px; color: #FF5C0B; pointer-events: none; }\n.exp-select {\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 14px; color: #111110; font-weight: 500;\n  padding: 12px 36px 12px 36px; min-width: 190px; width: 100%;\n  border: 1.5px solid #e4e0da; background-color: #ffffff;\n  background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%23555552' stroke-width='1.5' fill='none' stroke-linecap='round'\/%3E%3C\/svg%3E\");\n  background-repeat: no-repeat; background-position: right 13px center;\n  appearance: none; -webkit-appearance: none; cursor: pointer; outline: none;\n  transition: border-color 180ms;\n}\n.exp-select:hover { border-color: #c9c4bc; }\n.exp-select:focus { border-color: #FF5C0B; }\n\n\/* Price dual slider with live value bubbles *\/\n.exp-range { position: relative; height: 48px; }\n.exp-range-track {\n  position: absolute; left: 0; right: 0; top: 34px; height: 5px;\n  background: #e4e0da; border-radius: 3px;\n}\n.exp-range-fill {\n  position: absolute; top: 34px; height: 5px;\n  background: #FF5C0B; border-radius: 3px;\n}\n.exp-range-bub {\n  position: absolute; top: 2px; transform: translateX(-50%);\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 13px; font-weight: 700; color: #FF5C0B; white-space: nowrap;\n}\n.exp-range input[type=range] {\n  position: absolute; top: 24px; left: 0; width: 100%; height: 24px; margin: 0;\n  background: none; pointer-events: none; -webkit-appearance: none; appearance: none;\n}\n.exp-range input[type=range]::-webkit-slider-thumb {\n  -webkit-appearance: none; appearance: none; pointer-events: auto;\n  width: 23px; height: 23px; border-radius: 50%;\n  background: #FF5C0B; border: 3px solid #ffffff;\n  box-shadow: 0 1px 6px rgba(17,17,16,.3); cursor: pointer;\n}\n.exp-range input[type=range]::-moz-range-thumb {\n  pointer-events: auto; width: 23px; height: 23px; border-radius: 50%;\n  background: #FF5C0B; border: 3px solid #ffffff;\n  box-shadow: 0 1px 6px rgba(17,17,16,.3); cursor: pointer;\n}\n.exp-range input[type=range]::-moz-range-track { background: none; border: none; }\n.exp-range input[type=range]:focus { outline: none; }\n\n@media (max-width: 620px) {\n  \/* keep the whole filter cluster centered (don't shove Reset to the far right) *\/\n  .exp-filter-row { gap: 8px 10px; margin-bottom: 12px; }\n  .exp-reset-btn { margin-left: 0; }\n  \/* commune + price stacked, compact, centered, and close to the cards *\/\n  .exp-refine { flex-direction: column; gap: 16px; padding: 12px 4px 0; margin: 12px auto 0; max-width: 420px; }\n  .exp-f-divider { display: none; }\n  .exp-f-field, .exp-f-price { width: 100%; }\n  \/* ~20px between the price slider and the property grid *\/\n  .exp-count { margin: 8px 0 12px; }\n}\n\n\/* Mobile: consistent ~15px spacing at the top\/bottom of each section *\/\n@media (max-width: 600px) {\n  .pillars-section, .market, .intl, .exp-section {\n    padding-top: 15px !important;\n    padding-bottom: 15px !important;\n  }\n}\n\n\/* \u2500\u2500 Count \u2014 PATCH 1: larger + darker \u2500\u2500 *\/\n.exp-count {\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 14px; color: #555552; font-weight: 500; margin-bottom: 16px; text-align: center;\n}\n.exp-count strong { color: #111110; font-weight: 700; }\n\n\/* \u2500\u2500 Loading \/ error \u2500\u2500 *\/\n.exp-loading {\n  display: flex; align-items: center; justify-content: center; gap: 12px;\n  color: #999895; font-size: 14px;\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; padding: 32px 0;\n}\n.exp-spinner {\n  width: 18px; height: 18px;\n  border: 2px solid #e4e0da; border-top-color: #FF5C0B;\n  border-radius: 50%; animation: expspin 0.7s linear infinite; flex-shrink: 0;\n}\n@keyframes expspin { to { transform: rotate(360deg); } }\n.exp-error { font-size: 13px; color: #c0392b; padding: 16px 0; text-align: center; }\n.exp-empty { text-align: center; padding: 40px 0; color: #999895; font-size: 14px;\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; }\n\n\/* \u2500\u2500 Grid \u2500\u2500 *\/\n.exp-grid {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 24px;\n  max-width: 1240px; margin: 0 auto; width: 100%;\n}\n\n\/* \u2500\u2500 Card \u2500\u2500 *\/\n.exp-card {\n  background: #ffffff;\n  border: 1px solid #e4e0da; border-bottom: 2px solid transparent;\n  display: flex; flex-direction: column;\n  cursor: pointer;\n  transition: transform 220ms, box-shadow 220ms, border-color 220ms;\n}\n.exp-card:hover {\n  transform: translateY(-3px);\n  box-shadow: 0 6px 20px rgba(17,17,16,.08);\n  border-color: #e4e0da; border-bottom-color: #FF5C0B;\n}\n.exp-card-img {\n  position: relative; aspect-ratio: 4\/3;\n  overflow: hidden; background: #f0efed;\n}\n.exp-card-img img {\n  width:100%; height:100%; object-fit:cover; display:block;\n  transition: transform 400ms;\n}\n.exp-card:hover .exp-card-img img { transform: scale(1.04); }\n.exp-card-badge {\n  position: absolute; top: 10px; left: 10px;\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 9px; font-weight: 700;\n  letter-spacing: 0.1em; text-transform: uppercase;\n  padding: 3px 8px; background: #FF5C0B; color: #ffffff;\n}\n.exp-card-badge.rental { background: #111110; }\n.exp-card-type {\n  position: absolute; bottom: 10px; left: 10px;\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 10px; font-weight: 500; letter-spacing: 0.04em;\n  background: rgba(17,17,16,0.65); backdrop-filter: blur(4px);\n  color: #ffffff; padding: 3px 8px;\n}\n\/* PATCH 9: eXp network badge \u2014 top-right of card image *\/\n.exp-card-network-badge {\n  position: absolute; top: 10px; right: 10px;\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 9px; font-weight: 700;\n  letter-spacing: 0.09em; text-transform: uppercase;\n  padding: 3px 8px;\n  background: rgba(119,116,112,0.85);\n  backdrop-filter: blur(3px); -webkit-backdrop-filter: blur(3px);\n  color: #ffffff;\n}\n.exp-card-body {\n  padding: 18px 18px 16px; flex: 1;\n  display: flex; flex-direction: column; gap: 6px;\n}\n.exp-card-price {\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 24px; font-weight: 600; color: #FF5C0B; line-height: 1;\n}\n.exp-card-price .pm { font-size: 13px; font-weight: 400; color: #999895; }\n.exp-card-title {\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 16px; font-weight: 600; color: #111110; line-height: 1.35;\n  display: -webkit-box; -webkit-line-clamp: 2;\n  -webkit-box-orient: vertical; overflow: hidden;\n}\n.exp-card-city {\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 14.5px; color: #777470;\n  display: flex; align-items: center; gap: 5px;\n}\n.exp-card-city svg { flex-shrink: 0; color: #FF5C0B; }\n.exp-card-specs {\n  display: flex; gap: 16px;\n  padding-top: 12px; border-top: 1px solid #f0efed; margin-top: 4px;\n}\n.exp-spec {\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 14.5px; color: #555552;\n  display: flex; align-items: center; gap: 5px;\n}\n.exp-spec strong { color: #111110; font-weight: 700; }\n.exp-card-contact {\n  display: flex; align-items: center; gap: 6px;\n  padding-top: 12px; border-top: 1px solid #f0efed; margin-top: auto;\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 14px; font-weight: 500; color: #FF5C0B; letter-spacing: 0.01em;\n  pointer-events: none;\n}\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   PROPERTY MODAL\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n.exp-overlay {\n  display: none; position: fixed; inset: 0;\n  background: rgba(17,17,16,.78);\n  backdrop-filter: blur(4px); -webkit-backdrop-filter: blur(4px);\n  z-index: 99999; overflow-y: auto;\n  padding: 24px 20px; align-items: flex-start; justify-content: center;\n}\n.exp-overlay.open { display: flex; }\n.exp-modal {\n  background: #ffffff; width: 100%; max-width: 1100px;\n  margin: auto; position: relative; overflow: hidden;\n  animation: expmi .22s ease;\n}\n@keyframes expmi { from{opacity:0;transform:translateY(14px)} to{opacity:1;transform:translateY(0)} }\n.exp-modal-close {\n  position: absolute; top: 14px; right: 14px; z-index: 10;\n  width: 40px; height: 40px;\n  background: #ffffff; border: none; border-radius: 50%; cursor: pointer;\n  display: flex; align-items: center; justify-content: center;\n  color: #111110; transition: background 180ms, color 180ms;\n  box-shadow: 0 2px 8px rgba(17,17,16,.22);\n}\n.exp-modal-close:hover { background: #FF5C0B; color: #ffffff; }\n.exp-modal-gallery {\n  position: relative; height: 60vh; min-height: 320px; max-height: 640px;\n  background: #111110; overflow: hidden; cursor: zoom-in;\n}\n.exp-modal-gallery img { width:100%; height:100%; object-fit:cover; display:block; }\n\/* Edge scrims so the arrows are always legible over any photo *\/\n.exp-modal-gallery.has-multi::before,\n.exp-modal-gallery.has-multi::after {\n  content: ''; position: absolute; top: 0; bottom: 0; width: 110px; z-index: 2;\n  pointer-events: none;\n}\n.exp-modal-gallery.has-multi::before { left: 0;  background: linear-gradient(to right, rgba(17,17,16,.45), rgba(17,17,16,0)); }\n.exp-modal-gallery.has-multi::after  { right: 0; background: linear-gradient(to left,  rgba(17,17,16,.45), rgba(17,17,16,0)); }\n.exp-gal-btn {\n  position: absolute; top: 50%; transform: translateY(-50%);\n  width: 48px; height: 48px; background: rgba(17,17,16,.62);\n  border: 1.5px solid rgba(255,255,255,.7); border-radius: 50%; cursor: pointer; color: #ffffff;\n  display: flex; align-items: center; justify-content: center;\n  transition: background 180ms, transform 180ms; z-index: 6;\n  box-shadow: 0 3px 14px rgba(0,0,0,.4);\n}\n.exp-gal-btn svg { width: 22px; height: 22px; }\n.exp-gal-btn:hover { background: #FF5C0B; border-color: #FF5C0B; transform: translateY(-50%) scale(1.06); }\n.exp-gal-prev { left: 16px; } .exp-gal-next { right: 16px; }\n.exp-gal-ctr {\n  position: absolute; bottom: 14px; right: 16px; z-index: 6;\n  background: rgba(17,17,16,.72); color: #ffffff; font-size: 12px; font-weight: 600;\n  padding: 5px 12px; letter-spacing: .04em; border-radius: 2px;\n  display: inline-flex; align-items: center; gap: 6px;\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n}\n.exp-modal-body { padding: 28px 32px 32px; }\n.exp-modal-top {\n  display: flex; align-items: flex-start; justify-content: space-between;\n  gap: 16px; flex-wrap: wrap; margin-bottom: 20px;\n}\n.exp-modal-title {\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 23px; font-weight: 600; color: #111110;\n  letter-spacing: -0.01em; margin-bottom: 8px;\n}\n.exp-modal-addr {\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 15.5px; color: #777470; display: flex; align-items: center; gap: 5px;\n}\n.exp-listing-attr {\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 13px; color: #999895; font-style: italic;\n  margin-top: 8px; letter-spacing: 0.01em;\n}\n.exp-modal-price {\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 28px; font-weight: 500; color: #FF5C0B; line-height: 1;\n}\n.exp-modal-price .pm { font-size: 14px; font-weight: 400; color: #999895; }\n.exp-energy {\n  display: inline-flex; align-items: center; margin-top: 6px;\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 11px; font-weight: 700; padding: 3px 9px; letter-spacing: 0.04em;\n  background: #f0efed; color: #555552;\n}\n.exp-energy[data-c=\"A\"]{background:#1e7e34;color:#fff} .exp-energy[data-c=\"B\"]{background:#28a745;color:#fff}\n.exp-energy[data-c=\"C\"]{background:#ffc107;color:#333} .exp-energy[data-c=\"D\"]{background:#fd7e14;color:#fff}\n.exp-energy[data-c=\"E\"]{background:#dc3545;color:#fff} .exp-energy[data-c=\"F\"]{background:#9c1313;color:#fff}\n.exp-modal-specs {\n  display: flex; gap: 20px; flex-wrap: wrap;\n  padding: 16px 0; border-top: 1px solid #f0efed; border-bottom: 1px solid #f0efed; margin: 16px 0;\n}\n\/* PATCH 6: modal spec 14px *\/\n.exp-modal-spec {\n  display: flex; align-items: center; gap: 7px;\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 15.5px; color: #111110;\n}\n.exp-modal-spec svg { color: #FF5C0B; flex-shrink: 0; }\n.exp-modal-desc {\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 15.5px; line-height: 1.8; color: #444442;\n  white-space: pre-line;\n}\n\n\/* \u2500\u2500 Read more \/ read less \u2500\u2500 *\/\n.exp-desc-wrap { position: relative; }\n.exp-desc-wrap.is-collapsed .exp-modal-desc { max-height: 230px; overflow: hidden; }\n.exp-desc-fade {\n  display: none; position: absolute; left: 0; right: 0; bottom: 40px; height: 64px;\n  background: linear-gradient(to bottom, rgba(255,255,255,0), #ffffff 85%);\n  pointer-events: none;\n}\n.exp-desc-wrap.is-collapsed .exp-desc-fade { display: block; }\n.exp-read-more {\n  display: inline-flex; align-items: center; gap: 6px; margin-top: 14px;\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 13px; font-weight: 600; letter-spacing: .01em;\n  color: #FF5C0B; background: none; border: none; cursor: pointer; padding: 0;\n  transition: color 150ms;\n}\n.exp-read-more:hover { color: #e04e00; }\n.exp-read-more svg { transition: transform 200ms; flex-shrink: 0; }\n.exp-desc-wrap.is-expanded .exp-read-more svg { transform: rotate(180deg); }\n.exp-modal-footer {\n  display: flex; align-items: center; justify-content: space-between;\n  flex-wrap: wrap; gap: 16px;\n  margin-top: 24px; padding-top: 20px; border-top: 1px solid #f0efed;\n}\n.exp-modal-footer-text {\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 15px; color: #555552; line-height: 1.55;\n}\n.exp-modal-footer-text span { display: block; font-size: 13.5px; color: #999895; margin-top: 3px; }\n.exp-cta-btn {\n  display: inline-flex; align-items: center; gap: 8px;\n  background: #FF5C0B; color: #ffffff;\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 14.5px; font-weight: 600;\n  padding: 13px 26px; border: none; cursor: pointer;\n  text-decoration: none; letter-spacing: 0.02em;\n  transition: background 180ms, transform 120ms;\n}\n\n.exp-modal-similar { margin-top: 32px; padding-top: 26px; border-top: 1px solid #f0efed; }\n.exp-modal-similar-head { margin-bottom: 18px; }\n.exp-sim-eyebrow {\n  font-size: 10px; letter-spacing: .22em; text-transform: uppercase;\n  color: #FF5C0B; font-weight: 600; display: block; margin-bottom: 6px;\n}\n.exp-modal-similar-head h3 {\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 18px; font-weight: 600; margin: 0; color: #111110;\n}\n.exp-modal-similar-track {\n  display: grid; grid-auto-flow: column; grid-auto-columns: minmax(220px,1fr);\n  gap: 16px; overflow-x: auto; scroll-snap-type: x mandatory;\n  padding-bottom: 6px; scrollbar-width: none;\n}\n.exp-modal-similar-track::-webkit-scrollbar { display: none; }\n@media(min-width:700px){ .exp-modal-similar-track{ grid-auto-columns: calc((100% - 32px)\/3); } }\n.exp-sim-card {\n  scroll-snap-align: start; border: 1px solid #e4e0da; background: #fff;\n  display: flex; flex-direction: column; text-decoration: none; color: inherit;\n  transition: transform 200ms, box-shadow 200ms;\n}\n.exp-sim-card:hover { transform: translateY(-3px); box-shadow: 0 12px 28px rgba(17,17,16,.10); }\n.exp-sim-img { aspect-ratio: 4\/3; overflow: hidden; background: #f0efed; }\n.exp-sim-img img { width:100%; height:100%; object-fit:cover; display:block; transition: transform 350ms; }\n.exp-sim-card:hover .exp-sim-img img { transform: scale(1.04); }\n.exp-sim-body { padding: 14px 16px 16px; display: flex; flex-direction: column; flex: 1; }\n.exp-sim-city {\n  font-size: 11px; color: #777470; display: flex; align-items: center; gap: 4px;\n  margin-bottom: 6px; letter-spacing: .02em;\n}\n.exp-sim-city svg { flex-shrink: 0; color: #FF5C0B; }\n.exp-sim-title {\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 14px; font-weight: 600; color: #111110; line-height: 1.32;\n  margin-bottom: 10px;\n  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;\n  min-height: 2.5em;\n}\n.exp-sim-specs { display: flex; gap: 10px; margin-bottom: 12px; flex-wrap: wrap; }\n.exp-sim-spec { font-size: 11.5px; color: #555552; display: flex; align-items: center; gap: 4px; }\n.exp-sim-spec svg { color: #FF5C0B; flex-shrink: 0; }\n.exp-sim-spec strong { color: #111110; font-weight: 700; }\n.exp-sim-foot {\n  margin-top: auto; padding-top: 12px; border-top: 1px solid #f0efed;\n  display: flex; align-items: center; justify-content: space-between;\n}\n.exp-sim-price {\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 14.5px; font-weight: 600; color: #FF5C0B;\n}\n.exp-sim-cta { font-size: 11.5px; font-weight: 600; color: #111110; display: flex; align-items: center; gap: 3px; }\n.exp-sim-cta svg { transition: transform 200ms; }\n.exp-sim-card:hover .exp-sim-cta { color: #FF5C0B; }\n.exp-sim-card:hover .exp-sim-cta svg { transform: translateX(3px); }\n.exp-cta-btn:hover { background: #FF6E28; transform: translateY(-1px); color: #fff; }\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   ENQUIRY MODAL\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n.exp-enq-overlay {\n  display: none; position: fixed; inset: 0;\n  background: rgba(17,17,16,.82);\n  backdrop-filter: blur(4px); -webkit-backdrop-filter: blur(4px);\n  z-index: 999999; overflow-y: auto;\n  padding: 24px 20px; align-items: flex-start; justify-content: center;\n}\n.exp-enq-overlay.open { display: flex; }\n.exp-enq-modal {\n  background: #ffffff; width: 100%; max-width: 540px;\n  margin: auto; padding: 36px 36px 32px; position: relative;\n  animation: expmi .22s ease;\n}\n.exp-enq-close {\n  position: absolute; top: 14px; right: 14px;\n  width: 40px; height: 40px; background: #ffffff;\n  border: none; border-radius: 50%; cursor: pointer;\n  display: flex; align-items: center; justify-content: center;\n  color: #111110; transition: background 180ms, color 180ms;\n  box-shadow: 0 2px 8px rgba(17,17,16,.22);\n}\n.exp-enq-close:hover { background: #FF5C0B; color: #ffffff; }\n.exp-enq-prop-ref {\n  background: #faf9f7; border-left: 3px solid #FF5C0B;\n  padding: 12px 16px; margin-bottom: 24px;\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 13px; color: #555552; line-height: 1.5;\n}\n.exp-enq-prop-ref strong {\n  display: block; font-size: 14px; color: #111110; margin-bottom: 2px;\n}\n.exp-enq-title {\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 20px; font-weight: 500; color: #111110;\n  letter-spacing: -0.01em; margin-bottom: 6px;\n}\n.exp-enq-sub {\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 13px; color: #999895; margin-bottom: 24px; line-height: 1.5;\n}\n.exp-enq-label {\n  display: block; font-size: 11px; font-weight: 600;\n  letter-spacing: 0.08em; text-transform: uppercase;\n  color: #555552; margin-bottom: 6px;\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n}\n.exp-enq-field {\n  width: 100%;\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 14px; color: #111110;\n  padding: 10px 14px; margin-bottom: 16px;\n  border: 1.5px solid #e4e0da; background: #ffffff; outline: none;\n  transition: border-color 180ms;\n}\n.exp-enq-field:focus { border-color: #FF5C0B; }\n.exp-enq-textarea { min-height: 120px; resize: vertical; line-height: 1.6; }\n.exp-enq-row { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }\n.exp-enq-submit {\n  width: 100%; display: flex; align-items: center; justify-content: center; gap: 8px;\n  background: #FF5C0B; color: #ffffff;\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 14px; font-weight: 600;\n  padding: 13px 24px; border: none; cursor: pointer;\n  letter-spacing: 0.02em; margin-top: 8px; transition: background 180ms;\n}\n.exp-enq-submit:hover { background: #FF6E28; }\n.exp-enq-note {\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 11px; color: #999895; text-align: center; margin-top: 12px; line-height: 1.5;\n}\n.exp-enq-success { text-align: center; padding: 20px 0; }\n.exp-enq-success .exp-tick {\n  width: 48px; height: 48px; background: #FF5C0B; border-radius: 50%;\n  display: flex; align-items: center; justify-content: center; margin: 0 auto 16px;\n}\n.exp-enq-success h3 {\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 18px; font-weight: 500; color: #111110; margin-bottom: 8px;\n}\n.exp-enq-success p {\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 14px; color: #555552; line-height: 1.6;\n}\n\n\/* \u2500\u2500 Responsive \u2500\u2500 *\/\n@media (max-width: 960px) {\n  .exp-inner { padding: 0 32px; }\n  .exp-grid  { grid-template-columns: repeat(2, 1fr); gap: 16px; }\n}\n@media (max-width: 600px) {\n  .exp-inner { padding: 0 20px; }\n  .exp-grid  { grid-template-columns: 1fr 1fr; gap: 12px; }\n  .exp-section { padding: 48px 0; }\n  .exp-modal-body { padding: 20px; }\n  .exp-enq-modal  { padding: 24px 20px; }\n  .exp-enq-row    { grid-template-columns: 1fr; }\n}\n@media (max-width: 420px) { .exp-grid { grid-template-columns: 1fr; } }\n\n\/* \u2500\u2500 Fullscreen lightbox \u2500\u2500 *\/\n.exp-lightbox {\n  display: none; position: fixed; inset: 0;\n  background: rgba(0,0,0,0.96); z-index: 9999999;\n  align-items: center; justify-content: center;\n}\n.exp-lightbox.open { display: flex; }\n.exp-lightbox-img { max-width: 95vw; max-height: 95vh; object-fit: contain; display: block; }\n.exp-lb-btn {\n  position: fixed; width: 44px; height: 44px;\n  background: rgba(255,255,255,0.15); border: none; border-radius: 50%;\n  cursor: pointer; color: #ffffff;\n  display: flex; align-items: center; justify-content: center;\n  transition: background 180ms; z-index: 10;\n}\n.exp-lb-btn:hover { background: #FF5C0B; }\n.exp-lb-close { top: 16px; right: 16px; }\n.exp-lb-prev  { left: 16px; top: 50%; transform: translateY(-50%); }\n.exp-lb-next  { right: 16px; top: 50%; transform: translateY(-50%); }\n.exp-lb-ctr {\n  position: fixed; bottom: 16px; left: 50%; transform: translateX(-50%);\n  background: rgba(255,255,255,0.15); color: #ffffff;\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 12px; padding: 4px 14px; border-radius: 20px;\n}\n\n\n\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   zeas.immo \u2014 Homepage Part 2  (v2 \u2014 Apr 2026)\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n\n.eyebrow {\n  display: flex; align-items: center; gap: 12px;\n  font-size: 11px; font-weight: 600;\n  letter-spacing: 0.18em; text-transform: uppercase;\n  color: #FF5C0B; margin-bottom: 16px;\n}\n.eyebrow::before, .eyebrow::after {\n  content: ''; width: 24px; height: 1px; background: #FF5C0B; flex-shrink: 0;\n}\n.eyebrow.center { justify-content: center; }\n.eyebrow.no-line::before, .eyebrow.no-line::after { display: none; }\n\n.sec-hd { text-align: center; margin-bottom: 48px; }\n.sec-hd .stitle { margin-bottom: 8px; }\n.sec-hd p { font-size: 16px; color: #555552; max-width: 500px; margin: 0 auto; line-height: 1.75; }\n\n.btn-ghost-dark {\n  display: inline-flex; align-items: center; gap: 10px;\n  padding: 10px 32px; border: 1px solid #111110 !important;\n  font-family: 'Poppins', sans-serif; font-size: 14px;\n  font-weight: 500; letter-spacing: 0.05em;\n  color: #111110 !important; text-decoration: none !important; white-space: nowrap;\n  transition: border-color 220ms, background 220ms, color 220ms;\n}\n.btn-ghost-dark:hover { border-color: #FF5C0B; background: #FF5C0B; }\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   MARKET DATA \u2014 VILLAGE GRID (Option B)\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n.market {\n  border-top: 1px solid #e4e0da;\n  border-bottom: 1px solid #e4e0da;\n  padding: 72px 0;\n  background: #faf9f7;\n}\n.market-inner,\n.referral-inner,\n.pillars-inner { padding-left: 60px; padding-right: 60px; }\n\n.village-grid {\n  display: grid;\n  grid-template-columns: repeat(5, 1fr);\n  gap: 1px;\n  background: #e4e0da;\n  border: 1px solid #e4e0da;\n}\n\n.vcard {\n  background: #faf9f7 !important;\n  padding: 40px 30px 34px;\n  text-decoration: none !important;\n  display: flex; flex-direction: column; align-items: center; text-align: center;\n  border: 1px solid #e4e0da;\n  border-bottom: 2px solid transparent;\n  transition: background 220ms, border-color 220ms, transform 220ms, box-shadow 220ms;\n  position: relative;\n  color: inherit !important;\n}\n.vcard:hover {\n  background: #edeae4 !important;\n  border-bottom-color: #FF5C0B !important;\n  transform: translateY(-3px);\n  box-shadow: 0 10px 28px rgba(17,17,16,.08);\n  color: inherit !important;\n  text-decoration: none !important;\n}\n\n.vc-name {\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 22px; font-weight: 600; color: #111110;\n  margin-bottom: 28px; line-height: 1.15;\n  transition: color 220ms;\n}\n.vcard:hover .vc-name { color: #111110; }\n\n.vc-asking {\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 40px; font-weight: 600; color: #FF5C0B;\n  line-height: 1; margin-bottom: 10px; display: block;\n}\n.vc-asking sup { font-size: 17px; font-weight: 400; }\n\n.vc-sub {\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 14px; font-weight: 400; color: #999895;\n  letter-spacing: 0.02em; text-transform: none;\n}\n\n.vc-link {\n  font-size: 15px; color: #555552;\n  letter-spacing: 0.04em;\n  display: flex; align-items: center; justify-content: center; gap: 7px;\n  transition: color 220ms;\n  border-top: 1px solid #e4e0da;\n  padding-top: 22px; margin-top: 28px; width: 100%;\n}\n.vc-link svg { width: 14px; height: 14px; transition: transform 200ms; flex-shrink: 0; }\n.vcard:hover .vc-link { color: #FF5C0B; }\n.vcard:hover .vc-link svg { transform: translateX(3px); }\n\n.market-note {\n  font-size: 11px; color: #999895;\n  margin-top: 16px; line-height: 1.6;\n}\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   REFERRAL\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n.referral {\n  background: #edeae4 !important;\n  border-top: 1px solid #d8d4ce !important;\n  border-bottom: 1px solid #d8d4ce !important;\n}\n.ref-inner {\n  display: flex; align-items: center;\n  justify-content: space-between; gap: 64px;\n}\n.ref-eyebrow {\n  font-size: 11px; font-weight: 600;\n  letter-spacing: 0.18em; text-transform: uppercase;\n  color: #FF5C0B !important; margin-bottom: 12px;\n}\n.ref-title {\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: clamp(20px, 2.5vw, 28px);\n  font-weight: 500; color: #111110 !important;\n  margin-bottom: 8px; letter-spacing: -0.01em;\n}\n.ref-sub { font-size: 16px; color: #555552 !important; font-weight: 300; line-height: 1.7; }\n.ref-sub strong { color: #FF5C0B !important; font-weight: 500; }\n.ref-sub strong a { color: #FF5C0B !important; text-decoration: underline; text-underline-offset: 3px; }\n\n\/* \u2500\u2500 RESPONSIVE \u2500\u2500 *\/\n@media (max-width: 960px) {\n  .ref-inner { flex-direction: column; gap: 24px; align-items: flex-start; }\n  .market-inner,\n  .referral-inner,\n  .pillars-inner {\n    padding-left: 24px !important;\n    padding-right: 24px !important;\n  }\n}\n@media (max-width: 780px) {\n  .village-grid { grid-template-columns: 1fr 1fr; }\n  .village-grid .vcard:last-child {\n    grid-column: 1 \/ -1;\n    max-width: none;\n    margin: 0;\n    width: 100%;\n  }\n}\n@media (max-width: 600px) {\n  .market { padding: 56px 0; }\n  .village-grid { grid-template-columns: 1fr; }\n  .village-grid .vcard:last-child {\n    grid-column: auto;\n    max-width: none;\n    margin: 0;\n    width: 100%;\n  }\n  .market-inner,\n  .referral-inner,\n  .pillars-inner {\n    padding-left: 20px !important;\n    padding-right: 20px !important;\n  }\n  .market-eyebrow {\n    padding: 0 12px;\n    gap: 8px;\n  }\n  .market-eyebrow .eyebrow-text {\n    font-size: 10px;\n    letter-spacing: 0.14em;\n  }\n  .sec-hd { margin-bottom: 32px; }\n  .sec-hd p {\n    font-size: 15px;\n    line-height: 1.65;\n  }\n  .vcard {\n    padding: 20px 16px 18px;\n    text-align: center;\n  }\n  .vc-name { margin-bottom: 12px; }\n  .vc-asking { font-size: 18px; }\n  .vc-transacted { font-size: 12px; }\n  .vc-gap {\n    margin: 8px auto 12px;\n  }\n  .vc-link {\n    justify-content: center;\n  }\n  .market-note {\n    font-size: 10.5px;\n    line-height: 1.55;\n    margin-top: 14px;\n    text-align: center;\n  }\n  .ref-inner {\n    gap: 18px;\n    align-items: center;\n    text-align: center;\n  }\n  .ref-sub {\n    font-size: 15px;\n    line-height: 1.65;\n  }\n  .btn-ghost-dark {\n    width: 100%;\n    justify-content: center;\n    text-align: center;\n    white-space: normal;\n    padding: 12px 20px;\n  }\n}\n\n\n\/* Grey hover \/ press feedback on pillar cards (also beats theme button hover) *\/\n.pillar-card:hover,\n.pillar-card:focus { background-color: #efedea !important; color: inherit !important; }\n.pillar-card:active { background-color: #e6e3de !important; }\n.pillar-card.open  { background-color: #efedea !important; }\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   zeas.immo \u2014 v4 ADDITIONS (Jul 2026)\n   International section \u00b7 eXp-network reframing \u00b7 closing CTA\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n\n\/* \u2500\u2500 INTERNATIONAL (editorial \/ exclusive) \u2500\u2500 *\/\n.intl { padding: 80px 0; background: #ffffff; border-bottom: 1px solid #e4e0da; }\n.intl-wrap { max-width: 1240px; margin: 0 auto; padding: 0 60px; }\n.intl-hd { max-width: 720px; margin: 0 auto 44px; text-align: center; }\n.intl-hd .stitle { margin-bottom: 16px; }\n.intl-hd p { font-size: 16px; color: #555552; line-height: 1.8; margin: 0; }\n.intl-hd p strong { color: #111110; font-weight: 500; }\n\n\/* \u2500\u2500 International country selector \u2500\u2500 *\/\n.intl-countries { display: flex; flex-wrap: wrap; justify-content: center; gap: 10px; margin-bottom: 34px; }\n.intl-country {\n  display: inline-flex; align-items: center; gap: 9px;\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 13.5px; font-weight: 500; letter-spacing: 0.02em;\n  padding: 9px 18px; border: 1.5px solid #e4e0da; background: #ffffff; color: #555552;\n  cursor: pointer; transition: border-color 150ms, color 150ms, background 150ms;\n}\n.intl-country:hover { border-color: #FF5C0B; color: #FF5C0B; }\n.intl-country.active { background: #FF5C0B; border-color: #FF5C0B; color: #ffffff; }\n.intl-flag { display: block; border: 1px solid rgba(17,17,16,0.1); object-fit: cover; }\n\n.intl-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; }\n\n\/* \u2500\u2500 International carousel \u2500\u2500 *\/\n.intl-carousel { position: relative; }\n.intl-stage { position: relative; }\n.intl-viewport { overflow: hidden; }\n.intl-track {\n  display: flex; gap: 28px; padding: 8px 0 14px;\n  transition: transform .55s cubic-bezier(.4,0,.2,1); will-change: transform;\n}\n.intl-carousel.is-static .intl-track { justify-content: center; transform: none !important; }\n.intl-track > * { flex: 0 0 auto; }\n.intl-arrow {\n  position: absolute; top: 50%; transform: translateY(-50%);\n  width: 46px; height: 46px; border-radius: 50%; border: none; cursor: pointer;\n  background: #111110; color: #fff; display: flex; align-items: center; justify-content: center;\n  box-shadow: 0 4px 16px rgba(17,17,16,.22); z-index: 5; transition: background .2s, transform .2s;\n}\n.intl-arrow:hover { background: #FF5C0B; }\n.intl-arrow svg { width: 20px; height: 20px; }\n.intl-prev { left: -14px; } .intl-next { right: -14px; }\n.intl-dots { display: flex; gap: 8px; justify-content: center; margin-top: 24px; }\n.intl-dot {\n  width: 8px; height: 8px; border-radius: 50%; background: #d8d4ce;\n  border: none; padding: 0; cursor: pointer; transition: background .2s, transform .2s;\n}\n.intl-dot.active { background: #FF5C0B; transform: scale(1.3); }\n.intl-carousel.is-static .intl-arrow,\n.intl-carousel.is-static .intl-dots { display: none; }\n@media (max-width: 620px) {\n  .intl-prev { left: 2px; } .intl-next { right: 2px; }\n}\n.icard {\n  border: 1px solid #e4e0da; background: #ffffff;\n  display: flex; flex-direction: column; cursor: pointer;\n  transition: transform .25s, box-shadow .25s;\n  text-decoration: none; color: inherit;\n}\n.icard:hover, .icard:visited { text-decoration: none; color: inherit; }\n.icard:hover { transform: translateY(-4px); box-shadow: 0 14px 40px rgba(17,17,16,.12); }\n.icard-img {\n  position: relative; aspect-ratio: 4\/3; overflow: hidden;\n  background: #e7e4df; background-size: cover; background-position: center;\n}\n.excl-badge {\n  position: absolute; top: 14px; left: 14px; z-index: 2;\n  font-size: 9.5px; font-weight: 700; letter-spacing: .14em; text-transform: uppercase;\n  background: #111110; color: #fff; padding: 6px 11px;\n  display: inline-flex; align-items: center; gap: 6px;\n}\n.excl-badge::before { content: ''; width: 5px; height: 5px; background: #FF5C0B; border-radius: 50%; }\n.icard-country {\n  position: absolute; top: 14px; right: 14px; z-index: 2;\n  font-size: 10px; font-weight: 600; letter-spacing: .1em; text-transform: uppercase;\n  background: rgba(255,255,255,.92); color: #111110; padding: 5px 10px;\n}\n.icard-body { padding: 24px 24px 26px; display: flex; flex-direction: column; gap: 12px; flex: 1; }\n.icard-loc {\n  font-size: 13px; letter-spacing: .06em; text-transform: uppercase; color: #999895;\n  display: flex; align-items: center; gap: 6px;\n}\n.icard-loc svg { color: #FF5C0B; flex-shrink: 0; }\n.icard-title { font-size: 17px; font-weight: 500; line-height: 1.35; letter-spacing: -.005em; color: #111110; }\n.icard-desc { font-size: 15px; line-height: 1.7; color: #555552; flex: 1; }\n.icard-foot {\n  display: flex; align-items: flex-end; justify-content: space-between;\n  padding-top: 16px; border-top: 1px solid #e4e0da; margin-top: 4px; gap: 12px;\n}\n.icard-price { font-size: 25px; font-weight: 600; color: #FF5C0B; line-height: 1; }\n.icard-price small { display: block; font-size: 13px; color: #777470; font-weight: 400; margin-top: 6px; letter-spacing: .02em; }\n.icard-enq {\n  font-size: 13.5px; font-weight: 600; color: #111110;\n  display: inline-flex; align-items: center; gap: 6px;\n  border-bottom: 1.5px solid #FF5C0B; padding-bottom: 2px; white-space: nowrap;\n}\n.intl-foot { text-align: center; margin-top: 48px; }\n.intl-note { font-size: 12.5px; color: #999895; max-width: 560px; margin: 0 auto 22px; line-height: 1.7; }\n\n@media (max-width: 960px) {\n  .intl-wrap { padding: 0 32px; }\n  .intl-grid { grid-template-columns: 1fr 1fr; }\n}\n@media (max-width: 620px) {\n  .intl-wrap { padding: 0 20px; }\n  .intl-grid { grid-template-columns: 1fr; }\n  .icard-foot { flex-direction: column; align-items: flex-start; }\n}\n\n\/* \u2500\u2500 eXp NETWORK reframing (scoped: reads as \"not mine \/ scale\") \u2500\u2500 *\/\n#exp-listings-section .exp-eyebrow { color: #777470; }\n#exp-listings-section .exp-eyebrow::before,\n#exp-listings-section .exp-eyebrow::after { background: #777470; }\n#exp-listings-section .exp-sub {\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: 17px; color: #555552; max-width: 660px; margin: 0 auto 18px; line-height: 1.75;\n}\n#exp-listings-section .exp-sub em { color: #111110; font-style: italic; }\n#exp-listings-section .exp-card-contact { color: #777470; }\n#exp-listings-section .exp-card:hover { border-bottom-color: #777470; }\n#exp-listings-section .exp-see-all { color: #777470; border-bottom-color: #777470; }\n\n\/* \u2500\u2500 CLOSING CTA band \u2500\u2500 *\/\n.closing-cta { background: #111110 !important; position: relative; overflow: hidden; text-align: center; padding: 16px 0; }\n.closing-cta::after {\n  content: ''; position: absolute; inset: 0; pointer-events: none;\n  background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='300' height='300'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.75' numOctaves='4' stitchTiles='stitch'\/%3E%3C\/filter%3E%3Crect width='300' height='300' filter='url(%23n)' opacity='0.035'\/%3E%3C\/svg%3E\");\n}\n.cc-wrap { max-width: 960px !important; margin-left: auto !important; margin-right: auto !important; padding: 0 40px; position: relative; z-index: 1; }\n.cc-eyebrow { font-size: 11px; font-weight: 600; letter-spacing: .2em; text-transform: uppercase; color: #FF5C0B !important; margin-bottom: 16px; }\n.cc-title {\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-size: clamp(26px, 3vw, 38px); font-weight: 500; color: #f5f3ef !important;\n  letter-spacing: -.02em; margin-bottom: 14px;\n}\n.cc-sub { font-size: 20px; color: #b5b1ab !important; line-height: 1.15; margin: 0 auto 18px; max-width: 900px; }\n.cc-btn { font-family: 'Poppins', sans-serif; }\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   LIVE-THEME HARDENING (Jul 2026)\n   The WordPress theme was stretching section content past 1240px and\n   overriding inline max-widths. Force the constraint and one readable font.\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n\n\/* 1 \u2014 Keep every section's content centred at 1240px, whatever the theme does *\/\n.pillars-inner, .pillars-grid, .pillars-panels,\n.market-inner, .referral-inner, .intl-wrap, .exp-inner,\n.hero-body, .stat-bar {\n  max-width: 1240px !important;\n  margin-left: auto !important;\n  margin-right: auto !important;\n}\n\n\/* 2 \u2014 One consistent, easy-to-read font family across all homepage content.\n   Uses the brand body font (DM Sans) with safe fallbacks, so headings, cards,\n   numbers and paragraphs all match instead of mixing Helvetica with the theme font. *\/\n.hero, .hero *,\n.mandate, .mandate *,\n.form-drawer, .form-drawer *,\n.pillars-section, .pillars-section *,\n.market, .market *,\n.intl, .intl *,\n.exp-section, .exp-section *,\n.exp-overlay, .exp-overlay *,\n.exp-enq-overlay, .exp-enq-overlay *,\n.referral, .referral *,\n.closing-cta, .closing-cta * {\n  font-family: 'DM Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif !important;\n}\n\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   REDUCED MOTION (Jul 2026)\n   Respect the OS \"reduce motion\" setting: calm the entrance fades,\n   the pulsing pillar icon, and card lifts. Carousel auto-advance is\n   also disabled in JS (see initCarousel) for the same users.\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n@media (prefers-reduced-motion: reduce) {\n  *, *::before, *::after {\n    animation-duration: 0.001ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.001ms !important;\n    scroll-behavior: auto !important;\n  }\n  .hero .eyebrow, .hero h1, .hero-sub, .hero-cta-row, .stat-bar { animation: none !important; }\n  .pillar-toggle-icon { animation: none !important; }\n  .pillar-card:hover, .vcard:hover, .exp-card:hover, .icard:hover { transform: none !important; }\n}\n  <\/style>\n<\/head>\n<body>\n\n<!-- HERO -->\n<section class=\"hero\">\n  <div class=\"hero-body\">\n    <p class=\"eyebrow center no-line\">Hesperange Real Estate<\/p>\n    <h1>The Hesperange agent obsessed<br>with <em>your outcome.<\/em><\/h1>\n    <p class=\"hero-sub\">\n      Buy, sell, or rent in Howald, Alzingen, Itzig, Fentange, or Hesperange village \u2014 differently. A plan-driven search. A personalised marketing campaign. The right long-term tenant.\n    <\/p>\n    <div class=\"hero-cta-row\">\n      <button class=\"btn-primary\" onclick=\"toggleDrawer('buy-drawer', this)\">\n        I'm buying in Hesperange\n        <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M5 12h14M12 5l7 7-7 7\"\/><\/svg>\n      <\/button>\n      <button class=\"btn-outline\" onclick=\"toggleDrawer('sell-drawer', this)\">\n        I'm selling my property\n        <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M5 12h14M12 5l7 7-7 7\"\/><\/svg>\n      <\/button>\n    <\/div>\n  <\/div>\n  <div class=\"stat-bar\">\n    <div class=\"stat-item\">\n      <div class=\"stat-num\">5<sup>+<\/sup><\/div>\n      <div class=\"stat-label\">Villages \u2014 Howald, Alzingen,<br>Itzig, Fentange, Hesperange<\/div>\n    <\/div>\n    <div class=\"stat-item\">\n      <div class=\"stat-num\">6<sup>mo<\/sup><\/div>\n      <div class=\"stat-label\">Rolling notarial transaction data<br>Observatoire de l'Habitat<\/div>\n    <\/div>\n    <div class=\"stat-item\">\n      <div class=\"stat-num\">1<sup>\u00d7<\/sup><\/div>\n      <div class=\"stat-label\">Mandate per village \u2014<br>your interests, undivided<\/div>\n    <\/div>\n    <div class=\"stat-item\">\n      <div class=\"stat-num\">30<sup>%<\/sup><\/div>\n      <div class=\"stat-label\">Of the saving we achieve \u2014<br>buyers pay nothing upfront<\/div>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- FORM DRAWERS -->\n<div id=\"buy-drawer\" class=\"form-drawer\" aria-hidden=\"true\">\n  <div class=\"drawer-inner\">\n    <div class=\"drawer-hd\">\n      <div>\n        <p class=\"drawer-eyebrow\">Buyer's enquiry \u00b7 Hesperange<\/p>\n        <h3 class=\"drawer-title\">Tell us what you're looking for<\/h3>\n        <p class=\"drawer-sub\">We review your criteria, pull current transaction data for your target village, and come back within 24 hours with a clear next step. No obligation, no upfront cost.<\/p>\n      <\/div>\n      <button class=\"drawer-close\" onclick=\"toggleDrawer('buy-drawer', null)\" aria-label=\"Close\">\n        <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M18 6L6 18M6 6l12 12\"\/><\/svg>\n      <\/button>\n    <\/div>\n    <div class=\"drawer-form-wrap\">\n      <!-- WORDPRESS: replace with [fluentform id=\"11\"] -->\n      <div class=\"form-placeholder\"><div class='fluentform ff-default fluentform_wrapper_11 ffs_custom_wrap'><form data-form_id=\"11\" id=\"fluentform_11\" class=\"frm-fluent-form fluent_form_11 ff-el-form-top ff_form_instance_11_1 ff-form-loading ffs_custom\" data-form_instance=\"ff_form_instance_11_1\" method=\"POST\" ><fieldset  style=\"border: none!important;margin: 0!important;padding: 0!important;background-color: transparent!important;box-shadow: none!important;outline: none!important; min-inline-size: 100%;\">\n                    <legend class=\"ff_screen_reader_title\" style=\"display: block; margin: 0!important;padding: 0!important;height: 0!important;text-indent: -999999px;width: 0!important;overflow:hidden;\">Property search<\/legend>        <div\n                style=\"display: none!important; position: absolute!important; transform: translateX(1000%)!important;\"\n                class=\"ff-el-group ff-hpsf-container\"\n        >\n            <div class=\"ff-el-input--label asterisk-right\">\n                <label for=\"ff_11_item_sf\" aria-label=\"Updates\">\n                    Updates                <\/label>\n            <\/div>\n            <div class=\"ff-el-input--content\">\n                <input type=\"text\"\n                       name=\"item_11__fluent_sf\"\n                       class=\"ff-el-form-control\"\n                       id=\"ff_11_item_sf\"\n                \/>\n            <\/div>\n        <\/div>\n        <input type='hidden' name='__fluent_form_embded_post_id' value='17232' \/><input type=\"hidden\" id=\"_fluentform_11_fluentformnonce\" name=\"_fluentform_11_fluentformnonce\" value=\"3b0a74dfd8\" \/><input type=\"hidden\" name=\"_wp_http_referer\" value=\"\/en\/wp-json\/wp\/v2\/pages\/17232\" \/><div data-name=\"ff_cn_id_1\"  class='ff-t-container ff-column-container ff_columns_total_5 '><div class='ff-t-cell ff-t-column-1' style='flex-basis: 20%;'><div class='ff-el-group'><div class='ff-el-input--content'><select name=\"dropdown\" id=\"ff_11_dropdown\" class=\"ff-el-form-control\" data-name=\"dropdown\" data-calc_value=\"0\" tabindex=\"1\"  aria-invalid=\"false\" aria-required=\"true\" aria-labelledby=\"label_ff_11_dropdown\"><option value=\"\">Village<\/option><option value=\"Howald\"  >Howald<\/option><option value=\"Hesperange\"  >Hesperange<\/option><option value=\"Fentange\"  >Fentange<\/option><option value=\"Itzig\"  >Itzig<\/option><option value=\"Alzingen\"  >Alzingen<\/option><option value=\"Any village in Hesperange\"  >Any village in Hesperange<\/option><option value=\"Any commune\"  >Any commune<\/option><\/select><\/div><\/div><\/div><div class='ff-t-cell ff-t-column-2' style='flex-basis: 20%;'><div class='ff-el-group'><div class='ff-el-input--content'><select name=\"dropdown_1\" id=\"ff_11_dropdown_1\" class=\"ff-el-form-control\" data-name=\"dropdown_1\" data-calc_value=\"0\" tabindex=\"2\"  aria-invalid=\"false\" aria-required=\"true\" aria-labelledby=\"label_ff_11_dropdown_1\"><option value=\"\">Property type<\/option><option value=\"House\"  >House<\/option><option value=\"Apartment\"  >Apartment<\/option><\/select><\/div><\/div><\/div><div class='ff-t-cell ff-t-column-3' style='flex-basis: 20%;'><div class='ff-el-group'><div class='ff-el-input--content'><select name=\"dropdown_2\" id=\"ff_11_dropdown_2\" class=\"ff-el-form-control\" data-name=\"dropdown_2\" data-calc_value=\"0\" tabindex=\"3\"  aria-invalid=\"false\" aria-required=\"true\" aria-labelledby=\"label_ff_11_dropdown_2\"><option value=\"\">Budget<\/option><option value=\"&lt; 700.000 Euro\"  >< 700.000 Euro<\/option><option value=\"between 700.000-1.000.000 Euro\"  >between 700.000-1.000.000 Euro<\/option><option value=\"between 1.000.000-1.500.000 Euro\"  >between 1.000.000-1.500.000 Euro<\/option><option value=\"&gt;1.500.000 Euro\"  >>1.500.000 Euro<\/option><\/select><\/div><\/div><\/div><div class='ff-t-cell ff-t-column-4' style='flex-basis: 20%;'><div class='ff-el-group'><div class='ff-el-input--content'><select name=\"dropdown_3\" id=\"ff_11_dropdown_3\" class=\"ff-el-form-control\" data-name=\"dropdown_3\" data-calc_value=\"0\" tabindex=\"4\"  aria-invalid=\"false\" aria-required=\"true\" aria-labelledby=\"label_ff_11_dropdown_3\"><option value=\"\">Bedrooms<\/option><option value=\"Studio\"  >Studio<\/option><option value=\"2\"  >2<\/option><option value=\"3\"  >3<\/option><option value=\"4\"  >4<\/option><option value=\"&gt;5\"  >>5<\/option><\/select><\/div><\/div><\/div><div class='ff-t-cell ff-t-column-5' style='flex-basis: 20%;'><div class='ff-el-group'><div class='ff-el-input--content'><select name=\"dropdown_4\" id=\"ff_11_dropdown_4\" class=\"ff-el-form-control\" data-name=\"dropdown_4\" data-calc_value=\"0\" tabindex=\"5\"  aria-invalid=\"false\" aria-required=\"true\" aria-labelledby=\"label_ff_11_dropdown_4\"><option value=\"\">moving timeline<\/option><option value=\"Immediate (0-3 months)\"  >Immediate (0-3 months)<\/option><option value=\"Soon (3-6 months)\"  >Soon (3-6 months)<\/option><option value=\"Flexible (6-12 months)\"  >Flexible (6-12 months)<\/option><\/select><\/div><\/div><\/div><\/div><div data-name=\"ff_cn_id_2\"  class='ff-t-container ff-column-container ff_columns_total_5 '><div class='ff-t-cell ff-t-column-1' style='flex-basis: 20%;'><div class='ff-el-group'><div class='ff-el-input--content'><input type=\"text\" name=\"input_text_1\" class=\"ff-el-form-control\" placeholder=\"First name\" data-name=\"input_text_1\" tabindex=\"6\" id=\"ff_11_input_text_1\"  aria-invalid=\"false\" aria-required=true><\/div><\/div><\/div><div class='ff-t-cell ff-t-column-2' style='flex-basis: 20%;'><div class='ff-el-group'><div class='ff-el-input--content'><input type=\"text\" name=\"input_text\" class=\"ff-el-form-control\" placeholder=\"Last name\" data-name=\"input_text\" tabindex=\"7\" id=\"ff_11_input_text\"  aria-invalid=\"false\" aria-required=true><\/div><\/div><\/div><div class='ff-t-cell ff-t-column-3' style='flex-basis: 20%;'><div class='ff-el-group'><div class='ff-el-input--content'><input name=\"phone\" class=\"ff-el-form-control ff-el-phone\" type=\"tel\" placeholder=\"Mobile Number\" data-name=\"phone\" id=\"ff_11_phone\" tabindex=\"8\" inputmode=\"tel\"  aria-invalid='false' aria-required=true><\/div><\/div><\/div><div class='ff-t-cell ff-t-column-4' style='flex-basis: 20%;'><div class='ff-el-group'><div class='ff-el-input--content'><input type=\"email\" name=\"email\" id=\"ff_11_email\" class=\"ff-el-form-control\" placeholder=\"Email Address\" data-name=\"email\" tabindex=\"9\"  aria-invalid=\"false\" aria-required=true><\/div><\/div><\/div><div class='ff-t-cell ff-t-column-5' style='flex-basis: 20%;'><div class='ff-el-group ff-text-center ff_submit_btn_wrapper ff_submit_btn_wrapper_custom'><button class=\"ff-btn ff-btn-submit ff-btn-md ff_btn_style wpf_has_custom_css\" type=\"submit\" name=\"custom_submit_button-11_1\" data-name=\"custom_submit_button-11_1\" tabindex=\"10\"  aria-label=\"search property\">search property<\/button><style>form.fluent_form_11 .wpf_has_custom_css.ff-btn-submit { background-color:rgba(255, 92, 11, 1);border-color:rgba(10, 10, 10, 1);color:#ffffff;border-radius:5px;min-width:100%; }form.fluent_form_11 .wpf_has_custom_css.ff-btn-submit:hover { background-color:#ffffff;border-color:rgba(13, 13, 13, 1);color:rgba(255, 92, 11, 1);min-width:100%; } <\/style><\/div><\/div><\/div><\/fieldset><\/form><div id='fluentform_11_errors' class='ff-errors-in-stack ff_form_instance_11_1 ff-form-loading_errors ff_form_instance_11_1_errors'><\/div><\/div>            <script type=\"text\/javascript\">\n                window.fluent_form_ff_form_instance_11_1 = {\"id\":\"11\",\"ajaxUrl\":\"https:\\\/\\\/zeas.immo\\\/wp-admin\\\/admin-ajax.php\",\"settings\":{\"layout\":{\"labelPlacement\":\"top\",\"asteriskPlacement\":\"asterisk-right\",\"helpMessagePlacement\":\"with_label\",\"errorMessagePlacement\":\"inline\",\"cssClassName\":\"\"},\"restrictions\":{\"denyEmptySubmission\":{\"enabled\":false}}},\"form_instance\":\"ff_form_instance_11_1\",\"form_id_selector\":\"fluentform_11\",\"rules\":{\"dropdown\":{\"required\":{\"value\":true,\"message\":\"This field is required\",\"global_message\":\"This field is required\",\"global\":true}},\"dropdown_1\":{\"required\":{\"value\":true,\"message\":\"This field is required\",\"global_message\":\"This field is required\",\"global\":true}},\"dropdown_2\":{\"required\":{\"value\":true,\"message\":\"This field is required\",\"global_message\":\"This field is required\",\"global\":true}},\"dropdown_3\":{\"required\":{\"value\":true,\"message\":\"This field is required\",\"global_message\":\"This field is required\",\"global\":true}},\"dropdown_4\":{\"required\":{\"value\":true,\"message\":\"This field is required\",\"global_message\":\"This field is required\",\"global\":true}},\"input_text_1\":{\"required\":{\"value\":true,\"message\":\"This field is required\",\"global_message\":\"This field is required\",\"global\":true}},\"input_text\":{\"required\":{\"value\":true,\"message\":\"This field is required\",\"global_message\":\"This field is required\",\"global\":true}},\"phone\":{\"required\":{\"value\":true,\"global\":true,\"message\":\"This field is required\",\"global_message\":\"This field is required\"},\"valid_phone_number\":{\"value\":false,\"global\":true,\"message\":\"Phone number is not valid\",\"global_message\":\"Phone number is not valid\"}},\"email\":{\"required\":{\"value\":true,\"message\":\"This field is required\",\"global_message\":\"This field is required\",\"global\":true},\"email\":{\"value\":true,\"message\":\"This field must contain a valid email\",\"global_message\":\"This field must contain a valid email\",\"global\":true}}},\"debounce_time\":300,\"file_upload_settings\":[]};\n                            <\/script>\n            <\/div>\n    <\/div>\n    <p class=\"drawer-footer-link\">\n      Want to read more first? <a href=\"https:\/\/zeas.immo\/en\/buy-property\/\">See the full buyer's page \u2192<\/a>\n    <\/p>\n  <\/div>\n<\/div>\n\n<div id=\"sell-drawer\" class=\"form-drawer\" aria-hidden=\"true\">\n  <div class=\"drawer-inner\">\n    <div class=\"drawer-hd\">\n      <div>\n        <p class=\"drawer-eyebrow\">Seller's enquiry \u00b7 Hesperange<\/p>\n        <h3 class=\"drawer-title\">Tell us about your property<\/h3>\n        <p class=\"drawer-sub\">We prepare a data-backed price assessment using notarial transaction records for your village \u2014 no exclusivity contract required to get started.<\/p>\n      <\/div>\n      <button class=\"drawer-close\" onclick=\"toggleDrawer('sell-drawer', null)\" aria-label=\"Close\">\n        <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M18 6L6 18M6 6l12 12\"\/><\/svg>\n      <\/button>\n    <\/div>\n    <div class=\"drawer-form-wrap\">\n      <!-- WORDPRESS: replace with [fluentform id=\"9\"] -->\n      <div class=\"form-placeholder\"><div class='fluentform ff-default fluentform_wrapper_9 ffs_default_wrap'><form data-form_id=\"9\" id=\"fluentform_9\" class=\"frm-fluent-form fluent_form_9 ff-el-form-top ff_form_instance_9_2 ff-form-loading ffs_default\" data-form_instance=\"ff_form_instance_9_2\" method=\"POST\" ><fieldset  style=\"border: none!important;margin: 0!important;padding: 0!important;background-color: transparent!important;box-shadow: none!important;outline: none!important; min-inline-size: 100%;\">\n                    <legend class=\"ff_screen_reader_title\" style=\"display: block; margin: 0!important;padding: 0!important;height: 0!important;text-indent: -999999px;width: 0!important;overflow:hidden;\">Main page leads form<\/legend>        <div\n                style=\"display: none!important; position: absolute!important; transform: translateX(1000%)!important;\"\n                class=\"ff-el-group ff-hpsf-container\"\n        >\n            <div class=\"ff-el-input--label asterisk-right\">\n                <label for=\"ff_9_item_sf\" aria-label=\"Updates\">\n                    Updates                <\/label>\n            <\/div>\n            <div class=\"ff-el-input--content\">\n                <input type=\"text\"\n                       name=\"item_9__fluent_sf\"\n                       class=\"ff-el-form-control\"\n                       id=\"ff_9_item_sf\"\n                \/>\n            <\/div>\n        <\/div>\n        <input type='hidden' name='__fluent_form_embded_post_id' value='17232' \/><input type=\"hidden\" id=\"_fluentform_9_fluentformnonce\" name=\"_fluentform_9_fluentformnonce\" value=\"3b0a74dfd8\" \/><input type=\"hidden\" name=\"_wp_http_referer\" value=\"\/en\/wp-json\/wp\/v2\/pages\/17232\" \/><div data-name=\"ff_cn_id_1\"  class='ff-t-container ff-column-container ff_columns_total_4 '><div class='ff-t-cell ff-t-column-1' style='flex-basis: 20%;'><div class='ff-el-group'><div class='ff-el-input--content'><input type=\"text\" name=\"input_text\" class=\"ff-el-form-control\" placeholder=\"Your name\" data-name=\"input_text\" tabindex=\"11\" id=\"ff_9_2_input_text\"  aria-invalid=\"false\" aria-required=true><\/div><\/div><\/div><div class='ff-t-cell ff-t-column-2' style='flex-basis: 30%;'><div class='ff-el-group'><div class='ff-el-input--content'><input name=\"phone\" class=\"ff-el-form-control ff-el-phone\" type=\"tel\" placeholder=\"phone number\" data-name=\"phone\" id=\"ff_9_2_phone\" tabindex=\"12\" inputmode=\"tel\"  aria-invalid='false' aria-required=true><\/div><\/div><\/div><div class='ff-t-cell ff-t-column-3' style='flex-basis: 25%;'><div class='ff-el-group'><div class='ff-el-input--content'><input type=\"email\" name=\"email\" id=\"ff_9_2_email\" class=\"ff-el-form-control\" placeholder=\"email address\" data-name=\"email\" tabindex=\"13\"  aria-invalid=\"false\" aria-required=true><\/div><\/div><\/div><div class='ff-t-cell ff-t-column-4' style='flex-basis: 25%;'><div class='ff-el-group ff-text-left ff_submit_btn_wrapper ff_submit_btn_wrapper_custom'><button class=\"ff-btn ff-btn-submit ff-btn-md ff_btn_style wpf_has_custom_css\" type=\"submit\" name=\"custom_submit_button-9_1\" data-name=\"custom_submit_button-9_1\" tabindex=\"14\"  aria-label=\"Let&#039;s work on your sale\">Let's work on your sale<\/button><style>form.fluent_form_9 .wpf_has_custom_css.ff-btn-submit { background-color:rgba(251, 90, 26, 1);border-color:rgba(15, 15, 15, 1);color:#ffffff;min-width:100%; }form.fluent_form_9 .wpf_has_custom_css.ff-btn-submit:hover { background-color:#ffffff;border-color:rgba(9, 9, 9, 1);color:rgba(255, 92, 11, 1);min-width:100%; } <\/style><\/div><\/div><\/div><\/fieldset><\/form><div id='fluentform_9_errors' class='ff-errors-in-stack ff_form_instance_9_2 ff-form-loading_errors ff_form_instance_9_2_errors'><\/div><\/div>            <script type=\"text\/javascript\">\n                window.fluent_form_ff_form_instance_9_2 = {\"id\":\"9\",\"ajaxUrl\":\"https:\\\/\\\/zeas.immo\\\/wp-admin\\\/admin-ajax.php\",\"settings\":{\"layout\":{\"labelPlacement\":\"top\",\"asteriskPlacement\":\"asterisk-right\",\"helpMessagePlacement\":\"with_label\",\"errorMessagePlacement\":\"inline\",\"cssClassName\":\"\"},\"restrictions\":{\"denyEmptySubmission\":{\"enabled\":false}}},\"form_instance\":\"ff_form_instance_9_2\",\"form_id_selector\":\"fluentform_9\",\"rules\":{\"input_text\":{\"required\":{\"value\":true,\"message\":\"This field is required\",\"global_message\":\"This field is required\",\"global\":true}},\"phone\":{\"required\":{\"value\":true,\"global\":true,\"message\":\"This field is required\",\"global_message\":\"This field is required\"},\"valid_phone_number\":{\"value\":false,\"global\":true,\"message\":\"Phone number is not valid\",\"global_message\":\"Phone number is not valid\"}},\"email\":{\"required\":{\"value\":true,\"message\":\"This field is required\",\"global_message\":\"This field is required\",\"global\":true},\"email\":{\"value\":true,\"message\":\"This field must contain a valid email\",\"global_message\":\"This field must contain a valid email\",\"global\":true}}},\"debounce_time\":300,\"file_upload_settings\":[]};\n                            <\/script>\n            <\/div>\n    <\/div>\n    <p class=\"drawer-footer-link\">\n      Want to read more first? <a href=\"https:\/\/zeas.immo\/en\/sell-property\/\">See the full seller's page \u2192<\/a>\n    <\/p>\n  <\/div>\n<\/div>\n\n<!-- MANDATE BANNER -->\n<div class=\"mandate\">\n  <div class=\"mitem\">\n    <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z\"\/><\/svg>\n    We never represent both parties on the same deal\n  <\/div>\n  <div class=\"msep\"><\/div>\n  <div class=\"mitem\">\n    <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z\"\/><\/svg>\n    No exclusivity contract required for sellers\n  <\/div>\n  <div class=\"msep\"><\/div>\n  <div class=\"mitem\">\n    <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z\"\/><\/svg>\n    Buyers pay only a share of what we save them\n  <\/div>\n<\/div>\n\n<!-- PILLARS -->\n<section class=\"pillars-section\">\n  <div class=\"pillars-inner\" style=\"max-width:1240px;margin:0 auto;\">\n\n    <div class=\"pillars-intro\">\n      <h2 class=\"stitle ctr\" style=\"margin-bottom:12px\">What brings you to zeas.immo?<\/h2>\n      <p>Whether you're buying, selling, or letting \u2014 the standard approach in Luxembourg probably hasn't worked in your favour.<br><strong>Here's what we do differently.<\/strong><\/p>\n    <\/div>\n\n    <div class=\"pillars-grid\">\n\n      <!-- BUYING -->\n      <button class=\"pillar-card\" id=\"card-buying\" onclick=\"togglePillar('buying')\" aria-expanded=\"false\">\n        <span class=\"pillar-tag\">Buying<\/span>\n        <div class=\"pillar-line-1\">You visited six properties. None of them were right.<\/div>\n        <div class=\"pillar-line-2\">Because the agent was selling their portfolio \u2014 not finding yours.<\/div>\n        <div class=\"pillar-card-foot\">\n          <span class=\"pillar-line-3\">See how we search differently \u2192<\/span>\n          <span class=\"pillar-toggle\"><svg class=\"pillar-toggle-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M12 5v14M5 12h14\"\/><\/svg><\/span>\n        <\/div>\n      <\/button>\n\n      <!-- SELLING -->\n      <button class=\"pillar-card\" id=\"card-selling\" onclick=\"togglePillar('selling')\" aria-expanded=\"false\">\n        <span class=\"pillar-tag\">Selling<\/span>\n        <div class=\"pillar-line-1\">Overpriced to win your mandate. Then quietly reduced.<\/div>\n        <div class=\"pillar-line-2\">For them, any sale counts. For you, only yours does.<\/div>\n        <div class=\"pillar-card-foot\">\n          <span class=\"pillar-line-3\">See why one mandate per village changes everything \u2192<\/span>\n          <span class=\"pillar-toggle\"><svg class=\"pillar-toggle-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M12 5v14M5 12h14\"\/><\/svg><\/span>\n        <\/div>\n      <\/button>\n\n      <!-- RENTING -->\n      <button class=\"pillar-card\" id=\"card-renting\" onclick=\"togglePillar('renting')\" aria-expanded=\"false\">\n        <span class=\"pillar-tag\">Renting<\/span>\n        <div class=\"pillar-line-1\">You found a tenant. Then the problems started.<\/div>\n        <div class=\"pillar-line-2\">Unverified income. No property record. No one to call.<\/div>\n        <div class=\"pillar-card-foot\">\n          <span class=\"pillar-line-3\">See how we screen and protect you from day one \u2192<\/span>\n          <span class=\"pillar-toggle\"><svg class=\"pillar-toggle-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M12 5v14M5 12h14\"\/><\/svg><\/span>\n        <\/div>\n      <\/button>\n\n    <\/div>\n\n    <div class=\"pillars-panels\">\n\n      <!-- BUYING PANEL -->\n      <div class=\"pillars-expanded\" id=\"expand-buying\">\n        <div class=\"pillars-expanded-inner\">\n          <div class=\"pillar-proof\">\n            <span class=\"pillar-proof-label\">How we search<\/span>\n            <p>We work for your outcome \u2014 no listings portfolio, no inventory to push. We take on one property at a time, one mandate per zone, so that when we say your property is our obsession, we mean it. We source properties that match your criteria, including off-market options agents with portfolios never show you.<\/p>\n            <p>Our success fee is <strong>30% of what we negotiate off the asking price.<\/strong> If we don't achieve a saving, the success fee is zero. An engagement fee applies to start.*<\/p>\n          <\/div>\n          <div class=\"pillar-cta-col\">\n            <span class=\"pillar-ac-label\">What you get<\/span>\n            <div class=\"pillar-ac-stat\"><span class=\"n\">30%<\/span><span class=\"t\">of the saving \u2014 our success fee.<br>No saving, no fee.<\/span><\/div>\n            <span class=\"pstat-note\">* Engagement fee applies. Full details on our fees page.<\/span>\n            <ul class=\"pillar-ac-bullets\">\n              <li><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M20 6L9 17l-5-5\"\/><\/svg>Off-market access, not a portfolio<\/li>\n              <li><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M20 6L9 17l-5-5\"\/><\/svg>One mandate per zone \u2014 your interests only<\/li>\n              <li><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M20 6L9 17l-5-5\"\/><\/svg>Nothing upfront beyond the engagement fee<\/li>\n            <\/ul>\n            <a href=\"https:\/\/zeas.immo\/en\/buy-property\/\" class=\"pillar-cta-link\">\n              Read the buyer's guide\n              <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M5 12h14M12 5l7 7-7 7\"\/><\/svg>\n            <\/a>\n            <a href=\"https:\/\/zeas.immo\/en\/real-estate-agency-fees-in-hesperange\/\" class=\"pillar-secondary-link\">How our fees work \u2192<\/a>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <!-- SELLING PANEL -->\n      <div class=\"pillars-expanded\" id=\"expand-selling\">\n        <div class=\"pillars-expanded-inner\">\n          <div class=\"pillar-proof\">\n            <span class=\"pillar-proof-label\">One mandate. Full attention.<\/span>\n            <p>We take one seller mandate per village at a time. When you list with us, we are not simultaneously representing three other sellers in your street. <strong>Your sale gets our full attention<\/strong> \u2014 not a share of it.<\/p>\n            <p>Multi-channel advertising, targeted campaigns, and guerrilla marketing strategies built around your property's strongest selling points. We go beyond the standard listing \u2014 we do everything and more to put your property in front of the right buyer.<\/p>\n          <\/div>\n          <div class=\"pillar-cta-col\">\n            <span class=\"pillar-ac-label\">What you get<\/span>\n            <div class=\"pillar-ac-stat\"><span class=\"n\">1<\/span><span class=\"t\">seller mandate per village.<br>Your listing, undivided.<\/span><\/div>\n            <ul class=\"pillar-ac-bullets\">\n              <li><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M20 6L9 17l-5-5\"\/><\/svg>One seller mandate per village<\/li>\n              <li><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M20 6L9 17l-5-5\"\/><\/svg>Multi-channel, targeted campaigns<\/li>\n              <li><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M20 6L9 17l-5-5\"\/><\/svg>Built around your property's strengths<\/li>\n            <\/ul>\n            <a href=\"https:\/\/zeas.immo\/en\/sell-property\/\" class=\"pillar-cta-link\">\n              Read the seller's guide\n              <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M5 12h14M12 5l7 7-7 7\"\/><\/svg>\n            <\/a>\n            <a href=\"https:\/\/zeas.immo\/en\/real-estate-agency-fees-in-hesperange\/\" class=\"pillar-secondary-link\">How our fees work \u2192<\/a>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <!-- RENTING PANEL -->\n      <div class=\"pillars-expanded\" id=\"expand-renting\">\n        <div class=\"pillars-expanded-inner\">\n          <div class=\"pillar-proof\">\n            <span class=\"pillar-proof-label\">Screened tenants. Protected property.<\/span>\n            <p>Every applicant is verified before you meet them \u2014 income, employment contract, and references. You only spend time on tenants who are genuinely qualified and serious about your property.<\/p>\n            <p>At handover we produce a <strong>full property condition record<\/strong> \u2014 photographs, inventory, and signed documentation. If a dispute arises at the end of the lease, you have evidence. Most landlords don't.<\/p>\n          <\/div>\n          <div class=\"pillar-cta-col\">\n            <span class=\"pillar-ac-label\">What you get<\/span>\n            <div class=\"pillar-ac-stat\"><span class=\"n\">100%<\/span><span class=\"t\">of applicants pre-screened<br>before you meet them.<\/span><\/div>\n            <ul class=\"pillar-ac-bullets\">\n              <li><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M20 6L9 17l-5-5\"\/><\/svg>Income, contract &amp; references verified<\/li>\n              <li><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M20 6L9 17l-5-5\"\/><\/svg>Full photographic condition record<\/li>\n              <li><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M20 6L9 17l-5-5\"\/><\/svg>Signed documentation at handover<\/li>\n            <\/ul>\n            <a href=\"https:\/\/zeas.immo\/en\/rent-out-property-in-hesperange\/\" class=\"pillar-cta-link\">\n              Read the rental guide\n              <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M5 12h14M12 5l7 7-7 7\"\/><\/svg>\n            <\/a>\n          <\/div>\n        <\/div>\n      <\/div>\n\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     MARKET DATA \u2014 VILLAGE GRID   (moved up: Hesperange story stays continuous)\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n<section class=\"market\">\n  <div class=\"market-inner\" style=\"max-width:1240px;margin:0 auto;\">\n\n    <div class=\"sec-hd\">\n      <div class=\"eyebrow center market-eyebrow\"><span class=\"eyebrow-text\">Hesperange real estate \u00b7 Market data<\/span><\/div>\n      <h2 class=\"stitle ctr\" style=\"margin-bottom:8px\">Average asking price per m\u00b2 across Hesperange commune<\/h2>\n      <p>A live snapshot of what sellers are asking across the five villages \u2014 compiled fresh every week from public listings.<\/p>\n    <\/div>\n\n    <div id=\"vilCarousel\" class=\"intl-carousel\">\n      <div class=\"intl-stage\">\n        <button id=\"vilPrev\" class=\"intl-arrow intl-prev\" aria-label=\"Previous\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M15 18l-6-6 6-6\"\/><\/svg><\/button>\n        <div id=\"vilViewport\" class=\"intl-viewport\"><div id=\"vilTrack\" class=\"intl-track\">\n\n      <!-- HOWALD -->\n      <a href=\"https:\/\/zeas.immo\/en\/buy-property-in-howald\/\" class=\"vcard\">\n        <div class=\"vc-name\">Howald<\/div>\n        <span class=\"vc-asking\">~\u20ac10,264<sup>\/m\u00b2<\/sup><\/span>\n        <div class=\"vc-sub\">Average asking price<\/div>\n        <div class=\"vc-link\">\n          Buy in Howald\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><path d=\"M5 12h14M12 5l7 7-7 7\"\/><\/svg>\n        <\/div>\n      <\/a>\n\n      <!-- ALZINGEN -->\n      <a href=\"https:\/\/zeas.immo\/en\/buy-property-in-alzingen\/\" class=\"vcard\">\n        <div class=\"vc-name\">Alzingen<\/div>\n        <span class=\"vc-asking\">~\u20ac9,632<sup>\/m\u00b2<\/sup><\/span>\n        <div class=\"vc-sub\">Average asking price<\/div>\n        <div class=\"vc-link\">\n          Buy in Alzingen\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><path d=\"M5 12h14M12 5l7 7-7 7\"\/><\/svg>\n        <\/div>\n      <\/a>\n\n      <!-- ITZIG -->\n      <a href=\"https:\/\/zeas.immo\/en\/buy-property-in-itzig\/\" class=\"vcard\">\n        <div class=\"vc-name\">Itzig<\/div>\n        <span class=\"vc-asking\">~\u20ac9,042<sup>\/m\u00b2<\/sup><\/span>\n        <div class=\"vc-sub\">Average asking price<\/div>\n        <div class=\"vc-link\">\n          Buy in Itzig\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><path d=\"M5 12h14M12 5l7 7-7 7\"\/><\/svg>\n        <\/div>\n      <\/a>\n\n      <!-- FENTANGE -->\n      <a href=\"https:\/\/zeas.immo\/en\/buy-property-in-fentange\/\" class=\"vcard\">\n        <div class=\"vc-name\">Fentange<\/div>\n        <span class=\"vc-asking\">~\u20ac9,800<sup>\/m\u00b2<\/sup><\/span>\n        <div class=\"vc-sub\">Average asking price<\/div>\n        <div class=\"vc-link\">\n          Buy in Fentange\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><path d=\"M5 12h14M12 5l7 7-7 7\"\/><\/svg>\n        <\/div>\n      <\/a>\n\n      <!-- HESPERANGE VILLAGE -->\n      <a href=\"https:\/\/zeas.immo\/en\/buy-property-in-hesperange-village\/\" class=\"vcard\">\n        <div class=\"vc-name\">Hesperange village<\/div>\n        <span class=\"vc-asking\">~\u20ac8,755<sup>\/m\u00b2<\/sup><\/span>\n        <div class=\"vc-sub\">Average asking price<\/div>\n        <div class=\"vc-link\">\n          Buy in Hesperange\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><path d=\"M5 12h14M12 5l7 7-7 7\"\/><\/svg>\n        <\/div>\n      <\/a>\n\n        <\/div><\/div>\n        <button id=\"vilNext\" class=\"intl-arrow intl-next\" aria-label=\"Next\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M9 18l6-6-6-6\"\/><\/svg><\/button>\n      <\/div>\n      <div id=\"vilDots\" class=\"intl-dots\"><\/div>\n    <\/div>\n\n    <p class=\"market-note\">\n      Average asking prices per m\u00b2, compiled weekly from public real estate aggregators across the Hesperange commune. Figures are indicative and updated regularly.\n    <\/p>\n\n  <\/div>\n<\/section>\n\n<!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     INTERNATIONAL \u2014 EXCLUSIVE LISTINGS   (NEW)\n     Populated from the proxy feed, filtered to your own (non-LU) listings.\n     Hides itself automatically if no international listings are returned.\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n<section class=\"intl\" id=\"intl-section\">\n  <div class=\"intl-wrap\">\n\n    <div class=\"intl-hd\">\n      <div class=\"eyebrow center\">International \u00b7 Exclusive in Luxembourg<\/div>\n      <h2 class=\"stitle ctr\">A holiday home abroad \u2014 arranged from Luxembourg<\/h2>\n      <p>A place in the sun, sourced and vetted by the agent you already trust here. Through my international partnerships, I'm your <strong>exclusive point of contact in Luxembourg<\/strong> for these properties in Spain and France \u2014 handled end to end, in your language, from the comfort of your Luxembourg&nbsp;coach.<\/p>\n    <\/div>\n\n    <div id=\"intlState\"><\/div>\n    <div id=\"intlCountries\" class=\"intl-countries\"><\/div>\n    <div id=\"intlCarousel\" class=\"intl-carousel\">\n      <div class=\"intl-stage\">\n        <button id=\"intlPrev\" class=\"intl-arrow intl-prev\" aria-label=\"Previous\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M15 18l-6-6 6-6\"\/><\/svg><\/button>\n        <div id=\"intlViewport\" class=\"intl-viewport\"><div id=\"intlTrack\" class=\"intl-track\"><\/div><\/div>\n        <button id=\"intlNext\" class=\"intl-arrow intl-next\" aria-label=\"Next\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M9 18l6-6-6-6\"\/><\/svg><\/button>\n      <\/div>\n      <div id=\"intlDots\" class=\"intl-dots\"><\/div>\n    <\/div>\n\n    <div class=\"intl-foot\">\n      <a href=\"https:\/\/zeas.immo\/en\/holiday-homes\/\" class=\"btn-seeall\">See all international listings \u2192<\/a>\n    <\/div>\n\n  <\/div>\n<\/section>\n\n<!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     eXp NETWORK  (renamed + eXp-blue accent: reads as scale \/ credibility)\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n<section class=\"exp-section\" id=\"exp-listings-section\">\n  <div class=\"exp-inner\">\n\n    <div class=\"exp-hd\">\n      <p class=\"exp-eyebrow\">eXp Realty Luxembourg \u00b7 Network<\/p>\n      <h2 class=\"exp-title\">The local network<\/h2>\n      <p class=\"exp-sub\">Beyond our own mandates, we're part of eXp Luxembourg \u2014 active listings right across the country. Browse the network; if something fits, we represent <em>you<\/em> on it.<\/p>\n    <\/div>\n\n    <div id=\"expFilterBar\"><\/div>\n    <div id=\"expCount\" class=\"exp-count\" style=\"display:none\"><\/div>\n\n    <div id=\"expState\">\n      <div class=\"exp-loading\"><div class=\"exp-spinner\"><\/div> Loading listings\u2026<\/div>\n    <\/div>\n    <div id=\"expGrid\" class=\"exp-grid\" style=\"display:none\"><\/div>\n\n    <div id=\"expSeeAllWrap\" style=\"display:none; text-align:center; margin-top:40px;\">\n      <a href=\"https:\/\/zeas.immo\/en\/exp-luxembourg-properties\/\" class=\"btn-seeall\">See all Luxembourg eXp properties &rarr;<\/a>\n    <\/div>\n\n  <\/div>\n<\/section>\n\n<!-- Property modal -->\n<div class=\"exp-overlay\" id=\"expOverlay\">\n  <div class=\"exp-modal\" id=\"expModal\">\n    <button class=\"exp-modal-close\" id=\"expModalClose\">\n      <svg width=\"18\" height=\"18\" viewBox=\"0 0 16 16\" fill=\"none\">\n        <path d=\"M2 2l12 12M14 2L2 14\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\"\/>\n      <\/svg>\n    <\/button>\n    <div id=\"expModalBody\"><\/div>\n  <\/div>\n<\/div>\n\n<!-- Fullscreen lightbox -->\n<div class=\"exp-lightbox\" id=\"expLightbox\">\n  <button class=\"exp-lb-btn exp-lb-close\" id=\"expLbClose\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\"><path d=\"M2 2l12 12M14 2L2 14\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\/><\/svg><\/button>\n  <button class=\"exp-lb-btn exp-lb-prev\" id=\"expLbPrev\"><svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><path d=\"M15 18l-6-6 6-6\"\/><\/svg><\/button>\n  <img decoding=\"async\" class=\"exp-lightbox-img\" id=\"expLbImg\" src=\"\" alt=\"\">\n  <button class=\"exp-lb-btn exp-lb-next\" id=\"expLbNext\"><svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><path d=\"M9 18l6-6-6-6\"\/><\/svg><\/button>\n  <span class=\"exp-lb-ctr\" id=\"expLbCtr\"><\/span>\n<\/div>\n\n<!-- Enquiry modal -->\n<div class=\"exp-enq-overlay\" id=\"expEnqOverlay\">\n  <div class=\"exp-enq-modal\">\n    <button class=\"exp-enq-close\" id=\"expEnqClose\">\n      <svg width=\"18\" height=\"18\" viewBox=\"0 0 16 16\" fill=\"none\">\n        <path d=\"M2 2l12 12M14 2L2 14\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\"\/>\n      <\/svg>\n    <\/button>\n    <div id=\"expEnqBody\"><\/div>\n  <\/div>\n<\/div>\n\n<!-- CLOSING CTA  (NEW \u2014 ends the page on an action) -->\n<section class=\"closing-cta\">\n  <div class=\"cc-wrap\">\n    <h2 class=\"cc-title\" style=\"font-size: clamp(34px, 4.5vw, 50px); margin-bottom: 10px;\">Let's talk<\/h2>\n    <p class=\"cc-eyebrow\" style=\"font-size: 17px; margin-bottom: 8px;\">Not sure where to start?<\/p>\n    <p class=\"cc-sub\" style=\"max-width: 900px;\">Buying in Hesperange, selling your property, or dreaming of a place in the sun \u2014<br>book a 30-minute call and we'll map out your next step. No obligation.<\/p>\n    <a href=\"https:\/\/cal.eu\/zeasimmo\" class=\"btn-primary cc-btn\" target=\"_blank\" rel=\"noopener\">\n      Book a call\n      <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M5 12h14M12 5l7 7-7 7\"\/><\/svg>\n    <\/a>\n  <\/div>\n<\/section>\n\n<script>\n\nfunction togglePillar(key) {\n  var keys = ['buying', 'selling', 'renting'];\n  keys.forEach(function(k) {\n    var card = document.getElementById('card-' + k);\n    var exp  = document.getElementById('expand-' + k);\n    if (!card || !exp) return;\n    if (k === key) {\n      var isOpen = card.classList.contains('open');\n      card.classList.toggle('open', !isOpen);\n      card.setAttribute('aria-expanded', String(!isOpen));\n      exp.classList.toggle('visible', !isOpen);\n    } else {\n      card.classList.remove('open');\n      card.setAttribute('aria-expanded', 'false');\n      exp.classList.remove('visible');\n    }\n  });\n}\n\n\/* The expand panels sit in a separate row below the 3 cards \u2014 perfect for the\n   desktop 3-up layout, but on a single-column phone they'd all open under the\n   LAST card. Relocate each panel directly beneath its own card on mobile, and\n   move them back into the shared row on desktop. *\/\nfunction layoutPillarPanels() {\n  var grid = document.querySelector('.pillars-grid');\n  var panelsWrap = document.querySelector('.pillars-panels');\n  if (!grid || !panelsWrap) return;\n  var mobile = window.matchMedia('(max-width: 860px)').matches;\n  ['buying', 'selling', 'renting'].forEach(function(k) {\n    var card  = document.getElementById('card-' + k);\n    var panel = document.getElementById('expand-' + k);\n    if (!card || !panel) return;\n    if (mobile) {\n      if (card.nextElementSibling !== panel) card.after(panel);   \/\/ put panel under its card\n    } else if (panel.parentNode !== panelsWrap) {\n      panelsWrap.appendChild(panel);                              \/\/ restore the shared desktop row\n    }\n  });\n}\nif (window.matchMedia) {\n  window.addEventListener('resize', layoutPillarPanels);\n  layoutPillarPanels();\n}\n\nfunction toggleDrawer(id, triggerBtn) {\n  var drawer = document.getElementById(id);\n  var allDrawers = document.querySelectorAll('.form-drawer');\n  var allBtns = document.querySelectorAll('.hero .btn-primary, .hero .btn-outline');\n  var isOpen = drawer.classList.contains('open');\n  allDrawers.forEach(function(d) {\n    d.classList.remove('open');\n    d.setAttribute('aria-hidden', 'true');\n  });\n  allBtns.forEach(function(b) { b.classList.remove('active'); });\n  if (!isOpen) {\n    drawer.classList.add('open');\n    drawer.setAttribute('aria-hidden', 'false');\n    if (triggerBtn) triggerBtn.classList.add('active');\n    setTimeout(function() {\n      var top = drawer.getBoundingClientRect().top + window.pageYOffset - 80;\n      window.scrollTo({ top: top, behavior: 'smooth' });\n    }, 120);\n  }\n}\n\n\n\n(function () {\n  const PROXY     = 'https:\/\/zeas.immo\/zeas-proxy.php';   \/\/ still used for the enquiry POST only\n  const API       = 'https:\/\/zeas.immo\/wp-json\/zeas\/v1\/listings';\n  const PAGE_URL  = '\/en\/exp-properties\/';\n  const MAX_CARDS = 6;\n  const MAX_INTL  = 9;\n\n  let all      = [];\n  let luListings   = [];   \/\/ Luxembourg \/ network listings\n  let intlListings = [];   \/\/ your own exclusive listings (outside LU)\n  let filtered = [];\n  let activeType    = 'all';\n  let activeStatus  = 'all';\n  let activeCommune = 'all';\n  let PRICE_LO = 0, PRICE_HI = 0, priceMin = 0, priceMax = 0;\n  let galImages = [];\n  let galIdx    = 0;\n\n  const $state    = document.getElementById('expState');\n  const $grid     = document.getElementById('expGrid');\n  const $count    = document.getElementById('expCount');\n  const $filterBar= document.getElementById('expFilterBar');\n  const $overlay  = document.getElementById('expOverlay');\n  const $modalBody= document.getElementById('expModalBody');\n  const $enqOvl   = document.getElementById('expEnqOverlay');\n  const $enqBody  = document.getElementById('expEnqBody');\n  const $intlTrack = document.getElementById('intlTrack');\n  const $intlState= document.getElementById('intlState');\n  const $intlSection = document.getElementById('intl-section');\n\n  \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     LISTING SPLIT\n     \"International\" = your own listings, published under agent Adrian Buzea\n     (all outside Luxembourg). Everything else = the wider eXp network.\n\n     MY_AGENT is matched loosely (case-insensitive, order-independent) across\n     whatever agent fields the feed exposes. If the International section comes\n     up empty on the live site, open one listing's JSON and add the real agent\n     field name to AGENT_STR_FIELDS \/ AGENT_OBJ below.\n  \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n  \/\/ Your listings are published under agent Adrian Buzea (confirmed against the\n  \/\/ live feed: top-level agent_first_name \/ agent_last_name \/ agent_email).\n  const MY_AGENT_TOKENS  = ['adrian', 'buzea'];\n  const AGENT_STR_FIELDS = ['agent_first_name','agent_last_name','agent_email','agent_name','listing_agent'];\n\n  function agentName(l) {\n    var s = '';\n    AGENT_STR_FIELDS.forEach(function(f){ if (typeof l[f] === 'string') s += ' ' + l[f]; });\n    return s.toLowerCase();\n  }\n  function isMine(l) {\n    var n = agentName(l);\n    return MY_AGENT_TOKENS.every(function(tok){ return n.indexOf(tok) > -1; });\n  }\n\n  \/\/ IMPORTANT: the feed's top-level country_code is unreliable \u2014 it reads \"LU\"\n  \/\/ even for properties abroad. The real country lives in full_payload.country.\n  function realCountry(l) {\n    var fp = l.full_payload || {};\n    return (fp.country || l.country_code || '').toString().toUpperCase();\n  }\n  function isAbroad(l) {\n    var c = realCountry(l);\n    return !!c && c !== 'LU';\n  }\n  \/\/ International = your own listings that are outside Luxembourg\n  function isIntl(l) { return isMine(l) && isAbroad(l); }\n\n  var COUNTRY_NAMES = { ES:'Spain', FR:'France', MA:'Morocco', PT:'Portugal', IT:'Italy', GR:'Greece', LU:'Luxembourg' };\n  function countryOf(l) {\n    var c = realCountry(l);\n    return COUNTRY_NAMES[c] || c || 'International';\n  }\n\n  \/\/ Editorial blurb for the International card \u2014 prefer the feed's English\n  \/\/ subtitle; fall back to a cleaned-up description (stripping the location\n  \/\/ disclaimer line and marketing emojis).\n  function intlBlurb(l) {\n    if (l._subtitle) return l._subtitle;\n    var d = (l.description || '')\n      .replace(\/^\\s*\ud83d\udccd[^\\n]*(\\n|$)\/gm, '')\n      .replace(\/[\\u{1F300}-\\u{1FAFF}\\u{2600}-\\u{27BF}\\u{2190}-\\u{21FF}]\/gu, '')\n      .replace(\/\\s{2,}\/g, ' ').replace(\/\\r?\\n+\/g, ' ').trim();\n    return d.substring(0, 160) + (d.length > 160 ? '\u2026' : '');\n  }\n\n  \/\/ The site is English, so present international listings in English: pull the\n  \/\/ English title \/ description \/ subtitle from full_payload.comments and use\n  \/\/ them for both the card and the modal. (Only applied to intl listings.)\n  function localizeEN(l) {\n    var fp = l.full_payload || {};\n    var cs = fp.comments || [];\n    var en = cs.filter(function(c){ return c && c.language === 'en'; })[0];\n    if (en) {\n      if (en.title)   l.title = en.title;\n      if (en.comment) l.description = en.comment;\n      l._subtitle = en.subtitle || '';\n    }\n    return l;\n  }\n\n  \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     ADAPTER \u2014 reshapes the new \/wp-json\/zeas\/v1 output into the\n     legacy \"l\" shape this page was built against. Identical to\n     the one on the international page; keep the two in sync.\n     Duplicates are already excluded server-side.\n  \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n  function toLegacy(item) {\n    var content  = item.content || {};\n    var en       = content.en || {};\n    var comments = Object.keys(content).map(function (lang) {\n      var c = content[lang] || {};\n      return { language: lang, title: c.headline, subtitle: c.hook, comment: c.summary, comment_full: c.narrative };\n    });\n    return {\n      id: item.reference,\n      source_id: item.reference,\n      title: en.headline || '',\n      description: en.summary || '',\n      _subtitle: en.hook || '',\n      narrative: en.narrative || '',\n      url: item.url || null,\n      full_payload: { country: item.country, comments: comments },\n      country_code: item.country,\n      price: item.price,\n      listing_type: String(item.listing_type || 1),\n      bedrooms: item.bedrooms,\n      bathrooms: item.bathrooms,\n      square_feet: item.area_living,\n      total_rooms: item.rooms,\n      construction_year: item.year_built,\n      property_type: item.property_type,\n      city: item.city,\n      address: item.address,\n      energy_efficiency_class: (item.energy && item.energy.class) || null,\n      images: (item.photos || []).map(function (p) { return { url: p.url, is_front_cover: false }; }),\n      status: item.status || 'live',\n      agent_first_name: item.is_mine ? 'Adrian' : '',\n      agent_last_name:  item.is_mine ? 'Buzea'  : '',\n      agent_email:      item.is_mine ? 'adrian.buzea@expluxembourg.com' : ''\n    };\n  }\n\n  async function fetchAll() {\n    var out = [], page = 1, LIMIT = 100, SAFETY = 6;\n    while (page <= SAFETY) {\n      var res = await fetch(API + '?scope=all&per_page=' + LIMIT + '&page=' + page);\n      if (!res.ok) throw new Error('HTTP ' + res.status);\n      var data = await res.json();\n      var batch = (data.items || []).map(toLegacy);\n      out = out.concat(batch);\n      if (!data.pages || page >= data.pages) break;\n      page++;\n    }\n    return out.filter(function (l) { return l.status !== 'sold'; });\n  }\n\n  \/* \u2500\u2500 Fetch \u2500\u2500 *\/\n  async function init() {\n    try {\n      const feed = await fetchAll();\n      all = feed;\n      \/\/ International = your listings (Adrian Buzea) that are outside Luxembourg.\n      intlListings = all.filter(isIntl).map(localizeEN);\n      \/\/ Network = everything NOT yours. NOTE: this currently drops ALL of your\n      \/\/ listings, including any future Luxembourg ones. When you start listing\n      \/\/ inside LU, revisit this so your LU listings land somewhere deliberately.\n      \/\/ Apply English localization to all network listings as well\n      luListings   = all.filter(function(l){ return !isMine(l); }).map(localizeEN);\n      renderIntl();\n      buildFilters();\n      applyFilters();\n    } catch(e) {\n      $state.innerHTML = '<div class=\"exp-error\">Could not load listings (' + e.message + ')<\/div>';\n      if ($intlSection) $intlSection.style.display = 'none';\n    }\n  }\n\n  \/* \u2500\u2500 International render \u2500\u2500 *\/\n  var activeIntlCountry = 'all';\n\n  function flagImg(country) {\n    var codes = { Spain:'es', France:'fr', Morocco:'ma', Portugal:'pt', Italy:'it', Greece:'gr' };\n    var code = codes[country];\n    return code ? '<img loading=\"lazy\" decoding=\"async\" class=\"intl-flag\" src=\"https:\/\/flagcdn.com\/w40\/' + code + '.png\" alt=\"' + esc(country) + '\" width=\"22\" height=\"15\" loading=\"lazy\">' : '';\n  }\n\n  function renderIntl() {\n    if (!intlListings.length) {\n      if ($intlSection) $intlSection.style.display = 'none';\n      return;\n    }\n    if ($intlState) $intlState.innerHTML = '';\n    buildIntlCountries();\n    renderIntlCards();\n  }\n\n  function buildIntlCountries() {\n    var wrap = document.getElementById('intlCountries');\n    if (!wrap) return;\n    var countries = intlListings.map(countryOf)\n      .filter(function(c,i,a){ return c && c !== 'International' && a.indexOf(c) === i; })\n      .sort(function(a,b){ return a.localeCompare(b); });\n    if (countries.length < 2) { wrap.innerHTML = ''; wrap.style.display = 'none'; return; }\n    wrap.style.display = '';\n    wrap.innerHTML =\n      '<button class=\"intl-country active\" data-c=\"all\">All countries<\/button>' +\n      countries.map(function(c){\n        return '<button class=\"intl-country\" data-c=\"' + esc(c) + '\">' + flagImg(c) + '<span>' + esc(c) + '<\/span><\/button>';\n      }).join('');\n    wrap.querySelectorAll('.intl-country').forEach(function(btn){\n      btn.addEventListener('click', function(){\n        wrap.querySelectorAll('.intl-country').forEach(function(b){ b.classList.remove('active'); });\n        btn.classList.add('active');\n        activeIntlCountry = btn.getAttribute('data-c');\n        renderIntlCards();\n      });\n    });\n  }\n\n  function renderIntlCards() {\n    var list = intlListings.filter(function(l){\n      return activeIntlCountry === 'all' || countryOf(l) === activeIntlCountry;\n    }).slice(0, MAX_INTL);\n    $intlTrack.innerHTML = list.map(intlCardHTML).join('');\n    $intlTrack.querySelectorAll('.icard').forEach(function(card, i){\n      if (card.dataset.noUrl) {\n        card.addEventListener('click', function(e){ e.preventDefault(); openPropertyModal(list[i]); });\n      }\n    });\n    initCarousel({\n      carousel: document.getElementById('intlCarousel'),\n      viewport: document.getElementById('intlViewport'),\n      track:    $intlTrack,\n      dots:     document.getElementById('intlDots'),\n      prev:     document.getElementById('intlPrev'),\n      next:     document.getElementById('intlNext'),\n      count:    list.length, gap: 28, cardSel: '.icard', dotClass: 'intl-dot', singleMax: 380, interval: 3000\n    });\n  }\n\n  \/* \u2500\u2500 Generic carousel controller (auto-advance, pause on hover, responsive) \u2500\u2500 *\/\n  function initCarousel(cfg) {\n    var carousel = cfg.carousel, viewport = cfg.viewport, track = cfg.track,\n        dotsWrap = cfg.dots, prevBtn = cfg.prev, nextBtn = cfg.next,\n        count = cfg.count, GAP = cfg.gap || 28, cardSel = cfg.cardSel,\n        dotClass = cfg.dotClass || 'intl-dot', singleMax = cfg.singleMax || 380,\n        interval = cfg.interval || 3000, autoScroll = cfg.autoScroll;\n    if (!carousel || !viewport || !track || !count) return;\n    if (carousel._cleanup) carousel._cleanup();\n    var reduceMotion = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n    var idx = 0, step = 0, maxIdx = 0, isStatic = false, timer = null;\n\n    function perView() {\n      var w = viewport.clientWidth;\n      var base = w >= 960 ? 3 : (w >= 620 ? 2 : 1);\n      \/\/ autoScroll: always leave at least one card off-screen so it auto-rotates\n      \/\/ whenever there are 2+ cards (instead of sitting static when they all fit).\n      return autoScroll ? Math.min(base, Math.max(1, count - 1)) : base;\n    }\n    function layout() {\n      var pv = perView(), vw = viewport.clientWidth;\n      isStatic = count <= pv;\n      carousel.classList.toggle('is-static', isStatic);\n      var visible = isStatic ? count : pv;\n      var cardW = (isStatic && count === 1) ? Math.min(vw, singleMax) : ((vw - (visible - 1) * GAP) \/ visible);\n      var cards = track.querySelectorAll(cardSel);\n      for (var i = 0; i < cards.length; i++) cards[i].style.width = cardW + 'px';\n      step = cardW + GAP;\n      maxIdx = Math.max(0, count - pv);\n      if (idx > maxIdx) idx = maxIdx;\n      move(); buildDots(); stopAuto(); if (!isStatic) startAuto();\n    }\n    function move() { track.style.transform = 'translateX(' + (-idx * step) + 'px)'; updateDots(); }\n    function go(n) { idx = n < 0 ? maxIdx : (n > maxIdx ? 0 : n); move(); }\n    function buildDots() {\n      if (!dotsWrap) return;\n      if (isStatic) { dotsWrap.innerHTML = ''; return; }\n      var h = '';\n      for (var i = 0; i <= maxIdx; i++) h += '<button class=\"' + dotClass + (i === idx ? ' active' : '') + '\" data-i=\"' + i + '\" aria-label=\"Go to slide ' + (i + 1) + '\"><\/button>';\n      dotsWrap.innerHTML = h;\n      dotsWrap.querySelectorAll('.' + dotClass).forEach(function(d){\n        d.addEventListener('click', function(){ go(parseInt(d.getAttribute('data-i'), 10)); restartAuto(); });\n      });\n    }\n    function updateDots() {\n      if (!dotsWrap) return;\n      var ds = dotsWrap.querySelectorAll('.' + dotClass);\n      for (var i = 0; i < ds.length; i++) ds[i].classList.toggle('active', i === idx);\n    }\n    function startAuto() { stopAuto(); if (reduceMotion) return; timer = setInterval(function(){ go(idx + 1); }, interval); }\n    function stopAuto()  { if (timer) { clearInterval(timer); timer = null; } }\n    function restartAuto(){ if (!isStatic) startAuto(); }\n\n    if (prevBtn) prevBtn.onclick = function(){ go(idx - 1); restartAuto(); };\n    if (nextBtn) nextBtn.onclick = function(){ go(idx + 1); restartAuto(); };\n    carousel.addEventListener('mouseenter', stopAuto);\n    carousel.addEventListener('mouseleave', restartAuto);\n    var rt;\n    function onResize(){ clearTimeout(rt); rt = setTimeout(layout, 150); }\n    window.addEventListener('resize', onResize);\n    carousel._cleanup = function(){\n      stopAuto();\n      window.removeEventListener('resize', onResize);\n      carousel.removeEventListener('mouseenter', stopAuto);\n      carousel.removeEventListener('mouseleave', restartAuto);\n    };\n    layout();\n  }\n\n  \/* \u2500\u2500 Village market-data carousel (static cards, 3-up, auto-rotate) \u2500\u2500 *\/\n  function initVillageCarousel() {\n    var track = document.getElementById('vilTrack');\n    if (!track) return;\n    var count = track.querySelectorAll('.vcard').length;\n    if (!count) return;\n    initCarousel({\n      carousel: document.getElementById('vilCarousel'),\n      viewport: document.getElementById('vilViewport'),\n      track:    track,\n      dots:     document.getElementById('vilDots'),\n      prev:     document.getElementById('vilPrev'),\n      next:     document.getElementById('vilNext'),\n      count:    count, gap: 28, cardSel: '.vcard', dotClass: 'intl-dot', singleMax: 420, interval: 3000\n    });\n  }\n\n  function intlCardHTML(l) {\n    var cover  = (l.images && l.images.find(function(i){ return i.is_front_cover; })) || (l.images && l.images[0]);\n    var img    = cover ? (cover.thumbnail_url || cover.url) : '';\n    var rental = l.listing_type === '2';\n    var price  = l.price ? l.price.toLocaleString('de-DE') + ' \u20ac' : 'Price on request';\n    var country= countryOf(l);\n\n    var desc = intlBlurb(l);\n\n    var specs = [];\n    if (l.bedrooms)    specs.push(l.bedrooms + ' bed');\n    if (l.bathrooms)   specs.push(l.bathrooms + ' bath');\n    if (l.square_feet) specs.push(Math.round(l.square_feet) + ' m\u00b2');\n\n    return '<a class=\"icard\" href=\"' + (l.url ? esc(l.url) : '#') + '\"' + (l.url ? '' : ' data-no-url=\"1\"') + '>' +\n      '<div class=\"icard-img\" role=\"img\" aria-label=\"' + esc((l.title || 'Property') + ' \u2014 ' + country) + '\"' + (img ? ' style=\"background-image:url(\\'' + esc(img) + '\\')\"' : '') + '>' +\n        '<span class=\"excl-badge\">Exclusive<\/span>' +\n        '<span class=\"icard-country\">' + esc(country) + '<\/span>' +\n      '<\/div>' +\n      '<div class=\"icard-body\">' +\n        '<div class=\"icard-loc\">' + si('pin','12') + esc(l.city || l.address || '') + '<\/div>' +\n        '<div class=\"icard-title\">' + esc(l.title) + '<\/div>' +\n        (desc ? '<div class=\"icard-desc\">' + esc(desc) + '<\/div>' : '') +\n        '<div class=\"icard-foot\">' +\n          '<div class=\"icard-price\">' + price + (rental ? ' <small>\/ month<\/small>' : '') +\n            (specs.length ? '<small>' + specs.join(' \u00b7 ') + '<\/small>' : '') + '<\/div>' +\n          '<span class=\"icard-enq\">' + (l.url ? 'View full listing \u2192' : 'Ask for details \u2192') + '<\/span>' +\n        '<\/div>' +\n      '<\/div>' +\n    '<\/a>';\n  }\n\n  \/* \u2500\u2500 Filters (network grid only) \u2500\u2500 *\/\n  function fmtPrice(v) {\n    if (v >= 1000000) { var m = v \/ 1000000; return '\u20ac' + (m % 1 ? m.toFixed(1) : m) + 'M'; }\n    return '\u20ac' + Math.round(v \/ 1000) + 'k';\n  }\n\n  function matchFilters(l) {\n    var p = +l.price || 0;\n    var commune = (l.city || l.address || '').trim();\n    return (activeType    === 'all' || l.property_type === activeType) &&\n           (activeStatus  === 'all' || l.listing_type  === activeStatus) &&\n           (activeCommune === 'all' || commune === activeCommune) &&\n           (!p || (p >= priceMin && p <= priceMax));\n  }\n\n  \/\/ French property types -> English labels + preferred display order\n  var EXP_TYPE_LABELS = {\n    'Appartement': 'Apartment', 'Appartment': 'Apartment',\n    'Maison': 'House', 'Bureau': 'Office', 'Bureaux': 'Office',\n    'Commerce': 'Commercial', 'Local commercial': 'Commercial',\n    'Terrain': 'Land', 'Immeuble': 'Building', 'Garage': 'Garage'\n  };\n  var EXP_TYPE_ORDER = ['Appartement', 'Appartment', 'Maison', 'Bureau', 'Bureaux', 'Commerce', 'Local commercial', 'Terrain', 'Immeuble', 'Garage'];\n  function expTypeLabel(t) { return EXP_TYPE_LABELS[t] || t; }\n\n  function buildFilters() {\n    \/\/ Fixed English order: All, Apartment, House, Office, Commercial, Land.\n    \/\/ data-t keeps the raw (French) value so filtering still matches l.property_type.\n    var present = luListings.map(function(l){ return l.property_type; })\n         .filter(function(t,i,a){ return t && a.indexOf(t) === i; });\n    var ordered = EXP_TYPE_ORDER.filter(function(t){ return present.indexOf(t) > -1; });\n    present.forEach(function(t){ if (ordered.indexOf(t) < 0) ordered.push(t); });\n    var types = ['all'].concat(ordered);\n\n    var communes = luListings.map(function(l){ return (l.city || l.address || '').trim(); })\n         .filter(function(c,i,a){ return c && a.indexOf(c) === i; })\n         .sort(function(a,b){ return a.localeCompare(b); });\n\n    \/\/ Price bounds from all priced network listings\n    var prices = luListings.map(function(l){ return +l.price; }).filter(function(p){ return p > 0; });\n    var hasPrice = prices.length > 0;\n    var STEP = 10000;\n    if (hasPrice) {\n      PRICE_LO = Math.floor(Math.min.apply(null, prices) \/ STEP) * STEP;\n      PRICE_HI = Math.ceil(Math.max.apply(null, prices) \/ STEP) * STEP;\n    } else { PRICE_LO = 0; PRICE_HI = 0; }\n    priceMin = PRICE_LO; priceMax = PRICE_HI;\n\n    var priceBlock = hasPrice\n      ? '<div class=\"exp-range\">' +\n          '<div class=\"exp-range-track\"><\/div>' +\n          '<div class=\"exp-range-fill\" id=\"expRangeFill\"><\/div>' +\n          '<span class=\"exp-range-bub\" id=\"expBubMin\"><\/span>' +\n          '<span class=\"exp-range-bub\" id=\"expBubMax\"><\/span>' +\n          '<input type=\"range\" id=\"expRangeMin\" min=\"' + PRICE_LO + '\" max=\"' + PRICE_HI + '\" step=\"' + STEP + '\" value=\"' + PRICE_LO + '\">' +\n          '<input type=\"range\" id=\"expRangeMax\" min=\"' + PRICE_LO + '\" max=\"' + PRICE_HI + '\" step=\"' + STEP + '\" value=\"' + PRICE_HI + '\">' +\n        '<\/div>'\n      : '';\n\n    $filterBar.innerHTML =\n      '<div class=\"exp-filter-row\">' +\n        '<span class=\"exp-filter-label\">Transaction<\/span>' +\n        '<div class=\"exp-filters\" id=\"expStatusFilters\">' +\n          '<button class=\"exp-filter-btn active\" data-s=\"all\">All<\/button>' +\n          '<button class=\"exp-filter-btn\" data-s=\"1\">For sale<\/button>' +\n          '<button class=\"exp-filter-btn\" data-s=\"2\">For rent<\/button>' +\n        '<\/div>' +\n        '<span class=\"exp-filter-label\" style=\"margin-left:8px\">Type<\/span>' +\n        '<div class=\"exp-filters\" id=\"expTypeFilters\">' +\n          types.map(function(t){\n            return '<button class=\"exp-filter-btn' + (t==='all'?' active':'') + '\" data-t=\"' + esc(t) + '\">' + (t==='all'?'All':esc(expTypeLabel(t))) + '<\/button>';\n          }).join('') +\n        '<\/div>' +\n        '<button class=\"exp-reset-btn\" id=\"expResetBtn\">Reset<\/button>' +\n      '<\/div>' +\n      '<div class=\"exp-refine\">' +\n        '<div class=\"exp-f-field\">' +\n          '<span class=\"exp-f-label\">Commune<\/span>' +\n          '<div class=\"exp-select-wrap\">' +\n            '<svg class=\"exp-select-pin\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5a2.5 2.5 0 110-5 2.5 2.5 0 010 5z\"\/><\/svg>' +\n            '<select class=\"exp-select\" id=\"expCommune\">' +\n              '<option value=\"all\">All communes<\/option>' +\n              communes.map(function(c){ return '<option value=\"' + esc(c) + '\">' + esc(c) + '<\/option>'; }).join('') +\n            '<\/select>' +\n          '<\/div>' +\n        '<\/div>' +\n        (hasPrice\n          ? '<div class=\"exp-f-divider\"><\/div>' +\n            '<div class=\"exp-f-field exp-f-price\">' +\n              '<span class=\"exp-f-label\">Price range<\/span>' +\n              priceBlock +\n            '<\/div>'\n          : '') +\n      '<\/div>';\n\n    document.getElementById('expStatusFilters').querySelectorAll('.exp-filter-btn').forEach(function(btn){\n      btn.addEventListener('click', function(){\n        document.getElementById('expStatusFilters').querySelectorAll('.exp-filter-btn').forEach(function(b){ b.classList.remove('active'); });\n        btn.classList.add('active');\n        activeStatus = btn.dataset.s;\n        applyFilters();\n      });\n    });\n    document.getElementById('expTypeFilters').querySelectorAll('.exp-filter-btn').forEach(function(btn){\n      btn.addEventListener('click', function(){\n        document.getElementById('expTypeFilters').querySelectorAll('.exp-filter-btn').forEach(function(b){ b.classList.remove('active'); });\n        btn.classList.add('active');\n        activeType = btn.dataset.t;\n        applyFilters();\n      });\n    });\n    document.getElementById('expCommune').addEventListener('change', function(){\n      activeCommune = this.value;\n      applyFilters();\n    });\n    \n    \/\/ Reset button handler\n    document.getElementById('expResetBtn').addEventListener('click', function(){\n      \/\/ Reset status filter to \"All\"\n      activeStatus = 'all';\n      document.getElementById('expStatusFilters').querySelectorAll('.exp-filter-btn').forEach(function(b){ b.classList.remove('active'); });\n      document.getElementById('expStatusFilters').querySelector('[data-s=\"all\"]').classList.add('active');\n      \n      \/\/ Reset type filter to \"All\"\n      activeType = 'all';\n      document.getElementById('expTypeFilters').querySelectorAll('.exp-filter-btn').forEach(function(b){ b.classList.remove('active'); });\n      document.getElementById('expTypeFilters').querySelector('[data-t=\"all\"]').classList.add('active');\n      \n      \/\/ Reset commune dropdown to \"All communes\"\n      activeCommune = 'all';\n      document.getElementById('expCommune').value = 'all';\n      \n      \/\/ Reset price range if present\n      if (hasPrice) {\n        priceMin = PRICE_LO;\n        priceMax = PRICE_HI;\n        document.getElementById('expRangeMin').value = PRICE_LO;\n        document.getElementById('expRangeMax').value = PRICE_HI;\n        paintPrice();\n      }\n      \n      applyFilters();\n    });\n\n    if (hasPrice) {\n      var minEl = document.getElementById('expRangeMin');\n      var maxEl = document.getElementById('expRangeMax');\n      var fillEl = document.getElementById('expRangeFill');\n      var bubMin = document.getElementById('expBubMin');\n      var bubMax = document.getElementById('expBubMax');\n      function paintPrice() {\n        var range = PRICE_HI - PRICE_LO || 1;\n        var lPct = (priceMin - PRICE_LO) \/ range * 100;\n        var rPct = (priceMax - PRICE_LO) \/ range * 100;\n        fillEl.style.left = lPct + '%';\n        fillEl.style.width = (rPct - lPct) + '%';\n        bubMin.style.left = lPct + '%'; bubMin.textContent = fmtPrice(priceMin);\n        bubMax.style.left = rPct + '%'; bubMax.textContent = fmtPrice(priceMax);\n      }\n      function priceChanged(which) {\n        var lo = parseInt(minEl.value, 10), hi = parseInt(maxEl.value, 10);\n        if (lo > hi) { if (which === 'min') { lo = hi; minEl.value = lo; } else { hi = lo; maxEl.value = hi; } }\n        priceMin = lo; priceMax = hi;\n        paintPrice();\n        applyFilters();\n      }\n      minEl.addEventListener('input', function(){ priceChanged('min'); });\n      maxEl.addEventListener('input', function(){ priceChanged('max'); });\n      paintPrice();\n    }\n  }\n\n  function applyFilters() {\n    filtered = luListings.filter(matchFilters).slice(0, MAX_CARDS);\n    renderGrid();\n  }\n\n  \/* \u2500\u2500 Grid \u2500\u2500 *\/\n  function renderGrid() {\n    $state.innerHTML = '';\n    if (!filtered.length) {\n      $grid.style.display = 'none';\n      $state.innerHTML = '<div class=\"exp-empty\">No listings match your filters.<\/div>';\n      $count.style.display = 'none';\n      return;\n    }\n    var total = luListings.filter(matchFilters).length;\n    $count.innerHTML = 'Showing <strong>' + filtered.length + '<\/strong> of <strong>' + total + '<\/strong> listings';\n    $count.style.display = 'block';\n    $grid.innerHTML = filtered.map(cardHTML).join('');\n    $grid.style.display = 'grid';\n    document.getElementById('expSeeAllWrap').style.display = 'block';\n\n    $grid.querySelectorAll('.exp-card').forEach(function(card, i){\n      card.addEventListener('click', function(){ openPropertyModal(filtered[i]); });\n    });\n  }\n\n  \/* \u2500\u2500 Card \u2500\u2500 *\/\n  function cardHTML(l) {\n    var cover  = (l.images && l.images.find(function(i){ return i.is_front_cover; })) || (l.images && l.images[0]);\n    var img    = cover ? (cover.thumbnail_url || cover.url) : '';\n    var rental = l.listing_type === '2';\n    var price  = l.price ? l.price.toLocaleString('fr-LU') + ' \u20ac' : 'P.s.d.';\n\n    var specs = '';\n    if (l.bedrooms)    specs += '<span class=\"exp-spec\">' + si('bed','16')  + '<strong>' + l.bedrooms + '<\/strong>&nbsp;ch.<\/span>';\n    if (l.bathrooms)   specs += '<span class=\"exp-spec\">' + si('bath','16') + '<strong>' + l.bathrooms + '<\/strong>&nbsp;sdb.<\/span>';\n    if (l.square_feet) specs += '<span class=\"exp-spec\">' + si('sqm','16')  + '<strong>' + Math.round(l.square_feet) + '<\/strong>&nbsp;m\u00b2<\/span>';\n\n    return '<div class=\"exp-card\">' +\n      '<div class=\"exp-card-img\">' +\n        (img ? '<img decoding=\"async\" src=\"' + esc(img) + '\" alt=\"' + esc(l.title) + '\" loading=\"lazy\">' : '') +\n        '<span class=\"exp-card-badge' + (rental?' rental':'') + '\">' + (rental?'Location':'Vente') + '<\/span>' +\n        (l.property_type ? '<span class=\"exp-card-type\">' + esc(expTypeLabel(l.property_type)) + '<\/span>' : '') +\n        '<span class=\"exp-card-network-badge\">eXp Network<\/span>' +\n      '<\/div>' +\n      '<div class=\"exp-card-body\">' +\n        '<div class=\"exp-card-price\">' + price + (rental?' <span class=\"pm\">\/ mois<\/span>':'') + '<\/div>' +\n        '<div class=\"exp-card-title\">' + esc(l.title) + '<\/div>' +\n        '<div class=\"exp-card-city\">' + si('pin','15') + esc(l.city || l.address || '') + '<\/div>' +\n        (specs ? '<div class=\"exp-card-specs\">' + specs + '<\/div>' : '') +\n        '<div class=\"exp-card-contact\">' + si('mail','15') + 'Request information<\/div>' +\n      '<\/div>' +\n    '<\/div>';\n  }\n\n  \/* \u2500\u2500 Similar properties \u2014 sourced from whichever pool the current\n        listing belongs to (network or international), never mixed.\n        Network: same property_type only (a garage shouldn't surface a\n        house). International: same country only. \u2500\u2500 *\/\n  function similarCardsHTML(current) {\n    var fromLu = luListings.indexOf(current) !== -1;\n    var source = fromLu ? luListings : intlListings;\n    var pool;\n    if (fromLu) {\n      pool = source.filter(function(x){ return x !== current && x.property_type === current.property_type; });\n    } else {\n      pool = source.filter(function(x){ return x !== current && countryOf(x) === countryOf(current); });\n    }\n    pool = pool.slice(0, 3);\n    if (!pool.length) return '';\n\n    var cards = pool.map(function(x){\n      var sourceArr = fromLu ? luListings : intlListings;\n      var img = (x.images && x.images[0]) ? (x.images[0].url || x.images[0].original_url) : '';\n      var xPrice = x.price ? x.price.toLocaleString('fr-LU') + ' \u20ac' : 'Prix sur demande';\n      var xSpecs = '';\n      if (x.bedrooms)    xSpecs += '<span class=\"exp-sim-spec\">' + si('bed','15') + '<strong>' + x.bedrooms + '<\/strong> ch.<\/span>';\n      if (x.square_feet) xSpecs += '<span class=\"exp-sim-spec\">' + si('sqm','15') + '<strong>' + Math.round(x.square_feet) + '<\/strong> m\u00b2<\/span>';\n      return '<a class=\"exp-sim-card\" href=\"#\" data-pool=\"' + (fromLu ? 'lu' : 'intl') + '\" data-idx=\"' + sourceArr.indexOf(x) + '\">' +\n        '<div class=\"exp-sim-img\">' + (img ? '<img decoding=\"async\" src=\"' + esc(img) + '\" alt=\"\" loading=\"lazy\">' : '') + '<\/div>' +\n        '<div class=\"exp-sim-body\">' +\n          '<div class=\"exp-sim-city\">' + si('pin','12') + esc(x.city || x.address || '') + '<\/div>' +\n          '<div class=\"exp-sim-title\">' + esc(x.title) + '<\/div>' +\n          (xSpecs ? '<div class=\"exp-sim-specs\">' + xSpecs + '<\/div>' : '') +\n          '<div class=\"exp-sim-foot\"><span class=\"exp-sim-price\">' + xPrice + '<\/span><span class=\"exp-sim-cta\">View ' + si('chevR','13') + '<\/span><\/div>' +\n        '<\/div>' +\n      '<\/a>';\n    }).join('');\n\n    return '<div class=\"exp-modal-similar\">' +\n      '<div class=\"exp-modal-similar-head\"><span class=\"exp-sim-eyebrow\">You may also like<\/span><h3>Similar properties<\/h3><\/div>' +\n      '<div class=\"exp-modal-similar-track\">' + cards + '<\/div>' +\n    '<\/div>';\n  }\n\n  \/* \u2500\u2500 Property modal \u2500\u2500 *\/\n  function openPropertyModal(l) {\n    galImages = (l.images || []).map(function(i){ return i.url || i.original_url; }).filter(Boolean);\n    galIdx = 0;\n    var rental = l.listing_type === '2';\n    var price  = l.price ? l.price.toLocaleString('fr-LU') + ' \u20ac' : 'Prix sur demande';\n    var ec     = l.energy_efficiency_class;\n\n    var specs = '';\n    if (l.bedrooms)        specs += '<div class=\"exp-modal-spec\">' + si('bed','16')  + '<strong>' + l.bedrooms + '<\/strong> chambre' + (l.bedrooms>1?'s':'') + '<\/div>';\n    if (l.bathrooms)       specs += '<div class=\"exp-modal-spec\">' + si('bath','16') + '<strong>' + l.bathrooms + '<\/strong> sdb.<\/div>';\n    if (l.square_feet)     specs += '<div class=\"exp-modal-spec\">' + si('sqm','16')  + '<strong>' + Math.round(l.square_feet) + '<\/strong> m\u00b2 hab.<\/div>';\n    if (l.plot_size_sqm)   specs += '<div class=\"exp-modal-spec\">' + si('sqm','16')  + '<strong>' + Math.round(l.plot_size_sqm) + '<\/strong> m\u00b2 terrain<\/div>';\n    if (l.total_rooms)     specs += '<div class=\"exp-modal-spec\">' + si('rooms','16')+ '<strong>' + l.total_rooms + '<\/strong> pi\u00e8ces<\/div>';\n    if (l.construction_year) specs += '<div class=\"exp-modal-spec\">' + si('cal','16') + '<strong>' + l.construction_year + '<\/strong><\/div>';\n\n    var rawDesc = (l.description || '')\n      .replace(\/^[A-Z][A-Z ]+\\s*\\([^)]*\\+[\\d ]+\\)[^\\n]*\/gm, '')\n      .replace(\/\\+352[\\d .\\-]{6,}\/g, '')\n      .replace(\/^.*\\+\\d[\\d .\\-]{7,}.*$\/gm, '')\n      .replace(\/\\n{3,}\/g, '\\n\\n').trim();\n    var narrative = (l.narrative || '').replace(\/\\n{3,}\/g, '\\n\\n').trim();\n    var desc = [rawDesc, narrative].filter(Boolean).join('\\n\\n');\n\n    $modalBody.innerHTML =\n      '<div class=\"exp-modal-gallery' + (galImages.length > 1 ? ' has-multi' : '') + '\">' +\n        (galImages.length ? '<img decoding=\"async\" id=\"expGalImg\" src=\"' + esc(galImages[0]) + '\" alt=\"' + esc(l.title) + '\">' : '') +\n        (galImages.length > 1\n          ? '<button class=\"exp-gal-btn exp-gal-prev\" id=\"expGalPrev\" aria-label=\"Previous photo\">' + si('chevL','22') + '<\/button>' +\n            '<button class=\"exp-gal-btn exp-gal-next\" id=\"expGalNext\" aria-label=\"Next photo\">' + si('chevR','22') + '<\/button>' +\n            '<span class=\"exp-gal-ctr\" id=\"expGalCtr\">' + si('camera','13') + '1 \/ ' + galImages.length + '<\/span>'\n          : '') +\n      '<\/div>' +\n      '<div class=\"exp-modal-body\">' +\n        '<div class=\"exp-modal-top\">' +\n          '<div>' +\n            '<div class=\"exp-modal-title\">' + esc(l.title) + '<\/div>' +\n            '<div class=\"exp-modal-addr\">' + si('pin','13') + esc(l.address || l.city || '') + '<\/div>' +\n            '<p class=\"exp-listing-attr\">Listing presented by an eXp Realty Luxembourg agent<\/p>' +\n          '<\/div>' +\n          '<div style=\"text-align:right\">' +\n            '<div class=\"exp-modal-price\">' + price + (rental?' <span class=\"pm\">\/ mois<\/span>':'') + '<\/div>' +\n            (ec && ec.length <= 2 ? '<span class=\"exp-energy\" data-c=\"' + esc(ec) + '\">CPE ' + esc(ec) + '<\/span>' : '') +\n          '<\/div>' +\n        '<\/div>' +\n        (specs ? '<div class=\"exp-modal-specs\">' + specs + '<\/div>' : '') +\n        (desc  ? '<div class=\"exp-desc-wrap is-collapsed\" id=\"expDescWrap\">' +\n                   '<div class=\"exp-modal-desc\" id=\"expDescText\">' + esc(desc) + '<\/div>' +\n                   '<div class=\"exp-desc-fade\"><\/div>' +\n                   '<button class=\"exp-read-more\" id=\"expReadMore\"><span>Read full description<\/span>' +\n                     '<svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M6 9l6 6 6-6\"\/><\/svg>' +\n                   '<\/button>' +\n                 '<\/div>' : '') +\n        '<div class=\"exp-modal-footer\">' +\n          '<div class=\"exp-modal-footer-text\">Interested in this property?<span>Contact us and we\\'ll arrange everything on your behalf.<\/span><\/div>' +\n          '<button class=\"exp-cta-btn\" id=\"expModalEnqBtn\">' + si('mail','14') + ' Contact the listing agent<\/button>' +\n        '<\/div>' +\n        (similarCardsHTML(l)) +\n      '<\/div>';\n\n    if (galImages.length > 1) {\n      document.getElementById('expGalPrev').addEventListener('click', function(){ galNav(-1); });\n      document.getElementById('expGalNext').addEventListener('click', function(){ galNav(1); });\n    }\n    var gi = document.getElementById('expGalImg');\n    if (gi) gi.addEventListener('click', function(){ openLB(galIdx); });\n    document.getElementById('expModalEnqBtn').addEventListener('click', function(){\n      closePropertyModal();\n      openEnquiry(l);\n    });\n\n    $modalBody.querySelectorAll('.exp-sim-card').forEach(function(card){\n      card.addEventListener('click', function(e){\n        e.preventDefault();\n        var idx  = parseInt(card.dataset.idx, 10);\n        var pool = card.dataset.pool === 'lu' ? luListings : intlListings;\n        if (!isNaN(idx) && pool[idx]) openPropertyModal(pool[idx]);\n      });\n    });\n\n    initReadMore('exp');\n\n    $overlay.classList.add('open');\n    document.body.style.overflow = 'hidden';\n  }\n\n  function galNav(dir) {\n    galIdx = (galIdx + dir + galImages.length) % galImages.length;\n    document.getElementById('expGalImg').src = galImages[galIdx];\n    document.getElementById('expGalCtr').innerHTML = si('camera','13') + (galIdx+1) + ' \/ ' + galImages.length;\n  }\n  function closePropertyModal() {\n    $overlay.classList.remove('open');\n    document.body.style.overflow = '';\n  }\n  document.getElementById('expModalClose').addEventListener('click', closePropertyModal);\n  $overlay.addEventListener('click', function(e){ if(e.target===$overlay) closePropertyModal(); });\n\n  \/* \u2500\u2500 Enquiry modal \u2500\u2500 *\/\n  function openEnquiry(l) {\n    var rental = l.listing_type === '2';\n    var price  = l.price ? l.price.toLocaleString('fr-LU') + ' \u20ac' + (rental?' \/ mois':'') : 'Price on request';\n    var ref    = l.source_id || l.id.substring(0,8).toUpperCase();\n    var msg    = 'Hello,\\n\\nI am interested in the following property:\\n\\n' +\n      l.title + '\\n' + (l.address || l.city || '') + '\\nPrice: ' + price + '\\nRef: ' + ref +\n      '\\n\\nCould you please provide more information and arrange a viewing?\\n\\nThank you.';\n\n    $enqBody.innerHTML =\n      '<div class=\"exp-enq-prop-ref\"><strong>' + esc(l.title) + '<\/strong>' + esc(l.address || l.city || '') + ' \u00b7 ' + price + '<\/div>' +\n      '<h3 class=\"exp-enq-title\">Request more information<\/h3>' +\n      '<p class=\"exp-enq-sub\">We\\'ll contact the listing agent on your behalf and get back to you within 24 hours.<\/p>' +\n      '<div class=\"exp-enq-row\">' +\n        '<div><label class=\"exp-enq-label\">First name<\/label><input class=\"exp-enq-field\" id=\"expEnqFirst\" type=\"text\" placeholder=\"First name\"><\/div>' +\n        '<div><label class=\"exp-enq-label\">Last name<\/label><input class=\"exp-enq-field\" id=\"expEnqLast\" type=\"text\" placeholder=\"Last name\"><\/div>' +\n      '<\/div>' +\n      '<label class=\"exp-enq-label\">Email<\/label><input class=\"exp-enq-field\" id=\"expEnqEmail\" type=\"email\" placeholder=\"your@email.com\">' +\n      '<label class=\"exp-enq-label\">Phone (optional)<\/label><input class=\"exp-enq-field\" id=\"expEnqPhone\" type=\"tel\" placeholder=\"+352 ...\">' +\n      '<label class=\"exp-enq-label\">Message<\/label>' +\n      '<textarea class=\"exp-enq-field exp-enq-textarea\" id=\"expEnqMsg\">' + msg + '<\/textarea>' +\n      '<button class=\"exp-enq-submit\" id=\"expEnqSend\">' + si('mail','15') + ' Send enquiry<\/button>' +\n      '<p class=\"exp-enq-note\">Your details are only used to respond to your enquiry and are never shared.<\/p>';\n\n    document.getElementById('expEnqSend').addEventListener('click', function(){\n      var first = document.getElementById('expEnqFirst').value.trim();\n      var email = document.getElementById('expEnqEmail').value.trim();\n      if (!first || !email) { alert('Please enter your first name and email.'); return; }\n      var btn = document.getElementById('expEnqSend');\n      btn.disabled = true; btn.textContent = 'Sending...';\n      var fd = new FormData();\n      fd.append('action',   'enquiry');\n      fd.append('name',     first + ' ' + document.getElementById('expEnqLast').value.trim());\n      fd.append('email',    email);\n      fd.append('phone',    document.getElementById('expEnqPhone').value.trim());\n      fd.append('message',  document.getElementById('expEnqMsg').value.trim());\n      fd.append('property', l.title || '');\n      fd.append('ref',      ref);\n      fd.append('price',    price);\n      fetch(PROXY, { method: 'POST', body: fd })\n        .then(function(r){ return r.json(); })\n        .then(function(res){\n          if (res.success) {\n            $enqBody.innerHTML =\n              '<div class=\"exp-enq-success\">' +\n                '<div class=\"exp-tick\"><svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#fff\" stroke-width=\"2.5\" stroke-linecap=\"round\"><path d=\"M5 13l4 4L19 7\"\/><\/svg><\/div>' +\n                '<h3>Enquiry sent!<\/h3>' +\n                '<p>Thank you \u2014 we\\'ll be in touch within 24 hours.<\/p>' +\n              '<\/div>';\n          } else {\n            btn.disabled = false; btn.textContent = 'Send enquiry';\n            alert(res.error || 'Something went wrong. Please email hello@zeas.immo directly.');\n          }\n        })\n        .catch(function(){\n          btn.disabled = false; btn.textContent = 'Send enquiry';\n          alert('Something went wrong. Please email hello@zeas.immo directly.');\n        });\n    });\n\n    $enqOvl.classList.add('open');\n    document.body.style.overflow = 'hidden';\n  }\n\n  function closeEnquiry() {\n    $enqOvl.classList.remove('open');\n    document.body.style.overflow = '';\n  }\n  document.getElementById('expEnqClose').addEventListener('click', closeEnquiry);\n  $enqOvl.addEventListener('click', function(e){ if(e.target===$enqOvl) closeEnquiry(); });\n\n  \/* \u2500\u2500 Lightbox \u2500\u2500 *\/\n  var $lb    = document.getElementById('expLightbox');\n  var $lbImg = document.getElementById('expLbImg');\n  var $lbCtr = document.getElementById('expLbCtr');\n  var lbIdx  = 0;\n  function openLB(idx) {\n    lbIdx = idx; $lbImg.src = galImages[lbIdx];\n    $lbCtr.textContent = (lbIdx+1)+' \/ '+galImages.length;\n    $lb.classList.add('open');\n  }\n  function lbNav(d) {\n    lbIdx = (lbIdx+d+galImages.length)%galImages.length;\n    $lbImg.src = galImages[lbIdx];\n    $lbCtr.textContent = (lbIdx+1)+' \/ '+galImages.length;\n  }\n  function closeLB() { $lb.classList.remove('open'); }\n  document.getElementById('expLbClose').addEventListener('click', closeLB);\n  document.getElementById('expLbPrev').addEventListener('click', function(){ lbNav(-1); });\n  document.getElementById('expLbNext').addEventListener('click', function(){ lbNav(1); });\n  $lb.addEventListener('click', function(e){ if(e.target===$lb||e.target===$lbImg) closeLB(); });\n\n  document.addEventListener('keydown', function(e){\n    if(e.key==='Escape'){closeLB();closePropertyModal();closeEnquiry();}\n    if(e.key==='ArrowLeft'&&$lb.classList.contains('open'))lbNav(-1);\n    if(e.key==='ArrowRight'&&$lb.classList.contains('open'))lbNav(1);\n  });\n\n  \/* \u2500\u2500 Icons \u2500\u2500 *\/\n  function si(name, size) {\n    size = size || '11';\n    var a = ' width=\"'+size+'\" height=\"'+size+'\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"';\n    var p = {\n      bed:   '<path d=\"M2 20V8a2 2 0 012-2h16a2 2 0 012 2v12\"\/><path d=\"M2 14h20\"\/><path d=\"M7 14V9\"\/>',\n      bath:  '<path d=\"M9 6a3 3 0 00-3 3v7h12V9\"\/><path d=\"M3 13h18v3a4 4 0 01-4 4H7a4 4 0 01-4-4v-3z\"\/>',\n      sqm:   '<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"1\"\/><path d=\"M3 9h18M9 3v18\"\/>',\n      pin:   '<path d=\"M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5a2.5 2.5 0 110-5 2.5 2.5 0 010 5z\"\/>',\n      rooms: '<rect x=\"3\" y=\"3\" width=\"7\" height=\"7\"\/><rect x=\"14\" y=\"3\" width=\"7\" height=\"7\"\/><rect x=\"3\" y=\"14\" width=\"7\" height=\"7\"\/><rect x=\"14\" y=\"14\" width=\"7\" height=\"7\"\/>',\n      cal:   '<rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\"\/><path d=\"M16 2v4M8 2v4M3 10h18\"\/>',\n      mail:  '<path d=\"M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z\"\/><polyline points=\"22,6 12,13 2,6\"\/>',\n      chevL: '<path d=\"M15 18l-6-6 6-6\"\/>',\n      chevR: '<path d=\"M9 18l6-6-6-6\"\/>',\n      camera:'<path d=\"M23 19a2 2 0 01-2 2H3a2 2 0 01-2-2V8a2 2 0 012-2h4l2-3h6l2 3h4a2 2 0 012 2z\"\/><circle cx=\"12\" cy=\"13\" r=\"4\"\/>',\n    };\n    return '<svg' + a + '>' + (p[name]||'') + '<\/svg>';\n  }\n\n  function esc(s) {\n    return String(s||'').replace(\/&\/g,'&amp;').replace(\/<\/g,'&lt;').replace(\/>\/g,'&gt;').replace(\/\"\/g,'&quot;').replace(\/'\/g,'&#39;');\n  }\n\n  \/* \u2500\u2500 Read more \/ read less \u2014 only shown when the text actually overflows\n        the collapsed height, so short descriptions never get an inert button. \u2500\u2500 *\/\n  function initReadMore(prefix) {\n    var wrap = document.getElementById(prefix + 'DescWrap');\n    if (!wrap) return;\n    var text = document.getElementById(prefix + 'DescText');\n    var btn  = document.getElementById(prefix + 'ReadMore');\n    requestAnimationFrame(function () {\n      if (text.scrollHeight <= text.clientHeight + 4) {\n        wrap.classList.remove('is-collapsed');\n        btn.style.display = 'none';\n        return;\n      }\n      btn.addEventListener('click', function () {\n        var expanding = wrap.classList.contains('is-collapsed');\n        wrap.classList.toggle('is-collapsed', !expanding);\n        wrap.classList.toggle('is-expanded', expanding);\n        btn.querySelector('span').textContent = expanding ? 'Show less' : 'Read full description';\n      });\n    });\n  }\n\n  init();\n  initVillageCarousel();\n})();\n\n<\/script>\n<\/body>\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Zeas Immo \u2014 Hesperange Real Estate Hesperange Real Estate The Hesperange agent obsessedwith your outcome. Buy, sell, or rent in Howald, Alzingen, Itzig, Fentange, or Hesperange village \u2014 differently. A plan-driven search. A personalised marketing campaign. The right long-term tenant. I&#8217;m buying in Hesperange I&#8217;m selling my property 5+ Villages \u2014 Howald, Alzingen,Itzig, Fentange, Hesperange [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"class_list":["post-17232","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/zeas.immo\/en\/wp-json\/wp\/v2\/pages\/17232","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zeas.immo\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/zeas.immo\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/zeas.immo\/en\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/zeas.immo\/en\/wp-json\/wp\/v2\/comments?post=17232"}],"version-history":[{"count":3,"href":"https:\/\/zeas.immo\/en\/wp-json\/wp\/v2\/pages\/17232\/revisions"}],"predecessor-version":[{"id":51101,"href":"https:\/\/zeas.immo\/en\/wp-json\/wp\/v2\/pages\/17232\/revisions\/51101"}],"wp:attachment":[{"href":"https:\/\/zeas.immo\/en\/wp-json\/wp\/v2\/media?parent=17232"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}