[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"footer-root-categories-fr-FR":3,"tool-content-ccn-entreprises-d-architecture-fr":83,"footer-cities-fr":147},[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":110,"tool_html":141,"source":142,"category":143,"audience":144,"publish_mode":145,"hero_image":146,"hero_image_alt":85},"ccn-entreprises-d-architecture","CCN des entreprises d'architecture — calculateur complet","Calculateur CCN Entreprises d'Architecture IDCC 2332 | Expert Zoom","Outil interactif couvrant indemnité de licenciement, préavis, grille salariale, heures supplémentaires et prévoyance de la CCN des entreprises d'architecture (IDCC 2332).","Ce calculateur couvre les 5 principales spécificités de la convention collective des entreprises d'architecture (IDCC 2332) : l'indemnité de licenciement avec plancher garanti de 2 mois, les durées de préavis par catégorie, la grille salariale régionale par coefficient, le contingent d'heures supplémentaires de 176h\u002Fan, et le régime de prévoyance obligatoire (incapacité, invalidité, décès).",[90],{"name":91,"@type":92,"about":93,"author":98,"@context":101,"isPartOf":102,"inLanguage":105,"description":106,"operatingSystem":107,"applicationCategory":108,"isAccessibleForFree":109},"Calculateur CCN Entreprises d'Architecture — IDCC 2332","WebApplication",{"url":94,"name":95,"@type":96,"identifier":97},"https:\u002F\u002Fwww.legifrance.gouv.fr\u002Fconv_coll\u002Fid\u002FKALICONT000005635365","Convention collective nationale des entreprises d'architecture","Thing","IDCC 2332",{"name":99,"@type":100},"Expert-Zoom","Organization","https:\u002F\u002Fschema.org",{"url":103,"@type":104},"\u002Ffr\u002Fmagazine\u002Fjuridique\u002Fles-conventions-collectives-en-france","Article","fr","Outil interactif couvrant l'indemnité de licenciement, le préavis, la grille salariale, les heures supplémentaires et la prévoyance de la convention collective nationale des entreprises d'architecture (IDCC 2332).","All","FinanceApplication",true,[111,114,117,120,123,126,129,132,135,138],{"a":112,"q":113},"La CCN 2332 applique la formule légale (1\u002F4 de mois de salaire par année d'ancienneté pour les 10 premières années, puis 1\u002F3 au-delà), mais prévoit un plancher garanti de 2 mois de salaire brut. Si le résultat du calcul au prorata est inférieur à 2 mois, c'est le plancher CCN qui s'applique, ce qui est plus favorable que le code du travail (L1234-9).","Comment calculer l'indemnité de licenciement dans la CCN des entreprises d'architecture (IDCC 2332) ?",{"a":115,"q":116},"La CCN 2332 prévoit : 2 semaines pour moins de 6 mois d'ancienneté ; 1 mois pour 6 mois à 2 ans ; 2 mois pour les non-cadres avec 2 ans et plus d'ancienneté ; 3 mois pour les cadres avec 2 ans et plus. La durée de 3 mois pour les cadres est plus favorable que le minimum légal de 2 mois (L1234-1).","Quelle est la durée du préavis dans la convention collective architecture IDCC 2332 ?",{"a":118,"q":119},"La grille salariale de la CCN 2332 repose sur un système de points : salaire = valeur du point régionale × coefficient. En 2026, la valeur du point est d'environ 9,72 € en Île-de-France. Les coefficients vont de 200 (employé niveau 1) à 800 (architecte senior). Le salaire conventionnel s'applique dès lors qu'il est supérieur au SMIC (1 801,80 €\u002Fmois en 2026 pour 35h).","Quelle est la grille de salaires de la convention collective des entreprises d'architecture en 2026 ?",{"a":121,"q":122},"Non, la CCN 2332 ne prévoit pas de 13ème mois ni de prime d'ancienneté obligatoires à l'échelle de la branche. Ces avantages peuvent être accordés par accord d'entreprise ou usage, mais ils ne font pas partie des minima conventionnels nationaux.","La CCN architecture prévoit-elle un 13ème mois ou une prime d'ancienneté obligatoire ?",{"a":124,"q":125},"La CCN 2332 fixe un contingent annuel d'heures supplémentaires de 176 heures par salarié. Les majorations sont de 25 % pour les 8 premières heures supplémentaires (36e à 43e heure) et de 50 % au-delà, conformément aux taux légaux. La convention autorise le remplacement de la majoration par un repos compensateur de remplacement (RCR) par accord entre employeur et salarié.","Quel est le contingent annuel d'heures supplémentaires dans la CCN des entreprises d'architecture ?",{"a":127,"q":128},"Oui. La CCN 2332 impose une complémentaire santé collective (accord de 2007) avec participation patronale minimale de 50 %, et un régime de prévoyance (accord de 2003) couvrant incapacité, invalidité et décès pour tous les salariés. Les organismes recommandés sont Malakoff Humanis (prévoyance) et OCIRP (rentes de conjoint et d'éducation).","La mutuelle et la prévoyance sont-elles obligatoires dans la convention collective architecture ?",{"a":130,"q":131},"La CCN 2332 prévoit des périodes d'essai de 2 mois renouvelables une fois pour les employés et techniciens, 3 mois pour les agents de maîtrise et 4 mois pour les cadres. Ces durées sont conformes aux maxima légaux (L1221-19) et ne constituent pas de dérogation favorable.","Quelle est la période d'essai dans la convention collective des entreprises d'architecture ?",{"a":133,"q":134},"La CCN 2332 prévoit 2,08 jours ouvrés par mois de travail effectif, soit 25 jours ouvrés par an (équivalent à 30 jours ouvrables légaux). Il n'y a pas de jours supplémentaires conventionnels significatifs, la convention s'alignant sur le minimum légal (L3141-3).","Combien de jours de congés payés prévoit la CCN architecture IDCC 2332 ?",{"a":136,"q":137},"Oui. La convention collective des entreprises d'architecture a fait l'objet d'un avenant signé en décembre 2024, étendu par arrêté du 24 février 2026 (publié au Journal officiel du 5 mars 2026). Cet avenant consolide notamment les dispositions sur l'indemnité de licenciement et les salaires minima.","La CCN 2332 a-t-elle été révisée récemment ?",{"a":139,"q":140},"Le texte officiel et ses avenants sont disponibles sur Légifrance à la rubrique conventions collectives, sous l'identifiant IDCC 2332 (brochure JO n° 3062). Le texte consolidé intègre la convention nationale du 27 février 2003 et l'ensemble des avenants postérieurs.","Où trouver le texte officiel de la convention collective des entreprises d'architecture (IDCC 2332) ?","\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 Entreprises d'Architecture IDCC 2332\u003C\u002Ftitle>\n  \u003Cscript src=\"https:\u002F\u002Funpkg.com\u002Flucide@latest\u002Fdist\u002Fumd\u002Flucide.min.js\">\u003C\u002Fscript>\n  \u003Cstyle>\n    \u002F* === Design tokens === *\u002F\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      --success-bg: #f0fdf4;\n      --success-border: #bbf7d0;\n      --success-text: #15803d;\n      --warn-bg: #fffbeb;\n      --warn-border: #fde68a;\n      --warn-text: #92400e;\n      --info-bg: #eff6ff;\n      --info-border: #bfdbfe;\n      --info-text: #1e40af;\n      --radius: 0.75rem;\n      --radius-sm: 0.5rem;\n      --shadow: 0 1px 3px rgba(0,0,0,.08), 0 1px 2px rgba(0,0,0,.06);\n    }\n\n    *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n\n    body {\n      font-family: system-ui, -apple-system, sans-serif;\n      font-size: 15px;\n      background: var(--bg);\n      color: var(--text);\n      line-height: 1.5;\n      padding: 1rem;\n    }\n\n    .tool-root {\n      max-width: 720px;\n      margin: 0 auto;\n    }\n\n    \u002F* === Header === *\u002F\n    .tool-header {\n      display: flex;\n      align-items: flex-start;\n      justify-content: space-between;\n      gap: 0.75rem;\n      margin-bottom: 1.25rem;\n    }\n    .tool-header h1 {\n      font-size: 1.2rem;\n      font-weight: 700;\n      line-height: 1.3;\n    }\n    .tool-header p {\n      font-size: 0.8rem;\n      color: var(--text-muted);\n      margin-top: 0.2rem;\n    }\n    .idcc-badge {\n      flex-shrink: 0;\n      background: var(--accent);\n      color: #fff;\n      font-size: 0.7rem;\n      font-weight: 700;\n      padding: 0.25rem 0.6rem;\n      border-radius: 999px;\n      white-space: nowrap;\n    }\n\n    \u002F* === Tabs === *\u002F\n    .tab-bar {\n      display: flex;\n      flex-wrap: wrap;\n      gap: 0.25rem;\n      border-bottom: 2px solid var(--border);\n      margin-bottom: 1.25rem;\n    }\n    .tab-btn {\n      display: flex;\n      align-items: center;\n      gap: 0.35rem;\n      padding: 0.5rem 0.85rem;\n      font-size: 0.82rem;\n      font-weight: 600;\n      color: var(--text-muted);\n      background: none;\n      border: none;\n      border-bottom: 2px solid transparent;\n      margin-bottom: -2px;\n      cursor: pointer;\n      border-radius: var(--radius-sm) var(--radius-sm) 0 0;\n      transition: color .15s, border-color .15s, background .15s;\n    }\n    .tab-btn:hover { color: var(--accent); background: var(--accent-light); }\n    .tab-btn.active { color: var(--accent); border-bottom-color: var(--accent); }\n    .tab-btn svg { width: 14px; height: 14px; }\n\n    \u002F* === Panels === *\u002F\n    .panel { display: none; }\n    .panel.visible { display: block; }\n\n    \u002F* === Rule callout === *\u002F\n    .rule-callout {\n      display: flex;\n      align-items: flex-start;\n      gap: 0.6rem;\n      background: var(--info-bg);\n      border: 1px solid var(--info-border);\n      border-radius: var(--radius-sm);\n      padding: 0.75rem 1rem;\n      margin-bottom: 1.25rem;\n      font-size: 0.83rem;\n      color: var(--info-text);\n      line-height: 1.5;\n    }\n    .rule-callout svg { flex-shrink: 0; width: 16px; height: 16px; margin-top: 0.1rem; }\n\n    \u002F* === Form elements === *\u002F\n    .form-group { margin-bottom: 1rem; }\n    .form-label {\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n      font-size: 0.82rem;\n      font-weight: 600;\n      margin-bottom: 0.35rem;\n    }\n    .form-value {\n      font-size: 0.82rem;\n      font-weight: 700;\n      font-variant-numeric: tabular-nums;\n      color: var(--accent);\n    }\n    input[type=\"range\"] {\n      width: 100%;\n      accent-color: var(--accent);\n      cursor: pointer;\n    }\n    select {\n      width: 100%;\n      padding: 0.5rem 0.75rem;\n      border: 1px solid var(--border);\n      border-radius: var(--radius-sm);\n      font-size: 0.9rem;\n      background: var(--surface);\n      cursor: pointer;\n    }\n    select:focus { outline: 2px solid var(--accent); outline-offset: 1px; }\n\n    \u002F* === Pills === *\u002F\n    .pills {\n      display: flex;\n      flex-wrap: wrap;\n      gap: 0.4rem;\n    }\n    .pill {\n      padding: 0.35rem 0.85rem;\n      border-radius: 999px;\n      border: 1.5px solid var(--border);\n      font-size: 0.8rem;\n      font-weight: 600;\n      cursor: pointer;\n      background: var(--surface);\n      color: var(--text-muted);\n      transition: all .15s;\n    }\n    .pill.active { background: var(--accent); border-color: var(--accent); color: #fff; }\n    .pill:hover:not(.active) { border-color: var(--accent); color: var(--accent); }\n\n    \u002F* === Toggle === *\u002F\n    .toggle-row {\n      display: flex;\n      align-items: center;\n      gap: 0.75rem;\n      font-size: 0.85rem;\n    }\n    .toggle {\n      position: relative;\n      display: inline-block;\n      width: 42px;\n      height: 24px;\n    }\n    .toggle input { opacity: 0; width: 0; height: 0; }\n    .toggle-slider {\n      position: absolute;\n      inset: 0;\n      background: var(--border);\n      border-radius: 999px;\n      cursor: pointer;\n      transition: background .2s;\n    }\n    .toggle-slider::before {\n      content: '';\n      position: absolute;\n      width: 18px; height: 18px;\n      left: 3px; top: 3px;\n      background: #fff;\n      border-radius: 50%;\n      transition: transform .2s;\n      box-shadow: 0 1px 3px rgba(0,0,0,.2);\n    }\n    .toggle input:checked + .toggle-slider { background: var(--accent); }\n    .toggle input:checked + .toggle-slider::before { transform: translateX(18px); }\n\n    \u002F* === Result card === *\u002F\n    .result-card {\n      background: var(--success-bg);\n      border: 1.5px solid var(--success-border);\n      border-radius: var(--radius);\n      padding: 1.1rem 1.25rem;\n      margin-top: 1.25rem;\n    }\n    .result-card .result-label {\n      font-size: 0.78rem;\n      font-weight: 600;\n      text-transform: uppercase;\n      letter-spacing: .06em;\n      color: var(--success-text);\n      margin-bottom: 0.35rem;\n    }\n    .result-card .result-value {\n      font-size: 2rem;\n      font-weight: 800;\n      font-variant-numeric: tabular-nums;\n      color: var(--success-text);\n      line-height: 1.1;\n    }\n    .result-card .result-detail {\n      font-size: 0.78rem;\n      color: var(--text-muted);\n      margin-top: 0.4rem;\n      line-height: 1.5;\n    }\n\n    \u002F* === Result for preavis (text) === *\u002F\n    .result-text {\n      background: var(--info-bg);\n      border: 1.5px solid var(--info-border);\n      border-radius: var(--radius);\n      padding: 1rem 1.25rem;\n      margin-top: 1.25rem;\n    }\n    .result-text .result-label {\n      font-size: 0.78rem;\n      font-weight: 600;\n      text-transform: uppercase;\n      letter-spacing: .06em;\n      color: var(--info-text);\n      margin-bottom: 0.35rem;\n    }\n    .result-text .result-value {\n      font-size: 1.6rem;\n      font-weight: 800;\n      color: var(--info-text);\n      line-height: 1.1;\n    }\n    .result-text .result-detail {\n      font-size: 0.78rem;\n      color: var(--text-muted);\n      margin-top: 0.4rem;\n    }\n\n    \u002F* === Grid table === *\u002F\n    .grid-table {\n      width: 100%;\n      border-collapse: collapse;\n      font-size: 0.82rem;\n      margin-top: 0.75rem;\n    }\n    .grid-table th {\n      background: var(--accent);\n      color: #fff;\n      padding: 0.5rem 0.75rem;\n      text-align: left;\n      font-weight: 600;\n    }\n    .grid-table td {\n      padding: 0.45rem 0.75rem;\n      border-bottom: 1px solid var(--border);\n    }\n    .grid-table tr:nth-child(even) td { background: var(--bg); }\n    .grid-table tr.highlight td { background: var(--accent-light); font-weight: 700; color: var(--accent-dark); }\n    .grid-table tfoot td {\n      font-size: 0.75rem;\n      color: var(--text-muted);\n      padding-top: 0.5rem;\n      border-bottom: none;\n    }\n\n    \u002F* === Disclaimer === *\u002F\n    .disclaimer {\n      font-size: 0.75rem;\n      color: var(--text-muted);\n      border-top: 1px solid var(--border);\n      padding-top: 0.9rem;\n      margin-top: 1.5rem;\n      line-height: 1.6;\n    }\n    .disclaimer a { color: var(--accent); text-decoration: none; }\n    .disclaimer a:hover { text-decoration: underline; }\n\n    \u002F* === Mutuelle table === *\u002F\n    .mut-table { width: 100%; border-collapse: collapse; font-size: 0.82rem; margin-top: 0.75rem; }\n    .mut-table th { background: var(--accent); color: #fff; padding: 0.5rem 0.75rem; text-align: left; }\n    .mut-table td { padding: 0.45rem 0.75rem; border-bottom: 1px solid var(--border); vertical-align: top; }\n    .mut-table tr:nth-child(even) td { background: var(--bg); }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\u003Cbody>\n\u003C!-- CCN IDCC 2332 — deviations\n     indemnite: L1234-9 → plancher 2 mois garanti (CCN art. sur indemnité de licenciement, avenant déc. 2024)\n     preavis: L1234-1 → 2 semaines (\u003C6 mois), 2 mois (2+ ans non-cadres), 3 mois (cadres 2+ ans)\n     salaire-min: SMIC → grille par coefficient (valeur du point régionale) – avenant 2026\n     heures-supp: L3121-36 → contingent annuel 176h; RCR possible; majorations 25%\u002F50% maintenues\n     mutuelle: ANI 2016 → prévoyance (incapacité\u002Finvalidité\u002Fdécès) obligatoire depuis accord 2003\u002F2007, organisme recommandé Malakoff Humanis + OCIRP -->\n\n\u003Cmain class=\"tool-root\">\n\n  \u003Cdiv class=\"tool-header\">\n    \u003Cdiv>\n      \u003Ch1>Calculateur — CCN Entreprises d'Architecture\u003C\u002Fh1>\n      \u003Cp>Convention collective nationale des entreprises d'architecture\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cspan class=\"idcc-badge\">IDCC 2332\u003C\u002Fspan>\n  \u003C\u002Fdiv>\n\n  \u003C!-- Tab bar -->\n  \u003Cdiv class=\"tab-bar\" role=\"tablist\">\n    \u003Cbutton class=\"tab-btn\" data-tab=\"indemnite\" role=\"tab\">\n      \u003Ci data-lucide=\"banknote\">\u003C\u002Fi>Indemnité\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"preavis\" role=\"tab\">\n      \u003Ci data-lucide=\"clock\">\u003C\u002Fi>Préavis\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"salaire-min\" role=\"tab\">\n      \u003Ci data-lucide=\"bar-chart-2\">\u003C\u002Fi>Grille salariale\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"heures-supp\" role=\"tab\">\n      \u003Ci data-lucide=\"timer\">\u003C\u002Fi>Heures supp\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"mutuelle\" role=\"tab\">\n      \u003Ci data-lucide=\"shield-check\">\u003C\u002Fi>Prévoyance\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ══════════════════════════════════════════════════════\n       TAB 1 : INDEMNITÉ DE LICENCIEMENT\n  ══════════════════════════════════════════════════════ -->\n  \u003Cdiv class=\"panel\" data-panel=\"indemnite\" role=\"tabpanel\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cspan>La CCN 2332 améliore le code du travail (L1234-9) : même formule (¼ mois × années ≤ 10 ans, puis ⅓ mois × années > 10 ans), mais avec un \u003Cstrong>plancher garanti de 2 mois de salaire brut\u003C\u002Fstrong>, quel que soit le résultat du calcul conventionnel.\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\">\n      \u003Cdiv class=\"form-label\">\n        \u003Cspan>Salaire brut mensuel de référence\u003C\u002Fspan>\n        \u003Cspan class=\"form-value\" id=\"ind-sal-val\">3 000 €\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cinput type=\"range\" id=\"ind-sal\" min=\"1400\" max=\"10000\" step=\"50\" value=\"3000\">\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\">\n      \u003Cdiv class=\"form-label\">\n        \u003Cspan>Ancienneté (années complètes)\u003C\u002Fspan>\n        \u003Cspan class=\"form-value\" 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\n    \u003Cdiv class=\"form-group\">\n      \u003Cdiv class=\"form-label\">\u003Cspan>Motif de licenciement\u003C\u002Fspan>\u003C\u002Fdiv>\n      \u003Cdiv class=\"pills\" id=\"ind-motif-pills\">\n        \u003Cbutton class=\"pill active\" data-val=\"perso\">Motif personnel\u003C\u002Fbutton>\n        \u003Cbutton class=\"pill\" data-val=\"eco\">Motif économique\u003C\u002Fbutton>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card\" id=\"ind-result\">\n      \u003Cdiv class=\"result-label\">Indemnité de licenciement (brut)\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"ind-amount\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-detail\" id=\"ind-detail\">—\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ══════════════════════════════════════════════════════\n       TAB 2 : PRÉAVIS\n  ══════════════════════════════════════════════════════ -->\n  \u003Cdiv class=\"panel\" data-panel=\"preavis\" role=\"tabpanel\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cspan>La CCN 2332 prévoit des durées de préavis plus granulaires que L1234-1 : \u003Cstrong>2 semaines\u003C\u002Fstrong> pour moins de 6 mois d'ancienneté ; \u003Cstrong>2 mois\u003C\u002Fstrong> pour les non-cadres (2+ ans) ; \u003Cstrong>3 mois\u003C\u002Fstrong> pour les cadres dès 2 ans d'ancienneté.\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\">\n      \u003Cdiv class=\"form-label\">\u003Cspan>Catégorie professionnelle\u003C\u002Fspan>\u003C\u002Fdiv>\n      \u003Cdiv class=\"pills\" id=\"prea-cat-pills\">\n        \u003Cbutton class=\"pill active\" data-val=\"employe\">Employé \u002F Technicien\u003C\u002Fbutton>\n        \u003Cbutton class=\"pill\" data-val=\"cadre\">Cadre\u003C\u002Fbutton>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\">\n      \u003Cdiv class=\"form-label\">\u003Cspan>Ancienneté\u003C\u002Fspan>\u003C\u002Fdiv>\n      \u003Cdiv class=\"pills\" id=\"prea-anc-pills\">\n        \u003Cbutton class=\"pill active\" data-val=\"lt6m\">Moins de 6 mois\u003C\u002Fbutton>\n        \u003Cbutton class=\"pill\" data-val=\"6m2a\">6 mois à 2 ans\u003C\u002Fbutton>\n        \u003Cbutton class=\"pill\" data-val=\"gte2a\">2 ans et plus\u003C\u002Fbutton>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\">\n      \u003Cdiv class=\"form-label\">\u003Cspan>À l'initiative de\u003C\u002Fspan>\u003C\u002Fdiv>\n      \u003Cdiv class=\"pills\" id=\"prea-init-pills\">\n        \u003Cbutton class=\"pill active\" data-val=\"emp\">Employeur (licenciement)\u003C\u002Fbutton>\n        \u003Cbutton class=\"pill\" data-val=\"sal\">Salarié (démission)\u003C\u002Fbutton>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-text\" id=\"prea-result\">\n      \u003Cdiv class=\"result-label\">Durée du préavis\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"prea-duration\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-detail\" id=\"prea-detail\">—\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ══════════════════════════════════════════════════════\n       TAB 3 : GRILLE SALARIALE\n  ══════════════════════════════════════════════════════ -->\n  \u003Cdiv class=\"panel\" data-panel=\"salaire-min\" role=\"tabpanel\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cspan>La CCN 2332 établit une grille de salaires par coefficient, calculée via une \u003Cstrong>valeur du point régionale\u003C\u002Fstrong>. Le salaire conventionnel s'applique dès lors qu'il est supérieur au SMIC (1 801,80 €\u002Fmois en 2026 pour 35h).\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\">\n      \u003Cdiv class=\"form-label\">\u003Cspan>Région\u003C\u002Fspan>\u003C\u002Fdiv>\n      \u003Cselect id=\"sal-region\">\n        \u003Coption value=\"idf\">Île-de-France\u003C\u002Foption>\n        \u003Coption value=\"hdf\">Hauts-de-France\u003C\u002Foption>\n        \u003Coption value=\"aura\">Auvergne-Rhône-Alpes\u003C\u002Foption>\n        \u003Coption value=\"paca\">PACA\u003C\u002Foption>\n        \u003Coption value=\"occitanie\">Occitanie\u003C\u002Foption>\n        \u003Coption value=\"na\">Nouvelle-Aquitaine\u003C\u002Foption>\n        \u003Coption value=\"pdl\">Pays de la Loire\u003C\u002Foption>\n        \u003Coption value=\"bretagne\">Bretagne\u003C\u002Foption>\n        \u003Coption value=\"other\">Autre région\u003C\u002Foption>\n      \u003C\u002Fselect>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\">\n      \u003Cdiv class=\"form-label\">\u003Cspan>Coefficient conventionnel\u003C\u002Fspan>\u003C\u002Fdiv>\n      \u003Cselect id=\"sal-coef\">\n        \u003Coption value=\"200\">200 — Employé niveau 1\u003C\u002Foption>\n        \u003Coption value=\"230\">230 — Employé niveau 2\u003C\u002Foption>\n        \u003Coption value=\"260\">260 — Technicien \u002F Assistant\u003C\u002Foption>\n        \u003Coption value=\"300\">300 — Technicien confirmé\u003C\u002Foption>\n        \u003Coption value=\"350\">350 — Agent de maîtrise\u003C\u002Foption>\n        \u003Coption value=\"400\">400 — Cadre niveau A\u003C\u002Foption>\n        \u003Coption value=\"450\">450 — Cadre niveau B\u003C\u002Foption>\n        \u003Coption value=\"500\">500 — Cadre niveau C\u003C\u002Foption>\n        \u003Coption value=\"600\">600 — Cadre supérieur\u003C\u002Foption>\n        \u003Coption value=\"700\">700 — Architecte associé\u003C\u002Foption>\n        \u003Coption value=\"800\">800 — Architecte senior\u003C\u002Foption>\n      \u003C\u002Fselect>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\">\n      \u003Cdiv class=\"form-label\">\n        \u003Cspan>Durée hebdomadaire de travail\u003C\u002Fspan>\n        \u003Cspan class=\"form-value\" id=\"sal-hrs-val\">35 h\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cinput type=\"range\" id=\"sal-hrs\" min=\"24\" max=\"48\" step=\"0.5\" value=\"35\">\n    \u003C\u002Fdiv>\n\n    \u003C!-- Salary grid table -->\n    \u003Cdiv style=\"margin-top:1rem\">\n      \u003Cdiv style=\"font-size:0.82rem;font-weight:700;margin-bottom:0.5rem;color:var(--text-muted)\">GRILLE COMPLÈTE (extraits — valeurs indicatives 2026)\u003C\u002Fdiv>\n      \u003Ctable class=\"grid-table\" id=\"sal-grid-table\">\n        \u003Cthead>\n          \u003Ctr>\n            \u003Cth>Coefficient\u003C\u002Fth>\n            \u003Cth>Catégorie\u003C\u002Fth>\n            \u003Cth>Salaire min. mensuel\u003C\u002Fth>\n          \u003C\u002Ftr>\n        \u003C\u002Fthead>\n        \u003Ctbody id=\"sal-grid-body\">\u003C\u002Ftbody>\n        \u003Ctfoot>\n          \u003Ctr>\n            \u003Ctd colspan=\"3\">* Valeur du point régionale 2026 (base Île-de-France ≈ 9,72 €\u002Fpoint). Sources : Legifrance + avenants salariaux 2026.\u003C\u002Ftd>\n          \u003C\u002Ftr>\n        \u003C\u002Ftfoot>\n      \u003C\u002Ftable>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card\" id=\"sal-result\" style=\"margin-top:1rem\">\n      \u003Cdiv class=\"result-label\">Salaire minimum conventionnel\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"sal-amount\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-detail\" id=\"sal-detail\">—\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ══════════════════════════════════════════════════════\n       TAB 4 : HEURES SUPPLÉMENTAIRES\n  ══════════════════════════════════════════════════════ -->\n  \u003Cdiv class=\"panel\" data-panel=\"heures-supp\" role=\"tabpanel\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cspan>La CCN 2332 maintient les taux légaux (25 % pour les 8 premières heures supp, 50 % au-delà), mais fixe un \u003Cstrong>contingent annuel de 176 heures\u003C\u002Fstrong> et autorise le remplacement de la majoration par un \u003Cstrong>repos compensateur de remplacement (RCR)\u003C\u002Fstrong>.\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\">\n      \u003Cdiv class=\"form-label\">\n        \u003Cspan>Salaire horaire brut de base\u003C\u002Fspan>\n        \u003Cspan class=\"form-value\" id=\"hs-taux-val\">17,50 €\u002Fh\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cinput type=\"range\" id=\"hs-taux\" min=\"11\" max=\"60\" step=\"0.5\" value=\"17.5\">\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\">\n      \u003Cdiv class=\"form-label\">\n        \u003Cspan>Heures supp (36\u003Csup>e\u003C\u002Fsup>–43\u003Csup>e\u003C\u002Fsup> heure) — majoration 25 %\u003C\u002Fspan>\n        \u003Cspan class=\"form-value\" id=\"hs-h25-val\">4 h\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cinput type=\"range\" id=\"hs-h25\" min=\"0\" max=\"8\" step=\"0.5\" value=\"4\">\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\">\n      \u003Cdiv class=\"form-label\">\n        \u003Cspan>Heures supp (au-delà de la 43\u003Csup>e\u003C\u002Fsup> heure) — majoration 50 %\u003C\u002Fspan>\n        \u003Cspan class=\"form-value\" id=\"hs-h50-val\">0 h\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cinput type=\"range\" id=\"hs-h50\" min=\"0\" max=\"20\" step=\"0.5\" value=\"0\">\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\">\n      \u003Cdiv class=\"form-label\">\u003Cspan>Mode de compensation\u003C\u002Fspan>\u003C\u002Fdiv>\n      \u003Cdiv class=\"pills\" id=\"hs-comp-pills\">\n        \u003Cbutton class=\"pill active\" data-val=\"pay\">Paiement majoré\u003C\u002Fbutton>\n        \u003Cbutton class=\"pill\" data-val=\"rcr\">Repos compensateur (RCR)\u003C\u002Fbutton>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card\" id=\"hs-result\">\n      \u003Cdiv class=\"result-label\" id=\"hs-result-label\">Supplément brut de rémunération\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"hs-amount\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-detail\" id=\"hs-detail\">—\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ══════════════════════════════════════════════════════\n       TAB 5 : PRÉVOYANCE & MUTUELLE\n  ══════════════════════════════════════════════════════ -->\n  \u003Cdiv class=\"panel\" data-panel=\"mutuelle\" role=\"tabpanel\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cspan>La CCN 2332 impose depuis 2003 un régime de \u003Cstrong>prévoyance obligatoire\u003C\u002Fstrong> (incapacité, invalidité, décès) et depuis 2007 une \u003Cstrong>complémentaire santé\u003C\u002Fstrong> collective avec participation patronale minimale de 50 %. Organismes recommandés : \u003Cstrong>Malakoff Humanis\u003C\u002Fstrong> (prévoyance) et \u003Cstrong>OCIRP\u003C\u002Fstrong> (rentes).\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\">\n      \u003Cdiv class=\"form-label\">\u003Cspan>Catégorie\u003C\u002Fspan>\u003C\u002Fdiv>\n      \u003Cdiv class=\"pills\" id=\"mut-cat-pills\">\n        \u003Cbutton class=\"pill active\" data-val=\"employe\">Non-cadre\u003C\u002Fbutton>\n        \u003Cbutton class=\"pill\" data-val=\"cadre\">Cadre (art. 7 CCN 1947)\u003C\u002Fbutton>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\">\n      \u003Cdiv class=\"form-label\">\n        \u003Cspan>Salaire brut mensuel (tranche A \u002F plafond SS)\u003C\u002Fspan>\n        \u003Cspan class=\"form-value\" id=\"mut-sal-val\">3 000 €\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cinput type=\"range\" id=\"mut-sal\" min=\"1400\" max=\"4096\" step=\"50\" value=\"3000\">\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\" id=\"mut-trb-group\">\n      \u003Cdiv class=\"form-label\">\n        \u003Cspan>Salaire brut mensuel (tranche B — au-delà du plafond SS)\u003C\u002Fspan>\n        \u003Cspan class=\"form-value\" id=\"mut-trb-val\">0 €\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cinput type=\"range\" id=\"mut-trb\" min=\"0\" max=\"10000\" step=\"100\" value=\"0\">\n    \u003C\u002Fdiv>\n\n    \u003C!-- Prevoyance table -->\n    \u003Ctable class=\"mut-table\" style=\"margin-bottom:1rem\">\n      \u003Cthead>\n        \u003Ctr>\n          \u003Cth>Garantie\u003C\u002Fth>\n          \u003Cth>Couverture\u003C\u002Fth>\n          \u003Cth>Cotisation indicative\u003C\u002Fth>\n        \u003C\u002Ftr>\n      \u003C\u002Fthead>\n      \u003Ctbody id=\"mut-tbody\">\n      \u003C\u002Ftbody>\n    \u003C\u002Ftable>\n\n    \u003Cdiv class=\"result-card\" id=\"mut-result\">\n      \u003Cdiv class=\"result-label\">Cotisation prévoyance estimée (part employeur)\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"mut-amount\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-detail\" id=\"mut-detail\">—\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ══════════════════════════════════════════════════════\n       DISCLAIMER (shared)\n  ══════════════════════════════════════════════════════ -->\n  \u003Cp class=\"disclaimer\">\n    Calcul indicatif basé sur la CCN IDCC 2332 (Entreprises d'Architecture), avenant de décembre 2024 étendu par décret du 24 février 2026 (JO 5 mars 2026).\n    Source : \u003Ca href=\"https:\u002F\u002Fwww.legifrance.gouv.fr\u002Fconv_coll\u002Fid\u002FKALICONT000005635365\" target=\"_blank\" rel=\"noopener\">Légifrance — IDCC 2332\u003C\u002Fa>.\n    Ce calculateur est indicatif et ne remplace pas un conseil juridique.\n    Pour validation légale\n  \u003C\u002Fp>\n\n\u003C\u002Fmain>\n\n\u003Cscript>\n\u002F\u002F ===== STATE =====\nconst state = {\n  \u002F\u002F indemnite\n  ind: { sal: 3000, anc: 5, motif: 'perso' },\n  \u002F\u002F preavis\n  prea: { cat: 'employe', anc: 'lt6m', init: 'emp' },\n  \u002F\u002F salaire-min\n  sal: { region: 'idf', coef: 200, hrs: 35 },\n  \u002F\u002F heures-supp\n  hs: { taux: 17.5, h25: 4, h50: 0, comp: 'pay' },\n  \u002F\u002F mutuelle\n  mut: { cat: 'employe', sal: 3000, trb: 0 }\n};\n\n\u002F\u002F ===== FORMATTERS =====\nconst fmtEur = v => new Intl.NumberFormat('fr-FR', { style: 'currency', currency: 'EUR', maximumFractionDigits: 0 }).format(v);\nconst fmtEurDec = v => new Intl.NumberFormat('fr-FR', { style: 'currency', currency: 'EUR', minimumFractionDigits: 2, maximumFractionDigits: 2 }).format(v);\n\n\u002F\u002F ===== REGIONAL POINT VALUES (2026 estimates) =====\nconst pointValues = {\n  idf: 9.72,\n  hdf: 9.30,\n  aura: 9.35,\n  paca: 9.40,\n  occitanie: 9.25,\n  na: 9.28,\n  pdl: 9.32,\n  bretagne: 9.27,\n  other: 9.20\n};\n\n\u002F\u002F ===== SALARY GRID =====\nconst gridRows = [\n  { coef: 200, label: 'Employé niveau 1' },\n  { coef: 230, label: 'Employé niveau 2' },\n  { coef: 260, label: 'Technicien \u002F Assistant' },\n  { coef: 300, label: 'Technicien confirmé' },\n  { coef: 350, label: 'Agent de maîtrise' },\n  { coef: 400, label: 'Cadre niveau A' },\n  { coef: 450, label: 'Cadre niveau B' },\n  { coef: 500, label: 'Cadre niveau C' },\n  { coef: 600, label: 'Cadre supérieur' },\n  { coef: 700, label: 'Architecte associé' },\n  { coef: 800, label: 'Architecte senior' }\n];\n\nconst SMIC_MONTHLY_2026 = 1801.80;\n\nfunction calcSalaire(region, coef, hrs) {\n  const pv = pointValues[region] || 9.20;\n  const base = pv * coef * (hrs \u002F 35);\n  return Math.max(base, SMIC_MONTHLY_2026 * (hrs \u002F 35));\n}\n\n\u002F\u002F ===== COMPUTE FUNCTIONS =====\nfunction computeInd() {\n  const { sal, anc, motif } = state.ind;\n  let raw;\n  if (anc \u003C= 10) {\n    raw = sal * 0.25 * anc;\n  } else {\n    raw = sal * 0.25 * 10 + sal * (1\u002F3) * (anc - 10);\n  }\n  \u002F\u002F CCN floor: 2 months\n  const floor = sal * 2;\n  const total = Math.max(raw, floor);\n  const isFloor = total === floor && floor > raw;\n  document.getElementById('ind-amount').textContent = fmtEur(total);\n  document.getElementById('ind-detail').innerHTML =\n    `Calcul conventionnel : ${fmtEur(raw)}\u003Cbr>` +\n    (isFloor\n      ? `\u003Cstrong>Plancher CCN appliqué\u003C\u002Fstrong> : minimum 2 mois de salaire (${fmtEur(floor)})`\n      : `Supérieur au plancher CCN de 2 mois (${fmtEur(floor)}) — formule de droit commun retenue`) +\n    `\u003Cbr>Motif : ${motif === 'eco' ? 'Économique' : 'Personnel'} — ${anc} an${anc > 1 ? 's' : ''} d'ancienneté`;\n}\n\nfunction computePrea() {\n  const { cat, anc, init } = state.prea;\n  let dur = '', detail = '';\n  \u002F\u002F CCN 2332 rules\n  if (anc === 'lt6m') {\n    dur = init === 'emp' ? '2 semaines' : '1 semaine';\n    detail = 'Ancienneté inférieure à 6 mois';\n  } else if (anc === '6m2a') {\n    if (cat === 'cadre') {\n      dur = init === 'emp' ? '1 mois' : '1 mois';\n      detail = 'Cadre, ancienneté 6 mois–2 ans';\n    } else {\n      dur = init === 'emp' ? '1 mois' : '1 mois';\n      detail = 'Non-cadre, ancienneté 6 mois–2 ans';\n    }\n  } else {\n    \u002F\u002F gte2a\n    if (cat === 'cadre') {\n      dur = init === 'emp' ? '3 mois' : '3 mois';\n      detail = 'Cadre avec 2 ans et plus d\\'ancienneté — spécificité CCN (vs 2 mois légal)';\n    } else {\n      dur = init === 'emp' ? '2 mois' : '2 mois';\n      detail = 'Non-cadre avec 2 ans et plus d\\'ancienneté';\n    }\n  }\n  document.getElementById('prea-duration').textContent = dur;\n  document.getElementById('prea-detail').textContent = detail;\n}\n\nfunction computeSal() {\n  const { region, coef, hrs } = state.sal;\n  const amount = calcSalaire(region, coef, hrs);\n  const pv = pointValues[region] || 9.20;\n  const raw = pv * coef * (hrs \u002F 35);\n  const isSmicApplied = amount > raw;\n  document.getElementById('sal-amount').textContent = fmtEur(amount);\n  document.getElementById('sal-detail').innerHTML =\n    `Coefficient ${coef} × valeur du point ${fmtEurDec(pv)} × (${hrs}h \u002F 35h) = ${fmtEur(raw)}\u003Cbr>` +\n    (isSmicApplied\n      ? `\u003Cstrong>SMIC applicable\u003C\u002Fstrong> (${fmtEur(SMIC_MONTHLY_2026 * (hrs\u002F35))} pour ${hrs}h) — supérieur au conventionnel`\n      : `Salaire conventionnel > SMIC — appliqué`);\n\n  \u002F\u002F Render grid\n  const tbody = document.getElementById('sal-grid-body');\n  tbody.innerHTML = '';\n  gridRows.forEach(row => {\n    const s = calcSalaire(region, row.coef, hrs);\n    const tr = document.createElement('tr');\n    if (row.coef === state.sal.coef) tr.classList.add('highlight');\n    tr.innerHTML = `\u003Ctd>${row.coef}\u003C\u002Ftd>\u003Ctd>${row.label}\u003C\u002Ftd>\u003Ctd style=\"font-variant-numeric:tabular-nums;font-weight:600\">${fmtEur(s)}\u003C\u002Ftd>`;\n    tbody.appendChild(tr);\n  });\n}\n\nfunction computeHs() {\n  const { taux, h25, h50, comp } = state.hs;\n  const pay25 = taux * h25 * 1.25;\n  const pay50 = taux * h50 * 1.50;\n  const total = pay25 + pay50;\n  const totalH = h25 + h50;\n\n  const compLabel = comp === 'rcr' ? 'Repos compensateur (RCR)' : 'Paiement majoré';\n  document.getElementById('hs-result-label').textContent =\n    comp === 'rcr' ? 'Repos compensateur équivalent' : 'Supplément brut de rémunération';\n\n  if (comp === 'rcr') {\n    const rcr25 = h25 * 0.25;\n    const rcr50 = h50 * 0.50;\n    const totalRcr = h25 + rcr25 + h50 + rcr50;\n    document.getElementById('hs-amount').textContent = `${totalRcr.toFixed(1)} h`;\n    document.getElementById('hs-detail').innerHTML =\n      `${h25}h (25 %) → ${(h25 + rcr25).toFixed(1)}h repos · ${h50}h (50 %) → ${(h50 + rcr50).toFixed(1)}h repos\u003Cbr>` +\n      `Contingent annuel CCN 2332 : 176 h\u002Fan`;\n  } else {\n    document.getElementById('hs-amount').textContent = fmtEurDec(total);\n    document.getElementById('hs-detail').innerHTML =\n      `${h25}h × ${fmtEurDec(taux)} × 125 % = ${fmtEurDec(pay25)}\u003Cbr>` +\n      `${h50}h × ${fmtEurDec(taux)} × 150 % = ${fmtEurDec(pay50)}\u003Cbr>` +\n      `Contingent annuel CCN 2332 : 176 h\u002Fan (${totalH}h cette semaine)`;\n  }\n}\n\nfunction computeMut() {\n  const { cat, sal, trb } = state.mut;\n  const PLAFOND_SS = 4096; \u002F\u002F 2026 value\n\n  \u002F\u002F Prévoyance taux indicatifs (CCN 2332 + accord 2003\u002F2007)\n  let taux_ta, taux_tb, tauxEmp_ta, tauxEmp_tb, rows;\n\n  if (cat === 'cadre') {\n    \u002F\u002F Cadre : art. 7 ANI cadres 1947 — 1.50% TA min entièrement patronal\n    taux_ta = 0.015;\n    tauxEmp_ta = 0.015; \u002F\u002F 100% employeur sur TA\n    taux_tb = 0.006;\n    tauxEmp_tb = 0.003;\n    rows = [\n      { label: 'Décès (tranche A)', cov: '200 % salaire annuel', rate: '1,50 % TA (100 % patronal)' },\n      { label: 'Incapacité \u002F Invalidité', cov: '70–80 % du salaire net', rate: 'selon accord interne' },\n      { label: 'Rente conjoint (OCIRP)', cov: '16 % salaire annuel', rate: 'inclus cotisation globale' },\n      { label: 'Complémentaire santé', cov: 'Panier ANI + améliorations', rate: '50 % min. patronal' }\n    ];\n  } else {\n    \u002F\u002F Non-cadre\n    taux_ta = 0.012;\n    tauxEmp_ta = 0.006;\n    taux_tb = 0.006;\n    tauxEmp_tb = 0.003;\n    rows = [\n      { label: 'Décès', cov: '100 % salaire annuel', rate: '1,20 % TA' },\n      { label: 'Incapacité \u002F Invalidité', cov: '60–75 % du salaire net', rate: 'selon accord interne' },\n      { label: 'Rente éducation (OCIRP)', cov: 'Forfait par enfant', rate: 'inclus cotisation globale' },\n      { label: 'Complémentaire santé', cov: 'Panier ANI', rate: '50 % min. patronal' }\n    ];\n  }\n\n  const tbody = document.getElementById('mut-tbody');\n  tbody.innerHTML = '';\n  rows.forEach(r => {\n    const tr = document.createElement('tr');\n    tr.innerHTML = `\u003Ctd>${r.label}\u003C\u002Ftd>\u003Ctd>${r.cov}\u003C\u002Ftd>\u003Ctd style=\"font-variant-numeric:tabular-nums\">${r.rate}\u003C\u002Ftd>`;\n    tbody.appendChild(tr);\n  });\n\n  \u002F\u002F Estimate employer share\n  const ta = Math.min(sal, PLAFOND_SS);\n  const tb = Math.max(0, sal - PLAFOND_SS) + trb;\n  const empCot = ta * tauxEmp_ta + tb * tauxEmp_tb;\n\n  document.getElementById('mut-amount').textContent = fmtEurDec(empCot);\n  document.getElementById('mut-detail').innerHTML =\n    `Tranche A (${fmtEur(ta)}) × ${(tauxEmp_ta*100).toFixed(2)} % = ${fmtEurDec(ta * tauxEmp_ta)}\u003Cbr>` +\n    (tb > 0 ? `Tranche B (${fmtEur(tb)}) × ${(tauxEmp_tb*100).toFixed(2)} % = ${fmtEurDec(tb * tauxEmp_tb)}\u003Cbr>` : '') +\n    `Estimation indicative — taux selon accord de prévoyance CCN 2332`;\n}\n\n\u002F\u002F ===== TABS =====\nconst tabBtns = document.querySelectorAll('[data-tab]');\nconst panels = document.querySelectorAll('[data-panel]');\n\nfunction activate(id) {\n  tabBtns.forEach(t => t.classList.toggle('active', t.dataset.tab === id));\n  panels.forEach(p => p.classList.toggle('visible', p.dataset.panel === id));\n  if (location.hash !== '#' + id) location.hash = id;\n  \u002F\u002F Notify parent\n  requestAnimationFrame(() => {\n    const h = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight);\n    parent.postMessage({ type: 'resize', height: h }, '*');\n  });\n}\n\ntabBtns.forEach(t => t.addEventListener('click', () => activate(t.dataset.tab)));\n\n\u002F\u002F ===== PILLS helper =====\nfunction bindPills(containerSelector, stateObj, key, cb) {\n  const container = document.querySelector(containerSelector);\n  if (!container) return;\n  container.querySelectorAll('.pill').forEach(pill => {\n    pill.addEventListener('click', () => {\n      container.querySelectorAll('.pill').forEach(p => p.classList.remove('active'));\n      pill.classList.add('active');\n      stateObj[key] = pill.dataset.val;\n      cb();\n    });\n  });\n}\n\n\u002F\u002F ===== INDEMNITE bindings =====\ndocument.getElementById('ind-sal').addEventListener('input', e => {\n  state.ind.sal = +e.target.value;\n  document.getElementById('ind-sal-val').textContent = fmtEur(state.ind.sal);\n  computeInd();\n});\ndocument.getElementById('ind-anc').addEventListener('input', e => {\n  state.ind.anc = +e.target.value;\n  document.getElementById('ind-anc-val').textContent = state.ind.anc + ' an' + (state.ind.anc > 1 ? 's' : '');\n  computeInd();\n});\nbindPills('#ind-motif-pills', state.ind, 'motif', computeInd);\n\n\u002F\u002F ===== PREAVIS bindings =====\nbindPills('#prea-cat-pills', state.prea, 'cat', computePrea);\nbindPills('#prea-anc-pills', state.prea, 'anc', computePrea);\nbindPills('#prea-init-pills', state.prea, 'init', computePrea);\n\n\u002F\u002F ===== SALAIRE bindings =====\ndocument.getElementById('sal-region').addEventListener('change', e => {\n  state.sal.region = e.target.value;\n  computeSal();\n});\ndocument.getElementById('sal-coef').addEventListener('change', e => {\n  state.sal.coef = +e.target.value;\n  computeSal();\n});\ndocument.getElementById('sal-hrs').addEventListener('input', e => {\n  state.sal.hrs = +e.target.value;\n  document.getElementById('sal-hrs-val').textContent = state.sal.hrs + ' h';\n  computeSal();\n});\n\n\u002F\u002F ===== HEURES SUPP bindings =====\ndocument.getElementById('hs-taux').addEventListener('input', e => {\n  state.hs.taux = +e.target.value;\n  document.getElementById('hs-taux-val').textContent = fmtEurDec(state.hs.taux) + '\u002Fh';\n  computeHs();\n});\ndocument.getElementById('hs-h25').addEventListener('input', e => {\n  state.hs.h25 = +e.target.value;\n  document.getElementById('hs-h25-val').textContent = state.hs.h25 + ' h';\n  computeHs();\n});\ndocument.getElementById('hs-h50').addEventListener('input', e => {\n  state.hs.h50 = +e.target.value;\n  document.getElementById('hs-h50-val').textContent = state.hs.h50 + ' h';\n  computeHs();\n});\nbindPills('#hs-comp-pills', state.hs, 'comp', computeHs);\n\n\u002F\u002F ===== MUTUELLE bindings =====\nbindPills('#mut-cat-pills', state.mut, 'cat', computeMut);\ndocument.getElementById('mut-sal').addEventListener('input', e => {\n  state.mut.sal = +e.target.value;\n  document.getElementById('mut-sal-val').textContent = fmtEur(state.mut.sal);\n  computeMut();\n});\ndocument.getElementById('mut-trb').addEventListener('input', e => {\n  state.mut.trb = +e.target.value;\n  document.getElementById('mut-trb-val').textContent = fmtEur(state.mut.trb);\n  computeMut();\n});\n\n\u002F\u002F ===== RESIZE OBSERVER =====\nconst ro = new ResizeObserver(() => {\n  const h = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight);\n  parent.postMessage({ type: 'resize', height: h }, '*');\n});\nro.observe(document.documentElement);\n\n\u002F\u002F ===== INIT =====\nwindow.addEventListener('DOMContentLoaded', () => {\n  lucide.createIcons();\n  \u002F\u002F Activate tab from hash or default\n  const hashTab = location.hash.slice(1);\n  const validTabs = Array.from(tabBtns).map(t => t.dataset.tab);\n  const initTab = validTabs.includes(hashTab) ? hashTab : validTabs[0];\n  activate(initTab);\n  \u002F\u002F Compute all panels (for initial state)\n  computeInd();\n  computePrea();\n  computeSal();\n  computeHs();\n  computeMut();\n});\n\u003C\u002Fscript>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n","generated","juridique","consumer","both","https:\u002F\u002Fpub-bdebbd2dad294475a2da0eb657815b6b.r2.dev\u002Ftools\u002Fccn-entreprises-d-architecture-b15d1f07e8.webp",[]]