{"id":1438,"date":"2026-09-24T18:31:13","date_gmt":"2026-09-24T18:31:13","guid":{"rendered":"https:\/\/www.luxflat-direct.com\/nomade-numerique-independant-luxembourg\/"},"modified":"2026-09-24T18:54:43","modified_gmt":"2026-09-24T18:54:43","slug":"nomade-numerique-independant-luxembourg","status":"publish","type":"post","link":"https:\/\/www.luxflat-direct.com\/fr\/nomade-numerique-independant-luxembourg\/","title":{"rendered":"Louer au Luxembourg en tant que nomade num\u00e9rique ou ind\u00e9pendant"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"1438\" class=\"elementor elementor-1438 elementor-bc-flex-widget\" data-elementor-post-type=\"post\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0687766 e-con-full e-flex e-con e-parent\" data-id=\"0687766\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-938973e elementor-widget elementor-widget-html\" data-id=\"938973e\" 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-90f9253 e-con-full e-flex e-con e-parent\" data-id=\"90f9253\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d9d2d04 elementor-widget elementor-widget-html\" data-id=\"d9d2d04\" 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\">Nomades num\u00e9riques &amp; ind\u00e9pendants<\/span>\n    <\/nav>\n    <div class=\"lfd-art-head__row\">\n      <div class=\"lfd-art-head__main\">\n        <span class=\"lfd-art__badge\">Guides locataires<\/span>\n        <h1 class=\"lfd-art__h1\">Louer au Luxembourg en tant que nomade num\u00e9rique ou ind\u00e9pendant : le guide complet 2026<\/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>~13 min de lecture<\/span>\n          <span class=\"lfd-art__dot\" aria-hidden=\"true\">\u00b7<\/span>\n          <span>15 septembre 2026<\/span>\n          <span class=\"lfd-art__dot\" aria-hidden=\"true\">\u00b7<\/span>\n          <span>Derni\u00e8re r\u00e9vision : 15 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-kirchberg.webp\" alt=\"Vue de Luxembourg-Ville avec les b\u00e2timents des institutions europ\u00e9ennes sur le plateau de Kirchberg\" width=\"1440\" height=\"958\" 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-758a864 e-con-full e-flex e-con e-parent\" data-id=\"758a864\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e57e0ec elementor-widget elementor-widget-html\" data-id=\"e57e0ec\" 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        <div class=\"lfd-nm-note\"><svg width=\"19\" height=\"19\" 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><div class=\"lfd-nm-note__t\">Avant de commencer<\/div><div class=\"lfd-nm-note__d\">Cet article fournit des informations g\u00e9n\u00e9rales, et non un conseil juridique ou en immigration. Les exigences \u00e9voluent, les situations individuelles diff\u00e8rent, et les cons\u00e9quences d\u2019une erreur sont lourdes. V\u00e9rifiez tout ce sur quoi vous comptez agir aupr\u00e8s de <a href=\"https:\/\/guichet.public.lu\/\" target=\"_blank\" rel=\"noopener\">Guichet.lu<\/a>, le portail officiel de l\u2019administration publique luxembourgeoise, ou aupr\u00e8s d\u2019un avocat sp\u00e9cialis\u00e9 en droit des \u00e9trangers.<\/div><\/div><\/div>\n\n        <p class=\"lfd-art__lede lfd-nm-m32\">Le Luxembourg est une destination atypique pour les travailleurs ind\u00e9pendants. Petit, cher, exceptionnellement bien connect\u00e9, il poss\u00e8de l\u2019un des \u00e9cosyst\u00e8mes de services professionnels et de technologies les plus solides d\u2019Europe rapport\u00e9 \u00e0 sa taille. Ce qu\u2019il n\u2019a pas, c\u2019est pr\u00e9cis\u00e9ment ce que la plupart des guides pour nomades pr\u00e9supposent : un visa pour nomades num\u00e9riques.<\/p>\n        <p class=\"lfd-art__p lfd-art__p--m20\">Cette absence conditionne tout le reste. Si vous \u00eates ressortissant de l\u2019UE ou de l\u2019EEE, cela ne change presque rien \u2014 vous pouvez arriver et travailler. Sinon, le Luxembourg vous laisse deux options honn\u00eates : quatre-vingt-dix jours comme visiteur sans droit de travailler, ou le titre de s\u00e9jour pour travailleur ind\u00e9pendant, qui constitue une v\u00e9ritable proc\u00e9dure d\u2019immigration avec exigences de capital et plan d\u2019affaires \u00e0 l\u2019appui. Il n\u2019existe pas de voie interm\u00e9diaire confortable, et les guides qui laissent entendre le contraire vous desservent.<\/p>\n        <p class=\"lfd-art__p lfd-art__p--m20\">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. Ce probl\u00e8me a une solution de contournement connue, qu\u2019il vaut mieux comprendre avant de r\u00e9server quoi que ce soit.<\/p>\n\n        <h2 id=\"visa\">La r\u00e9alit\u00e9 des visas : ce que le Luxembourg propose r\u00e9ellement<\/h2>\n        <p class=\"lfd-art__lede lfd-art__lede--m16\"><strong>Il n\u2019existe pas de visa pour nomades num\u00e9riques au Luxembourg.<\/strong> Non pas un visa difficile \u00e0 obtenir \u2014 un visa qui n\u2019existe pas. Plusieurs pays europ\u00e9ens en ont instaur\u00e9 ; pas le Luxembourg.<\/p>\n        <p class=\"lfd-art__p lfd-art__p--m20\"><strong>Si vous \u00eates ressortissant de l\u2019UE ou de l\u2019EEE<\/strong>, rien de tout cela ne s\u2019applique. Vous pouvez entrer, vivre et travailler librement. Vous devrez tout de m\u00eame vous enregistrer aupr\u00e8s de votre commune et trouver un logement, mais la question de l\u2019immigration est r\u00e9gl\u00e9e.<\/p>\n        <p class=\"lfd-art__p lfd-art__p--m20\"><strong>Si vous \u00eates ressortissant d\u2019un pays hors UE<\/strong>, vous avez deux voies possibles.<\/p>\n        <div class=\"lfd-nm-paths\">\n          <div class=\"lfd-nm-path\"><div class=\"lfd-nm-path__k\">Voie n\u00b0 1<\/div><div class=\"lfd-nm-path__t\">Le s\u00e9jour de 90 jours en qualit\u00e9 de visiteur<\/div><div class=\"lfd-nm-path__d\">Selon les r\u00e8gles Schengen standard, vous pouvez s\u00e9journer au maximum 90 jours sur toute p\u00e9riode glissante de 180 jours. Durant ce laps de temps, vous n\u2019avez aucun droit de travailler \u2014 y compris en t\u00e9l\u00e9travail pour des clients \u00e0 l\u2019\u00e9tranger. C\u2019est le point que l\u2019on interpr\u00e8te mal. &quot;Personne ne le remarquera&quot; n\u2019est pas une position juridique, et le risque de sanction repose enti\u00e8rement sur vous. Pour un s\u00e9jour bref \u2014 tester le pays, une mission client, quelques mois entre deux bases \u2014 la formule est viable et ne n\u00e9cessite aucune d\u00e9marche.<\/div><\/div>\n          <div class=\"lfd-nm-path\"><div class=\"lfd-nm-path__k\">Voie n\u00b0 2<\/div><div class=\"lfd-nm-path__t\">Le titre de s\u00e9jour pour travailleur ind\u00e9pendant<\/div><div class=\"lfd-nm-path__d\">Si vous souhaitez vivre et travailler au Luxembourg comme professionnel ind\u00e9pendant au-del\u00e0 de 90 jours, c\u2019est la voie \u00e0 suivre. La validit\u00e9 initiale est de trois ans. Il s\u2019agit d\u2019une proc\u00e9dure de fond assortie d\u2019exigences financi\u00e8res, d\u00e9taill\u00e9e plus bas.<\/div><\/div>\n        <\/div>\n        <p class=\"lfd-art__p lfd-art__p--m24\"><strong>Deux seuils que l\u2019on confond, \u00e0 tort.<\/strong> La limite Schengen de 90 jours est une r\u00e8gle <em>d\u2019immigration<\/em> portant sur la dur\u00e9e de votre pr\u00e9sence. <strong>La r\u00e9sidence fiscale est distincte et se d\u00e9clenche \u00e0 partir de 183 jours sur une ann\u00e9e civile.<\/strong> Ce sont des chiffres diff\u00e9rents, r\u00e9gissant des objets diff\u00e9rents, administr\u00e9s par des autorit\u00e9s diff\u00e9rentes. Respecter l\u2019un ne dit rien de votre situation au regard de l\u2019autre, et raisonner sur une version hybride des deux est une erreur fr\u00e9quente et co\u00fbteuse.<\/p>\n\n        <h2 id=\"housing\">Le cercle vicieux du logement<\/h2>\n        <p class=\"lfd-art__p\">Voici ce qui prend les gens au d\u00e9pourvu, et cela n\u2019a pas de rapport direct avec les visas.<\/p>\n        <p class=\"lfd-art__p lfd-art__p--m20\"><strong>Les propri\u00e9taires h\u00e9sitent souvent \u00e0 signer un bail avec une personne qui ne d\u00e9tient pas encore de titre de s\u00e9jour d\u00e9finitif.<\/strong> De leur point de vue, c\u2019est raisonnable \u2014 ils \u00e9valuent si vous serez encore l\u00e9galement dans le pays dans six mois, et une demande en cours d\u2019instruction n\u2019est pas une r\u00e9ponse.<\/p>\n        <p class=\"lfd-art__p lfd-art__p--m20\"><strong>Or la proc\u00e9dure de titre de s\u00e9jour et d\u2019enregistrement exige g\u00e9n\u00e9ralement un justificatif d\u2019adresse locale.<\/strong> Apr\u00e8s votre arriv\u00e9e, vous devez vous enregistrer aupr\u00e8s de votre commune \u2014 la d\u00e9claration d\u2019arriv\u00e9e \u00e0 la mairie \u2014 g\u00e9n\u00e9ralement dans les trois jours, et cet enregistrement alimente la suite de la proc\u00e9dure.<\/p>\n        <div class=\"lfd-nm-quote\"><div class=\"lfd-nm-quote__t\">Pas de bail sans titre, pas de titre sans adresse.<\/div><div class=\"lfd-nm-quote__d\">On arrive en pensant r\u00e9gler la question du logement d\u00e8s la premi\u00e8re semaine, et l\u2019on passe trois semaines \u00e0 l\u2019h\u00f4tel \u00e0 voir son budget s\u2019\u00e9vaporer, sans pouvoir faire avancer ni l\u2019un ni l\u2019autre volet du probl\u00e8me. Financi\u00e8rement, c\u2019est pire qu\u2019il n\u2019y para\u00eet : un mois d\u2019h\u00f4tel au Luxembourg co\u00fbte plus cher que plusieurs mois de loyer \u2014 sans rien construire vers l\u2019adresse dont vous avez r\u00e9ellement besoin.<\/div><\/div>\n\n        <h2 id=\"solution\">Comment une location meubl\u00e9e flexible d\u00e9bloque la situation<\/h2>\n        <p class=\"lfd-art__lede lfd-art__lede--m16\">La solution de contournement classique est simple : <strong>r\u00e9servez un logement meubl\u00e9 de courte dur\u00e9e pour vos premi\u00e8res semaines ou votre premier mois, \u00e0 une adresse utilisable pour votre d\u00e9claration d\u2019arriv\u00e9e \u00e0 la commune.<\/strong> Vous disposez ainsi imm\u00e9diatement d\u2019une adresse enregistrable, ce qui permet aux d\u00e9marches de d\u00e9marrer pendant que vous cherchez un logement de plus longue dur\u00e9e depuis le pays plut\u00f4t que depuis l\u2019\u00e9tranger.<\/p>\n        <p class=\"lfd-art__p lfd-art__p--m20\">Trois conditions rendent la man\u0153uvre efficace, et les trois comptent.<\/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\">L\u2019adresse doit \u00eatre utilisable pour la d\u00e9claration d\u2019arriv\u00e9e.<\/div><div class=\"lfd-nb-q__a\">C\u2019est le point non n\u00e9gociable, et il d\u00e9pend du bien et du propri\u00e9taire concern\u00e9s plut\u00f4t que de la plateforme par laquelle vous r\u00e9servez. Faites-le confirmer explicitement avant de r\u00e9server \u2014 tous les logements de courte dur\u00e9e ne conviennent pas, et le d\u00e9couvrir \u00e0 la mairie g\u00e2che un apr\u00e8s-midi. Sur LuxFlat Direct, posez la question dans votre demande et notre \u00e9quipe vous aidera \u00e0 l\u2019\u00e9tablir avec le propri\u00e9taire avant toute signature.<\/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\">La dur\u00e9e doit \u00eatre assez courte pour ne pas vous enfermer.<\/div><div class=\"lfd-nb-q__a\">Un bail luxembourgeois classique court sur un \u00e0 trois ans, avec un pr\u00e9avis de trois mois de part et d\u2019autre. En signer un comme solution transitoire va totalement \u00e0 l\u2019encontre du but recherch\u00e9.<\/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\">Le logement doit \u00eatre meubl\u00e9 et pr\u00eat.<\/div><div class=\"lfd-nb-q__a\">Vous arrivez avec des bagages, pas avec un conteneur, et vous devez \u00eatre op\u00e9rationnel en quelques jours.<\/div><\/div><\/div>\n        <\/div>\n        <div class=\"lfd-nm-fit\">\n          <div class=\"lfd-nm-fit__t\">Ce qu\u2019apporte LuxFlat Direct<\/div>\n          <div class=\"lfd-nm-fit__d\">Les s\u00e9jours vont <strong>d\u2019un mois \u00e0 une dur\u00e9e illimit\u00e9e<\/strong>, vous pouvez donc prendre trois mois pendant que votre titre progresse, puis prolonger ou partir selon l\u2019\u00e9volution de votre situation. Chaque annonce est meubl\u00e9e et tout compris \u2014 \u00e9lectricit\u00e9, eau, chauffage, charges d\u2019immeuble et de service, Wi-Fi et mobilier figurent dans le montant mensuel, sans contrat de fourniture \u00e0 ouvrir \u00e0 votre nom ni \u00e0 cl\u00f4turer \u00e0 votre d\u00e9part. Pour une personne en pleine proc\u00e9dure d\u2019immigration, ne pas avoir \u00e0 ouvrir quatre comptes de fourniture \u00e0 une adresse qu\u2019elle ne conservera peut-\u00eatre pas vaut plus qu\u2019il n\u2019y para\u00eet.<\/div>\n          <div class=\"lfd-nm-fit__d lfd-nm-fit__d--m14\">La v\u00e9rification du locataire tient en une seule \u00e9tape : une pi\u00e8ce d\u2019identit\u00e9 valide et un justificatif de revenus, examin\u00e9s sous 24 heures, apr\u00e8s quoi votre dossier est pr\u00e9-valid\u00e9 pour n\u2019importe quelle annonce. Si vous travaillez \u00e0 votre compte et n\u2019avez pas de fiches de paie, contactez-nous avant de candidater \u2014 indiquez-nous comment vos revenus sont document\u00e9s et notre \u00e9quipe vous confirmera ce qui convient \u00e0 votre situation.<\/div>\n          <div class=\"lfd-nm-fit__cta\"><a class=\"lfd-nm-fit__btn\" href=\"\/fr\/apartments\/\">Parcourez les appartements meubl\u00e9s dans toute la Grande R\u00e9gion luxembourgeoise<\/a><\/div>\n        <\/div>\n        <p class=\"lfd-art__p lfd-art__p--m24\"><strong>Un d\u00e9tail juridique utile \u00e0 conna\u00eetre<\/strong> pendant que vous comparez les options : la loi luxembourgeoise plafonne la garantie locative \u00e0 <strong>deux mois de loyer de base<\/strong>. Si un propri\u00e9taire demande davantage, c\u2019est hors la loi. En de\u00e7\u00e0 de ce plafond, les cautions varient selon le propri\u00e9taire et l\u2019annonce.<\/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-nomad-workspace.webp\" alt=\"Appartement meubl\u00e9 au Luxembourg avec un bureau et un espace de travail am\u00e9nag\u00e9 pour le t\u00e9l\u00e9travail\" width=\"1536\" height=\"1024\" loading=\"lazy\" decoding=\"async\"><figcaption class=\"lfd-art__cap\">Meubl\u00e9 et pr\u00eat pour travailler \u2014 une adresse enregistrable en quelques jours plut\u00f4t qu\u2019en quelques semaines.<\/figcaption><\/figure>\n\n        <h2 id=\"permit\">Ce qu\u2019exige le titre de s\u00e9jour pour travailleur ind\u00e9pendant<\/h2>\n        <p class=\"lfd-art__p\">Vue d\u2019ensemble, car le d\u00e9tail officiel se trouve sur Guichet.lu et y a sa place, plut\u00f4t que dans un article de blog susceptible de se p\u00e9rimer.<\/p>\n        <p class=\"lfd-art__p lfd-art__p--m20\"><strong>Le seuil financier.<\/strong> Pr\u00e9voyez environ <strong>25 000 \u00e0 50 000 \u20ac d\u2019\u00e9pargne ou de capital professionnel<\/strong> pour d\u00e9montrer la viabilit\u00e9 du projet. C\u2019est l\u2019exigence qui d\u00e9termine le plus souvent si cette voie est r\u00e9aliste, et il vaut mieux la v\u00e9rifier avant d\u2019investir du temps dans quoi que ce soit d\u2019autre.<\/p>\n        <p class=\"lfd-art__p lfd-art__p--m20\"><strong>La question de l\u2019autorisation d\u2019\u00e9tablissement.<\/strong> Les activit\u00e9s commerciales \u2014 commerce en ligne, agences, la plupart des services technologiques \u2014 n\u00e9cessitent g\u00e9n\u00e9ralement une autorisation d\u2019\u00e9tablissement (<em>autorisation d'\u00e9tablissement<\/em>) au pr\u00e9alable. Les professions lib\u00e9rales \u2014 architecture, travail intellectuel ind\u00e9pendant de type expertise comptable \u2014 peuvent en \u00eatre dispens\u00e9es. La cat\u00e9gorie dont vous relevez modifie sensiblement la proc\u00e9dure : d\u00e9terminez-la t\u00f4t, car le classement n\u2019est pas toujours intuitif.<\/p>\n        <div class=\"lfd-nm-seq\">\n          <div class=\"lfd-nm-seq__h\">Le d\u00e9roul\u00e9, en substance<\/div>\n          <div class=\"lfd-nm-seq__r\"><div class=\"lfd-nm-seq__n\">1<\/div><div class=\"lfd-nm-seq__d\"><strong>Plan d\u2019affaires<\/strong> \u2014 d\u00e9montrant que l\u2019activit\u00e9 est viable et d\u00fbment qualifi\u00e9e.<\/div><\/div>\n          <div class=\"lfd-nm-seq__r\"><div class=\"lfd-nm-seq__n\">2<\/div><div class=\"lfd-nm-seq__d\"><strong>Autorisation d\u2019\u00e9tablissement<\/strong> \u2014 lorsque votre activit\u00e9 en exige une.<\/div><\/div>\n          <div class=\"lfd-nm-seq__r\"><div class=\"lfd-nm-seq__n\">3<\/div><div class=\"lfd-nm-seq__d\"><strong>Autorisation de s\u00e9jour temporaire<\/strong> \u2014 \u00e0 demander depuis l\u2019\u00e9tranger.<\/div><\/div>\n          <div class=\"lfd-nm-seq__r\"><div class=\"lfd-nm-seq__n\">4<\/div><div class=\"lfd-nm-seq__d\"><strong>Visa D<\/strong> \u2014 le visa de long s\u00e9jour, d\u00e9livr\u00e9 sur la base de l\u2019autorisation.<\/div><\/div>\n          <div class=\"lfd-nm-seq__r\"><div class=\"lfd-nm-seq__n\">5<\/div><div class=\"lfd-nm-seq__d\"><strong>Enregistrement communal<\/strong> \u2014 la d\u00e9claration d\u2019arriv\u00e9e, g\u00e9n\u00e9ralement dans les trois jours suivant votre arriv\u00e9e.<\/div><\/div>\n          <div class=\"lfd-nm-seq__r\"><div class=\"lfd-nm-seq__n\">6<\/div><div class=\"lfd-nm-seq__d\"><strong>Carte de s\u00e9jour biom\u00e9trique<\/strong> \u2014 environ 80 \u20ac.<\/div><\/div>\n        <\/div>\n        <p class=\"lfd-art__p lfd-art__p--m24\">Deux remarques pratiques. La cinqui\u00e8me \u00e9tape est celle o\u00f9 le probl\u00e8me de logement \u00e9voqu\u00e9 plus haut devient concret, avec un d\u00e9lai de trois jours. Et l\u2019ensemble du parcours prend des mois, pas des semaines \u2014 l\u2019exigence de 25 000 \u00e0 50 000 \u20ac existe en partie parce qu\u2019il faut subvenir \u00e0 ses besoins pendant cette p\u00e9riode.<\/p>\n        <p class=\"lfd-art__p lfd-art__p--m20\">Exigences actuelles compl\u00e8tes : <a href=\"https:\/\/guichet.public.lu\/\" target=\"_blank\" rel=\"noopener\">Guichet.lu<\/a>. Compte tenu des montants en jeu, un avocat sp\u00e9cialis\u00e9 en droit des \u00e9trangers constitue une d\u00e9pense raisonnable plut\u00f4t qu\u2019un luxe.<\/p>\n\n        <h2 id=\"budget\">Budg\u00e9ter son installation<\/h2>\n        <p class=\"lfd-art__p\">Au-del\u00e0 du loyer, les co\u00fbts qui surprennent les ind\u00e9pendants.<\/p>\n        <div class=\"lfd-nm-costs\">\n          <div class=\"lfd-nm-cost\"><div class=\"lfd-nm-cost__top\"><div class=\"lfd-nm-cost__t\">S\u00e9curit\u00e9 sociale (CCSS)<\/div><div class=\"lfd-nm-cost__fig\">~25 \u00e0 28 % des revenus<\/div><\/div><div class=\"lfd-nm-cost__d\">Les cotisations sont obligatoires pour tous les travailleurs ind\u00e9pendants au Luxembourg. Aucune dispense n\u2019est possible, et il n\u2019existe pas d\u2019\u00e9quivalent des r\u00e9gimes all\u00e9g\u00e9s que certains pays proposent aux ind\u00e9pendants.<\/div><\/div>\n          <div class=\"lfd-nm-cost\"><div class=\"lfd-nm-cost__top\"><div class=\"lfd-nm-cost__t\">Base CCSS la premi\u00e8re ann\u00e9e<\/div><div class=\"lfd-nm-cost__fig\">~680\u2013750 \u20ac \/ mois<\/div><\/div><div class=\"lfd-nm-cost__d\">Sans historique fiscal luxembourgeois, vous \u00eates appel\u00e9 \u00e0 cotiser sur une base forfaitaire plut\u00f4t que sur vos revenus r\u00e9els. C\u2019est une obligation fixe d\u00e8s le premier mois, que vos factures aient \u00e9t\u00e9 r\u00e9gl\u00e9es ou non. Budg\u00e9tez-la comme une certitude, pas comme un pourcentage.<\/div><\/div>\n          <div class=\"lfd-nm-cost\"><div class=\"lfd-nm-cost__top\"><div class=\"lfd-nm-cost__t\">Caution<\/div><div class=\"lfd-nm-cost__fig\">Maximum 2 mois de loyer<\/div><\/div><div class=\"lfd-nm-cost__d\">Plafonn\u00e9e par la loi \u00e0 deux mois de loyer de base. En de\u00e7\u00e0 de ce plafond, le montant est fix\u00e9 par chaque propri\u00e9taire.<\/div><\/div>\n          <div class=\"lfd-nm-cost\"><div class=\"lfd-nm-cost__top\"><div class=\"lfd-nm-cost__t\">Loyer<\/div><div class=\"lfd-nm-cost__fig\">Studios \u00e0 partir d\u2019environ 850 \u20ac<\/div><\/div><div class=\"lfd-nm-cost__d\">Les studios se situent entre 850 et 1 800 \u20ac environ, et les une-chambre entre 1 700 et 2 800 \u20ac, avec de fortes variations selon le quartier \u2014 la vue d\u2019ensemble figure dans notre guide sur le co\u00fbt de la location au Luxembourg.<\/div><\/div>\n          <div class=\"lfd-nm-cost\"><div class=\"lfd-nm-cost__top\"><div class=\"lfd-nm-cost__t\">Espace de coworking<\/div><div class=\"lfd-nm-cost__fig\">Variable selon l\u2019espace<\/div><\/div><div class=\"lfd-nm-cost__d\">Un poste partag\u00e9 et un bureau priv\u00e9 d\u00e9di\u00e9 se situent \u00e0 des niveaux de prix tr\u00e8s diff\u00e9rents, et le march\u00e9 est assez r\u00e9duit pour qu\u2019il vaille mieux contacter directement deux ou trois espaces plut\u00f4t que de budg\u00e9ter \u00e0 partir d\u2019une moyenne.<\/div><\/div>\n        <\/div>\n        <p class=\"lfd-art__lede lfd-nm-m24\">Un plancher mensuel r\u00e9aliste pour un ind\u00e9pendant seul \u00e0 Luxembourg-Ville, une fois cumul\u00e9s le loyer, la s\u00e9curit\u00e9 sociale et un espace de travail, se situe bien au-dessus de ce que sugg\u00e8rent la plupart des comparatifs de destinations pour nomades. Le Luxembourg n\u2019est pas une destination d\u2019arbitrage de co\u00fbts. C\u2019est une destination d\u2019acc\u00e8s au march\u00e9.<\/p>\n\n        <h2 id=\"where\">O\u00f9 vivre et o\u00f9 travailler<\/h2>\n        <p class=\"lfd-art__p\">Notre <a href=\"\/fr\/meilleurs-quartiers-ou-louer-au-luxembourg\/\">guide des quartiers<\/a> traite tout cela en d\u00e9tail ; voici la version courte pour les travailleurs ind\u00e9pendants.<\/p>\n        <div class=\"lfd-nm-areas\">\n          <div class=\"lfd-nm-area\"><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\"><path d=\"M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 0 1 16 0Z\"\/><circle cx=\"12\" cy=\"10\" r=\"3\"\/><\/svg><div class=\"lfd-nm-area__b\"><div class=\"lfd-nm-area__t\">Bonnevoie<\/div><div class=\"lfd-nm-area__d\">La recommandation la plus courante, et la bonne pour la plupart des ind\u00e9pendants arrivant seuls. Les loyers y sont inf\u00e9rieurs d\u2019environ 15 \u00e0 20 % \u00e0 la moyenne de la ville, l\u2019ambiance est jeune et multiculturelle et \u2014 point essentiel quand on travaille seul \u2014 c\u2019est l\u2019endroit de la ville o\u00f9 l\u2019on se construit le plus vite une vie sociale. T\u00e9l\u00e9travailler dans un pays o\u00f9 l\u2019on ne conna\u00eet personne devient isolant plus rapidement qu\u2019on ne l\u2019imagine.<\/div><\/div><\/div>\n          <div class=\"lfd-nm-area\"><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\"><path d=\"M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 0 1 16 0Z\"\/><circle cx=\"12\" cy=\"10\" r=\"3\"\/><\/svg><div class=\"lfd-nm-area__b\"><div class=\"lfd-nm-area__t\">Gare<\/div><div class=\"lfd-nm-area__d\">Vous conviendra si vous voyagez fr\u00e9quemment. Des trains directs vers la France, la Belgique et l\u2019Allemagne au pied de chez vous.<\/div><\/div><\/div>\n          <div class=\"lfd-nm-area\"><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\"><path d=\"M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 0 1 16 0Z\"\/><circle cx=\"12\" cy=\"10\" r=\"3\"\/><\/svg><div class=\"lfd-nm-area__b\"><div class=\"lfd-nm-area__t\">Kirchberg et Limpertsberg<\/div><div class=\"lfd-nm-area__d\">Plus calmes et plus chers. Parfait si vous recherchez la tranquillit\u00e9 et pouvez vous le permettre ; plus lent sur le plan social.<\/div><\/div><\/div>\n          <div class=\"lfd-nm-area\"><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\"><path d=\"M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 0 1 16 0Z\"\/><circle cx=\"12\" cy=\"10\" r=\"3\"\/><\/svg><div class=\"lfd-nm-area__b\"><div class=\"lfd-nm-area__t\">Esch-Belval<\/div><div class=\"lfd-nm-area__d\">L\u2019ancien site sid\u00e9rurgique du sud a \u00e9t\u00e9 r\u00e9am\u00e9nag\u00e9 autour de l\u2019Universit\u00e9 du Luxembourg et d\u2019un p\u00f4le technologique et de recherche en plein essor. Pour qui travaille dans la tech ou la recherche, c\u2019est une v\u00e9ritable alternative \u00e0 la capitale \u2014 sensiblement moins ch\u00e8re, avec une communaut\u00e9 diff\u00e9rente et plus universitaire. Le site se trouve \u00e0 une vingtaine de minutes en train de Luxembourg-Ville, et les transports publics \u00e9tant gratuits partout depuis 2020, le trajet ne co\u00fbte rien.<\/div><\/div><\/div>\n        <\/div>\n        <p class=\"lfd-art__p lfd-art__p--m24\">Ce dernier point reconfigure toute la question de la localisation pour quiconque n\u2019a pas de bureau fixe. Si vous ne vous rendez pas chaque jour dans un b\u00e2timent pr\u00e9cis, l\u2019argument consistant \u00e0 payer le surco\u00fbt de la capitale s\u2019\u00e9vapore en grande partie.<\/p>\n        <p class=\"lfd-art__p lfd-art__p--m20\"><strong>Le coworking.<\/strong> Luxembourg-Ville dispose d\u2019un march\u00e9 du coworking bien \u00e9tabli, compl\u00e9t\u00e9 par des espaces autour d\u2019Esch-Belval orient\u00e9s vers la tech et la recherche. Au-del\u00e0 du poste de travail, c\u2019est le moyen le plus fiable de rencontrer du monde quand on n\u2019a pas de coll\u00e8gues \u2014 cela vaut l\u2019investissement rien que pour cela durant vos premiers mois.<\/p>\n        <p class=\"lfd-art__p lfd-art__p--m20\"><strong>Meubl\u00e9 ou non meubl\u00e9 ?<\/strong> Pour quiconque traverse sa premi\u00e8re ann\u00e9e de d\u00e9marches de titre de s\u00e9jour : meubl\u00e9, sans h\u00e9siter. Le raisonnement est expos\u00e9 dans notre <a href=\"\/fr\/appartement-meuble-ou-non-meuble-luxembourg\/\">comparatif meubl\u00e9 \/ non meubl\u00e9<\/a>, mais en r\u00e9sum\u00e9 : lorsque votre statut juridique est provisoire, s\u2019engager sur un bail non meubl\u00e9 de trois ans et une cuisine \u00e0 installer soi-m\u00eame est une d\u00e9cision de mauvaise nature.<\/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-nomad-coworking.webp\" alt=\"Espace de coworking au Luxembourg avec des postes partag\u00e9s et des ind\u00e9pendants au travail\" width=\"1448\" height=\"1086\" loading=\"lazy\" decoding=\"async\"><figcaption class=\"lfd-art__cap\">Au-del\u00e0 du poste de travail, le coworking est le moyen le plus fiable de rencontrer du monde quand on n\u2019a pas de coll\u00e8gues.<\/figcaption><\/figure>\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-nomad-0\">\n      <span>Le Luxembourg propose-t-il un visa pour nomades num\u00e9riques ?<\/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-nomad-0\" role=\"region\">Non. Le Luxembourg ne dispose d\u2019aucun visa d\u00e9di\u00e9 aux nomades num\u00e9riques. Les ressortissants de l\u2019UE et de l\u2019EEE peuvent y vivre et y travailler sans visa. Les ressortissants hors UE peuvent s\u00e9journer jusqu\u2019\u00e0 90 jours sur toute p\u00e9riode de 180 jours en qualit\u00e9 de visiteurs, sans droit de travailler, ou demander le titre de s\u00e9jour pour travailleur ind\u00e9pendant, valable trois ans initialement et exigeant un plan d\u2019affaires ainsi qu\u2019un capital g\u00e9n\u00e9ralement compris entre 25 000 et 50 000 \u20ac.<\/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-nomad-1\">\n      <span>Combien de temps puis-je rester au Luxembourg sans visa ?<\/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-nomad-1\" role=\"region\">Les ressortissants hors UE peuvent s\u00e9journer au maximum 90 jours sur toute p\u00e9riode glissante de 180 jours en vertu des r\u00e8gles Schengen, sans droit de travailler pendant ce laps de temps \u2014 y compris en t\u00e9l\u00e9travail pour des clients \u00e9trangers. Les ressortissants de l\u2019UE et de l\u2019EEE ne sont soumis \u00e0 aucune limite. Notez que la r\u00e9sidence fiscale est une question distincte, qui se d\u00e9clenche \u00e0 partir de 183 jours sur une ann\u00e9e civile.<\/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-nomad-2\">\n      <span>Puis-je obtenir un bail au Luxembourg avant l\u2019approbation de mon titre de s\u00e9jour ?<\/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-nomad-2\" role=\"region\">C\u2019est souvent difficile, car de nombreux propri\u00e9taires exigent d\u2019abord un titre d\u00e9finitif \u2014 alors que la proc\u00e9dure d\u2019enregistrement requiert g\u00e9n\u00e9ralement une adresse locale. La solution habituelle consiste \u00e0 prendre un logement meubl\u00e9 de courte dur\u00e9e pour vos premi\u00e8res semaines ou votre premier mois, \u00e0 une adresse utilisable pour votre d\u00e9claration d\u2019arriv\u00e9e \u00e0 la commune, ce qui permet aux d\u00e9marches d\u2019avancer pendant que vous cherchez un logement de plus longue dur\u00e9e.<\/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-nomad-3\">\n      <span>\u00c0 combien s\u2019\u00e9l\u00e8ve une caution locative 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-nomad-3\" role=\"region\">La loi luxembourgeoise plafonne la garantie locative \u00e0 deux mois de loyer de base au maximum. Dans cette limite, le montant est fix\u00e9 par chaque propri\u00e9taire et varie selon le bien.<\/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\": \"Le Luxembourg propose-t-il un visa pour nomades num\u00e9riques ?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Non. Le Luxembourg ne dispose d\u2019aucun visa d\u00e9di\u00e9 aux nomades num\u00e9riques. Les ressortissants de l\u2019UE et de l\u2019EEE peuvent y vivre et y travailler sans visa. Les ressortissants hors UE peuvent s\u00e9journer jusqu\u2019\u00e0 90 jours sur toute p\u00e9riode de 180 jours en qualit\u00e9 de visiteurs, sans droit de travailler, ou demander le titre de s\u00e9jour pour travailleur ind\u00e9pendant, valable trois ans initialement et exigeant un plan d\u2019affaires ainsi qu\u2019un capital g\u00e9n\u00e9ralement compris entre 25 000 et 50 000 \u20ac.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Combien de temps puis-je rester au Luxembourg sans visa ?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Les ressortissants hors UE peuvent s\u00e9journer au maximum 90 jours sur toute p\u00e9riode glissante de 180 jours en vertu des r\u00e8gles Schengen, sans droit de travailler pendant ce laps de temps \u2014 y compris en t\u00e9l\u00e9travail pour des clients \u00e9trangers. Les ressortissants de l\u2019UE et de l\u2019EEE ne sont soumis \u00e0 aucune limite. Notez que la r\u00e9sidence fiscale est une question distincte, qui se d\u00e9clenche \u00e0 partir de 183 jours sur une ann\u00e9e civile.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Puis-je obtenir un bail au Luxembourg avant l\u2019approbation de mon titre de s\u00e9jour ?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"C\u2019est souvent difficile, car de nombreux propri\u00e9taires exigent d\u2019abord un titre d\u00e9finitif \u2014 alors que la proc\u00e9dure d\u2019enregistrement requiert g\u00e9n\u00e9ralement une adresse locale. La solution habituelle consiste \u00e0 prendre un logement meubl\u00e9 de courte dur\u00e9e pour vos premi\u00e8res semaines ou votre premier mois, \u00e0 une adresse utilisable pour votre d\u00e9claration d\u2019arriv\u00e9e \u00e0 la commune, ce qui permet aux d\u00e9marches d\u2019avancer pendant que vous cherchez un logement de plus longue dur\u00e9e.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"\u00c0 combien s\u2019\u00e9l\u00e8ve une caution locative au Luxembourg ?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"La loi luxembourgeoise plafonne la garantie locative \u00e0 deux mois de loyer de base au maximum. Dans cette limite, le montant est fix\u00e9 par chaque propri\u00e9taire et varie selon le bien.\"\n      }\n    }\n  ]\n}<\/script>\n\n        <div class=\"lfd-nm-foot\">Les r\u00e8gles d\u2019immigration et de fiscalit\u00e9 \u00e9voluent. Les chiffres ci-dessus refl\u00e8tent la situation telle que v\u00e9rifi\u00e9e le 15 septembre 2026 \u2014 confirmez toujours les exigences en vigueur aupr\u00e8s de <a href=\"https:\/\/guichet.public.lu\/\" target=\"_blank\" rel=\"noopener\">Guichet.lu<\/a> avant d\u2019agir sur cette base.<\/div>\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=\"#visa\">La r\u00e9alit\u00e9 des visas<\/a>\n            <a href=\"#housing\">Le cercle vicieux du logement<\/a>\n            <a href=\"#solution\">Comment une location meubl\u00e9e d\u00e9bloque la situation<\/a>\n            <a href=\"#permit\">Ce qu\u2019exige le titre pour ind\u00e9pendant<\/a>\n            <a href=\"#budget\">Budg\u00e9ter son installation<\/a>\n            <a href=\"#where\">O\u00f9 vivre et o\u00f9 travailler<\/a>\n            <a href=\"#faq\">Questions fr\u00e9quentes<\/a>\n          <\/nav>\n          <div class=\"lfd-toc__foot\">Vous arrivez bient\u00f4t ? <a href=\"\/fr\/apartments\/\">Parcourir les locations meubl\u00e9es<\/a> d\u2019un mois \u00e0 une dur\u00e9e illimit\u00e9e.<\/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-bc6ee0a e-con-full e-flex e-con e-parent\" data-id=\"bc6ee0a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6f1223e elementor-widget elementor-widget-html\" data-id=\"6f1223e\" 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\/cout-de-la-location-au-luxembourg\/\">\n        <div class=\"lfd-rel__media\"><img loading=\"lazy\" src=\"https:\/\/www.luxflat-direct.com\/wp-content\/uploads\/2026\/09\/luxflat-nb-limpertsberg.webp\" alt=\"Luxembourg-Ville au-dessus de la vall\u00e9e\" width=\"1440\" height=\"960\" loading=\"lazy\" decoding=\"async\"><\/div>\n        <div class=\"lfd-rel__txt\">\n          <span class=\"lfd-rel__tag\">Analyses de march\u00e9<\/span>\n          <span class=\"lfd-rel__t\">Combien co\u00fbte la location au Luxembourg en 2026 ?<\/span>\n          <span class=\"lfd-rel__d\">Le loyer moyen par type d\u2019appartement et par quartier, les raisons de prix \u00e9lev\u00e9s, et comment payer moins.<\/span>\n          <span class=\"lfd-rel__r\">~11 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-1438","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>Logement nomade num\u00e9rique Luxembourg : guide 2026<\/title>\n<meta name=\"description\" content=\"Se loger au Luxembourg en nomade num\u00e9rique : la r\u00e9alit\u00e9 des visas, le pi\u00e8ge administratif qui bloque les ind\u00e9pendants, et comment le r\u00e9soudre.\" \/>\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\/nomade-numerique-independant-luxembourg\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Logement nomade num\u00e9rique Luxembourg : guide 2026\" \/>\n<meta property=\"og:description\" content=\"Se loger au Luxembourg en nomade num\u00e9rique : la r\u00e9alit\u00e9 des visas, le pi\u00e8ge administratif qui bloque les ind\u00e9pendants, et comment le r\u00e9soudre.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.luxflat-direct.com\/fr\/nomade-numerique-independant-luxembourg\/\" \/>\n<meta property=\"og:site_name\" content=\"LuxFlat Direct\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-24T18:31:13+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-24T18:54:43+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\\\/nomade-numerique-independant-luxembourg\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.luxflat-direct.com\\\/fr\\\/nomade-numerique-independant-luxembourg\\\/\"},\"author\":{\"name\":\"Hemal\",\"@id\":\"https:\\\/\\\/www.luxflat-direct.com\\\/fr\\\/#\\\/schema\\\/person\\\/dcb4e3b7a490141a97ffe242aefc1b86\"},\"headline\":\"Louer au Luxembourg en tant que nomade num\u00e9rique ou ind\u00e9pendant\",\"datePublished\":\"2026-09-24T18:31:13+00:00\",\"dateModified\":\"2026-09-24T18:54:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.luxflat-direct.com\\\/fr\\\/nomade-numerique-independant-luxembourg\\\/\"},\"wordCount\":12,\"publisher\":{\"@id\":\"https:\\\/\\\/www.luxflat-direct.com\\\/fr\\\/#organization\"},\"inLanguage\":\"fr-FR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.luxflat-direct.com\\\/fr\\\/nomade-numerique-independant-luxembourg\\\/\",\"url\":\"https:\\\/\\\/www.luxflat-direct.com\\\/fr\\\/nomade-numerique-independant-luxembourg\\\/\",\"name\":\"Logement nomade num\u00e9rique Luxembourg : guide 2026\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.luxflat-direct.com\\\/fr\\\/#website\"},\"datePublished\":\"2026-09-24T18:31:13+00:00\",\"dateModified\":\"2026-09-24T18:54:43+00:00\",\"description\":\"Se loger au Luxembourg en nomade num\u00e9rique : la r\u00e9alit\u00e9 des visas, le pi\u00e8ge administratif qui bloque les ind\u00e9pendants, et comment le r\u00e9soudre.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.luxflat-direct.com\\\/fr\\\/nomade-numerique-independant-luxembourg\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.luxflat-direct.com\\\/fr\\\/nomade-numerique-independant-luxembourg\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.luxflat-direct.com\\\/fr\\\/nomade-numerique-independant-luxembourg\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.luxflat-direct.com\\\/fr\\\/accueil\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Louer au Luxembourg en tant que nomade num\u00e9rique ou ind\u00e9pendant\"}]},{\"@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":"Logement nomade num\u00e9rique Luxembourg : guide 2026","description":"Se loger au Luxembourg en nomade num\u00e9rique : la r\u00e9alit\u00e9 des visas, le pi\u00e8ge administratif qui bloque les ind\u00e9pendants, et comment le r\u00e9soudre.","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\/nomade-numerique-independant-luxembourg\/","og_locale":"fr_FR","og_type":"article","og_title":"Logement nomade num\u00e9rique Luxembourg : guide 2026","og_description":"Se loger au Luxembourg en nomade num\u00e9rique : la r\u00e9alit\u00e9 des visas, le pi\u00e8ge administratif qui bloque les ind\u00e9pendants, et comment le r\u00e9soudre.","og_url":"https:\/\/www.luxflat-direct.com\/fr\/nomade-numerique-independant-luxembourg\/","og_site_name":"LuxFlat Direct","article_published_time":"2026-09-24T18:31:13+00:00","article_modified_time":"2026-09-24T18:54:43+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\/nomade-numerique-independant-luxembourg\/#article","isPartOf":{"@id":"https:\/\/www.luxflat-direct.com\/fr\/nomade-numerique-independant-luxembourg\/"},"author":{"name":"Hemal","@id":"https:\/\/www.luxflat-direct.com\/fr\/#\/schema\/person\/dcb4e3b7a490141a97ffe242aefc1b86"},"headline":"Louer au Luxembourg en tant que nomade num\u00e9rique ou ind\u00e9pendant","datePublished":"2026-09-24T18:31:13+00:00","dateModified":"2026-09-24T18:54:43+00:00","mainEntityOfPage":{"@id":"https:\/\/www.luxflat-direct.com\/fr\/nomade-numerique-independant-luxembourg\/"},"wordCount":12,"publisher":{"@id":"https:\/\/www.luxflat-direct.com\/fr\/#organization"},"inLanguage":"fr-FR"},{"@type":"WebPage","@id":"https:\/\/www.luxflat-direct.com\/fr\/nomade-numerique-independant-luxembourg\/","url":"https:\/\/www.luxflat-direct.com\/fr\/nomade-numerique-independant-luxembourg\/","name":"Logement nomade num\u00e9rique Luxembourg : guide 2026","isPartOf":{"@id":"https:\/\/www.luxflat-direct.com\/fr\/#website"},"datePublished":"2026-09-24T18:31:13+00:00","dateModified":"2026-09-24T18:54:43+00:00","description":"Se loger au Luxembourg en nomade num\u00e9rique : la r\u00e9alit\u00e9 des visas, le pi\u00e8ge administratif qui bloque les ind\u00e9pendants, et comment le r\u00e9soudre.","breadcrumb":{"@id":"https:\/\/www.luxflat-direct.com\/fr\/nomade-numerique-independant-luxembourg\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.luxflat-direct.com\/fr\/nomade-numerique-independant-luxembourg\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.luxflat-direct.com\/fr\/nomade-numerique-independant-luxembourg\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.luxflat-direct.com\/fr\/accueil\/"},{"@type":"ListItem","position":2,"name":"Louer au Luxembourg en tant que nomade num\u00e9rique ou ind\u00e9pendant"}]},{"@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\/1438","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=1438"}],"version-history":[{"count":1,"href":"https:\/\/www.luxflat-direct.com\/fr\/wp-json\/wp\/v2\/posts\/1438\/revisions"}],"predecessor-version":[{"id":1455,"href":"https:\/\/www.luxflat-direct.com\/fr\/wp-json\/wp\/v2\/posts\/1438\/revisions\/1455"}],"wp:attachment":[{"href":"https:\/\/www.luxflat-direct.com\/fr\/wp-json\/wp\/v2\/media?parent=1438"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.luxflat-direct.com\/fr\/wp-json\/wp\/v2\/categories?post=1438"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.luxflat-direct.com\/fr\/wp-json\/wp\/v2\/tags?post=1438"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}