{"id":1437,"date":"2026-09-24T18:28:45","date_gmt":"2026-09-24T18:28:45","guid":{"rendered":"https:\/\/www.luxflat-direct.com\/cout-de-la-location-au-luxembourg\/"},"modified":"2026-09-24T18:54:39","modified_gmt":"2026-09-24T18:54:39","slug":"cout-de-la-location-au-luxembourg","status":"publish","type":"post","link":"https:\/\/www.luxflat-direct.com\/fr\/cout-de-la-location-au-luxembourg\/","title":{"rendered":"Combien co\u00fbte la location au Luxembourg en 2026 ?"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"1437\" class=\"elementor elementor-1437 elementor-bc-flex-widget\" data-elementor-post-type=\"post\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2a5b414 e-con-full e-flex e-con e-parent\" data-id=\"2a5b414\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-52a70fa elementor-widget elementor-widget-html\" data-id=\"52a70fa\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- LuxFlat Direct shared assets \u2014 loaded once per page. Do not duplicate per section. -->\n<style>\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Playfair+Display:wght@600;700&display=swap');\n\/* ==========================================================================\n   LuxFlat Direct \u2014 shared page styles\n   Loaded ONCE per page. Every rule is scoped under .lfd so nothing here can\n   leak into the Elementor theme, header or footer.\n   ========================================================================== *\/\n\n.lfd {\n  --lfd-navy: #14203A;\n  --lfd-bronze: #A9822E;\n  --lfd-forest: #334A2E;\n  --lfd-cream: #F5F3EE;\n  --lfd-muted: #6B6B60;\n  --lfd-border: #E8E4DC;\n  --lfd-danger: #B03A2E;\n  --lfd-forest-bg: #E8F0E8;\n  --lfd-danger-bg: #F7E9E6;\n  --lfd-bronze-bg: #F3EBD8;\n\n  \/* Fraunces + Inter are enqueued site-wide by the theme. Playfair Display is NOT \u2014\n     it is loaded by the @font-face import at the top of this stylesheet (2026-09-11).\n     TWO serif roles, matching the design system's own two tokens:\n       --lfd-serif          = Fraunces      -> `--font-fraunces`     : H1 only, plus the\n                                               two numeric accents (stat numbers, the\n                                               numbered circles), which the design also\n                                               sets in Fraunces.\n       --lfd-serif-display  = Playfair      -> `--font-serif-display`: every h2 and h3 and\n                                               all the card\/section display titles.\n     The one deliberate crossover: the Help Centre hero H1 is Playfair, because its design\n     source sets it that way (desktop AND mobile). *\/\n  --lfd-serif: 'Fraunces', Georgia, 'Times New Roman', serif;\n  --lfd-serif-display: 'Playfair Display', Georgia, 'Times New Roman', serif;\n  --lfd-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n\n  --lfd-maxw: 1200px;\n  --lfd-pad: 40px;\n\n  font-family: var(--lfd-sans);\n  color: var(--lfd-navy);\n  -webkit-font-smoothing: antialiased;\n}\n\n\/* Elementor injects its own margins on widget wrappers; neutralise inside .lfd *\/\n.lfd *, .lfd *::before, .lfd *::after { box-sizing: border-box; }\n\/* Any explicit display: rule below would otherwise beat the UA [hidden] style. *\/\n.lfd [hidden], .lfd[hidden] { display: none !important; }\n\/* Element resets are wrapped in :where(): `.lfd p` (0-1-1) out-specified every .lfd-* rule below (0-1-0), so\n   .lfd-h2 \/ .lfd-lede \/ .lfd-stat__l \/ .lfd-hoods__label margins and\n   .lfd-btn--primary's colour were all silently dropped. :where() contributes zero\n   specificity, so these resets sit at (0-1-0) and lose to the later component rules. *\/\n.lfd :where(p, h1, h2, h3, h4, ul, ol) { margin: 0; }\n.lfd :where(ul, ol) { padding: 0; list-style: none; }\n.lfd :where(img) { max-width: 100%; display: block; }\n.lfd :where(a) { text-decoration: none; color: inherit; }\n\n\/* ---------- layout ---------- *\/\n.lfd-band { width: 100%; overflow-x: clip; }\n.lfd-band--white  { background: #fff; }\n.lfd-band--cream  { background: var(--lfd-cream); }\n.lfd-band--navy   { background: var(--lfd-navy); }\n.lfd-wrap { max-width: var(--lfd-maxw); margin: 0 auto; padding: 0 var(--lfd-pad); }\n.lfd-wrap--narrow { max-width: 760px; }\n\n.lfd-pad-lg { padding-top: 104px; padding-bottom: 104px; }\n.lfd-pad-md { padding-top: 80px;  padding-bottom: 80px; }\n.lfd-pad-sm { padding-top: 56px;  padding-bottom: 56px; }\n\n\/* ---------- type ---------- *\/\n.lfd-eyebrow {\n  font: 500 11px\/1 var(--lfd-sans);\n  letter-spacing: .14em; text-transform: uppercase;\n  color: var(--lfd-bronze);\n}\n.lfd-h1 { font: 600 42px\/1.15 var(--lfd-serif); color: #fff; }\n.lfd-h2 { font: 600 36px\/1.2 var(--lfd-serif-display); color: var(--lfd-navy); margin-top: 8px; }\n.lfd-h3 { font: 600 20px\/1.3 var(--lfd-serif-display); color: var(--lfd-navy); }\n.lfd-lede { font: 400 15px\/1.6 var(--lfd-sans); color: rgba(255,255,255,.68); margin-top: 14px; max-width: 560px; }\n.lfd-body { font: 400 14px\/1.6 var(--lfd-sans); color: var(--lfd-muted); }\n.lfd-crumb { font: 400 13px\/1 var(--lfd-sans); color: rgba(255,255,255,.5); margin-bottom: 16px; }\n.lfd-crumb strong { color: rgba(255,255,255,.8); font-weight: 400; }\n\n\/* ---------- buttons ---------- *\/\n.lfd-btn {\n  display: inline-block; border: none; cursor: pointer;\n  border-radius: 8px; padding: 14px 28px;\n  font: 500 15px\/1 var(--lfd-sans); text-align: center;\n  transition: background 150ms ease-out, opacity 150ms ease-out;\n}\n.lfd-btn--primary { background: var(--lfd-bronze); color: #fff; box-shadow: 0 4px 16px rgba(169,130,46,.35); }\n.lfd-btn--primary:hover { background: #96742a; color: #fff; }\n.lfd-btn--ghost { background: transparent; color: #fff; border: 1px solid #fff; padding: 10px 18px; font-size: 13px; }\n.lfd-btn--ghost:hover { background: rgba(255,255,255,.12); color: #fff; }\n.lfd-btn--sm { padding: 10px 18px; font-size: 13px; }\n\n\/* ---------- hero ---------- *\/\n.lfd-hero { position: relative; display: flex; align-items: center; min-height: 680px; overflow: hidden; }\n\/* `.lfd`-prefixed (0-2-0) so `height:100%` beats Elementor's `.elementor img { height: auto }`\n   (0-1-1) in frontend.min.css. Unprefixed (0-1-0) it lost, and because an <img> is a replaced\n   element `height:auto` resolves to the intrinsic height rather than stretching to inset:0 \u2014\n   the image rendered 1295px tall in a 640px hero, top-anchored, so `object-fit: cover` never\n   centred it and the design's centre crop showed as a zoomed-in top slice. *\/\n.lfd .lfd-hero__img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }\n.lfd-hero__scrim { position: absolute; inset: 0;\n  background: linear-gradient(90deg, rgba(20,32,58,.75) 0%, rgba(20,32,58,.30) 100%); }\n.lfd-hero__inner { position: relative; width: 100%; }\n.lfd-hero__copy { max-width: 580px; }\n\/* how-it-works hero \u2014 a shorter photo band than for-landlords' full-height `.lfd-hero`.\n   The design gives it `padding:56px 0 96px` and no min-height, so the toggle pill below\n   can pull up into it with `margin-top:-32px`. Renamed from the old \"flat\" modifier,\n   which was a plain navy block until the 2026-08-30 design update put a photo behind it. *\/\n.lfd-hero--band { position: relative; overflow: hidden; display: block; min-height: 0;\n  background: var(--lfd-navy); padding: 56px 0 96px; }\n\/* The design's scrim here is 3-stop and lighter than the 2-stop `.lfd-hero__scrim`\n   for-landlords uses, so it is scoped to this band rather than changing the shared rule. *\/\n.lfd-hero--band .lfd-hero__scrim { background: linear-gradient(90deg,\n  rgba(20,32,58,.90) 0%, rgba(20,32,58,.62) 55%, rgba(20,32,58,.35) 100%); }\n\/* design: 40px, where the shared `.lfd-h1` is 42px. *\/\n.lfd-hero--band .lfd-h1 { font-size: 40px; }\n\n\/* ---------- hero spanning two Elementor widgets (for-tenants) ----------\n   for-tenants' hero holds the live         <div class=\"p2p-home-search-wrap\" data-p2p-home-search>\n            <button\n                class=\"p2p-home-search-trigger\"\n                type=\"button\"\n                aria-expanded=\"false\"\n                aria-controls=\"p2p-home-search-modal-1\"\n            >\n                <span class=\"p2p-home-search-trigger__copy\">\n                    <span class=\"p2p-home-search-trigger__primary\" data-p2p-search-summary-location>Anywhere<\/span>\n                    <span class=\"p2p-home-search-trigger__secondary\">\n                        <span data-p2p-search-summary-date>Move in<\/span>\n                        <span aria-hidden=\"true\"> \u00b7 <\/span>\n                        <span data-p2p-search-summary-duration>3 months<\/span>\n                        <span aria-hidden=\"true\"> \u00b7 <\/span>\n                        <span data-p2p-search-summary-budget>Any budget<\/span>\n                    <\/span>\n                <\/span>\n                <span class=\"p2p-home-search-trigger__go\" aria-hidden=\"true\">\n                    <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" focusable=\"false\">\n                        <circle cx=\"11\" cy=\"11\" r=\"7\" stroke=\"currentColor\" stroke-width=\"2\"><\/circle>\n                        <path d=\"M20 20L16.2 16.2\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><\/path>\n                    <\/svg>\n                <\/span>\n            <\/button>\n\n            <div\n                id=\"p2p-home-search-modal-1\"\n                class=\"p2p-home-search-modal\"\n                data-p2p-search-modal\n            >\n                <button class=\"p2p-home-search-modal__backdrop\" type=\"button\" tabindex=\"-1\" aria-label=\"Close search\" data-p2p-search-close><\/button>\n                <div class=\"p2p-home-search-modal__sheet\" data-p2p-search-sheet data-p2p-search-labelledby=\"p2p-home-search-title-1\">\n                    <div class=\"p2p-home-search-modal__handle\" aria-hidden=\"true\"><\/div>\n                    <div class=\"p2p-home-search-modal__header\">\n                        <h2 id=\"p2p-home-search-title-1\">Find accommodation<\/h2>\n                        <button class=\"p2p-home-search-modal__close\" type=\"button\" aria-label=\"Close search\" data-p2p-search-close>&times;<\/button>\n                    <\/div>\n\n                    <form class=\"p2p-home-search\" action=\"https:\/\/www.luxflat-direct.com\/fr\/apartments\/\" method=\"get\">\n                        <input type=\"hidden\" name=\"p2p_home_search\" value=\"1\">\n\n                        <div class=\"p2p-home-search__field p2p-home-search__field--location\">\n                            <label for=\"p2p-home-search-1-location\">Location<\/label>\n                            <select id=\"p2p-home-search-1-location\" name=\"location\" data-p2p-search-location>\n                                <option value=\"\">Anywhere<\/option>\n                                                                    <optgroup label=\"Luxembourg\">\n                                        <option value=\"city:1\">\n                                            All Luxembourg                                        <\/option>\n                                                                                    <option value=\"area:10\">Belair<\/option>\n                                                                                    <option value=\"area:4\">Bonnevoie<\/option>\n                                                                                    <option value=\"area:5\">center<\/option>\n                                                                                    <option value=\"area:13\">Cents<\/option>\n                                                                                    <option value=\"area:11\">Cessange<\/option>\n                                                                                    <option value=\"area:12\">Differdange<\/option>\n                                                                                    <option value=\"area:15\">Esch-sur-Alzette<\/option>\n                                                                                    <option value=\"area:3\">Gare<\/option>\n                                                                                    <option value=\"area:1\">Gasperich<\/option>\n                                                                                    <option value=\"area:17\">Hamm<\/option>\n                                                                                    <option value=\"area:14\">Hesperange<\/option>\n                                                                                    <option value=\"area:8\">Hollerich<\/option>\n                                                                                    <option value=\"area:9\">Kirchberg<\/option>\n                                                                                    <option value=\"area:6\">Limpertsberg<\/option>\n                                                                                    <option value=\"area:16\">Mamer<\/option>\n                                                                                    <option value=\"area:7\">Merl<\/option>\n                                                                            <\/optgroup>\n                                                                    <optgroup label=\"Thionville\">\n                                        <option value=\"city:3\">\n                                            All Thionville                                        <\/option>\n                                                                            <\/optgroup>\n                                                            <\/select>\n                            <span class=\"p2p-home-search__hint\">City or neighbourhood<\/span>\n                        <\/div>\n\n                        <div class=\"p2p-home-search__field\">\n                            <label for=\"p2p-home-search-1-move-in\">Move in<\/label>\n                            <input id=\"p2p-home-search-1-move-in\" type=\"date\" name=\"move_in\" min=\"2026-10-05\" data-p2p-search-date>\n                        <\/div>\n\n                        <div class=\"p2p-home-search__field\">\n                            <label for=\"p2p-home-search-1-duration\">Duration<\/label>\n                            <input id=\"p2p-home-search-1-duration\" type=\"number\" min=\"1\" step=\"1\" inputmode=\"numeric\" name=\"duration\" value=\"3\" data-p2p-search-duration>\n                            <span class=\"p2p-home-search__hint\">1 month minimum<\/span>\n                        <\/div>\n\n                        <div class=\"p2p-home-search__field p2p-home-search__field--budget\">\n                            <label for=\"p2p-home-search-1-budget\">Max budget<\/label>\n                            <div class=\"p2p-home-search__budget-wrap\">\n                                <span aria-hidden=\"true\">\u20ac<\/span>\n                                <input id=\"p2p-home-search-1-budget\" type=\"number\" min=\"0\" step=\"50\" inputmode=\"numeric\" name=\"max_budget\" placeholder=\"1800\" data-p2p-search-budget>\n                            <\/div>\n                            <span class=\"p2p-home-search__hint\">per month<\/span>\n                        <\/div>\n\n                        <div class=\"p2p-home-search__submit\">\n                            <button type=\"submit\" aria-label=\"Search rentals\">\n                                <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\" focusable=\"false\">\n                                    <circle cx=\"11\" cy=\"11\" r=\"7\" stroke=\"currentColor\" stroke-width=\"2\"><\/circle>\n                                    <path d=\"M20 20L16.2 16.2\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><\/path>\n                                <\/svg>\n                                <span>Search<\/span>\n                            <\/button>\n                        <\/div>\n                    <\/form>\n                <\/div>\n            <\/div>\n        <\/div>\n         shortcode, which must stay a\n   real Elementor shortcode widget \u2014 so the hero copy and the search bar are two\n   sibling widgets. They now sit in ONE Elementor container, and that container is\n   the hero: it carries the min-height, the padding and `overflow:hidden`, and the\n   backdrop <img> stretches to `inset:0` against it, so a single image covers both\n   widgets. Previously they were two containers, so the image ended at the bottom of\n   the copy and the page background (#ECEDE8) showed through beside the 980px search\n   bar \u2014 the reported right-hand seam.\n\n   These three rules are the only ones in this file NOT scoped under `.lfd`: they\n   style Elementor's own container\/widget wrappers, reached via `_css_classes` set\n   on the elements in build.py. The `lfd-` prefix keeps them from colliding. *\/\n.e-con.lfd-hero-con { position: relative; overflow: hidden;\n  min-height: 640px; justify-content: center; padding: 96px 0; gap: 28px; }\n\/* Elementor sets `position:relative` on every `.elementor-widget`, which would make\n   the copy widget \u2014 not the container \u2014 the <img>'s containing block, collapsing the\n   backdrop back onto the copy alone. Static here hands the containing block back. *\/\n.lfd-hero-con > .elementor-widget.lfd-hero-w { position: static; }\n\/* `--lfd-maxw` \/ `--lfd-pad` are declared on `.lfd`, which is *inside* this element, so\n   the 1200\/40px gutter is repeated literally here to line the bar up with the copy.\n   `max-width` and `margin:auto` are NOT usable on this element: something in the Elementor\n   stack pins the widget to `max-width:100%` \/ `margin:0` at a specificity that even\n   `.lfd-hero-con > .elementor-widget.lfd-hero-search-w` (0-3-0) loses to \u2014 only an inline\n   style won it. Padding *does* apply, so the centred 1200px column is expressed as padding\n   instead, and the bar itself is sized on the plugin's own elements inside it. *\/\n.lfd-hero-con > .lfd-hero-search-w { position: relative; z-index: 1; box-sizing: border-box;\n  padding-left:  calc(max(0px, (100% - 1200px) \/ 2) + 40px);\n  padding-right: calc(max(0px, (100% - 1200px) \/ 2) + 40px); }\n\/* Design (For-Tenants.dc.html:292) renders the bar 850px wide, left-aligned with the copy \u2014\n   NOT the full 1120px content column. The plugin ships `width: min(980px, 100%)` on both of\n   these elements (home-search.css:7 and :31), so both have to be overridden. *\/\n.lfd-hero-con .p2p-home-search-wrap,\n.lfd-hero-con .p2p-home-search { width: 850px; max-width: 100%; }\n.lfd-hero__stack { position: static; }\n.lfd-hero-con .lfd-hero__img, .lfd-hero-con .lfd-hero__scrim { z-index: 0; }\n.lfd-hero-con .lfd-hero__inner { z-index: 1; }\n\n\/* hero: copy beside the floating dossier card (for-landlords) *\/\n.lfd-hero__row { display: flex; justify-content: space-between; align-items: flex-end; gap: 32px; flex-wrap: wrap; }\n.lfd-dossier { background: #fff; border-radius: 12px; box-shadow: 0 16px 40px rgba(20,32,58,.30);\n  padding: 16px; width: 320px; box-sizing: border-box; flex-shrink: 0; }\n.lfd-dossier__top { display: flex; align-items: center; gap: 10px; }\n.lfd-dossier__avatar { width: 40px; height: 40px; border-radius: 50%; background: var(--lfd-navy); color: #fff;\n  display: flex; align-items: center; justify-content: center; font: 600 16px var(--lfd-sans); flex-shrink: 0; }\n.lfd-dossier__name { font: 600 15px var(--lfd-serif-display); color: var(--lfd-navy); }\n.lfd-dossier__meta { font: 400 12px var(--lfd-sans); color: var(--lfd-muted); }\n.lfd-dossier__tag { background: var(--lfd-forest-bg); color: var(--lfd-forest); border-radius: 20px;\n  padding: 5px 10px; font: 500 11px var(--lfd-sans); display: flex; align-items: center; gap: 4px; white-space: nowrap; }\n.lfd-dossier__btns { display: flex; gap: 8px; margin-top: 14px; }\n.lfd .lfd-dossier__btn { flex: 1; border-radius: 8px; padding: 9px 0; font: 700 13px var(--lfd-sans); cursor: pointer; }\n.lfd .lfd-dossier__btn--no,\n.lfd .lfd-dossier__btn--no:hover  { background: transparent; border: 1px solid var(--lfd-danger); color: var(--lfd-danger); }\n.lfd .lfd-dossier__btn--yes,\n.lfd .lfd-dossier__btn--yes:hover { background: var(--lfd-forest); border: none; color: #fff; }\n\n\/* feature strip (for-landlords, below the hero) *\/\n.lfd-features { max-width: 1100px; margin: 0 auto; display: flex; gap: 48px; text-align: center; }\n.lfd-features__item { flex: 1; display: flex; flex-direction: column; align-items: center;\n  padding: 0 24px; border-right: 1px solid var(--lfd-border); }\n.lfd-features__item:last-child { border-right: 0; }\n.lfd-features__t { font: 500 14px\/1.5 var(--lfd-sans); color: var(--lfd-navy); max-width: 220px; }\n\n\/* ---------- neighbourhood trust strip (for-landlords) ---------- *\/\n.lfd-hoods-band { border-bottom: 1px solid var(--lfd-border); padding: 32px 0; }\n.lfd-hoods__label {\n  \/* design: font:500 12px var(--font-sans) \u2014 no line-height override, so `normal`. *\/\n  font: 500 12px var(--lfd-sans);\n  letter-spacing: .1em; text-transform: uppercase;\n  color: var(--lfd-muted); text-align: center; margin-bottom: 16px;\n}\n.lfd-hoods { display: flex; flex-wrap: wrap; gap: 10px; justify-content: center; }\n.lfd-hoods__chip {\n  background: var(--lfd-cream); color: var(--lfd-navy);\n  font: 500 13px\/1 var(--lfd-sans); border-radius: 20px; padding: 8px 16px;\n}\n\n\/* ---------- stats ---------- *\/\n.lfd-stats { display: flex; justify-content: center; gap: 64px; flex-wrap: wrap; }\n.lfd-stat { text-align: center; }\n.lfd-stat__n { font: 700 36px\/1 var(--lfd-serif); color: var(--lfd-navy); }\n.lfd-stat--on-navy .lfd-stat__n { color: #fff; }\n.lfd-stat__l { font: 400 13px\/1.4 var(--lfd-sans); color: var(--lfd-muted); max-width: 190px; margin: 8px auto 0; }\n.lfd-stat--on-navy .lfd-stat__l { color: rgba(255,255,255,.65); }\n\n\/* ---------- cards grid ---------- *\/\n.lfd-grid { display: grid; gap: 24px; }\n\/* Without this a wide child (e.g. a fixed-max-width image) sets the column's\n   min-content width and forces horizontal overflow on narrow screens. *\/\n.lfd-grid > * { min-width: 0; }\n.lfd-trust__item, .lfd-cta, .lfd-step > div { min-width: 0; }\n.lfd-grid--3 { grid-template-columns: repeat(3, 1fr); }\n.lfd-grid--4 { grid-template-columns: repeat(4, 1fr); }\n.lfd-grid--2 { grid-template-columns: repeat(2, 1fr); }\n\n.lfd-card { background: #fff; border: 1px solid var(--lfd-border); border-radius: 12px; overflow: hidden; }\n.lfd-card__media { aspect-ratio: 4\/3; overflow: hidden; }\n.lfd-card__media img { width: 100%; height: 100%; object-fit: cover; }\n\/* wide UI screenshot shown whole (landlords step 2), letterboxed on the screenshot's own background *\/\n.lfd-card__media--contain { background-color: #EEEFEA; }\n.lfd-card__media--contain img { object-fit: contain; }\n\/* real portal screenshots (how-it-works tenant strip): letterbox on the portal's page background *\/\n.lfd-card__media--ui { background-color: #E7E9E2; }\n\/* 4:3 product visuals in a 16:9 cell (how-it-works landlord strip): keep the floating UI cards at the top *\/\n.lfd-card__media--top img { object-position: top center; }\n.lfd-card__body { padding: 20px; }\n\n\/* ---------- audience card (for-tenants \"Who it's for\") ----------\n   Design: For-Tenants.dc.html:338 \u2014 a 3:4 photo tile with a navy gradient and the copy\n   sitting ON the image in white. This is deliberately NOT `.lfd-card` (white card, 4:3\n   media box, dark copy below it), which for-landlords' step cards and the help-centre\n   cards still use \u2014 that treatment is what made this section read as off-system. *\/\n.lfd-acard { position: relative; border-radius: 12px; overflow: hidden; aspect-ratio: 3\/4; }\n\/* same `.elementor img { height: auto }` trap as .lfd-hero__img \u2014 keep `.lfd`-prefixed. *\/\n.lfd .lfd-acard__img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }\n.lfd-acard__scrim { position: absolute; inset: 0; background: linear-gradient(to bottom,\n  rgba(20,32,58,.15) 0%, rgba(20,32,58,.35) 35%, rgba(20,32,58,.96) 100%); }\n.lfd-acard__body { position: absolute; left: 0; right: 0; bottom: 0; padding: 20px 16px; }\n.lfd-acard__t { font: 600 17px\/1.3 var(--lfd-serif-display); color: #fff; }\n.lfd-acard__b { font: 400 12px\/1.5 var(--lfd-sans); color: rgba(255,255,255,.85);\n  margin-top: 8px; padding-bottom: 4px; }\n.lfd-acard__more { display: inline-block; margin-top: 8px; font: 500 12px var(--lfd-sans);\n  color: #fff; text-decoration: underline; }\n\n\/* ---------- trust strip ---------- *\/\n.lfd-trust { display: flex; gap: 48px; flex-wrap: wrap; justify-content: space-between; }\n.lfd-trust__item { display: flex; gap: 12px; align-items: flex-start; flex: 1 1 240px; }\n.lfd-trust__t { font: 600 14px\/1.3 var(--lfd-sans); color: var(--lfd-navy); }\n.lfd-trust__d { font: 400 13px\/1.5 var(--lfd-sans); color: var(--lfd-muted); margin-top: 3px; }\n\n\/* ---------- numbered steps ---------- *\/\n.lfd-steps { position: relative; margin-top: 40px; display: flex; flex-direction: column; gap: 32px; }\n.lfd-steps__rail { position: absolute; left: 17px; top: 18px; bottom: 18px; width: 1px; background: var(--lfd-border); }\n.lfd-step { display: flex; gap: 24px; align-items: flex-start; }\n.lfd-step__n {\n  width: 36px; height: 36px; border-radius: 50%; flex-shrink: 0; z-index: 1;\n  display: flex; align-items: center; justify-content: center;\n  font: 700 15px\/1 var(--lfd-serif); color: #fff;\n  background: var(--lfd-bronze); box-shadow: 0 4px 10px rgba(0,0,0,.15);\n}\n.lfd-step--forest .lfd-step__n { background: var(--lfd-forest); }\n.lfd-step__head { display: flex; align-items: center; gap: 10px; margin-bottom: 6px; }\n.lfd-step__body { max-width: 480px; }\n\n\/* ---------- comparison table ---------- *\/\n.lfd-compare { width: 100%; max-width: 760px; margin: 32px auto 0; border-collapse: collapse;\n  background: #fff; border-radius: 12px; overflow: hidden; box-shadow: 0 4px 20px rgba(20,32,58,.08); }\n.lfd-compare th, .lfd-compare td { text-align: left; padding: 14px 20px; font: 400 14px\/1.5 var(--lfd-sans); }\n.lfd-compare thead tr { background: var(--lfd-navy); }\n.lfd-compare thead th { font-weight: 500; color: #fff; font-size: 13px; }\n.lfd-compare tbody tr { border-bottom: 1px solid var(--lfd-border); }\n.lfd-compare tbody tr:last-child { border-bottom: none; }\n.lfd-compare tbody tr:nth-child(even) { background: #FAFAF8; }\n.lfd-compare td:first-child { color: var(--lfd-navy); font-weight: 500; }\n.lfd-compare .lfd-yes { color: var(--lfd-forest); font-weight: 500; }\n.lfd-compare .lfd-no  { color: var(--lfd-muted); }\n\/* icon + value, per design: check before the LuxFlat column, dash before Agency *\/\n.lfd-compare__v { display: flex; align-items: center; gap: 8px; }\n.lfd-compare__v svg { flex-shrink: 0; }\n\n\/* ---------- FAQ accordion ---------- *\/\n.lfd-faq { display: flex; flex-direction: column; gap: 14px; margin-top: 32px; }\n.lfd-faq__item { background: #fff; border: 1px solid var(--lfd-border); border-radius: 12px; overflow: hidden; }\n\/* `.lfd`-prefixed (0-2-0) so it beats the theme's `.elementor-kit-7 button` (0-1-1),\n   which otherwise repaints every FAQ row navy-on-white. Same for the dossier and\n   toggle buttons below; border-radius\/padding are restated because the kit sets those too. *\/\n.lfd .lfd-faq__q {\n  width: 100%; display: flex; justify-content: space-between; align-items: center; gap: 12px;\n  padding: 20px; background: none; border: none; border-radius: 0; cursor: pointer; text-align: left;\n  font: 600 15px\/1.4 var(--lfd-serif-display); color: var(--lfd-navy);\n}\n.lfd .lfd-faq__q:hover, .lfd .lfd-faq__q:focus { background: #FCFBF9; color: var(--lfd-navy); }\n.lfd-faq__chev { flex-shrink: 0; color: var(--lfd-muted); transition: transform 150ms ease-out, color 150ms ease-out; }\n.lfd-faq__item.is-open .lfd-faq__chev { transform: rotate(180deg); color: var(--lfd-bronze); }\n.lfd-faq__a { display: none; padding: 0 20px 20px; font: 400 14px\/1.6 var(--lfd-sans); color: var(--lfd-muted); }\n.lfd-faq__item.is-open .lfd-faq__a { display: block; }\n\n\/* ---------- tenant \/ landlord toggle ---------- *\/\n\/* The pill is lifted so it straddles the hero's bottom edge. `--lfd-toggle-lift` is the\n   overlap: everything above it sits over the hero, everything below hangs past it.\n\n   That lower part needs a background. In the design the whole page sits inside one\n   `background:#fff` wrapper, so the strip below the hero is white. Here each section is\n   its own Elementor container with no background, so the theme's page background\n   (#ECEDE8) showed through as a full-width band at the seam \u2014 cut into segments by the\n   white pill and its bronze button.\n\n   It is filled by a pseudo-element with a background-COLOR, NOT by a gradient on the rail\n   itself. Elementor's background lazy-load ships this, inline in every page's <head>:\n\n     .e-con.e-parent:nth-of-type(n+4):not(.e-lazyloaded):not(.e-no-lazyload),\n     .e-con.e-parent:nth-of-type(n+4):not(.e-lazyloaded):not(.e-no-lazyload) *\n       { background-image: none !important; }\n\n   ...with `n+3` under `max-height:1024px` and `n+2` under `max-height:640px`. The journey\n   container is the 3rd on this page, so on any viewport shorter than 1024px a gradient\n   here is stripped until Elementor marks the container `.e-lazyloaded` on scroll \u2014 which\n   is exactly when the seam is on screen. `background-color` is untouched by that rule, and\n   pseudo-elements are not matched by its `*` either, so this survives both ways. *\/\n.lfd-toggle-rail {\n  --lfd-toggle-lift: 32px;\n  display: flex; justify-content: center; padding: 0 var(--lfd-pad);\n  margin-top: calc(-1 * var(--lfd-toggle-lift));\n  position: relative; z-index: 2;\n}\n.lfd-toggle-rail::before {\n  content: ''; position: absolute; z-index: -1;\n  left: 0; right: 0; top: var(--lfd-toggle-lift); bottom: 0;\n  background-color: #fff;\n}\n.lfd-toggle {\n  background: #fff; border-radius: 30px; box-shadow: 0 8px 24px rgba(20,32,58,.15);\n  display: flex; padding: 4px; width: 420px; max-width: 100%;\n}\n.lfd .lfd-toggle__btn {\n  flex: 1; border: none; background: transparent; cursor: pointer;\n  border-radius: 26px; padding: 12px 0;\n  font: 500 14px\/1 var(--lfd-sans); color: var(--lfd-navy);\n  transition: background 150ms ease-out, color 150ms ease-out;\n}\n.lfd .lfd-toggle__btn[aria-selected=\"true\"] { background: var(--lfd-bronze); color: #fff; }\n\n\/* ---------- dual CTA ---------- *\/\n.lfd-ctas { display: flex; gap: 24px; }\n.lfd-cta {\n  flex: 1; position: relative; border-radius: 12px; overflow: hidden; min-height: 280px;\n  display: flex; flex-direction: column; justify-content: center; padding: 32px;\n}\n\/* same `.elementor img { height: auto }` trap as .lfd-hero__img above \u2014 keep `.lfd`-prefixed. *\/\n.lfd .lfd-cta__img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }\n.lfd-cta__scrim { position: absolute; inset: 0; }\n.lfd-cta__scrim--bronze { background: linear-gradient(135deg, rgba(169,130,46,.88), rgba(169,130,46,.75)); }\n.lfd-cta__scrim--navy   { background: linear-gradient(135deg, rgba(20,32,58,.90), rgba(20,32,58,.78)); }\n.lfd-cta__body { position: relative; }\n.lfd-cta__t { font: 600 22px\/1.25 var(--lfd-serif-display); color: #fff; }\n\n\/* ---------- help centre ----------\n   Rebuilt 2026-08-30 from the DesignSync `Help Centre.dc.html`, which replaced the flat\n   \"Popular articles\" link list with a \"Popular Frequently Asked Questions\" accordion beside\n   a phone mock. Every value here was measured off the design rendered at 1905px (see\n   \"Measured against the design\" in the README), not read off its inline style attributes. *\/\n\n\/* hero \u2014 centred, photo backdrop + navy scrim + bronze radial glow *\/\n.lfd-help-hero { position: relative; overflow: hidden; padding: 80px 40px; text-align: center;\n  background: var(--lfd-navy); }\n\/* `.lfd`-prefixed (0-2-0) so `height:100%` beats Elementor's `.elementor img{height:auto}`\n   (0-1-1) \u2014 same replaced-element trap documented on `.lfd-hero__img` above. *\/\n.lfd .lfd-help-hero__img { position: absolute; inset: 0; width: 100%; height: 100%;\n  object-fit: cover; filter: blur(2px); }\n.lfd-help-hero__scrim { position: absolute; inset: 0;\n  background: linear-gradient(180deg, rgba(20,32,58,.92) 0%, rgba(20,32,58,.80) 100%); }\n.lfd-help-hero__glow { position: absolute; left: 50%; top: 30%; transform: translate(-50%,-50%);\n  width: 420px; height: 420px; pointer-events: none;\n  background: radial-gradient(circle, rgba(169,130,46,.30) 0%, rgba(169,130,46,0) 70%); }\n.lfd-help-hero__inner { position: relative; }\n.lfd-help-hero__h1 { font: 700 38px\/1.15 var(--lfd-serif-display); color: #fff; margin-top: 10px; }\n.lfd-help-hero__p { font: 400 15px\/1.6 var(--lfd-sans); color: rgba(255,255,255,.68); margin-top: 10px; }\n\n.lfd-help-search { position: relative; max-width: 560px; margin: 24px auto 0; }\n.lfd-help-search__icon { position: absolute; left: 20px; top: 50%; transform: translateY(-50%);\n  color: rgba(255,255,255,.75); pointer-events: none; z-index: 1; display: flex; }\n.lfd-help-search input {\n  width: 100%; height: 56px; border-radius: 10px;\n  border: 1px solid rgba(255,255,255,.35); padding: 0 20px 0 52px;\n  font: 400 15px var(--lfd-sans); color: #fff;\n  background: rgba(255,255,255,.14);\n  backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px);\n  box-shadow: 0 8px 24px rgba(20,32,58,.30); outline: none;\n}\n.lfd-help-search input::placeholder { color: rgba(255,255,255,.65); }\n.lfd-help-search input:focus { border-color: var(--lfd-bronze); background: rgba(255,255,255,.20); }\n\n\/* topic cards \u2014 two photo tiles over four colour tiles *\/\n.lfd-tcards { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin-top: 32px; }\n.lfd-tcard { position: relative; display: block; border-radius: 12px; overflow: hidden; min-height: 180px; }\n.lfd .lfd-tcard__img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }\n.lfd-tcard__scrim { position: absolute; inset: 0; pointer-events: none;\n  background: linear-gradient(to bottom, rgba(20,32,58,.05) 0%, rgba(20,32,58,.85) 100%); }\n.lfd-tcard__body { position: absolute; left: 0; right: 0; bottom: 0; padding: 20px; }\n.lfd-tcard__t { font: 600 18px\/1.3 var(--lfd-serif-display); color: #fff; }\n.lfd-tcard__d { font: 400 13px\/1.5 var(--lfd-sans); color: rgba(255,255,255,.80); margin-top: 6px; }\n\n\/* 3 tiles since 2026-09-14 \u2014 one clean row of three. *\/\n.lfd-tiles { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; margin-top: 20px; }\n.lfd-tile { display: block; border: 1px solid var(--lfd-border); border-radius: 12px; padding: 28px;\n  box-shadow: 0 2px 12px rgba(20,32,58,.06); transition: box-shadow 150ms ease-out; }\n.lfd-tile:hover { box-shadow: 0 8px 22px rgba(20,32,58,.12); }\n.lfd-tile__ico { display: block; margin-bottom: 16px; }\n.lfd-tile__t { font: 600 18px\/1.3 var(--lfd-serif-display); color: var(--lfd-navy); }\n.lfd-tile__d { font: 400 13px\/1.5 var(--lfd-sans); color: var(--lfd-muted); margin-top: 8px; }\n\/* `.lfd-tile__n` \/ `.lfd-tcard__n` (article counts) removed 2026-09-14. The tile keeps its\n   28px padding on all four sides, so with icon + title + description it still closes\n   evenly; the photo card's body is bottom-anchored, so it simply sits a line lower. *\/\n\n\/* \"Popular Frequently Asked Questions\" accordion \u2014 help-centre only.\n   Deliberately NOT `.lfd-faq` (for-landlords \/ for-tenants \/ how-it-works use that one):\n   this design gives each row a leading document icon, a RIGHT-pointing chevron that\n   rotates 90deg open (not a down chevron rotating 180deg), 10px radius and 16px padding. *\/\n.lfd-hfaq__row { display: flex; gap: 32px; margin-top: 32px; align-items: flex-start; }\n.lfd-hfaq { flex: 0 0 60%; min-width: 0; display: flex; flex-direction: column; gap: 12px; }\n.lfd-hfaq__item { background: #fff; border: 1px solid var(--lfd-border); border-radius: 10px; overflow: hidden; }\n\/* `.lfd`-prefixed (0-2-0) so it beats the theme's `.elementor-kit-7 button` (0-1-1), which\n   otherwise repaints the row navy-on-white and re-applies the kit's own radius and padding. *\/\n.lfd .lfd-hfaq__q { width: 100%; display: flex; align-items: center; gap: 12px; padding: 16px;\n  background: none; border: none; border-radius: 0; cursor: pointer; text-align: left;\n  \/* `color` is restated because the kit also sets it: without this the button inherits\n     the kit's #fff and any text placed directly in it renders white-on-white. The three\n     children all set their own colour, so this is belt-and-braces, not a live bug. *\/\n  color: var(--lfd-navy); }\n.lfd .lfd-hfaq__q:hover, .lfd .lfd-hfaq__q:focus { background: #FCFBF9; }\n.lfd-hfaq__ico { flex-shrink: 0; display: block; color: var(--lfd-navy); }\n.lfd-hfaq__t { flex: 1; font: 500 15px\/1.4 var(--lfd-sans); color: var(--lfd-navy); }\n.lfd-hfaq__chev { flex-shrink: 0; color: var(--lfd-muted); transition: transform 200ms ease-out; }\n.lfd-hfaq__item.is-open .lfd-hfaq__chev { transform: rotate(90deg); }\n.lfd-hfaq__a { display: none; padding: 0 16px 16px 46px;\n  font: 400 14px\/1.6 var(--lfd-sans); color: var(--lfd-muted); }\n.lfd-hfaq__item.is-open .lfd-hfaq__a { display: block; }\n\n\/* phone mock beside the accordion *\/\n.lfd-phone-col { flex: 0 0 40%; min-width: 0; display: flex; flex-direction: column;\n  align-items: center; padding-top: 20px; }\n.lfd-phone { position: relative; width: 204px; border-radius: 44px; padding: 5px;\n  background: linear-gradient(135deg, #3a3b3d 0%, #161718 50%, #000 100%);\n  box-shadow: 0 30px 50px rgba(0,0,0,.28); }\n.lfd-phone__bez { position: relative; overflow: hidden; background: #000; border-radius: 39px; padding: 3px; }\n.lfd-phone__notch { position: absolute; top: 10px; left: 50%; transform: translateX(-50%); z-index: 2;\n  width: 44px; height: 14px; border-radius: 8px; background: #000; border: 1px solid #1c1d1f; }\n.lfd-phone__screen { height: 383px; overflow: hidden; border-radius: 36px; padding-top: 27px;\n  background: var(--lfd-cream); }\n.lfd-phone__hdr { background: var(--lfd-navy); padding: 14px 17px 17px; }\n.lfd-phone__hdr-t { font: 600 15px\/1.3 var(--lfd-serif-display); color: #fff; }\n.lfd-phone__list { padding: 14px; }\n.lfd-phone__row { display: flex; align-items: center; gap: 10px; background: #fff;\n  border-radius: 10px; padding: 10px 12px; margin-bottom: 10px; }\n.lfd-phone__av { width: 27px; height: 27px; border-radius: 50%; flex-shrink: 0;\n  background: var(--lfd-navy); color: #fff; display: flex; align-items: center;\n  justify-content: center; font: 600 12px var(--lfd-sans); }\n.lfd-phone__nm { flex: 1; font: 600 12px var(--lfd-sans); color: var(--lfd-navy); }\n.lfd-phone__ok { background: var(--lfd-forest-bg); color: var(--lfd-forest);\n  border-radius: 14px; padding: 2px 7px; font: 700 10px var(--lfd-sans); }\n.lfd-phone__cap { font: 400 14px\/1.5 var(--lfd-sans); color: var(--lfd-muted);\n  margin-top: 20px; text-align: center; }\n\n.lfd-noresults { padding: 28px 4px; font: 400 15px\/1.6 var(--lfd-sans); color: var(--lfd-muted); text-align: center; }\n\n\/* \"Still need help?\" \u2014 glass card on the same photo band as the hero *\/\n.lfd-support-band { position: relative; overflow: hidden; padding: 80px 0; background: var(--lfd-navy); }\n.lfd .lfd-support-band__img { position: absolute; inset: 0; width: 100%; height: 100%;\n  object-fit: cover; filter: blur(2px); }\n.lfd-support-band__scrim { position: absolute; inset: 0;\n  background: linear-gradient(180deg, rgba(20,32,58,.92) 0%, rgba(20,32,58,.80) 100%); }\n.lfd-support-band__glow { position: absolute; left: 50%; top: 50%; transform: translate(-50%,-50%);\n  width: 420px; height: 420px; pointer-events: none;\n  background: radial-gradient(circle, rgba(169,130,46,.30) 0%, rgba(169,130,46,0) 70%); }\n.lfd-support-wrap { position: relative; max-width: 800px; margin: 0 auto; padding: 0 40px; }\n.lfd-support { background: rgba(255,255,255,.12); border: 1px solid rgba(255,255,255,.35);\n  backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px);\n  border-radius: 12px; padding: 40px; text-align: center; box-shadow: 0 8px 32px rgba(20,32,58,.30); }\n.lfd-support__avs { display: flex; justify-content: center; margin-bottom: 12px; }\n.lfd-support__av { width: 40px; height: 40px; border-radius: 50%; background: var(--lfd-bronze);\n  color: #fff; display: flex; align-items: center; justify-content: center;\n  font: 600 15px var(--lfd-sans); border: 2px solid rgba(255,255,255,.5); }\n.lfd-support__av + .lfd-support__av { margin-left: -12px; }\n\/* 2026-09-14: the avatars are photos now. The circle keeps its 40px size, bronze fill (shown\n   only while the image loads) and 2px white ring; the photo fills it edge to edge. *\/\n.lfd-support__av { overflow: hidden; }\n.lfd .lfd-support__av-img { width: 100%; height: 100%; object-fit: cover; display: block; border-radius: 50%; }\n.lfd-support__eyebrow { font: 400 12px\/1.4 var(--lfd-sans); color: rgba(255,255,255,.75); margin-bottom: 16px; }\n.lfd-support__t { font: 600 22px\/1.3 var(--lfd-serif-display); color: #fff; }\n.lfd-support__d { font: 400 14px\/1.6 var(--lfd-sans); color: rgba(255,255,255,.75); margin-top: 8px; }\n.lfd-support__btns { display: flex; gap: 12px; justify-content: center; flex-wrap: wrap; margin-top: 20px; }\n\/* design: both CTAs are 12px 24px \/ 500 15px, giving the 44px height its Button hint asks for. *\/\n.lfd-support__btns .lfd-btn { padding: 12px 24px; font-size: 15px; }\n\n.lfd-btn--whatsapp { background: #25D366; color: #fff; display: inline-flex; align-items: center; gap: 8px; }\n.lfd-btn--whatsapp:hover { background: #1eb857; color: #fff; }\n\n\/* ==========================================================================\n   Responsive \u2014 the desktop and mobile .dc.html variants merged into one build\n   ========================================================================== *\/\n@media (max-width: 1024px) {\n  .lfd-grid--4 { grid-template-columns: repeat(2, 1fr); }\n  \/* Three tiles stay three-across on tablets (2+1 would orphan one); tighter padding. *\/\n  .lfd-tile { padding: 22px; }\n  .lfd-stats { gap: 40px; }\n}\n\n@media (max-width: 767px) {\n  .lfd { --lfd-pad: 18px; }\n\n  .lfd-pad-lg { padding-top: 56px; padding-bottom: 56px; }\n  .lfd-pad-md { padding-top: 44px; padding-bottom: 44px; }\n  .lfd-pad-sm { padding-top: 32px; padding-bottom: 32px; }\n\n  .lfd-h1 { font-size: 34px; }\n  .lfd-h2 { font-size: 24px; }\n  .lfd-h3 { font-size: 18px; }\n  .lfd-lede { font-size: 14px; }\n\n  .lfd-hero { min-height: 520px; }\n  .lfd-hero__scrim { background: linear-gradient(180deg, rgba(20,32,58,.55) 0%, rgba(20,32,58,.82) 100%); }\n  .lfd-hero--band { padding: 32px 0 64px; }\n  .lfd-hero--band .lfd-h1 { font-size: 30px; }\n  \/* mirrors `.lfd-hero` above; the 18px gutter mirrors `--lfd-pad` at this breakpoint. *\/\n  .e-con.lfd-hero-con { min-height: 520px; padding: 64px 0; }\n  .lfd-hero-con > .lfd-hero-search-w { padding: 0 18px; }\n\n  .lfd-btn { width: 100%; }\n  .lfd-btn--sm, .lfd-btn--ghost { width: auto; }\n\n  .lfd-grid--2, .lfd-grid--3, .lfd-grid--4 { grid-template-columns: 1fr; gap: 16px; }\n\n  .lfd-stats { gap: 28px; flex-direction: column; align-items: center; }\n  .lfd-hoods-band { border-top: 1px solid var(--lfd-border); padding: 24px 20px; }\n  .lfd-hoods__label { font-size: 11px; margin-bottom: 14px; }\n  .lfd-hoods { gap: 8px; }\n  .lfd-hoods__chip { font-size: 12px; padding: 7px 13px; }\n  .lfd-stat__l { max-width: 260px; }\n\n  .lfd-trust { flex-direction: column; gap: 20px; }\n\n  .lfd-hero__row { flex-direction: column; align-items: stretch; }\n  .lfd-dossier { width: 100%; }\n  .lfd-features { flex-direction: column; gap: 28px; }\n  .lfd-features__item { border-right: 0; padding: 0; }\n\n  .lfd-steps { gap: 24px; }\n  .lfd-step { gap: 16px; }\n  .lfd-steps__rail { left: 15px; }\n  .lfd-step__n { width: 32px; height: 32px; font-size: 14px; }\n\n  .lfd-ctas { flex-direction: column; gap: 16px; }\n  .lfd-cta { min-height: 220px; padding: 24px; }\n\n  .lfd-toggle-rail { --lfd-toggle-lift: 26px; }\n  .lfd-toggle { width: 100%; }\n  .lfd .lfd-toggle__btn { font-size: 13px; padding: 11px 0; }\n\n  .lfd-help-hero { padding: 56px 18px; }\n  .lfd-help-hero__h1 { font-size: 28px; }\n  .lfd-help-search input { height: 52px; padding-left: 46px; font-size: 14px; }\n  .lfd-help-search__icon { left: 15px; }\n  .lfd-tcards, .lfd-tiles { grid-template-columns: 1fr; gap: 16px; }\n  .lfd-hfaq__row { flex-direction: column; gap: 28px; }\n  .lfd-hfaq, .lfd-phone-col { flex: 1 1 auto; width: 100%; }\n  .lfd-phone-col { padding-top: 0; }\n  .lfd-support-band { padding: 56px 0; }\n  .lfd-support-wrap { padding: 0 18px; }\n  .lfd-support { padding: 28px 20px; }\n\n  \/* comparison table -> stacked cards on small screens *\/\n  .lfd-compare, .lfd-compare thead, .lfd-compare tbody,\n  .lfd-compare th, .lfd-compare td, .lfd-compare tr { display: block; }\n  .lfd-compare thead { display: none; }\n  .lfd-compare tr { border-bottom: 1px solid var(--lfd-border); padding: 12px 0; }\n  .lfd-compare tr:last-child { border-bottom: none; }\n  .lfd-compare td { padding: 4px 16px; display: flex; justify-content: space-between; gap: 16px; }\n  .lfd-compare td:first-child { font-weight: 600; padding-top: 12px; }\n  .lfd-compare td[data-label]::before {\n    content: attr(data-label); color: var(--lfd-muted); font-size: 12px;\n    text-transform: uppercase; letter-spacing: .06em; flex-shrink: 0;\n  }\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .lfd *, .lfd *::before, .lfd *::after { transition: none !important; animation: none !important; }\n}\n\n\/* ==========================================================================\n   CONTACT (Contact-Us.dc.html) \u2014 added 2026-09-04\n   Values measured off the rendered design source at a 1905px viewport, not read\n   off the inline style strings.\n   ========================================================================== *\/\n\n\/* hero: 400px photo band, copy vertically centred, 3-stop horizontal scrim.\n   The scrim is a PSEUDO-ELEMENT, not a background on .lfd-hero__scrim itself.\n   Elementor's lazy-load rule kills `background-image` on\n   `.e-con.e-parent:nth-of-type(n+2) , \u2026 *` under max-height:640px (n+3 <=1024px,\n   n+4 otherwise) with !important. This hero is the 2nd .e-con on the page and is\n   above the fold, so a gradient background there is stripped exactly while it is\n   on screen. `*` does not match pseudo-elements, so ::before survives. *\/\n.lfd-hero--contact,\n.lfd-hero--legal,\n.lfd-hero--privacy { min-height: 400px; }\n\/* This band is 1905x400 (4.8:1) against a 900x600 (1.5:1) photo, so `cover` shows only a\n   ~189px slice of the source (31% of it). Centred, that slice lands on the table rather\n   than the faces, which sit at rows ~100-250 of 600; 20% centres the slice on them.\n   Computed, not eyeballed: top = 175 - 189\/2 = 81, and 81 \/ (600 - 189) = 20%.\n   See the README on why the design's own hero photo could not be used. *\/\n.lfd .lfd-hero--contact .lfd-hero__img { object-position: center 20%; }\n.lfd-hero--contact .lfd-hero__scrim,\n.lfd-hero--legal .lfd-hero__scrim,\n.lfd-hero--privacy .lfd-hero__scrim { background: none; }\n.lfd-hero--contact .lfd-hero__scrim::before,\n.lfd-hero--legal .lfd-hero__scrim::before,\n.lfd-hero--privacy .lfd-hero__scrim::before {\n  content: ''; position: absolute; inset: 0;\n  background-image: linear-gradient(90deg,\n    rgba(20,32,58,.92) 0%, rgba(20,32,58,.62) 55%, rgba(20,32,58,.30) 100%);\n}\n.lfd-hero--contact .lfd-hero__inner,\n.lfd-hero--legal .lfd-hero__inner,\n.lfd-hero--privacy .lfd-hero__inner { padding-top: 80px; padding-bottom: 80px; }\n\/* This design's H1 is 700\/1.2 where the shared `.lfd-h1` is 600\/1.15, and its lede is\n   \/1.7 at .78 alpha over 620px where the shared one is \/1.6 at .68 over 560px. Both are\n   scoped to this hero rather than changed globally \u2014 the other four pages are live. *\/\n.lfd-hero--contact .lfd-h1,\n.lfd-hero--legal .lfd-h1,\n.lfd-hero--privacy .lfd-h1 { font: 700 42px\/1.2 var(--lfd-serif); }\n.lfd-hero--contact .lfd-lede,\n.lfd-hero--legal .lfd-lede,\n.lfd-hero--privacy .lfd-lede { font: 400 15px\/1.7 var(--lfd-sans);\n  max-width: 620px; color: rgba(255,255,255,.78); }\n\/* the only hero value that differs from \/contact\/ and \/legal-notice\/ *\/\n.lfd-hero--privacy .lfd-lede { max-width: 660px; }\n\n\/* ---------- channels strip (3 bordered cards) ---------- *\/\n.lfd-chans { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; }\n.lfd-chan { border: 1px solid var(--lfd-border); border-radius: 12px; padding: 28px 26px; }\n.lfd-chan__tag { font: 500 10px var(--lfd-sans); letter-spacing: .12em;\n  text-transform: uppercase; color: var(--lfd-bronze); }\n.lfd-chan__t { font: 600 18px var(--lfd-serif-display); color: var(--lfd-navy); margin-top: 10px; }\n.lfd-chan__b { font: 400 13px\/1.65 var(--lfd-sans); color: var(--lfd-muted); margin-top: 8px; }\n.lfd-chan__l { display: inline-flex; align-items: center; gap: 7px;\n  font: 500 14px var(--lfd-sans); color: var(--lfd-bronze); margin-top: 14px; }\n.lfd-chan__l:hover { color: var(--lfd-navy); }\n\n\/* ---------- form + info rail ----------\n   ONE Elementor container holds three sibling widgets: the head, the Elementor Pro\n   form, and the rail. They are placed with CSS GRID rather than flex because the\n   Elementor stack pins `max-width:100%` \/ `margin:0` onto widget wrappers at a\n   specificity even (0-3-0) loses to (see .lfd-hero-con above) \u2014 but it never sets\n   grid-column \/ grid-row, so placement on the wrapper survives.\n   1200\/40 are written literally: --lfd-maxw and --lfd-pad are declared on `.lfd`,\n   which sits INSIDE these widgets, not on the container. *\/\n.e-con.lfd-contact-con {\n  display: grid;\n  grid-template-columns: minmax(0, 1fr) 340px;\n  column-gap: 64px;\n  align-items: start;\n  \/* The white band is FULL-BLEED in the design while the content column is 1120 wide.\n     `max-width: 1200px; margin: 0 auto` gave the right column but painted the white only\n     under it, leaving the theme's #ECEDE8 page background showing down both edges. So the\n     container stays full width and the centred column is expressed as PADDING instead \u2014\n     the same trick `.lfd-hero-con` uses above. Content = W - 2*((W-1200)\/2 + 40) = 1120,\n     i.e. 716 + 64 gap + 340. `box-sizing` is restated because this container sits OUTSIDE\n     `.lfd`, so the `.lfd *` border-box reset does not reach it. *\/\n  box-sizing: border-box;\n  padding: 64px calc(max(0px, (100% - 1200px) \/ 2) + 40px) 104px;\n  background: #fff;\n}\n.lfd-contact-con > .lfd-contact-head { grid-column: 1; grid-row: 1; }\n.lfd-contact-con > .lfd-formw       { grid-column: 1; grid-row: 2; }\n.lfd-contact-con > .lfd-side        { grid-column: 2; grid-row: 1 \/ span 2; }\n\n.lfd-contact-head .lfd-contact__h2 { font: 600 28px var(--lfd-serif-display);\n  color: var(--lfd-navy); margin: 0 0 6px; }\n.lfd-contact-head .lfd-contact__lede { font: 400 14px\/1.7 var(--lfd-sans);\n  color: var(--lfd-muted); margin: 0 0 28px; }\n\n\/* info rail *\/\n.lfd-side__stack { display: flex; flex-direction: column; gap: 20px; }\n.lfd-side__navy { background: var(--lfd-navy); border-radius: 12px; padding: 28px 26px; }\n.lfd-side__brand { font: 600 18px var(--lfd-serif-display); color: #fff; }\n.lfd-side__dl { display: flex; flex-direction: column; gap: 14px; margin-top: 18px; }\n.lfd-side__k { font: 500 10px var(--lfd-sans); letter-spacing: .12em;\n  text-transform: uppercase; color: rgba(255,255,255,.40); }\n.lfd-side__v { font: 400 14px\/1.6 var(--lfd-sans); color: #fff; margin-top: 4px; }\n.lfd-side__v a { color: #fff; text-decoration: underline; }\n.lfd-side__card { border: 1px solid var(--lfd-border); border-radius: 12px; padding: 24px 26px; }\n.lfd-side__h { font: 600 16px var(--lfd-serif-display); color: var(--lfd-navy); }\n.lfd-side__p { font: 400 13px\/1.65 var(--lfd-sans); color: var(--lfd-muted); margin-top: 8px; }\n.lfd-side__p a { color: var(--lfd-bronze); }\n.lfd-side__links { display: flex; flex-direction: column; gap: 9px; margin-top: 14px; }\n.lfd-side__link { font: 400 13px var(--lfd-sans); color: var(--lfd-bronze); }\n.lfd-side__link:hover { color: var(--lfd-navy); }\n\n\/* ---------- Elementor Pro form skin ----------\n   The form is a real `form` widget (Elementor Pro), so its markup is Elementor's, not\n   ours. Everything below repaints that markup to the design.\n\n   EVERY rule here is prefixed `.lfd.lfd-formw` (0-2-0 on its own). The widget carries\n   both classes, and the doubled prefix is not cosmetic: Elementor Pro's own form CSS\n   sits at (0-2-0) and (0-2-1) \u2014 e.g. `.elementor-widget-form .elementor-field-group`\n   and `.elementor-widget-form .elementor-field-group > label` \u2014 so a single-class\n   prefix ties or loses. Measured on the rendered page, a (0-2-0) prefix left\n   Elementor's gutter system live underneath: the fields wrapper kept\n   `margin: 0 -5px -10px` and each group kept `padding: 0 5px; margin: 0 0 10px`, which\n   stacked on top of our `gap` and made the inputs 345px\/67px instead of 350px\/43px and\n   the label weight 400 instead of 500. Elementor's gutter is therefore zeroed\n   explicitly below rather than just overridden. *\/\n\/* Layout here is deliberately LEFT TO ELEMENTOR, and that is load-bearing:\n   - the field gutter belongs to the widget's own `column_gap` \/ `row_gap` settings (see\n     build.py). Elementor emits those into the per-post stylesheet at (0-4-0), which\n     outranks this prefix, so a `gap` here would ADD to its gutter, not replace it;\n   - the column widths belong to Elementor's `.elementor-col-50` \/ `-100`. Overriding\n     them with `calc(50% - 8px)` double-counted the gutter and gave 342px fields\n     instead of 350px;\n   - the group must keep Elementor's own `flex-direction: row` + `wrap`, which is what\n     `label_position: above` is built on. Forcing `column` here flipped the main axis, so\n     Elementor's `flex-basis: 100%` on the inputs started resolving against the HEIGHT\n     and made every <input> 66.8px tall instead of 43px (<select> was unaffected, which\n     is what gave the fault away).\n   All three were measured on the rendered page; none of them reproduce in the preview. *\/\n.lfd.lfd-formw .elementor-field-group > label,\n.lfd.lfd-formw .elementor-field-label {\n  font: 500 13px var(--lfd-sans); color: var(--lfd-navy);\n  margin: 0 0 8px; padding: 0; width: auto; }\n.lfd.lfd-formw .elementor-field-textual,\n.lfd.lfd-formw select.elementor-field {\n  width: 100%; height: auto; min-height: 0;\n  border: 1px solid var(--lfd-border); border-radius: 8px;\n  padding: 12px 14px; font: 400 14px\/normal var(--lfd-sans); color: var(--lfd-navy);\n  background-color: #fff; box-shadow: none;\n  transition: border-color 150ms ease-out; }\n.lfd.lfd-formw textarea.elementor-field-textual {\n  font: 400 14px\/1.6 var(--lfd-sans); resize: vertical; }\n.lfd.lfd-formw select.elementor-field { appearance: none; -webkit-appearance: none; }\n.lfd.lfd-formw .elementor-field-textual:focus,\n.lfd.lfd-formw select.elementor-field:focus {\n  outline: none; border-color: var(--lfd-bronze); box-shadow: none; }\n.lfd.lfd-formw .elementor-field-textual::placeholder { color: #9A9A8E; opacity: 1; }\n\n\/* role chooser: a real radio group painted as the design's three pills. The input is\n   visually hidden but still focusable, so the group stays keyboard- and SR-operable. *\/\n.lfd.lfd-formw .elementor-field-type-radio .elementor-field-subgroup {\n  display: flex; gap: 10px; width: 100%; margin: 0; padding: 0; }\n.lfd.lfd-formw .elementor-field-option { flex: 1; position: relative; margin: 0; padding: 0; }\n.lfd.lfd-formw .elementor-field-option input[type=\"radio\"] {\n  position: absolute; opacity: 0; width: 0; height: 0; margin: 0; }\n.lfd.lfd-formw .elementor-field-option input[type=\"radio\"] + label {\n  display: block; text-align: center; background: #fff;\n  border: 1px solid var(--lfd-border); color: var(--lfd-navy);\n  border-radius: 8px; padding: 12px 0; margin: 0;\n  font: 500 14px var(--lfd-sans); cursor: pointer;\n  transition: background-color 150ms ease-out, border-color 150ms ease-out; }\n.lfd.lfd-formw .elementor-field-option input[type=\"radio\"]:checked + label {\n  background: var(--lfd-navy); border-color: var(--lfd-navy); color: #fff; }\n.lfd.lfd-formw .elementor-field-option input[type=\"radio\"]:focus-visible + label {\n  outline: 2px solid var(--lfd-bronze); outline-offset: 2px; }\n\n\/* the privacy line, injected as an Elementor `html` field so it keeps the design's\n   position inside the form flow *\/\n.lfd.lfd-formw .lfd-form__note { font: 400 12px\/1.6 var(--lfd-sans); color: var(--lfd-muted); }\n.lfd.lfd-formw .lfd-form__note a { color: var(--lfd-bronze); text-decoration: underline; }\n\/* help line directly under a field: pulled up against it, against the widget's row gap *\/\n.lfd.lfd-formw .lfd-form__note--field { margin: -12px 0 0; }\n\n\/* photo upload (publish-property, 2026-09-15): Elementor's native file input, painted as a\n   dashed drop area matching the text inputs' border, radius and type *\/\n.lfd.lfd-formw .elementor-field-type-upload input[type=\"file\"] {\n  width: 100%; box-sizing: border-box; padding: 14px; margin: 0;\n  border: 1px dashed var(--lfd-border); border-radius: 8px; background-color: #FBFAF7;\n  font: 400 13px var(--lfd-sans); color: var(--lfd-muted); cursor: pointer;\n  transition: border-color 150ms ease-out; }\n.lfd.lfd-formw .elementor-field-type-upload input[type=\"file\"]:hover,\n.lfd.lfd-formw .elementor-field-type-upload input[type=\"file\"]:focus {\n  outline: none; border-color: var(--lfd-bronze); }\n.lfd.lfd-formw .elementor-field-type-upload input[type=\"file\"]::file-selector-button {\n  margin-right: 12px; padding: 8px 14px; border: 1px solid var(--lfd-navy); border-radius: 8px;\n  background-color: #fff; color: var(--lfd-navy); font: 500 13px var(--lfd-sans); cursor: pointer; }\n\n\/* submit. THREE separate rules paint this button and each needed beating; all three were\n   found on the rendered page, not in the preview:\n     .elementor-kit-7 button                               (0-1-1) \u2014 the theme kit, the\n       same fault that repainted the FAQ rows navy on the other four pages;\n     .elementor-button                                     (0-1-0) \u2014 Elementor core;\n     .elementor-widget-form .elementor-button[type=submit]  (0-3-0) \u2014 Elementor Pro's own\n       form styling, form-specific and NEW here: it beat a (0-2-0) prefix and repainted\n       the CTA #B8873A instead of the design's #A9822E. *\/\n.lfd.lfd-formw .elementor-button,\n.lfd.lfd-formw .elementor-button[type=\"submit\"] {\n  width: auto; flex: 0 0 auto; background-color: var(--lfd-bronze); color: #fff; border: none;\n  border-radius: 8px; padding: 14px 28px; font: 500 15px var(--lfd-sans);\n  cursor: pointer; }\n.lfd.lfd-formw .elementor-button:hover,\n.lfd.lfd-formw .elementor-button:focus,\n.lfd.lfd-formw .elementor-button[type=\"submit\"]:hover,\n.lfd.lfd-formw .elementor-button[type=\"submit\"]:focus {\n  background-color: #96721F; color: #fff; }\n\/* The submit group is a row flex container, so the button is left-aligned with\n   `justify-content` and sized to its text rather than stretched across the column. *\/\n.lfd.lfd-formw .elementor-field-type-submit { justify-content: flex-start; }\n.lfd.lfd-formw .elementor-message { font: 400 14px\/1.7 var(--lfd-sans); margin-top: 4px; }\n.lfd.lfd-formw .elementor-message.elementor-message-success { color: var(--lfd-forest); }\n.lfd.lfd-formw .elementor-message.elementor-message-danger  { color: var(--lfd-danger); }\n\n@media (max-width: 1024px) {\n  .lfd-chans { grid-template-columns: 1fr 1fr; }\n  .e-con.lfd-contact-con { grid-template-columns: minmax(0,1fr) 300px; column-gap: 40px; }\n}\n@media (max-width: 900px) {\n  .e-con.lfd-contact-con {\n    grid-template-columns: minmax(0,1fr);\n    padding: 56px 20px 72px;\n    row-gap: 32px;\n  }\n  .lfd-contact-con > .lfd-contact-head { grid-column: 1; grid-row: 1; }\n  .lfd-contact-con > .lfd-formw       { grid-column: 1; grid-row: 2; }\n  .lfd-contact-con > .lfd-side        { grid-column: 1; grid-row: 3; }\n}\n@media (max-width: 767px) {\n  .lfd-chans { grid-template-columns: 1fr; }\n  .lfd-hero--contact, .lfd-hero--legal, .lfd-hero--privacy { min-height: 320px; }\n  .lfd-hero--contact .lfd-h1, .lfd-hero--legal .lfd-h1,\n  .lfd-hero--privacy .lfd-h1 { font-size: 32px; }\n  .lfd-hero--contact .lfd-hero__inner, .lfd-hero--legal .lfd-hero__inner,\n  .lfd-hero--privacy .lfd-hero__inner { padding-top: 56px; padding-bottom: 56px; }\n  .lfd.lfd-formw .elementor-field-group.elementor-col-50 { width: 100%; }\n  .lfd.lfd-formw .elementor-field-type-radio .elementor-field-subgroup { flex-wrap: wrap; }\n}\n\n\/* channels band: the design puts 56px above the cards and NOTHING below \u2014 the 64px top\n   padding of .lfd-contact-con supplies the gap down to \"Send us a message\". *\/\n.lfd-chans-band { padding: 56px 0 0; }\n\n\/* ==========================================================================\n   ABOUT US (About-Us.dc.html) \u2014 added 2026-09-04\n   Values measured off the rendered design source at a 1920px viewport.\n   ========================================================================== *\/\n\n\/* hero: 600px photo band. Same 3-stop 90deg scrim as \/contact\/, and for the same\n   reason it is a PSEUDO-ELEMENT \u2014 Elementor's lazy-load rule nulls `background-image`\n   on early containers with !important, and its `*` does not match pseudo-elements. *\/\n.lfd-hero--about { min-height: 600px; }\n.lfd-hero--about .lfd-hero__scrim { background: none; }\n.lfd-hero--about .lfd-hero__scrim::before {\n  content: ''; position: absolute; inset: 0;\n  background-image: linear-gradient(90deg,\n    rgba(20,32,58,.92) 0%, rgba(20,32,58,.62) 55%, rgba(20,32,58,.30) 100%);\n}\n.lfd-hero--about .lfd-hero__inner { padding-top: 96px; padding-bottom: 96px; }\n.lfd-hero--about .lfd-hero__copy { max-width: 620px; }\n.lfd-hero--about .lfd-eyebrow { margin-bottom: 14px; }\n.lfd-hero--about .lfd-h1 { font: 700 46px\/1.15 var(--lfd-serif); }\n.lfd-hero--about .lfd-lede { font: 400 16px\/1.7 var(--lfd-sans);\n  color: rgba(255,255,255,.78); max-width: 540px; margin-top: 20px; }\n.lfd-hero__btns { display: flex; gap: 12px; margin-top: 28px; flex-wrap: wrap; }\n\n\/* Outline button. NOT `.lfd-btn--ghost`: that one is the small 13px\/10-18 pill the other\n   pages use inside CTA cards. This design's secondary is full-size (15px, 14\/26) with a\n   translucent border. *\/\n.lfd-btn--outline { background: transparent; color: #fff;\n  border: 1px solid rgba(255,255,255,.40); }\n.lfd-btn--outline:hover { background: rgba(255,255,255,.12); color: #fff; }\n.lfd-btn--hero { padding: 14px 26px; }\n\n\/* ---------- stats strip ----------\n   Reuses `.lfd-stats` \/ `.lfd-stat`, which the other pages set at gap 64 \/ 36px \/ 190px.\n   This design is 80 \/ 40px \/ 170px, so the deltas are scoped rather than changed globally. *\/\n.lfd-stats-band { border-bottom: 1px solid var(--lfd-border); padding: 64px 0; }\n.lfd-stats--about { gap: 80px; }\n.lfd-stats--about .lfd-stat__n { font-size: 40px; }\n.lfd-stats--about .lfd-stat__l { max-width: 170px; margin-top: 6px; }\n\n\/* ---------- why we exist: square photo beside the copy ---------- *\/\n.lfd-why { display: grid; grid-template-columns: 1fr 50%; gap: 64px; align-items: center; }\n.lfd-why__media { border-radius: 12px; overflow: hidden; aspect-ratio: 1 \/ 1; }\n\/* same `.elementor img { height: auto }` trap as .lfd-hero__img \u2014 keep `.lfd`-prefixed. *\/\n.lfd .lfd-why__img { width: 100%; height: 100%; object-fit: cover; }\n.lfd-why__h2 { font: 600 34px\/1.25 var(--lfd-serif-display); color: var(--lfd-navy); margin: 8px 0 0; }\n.lfd-why__p { font: 400 15px\/1.7 var(--lfd-sans); color: var(--lfd-muted); margin-top: 14px; }\n.lfd-why__p--first { margin-top: 16px; }\n.lfd-why__p--lead  { color: var(--lfd-navy); }\n\n\/* ---------- principles: three numbered cards ---------- *\/\n.lfd-prins { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; margin-top: 44px; }\n.lfd-prin { background: #fff; border: 1px solid var(--lfd-border);\n  border-radius: 12px; padding: 32px 28px; }\n.lfd-prin__num { width: 44px; height: 44px; border-radius: 50%; background: var(--lfd-cream);\n  display: flex; align-items: center; justify-content: center; margin-bottom: 18px;\n  font: 700 15px var(--lfd-serif); color: var(--lfd-bronze); }\n.lfd-prin__t { font: 600 19px var(--lfd-serif-display); color: var(--lfd-navy); }\n.lfd-prin__b { font: 400 14px\/1.7 var(--lfd-sans); color: var(--lfd-muted); margin-top: 10px; }\n\n\/* ---------- who we build for: paired cream \/ navy cards ---------- *\/\n.lfd-auds { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; }\n.lfd-aud { border-radius: 12px; padding: 40px 36px; }\n.lfd-aud--tenant   { background: var(--lfd-cream); }\n.lfd-aud--landlord { background: var(--lfd-navy); }\n.lfd-aud__t { font: 600 22px var(--lfd-serif-display); color: var(--lfd-navy); }\n.lfd-aud--landlord .lfd-aud__t { color: #fff; }\n.lfd-aud__p { font: 400 14px\/1.7 var(--lfd-sans); color: var(--lfd-muted); margin: 12px 0 20px; }\n.lfd-aud--landlord .lfd-aud__p { color: rgba(255,255,255,.65); }\n.lfd-aud__list { display: flex; flex-direction: column; gap: 10px; }\n.lfd-aud__item { display: flex; gap: 10px; align-items: flex-start; }\n.lfd-aud__item svg { margin-top: 2px; flex-shrink: 0; }\n.lfd-aud__item span { font: 400 14px var(--lfd-sans); color: var(--lfd-navy); }\n.lfd-aud--landlord .lfd-aud__item span { color: #fff; }\n.lfd-aud__link { display: inline-block; margin-top: 22px;\n  font: 500 13px var(--lfd-sans); color: var(--lfd-bronze); }\n.lfd-aud__link:hover { color: var(--lfd-navy); }\n.lfd-aud--landlord .lfd-aud__link:hover { color: #fff; }\n\n\/* ---------- service fees: two white bordered cards on cream ----------\n   Added 2026-09-10 with the About re-sync. Deliberately NOT `.lfd-aud`: those cards are\n   the cream\/navy pair at 40px 36px with 10px list gaps and a trailing link, whereas these\n   are a matched white pair at 36px 32px, 12px gaps, no link, and a centred header block\n   above them. The tick sizes differ too (3px top offset here, 2px there). *\/\n.lfd-fees__head { text-align: center; max-width: 720px; margin: 0 auto; }\n.lfd-fees__h2 { font: 600 34px\/1.25 var(--lfd-serif-display); color: var(--lfd-navy); margin: 8px 0 0; }\n.lfd-fees__lede { font: 400 15px\/1.7 var(--lfd-sans); color: var(--lfd-muted); margin-top: 14px; }\n.lfd-fees { display: grid; grid-template-columns: 1fr 1fr; gap: 24px;\n  margin-top: 44px; align-items: stretch; }\n.lfd-fee { background: #fff; border: 1px solid var(--lfd-border);\n  border-radius: 12px; padding: 36px 32px; }\n.lfd-fee__t { font: 600 22px var(--lfd-serif-display); color: var(--lfd-navy); }\n.lfd-fee__p { font: 400 13px\/1.6 var(--lfd-sans); color: var(--lfd-muted); margin: 8px 0 20px; }\n.lfd-fee__list { display: flex; flex-direction: column; gap: 12px; }\n.lfd-fee__item { display: flex; gap: 10px; align-items: flex-start; }\n.lfd-fee__item svg { margin-top: 3px; flex-shrink: 0; }\n.lfd-fee__item span { font: 400 14px\/1.6 var(--lfd-sans); color: var(--lfd-navy); }\n\n\/* ---------- Luxembourg-only band ----------\n   Reuses `.lfd-hoods` (the for-landlords chip row). Its chips are cream on a white band;\n   here the band is cream, so the chips invert to white with a border. *\/\n.lfd-local { text-align: center; }\n.lfd-local__h2 { font: 600 32px var(--lfd-serif-display); color: var(--lfd-navy); margin: 8px 0 0; }\n.lfd-local__p { font: 400 15px\/1.7 var(--lfd-sans); color: var(--lfd-muted);\n  max-width: 560px; margin: 14px auto 0; }\n.lfd-hoods--about { margin-top: 28px; }\n.lfd-hoods--about .lfd-hoods__chip { background: #fff; border: 1px solid var(--lfd-border); }\n\n\/* ---------- closing CTA band ---------- *\/\n.lfd-endcta { text-align: center; }\n.lfd-endcta__h2 { font: 600 34px var(--lfd-serif-display); color: #fff; margin: 0; }\n.lfd-endcta__p { font: 400 14px var(--lfd-sans); color: rgba(255,255,255,.65); margin-top: 10px; }\n.lfd-endcta__btns { display: flex; gap: 12px; justify-content: center;\n  margin-top: 26px; flex-wrap: wrap; }\n.lfd-endcta .lfd-btn--outline { border-color: rgba(255,255,255,.35); }\n\n@media (max-width: 1024px) {\n  .lfd-prins { grid-template-columns: 1fr; }\n  .lfd-why { grid-template-columns: 1fr; gap: 40px; }\n  .lfd-stats--about { gap: 48px; }\n}\n@media (max-width: 767px) {\n  .lfd-hero--about { min-height: 480px; }\n  .lfd-hero--about .lfd-h1 { font-size: 34px; }\n  .lfd-hero--about .lfd-hero__inner { padding-top: 64px; padding-bottom: 64px; }\n  .lfd-auds { grid-template-columns: 1fr; }\n  .lfd-aud { padding: 32px 24px; }\n  .lfd-fees { grid-template-columns: 1fr; }\n  .lfd-fee { padding: 28px 24px; }\n  .lfd-fees__h2 { font-size: 27px; }\n  .lfd-why__h2 { font-size: 27px; }\n  .lfd-local__h2, .lfd-endcta__h2 { font-size: 26px; }\n  .lfd-stats--about { gap: 32px; }\n  .lfd-stats--about .lfd-stat__n { font-size: 32px; }\n}\n\n\/* ==========================================================================\n   LEGAL NOTICE (Legal-Notice.dc.html) \u2014 added 2026-09-04\n   Values measured off the rendered design source at a 1920px viewport.\n   The hero itself reuses `.lfd-hero--contact`'s rules (identical spec, grouped\n   selectors above); only the extra \"Last updated\" line is new.\n   ========================================================================== *\/\n.lfd-hero__updated { font: 400 13px var(--lfd-sans);\n  color: rgba(255,255,255,.55); margin-top: 20px; }\n\n\/* ---------- document layout: sticky contents rail beside the body ----------\n   Grid rather than flex so the rail keeps its 220px track and the body its own\n   column; the design caps the body at 720 and leaves the remaining ~108px of the\n   1120 content width as slack on the right, which `minmax(0, 720px)` reproduces. *\/\n.lfd-doc { display: grid; grid-template-columns: 220px minmax(0, 720px);\n  column-gap: 72px; align-items: start;\n  \/* The design sticks the rail at top:32px, which assumes no fixed header. The live\n     theme HAS one \u2014 a `position: fixed` container measured at 76px on the rendered page\n     \u2014 so 32px parks the rail underneath it. Offset = header + 20px of breathing room,\n     and +32 again when WordPress adds its admin bar (which is exactly the state the\n     client reviews this draft in). Both the sticky offset and the anchor\n     scroll-margin read the same variable so they cannot drift apart. *\/\n  --lfd-doc-offset: 96px; }\n.admin-bar .lfd-doc { --lfd-doc-offset: 128px; }\n\/* `.lfd-band` uses `overflow-x: clip`, which per spec does NOT create a scroll\n   container, so `position: sticky` still resolves against the viewport here.\n   Verified functionally on the rendered page, not just by reading the property:\n   at scrollY 2000 the rail measured exactly at its offset. *\/\n.lfd-doc__toc { position: sticky; top: var(--lfd-doc-offset); }\n.lfd-doc__toc-label { font: 500 10px var(--lfd-sans); letter-spacing: .12em;\n  text-transform: uppercase; color: var(--lfd-muted); margin-bottom: 14px; }\n.lfd-doc__toc-links { display: flex; flex-direction: column; gap: 10px; }\n.lfd-doc__toc-link { font: 400 13px\/1.4 var(--lfd-sans); color: var(--lfd-muted); }\n.lfd-doc__toc-link:hover { color: var(--lfd-bronze); }\n\n.lfd-doc__sec { margin-bottom: 44px; }\n.lfd-doc__sec:last-child { margin-bottom: 0; }\n\/* Same reason: an anchored heading would otherwise land under the fixed header.\n   Build affordance \u2014 adds no text, so the verbatim diff is unaffected. *\/\n.lfd-doc__sec[id] { scroll-margin-top: var(--lfd-doc-offset); }\n.lfd-doc__h2 { font: 600 24px var(--lfd-serif-display); color: var(--lfd-navy); margin: 0 0 14px; }\n.lfd-doc__p { font: 400 15px\/1.75 var(--lfd-sans); color: var(--lfd-muted); margin: 0; }\n.lfd-doc__p + .lfd-doc__p { margin-top: 14px; }\n.lfd-doc__p--intro { margin-bottom: 18px; }\n.lfd-doc__p a { color: var(--lfd-bronze); text-decoration: underline; }\n\n\/* ---------- publisher details table ---------- *\/\n.lfd-deftable { border: 1px solid var(--lfd-border); border-radius: 12px; overflow: hidden; }\n.lfd-deftable__row { display: flex; gap: 16px; padding: 14px 20px;\n  border-bottom: 1px solid var(--lfd-border); }\n.lfd-deftable__row:nth-child(odd)  { background: #fff; }\n.lfd-deftable__row:nth-child(even) { background: #FAFAF8; }\n.lfd-deftable__k { flex: 0 0 190px; font: 500 13px var(--lfd-sans); color: var(--lfd-navy); }\n.lfd-deftable__v { flex: 1; font: 400 13px\/1.6 var(--lfd-sans); color: var(--lfd-muted); }\n\n\/* ---------- bullet list with bronze dots ---------- *\/\n.lfd-bullets { display: flex; flex-direction: column; gap: 12px; }\n.lfd-bullets__item { display: flex; gap: 12px; align-items: flex-start; }\n.lfd-bullets__dot { width: 6px; height: 6px; border-radius: 50%;\n  background: var(--lfd-bronze); margin-top: 9px; flex-shrink: 0; }\n.lfd-bullets__t { font: 400 15px\/1.75 var(--lfd-sans); color: var(--lfd-muted); }\n\n\/* ---------- closing note card ---------- *\/\n.lfd-notecard { background: var(--lfd-cream); border-radius: 12px; padding: 28px 32px;\n  display: flex; justify-content: space-between; align-items: center;\n  gap: 24px; flex-wrap: wrap; }\n.lfd-notecard__t { font: 600 18px var(--lfd-serif-display); color: var(--lfd-navy); }\n.lfd-notecard__s { font: 400 14px var(--lfd-sans); color: var(--lfd-muted); margin-top: 6px; }\n\/* The design draws this as a <button>; it is emitted as an <a> so the theme's\n   `.elementor-kit-7 button` rule can never reach it \u2014 the standing lesson. *\/\n.lfd-btn--md { padding: 13px 24px; font-size: 14px; }\n\n@media (max-width: 1024px) {\n  .lfd-doc { grid-template-columns: minmax(0, 1fr); row-gap: 40px; }\n  .lfd-doc__toc { position: static; top: auto; }\n}\n@media (max-width: 767px) {\n  .lfd-doc__h2 { font-size: 21px; }\n  .lfd-deftable__row { flex-direction: column; gap: 4px; }\n  .lfd-deftable__k { flex: 0 0 auto; }\n  .lfd-notecard { padding: 24px 22px; }\n}\n\n\/* ==========================================================================\n   PRIVACY POLICY (Privacy-Policy.dc.html) \u2014 added 2026-09-04\n   Measured off the rendered design source at 1920px. The whole document shell \u2014\n   `.lfd-doc`, the sticky rail, `.lfd-doc__sec\/h2\/p`, `.lfd-deftable`,\n   `.lfd-bullets`, `.lfd-notecard` \u2014 is reused from \/legal-notice\/ unchanged;\n   only the components below are new to this page.\n   ========================================================================== *\/\n\n\/* The design varies the heading gap per section: 14px default, 8px where a lead\n   paragraph follows immediately, 20px above a table. *\/\n.lfd-doc__h2--tight { margin-bottom: 8px; }\n.lfd-doc__h2--loose { margin-bottom: 20px; }\n\/* a closing paragraph the design sets in navy rather than muted *\/\n.lfd-doc__p--strong { color: var(--lfd-navy); margin-top: 14px; }\n\n\/* ---------- \"In short\" summary card ---------- *\/\n.lfd-inshort { background: var(--lfd-cream); border-radius: 12px;\n  padding: 28px 32px; margin-bottom: 44px; }\n.lfd-inshort__t { font: 600 17px var(--lfd-serif-display); color: var(--lfd-navy); margin-bottom: 14px; }\n.lfd-inshort__list { display: flex; flex-direction: column; gap: 10px; }\n.lfd-inshort__item { display: flex; gap: 10px; align-items: flex-start; }\n.lfd-inshort__item svg { margin-top: 3px; flex-shrink: 0; }\n.lfd-inshort__item span { font: 400 14px\/1.7 var(--lfd-sans); color: var(--lfd-navy); }\n\n\/* ---------- bronze-bordered callout (privacy \u00a74, \"Your consent to share\") ----------\n   Added 2026-09-09 with the design revision that introduced that section. It is the\n   only bronze-bordered box on the site; `.lfd-inshort` above is the same cream fill\n   with no border. Fill is a background-COLOR, not a gradient, so Elementor's\n   lazy-load `background-image: none !important` rule cannot strip it (see README). *\/\n.lfd-callout { border: 1px solid var(--lfd-bronze); border-radius: 12px;\n  padding: 24px 28px; background: var(--lfd-cream); }\n\/* Two differences from the page-level `.lfd-eyebrow`, both the design's: .12em rather\n   than .14em, and NO line-height override. `.lfd-eyebrow` pins `\/1`; this one is left at\n   `normal` (14.5px at 11px Inter), which is worth 3px of box height \u2014 measured against\n   the rendered design source, where the box is 232px and `\/1` gave 229px. *\/\n.lfd-callout__tag { font: 500 11px var(--lfd-sans); letter-spacing: .12em;\n  text-transform: uppercase; color: var(--lfd-bronze); margin-bottom: 10px; }\n.lfd-callout__p { font: 400 15px\/1.75 var(--lfd-sans); color: var(--lfd-navy); margin: 0; }\n\/* `.lfd :where(a)` resets links to `color: inherit`, so the mailto inside the callout\n   needs the same explicit rule `.lfd-doc__p a` gives every other link on this page. *\/\n.lfd-callout__p a { color: var(--lfd-bronze); text-decoration: underline; }\n\n\/* ---------- data table: three columns under a navy header row ----------\n   Extends `.lfd-deftable` (border, radius 12, overflow hidden, zebra rows). *\/\n.lfd-deftable__head { display: flex; gap: 16px; padding: 12px 20px;\n  background: var(--lfd-navy); }\n.lfd-deftable__head .lfd-deftable__c1,\n.lfd-deftable__head .lfd-deftable__c2,\n.lfd-deftable__head .lfd-deftable__c3 { font: 500 12px var(--lfd-sans); color: #fff; }\n\/* The zebra on `.lfd-deftable` keys off :nth-child, and the header row occupies\n   child 1 here, so the striping is restated to start from the first DATA row. *\/\n.lfd-deftable--3col .lfd-deftable__row:nth-child(even) { background: #fff; }\n.lfd-deftable--3col .lfd-deftable__row:nth-child(odd)  { background: #FAFAF8; }\n.lfd-deftable__c1 { flex: 0 0 170px; font: 500 13px\/1.5 var(--lfd-sans); color: var(--lfd-navy); }\n.lfd-deftable__c2 { flex: 1; font: 400 13px\/1.6 var(--lfd-sans); color: var(--lfd-muted); }\n.lfd-deftable__c3 { flex: 0 0 140px; font: 400 13px\/1.6 var(--lfd-sans); color: var(--lfd-muted); }\n\n\/* ---------- retention table: label grows, period is a fixed 240 column ---------- *\/\n.lfd-deftable--retention .lfd-deftable__k { flex: 1; }\n.lfd-deftable--retention .lfd-deftable__v { flex: 0 0 240px; }\n\n\/* ---------- rights: 2 x 3 bordered cards ---------- *\/\n.lfd-rights { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }\n.lfd-right { border: 1px solid var(--lfd-border); border-radius: 12px; padding: 18px 20px; }\n.lfd-right__t { font: 600 14px var(--lfd-sans); color: var(--lfd-navy); }\n.lfd-right__d { font: 400 13px\/1.6 var(--lfd-sans); color: var(--lfd-muted); margin-top: 6px; }\n\n@media (max-width: 767px) {\n  .lfd-rights { grid-template-columns: 1fr; }\n  .lfd-inshort { padding: 22px 20px; }\n  .lfd-callout { padding: 22px 20px; }\n  \/* the 3-column table cannot hold three columns on a phone *\/\n  .lfd-deftable--3col .lfd-deftable__head { display: none; }\n  .lfd-deftable--3col .lfd-deftable__row { flex-direction: column; gap: 4px; }\n  .lfd-deftable--3col .lfd-deftable__c1,\n  .lfd-deftable--3col .lfd-deftable__c3 { flex: 0 0 auto; }\n  \/* the legal-basis cell loses its header on mobile, so label it inline *\/\n  .lfd-deftable--3col .lfd-deftable__c3::before { content: 'Legal basis: '; color: var(--lfd-navy); }\n  .lfd-deftable--retention .lfd-deftable__v { flex: 0 0 auto; }\n}\n\n\/* ==========================================================================\n   PUBLISH YOUR PROPERTY (Publish-Your-Property.dc.html) \u2014 added 2026-09-10\n   Values measured off the RENDERED design source at a 1905px viewport (the live band\n   width), not read off its inline style strings.\n   The form + rail reuse \/contact\/'s grid and card classes wholesale; only what this\n   design does differently is declared here.\n   ========================================================================== *\/\n\n\/* hero: photo band, min 440px, copy vertically centred. Same 3-stop 90deg scrim as\n   \/contact\/ and \/about\/, and a PSEUDO-ELEMENT for the same documented reason \u2014\n   Elementor's lazy-load rule nulls `background-image` with !important on\n   `.e-con.e-parent:nth-of-type(n+2), \u2026 *`, and `*` does not match pseudo-elements.\n   No `object-position` override: the substitute photo is an interior, so the centre\n   crop is the right one (this is the same photo, and the same crop, as \/landlords\/). *\/\n.lfd-hero--publish { min-height: 440px; }\n.lfd-hero--publish .lfd-hero__scrim { background: none; }\n.lfd-hero--publish .lfd-hero__scrim::before {\n  content: ''; position: absolute; inset: 0;\n  background-image: linear-gradient(90deg,\n    rgba(20,32,58,.92) 0%, rgba(20,32,58,.62) 55%, rgba(20,32,58,.30) 100%);\n}\n.lfd-hero--publish .lfd-hero__inner { padding-top: 88px; padding-bottom: 88px; }\n\/* 44px\/1.15 where the shared `.lfd-h1` is 42px\/1.15 and \/contact\/'s is 42px\/1.2. *\/\n.lfd-hero--publish .lfd-h1 { font: 700 44px\/1.15 var(--lfd-serif); max-width: 760px; }\n.lfd-hero--publish .lfd-lede { font: 400 15px\/1.7 var(--lfd-sans);\n  color: rgba(255,255,255,.78); max-width: 600px; margin-top: 16px; }\n\/* The \"high demand, manual review\" paragraph. It sits BELOW the lede and ABOVE the form\n   by design \u2014 the framing has to be read before the form is filled in. Full white, not\n   the lede's .78, and set off by a bronze rule rather than a card. *\/\n\/* `content-box` is deliberate and measured: the design's 620px cap is on the TEXT, with\n   the 16px indent and the 2px rule outside it. Under the shared `.lfd *` border-box reset\n   the same declaration gives a 602px text column \u2014 18px narrower than the design. *\/\n.lfd-hero__note { font: 400 15px\/1.7 var(--lfd-sans); color: #fff;\n  box-sizing: content-box; max-width: 620px;\n  margin-top: 18px; border-left: 2px solid var(--lfd-bronze); padding-left: 16px; }\n\n\/* ---------- value strip: 3 centred cells, divided by 1px rules ----------\n   The column here is 1100px, NOT the 1200px the rest of the page uses. *\/\n.lfd-vstrip-band { padding: 40px 0; border-bottom: 1px solid var(--lfd-border); }\n.lfd-vstrip { max-width: 1100px; margin: 0 auto; padding: 0 var(--lfd-pad);\n  display: flex; gap: 40px; }\n.lfd-vstrip__item { flex: 1; display: flex; flex-direction: column; align-items: center;\n  text-align: center; padding: 0 20px; border-right: 1px solid var(--lfd-border); }\n.lfd-vstrip__item:last-child { border-right: 0; }\n.lfd-vstrip__item svg { margin-bottom: 14px; }\n.lfd-vstrip__t { font: 500 14px\/1.5 var(--lfd-sans); color: var(--lfd-navy);\n  max-width: 230px; }\n\n\/* ---------- form + rail ----------\n   The grid, the two column widths and every card style are \/contact\/'s\n   (`.lfd-contact-con`, `.lfd-side__*`), reused as-is. This design differs in exactly\n   one container value \u2014 72px of top padding where \/contact\/ has 64 \u2014 so that is all\n   `.lfd-pub-con` carries. NB it is (0-3-0), so it also has to be restated inside the\n   breakpoint below, where `.e-con.lfd-contact-con` (0-2-0) would otherwise lose to it. *\/\n.e-con.lfd-contact-con.lfd-pub-con { padding-top: 72px; }\n\/* This design's submit button is 14px\/32px where \/contact\/'s is 14px\/28px, so the shared\n   form skin's (0-4-0) rule is out-specified here rather than changed \u2014 \/contact\/ is live. *\/\n.lfd-pub-con .lfd.lfd-formw .elementor-button[type=\"submit\"] { padding: 14px 32px; }\n\n\/* navy rail card: this one opens with a bronze eyebrow above its title, where\n   \/contact\/'s opens with the title alone. Both rules are scoped so \/contact\/ is\n   untouched \u2014 `.lfd-side__brand` keeps its zero margin there. *\/\n.lfd-side__tag { font: 500 10px var(--lfd-sans); letter-spacing: .12em;\n  text-transform: uppercase; color: var(--lfd-bronze); }\n.lfd-side__tag + .lfd-side__brand { margin-top: 10px; }\n\n.lfd-bens { display: flex; flex-direction: column; gap: 13px; margin-top: 18px; }\n.lfd-ben { display: flex; gap: 10px; align-items: flex-start; }\n.lfd-ben svg { margin-top: 3px; flex-shrink: 0; }\n.lfd-ben__t { font: 400 14px\/1.6 var(--lfd-sans); color: #fff; }\n\n\/* neighbourhood pills. Deliberately NOT `.lfd-hoods__chip` (for-tenants' trust strip):\n   that one is 13px on a cream band, this one is 12px on white with a cream fill. *\/\n.lfd-hoodpills { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 14px; }\n.lfd-hoodpill { background: var(--lfd-cream); color: var(--lfd-navy);\n  font: 500 12px var(--lfd-sans); border-radius: 20px; padding: 7px 14px; }\n\n\/* ---------- responsive ----------\n   There is NO `Publish-Your-Property-Mobile.dc.html` in the DesignSync project, where\n   every other page has a mobile variant. These rules are therefore derived from\n   \/contact\/'s \u2014 the layout this page is a near-copy of \u2014 and from the shared hero\n   rules, not from a design source. See the README. *\/\n@media (max-width: 900px) {\n  \/* restated at the same (0-3-0) as the desktop rule above, which would otherwise beat\n     `.e-con.lfd-contact-con`'s single-column padding regardless of source order. *\/\n  .e-con.lfd-contact-con.lfd-pub-con { padding-top: 56px; }\n}\n@media (max-width: 767px) {\n  .lfd-hero--publish { min-height: 360px; }\n  .lfd-hero--publish .lfd-h1 { font-size: 32px; }\n  .lfd-hero--publish .lfd-hero__inner { padding-top: 56px; padding-bottom: 56px; }\n  \/* the shared mobile rule flips `.lfd-hero__scrim` to a vertical gradient for exactly\n     this reason \u2014 the copy goes full-width \u2014 but it targets the element, which this\n     hero paints `none`. Applying the same intent to the pseudo-element instead. *\/\n  .lfd-hero--publish .lfd-hero__scrim::before {\n    background-image: linear-gradient(180deg,\n      rgba(20,32,58,.55) 0%, rgba(20,32,58,.82) 100%);\n  }\n  .lfd-hero--publish .lfd-lede, .lfd-hero--publish .lfd-hero__note { font-size: 14px; }\n  .lfd-vstrip { flex-direction: column; gap: 24px; }\n  .lfd-vstrip__item { border-right: 0; padding: 0; }\n}\n\n\/* ===========================================================================\n   HELP ARTICLE  (\/help\/how-renting-directly-works\/)  \u2014 added 2026-09-11\n   First article template. Geometry measured off the rendered design source at\n   a 1920px viewport, not read off its inline style strings:\n     H1 700 40px\/48px Fraunces navy \u00b7 h2 600 28px Playfair \u00b7 body column 720\n     TOC 260 \u00b7 column gap 64 \u00b7 FAQ card 720x122, #fff, 1px #E8E4DC, radius 12\n   The FAQ deliberately reuses the shared `.lfd-faq` skin rather than a new\n   one: that skin is ALREADY the light variant this page's design asks for\n   (white card, navy question), so the site-wide fix applies here for free.\n   =========================================================================== *\/\n.lfd-art-head { background: var(--lfd-cream); border-bottom: 1px solid var(--lfd-border); padding: 32px 0 56px; }\n.lfd-crumb { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; font: 400 12px var(--lfd-sans); color: var(--lfd-muted); }\n.lfd .lfd-crumb a { color: var(--lfd-muted); text-decoration: none; }\n.lfd .lfd-crumb a:hover { color: var(--lfd-navy); }\n.lfd-crumb__sep { color: #C9C3B6; }\n.lfd-crumb__cur { color: var(--lfd-navy); }\n\n.lfd-art-head__row { display: flex; gap: 48px; align-items: center; margin-top: 24px; }\n.lfd-art-head__main { flex: 1; min-width: 0; max-width: 720px; }\n.lfd-art__badge { display: inline-block; background: #fff; border: 1px solid var(--lfd-border); color: var(--lfd-bronze);\n  font: 500 11px var(--lfd-sans); letter-spacing: 0.12em; text-transform: uppercase; border-radius: 20px; padding: 7px 14px; }\n.lfd-art__h1 { font: 700 40px\/1.2 var(--lfd-serif); color: var(--lfd-navy); margin: 18px 0 0; text-wrap: pretty; }\n.lfd-art__meta { display: flex; flex-wrap: wrap; align-items: center; gap: 14px; margin-top: 18px; font: 400 13px var(--lfd-sans); color: var(--lfd-muted); }\n.lfd-art__meta span { display: flex; align-items: center; gap: 7px; }\n.lfd-art__meta .lfd-art__dot { color: #C9C3B6; }\n.lfd-art-head__media { flex: 0 0 380px; height: 260px; border-radius: 12px; overflow: hidden; position: relative; }\n.lfd-art-head__media img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }\n\n.lfd-art-body { background: #fff; padding: 56px 0 96px; }\n.lfd-art-grid { display: flex; gap: 64px; align-items: flex-start; }\n.lfd-art__col { flex: 1; min-width: 0; max-width: 720px; }\n\n.lfd-art__lede { font: 400 17px\/1.8 var(--lfd-sans); color: var(--lfd-navy); margin: 0; }\n.lfd-art__sub { font: 400 16px\/1.8 var(--lfd-sans); color: var(--lfd-muted); margin: 20px 0 0; }\n.lfd-art__col h2 { font: 600 28px var(--lfd-serif-display); color: var(--lfd-navy); margin: 52px 0 0; scroll-margin-top: 24px; }\n.lfd-art__p { font: 400 16px\/1.8 var(--lfd-sans); color: var(--lfd-muted); margin: 16px 0 0; }\n.lfd-art__p--after { margin: 22px 0 0; }\n.lfd .lfd-art__col a { color: var(--lfd-bronze); text-decoration: underline; text-underline-offset: 2px; }\n.lfd .lfd-art__col a:hover { color: var(--lfd-navy); }\n\n.lfd-art__bullets { display: flex; flex-direction: column; gap: 14px; margin-top: 22px; }\n.lfd-art__bullet { display: flex; gap: 12px; align-items: flex-start; }\n.lfd-art__bullet svg { margin-top: 5px; flex-shrink: 0; }\n.lfd-art__bullet div { font: 400 16px\/1.7 var(--lfd-sans); color: var(--lfd-muted); }\n.lfd-art__bullet strong { color: var(--lfd-navy); font-weight: 600; }\n\n.lfd-art__steps { display: flex; flex-direction: column; gap: 20px; margin-top: 26px; }\n.lfd-art__step { display: flex; gap: 16px; align-items: flex-start; }\n.lfd-art__n { width: 30px; height: 30px; border-radius: 50%; background: var(--lfd-navy); color: #fff;\n  display: flex; align-items: center; justify-content: center; font: 600 14px var(--lfd-sans); flex-shrink: 0; }\n.lfd-art__n--soft { background: var(--lfd-cream); border: 1px solid var(--lfd-border); color: var(--lfd-navy); }\n.lfd-art__step div:last-child { font: 400 16px\/1.7 var(--lfd-sans); color: var(--lfd-muted); padding-top: 3px; }\n.lfd-art__step strong { color: var(--lfd-navy); font-weight: 600; }\n\n.lfd-art__fig { margin: 36px 0 0; }\n.lfd-art__fig img { width: 100%; aspect-ratio: 16\/10; object-fit: cover; border-radius: 12px; display: block; }\n.lfd-art__cap { font: 400 12px\/1.6 var(--lfd-sans); color: var(--lfd-muted); margin-top: 10px; }\n\n.lfd-art__faqwrap { margin-top: 64px; padding-top: 44px; border-top: 1px solid var(--lfd-border); }\n.lfd-art__faqwrap h2 { margin: 0; }\n.lfd-art__faqwrap .lfd-faq { margin-top: 24px; }\n\n.lfd-helpful { margin-top: 44px; background: var(--lfd-cream); border: 1px solid var(--lfd-border); border-radius: 12px;\n  padding: 24px 26px; display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 16px; }\n.lfd-helpful__t { font: 600 16px var(--lfd-serif-display); color: var(--lfd-navy); }\n.lfd-helpful__n { font: 400 13px var(--lfd-sans); color: var(--lfd-muted); margin-top: 4px; }\n.lfd-helpful__btns { display: flex; gap: 10px; }\n.lfd .lfd-helpful__b { display: flex; align-items: center; gap: 8px; background: #fff; border: 1px solid var(--lfd-border);\n  color: var(--lfd-navy); border-radius: 8px; padding: 11px 20px; font: 500 14px var(--lfd-sans); cursor: pointer; }\n.lfd .lfd-helpful__b:hover { background: var(--lfd-navy); border-color: var(--lfd-navy); color: #fff; }\n\n.lfd-toc { flex: 0 0 260px; position: sticky; top: 24px; }\n.lfd-toc__in { border-left: 1px solid var(--lfd-border); padding-left: 22px; }\n.lfd-toc__k { font: 500 10px var(--lfd-sans); letter-spacing: 0.12em; text-transform: uppercase; color: var(--lfd-bronze); }\n.lfd-toc__list { display: flex; flex-direction: column; gap: 11px; margin-top: 16px; }\n.lfd .lfd-toc__list a { font: 400 13px\/1.5 var(--lfd-sans); color: var(--lfd-navy); text-decoration: none; }\n.lfd .lfd-toc__list a:hover { color: var(--lfd-bronze); }\n.lfd-toc__foot { margin-top: 26px; padding-top: 20px; border-top: 1px solid var(--lfd-border);\n  font: 400 13px\/1.65 var(--lfd-sans); color: var(--lfd-muted); }\n\n.lfd-rel { background: var(--lfd-cream); border-top: 1px solid var(--lfd-border); padding: 80px 0; }\n.lfd-rel__k { font: 500 11px var(--lfd-sans); letter-spacing: 0.14em; text-transform: uppercase; color: var(--lfd-bronze); }\n.lfd-rel h2 { font: 600 28px var(--lfd-serif-display); color: var(--lfd-navy); margin: 8px 0 0; }\n.lfd-rel__grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 20px; margin-top: 28px; }\n.lfd .lfd-rel__card { text-decoration: none; background: #fff; border: 1px solid var(--lfd-border); border-radius: 12px;\n  overflow: hidden; display: flex; flex-direction: column; }\n.lfd-rel__media { width: 100%; height: 170px; flex: 0 0 170px; position: relative; overflow: hidden; }\n.lfd-rel__media img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }\n.lfd-rel__txt { padding: 24px; display: flex; flex-direction: column; gap: 10px; }\n.lfd-rel__tag { font: 500 10px var(--lfd-sans); letter-spacing: 0.12em; text-transform: uppercase; color: var(--lfd-bronze); }\n.lfd-rel__t { font: 600 18px\/1.35 var(--lfd-serif-display); color: var(--lfd-navy); text-wrap: pretty; }\n.lfd-rel__d { font: 400 13px\/1.6 var(--lfd-sans); color: var(--lfd-muted); }\n.lfd-rel__r { font: 400 12px var(--lfd-sans); color: var(--lfd-muted); margin-top: 6px; }\n.lfd-rel__back { margin-top: 36px; }\n\n@media (max-width: 900px) {\n  .lfd-art-head__row { flex-direction: column; align-items: flex-start; gap: 28px; }\n  .lfd-art-head__media { flex: 0 0 auto; width: 100%; height: 220px; }\n  .lfd-art__h1 { font-size: 30px; }\n  .lfd-art-grid { flex-direction: column; gap: 40px; }\n  .lfd-toc { position: static; flex: 0 0 auto; width: 100%; order: -1; }\n  .lfd-art__col { max-width: 100%; }\n  .lfd-rel { padding: 56px 0; }\n  .lfd-helpful { flex-direction: column; align-items: flex-start; }\n}\n\n\/* ===========================================================================\n   HELP CATEGORY  (\/help\/getting-started\/)  \u2014 added 2026-09-11\n   Measured off the rendered design source at 1920px, not read off its inline\n   styles: hero min-height 420 with a 90deg navy gradient over the photo,\n   H1 700 52px\/1.12 Fraunces white, content column 900 (820 inner at 40px pad),\n   FAQ card 820x\u2014, #fff, 1px #E8E4DC, radius 12, padding 22\/24.\n   The FAQ reuses the shared `.lfd-faq` skin, with per-item ids for deep links.\n   =========================================================================== *\/\n.lfd-cat-hero { position: relative; min-height: 420px; display: flex; align-items: center; overflow: hidden; }\n.lfd .lfd-cat-hero__img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }\n\/* Gradient lives on a plain child div, never on an Elementor container \u2014 the\n   lazy-loader strips background-image from containers 3+ with !important. *\/\n.lfd-cat-hero__scrim { position: absolute; inset: 0; pointer-events: none;\n  background: linear-gradient(90deg, rgba(20,32,58,0.92) 0%, rgba(20,32,58,0.62) 55%, rgba(20,32,58,0.30) 100%); }\n.lfd-cat-hero__inner { position: relative; max-width: var(--lfd-maxw); margin: 0 auto;\n  padding: 56px 40px 64px; box-sizing: border-box; width: 100%; }\n.lfd-cat-crumb { display: flex; flex-wrap: wrap; align-items: center; gap: 8px;\n  font: 400 12px var(--lfd-sans); color: rgba(255,255,255,0.65); }\n.lfd .lfd-cat-crumb a { color: rgba(255,255,255,0.65); text-decoration: none; }\n.lfd .lfd-cat-crumb a:hover { color: #fff; }\n.lfd-cat-crumb__sep { color: rgba(255,255,255,0.35); }\n.lfd-cat-crumb__cur { color: #fff; }\n.lfd-cat-hero__back { margin-top: 20px; }\n.lfd .lfd-cat-hero__back a { display: inline-flex; align-items: center; gap: 8px;\n  font: 400 13px var(--lfd-sans); color: rgba(255,255,255,0.70); text-decoration: none; }\n.lfd .lfd-cat-hero__back a:hover { color: #fff; }\n.lfd-cat-hero__txt { max-width: 720px; margin-top: 20px; }\n.lfd-cat-hero__k { font: 500 11px var(--lfd-sans); letter-spacing: 0.14em; text-transform: uppercase;\n  color: var(--lfd-bronze); margin-bottom: 12px; }\n.lfd-cat-hero__h1 { font: 700 52px\/1.12 var(--lfd-serif); color: #fff; margin: 0; }\n.lfd-cat-hero__p { font: 400 17px\/1.7 var(--lfd-sans); color: rgba(255,255,255,0.78); margin: 16px 0 0; max-width: 560px; }\n\n.lfd-cat-body { background: #fff; padding: 56px 0 88px; }\n.lfd-cat-wrap { max-width: 900px; margin: 0 auto; padding: 0 40px; box-sizing: border-box; }\n.lfd-cat__k { font: 500 11px var(--lfd-sans); letter-spacing: 0.14em; text-transform: uppercase; color: var(--lfd-bronze); }\n\n.lfd .lfd-feat { display: flex; gap: 28px; align-items: stretch; text-decoration: none; background: #fff;\n  border: 1px solid var(--lfd-border); border-radius: 12px; overflow: hidden; margin-top: 14px;\n  box-shadow: 0 4px 20px rgba(20,32,58,0.06); }\n.lfd .lfd-feat:hover { box-shadow: 0 8px 28px rgba(20,32,58,0.12); }\n.lfd-feat__media { flex: 0 0 260px; position: relative; }\n.lfd-feat__media img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }\n.lfd-feat__txt { flex: 1; min-width: 0; padding: 30px 32px 30px 4px; display: flex; flex-direction: column;\n  justify-content: center; gap: 10px; }\n.lfd-feat__t { font: 600 24px\/1.3 var(--lfd-serif-display); color: var(--lfd-navy); text-wrap: pretty; }\n.lfd-feat__d { font: 400 15px\/1.7 var(--lfd-sans); color: var(--lfd-muted); }\n.lfd-feat__meta { display: flex; align-items: center; gap: 8px; font: 400 13px var(--lfd-sans);\n  color: var(--lfd-muted); margin-top: 4px; }\n\n.lfd-cat-faq { margin-top: 56px; }\n.lfd-cat-faq h2 { font: 600 26px var(--lfd-serif-display); color: var(--lfd-navy); margin: 0; }\n.lfd-cat-faq .lfd-faq { margin-top: 22px; }\n\/* the hash target is the ITEM, so keep it clear of the sticky admin bar *\/\n.lfd-cat-faq .lfd-faq__item { scroll-margin-top: 24px; }\n\n.lfd-still { margin-top: 56px; background: var(--lfd-navy); border-radius: 12px; padding: 40px;\n  display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 24px; }\n.lfd-still__t { font: 600 24px var(--lfd-serif-display); color: #fff; }\n.lfd-still__p { font: 400 15px\/1.7 var(--lfd-sans); color: rgba(255,255,255,0.70); margin-top: 8px; max-width: 440px; }\n.lfd-still__btns { display: flex; flex-wrap: wrap; gap: 12px; }\n.lfd .lfd-still__wa { display: inline-flex; align-items: center; gap: 10px; background: var(--lfd-bronze);\n  color: #fff; border-radius: 8px; padding: 14px 24px; font: 500 15px var(--lfd-sans); text-decoration: none; }\n.lfd .lfd-still__wa:hover { background: #8f6e26; }\n.lfd .lfd-still__alt { display: inline-flex; align-items: center; gap: 10px; background: transparent;\n  border: 1px solid rgba(255,255,255,0.35); color: #fff; border-radius: 8px; padding: 14px 24px;\n  font: 500 15px var(--lfd-sans); text-decoration: none; }\n.lfd .lfd-still__alt:hover { border-color: #fff; }\n.lfd-cat-back { margin-top: 36px; }\n\n\/* Search results injected into \/help\/ from the hidden category index *\/\n.lfd-xres { display: flex; flex-direction: column; gap: 12px; margin-top: 18px; }\n.lfd .lfd-xres__item { display: block; text-decoration: none; background: #fff; border: 1px solid var(--lfd-border);\n  border-radius: 12px; padding: 18px 20px; }\n.lfd .lfd-xres__item:hover { border-color: var(--lfd-bronze); }\n.lfd-xres__cat { font: 500 10px var(--lfd-sans); letter-spacing: 0.12em; text-transform: uppercase; color: var(--lfd-bronze); }\n.lfd-xres__q { font: 600 15px var(--lfd-serif-display); color: var(--lfd-navy); margin-top: 6px; }\n.lfd-xres__s { font: 400 13px\/1.6 var(--lfd-sans); color: var(--lfd-muted); margin-top: 6px; }\n\n@media (max-width: 900px) {\n  .lfd-cat-hero { min-height: 320px; }\n  .lfd-cat-hero__inner { padding: 40px 20px 44px; }\n  .lfd-cat-hero__h1 { font-size: 32px; }\n  .lfd-cat-hero__p { font-size: 15px; }\n  .lfd-cat-wrap { padding: 0 20px; }\n  .lfd .lfd-feat { flex-direction: column; gap: 0; }\n  .lfd-feat__media { flex: 0 0 180px; height: 180px; }\n  .lfd-feat__txt { padding: 22px 22px 24px; }\n  .lfd-feat__t { font-size: 20px; }\n  .lfd-still { flex-direction: column; align-items: flex-start; padding: 28px 22px; }\n}\n\n\/* Navy outline button for LIGHT sections \u2014 the \"Back to Help Centre\" control on\n   the help article and the help category page. Added 2026-09-11 to fix a real\n   defect: both were using `.lfd-btn--ghost`, which is white-on-transparent for\n   DARK bands, so on a white\/cream section the border and label were invisible.\n   Matches the design: transparent, 1px navy, navy label, radius 8, 13\/24, 500 14px. *\/\n.lfd .lfd-btn--outline-navy { background: transparent; color: var(--lfd-navy);\n  border: 1px solid var(--lfd-navy); border-radius: 8px; padding: 13px 24px;\n  font: 500 14px var(--lfd-sans); display: inline-flex; align-items: center; gap: 10px;\n  text-decoration: none; }\n.lfd .lfd-btn--outline-navy:hover { background: var(--lfd-navy); color: #fff; }\n\n\/* =============================================================================\n   HELP ARTICLE #2 \u2014 Payments & Pricing (Help-Article-Pricing.dc.html), 2026-09-14.\n   Reuses the whole article #1 skin; only the blocks article #1 has no equivalent for\n   are new. Plain background-COLOR everywhere (no gradients): the chart and the table\n   sit in the 2nd container, which Elementor's lazy-load rule can strip.\n   ============================================================================= *\/\n.lfd-art__lede--m16 { margin: 16px 0 0; }\n.lfd-art__p--m18 { margin: 18px 0 0; }\n.lfd-art__p--m20 { margin: 20px 0 0; }\n.lfd-art__p--m30 { margin: 30px 0 0; }\n.lfd-art__col strong { color: var(--lfd-navy); font-weight: 600; }\n.lfd-art__fig--grid img { aspect-ratio: 1477 \/ 927; object-position: top center; border: 1px solid var(--lfd-border); }\n\n\/* two cost-summary cards *\/\n.lfd-psum { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 18px; margin-top: 32px; }\n.lfd-psum__card { background: var(--lfd-cream); border: 1px solid var(--lfd-border); border-radius: 12px; padding: 22px 24px; }\n.lfd-psum__who { font: 500 10px var(--lfd-sans); letter-spacing: 0.12em; text-transform: uppercase; color: var(--lfd-bronze); }\n.lfd-psum__h { font: 600 20px\/1.3 var(--lfd-serif-display); color: var(--lfd-navy); margin-top: 10px; }\n.lfd-psum__d { font: 400 14px\/1.7 var(--lfd-sans); color: var(--lfd-muted); margin-top: 8px; }\n\n\/* cumulative-cost chart (bars drawn to the design's own scale) *\/\n.lfd-chart { border: 1px solid var(--lfd-border); border-radius: 12px; background: #fff; padding: 28px 30px 24px; }\n.lfd-chart__t { font: 600 16px var(--lfd-serif-display); color: var(--lfd-navy); }\n.lfd-chart__s { font: 400 13px\/1.6 var(--lfd-sans); color: var(--lfd-muted); margin-top: 6px; }\n.lfd-chart__legend { display: flex; flex-wrap: wrap; gap: 22px; margin-top: 18px; }\n.lfd-chart__key { display: flex; align-items: center; gap: 8px; font: 400 12px var(--lfd-sans); color: var(--lfd-muted); }\n.lfd-chart__sw { width: 12px; height: 12px; border-radius: 3px; background-color: #C9C3B6; display: inline-block; }\n.lfd-chart__sw--lux { background-color: var(--lfd-bronze); }\n.lfd-chart__grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; margin-top: 28px; padding-top: 8px; }\n.lfd-chart__col { display: flex; flex-direction: column; gap: 12px; }\n.lfd-chart__plot { height: 210px; display: flex; align-items: flex-end; justify-content: center; gap: 14px; border-bottom: 1px solid var(--lfd-border); }\n.lfd-chart__bw { width: 44px; display: flex; flex-direction: column; align-items: center; gap: 6px; }\n.lfd-chart__v { font: 600 12px var(--lfd-sans); color: var(--lfd-muted); white-space: nowrap; }\n.lfd-chart__v--lux { color: var(--lfd-bronze); }\n.lfd-chart__bar { width: 44px; background-color: #C9C3B6; border-radius: 4px 4px 0 0; }\n.lfd-chart__bar--lux { background-color: var(--lfd-bronze); }\n.lfd-chart__x { font: 500 12px var(--lfd-sans); color: var(--lfd-navy); text-align: center; }\n.lfd-chart__foot { margin-top: 22px; padding-top: 16px; border-top: 1px solid var(--lfd-border); font: 400 13px\/1.7 var(--lfd-sans); color: var(--lfd-muted); }\n\n\/* traditional rental vs LuxFlat Direct *\/\n.lfd-cmp { margin-top: 26px; border: 1px solid var(--lfd-border); border-radius: 12px; overflow: hidden; }\n.lfd-cmp__row { display: grid; grid-template-columns: 1.1fr 1.3fr 1.3fr; border-top: 1px solid var(--lfd-border); }\n.lfd-cmp__row--head { background-color: var(--lfd-navy); border-top: 0; }\n.lfd-cmp__h { font: 500 11px var(--lfd-sans); letter-spacing: 0.1em; text-transform: uppercase; color: rgba(255,255,255,0.55); padding: 14px 18px; }\n.lfd-cmp__h--lux { color: #fff; }\n.lfd-cmp__c { font: 500 14px\/1.6 var(--lfd-sans); color: var(--lfd-navy); padding: 15px 18px; }\n.lfd-cmp__c--trad { font-weight: 400; color: var(--lfd-muted); border-left: 1px solid var(--lfd-border); }\n.lfd-cmp__c--lux { color: var(--lfd-forest); border-left: 1px solid var(--lfd-border); background-color: #FBFAF7; }\n\n@media (max-width: 767px) {\n  .lfd-chart { padding: 22px 18px 18px; }\n  .lfd-chart__grid { gap: 10px; }\n  .lfd-chart__plot { gap: 6px; }\n  .lfd-chart__bw, .lfd-chart__bar { width: 34px; }\n  .lfd-cmp__row { grid-template-columns: 1fr 1.2fr 1.2fr; }\n  .lfd-cmp__h, .lfd-cmp__c { padding: 12px 10px; font-size: 13px; }\n  .lfd-cmp__h { font-size: 10px; letter-spacing: 0.06em; }\n}\n\n\/* =============================================================================\n   HELP ARTICLE #3 \u2014 Documents & Verification (Help-Article-Verification.dc.html),\n   2026-09-14. Reuses the article skin and the pricing article's `lfd-psum` cards.\n   ============================================================================= *\/\n.lfd-art__p--m24 { margin: 24px 0 0; }\n.lfd-psum--docs { margin-top: 26px; }\n.lfd-psum--docs .lfd-psum__h { font-size: 19px; }\n.lfd-art__steps-wrap .lfd-art__steps { gap: 18px; margin-top: 24px; }\n.lfd-art__fig--portal-docs img { aspect-ratio: 1284 \/ 929; object-fit: contain; background-color: #fff; border: 1px solid var(--lfd-border); }\n.lfd-art__fig--portal-qual img { aspect-ratio: 1282 \/ 837; object-fit: contain; background-color: #fff; border: 1px solid var(--lfd-border); }\n\n\/* =============================================================================\n   BLOG LISTING (\/blog\/) \u2014 Blog.dc.html, 2026-09-14.\n   Header band and crumb reuse the article skin (`lfd-crumb`). Plain background-COLOR\n   only (no gradients): see the Elementor lazy-load note.\n   ============================================================================= *\/\n.lfd-blog-head { background: var(--lfd-cream); border-bottom: 1px solid var(--lfd-border); padding: 32px 0 52px; }\n.lfd-blog-head__txt { max-width: 660px; margin-top: 26px; }\n.lfd-blog-head__k, .lfd-blog__k { font: 500 11px var(--lfd-sans); letter-spacing: 0.14em; text-transform: uppercase; color: var(--lfd-bronze); }\n.lfd-blog-head__h1 { font: 700 48px\/1.14 var(--lfd-serif); color: var(--lfd-navy); margin: 12px 0 0; }\n.lfd-blog-head__p { font: 400 17px\/1.7 var(--lfd-sans); color: var(--lfd-muted); margin: 16px 0 0; }\n\n.lfd-blog-body { background: #fff; padding: 56px 0 96px; }\n\n\/* featured post \u2014 46% image \/ text, the design's large card *\/\n.lfd .lfd-bfeat { display: flex; align-items: stretch; text-decoration: none; background: #fff; border: 1px solid var(--lfd-border);\n  border-radius: 12px; overflow: hidden; margin-top: 14px; box-shadow: 0 4px 20px rgba(20,32,58,0.06); transition: box-shadow 150ms ease-out; }\n.lfd .lfd-bfeat:hover { box-shadow: 0 8px 28px rgba(20,32,58,0.12); }\n.lfd-bfeat__media { flex: 0 0 46%; position: relative; min-height: 340px; }\n.lfd-bfeat__media img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }\n.lfd-bfeat__txt { flex: 1; min-width: 0; padding: 40px 44px; display: flex; flex-direction: column; justify-content: center; gap: 14px; }\n.lfd-bfeat__tag, .lfd-bcard__tag { font: 500 10px var(--lfd-sans); letter-spacing: 0.12em; text-transform: uppercase; color: var(--lfd-bronze); }\n.lfd-bfeat__t { font: 600 32px\/1.24 var(--lfd-serif-display); color: var(--lfd-navy); text-wrap: pretty; }\n.lfd-bfeat__d { font: 400 16px\/1.7 var(--lfd-sans); color: var(--lfd-muted); }\n.lfd-bfeat__meta { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; font: 400 13px var(--lfd-sans); color: var(--lfd-muted); margin-top: 6px; }\n.lfd-bfeat__read { display: flex; align-items: center; gap: 7px; }\n.lfd-bfeat__dot, .lfd-bcard__dot { color: #C9C3B6; }\n\n\/* category tabs + grid + cards \u2014 rendered only once there is more than one post *\/\n.lfd-btabs { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 56px; padding-bottom: 24px; border-bottom: 1px solid var(--lfd-border); }\n.lfd .lfd-btab { background: #fff; border: 1px solid var(--lfd-border); color: var(--lfd-navy); border-radius: 20px; padding: 9px 18px;\n  font: 500 13px var(--lfd-sans); cursor: pointer; white-space: nowrap; }\n.lfd .lfd-btab.is-active { background: var(--lfd-navy); border-color: var(--lfd-navy); color: #fff; }\n.lfd-bgrid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; margin-top: 32px; }\n.lfd-btabs + .lfd-bgrid { margin-top: 32px; }\n.lfd-bfeat + .lfd-bgrid { margin-top: 56px; }\n.lfd .lfd-bcard { text-decoration: none; background: #fff; border: 1px solid var(--lfd-border); border-radius: 12px; overflow: hidden; display: flex; flex-direction: column; }\n.lfd-bcard[hidden] { display: none; }\n.lfd-bcard__media { width: 100%; height: 190px; flex: 0 0 190px; position: relative; overflow: hidden; }\n.lfd-bcard__media img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }\n.lfd-bcard__txt { padding: 24px; display: flex; flex-direction: column; gap: 10px; flex: 1; }\n.lfd-bcard__t { font: 600 19px\/1.35 var(--lfd-serif-display); color: var(--lfd-navy); text-wrap: pretty; }\n.lfd-bcard__d { font: 400 14px\/1.65 var(--lfd-sans); color: var(--lfd-muted); }\n.lfd-bcard__meta { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; font: 400 12px var(--lfd-sans); color: var(--lfd-muted); margin-top: auto; padding-top: 12px; }\n.lfd-bmore { display: flex; justify-content: center; margin-top: 44px; }\n.lfd-bcount { margin-top: 44px; font: 400 13px var(--lfd-sans); color: var(--lfd-muted); text-align: center; }\n\n@media (max-width: 1024px) {\n  .lfd-bgrid { grid-template-columns: repeat(2, 1fr); }\n  .lfd-bfeat__txt { padding: 32px; }\n  .lfd-bfeat__t { font-size: 26px; }\n}\n@media (max-width: 767px) {\n  .lfd-blog-head__h1 { font-size: 34px; }\n  .lfd .lfd-bfeat { flex-direction: column; }\n  .lfd-bfeat__media { flex: 0 0 auto; min-height: 220px; }\n  .lfd-bfeat__txt { padding: 24px; }\n  .lfd-bfeat__t { font-size: 22px; }\n  .lfd-bgrid { grid-template-columns: 1fr; gap: 16px; }\n}\n\n\/* =============================================================================\n   BLOG ARTICLE \u2014 neighbourhoods guide (Blog-Article.dc.html), 2026-09-14.\n   Reuses the article skin; only the callout, the numbered decision questions and the\n   price table are new. background-COLOR only (lazy-load rule).\n   ============================================================================= *\/\n.lfd-art__p--m26 { margin: 26px 0 0; }\n.lfd-art__p--m28 { margin: 28px 0 0; }\n.lfd-art__p--navy { color: var(--lfd-navy); }\n.lfd-art__fig--nb img { aspect-ratio: 16 \/ 9; }\n\n.lfd-nb-callout { margin-top: 26px; border: 1px solid var(--lfd-border); border-left: 3px solid var(--lfd-bronze); border-radius: 12px;\n  padding: 22px 24px; background-color: var(--lfd-cream); }\n.lfd-nb-callout__t { font: 600 16px var(--lfd-serif-display); color: var(--lfd-navy); }\n.lfd-nb-callout__d { font: 400 15px\/1.75 var(--lfd-sans); color: var(--lfd-muted); margin-top: 8px; }\n\n.lfd-nb-qs { display: flex; flex-direction: column; gap: 26px; margin-top: 26px; }\n.lfd-nb-q { display: flex; gap: 16px; align-items: flex-start; }\n.lfd-nb-q__n { flex: 0 0 30px; height: 30px; border-radius: 20px; background-color: var(--lfd-navy); color: #fff;\n  font: 600 13px var(--lfd-sans); display: flex; align-items: center; justify-content: center; margin-top: 2px; }\n.lfd-nb-q__b { min-width: 0; }\n.lfd-nb-q__t { font: 600 18px\/1.4 var(--lfd-serif-display); color: var(--lfd-navy); }\n.lfd-nb-q__a { font: 400 16px\/1.75 var(--lfd-sans); color: var(--lfd-muted); margin-top: 8px; }\n.lfd-nb-q__c { font: 400 16px\/1.75 var(--lfd-sans); color: var(--lfd-muted); margin-top: 12px; }\n\n\/* price table \u2014 a real <table>; scrolls horizontally inside its own box on small screens *\/\n.lfd-nb-table-wrap { margin-top: 26px; border: 1px solid var(--lfd-border); border-radius: 12px; overflow-x: auto; -webkit-overflow-scrolling: touch; }\n.lfd .lfd-nb-table { width: 100%; min-width: 560px; border-collapse: collapse; margin: 0; }\n.lfd .lfd-nb-table th, .lfd .lfd-nb-table td { text-align: left; vertical-align: top; padding: 15px 16px; border: 0; }\n.lfd .lfd-nb-table thead th { background-color: var(--lfd-navy); font: 500 11px var(--lfd-sans); letter-spacing: 0.1em; text-transform: uppercase;\n  color: rgba(255,255,255,0.55); padding: 14px 16px; }\n.lfd .lfd-nb-table thead th.is-price { color: #fff; }\n.lfd .lfd-nb-table tbody tr { border-top: 1px solid var(--lfd-border); }\n.lfd .lfd-nb-table tbody th { font: 500 14px\/1.6 var(--lfd-sans); color: var(--lfd-navy); background-color: #fff; }\n.lfd .lfd-nb-table tbody td { font: 400 14px\/1.6 var(--lfd-sans); color: var(--lfd-muted); border-left: 1px solid var(--lfd-border); background-color: #fff; }\n.lfd .lfd-nb-table tbody td.is-price { font-weight: 500; color: var(--lfd-forest); background-color: #FBFAF7; white-space: nowrap; }\n\n.lfd-rel--back-only { padding: 56px 0; }\n.lfd-rel--back-only .lfd-rel__back { margin-top: 0; }\n\n\/* =============================================================================\n   BLOG ARTICLE \u2014 furnished vs unfurnished (Blog-Article-Furnished.dc.html), 2026-09-15.\n   Reuses the article skin, `lfd-psum` (short answer), `lfd-cmp` (side by side) and\n   `lfd-nb-callout` (edge case). New: the break-even box and the paired \"Choose \u2026 if\" cards.\n   Values are the design's inline styles. background-COLOR only (lazy-load rule).\n   ============================================================================= *\/\n.lfd-art__lede--m20 { margin: 20px 0 0; }\n.lfd-psum--fv { margin-top: 22px; }\n.lfd-cmp--fv .lfd-cmp__row { grid-template-columns: 1fr 1.3fr 1.3fr; }\n.lfd-art__note { font: 400 13px\/1.7 var(--lfd-sans); color: var(--lfd-muted); margin: 14px 0 0; }\n.lfd-nb-callout--m22 { margin-top: 22px; }\n\n.lfd-fv-calc { margin-top: 26px; background-color: var(--lfd-navy); border-radius: 12px; padding: 30px 32px; }\n.lfd-fv-calc__t { font: 600 18px var(--lfd-serif-display); color: #fff; }\n.lfd-fv-calc__rows { margin-top: 18px; display: flex; flex-direction: column; gap: 14px; }\n.lfd-fv-calc__r { font: 400 15px\/1.6 var(--lfd-sans); color: rgba(255,255,255,0.80); }\n\/* (0-2-1) so it beats `.lfd-art__col strong` (0-1-1), which paints every strong navy *\/\n.lfd-art__col .lfd-fv-calc strong { color: var(--lfd-bronze); font-weight: 600; }\n.lfd-fv-calc__hr { height: 1px; background-color: rgba(255,255,255,0.14); }\n.lfd-fv-calc__n { font: 400 14px\/1.7 var(--lfd-sans); color: rgba(255,255,255,0.65); margin-top: 18px; }\n\n.lfd-fv-who { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 20px; margin-top: 24px; }\n.lfd-fv-who__card { border: 1px solid var(--lfd-border); border-radius: 12px; padding: 26px 28px; background-color: #fff; }\n.lfd-fv-who__card--f { background-color: #FBFAF7; }\n.lfd-fv-who__t { font: 600 20px var(--lfd-serif-display); color: var(--lfd-navy); }\n.lfd-fv-who__list { display: flex; flex-direction: column; gap: 12px; margin-top: 16px; }\n.lfd-fv-who__i { display: flex; gap: 10px; align-items: flex-start; }\n.lfd-fv-who__i svg { margin-top: 4px; flex-shrink: 0; }\n.lfd-fv-who__i div { font: 400 15px\/1.65 var(--lfd-sans); color: var(--lfd-muted); }\n\n@media (max-width: 767px) {\n  .lfd-fv-calc { padding: 24px 20px; }\n  .lfd-fv-who__card { padding: 22px 20px; }\n}\n\n\/* =============================================================================\n   BLOG ARTICLE \u2014 cost to rent (Blog-Article-Cost.dc.html), 2026-09-15.\n   Reuses the furnished article's pieces; new: the h3, two `lfd-cmp` table variants (4 and 3\n   columns, 16px cell padding) and the numbered \"levers\" variant of `lfd-nb-q`.\n   Values are the design's inline styles. background-COLOR only (lazy-load rule).\n   ============================================================================= *\/\n\/* (0-2-0) so it beats the theme kit's `.elementor-kit-7 h3` (0-1-1) *\/\n.lfd-art__col .lfd-art__h3 { font: 600 20px var(--lfd-serif-display); color: var(--lfd-navy); margin: 36px 0 0; }\n.lfd-art__p--m14 { margin: 14px 0 0; }\n\n.lfd-cmp--cost4 { margin-top: 22px; }\n.lfd-cmp--cost4 .lfd-cmp__row { grid-template-columns: 0.9fr 1fr 1fr 1.6fr; }\n.lfd-cmp--cost3 .lfd-cmp__row { grid-template-columns: 1fr 1.1fr 1.8fr; }\n.lfd-cmp--cost4 .lfd-cmp__h, .lfd-cmp--cost3 .lfd-cmp__h { padding: 14px 16px; }\n.lfd-cmp--cost4 .lfd-cmp__c, .lfd-cmp--cost3 .lfd-cmp__c { padding: 15px 16px; }\n.lfd-cmp__c--sm { font-size: 13px; }\n.lfd-cmp__c--nowrap { white-space: nowrap; }\n\n.lfd-nb-qs--levers { gap: 20px; margin-top: 24px; }\n.lfd-nb-qs--levers .lfd-nb-q__t { font-size: 17px; }\n.lfd-nb-qs--levers .lfd-nb-q__a { margin-top: 6px; }\n\n@media (max-width: 767px) {\n  .lfd-cmp--cost4 .lfd-cmp__row { grid-template-columns: 0.9fr 1fr 1fr 1.4fr; }\n  .lfd-cmp--cost4 .lfd-cmp__h, .lfd-cmp--cost4 .lfd-cmp__c,\n  .lfd-cmp--cost3 .lfd-cmp__h, .lfd-cmp--cost3 .lfd-cmp__c { padding: 12px 8px; }\n  .lfd-cmp__c--nowrap { white-space: normal; }\n}\n\n@media (max-width: 767px) {\n  .lfd .lfd-nb-table th, .lfd .lfd-nb-table td { padding: 12px 12px; }\n  .lfd-nb-q__t { font-size: 17px; }\n}\n\n\/* =============================================================================\n   BLOG ARTICLE \u2014 digital nomad \/ freelancer (Blog-Article-Nomad.dc.html), 2026-09-15.\n   Reuses the cost article's pieces (levers variant for the three conditions). New: the\n   disclaimer and closing notes, visa-path cards, pull quote, \"Where LuxFlat Direct fits\" box,\n   permit sequence, budget cards and pinned area list.\n   Values are the design's inline styles. background-COLOR only (lazy-load rule).\n   ============================================================================= *\/\n.lfd-nm-m24 { margin: 24px 0 0; }\n.lfd-nm-m32 { margin: 32px 0 0; }\n\n.lfd-nm-note { display: flex; gap: 12px; align-items: flex-start; border: 1px solid #E0CFA8; border-left: 3px solid var(--lfd-bronze);\n  border-radius: 12px; padding: 22px 24px; background-color: #FBF6EC; }\n.lfd-nm-note svg { margin-top: 3px; flex-shrink: 0; }\n.lfd-nm-note__t { font: 600 16px var(--lfd-serif-display); color: var(--lfd-navy); }\n.lfd-nm-note__d { font: 400 15px\/1.75 var(--lfd-sans); color: var(--lfd-muted); margin-top: 8px; }\n\n.lfd-nm-paths { display: flex; flex-direction: column; gap: 16px; margin-top: 24px; }\n.lfd-nm-path { border: 1px solid var(--lfd-border); border-radius: 12px; padding: 22px 24px; background-color: #FBFAF7; }\n.lfd-nm-path__k { font: 500 10px var(--lfd-sans); letter-spacing: 0.12em; text-transform: uppercase; color: var(--lfd-bronze); }\n.lfd-nm-path__t { font: 600 18px var(--lfd-serif-display); color: var(--lfd-navy); margin-top: 6px; }\n.lfd-nm-path__d { font: 400 15px\/1.75 var(--lfd-sans); color: var(--lfd-muted); margin-top: 10px; }\n\n.lfd-nm-quote { margin-top: 28px; border-left: 3px solid var(--lfd-navy); padding: 6px 0 6px 24px; }\n.lfd-nm-quote__t { font: 600 24px\/1.45 var(--lfd-serif-display); color: var(--lfd-navy); text-wrap: pretty; }\n.lfd-nm-quote__d { font: 400 15px\/1.75 var(--lfd-sans); color: var(--lfd-muted); margin-top: 12px; }\n\n.lfd-nm-fit { margin-top: 32px; border: 1px solid var(--lfd-border); border-radius: 12px; padding: 26px 28px; background-color: var(--lfd-cream); }\n.lfd-nm-fit__t { font: 600 19px var(--lfd-serif-display); color: var(--lfd-navy); }\n.lfd-nm-fit__d { font: 400 16px\/1.75 var(--lfd-sans); color: var(--lfd-muted); margin-top: 10px; }\n.lfd-nm-fit__d--m14 { margin-top: 14px; }\n.lfd-nm-fit__cta { margin-top: 18px; }\n\/* (0-3-1), later in the file, so it beats `.lfd .lfd-art__col a` and its :hover *\/\n.lfd .lfd-art__col a.lfd-nm-fit__btn { display: inline-flex; align-items: center; gap: 8px; background-color: var(--lfd-bronze); color: #fff;\n  border-radius: 8px; padding: 12px 22px; font: 500 14px var(--lfd-sans); text-decoration: none; }\n.lfd .lfd-art__col a.lfd-nm-fit__btn:hover { background-color: var(--lfd-navy); color: #fff; }\n\n.lfd-nm-seq { margin-top: 26px; border: 1px solid var(--lfd-border); border-radius: 12px; overflow: hidden; }\n.lfd-nm-seq__h { background-color: var(--lfd-navy); padding: 14px 18px; font: 500 11px var(--lfd-sans); letter-spacing: 0.1em;\n  text-transform: uppercase; color: #fff; }\n.lfd-nm-seq__r { display: flex; gap: 14px; align-items: flex-start; padding: 15px 18px; border-top: 1px solid var(--lfd-border); }\n.lfd-nm-seq__n { flex: 0 0 24px; height: 24px; border-radius: 20px; background-color: var(--lfd-cream); border: 1px solid var(--lfd-border);\n  color: var(--lfd-navy); font: 600 12px var(--lfd-sans); display: flex; align-items: center; justify-content: center; box-sizing: border-box; }\n.lfd-nm-seq__d { font: 400 15px\/1.65 var(--lfd-sans); color: var(--lfd-muted); min-width: 0; }\n\n.lfd-nm-costs { display: flex; flex-direction: column; gap: 18px; margin-top: 24px; }\n.lfd-nm-cost { border: 1px solid var(--lfd-border); border-radius: 12px; padding: 20px 22px; }\n.lfd-nm-cost__top { display: flex; justify-content: space-between; align-items: baseline; gap: 16px; flex-wrap: wrap; }\n.lfd-nm-cost__t { font: 600 17px var(--lfd-serif-display); color: var(--lfd-navy); }\n.lfd-nm-cost__fig { font: 600 15px var(--lfd-sans); color: var(--lfd-forest); white-space: nowrap; }\n.lfd-nm-cost__d { font: 400 15px\/1.75 var(--lfd-sans); color: var(--lfd-muted); margin-top: 8px; }\n\n.lfd-nm-areas { display: flex; flex-direction: column; gap: 18px; margin-top: 24px; }\n.lfd-nm-area { display: flex; gap: 16px; align-items: flex-start; }\n.lfd-nm-area svg { margin-top: 5px; flex-shrink: 0; }\n.lfd-nm-area__b { min-width: 0; }\n.lfd-nm-area__t { font: 600 17px\/1.4 var(--lfd-serif-display); color: var(--lfd-navy); }\n.lfd-nm-area__d { font: 400 16px\/1.75 var(--lfd-sans); color: var(--lfd-muted); margin-top: 6px; }\n\n.lfd-nm-foot { margin-top: 36px; border: 1px solid #E0CFA8; border-radius: 12px; padding: 20px 24px; background-color: #FBF6EC;\n  font: 400 14px\/1.7 var(--lfd-sans); color: var(--lfd-muted); }\n\n@media (max-width: 767px) {\n  .lfd-nm-note, .lfd-nm-path { padding: 20px; }\n  .lfd-nm-quote__t { font-size: 21px; }\n  .lfd-nm-fit { padding: 22px 20px; }\n  .lfd .lfd-art__col a.lfd-nm-fit__btn { display: flex; justify-content: center; text-align: center; }\n}\n\n<\/style>\n<script>\n\/* ==========================================================================\n   LuxFlat Direct \u2014 shared page behaviour\n   Replaces the Claude Design DC runtime (support.js \/ image-slot.js \/ DCLogic)\n   with plain vanilla JS. Loaded ONCE per page.\n\n   Provides:\n     - FAQ accordions            [data-lfd-faq]        (all four pages; the attribute\n                                                        value names the block class)\n     - Tenant\/landlord toggle    [data-lfd-toggle]     (how-it-works)  \u2014 replaces state.tab\n     - Help article filtering    [data-lfd-help-search] (help-centre)\n   Idempotent: safe to run twice (guards against double-binding).\n   ========================================================================== *\/\n(function () {\n  'use strict';\n\n  var BOUND = 'lfdBound';\n\n  function ready(fn) {\n    if (document.readyState === 'loading') {\n      document.addEventListener('DOMContentLoaded', fn);\n    } else {\n      fn();\n    }\n  }\n\n  \/* ---------------------------------------------------------------- FAQ --\n     Markup contract:\n       <div data-lfd-faq>                        <- block class defaults to \"lfd-faq\"\n         <div class=\"lfd-faq__item is-open\">\n           <button class=\"lfd-faq__q\" aria-expanded=\"true\" aria-controls=\"ID\">\u2026<\/button>\n           <div class=\"lfd-faq__a\" id=\"ID\" role=\"region\">\u2026<\/div>\n         <\/div>\n       <\/div>\n     The attribute VALUE overrides the block class, so a page can carry a second,\n     visually different accordion without forking this function:\n       <div class=\"lfd-hfaq\" data-lfd-faq=\"lfd-hfaq\">  <- help-centre's design has a\n     leading doc icon and a chevron that rotates 90deg rather than 180deg, so it is a\n     separate component from the `.lfd-faq` the other three pages use.\n     Mirrors the DC behaviour: openIndex starts at 0, clicking an open item\n     closes it (openIndex -> -1). Single-open, like the original.\n  ---------------------------------------------------------------------- *\/\n  function initFaq(root) {\n    if (root[BOUND]) { return; }\n    root[BOUND] = true;\n\n    var block = root.getAttribute('data-lfd-faq') || 'lfd-faq';\n    var items = Array.prototype.slice.call(root.querySelectorAll('.' + block + '__item'));\n\n    function setOpen(item, open) {\n      item.classList.toggle('is-open', open);\n      var btn = item.querySelector('.' + block + '__q');\n      if (btn) { btn.setAttribute('aria-expanded', open ? 'true' : 'false'); }\n    }\n\n    items.forEach(function (item) {\n      var btn = item.querySelector('.' + block + '__q');\n      if (!btn) { return; }\n      btn.addEventListener('click', function () {\n        var isOpen = item.classList.contains('is-open');\n        items.forEach(function (other) { setOpen(other, false); });\n        setOpen(item, !isOpen);\n      });\n    });\n  }\n\n  \/* ------------------------------------------------- tenant\/landlord tabs --\n     Markup contract:\n       <div data-lfd-toggle>\n         <button role=\"tab\" aria-selected=\"true\"  aria-controls=\"panel-tenant\">\u2026<\/button>\n         <button role=\"tab\" aria-selected=\"false\" aria-controls=\"panel-landlord\">\u2026<\/button>\n       <\/div>\n       <div id=\"panel-tenant\">\u2026<\/div>\n       <div id=\"panel-landlord\" hidden>\u2026<\/div>\n     Replaces how-it-works' DCLogic `state.tab`. Also supports ?tab=landlord\n     in the URL and full keyboard arrow-key navigation.\n  ---------------------------------------------------------------------- *\/\n  function initToggle(root) {\n    if (root[BOUND]) { return; }\n    root[BOUND] = true;\n\n    var tabs = Array.prototype.slice.call(root.querySelectorAll('[role=\"tab\"]'));\n    if (!tabs.length) { return; }\n\n    function panelFor(tab) {\n      var id = tab.getAttribute('aria-controls');\n      return id ? document.getElementById(id) : null;\n    }\n\n    function select(tab, focus) {\n      tabs.forEach(function (t) {\n        var on = t === tab;\n        t.setAttribute('aria-selected', on ? 'true' : 'false');\n        t.setAttribute('tabindex', on ? '0' : '-1');\n        var p = panelFor(t);\n        if (p) { p.hidden = !on; }\n      });\n      if (focus) { tab.focus(); }\n    }\n\n    tabs.forEach(function (tab, i) {\n      tab.addEventListener('click', function () { select(tab, false); });\n      tab.addEventListener('keydown', function (e) {\n        var next = null;\n        if (e.key === 'ArrowRight' || e.key === 'ArrowDown') { next = tabs[(i + 1) % tabs.length]; }\n        if (e.key === 'ArrowLeft'  || e.key === 'ArrowUp')   { next = tabs[(i - 1 + tabs.length) % tabs.length]; }\n        if (e.key === 'Home') { next = tabs[0]; }\n        if (e.key === 'End')  { next = tabs[tabs.length - 1]; }\n        if (next) { e.preventDefault(); select(next, true); }\n      });\n    });\n\n    \/\/ Deep-link support: \/how-it-works\/?tab=landlord\n    var want = null;\n    try { want = new URLSearchParams(window.location.search).get('tab'); } catch (err) { want = null; }\n    var initial = null;\n    if (want) {\n      initial = tabs.filter(function (t) { return t.getAttribute('data-lfd-tab') === want; })[0] || null;\n    }\n    select(initial || tabs.filter(function (t) { return t.getAttribute('aria-selected') === 'true'; })[0] || tabs[0], false);\n  }\n\n  \/* ------------------------------------------------- help article search --\n     Markup contract:\n       <input data-lfd-help-search data-lfd-target=\"help-results\">\n       <section data-lfd-filter-group>\n         <div class=\"lfd-tcard\" data-lfd-filter-item data-lfd-terms=\"extra keywords\">\u2026<\/div>\n         \u2026\n       <\/section>\n       <p class=\"lfd-noresults\" hidden>\u2026<span data-lfd-query><\/span>\u2026<\/p>\n     Client-side filtering over the topic cards AND the FAQ rows already in the page \u2014\n     each row's question and answer text is in the DOM, so it is part of the haystack.\n     No backend, and deliberately NOT the property-listings search: this searches the\n     help content on this page only. The no-results note must sit OUTSIDE every\n     [data-lfd-filter-group], or it gets hidden along with the group it lives in.\n  ---------------------------------------------------------------------- *\/\n  \/\/ ---------------------------------------------------------------------------\n  \/\/ Cross-page help index. \/help\/ only has the 8 sample FAQs in its own DOM, so\n  \/\/ questions that live on a CATEGORY page cannot be found by a pure DOM filter.\n  \/\/ A small hidden JSON array on \/help\/ carries {q, cat, snippet, url} for those,\n  \/\/ and matches are rendered as links into `[data-lfd-xres]`. Deliberately NOT the\n  \/\/ full answer text \u2014 matching + a preview only, so \/help\/'s DOM stays small.\n  function readHelpIndex() {\n    var node = document.querySelector('script[type=\"application\/json\"][data-lfd-help-index]');\n    if (!node) { return []; }\n    try { return JSON.parse(node.textContent) || []; } catch (e) { return []; }\n  }\n\n  function renderIndexResults(box, entries) {\n    if (!box) { return; }\n    if (!entries.length) { box.innerHTML = ''; box.hidden = true; return; }\n    var html = '';\n    for (var i = 0; i < entries.length; i++) {\n      var e = entries[i];\n      html += '<a class=\"lfd-xres__item\" href=\"' + e.url + '\">'\n            +   '<span class=\"lfd-xres__cat\">' + (e.category || 'Help') + '<\/span>'\n            +   '<span class=\"lfd-xres__q\">' + e.question + '<\/span>'\n            +   '<span class=\"lfd-xres__s\">' + (e.snippet || '') + '<\/span>'\n            + '<\/a>';\n    }\n    box.innerHTML = html;\n    box.hidden = false;\n  }\n\n  function initHelpSearch(input) {\n    if (input[BOUND]) { return; }\n    input[BOUND] = true;\n\n    \/\/ Scope document-wide so each filterable block can live in its own\n    \/\/ Elementor section and still be reordered independently.\n    var targetId = input.getAttribute('data-lfd-target');\n    var scope = (targetId && document.getElementById(targetId)) || document;\n\n    var groups = Array.prototype.slice.call(scope.querySelectorAll('[data-lfd-filter-group]'));\n    if (!groups.length) { groups = Array.prototype.slice.call(document.querySelectorAll('[data-lfd-filter-group]')); }\n    var empty = scope.querySelector('.lfd-noresults') || document.querySelector('.lfd-noresults');\n    var queryOut = empty ? empty.querySelector('[data-lfd-query]') : null;\n    var index = readHelpIndex();\n    var xbox = document.querySelector('[data-lfd-xres]');\n\n    function haystack(el) {\n      return (el.textContent + ' ' + (el.getAttribute('data-lfd-terms') || '')).toLowerCase();\n    }\n\n    function apply() {\n      var q = input.value.trim().toLowerCase();\n      var total = 0;\n\n      groups.forEach(function (group) {\n        var items = Array.prototype.slice.call(group.querySelectorAll('[data-lfd-filter-item]'));\n        var shown = 0;\n        items.forEach(function (item) {\n          var hit = !q || haystack(item).indexOf(q) !== -1;\n          item.hidden = !hit;\n          if (hit) { shown++; }\n        });\n        total += shown;\n        \/\/ hide a whole section (heading included) when nothing in it matches\n        group.hidden = q !== '' && shown === 0;\n      });\n\n      \/\/ Cross-page results, shown only once the visitor has typed something \u2014\n      \/\/ with an empty box \/help\/ must look exactly as it always has.\n      var hits = [];\n      if (q && index.length) {\n        for (var i = 0; i < index.length; i++) {\n          var e = index[i];\n          var hay = ((e.question || '') + ' ' + (e.category || '') + ' '\n                     + (e.snippet || '') + ' ' + (e.terms || '')).toLowerCase();\n          if (hay.indexOf(q) !== -1) { hits.push(e); }\n        }\n      }\n      renderIndexResults(xbox, hits);\n      total += hits.length;\n\n      if (empty) {\n        empty.hidden = !(q !== '' && total === 0);\n        if (queryOut) { queryOut.textContent = input.value.trim(); }\n      }\n    }\n\n    input.addEventListener('input', apply);\n    input.addEventListener('search', apply);\n    \/\/ Enter must not reload the page \u2014 this is a client-side filter\n    input.addEventListener('keydown', function (e) {\n      if (e.key === 'Enter') { e.preventDefault(); apply(); }\n    });\n    var form = input.closest('form');\n    if (form) { form.addEventListener('submit', function (e) { e.preventDefault(); apply(); }); }\n\n    apply();\n  }\n\n  \/\/ ---------------------------------------------------------------------------\n  \/\/ Elementor's `tel` field rejects the space character. This is SERVER-side, not\n  \/\/ merely the HTML `pattern` attribute: proved 2026-09-11 by removing `pattern`\n  \/\/ and submitting anyway \u2014 the admin-ajax POST returns 200 carrying the same\n  \/\/ \"accepts only numbers and phone characters\" error, and no Submissions row is\n  \/\/ written. Luxembourg numbers are conventionally written in spaced groups and\n  \/\/ the field's own placeholder is `+352 \u2026`, so a landlord typing their number\n  \/\/ the normal way is blocked on a REQUIRED field of a lead-capture form.\n  \/\/\n  \/\/ Fix: strip whitespace from Elementor tel inputs before Elementor ever reads\n  \/\/ them. `type=\"tel\"` is kept, so mobile still gets the numeric keypad, and the\n  \/\/ user may still type spaces \u2014 they are tidied away on blur and guaranteed gone\n  \/\/ by submit. Only whitespace is touched; +, (), - and the rest are left alone.\n  \/\/\n  \/\/ The submit\/click listeners are on `document` and in the CAPTURE phase on\n  \/\/ purpose. A listener bound to the form itself would be at-target and would run\n  \/\/ AFTER Elementor's own handler, which is registered first \u2014 too late.\n  function stripTelSpaces(scope) {\n    (scope || document).querySelectorAll('input[type=\"tel\"]').forEach(function (el) {\n      var cleaned = el.value.replace(\/[\\s\\u00a0]+\/g, '');\n      if (cleaned !== el.value) { el.value = cleaned; }\n    });\n  }\n\n  function initTelNormalise() {\n    document.querySelectorAll('.elementor-form input[type=\"tel\"]').forEach(function (el) {\n      el.addEventListener('blur', function () { stripTelSpaces(el.form); });\n    });\n    document.addEventListener('submit', function (e) {\n      var form = e.target;\n      if (form && form.classList && form.classList.contains('elementor-form')) {\n        stripTelSpaces(form);\n      }\n    }, true);\n    document.addEventListener('click', function (e) {\n      var btn = e.target && e.target.closest\n        ? e.target.closest('.elementor-form button[type=\"submit\"]') : null;\n      if (btn) { stripTelSpaces(btn.form); }\n    }, true);\n  }\n\n  \/\/ ---------------------------------------------------------------------------\n  \/\/ Deep link into one FAQ row: \/help\/getting-started\/#create-tenant-profile\n  \/\/ opens that row and scrolls to it. The id is on the ITEM (see faq_block), so\n  \/\/ the browser's own anchor jump lands in the right place too; we re-scroll\n  \/\/ after opening because expanding the answer changes the offset.\n  function openFaqFromHash() {\n    var id = (window.location.hash || '').replace('#', '');\n    if (!id) { return; }\n    var item = document.getElementById(id);\n    if (!item || item.className.indexOf('lfd-faq__item') === -1) { return; }\n    if (item.className.indexOf('is-open') === -1) {\n      var btn = item.querySelector('.lfd-faq__q');\n      if (btn) { btn.click(); } else { item.className += ' is-open'; }\n    }\n    \/\/ Positioning is deliberately INSTANT and repeated, not one smooth animation.\n    \/\/ A smooth scroll here gets interrupted: the hero image and webfonts settle\n    \/\/ after the row expands, and the browser abandons the animation mid-flight\n    \/\/ (observed live \u2014 it travelled 16px and stopped). scrollIntoView honours the\n    \/\/ item's own `scroll-margin-top`, so the offset stays in CSS.\n    function place() {\n      try { item.scrollIntoView({ block: 'start' }); }\n      catch (e) { item.scrollIntoView(true); }\n    }\n    function placeSoon() { setTimeout(place, 60); setTimeout(place, 400); }\n    if (document.readyState === 'complete') { placeSoon(); }\n    else { window.addEventListener('load', placeSoon, { once: true }); }\n  }\n\n  ready(function () {\n    document.querySelectorAll('[data-lfd-faq]').forEach(initFaq);\n    document.querySelectorAll('[data-lfd-toggle]').forEach(initToggle);\n    document.querySelectorAll('[data-lfd-help-search]').forEach(initHelpSearch);\n    initTelNormalise();\n    openFaqFromHash();\n    window.addEventListener('hashchange', openFaqFromHash);\n  });\n}());\n\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-f951b15 e-con-full e-flex e-con e-parent\" data-id=\"f951b15\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f907fa1 elementor-widget elementor-widget-html\" data-id=\"f907fa1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div class=\"lfd lfd-band lfd-art-head\">\n  <div class=\"lfd-wrap\">\n    <nav class=\"lfd-crumb\" aria-label=\"Fil d\u2019Ariane\">\n      <a href=\"\/fr\/\">Accueil<\/a>\n      <span class=\"lfd-crumb__sep\" aria-hidden=\"true\">\/<\/span>\n      <a href=\"\/fr\/blog\/\">Blog<\/a>\n      <span class=\"lfd-crumb__sep\" aria-hidden=\"true\">\/<\/span>\n      <span class=\"lfd-crumb__cur\">Le co\u00fbt de la location au Luxembourg<\/span>\n    <\/nav>\n    <div class=\"lfd-art-head__row\">\n      <div class=\"lfd-art-head__main\">\n        <span class=\"lfd-art__badge\">Analyses de march\u00e9<\/span>\n        <h1 class=\"lfd-art__h1\">Combien co\u00fbte la location au Luxembourg en 2026 ? Loyer moyen par type d\u2019appartement et par quartier<\/h1>\n        <div class=\"lfd-art__meta\">\n          <span><svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"9\"\/><path d=\"M12 7v5l3 2\"\/><\/svg>~11 min de lecture<\/span>\n          <span class=\"lfd-art__dot\" aria-hidden=\"true\">\u00b7<\/span>\n          <span>14 septembre 2026<\/span>\n          <span class=\"lfd-art__dot\" aria-hidden=\"true\">\u00b7<\/span>\n          <span>Derni\u00e8re r\u00e9vision : 14 septembre 2026<\/span>\n        <\/div>\n      <\/div>\n      <div class=\"lfd-art-head__media\">\n        <img fetchpriority=\"high\" src=\"https:\/\/www.luxflat-direct.com\/wp-content\/uploads\/2026\/09\/luxflat-nb-limpertsberg.webp\" alt=\"Luxembourg-Ville au-dessus de la vall\u00e9e \u2014 visuel du guide des loyers\" width=\"1440\" height=\"960\" fetchpriority=\"high\" decoding=\"async\" class=\"lfd-art-head__img\">\n      <\/div>\n    <\/div>\n  <\/div>\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-6547de9 e-con-full e-flex e-con e-parent\" data-id=\"6547de9\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f14978c elementor-widget elementor-widget-html\" data-id=\"f14978c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div class=\"lfd lfd-band lfd-art-body\">\n  <div class=\"lfd-wrap\">\n    <div class=\"lfd-art-grid\">\n\n      <article class=\"lfd-art__col\">\n        <p class=\"lfd-art__lede\">Le Luxembourg est cher. Il n\u2019y a pas de mani\u00e8re utile d\u2019att\u00e9nuer ce constat, et tout guide qui s\u2019y essaie vous fait perdre du temps. Le pays affiche l\u2019un des co\u00fbts de la vie les plus \u00e9lev\u00e9s d\u2019Europe, une p\u00e9nurie de logements que la construction ne comble pas depuis vingt ans, et un march\u00e9 locatif o\u00f9 une annonce attire couramment quinze \u00e0 vingt candidats en quarante-huit heures.<\/p>\n        <p class=\"lfd-art__p lfd-art__p--m20\">Plus utile que des paroles rassurantes : la pr\u00e9cision. Combien cela co\u00fbte r\u00e9ellement, o\u00f9 va l\u2019argent, et o\u00f9 se trouvent les v\u00e9ritables leviers.<\/p>\n        <p class=\"lfd-art__p lfd-art__p--m20\">Ce guide d\u00e9taille les fourchettes de loyers actuelles par type d\u2019appartement et par quartier, explique pourquoi les chiffres sont ce qu\u2019ils sont, pr\u00e9cise ce qu\u2019un loyer luxembourgeois comprend habituellement (moins que vous ne le pensez) et passe en revue les moyens concrets de r\u00e9duire la facture \u2014 dont certains sont plus efficaces qu\u2019il n\u2019y para\u00eet, et l\u2019un d\u2019eux \u00e9chappe totalement \u00e0 la plupart des nouveaux arrivants.<\/p>\n\n        <div class=\"lfd-nb-callout\"><div class=\"lfd-nb-callout__t\">Une remarque sur les chiffres<\/div><div class=\"lfd-nb-callout__d\">Au Luxembourg, les donn\u00e9es locatives varient sensiblement d\u2019une source \u00e0 l\u2019autre selon la m\u00e9thodologie et l\u2019\u00e9chantillon. Tout ce qui suit est pr\u00e9sent\u00e9 sous forme de fourchettes refl\u00e9tant un consensus g\u00e9n\u00e9ral de march\u00e9, et non comme un devis ou une moyenne faisant autorit\u00e9. Utilisez-les pour cadrer votre budget, puis confrontez-les aux annonces en ligne.<\/div><\/div>\n\n        <h2 id=\"short\">En bref<\/h2>\n        <div class=\"lfd-art__bullets\">\n  <div class=\"lfd-art__bullet\"><svg width=\"17\" height=\"17\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--lfd-forest)\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><div><strong>Moyenne nationale :<\/strong> environ 1 600\u20131 800 \u20ac par mois, soit pr\u00e8s de 28\u201331 \u20ac le m\u00b2.<\/div><\/div>\n  <div class=\"lfd-art__bullet\"><svg width=\"17\" height=\"17\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--lfd-forest)\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><div><strong>Studios :<\/strong> environ 850\u20131 800 \u20ac, tr\u00e8s variable selon la localisation.<\/div><\/div>\n  <div class=\"lfd-art__bullet\"><svg width=\"17\" height=\"17\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--lfd-forest)\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><div><strong>Une chambre :<\/strong> environ 1 700\u20132 800 \u20ac, Luxembourg-Ville se situant g\u00e9n\u00e9ralement entre 1 950 et 2 300 \u20ac.<\/div><\/div>\n  <div class=\"lfd-art__bullet\"><svg width=\"17\" height=\"17\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--lfd-forest)\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><div><strong>Deux chambres :<\/strong> environ 1 600\u20136 900 \u20ac, la fourchette la plus large de toutes \u2014 et celle o\u00f9 le choix du quartier p\u00e8se le plus.<\/div><\/div>\n  <div class=\"lfd-art__bullet\"><svg width=\"17\" height=\"17\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--lfd-forest)\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><div><strong>Meubl\u00e9<\/strong> co\u00fbte environ 15 \u00e0 30 % de plus que non meubl\u00e9, m\u00eame si la comparaison est trompeuse tant que l\u2019on ne tient pas compte de ce que chaque formule comprend.<\/div><\/div>\n  <div class=\"lfd-art__bullet\"><svg width=\"17\" height=\"17\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--lfd-forest)\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><div><strong>Les loyers devraient augmenter de 3 \u00e0 5 %<\/strong> au cours de 2026.<\/div><\/div>\n<\/div>\n\n        <h2 id=\"by-type\">Loyer moyen par type d\u2019appartement<\/h2>\n        <div class=\"lfd-cmp lfd-cmp--cost4\" role=\"table\" aria-label=\"Loyer moyen par type d\u2019appartement\">\n          <div class=\"lfd-cmp__row lfd-cmp__row--head\"><div class=\"lfd-cmp__h\">Type<\/div><div class=\"lfd-cmp__h lfd-cmp__h--lux\">Fourchette habituelle<\/div><div class=\"lfd-cmp__h\">En ville<\/div><div class=\"lfd-cmp__h\">Remarques<\/div><\/div>\n          <div class=\"lfd-cmp__row\"><div class=\"lfd-cmp__c\">Studio<\/div><div class=\"lfd-cmp__c lfd-cmp__c--lux\">\u20ac850\u20131,800<\/div><div class=\"lfd-cmp__c lfd-cmp__c--trad\">Moiti\u00e9 sup\u00e9rieure de la fourchette<\/div><div class=\"lfd-cmp__c lfd-cmp__c--trad lfd-cmp__c--sm\">Le bas de fourchette \u00e0 850 \u20ac correspond aux communes p\u00e9riph\u00e9riques, pas \u00e0 la capitale. Les studios centraux descendent rarement sous le milieu de fourchette.<\/div><\/div>\n          <div class=\"lfd-cmp__row\"><div class=\"lfd-cmp__c\">Une chambre<\/div><div class=\"lfd-cmp__c lfd-cmp__c--lux\">\u20ac1,700\u20132,800<\/div><div class=\"lfd-cmp__c lfd-cmp__c--trad\">1 950\u20132 300 \u20ac en g\u00e9n\u00e9ral<\/div><div class=\"lfd-cmp__c lfd-cmp__c--trad lfd-cmp__c--sm\">Le segment le plus disput\u00e9 \u2014 demande maximale, rotation la plus rapide.<\/div><\/div>\n          <div class=\"lfd-cmp__row\"><div class=\"lfd-cmp__c\">Deux chambres<\/div><div class=\"lfd-cmp__c lfd-cmp__c--lux\">\u20ac1,600\u20136,900<\/div><div class=\"lfd-cmp__c lfd-cmp__c--trad\">\u20ac1,800\u20136,900<\/div><div class=\"lfd-cmp__c lfd-cmp__c--trad lfd-cmp__c--sm\">De loin la fourchette la plus large \u2014 presque enti\u00e8rement d\u00e9termin\u00e9e par le quartier. Le haut du panier, ce sont Belair et Hollerich ; voir la section suivante.<\/div><\/div>\n        <\/div>\n\n        <p class=\"lfd-art__p lfd-art__p--m24\">Quelques \u00e9l\u00e9ments que ce tableau ne montre pas et qu\u2019il faut conna\u00eetre.<\/p>\n        <p class=\"lfd-art__p lfd-art__p--m20\"><strong>Le bas de chaque fourchette est g\u00e9ographique, pas une bonne affaire.<\/strong> Un studio \u00e0 850 \u20ac n\u2019est pas un studio central bien plac\u00e9 : c\u2019est un studio ailleurs. Lisez les chiffres bas comme \u00ab ce qui est atteignable en \u00e9largissant votre zone de recherche \u00bb, et non \u00ab ce qu\u2019il faut attendre \u00e0 Belair \u00bb.<\/p>\n        <p class=\"lfd-art__p lfd-art__p--m20\"><strong>L\u2019\u00e9cart sur les deux-chambres est l\u2019\u00e9l\u00e9ment d\u00e9terminant.<\/strong> Entre Bonnevoie \u00e0 1 800 \u20ac et Belair \u00e0 6 900 \u20ac, l\u2019\u00e9cart atteint environ 5 100 \u20ac par mois \u2014 plusieurs fois le loyer complet d\u2019un appartement moins cher. Aucune autre d\u00e9cision ne p\u00e8sera autant sur votre budget logement que le choix du quartier.<\/p>\n        <p class=\"lfd-art__p lfd-art__p--m20\"><strong>Le prix au m\u00e8tre carr\u00e9 traverse toute cette analyse.<\/strong> \u00c0 28\u201331 \u20ac\/m\u00b2, un appartement spacieux dans une commune moins ch\u00e8re peut co\u00fbter autant qu\u2019un logement exigu dans le centre. Si la surface compte pour vous, le prix au m\u00b2 est souvent un meilleur outil de comparaison que le loyer affich\u00e9.<\/p>\n\n        <figure class=\"lfd-art__fig lfd-art__fig--nb\"><img loading=\"lazy\" src=\"https:\/\/www.luxflat-direct.com\/wp-content\/uploads\/2026\/09\/luxflat-nb-hollerich.webp\" alt=\"Immeubles r\u00e9sidentiels \u00e0 Luxembourg-Ville illustrant le parc locatif typique.\" width=\"1440\" height=\"960\" loading=\"lazy\" decoding=\"async\"><\/figure>\n\n        <h2 id=\"by-area\">Les loyers par quartier : Luxembourg-Ville et la Grande R\u00e9gion<\/h2>\n        <p class=\"lfd-art__p\">Fourchettes mensuelles pour un deux-chambres, \u00e0 titre indicatif, class\u00e9es de la plus \u00e9lev\u00e9e \u00e0 la plus basse. Elles correspondent aux chiffres de notre <a href=\"\/fr\/meilleurs-quartiers-ou-louer-au-luxembourg\/\">guide des meilleurs quartiers o\u00f9 louer au Luxembourg<\/a>, qui d\u00e9crit ce que l\u2019on vit r\u00e9ellement dans chaque quartier.<\/p>\n\n        <div class=\"lfd-cmp lfd-cmp--cost3\" role=\"table\" aria-label=\"Loyer d\u2019un deux-chambres par quartier\">\n          <div class=\"lfd-cmp__row lfd-cmp__row--head\"><div class=\"lfd-cmp__h\">Quartier<\/div><div class=\"lfd-cmp__h lfd-cmp__h--lux\">Fourchette deux-chambres<\/div><div class=\"lfd-cmp__h\">Pourquoi<\/div><\/div>\n          <div class=\"lfd-cmp__row\"><div class=\"lfd-cmp__c\">Belair<\/div><div class=\"lfd-cmp__c lfd-cmp__c--lux lfd-cmp__c--nowrap\">\u20ac5,850\u20136,900<\/div><div class=\"lfd-cmp__c lfd-cmp__c--trad\">Calme, verdoyant, tourn\u00e9 vers les familles, tr\u00e8s faible rotation<\/div><\/div>\n          <div class=\"lfd-cmp__row\"><div class=\"lfd-cmp__c\">Hollerich<\/div><div class=\"lfd-cmp__c lfd-cmp__c--lux lfd-cmp__c--nowrap\">\u20ac5,850<\/div><div class=\"lfd-cmp__c lfd-cmp__c--trad\">En mutation \u2014 ancienne zone industrielle avec du neuf et des reconversions<\/div><\/div>\n          <div class=\"lfd-cmp__row\"><div class=\"lfd-cmp__c\">Limpertsberg<\/div><div class=\"lfd-cmp__c lfd-cmp__c--lux lfd-cmp__c--nowrap\">\u20ac3,000\u20133,500<\/div><div class=\"lfd-cmp__c lfd-cmp__c--trad\">Centre accessible \u00e0 pied, communaut\u00e9 internationale \u00e9tablie, lyc\u00e9es fran\u00e7ais<\/div><\/div>\n          <div class=\"lfd-cmp__row\"><div class=\"lfd-cmp__c\">Kirchberg<\/div><div class=\"lfd-cmp__c lfd-cmp__c--lux lfd-cmp__c--nowrap\">\u20ac2,800\u20133,200<\/div><div class=\"lfd-cmp__c lfd-cmp__c--trad\">Institutions europ\u00e9ennes, b\u00e2ti moderne de qualit\u00e9, trajet \u00e0 pied pour de nombreux employeurs<\/div><\/div>\n          <div class=\"lfd-cmp__row\"><div class=\"lfd-cmp__c\">Gasperich<\/div><div class=\"lfd-cmp__c lfd-cmp__c--lux lfd-cmp__c--nowrap\">\u20ac2,200\u20132,800<\/div><div class=\"lfd-cmp__c lfd-cmp__c--trad\">Constructions neuves, proximit\u00e9 du quartier d&#x27;affaires de la Cloche d&#x27;Or<\/div><\/div>\n          <div class=\"lfd-cmp__row\"><div class=\"lfd-cmp__c\">Bonnevoie<\/div><div class=\"lfd-cmp__c lfd-cmp__c--lux lfd-cmp__c--nowrap\">\u20ac1,800\u20132,500<\/div><div class=\"lfd-cmp__c lfd-cmp__c--trad\">15 \u00e0 20 % sous la moyenne de la ville, jeune et multiculturel<\/div><\/div>\n          <div class=\"lfd-cmp__row\"><div class=\"lfd-cmp__c\">Gare<\/div><div class=\"lfd-cmp__c lfd-cmp__c--lux lfd-cmp__c--nowrap\">\u20ac1,800\u20132,500<\/div><div class=\"lfd-cmp__c lfd-cmp__c--trad\">Acc\u00e8s \u00e0 la gare, dense et urbain<\/div><\/div>\n        <\/div>\n\n        <h3 class=\"lfd-art__h3\">Au-del\u00e0 de la capitale \u2014 la Grande R\u00e9gion luxembourgeoise<\/h3>\n        <p class=\"lfd-art__p lfd-art__p--m14\">C\u2019est l\u00e0 que se trouvent les \u00e9conomies les plus importantes, et l\u00e0 o\u00f9 la plupart de ceux qui consultent les loyers de Luxembourg-Ville ne pensent jamais \u00e0 regarder.<\/p>\n        <p class=\"lfd-art__p lfd-art__p--m20\">Esch-sur-Alzette, Differdange, Dudelange et les communes du nord affichent toutes des prix nettement inf\u00e9rieurs \u00e0 ceux de la capitale. L\u2019\u00e9cart exact varie selon la ville et le bien : la consigne honn\u00eate est donc la suivante \u2014 lancez la m\u00eame recherche dans deux ou trois de ces villes et comparez directement. La diff\u00e9rence saute g\u00e9n\u00e9ralement aux yeux en dix minutes.<\/p>\n        <p class=\"lfd-art__p lfd-art__p--m20\">Ce qui rend la d\u00e9marche utile plut\u00f4t que n\u00e9gligeable : <strong>les transports publics sont gratuits partout au Luxembourg depuis 2020.<\/strong> Bus, trams et trains, sur tout le territoire, sans frais. L\u2019argument financier consistant \u00e0 payer le surco\u00fbt de la capitale pour raccourcir son trajet n\u2019existe tout simplement plus. Le <em>temps de trajet<\/em> compte toujours \u2014 Esch n\u2019est pas Kirchberg \u2014 mais le co\u00fbt r\u00e9current d\u2019habiter plus loin est nul, ce qui change le calcul pour beaucoup de gens.<\/p>\n\n        <h2 id=\"why-high\">Pourquoi les loyers luxembourgeois sont si \u00e9lev\u00e9s<\/h2>\n        <p class=\"lfd-art__p\">Un bref \u00e9clairage, car il explique pourquoi attendre une baisse des prix est une mauvaise strat\u00e9gie.<\/p>\n        <div class=\"lfd-art__bullets\">\n  <div class=\"lfd-art__bullet\"><svg width=\"17\" height=\"17\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--lfd-bronze)\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"9\"\/><path d=\"M12 8v5\"\/><path d=\"M12 16h.01\"\/><\/svg><div><strong>L&#x27;offre n&#x27;a pas suivi la population.<\/strong> La population du Luxembourg cro\u00eet rapidement depuis vingt ans, port\u00e9e par l&#x27;emploi international. La construction n&#x27;a pas suivi. Il en r\u00e9sulte une p\u00e9nurie structurelle plut\u00f4t qu&#x27;une tension passag\u00e8re.<\/div><\/div>\n  <div class=\"lfd-art__bullet\"><svg width=\"17\" height=\"17\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--lfd-bronze)\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"9\"\/><path d=\"M12 8v5\"\/><path d=\"M12 16h.01\"\/><\/svg><div><strong>Le tissu d&#x27;employeurs est exceptionnellement concentr\u00e9 et exceptionnellement bien r\u00e9mun\u00e9r\u00e9.<\/strong> Les institutions europ\u00e9ennes, la Cour de justice de l&#x27;Union europ\u00e9enne, un secteur financier important et un p\u00f4le de services professionnels en expansion recrutent tous \u00e0 l&#x27;international, et ces salari\u00e9s arrivent avec un besoin de logement dat\u00e9. Cela entretient une demande soutenue sur le haut de gamme, qui fl\u00e9chit peu lorsque la conjoncture change.<\/div><\/div>\n  <div class=\"lfd-art__bullet\"><svg width=\"17\" height=\"17\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--lfd-bronze)\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"9\"\/><path d=\"M12 8v5\"\/><path d=\"M12 16h.01\"\/><\/svg><div><strong>La vacance est extr\u00eamement faible.<\/strong> Moins de 3 % dans les zones tr\u00e8s demand\u00e9es. C&#x27;est concr\u00e8tement ce qui produit le ph\u00e9nom\u00e8ne des quinze \u00e0 vingt candidats en 48 heures \u2014 ce n&#x27;est pas une exag\u00e9ration marketing, c&#x27;est ce \u00e0 quoi ressemble un taux de vacance inf\u00e9rieur \u00e0 3 % vu du c\u00f4t\u00e9 locataire.<\/div><\/div>\n  <div class=\"lfd-art__bullet\"><svg width=\"17\" height=\"17\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--lfd-bronze)\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"9\"\/><path d=\"M12 8v5\"\/><path d=\"M12 16h.01\"\/><\/svg><div><strong>Le pays est petit.<\/strong> Le foncier est limit\u00e9, et le bassin de d\u00e9placement s&#x27;\u00e9tend sur trois fronti\u00e8res, ce qui met les travailleurs frontaliers en concurrence pour les m\u00eames logements proches des axes de transport.<\/div><\/div>\n<\/div>\n        <p class=\"lfd-art__p lfd-art__p--after\">\u00c0 retenir : c\u2019est un march\u00e9 de vendeurs, et ce depuis longtemps. Organisez-vous en cons\u00e9quence plut\u00f4t que d\u2019esp\u00e9rer qu\u2019il se retourne.<\/p>\n\n        <h2 id=\"included\">Ce que le loyer comprend, et ce qu\u2019il ne comprend pas<\/h2>\n        <p class=\"lfd-art__p\">C\u2019est l\u00e0 que les budgets d\u00e9rapent, car au Luxembourg le montant affich\u00e9 n\u2019est g\u00e9n\u00e9ralement pas celui que vous payez.<\/p>\n        <p class=\"lfd-art__p lfd-art__p--m20\">Dans un bail classique, ne sont g\u00e9n\u00e9ralement <strong>pas<\/strong> compris :<\/p>\n        <div class=\"lfd-art__bullets\">\n  <div class=\"lfd-art__bullet\"><svg width=\"17\" height=\"17\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#B03A2E\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M18 6 6 18\"\/><path d=\"m6 6 12 12\"\/><\/svg><div><strong>Les charges<\/strong> \u2014 \u00e9lectricit\u00e9, eau, chauffage, souscrits et factur\u00e9s \u00e0 votre nom.<\/div><\/div>\n  <div class=\"lfd-art__bullet\"><svg width=\"17\" height=\"17\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#B03A2E\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M18 6 6 18\"\/><path d=\"m6 6 12 12\"\/><\/svg><div><strong>Les charges d\u2019immeuble et de service<\/strong> \u2014 g\u00e9n\u00e9ralement factur\u00e9es sous forme de provision mensuelle avec r\u00e9gularisation annuelle, d\u2019o\u00f9 une facture de solde qui arrive des mois plus tard.<\/div><\/div>\n  <div class=\"lfd-art__bullet\"><svg width=\"17\" height=\"17\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#B03A2E\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M18 6 6 18\"\/><path d=\"m6 6 12 12\"\/><\/svg><div><strong>Internet<\/strong> \u2014 votre propre abonnement, votre propre installation.<\/div><\/div>\n  <div class=\"lfd-art__bullet\"><svg width=\"17\" height=\"17\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#B03A2E\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M18 6 6 18\"\/><path d=\"m6 6 12 12\"\/><\/svg><div><strong>Le stationnement<\/strong> \u2014 souvent factur\u00e9 \u00e0 part chaque mois, en particulier en ville.<\/div><\/div>\n<\/div>\n        <p class=\"lfd-art__p lfd-art__p--after\">Ensemble, les charges et frais de service ajoutent couramment <strong>200\u2013300 \u20ac par mois<\/strong> au loyer affich\u00e9. C\u2019est une distorsion notable lorsqu\u2019on compare des annonces, et tous les propri\u00e9taires ne la pr\u00e9sentent pas de la m\u00eame mani\u00e8re.<\/p>\n        <p class=\"lfd-art__p lfd-art__p--m20\">Parfois compris, \u00e0 v\u00e9rifier explicitement : l\u2019entretien de l\u2019immeuble, l\u2019eau dans certains b\u00e2timents, et une cave ou un espace de rangement.<\/p>\n        <p class=\"lfd-art__p lfd-art__p--m20\">La formule tout compris fonctionne autrement. Sur LuxFlat Direct, le prix mensuel de chaque annonce couvre l\u2019\u00e9lectricit\u00e9, l\u2019eau, le chauffage, les charges d\u2019immeuble et de service, le Wi-Fi et le mobilier \u2014 un seul montant, aucun contrat distinct \u00e0 ouvrir ou \u00e0 cl\u00f4turer. Pour un s\u00e9jour court, cela compte davantage qu\u2019il n\u2019y para\u00eet, car ouvrir et fermer des contrats de fourniture pour quelques mois entra\u00eene ses propres frais et d\u00e9lais. Le d\u00e9tail complet, y compris les forfaits uniques de chaque c\u00f4t\u00e9 : <a href=\"\/fr\/aide\/combien-ca-coute\/\">comment fonctionnent les co\u00fbts de location sur LuxFlat Direct<\/a>.<\/p>\n        <p class=\"lfd-art__lede lfd-art__lede--m20\">Lorsque vous comparez deux annonces, la seule comparaison \u00e9quitable porte sur la d\u00e9pense mensuelle totale. Une annonce non meubl\u00e9e \u00e0 1 900 \u20ac et une annonce tout compris \u00e0 2 200 \u20ac sont plus proches qu\u2019il n\u2019y para\u00eet.<\/p>\n\n        <figure class=\"lfd-art__fig lfd-art__fig--nb\"><img loading=\"lazy\" src=\"https:\/\/www.luxflat-direct.com\/wp-content\/uploads\/2026\/09\/luxflat-nb-gare.webp\" alt=\"Le quartier de la Gare et le viaduc de la Passerelle \u00e0 Luxembourg-Ville\" width=\"1440\" height=\"954\" loading=\"lazy\" decoding=\"async\"><figcaption class=\"lfd-art__cap\">Le lieu o\u00f9 vous habitez p\u00e8se sur votre budget logement plus que toute autre d\u00e9cision.<\/figcaption><\/figure>\n\n        <h2 id=\"reduce\">Comment r\u00e9duire ce que vous payez<\/h2>\n        <p class=\"lfd-art__p\">Cinq leviers, class\u00e9s approximativement selon leur impact.<\/p>\n        <div class=\"lfd-nb-qs lfd-nb-qs--levers\">\n          <div class=\"lfd-nb-q\"><div class=\"lfd-nb-q__n\">1<\/div><div class=\"lfd-nb-q__b\"><div class=\"lfd-nb-q__t\">\u00c9largissez votre zone de recherche.<\/div><div class=\"lfd-nb-q__a\">La plus grande \u00e9conomie possible, et la plus souvent n\u00e9glig\u00e9e. L&#x27;\u00e9cart entre la capitale et la Grande R\u00e9gion d\u00e9passe de loin tout ce que vous obtiendrez en n\u00e9gociant. Avec la gratuit\u00e9 nationale des transports, le co\u00fbt r\u00e9current d&#x27;habiter plus loin est nul.<\/div><\/div><\/div>\n          <div class=\"lfd-nb-q\"><div class=\"lfd-nb-q__n\">2<\/div><div class=\"lfd-nb-q__b\"><div class=\"lfd-nb-q__t\">Comparez le co\u00fbt mensuel total, pas le loyer.<\/div><div class=\"lfd-nb-q__a\">Deux \u00e0 trois cents euros par mois s\u00e9parent un loyer affich\u00e9 d&#x27;un loyer tout compris. Beaucoup choisissent l&#x27;appartement &quot;moins cher&quot; et paient davantage.<\/div><\/div><\/div>\n          <div class=\"lfd-nb-q\"><div class=\"lfd-nb-q__n\">3<\/div><div class=\"lfd-nb-q__b\"><div class=\"lfd-nb-q__t\">Envisagez une chambre plut\u00f4t qu\u2019un appartement entier.<\/div><div class=\"lfd-nb-q__a\">Les chambres en colocation d\u00e9marrent nettement en dessous de tout logement ind\u00e9pendant \u2014 \u00e0 Bonnevoie, \u00e0 partir de 620\u2013800 \u20ac par mois environ. Pour une personne arrivant seule avec un contrat \u00e0 dur\u00e9e d\u00e9termin\u00e9e, c\u2019est souvent ce qui s\u00e9pare un budget confortable d\u2019un budget tendu, et cela r\u00e8gle en m\u00eame temps la question sociale.<\/div><\/div><\/div>\n          <div class=\"lfd-nb-q\"><div class=\"lfd-nb-q__n\">4<\/div><div class=\"lfd-nb-q__b\"><div class=\"lfd-nb-q__t\">Adaptez l\u2019ameublement \u00e0 la dur\u00e9e de votre s\u00e9jour.<\/div><div class=\"lfd-nb-q__a\">Le meubl\u00e9 co\u00fbte 15 \u00e0 30 % de plus par mois, mais si vous restez moins d&#x27;un an, acheter des meubles et souscrire des contrats pour un logement que vous allez quitter revient plus cher que ce surco\u00fbt.<\/div><\/div><\/div>\n          <div class=\"lfd-nb-q\"><div class=\"lfd-nb-q__n\">5<\/div><div class=\"lfd-nb-q__b\"><div class=\"lfd-nb-q__t\">Soyez pr\u00eat \u00e0 agir vite.<\/div><div class=\"lfd-nb-q__a\">Sur un march\u00e9 comptant quinze \u00e0 vingt candidats par annonce, celui qui peut r\u00e9pondre imm\u00e9diatement avec un dossier complet dispose d&#x27;un avantage r\u00e9el sur celui qui rassemble encore ses fiches de paie. Sur LuxFlat Direct, il s&#x27;agit d&#x27;une seule v\u00e9rification \u2014 pi\u00e8ce d&#x27;identit\u00e9 et justificatif de revenus, examin\u00e9s sous 24 heures \u2014 apr\u00e8s quoi vous pouvez adresser des demandes \u00e0 n&#x27;importe quelle annonce sans reconstituer de dossier.<\/div><\/div><\/div>\n        <\/div>\n        <p class=\"lfd-art__p lfd-art__p--m24\">Le calcul du seuil de rentabilit\u00e9 de l\u2019ameublement est expos\u00e9 dans notre <a href=\"\/fr\/appartement-meuble-ou-non-meuble-luxembourg\/\">guide meubl\u00e9 ou non meubl\u00e9<\/a>. Pr\u00eat \u00e0 chercher ? <a href=\"\/fr\/apartments\/\">Parcourez les appartements meubl\u00e9s dans toute la Grande R\u00e9gion luxembourgeoise<\/a>.<\/p>\n\n        <h2 id=\"market\">\u00c0 quoi ressemble le march\u00e9 en 2026<\/h2>\n        <p class=\"lfd-art__lede lfd-art__lede--m16\">Les loyers devraient augmenter de 3 \u00e0 5 % cette ann\u00e9e. Pour un appartement \u00e0 2 000 \u20ac, cela repr\u00e9sente 60 \u00e0 100 \u20ac de plus par mois d\u2019ici la fin de l\u2019ann\u00e9e.<\/p>\n        <p class=\"lfd-art__p lfd-art__p--m18\">Deux cons\u00e9quences \u00e0 anticiper. Si vous arrivez plus tard en 2026, calez votre budget sur le haut des fourchettes de cet article plut\u00f4t que sur le milieu. Et si vous h\u00e9sitez entre un engagement long et une formule flexible, la tendance haussi\u00e8re plaide l\u00e9g\u00e8rement pour se fixer \u2014 sans toutefois justifier de signer un bail de trois ans dont vous n\u2019\u00eates pas s\u00fbr, puisque le rompre co\u00fbte plus cher qu\u2019une ann\u00e9e de hausse de loyer.<\/p>\n        <p class=\"lfd-art__p lfd-art__p--m20\">La tension sur la vacance ne montre aucun signe de d\u00e9tente. Anticipez la concurrence, pr\u00e9parez vos documents \u00e0 l\u2019avance, et choisissez votre quartier avant de commencer \u00e0 parcourir les annonces plut\u00f4t qu\u2019apr\u00e8s.<\/p>\n\n        <div class=\"lfd-art__faqwrap\">\n          <h2 id=\"faq\">Questions fr\u00e9quentes<\/h2>\n          <div class=\"lfd-faq\" data-lfd-faq>\n  <div class=\"lfd-faq__item is-open\">\n    <button class=\"lfd-faq__q\" type=\"button\" aria-expanded=\"true\" aria-controls=\"lfd-faq-blog-cost-0\">\n      <span>Quel est le loyer moyen au Luxembourg en 2026 ?<\/span>\n      <svg class=\"lfd-faq__chev\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"m6 9 6 6 6-6\"\/><\/svg>\n    <\/button>\n    <div class=\"lfd-faq__a\" id=\"lfd-faq-blog-cost-0\" role=\"region\">La moyenne nationale se situe autour de 1 600\u20131 800 \u20ac par mois, soit environ 28\u201331 \u20ac le m\u00e8tre carr\u00e9. Luxembourg-Ville se situe nettement au-dessus \u2014 comptez 1 950\u20132 300 \u20ac pour un une-chambre et de 1 800 \u00e0 6 900 \u20ac pour un deux-chambres selon le quartier. Les loyers devraient augmenter de 3 \u00e0 5 % au cours de 2026.<\/div>\n  <\/div>\n  <div class=\"lfd-faq__item\">\n    <button class=\"lfd-faq__q\" type=\"button\" aria-expanded=\"false\" aria-controls=\"lfd-faq-blog-cost-1\">\n      <span>Luxembourg-Ville est-elle plus ch\u00e8re que sa p\u00e9riph\u00e9rie ?<\/span>\n      <svg class=\"lfd-faq__chev\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"m6 9 6 6 6-6\"\/><\/svg>\n    <\/button>\n    <div class=\"lfd-faq__a\" id=\"lfd-faq-blog-cost-1\" role=\"region\">Nettement. Les quartiers haut de gamme atteignent 2 800\u20133 500 \u20ac pour un deux-chambres, et Belair comme Hollerich d\u00e9marrent \u00e0 5 850 \u20ac, tandis que des quartiers comme Bonnevoie et la Gare se situent plut\u00f4t entre 1 800 et 2 500 \u20ac. Les villes de la Grande R\u00e9gion au sens large \u2014 Esch-sur-Alzette, Differdange, Dudelange \u2014 sont moins ch\u00e8res encore. Les transports publics \u00e9tant gratuits sur tout le territoire depuis 2020, habiter plus loin ne co\u00fbte rien en trajets.<\/div>\n  <\/div>\n  <div class=\"lfd-faq__item\">\n    <button class=\"lfd-faq__q\" type=\"button\" aria-expanded=\"false\" aria-controls=\"lfd-faq-blog-cost-2\">\n      <span>O\u00f9 louer le moins cher au Luxembourg ?<\/span>\n      <svg class=\"lfd-faq__chev\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"m6 9 6 6 6-6\"\/><\/svg>\n    <\/button>\n    <div class=\"lfd-faq__a\" id=\"lfd-faq-blog-cost-2\" role=\"region\">Dans Luxembourg-Ville, Bonnevoie est syst\u00e9matiquement le quartier le plus abordable, avec des loyers inf\u00e9rieurs d\u2019environ 15 \u00e0 20 % \u00e0 la moyenne de la ville, et la Gare affiche des tarifs comparables. Hors de la capitale, les villes du sud et les communes du nord sont moins ch\u00e8res encore. Louer une chambre plut\u00f4t qu\u2019un appartement entier reste l\u2019option la plus \u00e9conomique, \u00e0 partir de 620 \u20ac par mois environ \u00e0 Bonnevoie.<\/div>\n  <\/div>\n  <div class=\"lfd-faq__item\">\n    <button class=\"lfd-faq__q\" type=\"button\" aria-expanded=\"false\" aria-controls=\"lfd-faq-blog-cost-3\">\n      <span>Quels revenus faut-il pour louer au Luxembourg ?<\/span>\n      <svg class=\"lfd-faq__chev\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"m6 9 6 6 6-6\"\/><\/svg>\n    <\/button>\n    <div class=\"lfd-faq__a\" id=\"lfd-faq-blog-cost-3\" role=\"region\">Les propri\u00e9taires veulent g\u00e9n\u00e9ralement s\u2019assurer que le loyer est confortablement couvert par vos revenus nets et demandent des justificatifs \u2014 fiches de paie, ou contrat de travail ou convention de stage si vous n\u2019avez pas encore \u00e9t\u00e9 r\u00e9mun\u00e9r\u00e9. Il n\u2019existe pas de ratio officiel unique : le test pratique consiste donc \u00e0 v\u00e9rifier que vos documents montrent un loyer soutenable au regard de vos autres engagements.<\/div>\n  <\/div>\n<\/div>\n        <\/div>\n        <script type=\"application\/ld+json\">{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Quel est le loyer moyen au Luxembourg en 2026 ?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"La moyenne nationale se situe autour de 1 600\u20131 800 \u20ac par mois, soit environ 28\u201331 \u20ac le m\u00e8tre carr\u00e9. Luxembourg-Ville se situe nettement au-dessus \u2014 comptez 1 950\u20132 300 \u20ac pour un une-chambre et de 1 800 \u00e0 6 900 \u20ac pour un deux-chambres selon le quartier. Les loyers devraient augmenter de 3 \u00e0 5 % au cours de 2026.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Luxembourg-Ville est-elle plus ch\u00e8re que sa p\u00e9riph\u00e9rie ?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Nettement. Les quartiers haut de gamme atteignent 2 800\u20133 500 \u20ac pour un deux-chambres, et Belair comme Hollerich d\u00e9marrent \u00e0 5 850 \u20ac, tandis que des quartiers comme Bonnevoie et la Gare se situent plut\u00f4t entre 1 800 et 2 500 \u20ac. Les villes de la Grande R\u00e9gion au sens large \u2014 Esch-sur-Alzette, Differdange, Dudelange \u2014 sont moins ch\u00e8res encore. Les transports publics \u00e9tant gratuits sur tout le territoire depuis 2020, habiter plus loin ne co\u00fbte rien en trajets.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"O\u00f9 louer le moins cher au Luxembourg ?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Dans Luxembourg-Ville, Bonnevoie est syst\u00e9matiquement le quartier le plus abordable, avec des loyers inf\u00e9rieurs d\u2019environ 15 \u00e0 20 % \u00e0 la moyenne de la ville, et la Gare affiche des tarifs comparables. Hors de la capitale, les villes du sud et les communes du nord sont moins ch\u00e8res encore. Louer une chambre plut\u00f4t qu\u2019un appartement entier reste l\u2019option la plus \u00e9conomique, \u00e0 partir de 620 \u20ac par mois environ \u00e0 Bonnevoie.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Quels revenus faut-il pour louer au Luxembourg ?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Les propri\u00e9taires veulent g\u00e9n\u00e9ralement s\u2019assurer que le loyer est confortablement couvert par vos revenus nets et demandent des justificatifs \u2014 fiches de paie, ou contrat de travail ou convention de stage si vous n\u2019avez pas encore \u00e9t\u00e9 r\u00e9mun\u00e9r\u00e9. Il n\u2019existe pas de ratio officiel unique : le test pratique consiste donc \u00e0 v\u00e9rifier que vos documents montrent un loyer soutenable au regard de vos autres engagements.\"\n      }\n    }\n  ]\n}<\/script>\n      <\/article>\n\n      <aside class=\"lfd-toc\">\n        <div class=\"lfd-toc__in\">\n          <div class=\"lfd-toc__k\">SUR CETTE PAGE<\/div>\n          <nav class=\"lfd-toc__list\">\n            <a href=\"#short\">En bref<\/a>\n            <a href=\"#by-type\">Loyer moyen par type d\u2019appartement<\/a>\n            <a href=\"#by-area\">Les loyers par quartier<\/a>\n            <a href=\"#why-high\">Pourquoi les loyers sont si \u00e9lev\u00e9s<\/a>\n            <a href=\"#included\">Ce qui est compris, et ce qui ne l&#x27;est pas<\/a>\n            <a href=\"#reduce\">Comment r\u00e9duire ce que vous payez<\/a>\n            <a href=\"#market\">Le march\u00e9 en 2026<\/a>\n            <a href=\"#faq\">Questions fr\u00e9quentes<\/a>\n          <\/nav>\n          <div class=\"lfd-toc__foot\">Vous cherchez un logement d\u00e8s maintenant ? <a href=\"\/fr\/apartments\/\">Parcourir les locations meubl\u00e9es<\/a>.<\/div>\n        <\/div>\n      <\/aside>\n\n    <\/div>\n  <\/div>\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-03a86a4 e-con-full e-flex e-con e-parent\" data-id=\"03a86a4\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-920f1e0 elementor-widget elementor-widget-html\" data-id=\"920f1e0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div class=\"lfd lfd-band lfd-rel\">\n  <div class=\"lfd-wrap\">\n    <div class=\"lfd-rel__k\">\u00c0 LIRE AUSSI SUR LE BLOG<\/div>\n    <h2>Articles li\u00e9s<\/h2>\n    <div class=\"lfd-rel__grid\">\n      <a class=\"lfd-rel__card\" href=\"\/fr\/meilleurs-quartiers-ou-louer-au-luxembourg\/\">\n        <div class=\"lfd-rel__media\"><img loading=\"lazy\" src=\"https:\/\/www.luxflat-direct.com\/wp-content\/uploads\/2026\/09\/luxflat-nb-belair.webp\" alt=\"Belair vu d\u2019en haut : maisons de ville et avenues bord\u00e9es d\u2019arbres\" width=\"1440\" height=\"810\" loading=\"lazy\" decoding=\"async\"><\/div>\n        <div class=\"lfd-rel__txt\">\n          <span class=\"lfd-rel__tag\">Quartiers<\/span>\n          <span class=\"lfd-rel__t\">Les meilleurs quartiers o\u00f9 louer au Luxembourg en 2026<\/span>\n          <span class=\"lfd-rel__d\">Sept quartiers compar\u00e9s sur le prix, le caract\u00e8re, les transports et le profil auquel chacun convient.<\/span>\n          <span class=\"lfd-rel__r\">~12 min de lecture<\/span>\n        <\/div>\n      <\/a>\n<a class=\"lfd-rel__card\" href=\"\/fr\/appartement-meuble-ou-non-meuble-luxembourg\/\">\n        <div class=\"lfd-rel__media\"><img loading=\"lazy\" src=\"https:\/\/www.luxflat-direct.com\/wp-content\/uploads\/2026\/09\/luxflat-nb-gasperich.webp\" alt=\"Les Sky Apartments \u00e0 la Cloche d&#x27;Or, \u00e0 Gasperich\" width=\"1440\" height=\"960\" loading=\"lazy\" decoding=\"async\"><\/div>\n        <div class=\"lfd-rel__txt\">\n          <span class=\"lfd-rel__tag\">Guides locataires<\/span>\n          <span class=\"lfd-rel__t\">Appartements meubl\u00e9s ou non meubl\u00e9s au Luxembourg<\/span>\n          <span class=\"lfd-rel__d\">L\u2019\u00e9cart de co\u00fbt r\u00e9el, la dur\u00e9e des baux, et une r\u00e9ponse claire selon la dur\u00e9e de votre s\u00e9jour.<\/span>\n          <span class=\"lfd-rel__r\">~11 min de lecture<\/span>\n        <\/div>\n      <\/a>\n<a class=\"lfd-rel__card\" href=\"\/fr\/aide\/combien-ca-coute\/\">\n        <div class=\"lfd-rel__media\"><img loading=\"lazy\" src=\"https:\/\/www.luxflat-direct.com\/wp-content\/uploads\/2026\/09\/luxflat-nb-bonnevoie.webp\" alt=\"Les toits de Luxembourg-Ville au-dessus de l\u2019Alzette\" width=\"1440\" height=\"959\" loading=\"lazy\" decoding=\"async\"><\/div>\n        <div class=\"lfd-rel__txt\">\n          <span class=\"lfd-rel__tag\">Paiements &amp; tarifs<\/span>\n          <span class=\"lfd-rel__t\">Combien co\u00fbte une location via LuxFlat Direct ?<\/span>\n          <span class=\"lfd-rel__d\">Le loyer tout compris, le forfait unique r\u00e9gl\u00e9 de chaque c\u00f4t\u00e9, et la comparaison avec une agence.<\/span>\n          <span class=\"lfd-rel__r\">~4 min de lecture<\/span>\n        <\/div>\n      <\/a>\n<a class=\"lfd-rel__card\" href=\"\/fr\/nomade-numerique-independant-luxembourg\/\">\n        <div class=\"lfd-rel__media\"><img loading=\"lazy\" src=\"https:\/\/www.luxflat-direct.com\/wp-content\/uploads\/2026\/09\/luxflat-nb-kirchberg.webp\" alt=\"Vue de Luxembourg-Ville avec les b\u00e2timents des institutions europ\u00e9ennes sur le plateau de Kirchberg\" width=\"1440\" height=\"958\" loading=\"lazy\" decoding=\"async\"><\/div>\n        <div class=\"lfd-rel__txt\">\n          <span class=\"lfd-rel__tag\">Guides locataires<\/span>\n          <span class=\"lfd-rel__t\">Louer au Luxembourg en tant que nomade num\u00e9rique ou ind\u00e9pendant : le guide complet 2026<\/span>\n          <span class=\"lfd-rel__d\">Cet article expose clairement la r\u00e9alit\u00e9 des visas, puis consacre l\u2019essentiel de son propos au probl\u00e8me dont personne n\u2019avertit les ind\u00e9pendants : une d\u00e9pendance circulaire entre logement et d\u00e9marches administratives, capable de bloquer une installation pendant des semaines.<\/span>\n          <span class=\"lfd-rel__r\">~13 min de lecture<\/span>\n        <\/div>\n      <\/a>\n    <\/div>\n    <div class=\"lfd-rel__back\">\n      <a class=\"lfd-btn lfd-btn--outline-navy\" href=\"\/fr\/blog\/\"><svg width=\"17\" height=\"17\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M19 12H5\"\/><polyline points=\"12 19 5 12 12 5\"\/><\/svg>Retour au blog<\/a>\n    <\/div>\n  <\/div>\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"","protected":false},"author":7,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[],"class_list":["post-1437","post","type-post","status-publish","format-standard","hentry","category-non-classe"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Combien co\u00fbte la location au Luxembourg en 2026 ? Guide<\/title>\n<meta name=\"description\" content=\"Combien co\u00fbte la location au Luxembourg en 2026 ? Loyers moyens par type et par quartier, pourquoi les prix sont \u00e9lev\u00e9s, comment payer moins.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.luxflat-direct.com\/fr\/cout-de-la-location-au-luxembourg\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Combien co\u00fbte la location au Luxembourg en 2026 ? Guide\" \/>\n<meta property=\"og:description\" content=\"Combien co\u00fbte la location au Luxembourg en 2026 ? Loyers moyens par type et par quartier, pourquoi les prix sont \u00e9lev\u00e9s, comment payer moins.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.luxflat-direct.com\/fr\/cout-de-la-location-au-luxembourg\/\" \/>\n<meta property=\"og:site_name\" content=\"LuxFlat Direct\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-24T18:28:45+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-24T18:54:39+00:00\" \/>\n<meta name=\"author\" content=\"Hemal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Hemal\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.luxflat-direct.com\\\/fr\\\/cout-de-la-location-au-luxembourg\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.luxflat-direct.com\\\/fr\\\/cout-de-la-location-au-luxembourg\\\/\"},\"author\":{\"name\":\"Hemal\",\"@id\":\"https:\\\/\\\/www.luxflat-direct.com\\\/fr\\\/#\\\/schema\\\/person\\\/dcb4e3b7a490141a97ffe242aefc1b86\"},\"headline\":\"Combien co\u00fbte la location au Luxembourg en 2026 ?\",\"datePublished\":\"2026-09-24T18:28:45+00:00\",\"dateModified\":\"2026-09-24T18:54:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.luxflat-direct.com\\\/fr\\\/cout-de-la-location-au-luxembourg\\\/\"},\"wordCount\":8,\"publisher\":{\"@id\":\"https:\\\/\\\/www.luxflat-direct.com\\\/fr\\\/#organization\"},\"inLanguage\":\"fr-FR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.luxflat-direct.com\\\/fr\\\/cout-de-la-location-au-luxembourg\\\/\",\"url\":\"https:\\\/\\\/www.luxflat-direct.com\\\/fr\\\/cout-de-la-location-au-luxembourg\\\/\",\"name\":\"Combien co\u00fbte la location au Luxembourg en 2026 ? Guide\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.luxflat-direct.com\\\/fr\\\/#website\"},\"datePublished\":\"2026-09-24T18:28:45+00:00\",\"dateModified\":\"2026-09-24T18:54:39+00:00\",\"description\":\"Combien co\u00fbte la location au Luxembourg en 2026 ? Loyers moyens par type et par quartier, pourquoi les prix sont \u00e9lev\u00e9s, comment payer moins.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.luxflat-direct.com\\\/fr\\\/cout-de-la-location-au-luxembourg\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.luxflat-direct.com\\\/fr\\\/cout-de-la-location-au-luxembourg\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.luxflat-direct.com\\\/fr\\\/cout-de-la-location-au-luxembourg\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.luxflat-direct.com\\\/fr\\\/accueil\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Combien co\u00fbte la location au Luxembourg en 2026 ?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.luxflat-direct.com\\\/fr\\\/#website\",\"url\":\"https:\\\/\\\/www.luxflat-direct.com\\\/fr\\\/\",\"name\":\"LuxFlat Direct\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.luxflat-direct.com\\\/fr\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.luxflat-direct.com\\\/fr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.luxflat-direct.com\\\/fr\\\/#organization\",\"name\":\"LuxFlat Direct\",\"url\":\"https:\\\/\\\/www.luxflat-direct.com\\\/fr\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.luxflat-direct.com\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.luxflat-direct.com\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/tmp-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.luxflat-direct.com\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/tmp-logo.jpg\",\"width\":204,\"height\":57,\"caption\":\"LuxFlat Direct\"},\"image\":{\"@id\":\"https:\\\/\\\/www.luxflat-direct.com\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.luxflat-direct.com\\\/fr\\\/#\\\/schema\\\/person\\\/dcb4e3b7a490141a97ffe242aefc1b86\",\"name\":\"Hemal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d2c898a30af3a67c31fde19c9f0fa61bbec86b12224b6d16aa5dc476262e567a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d2c898a30af3a67c31fde19c9f0fa61bbec86b12224b6d16aa5dc476262e567a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d2c898a30af3a67c31fde19c9f0fa61bbec86b12224b6d16aa5dc476262e567a?s=96&d=mm&r=g\",\"caption\":\"Hemal\"},\"url\":\"https:\\\/\\\/www.luxflat-direct.com\\\/fr\\\/author\\\/hemal\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Combien co\u00fbte la location au Luxembourg en 2026 ? Guide","description":"Combien co\u00fbte la location au Luxembourg en 2026 ? Loyers moyens par type et par quartier, pourquoi les prix sont \u00e9lev\u00e9s, comment payer moins.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.luxflat-direct.com\/fr\/cout-de-la-location-au-luxembourg\/","og_locale":"fr_FR","og_type":"article","og_title":"Combien co\u00fbte la location au Luxembourg en 2026 ? Guide","og_description":"Combien co\u00fbte la location au Luxembourg en 2026 ? Loyers moyens par type et par quartier, pourquoi les prix sont \u00e9lev\u00e9s, comment payer moins.","og_url":"https:\/\/www.luxflat-direct.com\/fr\/cout-de-la-location-au-luxembourg\/","og_site_name":"LuxFlat Direct","article_published_time":"2026-09-24T18:28:45+00:00","article_modified_time":"2026-09-24T18:54:39+00:00","author":"Hemal","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"Hemal"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.luxflat-direct.com\/fr\/cout-de-la-location-au-luxembourg\/#article","isPartOf":{"@id":"https:\/\/www.luxflat-direct.com\/fr\/cout-de-la-location-au-luxembourg\/"},"author":{"name":"Hemal","@id":"https:\/\/www.luxflat-direct.com\/fr\/#\/schema\/person\/dcb4e3b7a490141a97ffe242aefc1b86"},"headline":"Combien co\u00fbte la location au Luxembourg en 2026 ?","datePublished":"2026-09-24T18:28:45+00:00","dateModified":"2026-09-24T18:54:39+00:00","mainEntityOfPage":{"@id":"https:\/\/www.luxflat-direct.com\/fr\/cout-de-la-location-au-luxembourg\/"},"wordCount":8,"publisher":{"@id":"https:\/\/www.luxflat-direct.com\/fr\/#organization"},"inLanguage":"fr-FR"},{"@type":"WebPage","@id":"https:\/\/www.luxflat-direct.com\/fr\/cout-de-la-location-au-luxembourg\/","url":"https:\/\/www.luxflat-direct.com\/fr\/cout-de-la-location-au-luxembourg\/","name":"Combien co\u00fbte la location au Luxembourg en 2026 ? Guide","isPartOf":{"@id":"https:\/\/www.luxflat-direct.com\/fr\/#website"},"datePublished":"2026-09-24T18:28:45+00:00","dateModified":"2026-09-24T18:54:39+00:00","description":"Combien co\u00fbte la location au Luxembourg en 2026 ? Loyers moyens par type et par quartier, pourquoi les prix sont \u00e9lev\u00e9s, comment payer moins.","breadcrumb":{"@id":"https:\/\/www.luxflat-direct.com\/fr\/cout-de-la-location-au-luxembourg\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.luxflat-direct.com\/fr\/cout-de-la-location-au-luxembourg\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.luxflat-direct.com\/fr\/cout-de-la-location-au-luxembourg\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.luxflat-direct.com\/fr\/accueil\/"},{"@type":"ListItem","position":2,"name":"Combien co\u00fbte la location au Luxembourg en 2026 ?"}]},{"@type":"WebSite","@id":"https:\/\/www.luxflat-direct.com\/fr\/#website","url":"https:\/\/www.luxflat-direct.com\/fr\/","name":"LuxFlat Direct","description":"","publisher":{"@id":"https:\/\/www.luxflat-direct.com\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.luxflat-direct.com\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/www.luxflat-direct.com\/fr\/#organization","name":"LuxFlat Direct","url":"https:\/\/www.luxflat-direct.com\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.luxflat-direct.com\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/www.luxflat-direct.com\/wp-content\/uploads\/2026\/06\/tmp-logo.jpg","contentUrl":"https:\/\/www.luxflat-direct.com\/wp-content\/uploads\/2026\/06\/tmp-logo.jpg","width":204,"height":57,"caption":"LuxFlat Direct"},"image":{"@id":"https:\/\/www.luxflat-direct.com\/fr\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.luxflat-direct.com\/fr\/#\/schema\/person\/dcb4e3b7a490141a97ffe242aefc1b86","name":"Hemal","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/secure.gravatar.com\/avatar\/d2c898a30af3a67c31fde19c9f0fa61bbec86b12224b6d16aa5dc476262e567a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/d2c898a30af3a67c31fde19c9f0fa61bbec86b12224b6d16aa5dc476262e567a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d2c898a30af3a67c31fde19c9f0fa61bbec86b12224b6d16aa5dc476262e567a?s=96&d=mm&r=g","caption":"Hemal"},"url":"https:\/\/www.luxflat-direct.com\/fr\/author\/hemal\/"}]}},"_links":{"self":[{"href":"https:\/\/www.luxflat-direct.com\/fr\/wp-json\/wp\/v2\/posts\/1437","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.luxflat-direct.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.luxflat-direct.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.luxflat-direct.com\/fr\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.luxflat-direct.com\/fr\/wp-json\/wp\/v2\/comments?post=1437"}],"version-history":[{"count":1,"href":"https:\/\/www.luxflat-direct.com\/fr\/wp-json\/wp\/v2\/posts\/1437\/revisions"}],"predecessor-version":[{"id":1454,"href":"https:\/\/www.luxflat-direct.com\/fr\/wp-json\/wp\/v2\/posts\/1437\/revisions\/1454"}],"wp:attachment":[{"href":"https:\/\/www.luxflat-direct.com\/fr\/wp-json\/wp\/v2\/media?parent=1437"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.luxflat-direct.com\/fr\/wp-json\/wp\/v2\/categories?post=1437"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.luxflat-direct.com\/fr\/wp-json\/wp\/v2\/tags?post=1437"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}