[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"footer-root-categories-fr-FR":3,"tool-content-calculateur-ecart-salarial-fr":83,"footer-cities-fr":122},[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":100,"tool_html":116,"source":117,"category":118,"audience":119,"publish_mode":120,"hero_image":121,"hero_image_alt":85},"calculateur-ecart-salarial","Calculateur d'écart salarial Hommes\u002FFemmes","Calculateur d'écart salarial H\u002FF — Expert-Zoom","Calculez l'écart de rémunération entre hommes et femmes selon les indicateurs de la directive 2023\u002F970 : écart moyen, médian et répartition par quartile.","Ce calculateur vous permet de mesurer l'écart de rémunération H\u002FF selon les trois indicateurs exigés par la directive européenne 2023\u002F970 : écart moyen, écart médian et répartition par quartile. Idéal pour les RH et dirigeants souhaitant anticiper leurs obligations de reporting avant la transposition française. Renseignez vos données salariales pour obtenir un diagnostic instantané et savoir si vous dépassez le seuil d'alerte de 5 %.",[90],{"name":85,"@type":91,"offers":92,"inLanguage":96,"description":97,"operatingSystem":98,"applicationCategory":99},"WebApplication",{"@type":93,"price":94,"priceCurrency":95},"Offer","0","EUR","fr","Calculez l'écart de rémunération H\u002FF (moyen, médian et par quartile) selon les exigences de la directive européenne 2023\u002F970 sur la transparence salariale.","Any","BusinessApplication",[101,104,107,110,113],{"a":102,"q":103},"L'écart de rémunération H\u002FF est la différence relative entre le salaire moyen (ou médian) des hommes et celui des femmes dans une même entreprise, calculé sur l'ensemble des postes ou par catégorie. La directive 2023\u002F970 impose de publier cet indicateur dans un rapport annuel ou triennal selon l'effectif.","Qu'est-ce que l'écart de rémunération H\u002FF selon la directive 2023\u002F970 ?",{"a":105,"q":106},"Tout écart de rémunération supérieur ou égal à 5 % entre femmes et hommes non justifié par des critères objectifs devra être corrigé dans un délai de six mois. En dessous de 5 %, aucune action corrective n'est obligatoire, mais la transparence s'impose toujours.","À partir de quel seuil l'écart salarial est-il problématique ?",{"a":108,"q":109},"Toutes les entreprises (dès 1 salarié) sont soumises aux obligations fondamentales de transparence au recrutement. Le reporting sur les écarts de rémunération s'applique aux entreprises d'au moins 100 salariés, avec un calendrier progressif : les entreprises de 250 salariés et plus publient annuellement, les 150-249 salariés tous les 3 ans à partir de 2027.","Mon entreprise est-elle concernée par le reporting sur les écarts salariaux ?",{"a":111,"q":112},"La répartition par quartile indique la proportion de femmes dans chaque tranche de salaires (Q1 = bas salaires, Q4 = hauts salaires). Un écart important entre les quartiles peut révéler un \"plafond de verre\", qui devra être mentionné et justifié dans le rapport de transparence.","Que mesure l'analyse par quartile ?",{"a":114,"q":115},"L'écart moyen compare les salaires moyens et est sensible aux très hauts salaires. L'écart médian compare les valeurs médianes et reflète mieux la situation réelle de la majorité des salariés. La directive 2023\u002F970 exige la publication des deux indicateurs dans le rapport de transparence.","Comment calculer l'écart médian par rapport à l'écart moyen ?","\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>Calculateur d'écart salarial H\u002FF\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      --bg: #fafaf9;\n      --surface: #ffffff;\n      --border: #e7e5e4;\n      --accent: #2563eb;\n      --accent-light: #eff6ff;\n      --green: #16a34a;\n      --green-light: #f0fdf4;\n      --amber: #d97706;\n      --amber-light: #fffbeb;\n      --red: #dc2626;\n      --red-light: #fef2f2;\n      --text: #1c1917;\n      --text-muted: #78716c;\n      --radius: 12px;\n    }\n    body { background: var(--bg); font-family: system-ui, -apple-system, sans-serif; color: var(--text); font-size: 15px; line-height: 1.5; }\n    .tool-root { max-width: 640px; margin: 0 auto; padding: 24px 16px 40px; }\n    .tool-header { margin-bottom: 20px; }\n    .tool-title { font-size: 1.25rem; font-weight: 700; color: var(--text); display: flex; align-items: center; gap: 8px; }\n    .tool-title i { color: var(--accent); }\n    .tool-subtitle { font-size: 0.875rem; color: var(--text-muted); margin-top: 4px; }\n    \u002F* Tabs *\u002F\n    .tabs { display: flex; gap: 0; border-bottom: 2px solid var(--border); margin-bottom: 20px; overflow-x: auto; }\n    .tab-btn {\n      padding: 10px 16px; font-size: 0.875rem; font-weight: 500; background: none; border: none;\n      cursor: pointer; color: var(--text-muted); white-space: nowrap; border-bottom: 2px solid transparent;\n      margin-bottom: -2px; transition: color 0.15s;\n    }\n    .tab-btn.active { color: var(--accent); border-bottom-color: var(--accent); }\n    .tab-btn:hover:not(.active) { color: var(--text); }\n    \u002F* Cards *\u002F\n    .card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); padding: 16px 20px; margin-bottom: 14px; }\n    .callout {\n      background: var(--accent-light); border: 1px solid #bfdbfe; border-radius: 8px;\n      padding: 12px 16px; font-size: 0.8125rem; color: #1d4ed8; margin-bottom: 16px;\n      display: flex; align-items: flex-start; gap: 8px;\n    }\n    .callout i { flex-shrink: 0; margin-top: 2px; }\n    \u002F* Form *\u002F\n    .form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }\n    .field label { display: block; font-size: 0.8125rem; font-weight: 600; color: var(--text-muted); margin-bottom: 6px; }\n    .field input[type=number], .field input[type=range] {\n      width: 100%; padding: 9px 12px; border: 1px solid var(--border); border-radius: 8px;\n      font-size: 0.9375rem; color: var(--text); background: var(--surface); font-variant-numeric: tabular-nums;\n    }\n    .field input[type=number]:focus { outline: 2px solid var(--accent); border-color: transparent; }\n    .field .hint { font-size: 0.75rem; color: var(--text-muted); margin-top: 4px; }\n    \u002F* Result *\u002F\n    .result-card {\n      border-radius: var(--radius); padding: 20px; margin-top: 16px; display: flex; flex-direction: column; gap: 12px;\n    }\n    .result-card.ok { background: var(--green-light); border: 1px solid #bbf7d0; }\n    .result-card.warn { background: var(--amber-light); border: 1px solid #fde68a; }\n    .result-card.bad { background: var(--red-light); border: 1px solid #fecaca; }\n    .result-main { font-size: 2.25rem; font-weight: 800; font-variant-numeric: tabular-nums; }\n    .result-card.ok .result-main { color: var(--green); }\n    .result-card.warn .result-main { color: var(--amber); }\n    .result-card.bad .result-main { color: var(--red); }\n    .result-label { font-size: 0.875rem; font-weight: 600; }\n    .result-card.ok .result-label { color: #15803d; }\n    .result-card.warn .result-label { color: #92400e; }\n    .result-card.bad .result-label { color: #991b1b; }\n    .result-detail { font-size: 0.8125rem; color: var(--text-muted); }\n    \u002F* Progress bar *\u002F\n    .bar-wrap { background: var(--border); border-radius: 99px; height: 8px; overflow: hidden; margin: 8px 0; }\n    .bar-fill { height: 100%; border-radius: 99px; transition: width 0.3s; }\n    .bar-fill.ok { background: var(--green); }\n    .bar-fill.warn { background: var(--amber); }\n    .bar-fill.bad { background: var(--red); }\n    \u002F* Quartile grid *\u002F\n    .quartile-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }\n    .q-card { background: var(--surface); border: 1px solid var(--border); border-radius: 8px; padding: 12px; }\n    .q-label { font-size: 0.75rem; font-weight: 700; color: var(--text-muted); margin-bottom: 8px; text-transform: uppercase; letter-spacing: 0.05em; }\n    .q-inputs { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin-bottom: 8px; }\n    .q-inputs label { font-size: 0.75rem; color: var(--text-muted); }\n    .q-inputs input { width: 100%; padding: 6px 8px; border: 1px solid var(--border); border-radius: 6px; font-size: 0.875rem; }\n    .q-pct { font-size: 1.25rem; font-weight: 700; font-variant-numeric: tabular-nums; }\n    \u002F* Source *\u002F\n    .source { font-size: 0.75rem; color: var(--text-muted); border-top: 1px solid var(--border); padding-top: 14px; margin-top: 20px; }\n    .source a { color: var(--accent); text-decoration: none; }\n    .source a:hover { text-decoration: underline; }\n    \u002F* Hidden panels *\u002F\n    .tab-panel { display: none; }\n    .tab-panel.active { display: block; }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\u003Cbody>\n\u003Cmain class=\"tool-root\">\n  \u003Cdiv class=\"tool-header\">\n    \u003Cdiv class=\"tool-title\">\n      \u003Ci data-lucide=\"scale\" width=\"20\" height=\"20\">\u003C\u002Fi>\n      Calculateur d'écart salarial H\u002FF\n    \u003C\u002Fdiv>\n    \u003Cp class=\"tool-subtitle\">Mesurez l'écart de rémunération entre vos collaborateurs selon les indicateurs de la directive 2023\u002F970.\u003C\u002Fp>\n  \u003C\u002Fdiv>\n\n  \u003Cdiv class=\"tabs\" role=\"tablist\">\n    \u003Cbutton class=\"tab-btn active\" onclick=\"switchTab(0)\" role=\"tab\">Écart moyen\u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" onclick=\"switchTab(1)\" role=\"tab\">Écart médian\u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" onclick=\"switchTab(2)\" role=\"tab\">Répartition par quartile\u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n\n  \u003C!-- Tab 0: Écart moyen -->\n  \u003Cdiv class=\"tab-panel active\" id=\"panel-0\">\n    \u003Cdiv class=\"callout\">\n      \u003Ci data-lucide=\"info\" width=\"15\" height=\"15\">\u003C\u002Fi>\n      \u003Cspan>\u003Cstrong>Formule directive 2023\u002F970 :\u003C\u002Fstrong> Écart moyen = (salaire moyen H − salaire moyen F) ÷ salaire moyen H × 100. Un écart ≥ 5 % doit être justifié ou corrigé.\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"card\">\n      \u003Cdiv class=\"form-grid\">\n        \u003Cdiv class=\"field\">\n          \u003Clabel>Salaire moyen brut annuel — Hommes (€)\u003C\u002Flabel>\n          \u003Cinput type=\"number\" id=\"salMoyH\" value=\"45000\" min=\"0\" step=\"500\" oninput=\"update()\">\n        \u003C\u002Fdiv>\n        \u003Cdiv class=\"field\">\n          \u003Clabel>Salaire moyen brut annuel — Femmes (€)\u003C\u002Flabel>\n          \u003Cinput type=\"number\" id=\"salMoyF\" value=\"40000\" min=\"0\" step=\"500\" oninput=\"update()\">\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card\" id=\"res-moyen\">\n      \u003Cdiv class=\"result-main\" id=\"res-moyen-val\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-label\" id=\"res-moyen-label\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"bar-wrap\">\u003Cdiv class=\"bar-fill\" id=\"res-moyen-bar\" style=\"width:0%\">\u003C\u002Fdiv>\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-detail\" id=\"res-moyen-detail\">—\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- Tab 1: Écart médian -->\n  \u003Cdiv class=\"tab-panel\" id=\"panel-1\">\n    \u003Cdiv class=\"callout\">\n      \u003Ci data-lucide=\"info\" width=\"15\" height=\"15\">\u003C\u002Fi>\n      \u003Cspan>\u003Cstrong>Écart médian :\u003C\u002Fstrong> Calculé sur les salaires médians (le milieu de la distribution), moins sensible aux valeurs extrêmes. Obligatoire dans le rapport de transparence.\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"card\">\n      \u003Cdiv class=\"form-grid\">\n        \u003Cdiv class=\"field\">\n          \u003Clabel>Salaire médian brut annuel — Hommes (€)\u003C\u002Flabel>\n          \u003Cinput type=\"number\" id=\"salMedH\" value=\"43000\" min=\"0\" step=\"500\" oninput=\"update()\">\n        \u003C\u002Fdiv>\n        \u003Cdiv class=\"field\">\n          \u003Clabel>Salaire médian brut annuel — Femmes (€)\u003C\u002Flabel>\n          \u003Cinput type=\"number\" id=\"salMedF\" value=\"38500\" min=\"0\" step=\"500\" oninput=\"update()\">\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card\" id=\"res-med\">\n      \u003Cdiv class=\"result-main\" id=\"res-med-val\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-label\" id=\"res-med-label\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"bar-wrap\">\u003Cdiv class=\"bar-fill\" id=\"res-med-bar\" style=\"width:0%\">\u003C\u002Fdiv>\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-detail\" id=\"res-med-detail\">—\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- Tab 2: Quartiles -->\n  \u003Cdiv class=\"tab-panel\" id=\"panel-2\">\n    \u003Cdiv class=\"callout\">\n      \u003Ci data-lucide=\"info\" width=\"15\" height=\"15\">\u003C\u002Fi>\n      \u003Cspan>\u003Cstrong>Répartition par quartile :\u003C\u002Fstrong> La directive exige de publier le % de femmes dans chaque tranche (Q1 = bas salaires → Q4 = hauts salaires). Un déséquilibre flagrant signale un \"plafond de verre\".\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"quartile-grid\">\n      \u003Cdiv class=\"q-card\">\n        \u003Cdiv class=\"q-label\">Q1 — Bas salaires\u003C\u002Fdiv>\n        \u003Cdiv class=\"q-inputs\">\n          \u003Cdiv>\u003Clabel>Total\u003C\u002Flabel>\u003Cinput type=\"number\" id=\"q1t\" value=\"50\" min=\"1\" oninput=\"update()\">\u003C\u002Fdiv>\n          \u003Cdiv>\u003Clabel>dont Femmes\u003C\u002Flabel>\u003Cinput type=\"number\" id=\"q1f\" value=\"22\" min=\"0\" oninput=\"update()\">\u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n        \u003Cdiv class=\"q-pct\" id=\"q1pct\">—\u003C\u002Fdiv>\n        \u003Cdiv class=\"bar-wrap\">\u003Cdiv class=\"bar-fill ok\" id=\"q1bar\" style=\"width:0%\">\u003C\u002Fdiv>\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"q-card\">\n        \u003Cdiv class=\"q-label\">Q2 — Salaires moyens-bas\u003C\u002Fdiv>\n        \u003Cdiv class=\"q-inputs\">\n          \u003Cdiv>\u003Clabel>Total\u003C\u002Flabel>\u003Cinput type=\"number\" id=\"q2t\" value=\"50\" min=\"1\" oninput=\"update()\">\u003C\u002Fdiv>\n          \u003Cdiv>\u003Clabel>dont Femmes\u003C\u002Flabel>\u003Cinput type=\"number\" id=\"q2f\" value=\"25\" min=\"0\" oninput=\"update()\">\u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n        \u003Cdiv class=\"q-pct\" id=\"q2pct\">—\u003C\u002Fdiv>\n        \u003Cdiv class=\"bar-wrap\">\u003Cdiv class=\"bar-fill ok\" id=\"q2bar\" style=\"width:0%\">\u003C\u002Fdiv>\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"q-card\">\n        \u003Cdiv class=\"q-label\">Q3 — Salaires moyens-hauts\u003C\u002Fdiv>\n        \u003Cdiv class=\"q-inputs\">\n          \u003Cdiv>\u003Clabel>Total\u003C\u002Flabel>\u003Cinput type=\"number\" id=\"q3t\" value=\"50\" min=\"1\" oninput=\"update()\">\u003C\u002Fdiv>\n          \u003Cdiv>\u003Clabel>dont Femmes\u003C\u002Flabel>\u003Cinput type=\"number\" id=\"q3f\" value=\"18\" min=\"0\" oninput=\"update()\">\u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n        \u003Cdiv class=\"q-pct\" id=\"q3pct\">—\u003C\u002Fdiv>\n        \u003Cdiv class=\"bar-wrap\">\u003Cdiv class=\"bar-fill ok\" id=\"q3bar\" style=\"width:0%\">\u003C\u002Fdiv>\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"q-card\">\n        \u003Cdiv class=\"q-label\">Q4 — Hauts salaires\u003C\u002Fdiv>\n        \u003Cdiv class=\"q-inputs\">\n          \u003Cdiv>\u003Clabel>Total\u003C\u002Flabel>\u003Cinput type=\"number\" id=\"q4t\" value=\"50\" min=\"1\" oninput=\"update()\">\u003C\u002Fdiv>\n          \u003Cdiv>\u003Clabel>dont Femmes\u003C\u002Flabel>\u003Cinput type=\"number\" id=\"q4f\" value=\"10\" min=\"0\" oninput=\"update()\">\u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n        \u003Cdiv class=\"q-pct\" id=\"q4pct\">—\u003C\u002Fdiv>\n        \u003Cdiv class=\"bar-wrap\">\u003Cdiv class=\"bar-fill ok\" id=\"q4bar\" style=\"width:0%\">\u003C\u002Fdiv>\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card ok\" id=\"res-quartile\" style=\"margin-top:16px;\">\n      \u003Cdiv class=\"result-main\" id=\"res-q-label\" style=\"font-size:1rem;font-weight:700;\">Analyse de répartition\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-detail\" id=\"res-q-detail\">—\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003Cdiv class=\"source\">\n    \u003Cstrong>Sources :\u003C\u002Fstrong>\n    \u003Ca href=\"https:\u002F\u002Fentreprendre.service-public.gouv.fr\u002Factualites\u002FA18526\" target=\"_blank\" rel=\"noopener\">Service-Public Entreprendre – Transparence des salaires 2026\u003C\u002Fa> ·\n    \u003Ca href=\"https:\u002F\u002Fogletree.fr\u002Fpublications\u002Fod-flash-transparence-salariale-projet-de-loi-de-transposition-de-la-directive-nouvelles-sanctions-administratives-5-5\u002F\" target=\"_blank\" rel=\"noopener\">Ogletree Deakins – Projet de loi français\u003C\u002Fa> ·\n    Directive (UE) 2023\u002F970 du 10 mai 2023 · Ce calculateur est fourni à titre indicatif et ne constitue pas un conseil juridique.\n  \u003C\u002Fdiv>\n\u003C\u002Fmain>\n\u003Cscript>\n  let currentTab = 0;\n\n  const fmtPct = v => new Intl.NumberFormat('fr', { style: 'percent', minimumFractionDigits: 1, maximumFractionDigits: 1 }).format(v \u002F 100);\n  const fmtEur = v => new Intl.NumberFormat('fr', { style: 'currency', currency: 'EUR', maximumFractionDigits: 0 }).format(v);\n\n  function clamp(v, lo, hi) { return Math.min(hi, Math.max(lo, v)); }\n\n  function computeGap(hi, lo) {\n    if (!hi || hi \u003C= 0) return 0;\n    return (hi - lo) \u002F hi * 100;\n  }\n\n  function statusClass(gap) {\n    if (gap \u003C 0) return 'ok';\n    if (gap \u003C 5) return 'ok';\n    if (gap \u003C 10) return 'warn';\n    return 'bad';\n  }\n\n  function statusLabel(gap) {\n    if (gap \u003C 0) return 'Aucun écart défavorable aux femmes';\n    if (gap \u003C 5) return 'Écart en-dessous du seuil d\\'alerte (\u003C 5 %) — conforme';\n    if (gap \u003C 10) return 'Écart entre 5 % et 10 % — justification requise sous 6 mois';\n    return 'Écart ≥ 10 % — action corrective obligatoire';\n  }\n\n  function update() {\n    \u002F\u002F Tab 0 — Écart moyen\n    const h = parseFloat(document.getElementById('salMoyH').value) || 0;\n    const f = parseFloat(document.getElementById('salMoyF').value) || 0;\n    const gapM = computeGap(h, f);\n    const clsM = statusClass(gapM);\n    const cardM = document.getElementById('res-moyen');\n    cardM.className = 'result-card ' + clsM;\n    document.getElementById('res-moyen-val').textContent = fmtPct(gapM);\n    document.getElementById('res-moyen-label').textContent = statusLabel(gapM);\n    document.getElementById('res-moyen-bar').style.width = clamp(Math.abs(gapM) * 3, 2, 100) + '%';\n    document.getElementById('res-moyen-bar').className = 'bar-fill ' + clsM;\n    document.getElementById('res-moyen-detail').textContent =\n      `Hommes : ${fmtEur(h)} | Femmes : ${fmtEur(f)} | Différence : ${fmtEur(h - f)}`;\n\n    \u002F\u002F Tab 1 — Écart médian\n    const mh = parseFloat(document.getElementById('salMedH').value) || 0;\n    const mf = parseFloat(document.getElementById('salMedF').value) || 0;\n    const gapMed = computeGap(mh, mf);\n    const clsMed = statusClass(gapMed);\n    const cardMed = document.getElementById('res-med');\n    cardMed.className = 'result-card ' + clsMed;\n    document.getElementById('res-med-val').textContent = fmtPct(gapMed);\n    document.getElementById('res-med-label').textContent = statusLabel(gapMed);\n    document.getElementById('res-med-bar').style.width = clamp(Math.abs(gapMed) * 3, 2, 100) + '%';\n    document.getElementById('res-med-bar').className = 'bar-fill ' + clsMed;\n    document.getElementById('res-med-detail').textContent =\n      `Médiane H : ${fmtEur(mh)} | Médiane F : ${fmtEur(mf)} | Différence médiane : ${fmtEur(mh - mf)}`;\n\n    \u002F\u002F Tab 2 — Quartiles\n    ['1','2','3','4'].forEach(n => {\n      const t = parseFloat(document.getElementById('q'+n+'t').value) || 1;\n      const fem = parseFloat(document.getElementById('q'+n+'f').value) || 0;\n      const pct = fem \u002F t * 100;\n      document.getElementById('q'+n+'pct').textContent = fmtPct(pct);\n      document.getElementById('q'+n+'bar').style.width = clamp(pct, 0, 100) + '%';\n      const cls = pct >= 40 && pct \u003C= 60 ? 'ok' : pct >= 30 && pct \u003C 40 ? 'warn' : 'bad';\n      document.getElementById('q'+n+'bar').className = 'bar-fill ' + cls;\n    });\n\n    \u002F\u002F Quartile summary\n    const q4t = parseFloat(document.getElementById('q4t').value) || 1;\n    const q4f = parseFloat(document.getElementById('q4f').value) || 0;\n    const q1t = parseFloat(document.getElementById('q1t').value) || 1;\n    const q1f = parseFloat(document.getElementById('q1f').value) || 0;\n    const ratioTop = q4f \u002F q4t * 100;\n    const ratioBottom = q1f \u002F q1t * 100;\n    const plafond = ratioBottom - ratioTop;\n    const resQ = document.getElementById('res-quartile');\n    if (plafond > 20) {\n      resQ.className = 'result-card bad';\n      document.getElementById('res-q-detail').textContent =\n        `Possible \"plafond de verre\" : les femmes représentent ${fmtPct(ratioBottom)} du Q1 (bas salaires) mais seulement ${fmtPct(ratioTop)} du Q4 (hauts salaires). Écart de répartition : ${fmtPct(plafond)} — à signaler dans le rapport de transparence.`;\n    } else if (plafond > 10) {\n      resQ.className = 'result-card warn';\n      document.getElementById('res-q-detail').textContent =\n        `Légère sous-représentation féminine en Q4 (${fmtPct(ratioTop)}) par rapport au Q1 (${fmtPct(ratioBottom)}). À surveiller et à documenter.`;\n    } else {\n      resQ.className = 'result-card ok';\n      document.getElementById('res-q-detail').textContent =\n        `Répartition équilibrée entre les quartiles. Femmes en Q1 : ${fmtPct(ratioBottom)}, en Q4 : ${fmtPct(ratioTop)}.`;\n    }\n  }\n\n  function switchTab(n) {\n    currentTab = n;\n    document.querySelectorAll('.tab-btn').forEach((b, i) => b.classList.toggle('active', i === n));\n    document.querySelectorAll('.tab-panel').forEach((p, i) => p.classList.toggle('active', i === n));\n  }\n\n  document.addEventListener('DOMContentLoaded', () => {\n    lucide.createIcons();\n    update();\n  });\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","juridique","consumer","both","https:\u002F\u002Fpub-bdebbd2dad294475a2da0eb657815b6b.r2.dev\u002Ftools\u002Fcalculateur-ecart-salarial-00274b93ff.webp",[]]