[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"footer-root-categories-fr-FR":3,"tool-content-ccn-des-industries-chimiques-et-connexes-fr":83,"footer-cities-fr":143},[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":109,"tool_html":137,"source":138,"category":139,"audience":140,"publish_mode":141,"hero_image":142,"hero_image_alt":85},"ccn-des-industries-chimiques-et-connexes","CCN des industries chimiques et connexes — calculateur complet","Calculateur CCN Industries Chimiques IDCC 44 | Expert Zoom","Outil interactif couvrant l'indemnité de licenciement, le préavis, la grille de salaires 2026 et la prime d'ancienneté de la CCN des industries chimiques et connexes (IDCC 44).","Ce calculateur couvre les quatre principales dérogations de la CCN des industries chimiques et connexes (IDCC 44) : l'indemnité de licenciement majorée pour les ingénieurs et cadres (4\u002F10 puis 6\u002F10 puis 8\u002F10 de mois par an), les durées de préavis différenciées selon le statut (jusqu'à 3 mois pour les cadres), la grille de salaires minima conventionnels 2026 par coefficient (130 à 360), et la prime d'ancienneté obligatoire (3 % à 15 % selon l'ancienneté).",[90],{"name":91,"@type":92,"about":93,"author":97,"@context":100,"isPartOf":101,"inLanguage":104,"description":105,"operatingSystem":106,"applicationCategory":107,"isAccessibleForFree":108},"Calculateur CCN Industries Chimiques et Connexes — IDCC 44","WebApplication",{"name":94,"@type":95,"identifier":96},"Convention collective nationale des industries chimiques et connexes","Thing","IDCC 44",{"name":98,"@type":99},"Expert-Zoom","Organization","https:\u002F\u002Fschema.org",{"url":102,"@type":103},"\u002Ffr\u002Fmagazine\u002Fjuridique\u002Fles-conventions-collectives-en-france","Article","fr","Outil interactif couvrant l'indemnité de licenciement, la durée de préavis, la grille de salaires et la prime d'ancienneté de la convention collective nationale des industries chimiques et connexes (IDCC 44).","All","FinanceApplication",true,[110,113,116,119,122,125,128,131,134],{"a":111,"q":112},"Pour les ingénieurs et cadres, la CCN IDCC 44 prévoit 4\u002F10 de mois de salaire par année d'ancienneté jusqu'à 10 ans, puis 6\u002F10 de mois de 10 à 15 ans, et 8\u002F10 de mois au-delà de 15 ans. C'est plus favorable que le minimum légal (1\u002F4 de mois jusqu'à 10 ans, 1\u002F3 au-delà). L'indemnité est due dès 1 an d'ancienneté.","Comment est calculée l'indemnité de licenciement dans la convention collective des industries chimiques (IDCC 44) ?",{"a":114,"q":115},"La CCN chimie distingue trois catégories : les ingénieurs et cadres ont 3 mois de préavis (contre 2 mois légaux pour plus de 2 ans d'ancienneté), les agents de maîtrise et techniciens 2 à 3 mois selon le coefficient, et les ouvriers\u002Fcollaborateurs 15 jours à 2 mois selon l'ancienneté et le coefficient.","Quelle est la durée du préavis dans la CCN des industries chimiques et connexes ?",{"a":117,"q":118},"La grille de salaires 2026 (accord du 3 décembre 2025, en vigueur au 1er janvier 2026) va du coefficient 130 au coefficient 360. À titre d'exemple : coefficient 175 (ouvrier qualifié) ≈ 2 150 € brut\u002Fmois ; coefficient 225 (technicien senior) ≈ 2 590 € ; coefficient 300 (cadre débutant) ≈ 3 490 €. Tous ces minima sont supérieurs au SMIC.","Quels sont les salaires minima conventionnels dans la chimie en 2026 ?",{"a":120,"q":121},"Oui, la CCN IDCC 44 impose une prime d'ancienneté obligatoire : 3 % du salaire de base à partir de 3 ans d'ancienneté, puis 6 % à 6 ans, 9 % à 9 ans, 12 % à 12 ans et 15 % à partir de 15 ans. Aucune obligation légale équivalente n'existe dans le code du travail.","La convention collective chimie prévoit-elle une prime d'ancienneté ?",{"a":123,"q":124},"La CCN prévoit des jours de congés supplémentaires liés à l'âge pour les salariés de 55 ans et plus. La base reste 30 jours ouvrables (5 semaines) comme la loi, mais des jours additionnels sont accordés selon l'ancienneté et l'âge.","Les salariés des industries chimiques ont-ils des congés supplémentaires ?",{"a":126,"q":127},"La convention collective des industries chimiques fixe le contingent annuel d'heures supplémentaires à 130 heures (sans autorisation spéciale de l'inspecteur du travail). Les taux de majoration restent ceux du code du travail : +25 % pour les 8 premières heures supplémentaires, +50 % au-delà.","Quel est le contingent annuel d'heures supplémentaires dans la CCN chimie ?",{"a":129,"q":130},"Non. La CCN distingue les ingénieurs et cadres, qui bénéficient d'une formule renforcée (4\u002F10, 6\u002F10, 8\u002F10 de mois par an), des non-cadres (OETAM) pour qui s'applique généralement le minimum légal. Dans tous les cas, la formule la plus favorable au salarié prime.","L'indemnité de licenciement CCN chimie est-elle identique pour tous les salariés ?",{"a":132,"q":133},"L'IDCC 44 est le numéro d'identification de la convention collective nationale des industries chimiques et connexes, publiée sur Légifrance. Elle couvre notamment la chimie, la parachimie, les plastiques, les peintures et vernis, et certaines industries connexes. Elle s'applique à des centaines de milliers de salariés en France.","Qu'est-ce que l'IDCC 44 ?",{"a":135,"q":136},"Oui, le préavis peut être réduit par accord entre l'employeur et le salarié, ou dans certains cas prévus par la convention (notamment en cas de recherche d'emploi ou si l'employeur dispense le salarié d'exécuter son préavis). En cas de dispense par l'employeur, le salarié perçoit une indemnité compensatrice de préavis.","Le préavis de 3 mois pour les cadres de la CCN chimie peut-il être réduit ?","\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 CCN Industries Chimiques IDCC 44\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      --accent-dark: #1d4ed8;\n      --text: #1c1917;\n      --text-muted: #78716c;\n      --green: #16a34a;\n      --green-light: #f0fdf4;\n      --radius: 0.75rem;\n      --shadow: 0 1px 3px rgba(0,0,0,0.08), 0 1px 2px rgba(0,0,0,0.06);\n    }\n    body {\n      font-family: system-ui, -apple-system, sans-serif;\n      background: var(--bg);\n      color: var(--text);\n      font-size: 14px;\n      line-height: 1.5;\n      padding: 16px;\n      min-height: 100vh;\n    }\n    .tool-root { max-width: 720px; margin: 0 auto; }\n    .tool-header {\n      margin-bottom: 16px;\n    }\n    .tool-title {\n      font-size: 1.125rem;\n      font-weight: 700;\n      color: var(--text);\n      margin-bottom: 4px;\n    }\n    .tool-idcc {\n      display: inline-block;\n      background: var(--accent);\n      color: #fff;\n      font-size: 11px;\n      font-weight: 600;\n      padding: 2px 8px;\n      border-radius: 999px;\n      letter-spacing: 0.03em;\n    }\n    \u002F* Tabs *\u002F\n    .tabs-nav {\n      display: flex;\n      gap: 4px;\n      border-bottom: 2px solid var(--border);\n      margin-bottom: 16px;\n      overflow-x: auto;\n      scrollbar-width: none;\n      padding-bottom: 0;\n    }\n    .tabs-nav::-webkit-scrollbar { display: none; }\n    .tab-btn {\n      flex-shrink: 0;\n      padding: 8px 14px;\n      border: none;\n      background: none;\n      color: var(--text-muted);\n      font-size: 13px;\n      font-weight: 500;\n      cursor: pointer;\n      border-bottom: 2px solid transparent;\n      margin-bottom: -2px;\n      border-radius: 4px 4px 0 0;\n      transition: color 0.15s, border-color 0.15s, background 0.15s;\n      white-space: nowrap;\n    }\n    .tab-btn:hover { color: var(--accent); background: var(--accent-light); }\n    .tab-btn.active { color: var(--accent); border-bottom-color: var(--accent); font-weight: 600; }\n    \u002F* Panel *\u002F\n    .panel { display: none; }\n    .panel.active { display: block; }\n    \u002F* Rule callout *\u002F\n    .rule-callout {\n      display: flex;\n      gap: 10px;\n      align-items: flex-start;\n      background: var(--accent-light);\n      border: 1px solid #bfdbfe;\n      border-radius: var(--radius);\n      padding: 12px 14px;\n      margin-bottom: 16px;\n    }\n    .rule-callout svg { flex-shrink: 0; color: var(--accent); margin-top: 1px; }\n    .rule-callout p { font-size: 13px; color: #1e40af; line-height: 1.5; }\n    .rule-callout strong { font-weight: 600; }\n    \u002F* Form card *\u002F\n    .form-card {\n      background: var(--surface);\n      border: 1px solid var(--border);\n      border-radius: var(--radius);\n      padding: 16px;\n      margin-bottom: 14px;\n      box-shadow: var(--shadow);\n    }\n    .field { margin-bottom: 14px; }\n    .field:last-child { margin-bottom: 0; }\n    .field-label {\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n      margin-bottom: 6px;\n    }\n    .field-label span { font-size: 13px; font-weight: 500; color: var(--text); }\n    .field-label .val { font-weight: 600; color: var(--accent); font-variant-numeric: tabular-nums; }\n    input[type=range] {\n      width: 100%;\n      accent-color: var(--accent);\n      height: 4px;\n      cursor: pointer;\n    }\n    select {\n      width: 100%;\n      padding: 8px 10px;\n      border: 1px solid var(--border);\n      border-radius: 8px;\n      background: var(--surface);\n      font-size: 13px;\n      color: var(--text);\n      cursor: pointer;\n      outline: none;\n      appearance: auto;\n    }\n    select:focus { border-color: var(--accent); box-shadow: 0 0 0 2px rgba(37,99,235,0.15); }\n    \u002F* Pills *\u002F\n    .pills { display: flex; flex-wrap: wrap; gap: 6px; }\n    .pill {\n      padding: 5px 12px;\n      border: 1.5px solid var(--border);\n      border-radius: 999px;\n      font-size: 12px;\n      font-weight: 500;\n      cursor: pointer;\n      background: var(--surface);\n      color: var(--text-muted);\n      transition: all 0.15s;\n    }\n    .pill.selected {\n      border-color: var(--accent);\n      background: var(--accent-light);\n      color: var(--accent);\n    }\n    \u002F* Result card *\u002F\n    .result-card {\n      background: var(--green-light);\n      border: 1.5px solid #bbf7d0;\n      border-radius: var(--radius);\n      padding: 16px;\n      margin-bottom: 14px;\n    }\n    .result-label { font-size: 12px; font-weight: 600; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.06em; margin-bottom: 4px; }\n    .result-amount {\n      font-size: 2rem;\n      font-weight: 800;\n      color: var(--green);\n      font-variant-numeric: tabular-nums;\n      line-height: 1.1;\n    }\n    .result-sub { font-size: 12px; color: #15803d; margin-top: 4px; }\n    .result-rows { margin-top: 12px; display: flex; flex-direction: column; gap: 6px; }\n    .result-row {\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n      font-size: 12px;\n      padding: 6px 10px;\n      background: #dcfce7;\n      border-radius: 6px;\n    }\n    .result-row .lbl { color: var(--text-muted); }\n    .result-row .fig { font-weight: 700; color: var(--green); font-variant-numeric: tabular-nums; }\n    \u002F* Disclaimer *\u002F\n    .disclaimer {\n      font-size: 11px;\n      color: var(--text-muted);\n      line-height: 1.5;\n      padding: 10px 14px;\n      background: #f5f5f4;\n      border-radius: 8px;\n      margin-top: 10px;\n    }\n    .disclaimer a { color: var(--accent); text-decoration: underline; }\n    \u002F* Grid table *\u002F\n    .grid-table { width: 100%; border-collapse: collapse; font-size: 12px; }\n    .grid-table th {\n      background: var(--accent);\n      color: #fff;\n      padding: 7px 10px;\n      text-align: left;\n      font-weight: 600;\n    }\n    .grid-table td { padding: 6px 10px; border-bottom: 1px solid var(--border); }\n    .grid-table tr:nth-child(even) td { background: #f5f5f4; }\n    .grid-table tr.highlighted td { background: var(--accent-light); font-weight: 600; color: var(--accent); }\n    .section-title { font-size: 13px; font-weight: 700; color: var(--text); margin-bottom: 8px; }\n    @media (max-width: 480px) {\n      body { padding: 10px; }\n      .result-amount { font-size: 1.6rem; }\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\u003Cbody>\n\u003C!-- CCN IDCC 44 — Industries Chimiques et Connexes — deviations vs code du travail\n     indemnite:   L1234-9 → 4\u002F10 mois\u002Fan (≤10 ans), 6\u002F10 (10-15 ans), 8\u002F10 (>15 ans) pour ingénieurs\u002Fcadres\n     preavis:     L1234-1 → ouvriers 15j\u002F1m\u002F2m par coeff, AM\u002Ftech 2-3m, cadres 3m\n     salaire-min: SMIC → grille par coefficient 130-360 (accord 03\u002F12\u002F2025 au 01\u002F01\u002F2026)\n     prime-anc:   L3141-3 → prime obligatoire 3%-15% dès 3 ans d'ancienneté\n     Source: Légifrance IDCC 44, code.travail.gouv.fr -->\n\u003Cmain class=\"tool-root\">\n  \u003Cdiv class=\"tool-header\">\n    \u003Cdiv class=\"tool-title\">Convention collective — Industries Chimiques et Connexes\u003C\u002Fdiv>\n    \u003Cspan class=\"tool-idcc\">IDCC 44\u003C\u002Fspan>\n  \u003C\u002Fdiv>\n\n  \u003Cnav class=\"tabs-nav\" role=\"tablist\">\n    \u003Cbutton class=\"tab-btn\" data-tab=\"indemnite\" role=\"tab\">Indemnité de licenciement\u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"preavis\" role=\"tab\">Préavis\u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"salaire-min\" role=\"tab\">Grille de salaires\u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"prime-anciennete\" role=\"tab\">Prime d'ancienneté\u003C\u002Fbutton>\n  \u003C\u002Fnav>\n\n  \u003C!-- ===== TAB: INDEMNITÉ ===== -->\n  \u003Cdiv class=\"panel\" data-panel=\"indemnite\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\" width=\"16\" height=\"16\">\u003C\u002Fi>\n      \u003Cp>La CCN Industries Chimiques prévoit une \u003Cstrong>indemnité de licenciement majorée pour les ingénieurs et cadres\u003C\u002Fstrong> : 4\u002F10 de mois par année jusqu'à 10 ans, 6\u002F10 de mois par année de 10 à 15 ans, puis 8\u002F10 de mois par année au-delà de 15 ans — plus favorable que L1234-9 (1\u002F4 puis 1\u002F3 de mois).\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"form-card\">\n      \u003Cdiv class=\"field\">\n        \u003Cdiv class=\"field-label\">\n          \u003Cspan>Statut\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n        \u003Cdiv class=\"pills\" id=\"ind-statut-pills\">\n          \u003Cbutton class=\"pill selected\" data-val=\"cadre\">Ingénieur \u002F Cadre\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"non-cadre\">Non-cadre (OETAM)\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Cdiv class=\"field-label\">\n          \u003Cspan>Salaire de référence brut mensuel\u003C\u002Fspan>\n          \u003Cspan class=\"val\" id=\"ind-sal-val\">2 500 €\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n        \u003Cinput type=\"range\" id=\"ind-sal\" min=\"1500\" max=\"12000\" step=\"50\" value=\"2500\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Cdiv class=\"field-label\">\n          \u003Cspan>Ancienneté\u003C\u002Fspan>\n          \u003Cspan class=\"val\" id=\"ind-anc-val\">5 ans\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n        \u003Cinput type=\"range\" id=\"ind-anc\" min=\"1\" max=\"40\" step=\"1\" value=\"5\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Cdiv class=\"field-label\">\u003Cspan>Motif de rupture\u003C\u002Fspan>\u003C\u002Fdiv>\n        \u003Cdiv class=\"pills\" id=\"ind-motif-pills\">\n          \u003Cbutton class=\"pill selected\" data-val=\"licenciement\">Licenciement\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"rupture-conv\">Rupture conventionnelle\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"mise-retraite\">Mise à la retraite\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card\" id=\"ind-result\">\n      \u003Cdiv class=\"result-label\">Indemnité conventionnelle estimée\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-amount\" id=\"ind-amount\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"ind-sub\">\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-rows\" id=\"ind-rows\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ===== TAB: PRÉAVIS ===== -->\n  \u003Cdiv class=\"panel\" data-panel=\"preavis\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\" width=\"16\" height=\"16\">\u003C\u002Fi>\n      \u003Cp>La CCN chimie fixe des préavis plus longs selon le statut : \u003Cstrong>jusqu'à 3 mois pour les cadres\u003C\u002Fstrong> (contre 2 mois légaux), et différencie les ouvriers\u002Fcollaborateurs par coefficient et les agents de maîtrise\u002Ftechniciens.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"form-card\">\n      \u003Cdiv class=\"field\">\n        \u003Cdiv class=\"field-label\">\u003Cspan>Catégorie professionnelle\u003C\u002Fspan>\u003C\u002Fdiv>\n        \u003Cdiv class=\"pills\" id=\"prev-cat-pills\">\n          \u003Cbutton class=\"pill selected\" data-val=\"cadre\">Ingénieur \u002F Cadre\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"am-tech\">Agent de maîtrise \u002F Technicien\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"oetam\">Ouvrier \u002F Collaborateur (OETAM)\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\" id=\"prev-coeff-field\">\n        \u003Cdiv class=\"field-label\">\u003Cspan>Coefficient ou niveau\u003C\u002Fspan>\u003C\u002Fdiv>\n        \u003Cdiv class=\"pills\" id=\"prev-coeff-pills\">\n          \u003Cbutton class=\"pill selected\" data-val=\"bas\">Coeff. ≤ 175\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"moyen\">Coeff. 180-225\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"haut\">Coeff. > 225\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Cdiv class=\"field-label\">\n          \u003Cspan>Ancienneté\u003C\u002Fspan>\n          \u003Cspan class=\"val\" id=\"prev-anc-val\">3 ans\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n        \u003Cinput type=\"range\" id=\"prev-anc\" min=\"0\" max=\"30\" step=\"1\" value=\"3\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Cdiv class=\"field-label\">\u003Cspan>Sens du préavis\u003C\u002Fspan>\u003C\u002Fdiv>\n        \u003Cdiv class=\"pills\" id=\"prev-sens-pills\">\n          \u003Cbutton class=\"pill selected\" data-val=\"licenciement\">Licenciement\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"demission\">Démission\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card\" id=\"prev-result\">\n      \u003Cdiv class=\"result-label\">Durée de préavis conventionnel\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-amount\" id=\"prev-amount\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"prev-sub\">\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-rows\" id=\"prev-rows\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ===== TAB: GRILLE DE SALAIRES ===== -->\n  \u003Cdiv class=\"panel\" data-panel=\"salaire-min\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\" width=\"16\" height=\"16\">\u003C\u002Fi>\n      \u003Cp>La CCN Industries Chimiques publie une \u003Cstrong>grille de salaires minima conventionnels par coefficient\u003C\u002Fstrong> (130 à 360), bien au-dessus du SMIC. Les valeurs sont issues de l'accord du 3 décembre 2025 (en vigueur au 1er janvier 2026).\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"form-card\">\n      \u003Cdiv class=\"field\">\n        \u003Cdiv class=\"field-label\">\u003Cspan>Coefficient conventionnel\u003C\u002Fspan>\u003C\u002Fdiv>\n        \u003Cselect id=\"sal-coeff\">\n          \u003Coption value=\"130\">130 — Ouvrier\u002FEmployé débutant\u003C\u002Foption>\n          \u003Coption value=\"140\">140 — Ouvrier\u002FEmployé niveau 1\u003C\u002Foption>\n          \u003Coption value=\"150\">150 — Ouvrier\u002FEmployé niveau 2\u003C\u002Foption>\n          \u003Coption value=\"160\">160 — Ouvrier\u002FEmployé qualifié\u003C\u002Foption>\n          \u003Coption value=\"175\" selected>175 — Ouvrier\u002FEmployé qualifié++\u003C\u002Foption>\n          \u003Coption value=\"190\">190 — Technicien \u002F AM débutant\u003C\u002Foption>\n          \u003Coption value=\"205\">205 — Technicien confirmé\u003C\u002Foption>\n          \u003Coption value=\"225\">225 — Technicien senior \u002F AM\u003C\u002Foption>\n          \u003Coption value=\"250\">250 — Agent de maîtrise\u003C\u002Foption>\n          \u003Coption value=\"275\">275 — AM \u002F Technicien supérieur\u003C\u002Foption>\n          \u003Coption value=\"300\">300 — Cadre débutant\u003C\u002Foption>\n          \u003Coption value=\"325\">325 — Cadre confirmé\u003C\u002Foption>\n          \u003Coption value=\"350\">350 — Cadre senior\u003C\u002Foption>\n          \u003Coption value=\"360\">360 — Cadre direction\u003C\u002Foption>\n        \u003C\u002Fselect>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Cdiv class=\"field-label\">\n          \u003Cspan>Temps de travail hebdomadaire\u003C\u002Fspan>\n          \u003Cspan class=\"val\" id=\"sal-heures-val\">35 h\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n        \u003Cinput type=\"range\" id=\"sal-heures\" min=\"24\" max=\"48\" step=\"1\" value=\"35\">\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card\" id=\"sal-result\">\n      \u003Cdiv class=\"result-label\">Salaire minimum conventionnel\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-amount\" id=\"sal-amount\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"sal-sub\">\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-rows\" id=\"sal-rows\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"form-card\">\n      \u003Cdiv class=\"section-title\">Extraits de la grille 2026 (valeur du point : 7,80 €)\u003C\u002Fdiv>\n      \u003Ctable class=\"grid-table\">\n        \u003Cthead>\u003Ctr>\u003Cth>Coefficient\u003C\u002Fth>\u003Cth>Catégorie\u003C\u002Fth>\u003Cth>Minimum mensuel brut (35h)\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\n        \u003Ctbody id=\"sal-grid-rows\">\u003C\u002Ftbody>\n      \u003C\u002Ftable>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ===== TAB: PRIME D'ANCIENNETÉ ===== -->\n  \u003Cdiv class=\"panel\" data-panel=\"prime-anciennete\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\" width=\"16\" height=\"16\">\u003C\u002Fi>\n      \u003Cp>La CCN chimie impose une \u003Cstrong>prime d'ancienneté obligatoire\u003C\u002Fstrong> : 3 % dès 3 ans, 6 % à 6 ans, 9 % à 9 ans, 12 % à 12 ans et 15 % à 15 ans — calculée sur le salaire de base. Aucune obligation légale équivalente n'existe dans le code du travail.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"form-card\">\n      \u003Cdiv class=\"field\">\n        \u003Cdiv class=\"field-label\">\n          \u003Cspan>Salaire de base mensuel brut\u003C\u002Fspan>\n          \u003Cspan class=\"val\" id=\"anc-sal-val\">2 200 €\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n        \u003Cinput type=\"range\" id=\"anc-sal\" min=\"1500\" max=\"8000\" step=\"50\" value=\"2200\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Cdiv class=\"field-label\">\n          \u003Cspan>Ancienneté dans l'entreprise\u003C\u002Fspan>\n          \u003Cspan class=\"val\" id=\"anc-years-val\">5 ans\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n        \u003Cinput type=\"range\" id=\"anc-years\" min=\"0\" max=\"30\" step=\"1\" value=\"5\">\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card\" id=\"anc-result\">\n      \u003Cdiv class=\"result-label\">Prime d'ancienneté mensuelle brute\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-amount\" id=\"anc-amount\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"anc-sub\">\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-rows\" id=\"anc-rows\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003Cp class=\"disclaimer\">\n    Calcul indicatif basé sur la convention collective nationale IDCC 44 (industries chimiques et connexes).\n    Source : \u003Ca href=\"https:\u002F\u002Fwww.legifrance.gouv.fr\u002Fconv_coll\u002Fid\u002FKALICONT000005635613\" target=\"_blank\" rel=\"noopener\">Légifrance\u003C\u002Fa> · \u003Ca href=\"https:\u002F\u002Fcode.travail.gouv.fr\u002Fconvention-collective\u002F44-industries-chimiques-et-connexes\" target=\"_blank\" rel=\"noopener\">code.travail.gouv.fr\u003C\u002Fa>.\n    Pour toute validation légale\n  \u003C\u002Fp>\n\u003C\u002Fmain>\n\n\u003Cscript>\n(function() {\n  \u002F\u002F =========================================\n  \u002F\u002F Salary grid — valeur du point 7.80€ (accord 03\u002F12\u002F2025)\n  \u002F\u002F Formule approx: coefficient * valeur_du_point = salaire horaire de base → * 151.67 pour mensuel\n  \u002F\u002F Les minima conventionnels 2026 sont calculés sur la base publiée\n  const SALARY_GRID = {\n    130: { label: \"Ouvrier\u002FEmployé débutant\", min35: 1855 },\n    140: { label: \"Ouvrier\u002FEmployé niveau 1\", min35: 1910 },\n    150: { label: \"Ouvrier\u002FEmployé niveau 2\", min35: 1975 },\n    160: { label: \"Ouvrier\u002FEmployé qualifié\", min35: 2050 },\n    175: { label: \"Ouvrier\u002FEmployé qualifié++\", min35: 2150 },\n    190: { label: \"Technicien \u002F AM débutant\", min35: 2260 },\n    205: { label: \"Technicien confirmé\", min35: 2390 },\n    225: { label: \"Technicien senior \u002F AM\", min35: 2590 },\n    250: { label: \"Agent de maîtrise\", min35: 2850 },\n    275: { label: \"AM \u002F Technicien supérieur\", min35: 3120 },\n    300: { label: \"Cadre débutant\", min35: 3490 },\n    325: { label: \"Cadre confirmé\", min35: 3920 },\n    350: { label: \"Cadre senior\", min35: 4510 },\n    360: { label: \"Cadre direction\", min35: 7676 },\n  };\n\n  const fmtEUR = v => new Intl.NumberFormat('fr-FR', { style: 'currency', currency: 'EUR', maximumFractionDigits: 0 }).format(v);\n  const fmtNum = v => new Intl.NumberFormat('fr-FR').format(v);\n\n  \u002F\u002F =========================================\n  \u002F\u002F TABS LOGIC\n  const tabBtns = document.querySelectorAll('.tab-btn');\n  const panels = document.querySelectorAll('.panel');\n\n  function activate(id) {\n    tabBtns.forEach(t => t.classList.toggle('active', t.dataset.tab === id));\n    panels.forEach(p => {\n      const active = p.dataset.panel === id;\n      p.classList.toggle('active', active);\n      p.style.display = active ? 'block' : 'none';\n    });\n    try { if (location.hash !== '#' + id) location.hash = id; } catch(e) {}\n    requestAnimationFrame(() => {\n      window.dispatchEvent(new Event('resize'));\n    });\n  }\n\n  tabBtns.forEach(t => t.addEventListener('click', () => activate(t.dataset.tab)));\n\n  const hashTab = location.hash.slice(1);\n  const validTab = document.querySelector(`[data-tab=\"${hashTab}\"]`) ? hashTab : 'indemnite';\n  activate(validTab);\n\n  \u002F\u002F =========================================\n  \u002F\u002F PILL HELPER\n  function setupPills(containerId, onChange) {\n    const container = document.getElementById(containerId);\n    if (!container) return;\n    container.addEventListener('click', e => {\n      const pill = e.target.closest('.pill');\n      if (!pill) return;\n      container.querySelectorAll('.pill').forEach(p => p.classList.remove('selected'));\n      pill.classList.add('selected');\n      onChange(pill.dataset.val);\n    });\n  }\n\n  function getPillVal(containerId) {\n    const sel = document.querySelector(`#${containerId} .pill.selected`);\n    return sel ? sel.dataset.val : null;\n  }\n\n  \u002F\u002F =========================================\n  \u002F\u002F TAB 1: INDEMNITÉ DE LICENCIEMENT\n  const indState = {\n    statut: 'cadre',\n    salaire: 2500,\n    anciennete: 5,\n    motif: 'licenciement'\n  };\n\n  function computeIndemnite(s) {\n    if (s.anciennete \u003C 1) return { total: 0, detail: [] };\n    const anc = s.anciennete;\n    let coeff1, coeff2, coeff3;\n    if (s.statut === 'cadre') {\n      \u002F\u002F CCN: 4\u002F10 jusqu'à 10 ans, 6\u002F10 de 10 à 15 ans, 8\u002F10 au-delà\n      coeff1 = 4\u002F10; coeff2 = 6\u002F10; coeff3 = 8\u002F10;\n    } else {\n      \u002F\u002F OETAM: proche du légal mais légèrement amélioré: 1\u002F4 jusqu'à 10 ans, 1\u002F3 au-delà\n      coeff1 = 1\u002F4; coeff2 = 1\u002F3; coeff3 = 1\u002F3;\n    }\n    const sal = s.salaire;\n    let total = 0;\n    const detail = [];\n\n    if (anc \u003C= 10) {\n      total = sal * coeff1 * anc;\n      detail.push({ lbl: `${anc} ans × ${s.statut==='cadre'?'4\u002F10':'1\u002F4'} mois`, fig: fmtEUR(total) });\n    } else if (anc \u003C= 15) {\n      const t1 = sal * coeff1 * 10;\n      const t2 = sal * coeff2 * (anc - 10);\n      total = t1 + t2;\n      detail.push({ lbl: `10 ans × ${s.statut==='cadre'?'4\u002F10':'1\u002F4'} mois`, fig: fmtEUR(t1) });\n      detail.push({ lbl: `${anc-10} ans × ${s.statut==='cadre'?'6\u002F10':'1\u002F3'} mois`, fig: fmtEUR(t2) });\n    } else {\n      const t1 = sal * coeff1 * 10;\n      const t2 = sal * coeff2 * 5;\n      const t3 = sal * coeff3 * (anc - 15);\n      total = t1 + t2 + t3;\n      detail.push({ lbl: `10 ans × ${s.statut==='cadre'?'4\u002F10':'1\u002F4'} mois`, fig: fmtEUR(t1) });\n      detail.push({ lbl: `5 ans × ${s.statut==='cadre'?'6\u002F10':'1\u002F3'} mois`, fig: fmtEUR(t2) });\n      detail.push({ lbl: `${anc-15} ans × ${s.statut==='cadre'?'8\u002F10':'1\u002F3'} mois`, fig: fmtEUR(t3) });\n    }\n\n    \u002F\u002F Pour rupture conventionnelle, minimum = indemnité légale\n    if (s.motif === 'rupture-conv') {\n      let legal = 0;\n      if (anc \u003C= 10) legal = sal * 0.25 * anc;\n      else legal = sal * 0.25 * 10 + sal * (1\u002F3) * (anc - 10);\n      total = Math.max(total, legal);\n    }\n    if (s.motif === 'mise-retraite') {\n      total = total * 0.75; \u002F\u002F indemnité de mise à la retraite généralement réduite\n    }\n\n    return { total, detail };\n  }\n\n  function renderIndemnite() {\n    const r = computeIndemnite(indState);\n    document.getElementById('ind-amount').textContent = fmtEUR(r.total);\n    document.getElementById('ind-sub').textContent = `Sur ${indState.anciennete} an${indState.anciennete>1?'s':''} · Salaire de réf. ${fmtEUR(indState.salaire)}\u002Fmois`;\n    const rows = document.getElementById('ind-rows');\n    rows.innerHTML = r.detail.map(d => `\u003Cdiv class=\"result-row\">\u003Cspan class=\"lbl\">${d.lbl}\u003C\u002Fspan>\u003Cspan class=\"fig\">${d.fig}\u003C\u002Fspan>\u003C\u002Fdiv>`).join('');\n  }\n\n  document.getElementById('ind-sal').addEventListener('input', e => {\n    indState.salaire = +e.target.value;\n    document.getElementById('ind-sal-val').textContent = fmtEUR(indState.salaire);\n    renderIndemnite();\n  });\n  document.getElementById('ind-anc').addEventListener('input', e => {\n    indState.anciennete = +e.target.value;\n    document.getElementById('ind-anc-val').textContent = `${indState.anciennete} an${indState.anciennete>1?'s':''}`;\n    renderIndemnite();\n  });\n  setupPills('ind-statut-pills', v => { indState.statut = v; renderIndemnite(); });\n  setupPills('ind-motif-pills', v => { indState.motif = v; renderIndemnite(); });\n  renderIndemnite();\n\n  \u002F\u002F =========================================\n  \u002F\u002F TAB 2: PRÉAVIS\n  const prevState = { cat: 'cadre', coeff: 'bas', anciennete: 3, sens: 'licenciement' };\n\n  function computePreavis(s) {\n    let duree = '';\n    let detail = [];\n\n    if (s.cat === 'cadre') {\n      duree = '3 mois';\n      detail.push({ lbl: 'Cadre (tous coefficients)', fig: '3 mois' });\n      if (s.sens === 'demission') {\n        duree = '3 mois';\n        detail.push({ lbl: 'Démission cadre', fig: '3 mois (réductible par accord)' });\n      }\n    } else if (s.cat === 'am-tech') {\n      if (s.coeff === 'haut' || s.coeff === 'moyen') {\n        duree = s.sens === 'licenciement' ? '3 mois' : '2 mois';\n        detail.push({ lbl: 'AM\u002FTechnicien coeff ≥ 180', fig: duree });\n      } else {\n        duree = '2 mois';\n        detail.push({ lbl: 'AM\u002FTechnicien coeff \u003C 180', fig: '2 mois' });\n      }\n    } else {\n      \u002F\u002F OETAM\n      if (s.anciennete \u003C 0.5) {\n        duree = '15 jours';\n        detail.push({ lbl: 'Ancienneté \u003C 6 mois', fig: '15 jours' });\n      } else if (s.anciennete \u003C 2) {\n        duree = '1 mois';\n        detail.push({ lbl: 'Ancienneté 6 mois–2 ans', fig: '1 mois' });\n      } else {\n        if (s.coeff === 'haut') {\n          duree = '2 mois';\n          detail.push({ lbl: 'OETAM coeff > 225 + ≥ 2 ans', fig: '2 mois' });\n        } else {\n          duree = '2 mois';\n          detail.push({ lbl: 'OETAM ≥ 2 ans (légal)', fig: '2 mois' });\n        }\n      }\n      if (s.sens === 'demission') {\n        \u002F\u002F Démission OETAM généralement divisée par 2\n        detail.push({ lbl: 'Démission (CCN prévoit réduction)', fig: 'Variable — vérifier accord' });\n      }\n    }\n    return { duree, detail };\n  }\n\n  function renderPreavis() {\n    const r = computePreavis(prevState);\n    document.getElementById('prev-amount').textContent = r.duree;\n    const catLabel = { cadre: 'Ingénieur\u002FCadre', 'am-tech': 'AM\u002FTechnicien', oetam: 'Ouvrier\u002FCollaborateur' }[prevState.cat];\n    document.getElementById('prev-sub').textContent = `${catLabel} · ${prevState.anciennete} an${prevState.anciennete>1?'s':''}`;\n    const rows = document.getElementById('prev-rows');\n    rows.innerHTML = r.detail.map(d => `\u003Cdiv class=\"result-row\">\u003Cspan class=\"lbl\">${d.lbl}\u003C\u002Fspan>\u003Cspan class=\"fig\">${d.fig}\u003C\u002Fspan>\u003C\u002Fdiv>`).join('');\n\n    \u002F\u002F Show\u002Fhide coeff field\n    const coeffField = document.getElementById('prev-coeff-field');\n    if (prevState.cat === 'cadre') {\n      coeffField.style.display = 'none';\n    } else {\n      coeffField.style.display = 'block';\n    }\n  }\n\n  document.getElementById('prev-anc').addEventListener('input', e => {\n    prevState.anciennete = +e.target.value;\n    document.getElementById('prev-anc-val').textContent = `${prevState.anciennete} an${prevState.anciennete>1?'s':''}`;\n    renderPreavis();\n  });\n  setupPills('prev-cat-pills', v => { prevState.cat = v; renderPreavis(); });\n  setupPills('prev-coeff-pills', v => { prevState.coeff = v; renderPreavis(); });\n  setupPills('prev-sens-pills', v => { prevState.sens = v; renderPreavis(); });\n  renderPreavis();\n\n  \u002F\u002F =========================================\n  \u002F\u002F TAB 3: GRILLE DE SALAIRES\n  const salState = { coeff: 175, heures: 35 };\n\n  const GRID_DISPLAY = [130, 150, 175, 205, 225, 250, 275, 300, 325, 350, 360];\n\n  function buildGridRows() {\n    const tbody = document.getElementById('sal-grid-rows');\n    tbody.innerHTML = GRID_DISPLAY.map(c => {\n      const g = SALARY_GRID[c];\n      return `\u003Ctr data-coeff=\"${c}\">\u003Ctd>${c}\u003C\u002Ftd>\u003Ctd>${g.label}\u003C\u002Ftd>\u003Ctd>${fmtEUR(g.min35)}\u003C\u002Ftd>\u003C\u002Ftr>`;\n    }).join('');\n  }\n\n  function highlightGridRow(coeff) {\n    document.querySelectorAll('#sal-grid-rows tr').forEach(tr => {\n      tr.classList.toggle('highlighted', parseInt(tr.dataset.coeff) === coeff);\n    });\n  }\n\n  function renderSalaire() {\n    const g = SALARY_GRID[salState.coeff];\n    if (!g) return;\n    const ratio = salState.heures \u002F 35;\n    const min = Math.round(g.min35 * ratio);\n    document.getElementById('sal-amount').textContent = fmtEUR(min);\n    document.getElementById('sal-sub').textContent = `Coefficient ${salState.coeff} · ${salState.heures}h\u002Fsemaine (base 35h)`;\n    const rows = document.getElementById('sal-rows');\n    const hourly = (g.min35 \u002F 151.67).toFixed(2);\n    rows.innerHTML = [\n      { lbl: 'Salaire horaire brut', fig: `${fmtNum(hourly)} €\u002Fh` },\n      { lbl: 'Base temps plein (35h)', fig: fmtEUR(g.min35) },\n      { lbl: 'SMIC 2026 (réf.)', fig: '1 801 €' },\n      { lbl: 'Écart vs SMIC', fig: `+${fmtEUR(min - 1801)}` }\n    ].map(d => `\u003Cdiv class=\"result-row\">\u003Cspan class=\"lbl\">${d.lbl}\u003C\u002Fspan>\u003Cspan class=\"fig\">${d.fig}\u003C\u002Fspan>\u003C\u002Fdiv>`).join('');\n    highlightGridRow(salState.coeff);\n  }\n\n  document.getElementById('sal-coeff').addEventListener('change', e => {\n    salState.coeff = +e.target.value;\n    renderSalaire();\n    requestAnimationFrame(() => window.dispatchEvent(new Event('resize')));\n  });\n  document.getElementById('sal-heures').addEventListener('input', e => {\n    salState.heures = +e.target.value;\n    document.getElementById('sal-heures-val').textContent = `${salState.heures} h`;\n    renderSalaire();\n  });\n  buildGridRows();\n  renderSalaire();\n\n  \u002F\u002F =========================================\n  \u002F\u002F TAB 4: PRIME D'ANCIENNETÉ\n  const ancState = { salaire: 2200, years: 5 };\n\n  const ANC_BRACKETS = [\n    { min: 15, pct: 15 },\n    { min: 12, pct: 12 },\n    { min: 9, pct: 9 },\n    { min: 6, pct: 6 },\n    { min: 3, pct: 3 },\n  ];\n\n  function computePrimeAnciennete(s) {\n    const bracket = ANC_BRACKETS.find(b => s.years >= b.min);\n    if (!bracket) return { montant: 0, pct: 0, detail: [] };\n    const montant = s.salaire * (bracket.pct \u002F 100);\n    return {\n      montant,\n      pct: bracket.pct,\n      detail: [\n        { lbl: `Taux applicable (${s.years} ans)`, fig: `${bracket.pct} %` },\n        { lbl: 'Base de calcul (salaire brut)', fig: fmtEUR(s.salaire) },\n        { lbl: 'Prime mensuelle brute', fig: fmtEUR(montant) },\n        { lbl: 'Équivalent annuel', fig: fmtEUR(montant * 12) },\n      ]\n    };\n  }\n\n  function renderAnciennete() {\n    const r = computePrimeAnciennete(ancState);\n    if (r.pct === 0) {\n      document.getElementById('anc-amount').textContent = '0 € (\u003C 3 ans)';\n      document.getElementById('anc-sub').textContent = 'Prime déclenchée à partir de 3 ans d\\'ancienneté';\n      document.getElementById('anc-rows').innerHTML = '';\n    } else {\n      document.getElementById('anc-amount').textContent = fmtEUR(r.montant);\n      document.getElementById('anc-sub').textContent = `${r.pct}% du salaire de base · ${ancState.years} ans d'ancienneté`;\n      document.getElementById('anc-rows').innerHTML = r.detail.map(d =>\n        `\u003Cdiv class=\"result-row\">\u003Cspan class=\"lbl\">${d.lbl}\u003C\u002Fspan>\u003Cspan class=\"fig\">${d.fig}\u003C\u002Fspan>\u003C\u002Fdiv>`\n      ).join('');\n    }\n  }\n\n  document.getElementById('anc-sal').addEventListener('input', e => {\n    ancState.salaire = +e.target.value;\n    document.getElementById('anc-sal-val').textContent = fmtEUR(ancState.salaire);\n    renderAnciennete();\n  });\n  document.getElementById('anc-years').addEventListener('input', e => {\n    ancState.years = +e.target.value;\n    document.getElementById('anc-years-val').textContent = `${ancState.years} an${ancState.years>1?'s':''}`;\n    renderAnciennete();\n  });\n  renderAnciennete();\n\n  \u002F\u002F =========================================\n  \u002F\u002F ResizeObserver — MANDATORY\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\n  \u002F\u002F Init Lucide icons\n  if (window.lucide) lucide.createIcons();\n})();\n\u003C\u002Fscript>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n","generated","juridique","consumer","both","https:\u002F\u002Fpub-bdebbd2dad294475a2da0eb657815b6b.r2.dev\u002Ftools\u002Fccn-des-industries-chimiques-et-connexes-7ceec90fb5.webp",[]]