[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"footer-root-categories-fr-FR":3,"tool-content-simulateur-cdhr-2026-fr":83,"footer-cities-fr":124},[4,14,22,30,38,45,53,60,67,75],{"seo_content":5,"id":8,"name":9,"slug":10,"parentId":7,"lang":11,"_count":12},[6],{"page_slug":7},null,"cmkzhl7xm00dbulbc93h4qog5","Juridique","avocats","fr-FR",{"experts":13},8,{"seo_content":15,"id":17,"name":18,"slug":19,"parentId":7,"lang":11,"_count":20},[16],{"page_slug":7},"cmkzhl84700djulbcbv6pzu9e","Informatique","informaticiens",{"experts":21},3,{"seo_content":23,"id":25,"name":26,"slug":27,"parentId":7,"lang":11,"_count":28},[24],{"page_slug":7},"cmkzhlaos00gnulbc07i9jrco","Amélioration de la Maison","artisans",{"experts":29},4,{"seo_content":31,"id":33,"name":34,"slug":35,"parentId":7,"lang":11,"_count":36},[32],{"page_slug":7},"cmkzhlaqg00gpulbcx38bwoc2","Général","divers-generalistes",{"experts":37},0,{"seo_content":39,"id":41,"name":42,"slug":43,"parentId":7,"lang":11,"_count":44},[40],{"page_slug":7},"cmkzhlbvq00i3ulbcutdbcz50","Électronique Grand Public","techniciens-electronique",{"experts":21},{"seo_content":46,"id":48,"name":49,"slug":50,"parentId":7,"lang":11,"_count":51},[47],{"page_slug":7},"cmkzhlcaw00ilulbc38pxoogr","Santé","medecins",{"experts":52},5,{"seo_content":54,"id":56,"name":57,"slug":58,"parentId":7,"lang":11,"_count":59},[55],{"page_slug":7},"cmkzhlcmi00izulbcxva1m47f","Gestion de Patrimoine","conseillers-patrimoniaux",{"experts":21},{"seo_content":61,"id":63,"name":64,"slug":65,"parentId":7,"lang":11,"_count":66},[62],{"page_slug":7},"cmkzhldcv00jvulbcmcd5a7mk","Animaux et Vétérinaires","veterinaires",{"experts":21},{"seo_content":68,"id":70,"name":71,"slug":72,"parentId":7,"lang":11,"_count":73},[69],{"page_slug":7},"cmkzhldrr00kdulbchxfo67eg","Mécanique et Réparation","mecaniciens",{"experts":74},1,{"seo_content":76,"id":78,"name":79,"slug":80,"parentId":7,"lang":11,"_count":81},[77],{"page_slug":7},"cmkzhl9l300fbulbcv3i8q8p3","Aide aux Devoirs","professeurs-particuliers",{"experts":82},6,{"slug":84,"title":85,"page_title":86,"description":87,"content_md":88,"local_slug":84,"json_ld":89,"faq":102,"tool_html":118,"source":119,"category":7,"audience":120,"publish_mode":121,"hero_image":122,"hero_image_alt":123},"simulateur-cdhr-2026","Simulateur CDHR 2026","Simulateur CDHR 2026 — Contribution Différentielle sur les Hauts Revenus | Expert-Zoom","Calculez votre Contribution Différentielle sur les Hauts Revenus (CDHR) 2026 : imposition minimale à 20 % pour les hauts revenus. Formule officielle, simulation IR + CEHR + CDHR.","Ce simulateur calcule la CDHR (Contribution Différentielle sur les Hauts Revenus), reconduite par la Loi de Finances 2026 pour les contribuables dont le taux effectif d'imposition est inférieur à 20 % du Revenu Fiscal de Référence. Il est destiné aux contribuables aisés, conseils patrimoniaux et experts-comptables souhaitant anticiper leur charge fiscale 2026.",[90],{"name":85,"@type":91,"offers":92,"@context":96,"inLanguage":97,"description":98,"operatingSystem":99,"applicationCategory":100,"browserRequirements":101},"WebApplication",{"@type":93,"price":94,"priceCurrency":95},"Offer","0","EUR","https:\u002F\u002Fschema.org","fr","Calculez votre Contribution Différentielle sur les Hauts Revenus (CDHR) 2026 : imposition minimale à 20 % pour les hauts revenus.","All","FinanceApplication","Requires JavaScript",[103,106,109,112,115],{"a":104,"q":105},"La CDHR s'applique aux contribuables dont le Revenu Fiscal de Référence (RFR) dépasse 250 000 € pour un célibataire (ou 500 000 € pour un couple) ET dont le taux effectif d'imposition (IR + CEHR) est inférieur à 20 % du RFR. Elle est reconduite pour 2026 par la Loi de Finances promulguée le 28 décembre 2025.","Qui est soumis à la CDHR en 2026 ?",{"a":107,"q":108},"La formule est : CDHR = max(0 ; 20 % × RFR − (IR + CEHR) − ajustements). Les ajustements incluent 1 500 € par personne à charge et 12 500 € pour les couples soumis à imposition commune.","Comment la CDHR est-elle calculée ?",{"a":110,"q":111},"Oui. La Contribution Exceptionnelle sur les Hauts Revenus (CEHR — 3 % entre 250 k€ et 500 k€ de RFR, 4 % au-delà) est déduite du seuil de 20 % avant calcul de la CDHR. Seuls l'IR et la CEHR entrent dans ce calcul ; les prélèvements sociaux en sont exclus.","La CEHR compte-t-elle dans le calcul de la CDHR ?",{"a":113,"q":114},"L'acompte correspond à 95 % de la CDHR estimée et doit être versé entre le 1er et le 15 décembre de l'année d'imposition. Pour 2026, l'acompte est dû en décembre 2026.","Quand l'acompte de CDHR doit-il être versé ?",{"a":116,"q":117},"Oui, la LFI 2026 reconduit expressément la CDHR pour l'imposition des revenus de l'année 2026. Aucune modification du taux minimal de 20 % n'a été apportée par rapport à 2025.","La CDHR est-elle définitive pour 2026 ?","\u003C!DOCTYPE html>\n\u003Chtml lang=\"fr\">\n\u003Chead>\n  \u003Cmeta charset=\"utf-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n  \u003Ctitle>Simulateur CDHR 2026\u003C\u002Ftitle>\n  \u003Cscript src=\"https:\u002F\u002Funpkg.com\u002Flucide@latest\u002Fdist\u002Fumd\u002Flucide.min.js\">\u003C\u002Fscript>\n  \u003Cstyle>\n    *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n    :root {\n      --blue: #2563eb; --blue-light: #eff6ff; --stone-50: #fafaf9;\n      --stone-200: #e7e5e4; --stone-400: #a8a29e; --stone-600: #57534e;\n      --stone-800: #292524; --green-light: #f0fdf4; --orange-light: #fff7ed;\n      --red-light: #fef2f2;\n    }\n    body { background: var(--stone-50); font-family: system-ui,-apple-system,sans-serif; padding: 0; }\n    .tool-root { max-width: 680px; margin: 0 auto; padding: 1.5rem 1rem 2rem; }\n    h1 { font-size: 1.2rem; font-weight: 700; color: var(--stone-800); }\n    .subtitle { color: var(--stone-600); font-size: 0.875rem; margin-top: 0.25rem; }\n    .tabs { display: flex; margin-top: 1.25rem; border-bottom: 2px solid var(--stone-200); gap: 0; }\n    .tab-btn { padding: 0.625rem 1rem; font-size: 0.8125rem; font-weight: 500; color: var(--stone-600); background: none; border: none; cursor: pointer; border-bottom: 2.5px solid transparent; margin-bottom: -2px; white-space: nowrap; }\n    .tab-btn.active { color: var(--blue); border-bottom-color: var(--blue); }\n    .panel { display: none; padding-top: 1.25rem; }\n    .panel.active { display: block; }\n    .callout { background: var(--blue-light); border-left: 3px solid var(--blue); border-radius: 0 0.5rem 0.5rem 0; padding: 0.75rem 1rem; font-size: 0.8125rem; color: var(--stone-800); margin-bottom: 1.25rem; display: flex; align-items: flex-start; gap: 0.5rem; }\n    .callout svg { flex-shrink: 0; margin-top: 0.1rem; color: var(--blue); }\n    .fields { display: flex; flex-direction: column; gap: 1rem; }\n    .field label { display: block; font-size: 0.8125rem; font-weight: 500; color: var(--stone-600); margin-bottom: 0.375rem; }\n    .field input, .field select { width: 100%; padding: 0.5rem 0.75rem; border: 1.5px solid var(--stone-200); border-radius: 0.5rem; font-size: 0.9375rem; color: var(--stone-800); background: white; outline: none; font-variant-numeric: tabular-nums; }\n    .field input:focus, .field select:focus { border-color: var(--blue); }\n    .field .hint { font-size: 0.75rem; color: var(--stone-400); margin-top: 0.25rem; }\n    .row-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; }\n    .result-card { margin-top: 1.25rem; border-radius: 0.75rem; padding: 1.25rem 1.5rem; background: white; border: 1.5px solid var(--stone-200); }\n    .result-card.no-cdhr { background: var(--green-light); border-color: #bbf7d0; }\n    .result-card.with-cdhr { background: var(--orange-light); border-color: #fed7aa; }\n    .result-card.high-cdhr { background: var(--red-light); border-color: #fecaca; }\n    .result-label { font-size: 0.8125rem; font-weight: 500; color: var(--stone-600); display: flex; align-items: center; gap: 0.375rem; }\n    .result-value { font-size: 2rem; font-weight: 800; color: var(--stone-800); margin-top: 0.25rem; font-variant-numeric: tabular-nums; }\n    .result-rows { margin-top: 1rem; display: flex; flex-direction: column; gap: 0.5rem; }\n    .result-row { display: flex; justify-content: space-between; align-items: center; font-size: 0.875rem; }\n    .result-row span:first-child { color: var(--stone-600); }\n    .result-row span:last-child { font-weight: 600; color: var(--stone-800); font-variant-numeric: tabular-nums; }\n    .divider { height: 1px; background: var(--stone-200); margin: 0.5rem 0; }\n    .badge { display: inline-flex; align-items: center; gap: 0.25rem; padding: 0.2rem 0.5rem; border-radius: 9999px; font-size: 0.75rem; font-weight: 600; }\n    .badge-green { background: #dcfce7; color: #15803d; }\n    .badge-orange { background: #ffedd5; color: #c2410c; }\n    .badge-red { background: #fee2e2; color: #b91c1c; }\n    .explain-block { font-size: 0.875rem; color: var(--stone-600); line-height: 1.7; }\n    .explain-block strong { color: var(--stone-800); }\n    .explain-block ul { margin-left: 1.25rem; margin-bottom: 0.75rem; }\n    .explain-block p { margin-bottom: 0.75rem; }\n    .section-title { font-size: 0.875rem; font-weight: 600; color: var(--stone-800); margin-bottom: 0.75rem; display: flex; align-items: center; gap: 0.375rem; }\n    footer { margin-top: 1.5rem; font-size: 0.75rem; color: var(--stone-400); line-height: 1.5; }\n    footer a { color: var(--stone-400); }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\u003Cbody>\n\u003Cmain class=\"tool-root\">\n  \u003Ch1>Simulateur CDHR 2026\u003C\u002Fh1>\n  \u003Cp class=\"subtitle\">Contribution Différentielle sur les Hauts Revenus — imposition minimale à 20 %\u003C\u002Fp>\n\n  \u003Cdiv class=\"tabs\" id=\"tabbar\">\n    \u003Cbutton class=\"tab-btn active\" data-tab=\"calcul\">Calcul CDHR\u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"complet\">Simulation complète\u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"methode\">Méthode\u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n\n  \u003C!-- TAB: Calcul CDHR -->\n  \u003Cdiv class=\"panel active\" id=\"panel-calcul\">\n    \u003Cdiv class=\"callout\">\n      \u003Ci data-lucide=\"info\" width=\"16\" height=\"16\">\u003C\u002Fi>\n      \u003Cspan>La CDHR s'applique si votre taux moyen d'imposition (IR) est inférieur à 20 % de votre Revenu Fiscal de Référence. Seuils : 250 000 € (célibataire) — 500 000 € (couple).\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"fields\">\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Situation familiale\u003C\u002Flabel>\n        \u003Cselect id=\"s1-sit\">\n          \u003Coption value=\"single\">Célibataire \u002F Divorcé \u002F Séparé \u002F Veuf\u003C\u002Foption>\n          \u003Coption value=\"couple\">Couple (mariage ou PACS)\u003C\u002Foption>\n        \u003C\u002Fselect>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Revenu Fiscal de Référence (RFR)\u003C\u002Flabel>\n        \u003Cinput type=\"number\" id=\"s1-rfr\" value=\"400000\" min=\"0\" step=\"5000\">\n        \u003Cdiv class=\"hint\">Figurant sur votre dernier avis d'imposition\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"row-2\">\n        \u003Cdiv class=\"field\">\n          \u003Clabel>Impôt sur le revenu (IR)\u003C\u002Flabel>\n          \u003Cinput type=\"number\" id=\"s1-ir\" value=\"60000\" min=\"0\" step=\"1000\">\n        \u003C\u002Fdiv>\n        \u003Cdiv class=\"field\">\n          \u003Clabel>Personnes à charge\u003C\u002Flabel>\n          \u003Cinput type=\"number\" id=\"s1-dep\" value=\"0\" min=\"0\" max=\"10\" step=\"1\">\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card\" id=\"card1\">\n      \u003Cdiv class=\"result-label\">\u003Ci data-lucide=\"calculator\" width=\"14\" height=\"14\">\u003C\u002Fi> CDHR due\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"r1-cdhr\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-rows\">\n        \u003Cdiv class=\"result-row\">\u003Cspan>RFR\u003C\u002Fspan>\u003Cspan id=\"r1-rfr\">—\u003C\u002Fspan>\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-row\">\u003Cspan>Imposition minimale (20 % × RFR)\u003C\u002Fspan>\u003Cspan id=\"r1-seuil\">—\u003C\u002Fspan>\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-row\">\u003Cspan>IR déclaré\u003C\u002Fspan>\u003Cspan id=\"r1-ir\">—\u003C\u002Fspan>\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-row\">\u003Cspan>Ajustements (à charge + couple)\u003C\u002Fspan>\u003Cspan id=\"r1-ajust\">—\u003C\u002Fspan>\u003C\u002Fdiv>\n        \u003Cdiv class=\"divider\">\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-row\">\u003Cspan>Taux effectif après CDHR\u003C\u002Fspan>\u003Cspan id=\"r1-taux\">—\u003C\u002Fspan>\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-row\">\u003Cspan>Statut\u003C\u002Fspan>\u003Cspan id=\"r1-status\">—\u003C\u002Fspan>\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- TAB: Simulation complète -->\n  \u003Cdiv class=\"panel\" id=\"panel-complet\">\n    \u003Cdiv class=\"callout\">\n      \u003Ci data-lucide=\"layers\" width=\"16\" height=\"16\">\u003C\u002Fi>\n      \u003Cspan>La CEHR (Contribution Exceptionnelle sur les Hauts Revenus) compte dans le calcul de la CDHR. Cette simulation intègre IR + CEHR + CDHR + l'acompte à verser en décembre.\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"fields\">\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Situation familiale\u003C\u002Flabel>\n        \u003Cselect id=\"s2-sit\">\n          \u003Coption value=\"single\">Célibataire \u002F Divorcé \u002F Séparé \u002F Veuf\u003C\u002Foption>\n          \u003Coption value=\"couple\">Couple (mariage ou PACS)\u003C\u002Foption>\n        \u003C\u002Fselect>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Revenu Fiscal de Référence (RFR)\u003C\u002Flabel>\n        \u003Cinput type=\"number\" id=\"s2-rfr\" value=\"600000\" min=\"0\" step=\"10000\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"row-2\">\n        \u003Cdiv class=\"field\">\n          \u003Clabel>Impôt sur le revenu (IR)\u003C\u002Flabel>\n          \u003Cinput type=\"number\" id=\"s2-ir\" value=\"150000\" min=\"0\" step=\"5000\">\n        \u003C\u002Fdiv>\n        \u003Cdiv class=\"field\">\n          \u003Clabel>Personnes à charge\u003C\u002Flabel>\n          \u003Cinput type=\"number\" id=\"s2-dep\" value=\"0\" min=\"0\" max=\"10\" step=\"1\">\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card\" id=\"card2\">\n      \u003Cdiv class=\"result-label\">\u003Ci data-lucide=\"pie-chart\" width=\"14\" height=\"14\">\u003C\u002Fi> Charge fiscale totale 2026\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"r2-total\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-rows\">\n        \u003Cdiv class=\"result-row\">\u003Cspan>IR déclaré\u003C\u002Fspan>\u003Cspan id=\"r2-ir\">—\u003C\u002Fspan>\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-row\">\u003Cspan>CEHR (3 % \u002F 4 %)\u003C\u002Fspan>\u003Cspan id=\"r2-cehr\">—\u003C\u002Fspan>\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-row\">\u003Cspan>CDHR (différentiel 20 %)\u003C\u002Fspan>\u003Cspan id=\"r2-cdhr\">—\u003C\u002Fspan>\u003C\u002Fdiv>\n        \u003Cdiv class=\"divider\">\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-row\">\u003Cspan>Total impôts directs\u003C\u002Fspan>\u003Cspan id=\"r2-total2\">—\u003C\u002Fspan>\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-row\">\u003Cspan>Taux effectif global\u003C\u002Fspan>\u003Cspan id=\"r2-taux\">—\u003C\u002Fspan>\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-row\">\u003Cspan>Acompte CDHR décembre (95 %)\u003C\u002Fspan>\u003Cspan id=\"r2-acompte\">—\u003C\u002Fspan>\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- TAB: Méthode -->\n  \u003Cdiv class=\"panel\" id=\"panel-methode\">\n    \u003Cdiv class=\"section-title\">\u003Ci data-lucide=\"book-open\" width=\"15\" height=\"15\">\u003C\u002Fi> Formule de calcul officielle\u003C\u002Fdiv>\n    \u003Cdiv class=\"explain-block\">\n      \u003Cp>\u003Cstrong>CDHR = max(0 ; 20 % × RFR − (IR + CEHR) − ajustements)\u003C\u002Fstrong>\u003C\u002Fp>\n      \u003Cp>Les \u003Cstrong>ajustements\u003C\u002Fstrong> réduisent la base :\u003C\u002Fp>\n      \u003Cul>\n        \u003Cli>+1 500 € par personne à charge\u003C\u002Fli>\n        \u003Cli>+12 500 € pour les couples soumis à imposition commune\u003C\u002Fli>\n      \u003C\u002Ful>\n      \u003Cp>\u003Cstrong>CEHR (Contribution Exceptionnelle sur les Hauts Revenus) :\u003C\u002Fstrong>\u003C\u002Fp>\n      \u003Cul>\n        \u003Cli>3 % sur la tranche entre 250 000 € et 500 000 € de RFR (célibataire)\u003C\u002Fli>\n        \u003Cli>4 % sur la tranche au-delà de 500 000 € (célibataire)\u003C\u002Fli>\n        \u003Cli>Pour les couples : seuils doublés (500 000 € \u002F 1 000 000 €)\u003C\u002Fli>\n      \u003C\u002Ful>\n      \u003Cp>\u003Cstrong>Acompte :\u003C\u002Fstrong> 95 % de la CDHR estimée, à verser entre le 1er et le 15 décembre N.\u003C\u002Fp>\n      \u003Cp>\u003Cstrong>Reconduction :\u003C\u002Fstrong> La CDHR est reconduite pour 2026 par la LFI 2026 (art. 1 LFI, promulguée le 28 décembre 2025).\u003C\u002Fp>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003Cfooter>\n    Sources : \u003Ca href=\"https:\u002F\u002Fwww.impots.gouv.fr\u002Factualite\u002Fcontribution-differentielle-sur-les-hauts-revenus-cdhr\" target=\"_blank\">impots.gouv.fr — CDHR\u003C\u002Fa> · \u003Ca href=\"https:\u002F\u002Fwww.service-public.fr\u002Fparticuliers\u002Factualites\u002FA18878\" target=\"_blank\">service-public.fr A18878\u003C\u002Fa> · LFI 2026 (28 déc. 2025) · Ce simulateur est informatif et ne constitue pas un conseil fiscal.\n  \u003C\u002Ffooter>\n\u003C\u002Fmain>\n\u003Cscript>\n  const fmtE = v => new Intl.NumberFormat('fr-FR', { style:'currency', currency:'EUR', maximumFractionDigits:0 }).format(v);\n  const fmtP = v => new Intl.NumberFormat('fr-FR', { style:'percent', minimumFractionDigits:1, maximumFractionDigits:2 }).format(v);\n\n  function calcCEHR(rfr, isCouple) {\n    const lo = isCouple ? 500000 : 250000;\n    const hi = isCouple ? 1000000 : 500000;\n    let c = 0;\n    if (rfr > lo) c += (Math.min(rfr, hi) - lo) * 0.03;\n    if (rfr > hi) c += (rfr - hi) * 0.04;\n    return c;\n  }\n\n  function runTab1() {\n    const rfr = parseFloat(document.getElementById('s1-rfr').value) || 0;\n    const ir  = parseFloat(document.getElementById('s1-ir').value)  || 0;\n    const dep = parseInt(document.getElementById('s1-dep').value)    || 0;\n    const isCouple = document.getElementById('s1-sit').value === 'couple';\n    const thr = isCouple ? 500000 : 250000;\n    const seuil = rfr * 0.20;\n    const ajust = dep * 1500 + (isCouple ? 12500 : 0);\n    const cdhr = rfr > thr ? Math.max(0, seuil - ir - ajust) : 0;\n    const total = ir + cdhr;\n    const taux = rfr > 0 ? total \u002F rfr : 0;\n\n    document.getElementById('r1-rfr').textContent    = fmtE(rfr);\n    document.getElementById('r1-seuil').textContent  = fmtE(seuil);\n    document.getElementById('r1-ir').textContent     = fmtE(ir);\n    document.getElementById('r1-ajust').textContent  = fmtE(ajust);\n    document.getElementById('r1-taux').textContent   = fmtP(taux);\n    document.getElementById('r1-cdhr').textContent   = fmtE(cdhr);\n\n    const card = document.getElementById('card1');\n    card.className = 'result-card';\n    let badge = '';\n    if (rfr \u003C= thr) {\n      card.classList.add('no-cdhr');\n      badge = '\u003Cspan class=\"badge badge-green\">Non soumis\u003C\u002Fspan>';\n    } else if (cdhr \u003C 1) {\n      card.classList.add('no-cdhr');\n      badge = '\u003Cspan class=\"badge badge-green\">CDHR = 0 €\u003C\u002Fspan>';\n    } else if (cdhr \u003C 25000) {\n      card.classList.add('with-cdhr');\n      badge = '\u003Cspan class=\"badge badge-orange\">CDHR due\u003C\u002Fspan>';\n    } else {\n      card.classList.add('high-cdhr');\n      badge = '\u003Cspan class=\"badge badge-red\">CDHR élevée\u003C\u002Fspan>';\n    }\n    document.getElementById('r1-status').innerHTML = badge;\n    lucide.createIcons();\n  }\n\n  function runTab2() {\n    const rfr = parseFloat(document.getElementById('s2-rfr').value) || 0;\n    const ir  = parseFloat(document.getElementById('s2-ir').value)  || 0;\n    const dep = parseInt(document.getElementById('s2-dep').value)    || 0;\n    const isCouple = document.getElementById('s2-sit').value === 'couple';\n    const thr = isCouple ? 500000 : 250000;\n    const cehr = calcCEHR(rfr, isCouple);\n    const seuil = rfr * 0.20;\n    const ajust = dep * 1500 + (isCouple ? 12500 : 0);\n    const cdhr = rfr > thr ? Math.max(0, seuil - ir - cehr - ajust) : 0;\n    const total = ir + cehr + cdhr;\n    const taux = rfr > 0 ? total \u002F rfr : 0;\n    const acompte = cdhr * 0.95;\n\n    document.getElementById('r2-ir').textContent     = fmtE(ir);\n    document.getElementById('r2-cehr').textContent   = fmtE(cehr);\n    document.getElementById('r2-cdhr').textContent   = fmtE(cdhr);\n    document.getElementById('r2-total').textContent  = fmtE(total);\n    document.getElementById('r2-total2').textContent = fmtE(total);\n    document.getElementById('r2-taux').textContent   = fmtP(taux);\n    document.getElementById('r2-acompte').textContent= fmtE(acompte);\n\n    const card = document.getElementById('card2');\n    card.className = 'result-card';\n    if (cdhr \u003C 1) card.classList.add('no-cdhr');\n    else if (cdhr \u003C 30000) card.classList.add('with-cdhr');\n    else card.classList.add('high-cdhr');\n  }\n\n  function attachListeners(ids, fn) {\n    ids.forEach(id => {\n      const el = document.getElementById(id);\n      if (el) el.addEventListener('input', fn);\n    });\n  }\n  attachListeners(['s1-sit','s1-rfr','s1-ir','s1-dep'], runTab1);\n  attachListeners(['s2-sit','s2-rfr','s2-ir','s2-dep'], runTab2);\n\n  document.getElementById('tabbar').addEventListener('click', e => {\n    const btn = e.target.closest('.tab-btn');\n    if (!btn) return;\n    document.querySelectorAll('.tab-btn').forEach(b => b.classList.remove('active'));\n    document.querySelectorAll('.panel').forEach(p => p.classList.remove('active'));\n    btn.classList.add('active');\n    document.getElementById('panel-' + btn.dataset.tab).classList.add('active');\n  });\n\n  lucide.createIcons();\n  runTab1();\n  runTab2();\n\n  const ro = new ResizeObserver(() => {\n    const h = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight);\n    parent.postMessage({ type: 'resize', height: h }, '*');\n  });\n  ro.observe(document.documentElement);\n\u003C\u002Fscript>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n","generated","consumer","both","https:\u002F\u002Fpub-bdebbd2dad294475a2da0eb657815b6b.r2.dev\u002Ftools\u002Fsimulateur-cdhr-2026-3ef354a68c-1779404185.webp","",[]]