[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"footer-root-categories-fr-FR":3,"tool-content-ccn-cadres-ingenieurs-et-assimiles-des-entreprises-de-fr":83,"footer-cities-fr":156},[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":126,"tool_html":150,"source":151,"category":152,"audience":153,"publish_mode":154,"hero_image":155,"hero_image_alt":85},"ccn-cadres-ingenieurs-et-assimiles-des-entreprises-de","CCN cadres, ingénieurs et assimilés des équipements thermiques — calculateur complet","Calculateur CCN IDCC 1256 Cadres Thermique | Expert Zoom","Outil interactif couvrant l'indemnité de licenciement, le préavis, la grille salariale, les congés et la période d'essai de la CCN des cadres, ingénieurs et assimilés des entreprises de gestion d'équipements thermiques et de climatisation (IDCC 1256).","Ce calculateur couvre les 5 principales fonctions de la CCN IDCC 1256 (brochure 3042) : l'indemnité de licenciement (formule en 3 tranches : 1\u002F10, 2\u002F10 et 3\u002F10 du salaire mensuel), le préavis conventionnel (jusqu'à 6 mois pour les cadres 50+ \u002F 10 ans d'ancienneté), la grille salariale par coefficient (valeur du point 45 €, coeff. 64 à 180), les congés payés supplémentaires (8 jours tous les 2 ans) et la durée de la période d'essai (3 ou 6 mois selon le niveau de poste).",[90,109],{"name":91,"@type":92,"about":93,"author":97,"@context":100,"isPartOf":101,"inLanguage":104,"description":105,"operatingSystem":106,"applicationCategory":107,"isAccessibleForFree":108},"Calculateur CCN cadres, ingénieurs et assimilés des équipements thermiques — IDCC 1256","WebApplication",{"name":94,"@type":95,"identifier":96},"Convention collective des cadres, ingénieurs et assimilés des entreprises de gestion d'équipements thermiques et de climatisation","Thing","IDCC 1256",{"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, le préavis, la grille salariale, les congés payés et la période d'essai de la convention collective des cadres, ingénieurs et assimilés des entreprises de gestion d'équipements thermiques et de climatisation (IDCC 1256, brochure 3042).","All","FinanceApplication",true,{"@type":110,"@context":100,"mainEntity":111},"FAQPage",[112,118,122],{"name":113,"@type":114,"acceptedAnswer":115},"Comment calculer l'indemnité de licenciement dans la CCN IDCC 1256 ?","Question",{"text":116,"@type":117},"La CCN IDCC 1256 prévoit trois tranches : 1\u002F10 de mois par année pour les années 2 à 5, 2\u002F10 de mois par année pour les années 5 à 15, et 3\u002F10 de mois par année au-delà de 15 ans. Le principe de faveur s'applique si le minimum légal (L1234-9) est plus élevé.","Answer",{"name":119,"@type":114,"acceptedAnswer":120},"Quelle est la durée du préavis pour un cadre dans la CCN IDCC 1256 ?",{"text":121,"@type":117},"Le préavis est progressif (1 jour, 1 semaine, 1 mois). Les cadres de 50 ans et plus avec 10 ans d'ancienneté bénéficient de 6 mois de préavis en cas de licenciement.",{"name":123,"@type":114,"acceptedAnswer":124},"Quelle est la grille de salaires de la CCN IDCC 1256 ?",{"text":125,"@type":117},"La valeur du point est de 45 € depuis le 1er juillet 2024. Les salaires minimaux vont de 2 952 € (coefficient 64) à 8 303 € bruts par mois (coefficient 180).",[127,130,132,135,138,141,144,147],{"a":128,"q":129},"La CCN IDCC 1256 prévoit trois tranches : 1\u002F10 de mois par année d'ancienneté pour les années 2 à 5, 2\u002F10 de mois par année pour les années 5 à 15, et 3\u002F10 de mois par année au-delà de 15 ans. Le principe de faveur s'applique : si le minimum légal (L1234-9 : 1\u002F4 mois × années ≤10 ans + 1\u002F3 mois × années >10 ans) est plus élevé, c'est ce montant qui s'impose.","Comment calculer l'indemnité de licenciement dans la CCN des cadres équipements thermiques (IDCC 1256) ?",{"a":131,"q":119},"Le préavis est progressif : 1 jour (0-15 jours d'ancienneté), 1 semaine (16-31 jours), puis 1 mois à partir d'1 mois d'ancienneté. Disposition spéciale : les cadres âgés de 50 ans et plus avec 10 ans d'ancienneté ou plus bénéficient de 6 mois de préavis en cas de licenciement, et de 3 mois en cas de démission.",{"a":133,"q":134},"La grille salariale repose sur une valeur de point fixée à 45 € depuis le 1er juillet 2024. Les coefficients vont de 64 (cadre débutant, 2 952 €\u002Fmois) à 180 (directeur général, 8 303 €\u002Fmois). Ces minima conventionnels sont largement supérieurs au SMIC et s'imposent à tous les employeurs relevant de la convention.","Quelle est la grille de salaires de la CCN IDCC 1256 pour les cadres ?",{"a":136,"q":137},"Oui. En plus des 30 jours ouvrables légaux, la CCN IDCC 1256 accorde 8 jours ouvrables supplémentaires tous les 2 ans à partir de 2 ans d'ancienneté. Ainsi, un cadre avec 2 ans d'ancienneté dispose de 34 jours ouvrables par an, et ce droit s'accumule par tranches de 2 ans.","Les cadres de la CCN IDCC 1256 ont-ils droit à des congés supplémentaires ?",{"a":139,"q":140},"La durée varie selon le niveau du poste : 3 mois pour les postes de niveaux I et II, et 6 mois pour les postes de niveau III et supérieurs (en vertu d'un accord de branche autorisant le dépassement des 4 mois légaux jusqu'à la limite maximale de 8 mois).","Quelle est la durée de la période d'essai dans la CCN IDCC 1256 ?",{"a":142,"q":143},"L'IDCC 1256 (brochure JO n° 3042) est la convention collective nationale des cadres, ingénieurs et assimilés des entreprises de gestion d'équipements thermiques et de climatisation. Elle s'applique aux personnels d'encadrement des sociétés assurant la maintenance, l'exploitation et la gestion d'installations de chauffage et de climatisation.","Qu'est-ce que l'IDCC 1256 et quelles entreprises sont concernées ?",{"a":145,"q":146},"Oui. Il existe deux conventions collectives dans ce secteur : l'IDCC 998 pour les OETAM (ouvriers, employés, techniciens et agents de maîtrise) et l'IDCC 1256 pour les cadres, ingénieurs et assimilés. Les grilles salariales, les durées de préavis et les formules d'indemnité de licenciement sont spécifiques à chaque CCN.","La CCN IDCC 1256 est-elle différente de la CCN IDCC 998 ?",{"a":148,"q":149},"Le texte intégral est disponible sur Légifrance sous la référence KALICONT000005635671. Le site service-public.fr et les syndicats représentatifs (CFE-CGC, CFDT) publient également des commentaires et des guides pratiques sur les droits des cadres relevant de cette convention.","Comment accéder au texte officiel de la convention collective IDCC 1256 ?","\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 cadres ingénieurs équipements thermiques IDCC 1256\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      --success-bg: #f0fdf4;\n      --success-border: #bbf7d0;\n      --success-text: #166534;\n      --warning-bg: #fffbeb;\n      --warning-border: #fde68a;\n      --info-bg: #eff6ff;\n      --info-border: #bfdbfe;\n      --info-text: #1e40af;\n      --radius: 0.75rem;\n      --radius-sm: 0.375rem;\n      --shadow: 0 1px 3px rgba(0,0,0,0.1), 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: 0.9375rem;\n      line-height: 1.6;\n    }\n    .tool-root {\n      max-width: 720px;\n      margin: 0 auto;\n      padding: 1.25rem 1rem 2rem;\n    }\n    .tool-header {\n      margin-bottom: 1.25rem;\n    }\n    .tool-header h1 {\n      font-size: 1.125rem;\n      font-weight: 700;\n      color: var(--text);\n      line-height: 1.3;\n    }\n    .idcc-badge {\n      display: inline-flex;\n      align-items: center;\n      gap: 0.375rem;\n      background: var(--accent-light);\n      color: var(--accent);\n      border: 1px solid var(--info-border);\n      border-radius: 999px;\n      padding: 0.2rem 0.7rem;\n      font-size: 0.8125rem;\n      font-weight: 600;\n      margin-top: 0.4rem;\n    }\n    \u002F* Tabs *\u002F\n    .tabs-nav {\n      display: flex;\n      gap: 0.25rem;\n      border-bottom: 2px solid var(--border);\n      margin-bottom: 1.25rem;\n      overflow-x: auto;\n      scrollbar-width: none;\n      flex-wrap: nowrap;\n    }\n    .tabs-nav::-webkit-scrollbar { display: none; }\n    .tab-btn {\n      display: flex;\n      align-items: center;\n      gap: 0.35rem;\n      padding: 0.55rem 0.875rem;\n      border: none;\n      background: none;\n      cursor: pointer;\n      font-size: 0.875rem;\n      font-weight: 500;\n      color: var(--text-muted);\n      border-bottom: 2px solid transparent;\n      margin-bottom: -2px;\n      white-space: nowrap;\n      border-radius: var(--radius-sm) var(--radius-sm) 0 0;\n      transition: color 0.15s, border-color 0.15s, background 0.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); font-weight: 600; }\n    \u002F* Panels *\u002F\n    .tab-panel { display: none; }\n    .tab-panel.active { display: block; }\n    \u002F* Rule callout *\u002F\n    .rule-callout {\n      display: flex;\n      gap: 0.75rem;\n      align-items: flex-start;\n      background: var(--info-bg);\n      border: 1px solid var(--info-border);\n      border-radius: var(--radius);\n      padding: 0.875rem 1rem;\n      margin-bottom: 1.25rem;\n      font-size: 0.875rem;\n      color: var(--info-text);\n    }\n    .rule-callout svg { flex-shrink: 0; margin-top: 0.1rem; }\n    \u002F* Card *\u002F\n    .card {\n      background: var(--surface);\n      border: 1px solid var(--border);\n      border-radius: var(--radius);\n      padding: 1.25rem;\n      margin-bottom: 1rem;\n      box-shadow: var(--shadow);\n    }\n    .card-title {\n      font-size: 0.8125rem;\n      font-weight: 600;\n      text-transform: uppercase;\n      letter-spacing: 0.05em;\n      color: var(--text-muted);\n      margin-bottom: 1rem;\n      display: flex;\n      align-items: center;\n      gap: 0.4rem;\n    }\n    \u002F* Form elements *\u002F\n    .field { margin-bottom: 1rem; }\n    .field:last-child { margin-bottom: 0; }\n    .field label {\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n      font-size: 0.875rem;\n      font-weight: 500;\n      margin-bottom: 0.4rem;\n    }\n    .field label span.val {\n      font-weight: 700;\n      color: var(--accent);\n      font-variant-numeric: tabular-nums;\n    }\n    input[type=\"range\"] {\n      width: 100%;\n      accent-color: var(--accent);\n      cursor: pointer;\n    }\n    select, input[type=\"number\"] {\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.9375rem;\n      background: var(--surface);\n      color: var(--text);\n      outline: none;\n    }\n    select:focus, input[type=\"number\"]:focus {\n      border-color: var(--accent);\n      box-shadow: 0 0 0 3px rgba(37,99,235,0.12);\n    }\n    \u002F* Pills *\u002F\n    .pills { display: flex; flex-wrap: wrap; gap: 0.4rem; }\n    .pill {\n      padding: 0.3rem 0.8rem;\n      border: 1.5px solid var(--border);\n      border-radius: 999px;\n      font-size: 0.8125rem;\n      font-weight: 500;\n      cursor: pointer;\n      transition: all 0.15s;\n      background: var(--surface);\n      color: var(--text);\n    }\n    .pill:hover { border-color: var(--accent); color: var(--accent); }\n    .pill.active { background: var(--accent); border-color: var(--accent); color: #fff; }\n    \u002F* Result card *\u002F\n    .result-card {\n      background: linear-gradient(135deg, var(--accent) 0%, var(--accent-dark) 100%);\n      border-radius: var(--radius);\n      padding: 1.25rem 1.5rem;\n      color: #fff;\n      margin-top: 1.25rem;\n    }\n    .result-label { font-size: 0.8125rem; font-weight: 500; opacity: 0.85; margin-bottom: 0.25rem; }\n    .result-value {\n      font-size: 2rem;\n      font-weight: 800;\n      font-variant-numeric: tabular-nums;\n      line-height: 1.1;\n    }\n    .result-sub { font-size: 0.8125rem; opacity: 0.8; margin-top: 0.35rem; }\n    .result-breakdown {\n      background: rgba(255,255,255,0.15);\n      border-radius: var(--radius-sm);\n      padding: 0.625rem 0.875rem;\n      margin-top: 0.875rem;\n      font-size: 0.8125rem;\n    }\n    .result-breakdown ul { list-style: none; }\n    .result-breakdown li { display: flex; justify-content: space-between; padding: 0.15rem 0; }\n    \u002F* Grid table *\u002F\n    .grid-table {\n      width: 100%;\n      border-collapse: collapse;\n      font-size: 0.85rem;\n      margin-top: 0.5rem;\n    }\n    .grid-table th {\n      background: var(--accent-light);\n      color: var(--accent);\n      font-weight: 600;\n      padding: 0.5rem 0.75rem;\n      text-align: left;\n      border: 1px solid var(--info-border);\n      font-size: 0.8125rem;\n    }\n    .grid-table td {\n      padding: 0.45rem 0.75rem;\n      border: 1px solid var(--border);\n      font-variant-numeric: tabular-nums;\n    }\n    .grid-table tr:nth-child(even) td { background: var(--bg); }\n    .grid-table tr.highlighted td {\n      background: var(--accent-light);\n      font-weight: 600;\n      color: var(--accent);\n    }\n    \u002F* Highlight box *\u002F\n    .highlight-box {\n      background: var(--success-bg);\n      border: 1px solid var(--success-border);\n      border-radius: var(--radius-sm);\n      padding: 0.625rem 0.875rem;\n      font-size: 0.8125rem;\n      color: var(--success-text);\n      margin-top: 0.875rem;\n      display: flex;\n      align-items: flex-start;\n      gap: 0.5rem;\n    }\n    \u002F* Toggle *\u002F\n    .toggle-wrap { display: flex; align-items: center; gap: 0.75rem; }\n    .toggle {\n      position: relative;\n      width: 2.5rem;\n      height: 1.375rem;\n      cursor: pointer;\n    }\n    .toggle input { opacity: 0; width: 0; height: 0; }\n    .toggle-track {\n      position: absolute;\n      inset: 0;\n      background: var(--border);\n      border-radius: 999px;\n      transition: background 0.2s;\n    }\n    .toggle input:checked + .toggle-track { background: var(--accent); }\n    .toggle-thumb {\n      position: absolute;\n      top: 0.1875rem;\n      left: 0.1875rem;\n      width: 1rem;\n      height: 1rem;\n      background: #fff;\n      border-radius: 50%;\n      transition: transform 0.2s;\n      box-shadow: 0 1px 2px rgba(0,0,0,0.2);\n    }\n    .toggle input:checked ~ .toggle-thumb { transform: translateX(1.125rem); }\n    .toggle-label { font-size: 0.875rem; font-weight: 500; }\n    \u002F* Disclaimer *\u002F\n    .disclaimer {\n      margin-top: 1.5rem;\n      padding: 0.875rem 1rem;\n      background: var(--bg);\n      border: 1px solid var(--border);\n      border-radius: var(--radius-sm);\n      font-size: 0.8rem;\n      color: var(--text-muted);\n    }\n    .disclaimer a { color: var(--accent); text-decoration: underline; }\n    \u002F* Responsive *\u002F\n    @media (max-width: 480px) {\n      .result-value { font-size: 1.6rem; }\n      .tab-btn { padding: 0.45rem 0.65rem; font-size: 0.8125rem; }\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\u003Cbody>\n\u003C!-- CCN IDCC 1256 — deviations from code du travail\n     indemnite: L1234-9 → 1\u002F10 (2-5y), 2\u002F10 (5-15y), 3\u002F10 (>15y) (art. 36 CCN)\n     preavis: L1234-1 → progressif 1j→1sem→1mois, max 6 mois cadres 50+ \u002F 10+ ans (art. 22 CCN)\n     salaire-min: SMIC → grille par coefficient (coef 64→180), point à 45€ (avenant 2024)\n     conges: L3141-3 → 30j + 8j\u002F2 ans à partir de 2 ans ancienneté (art. CCN)\n     duree-essai: L1221-19 → 3 mois postes I-II, 6 mois postes III+ (art. 12 CCN)\n-->\n\u003Cmain class=\"tool-root\">\n  \u003Cdiv class=\"tool-header\">\n    \u003Ch1>Calculateur — Convention collective des cadres, ingénieurs et assimilés des entreprises de gestion d'équipements thermiques et de climatisation\u003C\u002Fh1>\n    \u003Cdiv class=\"idcc-badge\">\n      \u003Ci data-lucide=\"briefcase\" style=\"width:14px;height:14px\">\u003C\u002Fi>\n      IDCC 1256 · Brochure 3042\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- Tabs nav -->\n  \u003Cnav class=\"tabs-nav\" role=\"tablist\">\n    \u003Cbutton class=\"tab-btn\" data-tab=\"indemnite\" role=\"tab\">\n      \u003Ci data-lucide=\"calculator\" style=\"width:15px;height:15px\">\u003C\u002Fi>Indemnité\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"preavis\" role=\"tab\">\n      \u003Ci data-lucide=\"clock\" style=\"width:15px;height:15px\">\u003C\u002Fi>Préavis\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"salaire-min\" role=\"tab\">\n      \u003Ci data-lucide=\"euro\" style=\"width:15px;height:15px\">\u003C\u002Fi>Grille salariale\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"conges\" role=\"tab\">\n      \u003Ci data-lucide=\"calendar\" style=\"width:15px;height:15px\">\u003C\u002Fi>Congés\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"duree-essai\" role=\"tab\">\n      \u003Ci data-lucide=\"user-check\" style=\"width:15px;height:15px\">\u003C\u002Fi>Essai\n    \u003C\u002Fbutton>\n  \u003C\u002Fnav>\n\n  \u003C!-- TAB: Indemnité de licenciement -->\n  \u003Cdiv class=\"tab-panel\" data-panel=\"indemnite\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\" style=\"width:18px;height:18px;flex-shrink:0\">\u003C\u002Fi>\n      \u003Cp>La CCN IDCC 1256 prévoit une formule dégressive par tranches : \u003Cstrong>1\u002F10 de mois par an (2-5 ans)\u003C\u002Fstrong>, \u003Cstrong>2\u002F10 de mois par an (5-15 ans)\u003C\u002Fstrong> et \u003Cstrong>3\u002F10 de mois par an (au-delà de 15 ans)\u003C\u002Fstrong>. La formule légale (L1234-9) est de 1\u002F4 mois ≤10 ans et 1\u002F3 mois >10 ans.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"card\">\n      \u003Cdiv class=\"card-title\">\u003Ci data-lucide=\"sliders-horizontal\" style=\"width:14px;height:14px\">\u003C\u002Fi>Paramètres\u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Salaire brut mensuel de référence \u003Cspan class=\"val\" id=\"ind-sal-val\">3 500 €\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"ind-sal\" min=\"1500\" max=\"12000\" step=\"50\" value=\"3500\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Ancienneté \u003Cspan class=\"val\" id=\"ind-anc-val\">8 ans\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"ind-anc\" min=\"2\" max=\"35\" step=\"1\" value=\"8\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Cdiv style=\"font-size:0.875rem;font-weight:500;margin-bottom:0.4rem\">Motif de rupture\u003C\u002Fdiv>\n        \u003Cdiv class=\"pills\" id=\"ind-motif-group\">\n          \u003Cbutton class=\"pill active\" data-val=\"licenciement\">Licenciement\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"eco\">Licenc. éco.\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"inaptitude\">Inaptitude\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-value\" id=\"ind-amount\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"ind-sub\">\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-breakdown\" id=\"ind-breakdown\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- TAB: Préavis -->\n  \u003Cdiv class=\"tab-panel\" data-panel=\"preavis\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\" style=\"width:18px;height:18px;flex-shrink:0\">\u003C\u002Fi>\n      \u003Cp>La CCN IDCC 1256 prévoit un préavis progressif (1 jour → 1 semaine → 1 mois) selon l'ancienneté. Pour les cadres licenciés âgés de \u003Cstrong>50 ans et plus\u003C\u002Fstrong> avec \u003Cstrong>10 ans d'ancienneté ou plus\u003C\u002Fstrong>, le préavis atteint \u003Cstrong>6 mois\u003C\u002Fstrong>, bien au-delà du droit commun.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"card\">\n      \u003Cdiv class=\"card-title\">\u003Ci data-lucide=\"sliders-horizontal\" style=\"width:14px;height:14px\">\u003C\u002Fi>Paramètres\u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Ancienneté \u003Cspan class=\"val\" id=\"pre-anc-val\">3 ans\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"pre-anc\" min=\"0\" max=\"30\" step=\"1\" value=\"3\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Âge \u003Cspan class=\"val\" id=\"pre-age-val\">45 ans\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"pre-age\" min=\"18\" max=\"65\" step=\"1\" value=\"45\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Cdiv style=\"font-size:0.875rem;font-weight:500;margin-bottom:0.4rem\">Type de rupture\u003C\u002Fdiv>\n        \u003Cdiv class=\"pills\" id=\"pre-motif-group\">\n          \u003Cbutton class=\"pill active\" 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=\"pre-result\">\n      \u003Cdiv class=\"result-label\">Durée du préavis\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"pre-duration\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"pre-sub\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- TAB: Grille salariale -->\n  \u003Cdiv class=\"tab-panel\" data-panel=\"salaire-min\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\" style=\"width:18px;height:18px;flex-shrink:0\">\u003C\u002Fi>\n      \u003Cp>La CCN IDCC 1256 prévoit une grille par coefficients (64 à 180). La valeur du point est fixée à \u003Cstrong>45 € depuis le 1er juillet 2024\u003C\u002Fstrong>. Les salaires minimaux vont de \u003Cstrong>2 952 € à 8 303 € bruts\u002Fmois\u003C\u002Fstrong>, bien au-delà du SMIC.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"card\">\n      \u003Cdiv class=\"card-title\">\u003Ci data-lucide=\"sliders-horizontal\" style=\"width:14px;height:14px\">\u003C\u002Fi>Votre coefficient\u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Coefficient hiérarchique\u003C\u002Flabel>\n        \u003Cselect id=\"sal-coef\">\n          \u003Coption value=\"64\">64 — Cadre débutant (2 952 €\u002Fmois)\u003C\u002Foption>\n          \u003Coption value=\"68\">68 — Cadre A (3 136 €\u002Fmois)\u003C\u002Foption>\n          \u003Coption value=\"75\">75 — Cadre B (3 459 €\u002Fmois)\u003C\u002Foption>\n          \u003Coption value=\"80\">80 — Cadre B confirmé (3 690 €\u002Fmois)\u003C\u002Foption>\n          \u003Coption value=\"90\">90 — Ingénieur \u002F Chef de service (4 151 €\u002Fmois)\u003C\u002Foption>\n          \u003Coption value=\"95\">95 — Ingénieur confirmé (4 382 €\u002Fmois)\u003C\u002Foption>\n          \u003Coption value=\"105\">105 — Cadre supérieur (4 843 €\u002Fmois)\u003C\u002Foption>\n          \u003Coption value=\"115\">115 — Ingénieur senior (5 304 €\u002Fmois)\u003C\u002Foption>\n          \u003Coption value=\"120\">120 — Cadre supérieur confirmé (5 535 €\u002Fmois)\u003C\u002Foption>\n          \u003Coption value=\"140\">140 — Directeur technique (6 458 €\u002Fmois)\u003C\u002Foption>\n          \u003Coption value=\"160\">160 — Directeur (7 380 €\u002Fmois)\u003C\u002Foption>\n          \u003Coption value=\"180\">180 — Directeur général (8 303 €\u002Fmois)\u003C\u002Foption>\n        \u003C\u002Fselect>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Durée hebdomadaire \u003Cspan class=\"val\" id=\"sal-h-val\">35h\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"sal-h\" min=\"24\" max=\"48\" step=\"1\" value=\"35\">\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv id=\"sal-result-card\" class=\"result-card\">\n      \u003Cdiv class=\"result-label\">Salaire minimum conventionnel\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"sal-amount\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"sal-sub\">\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-breakdown\" id=\"sal-breakdown\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"card\" style=\"margin-top:1rem\">\n      \u003Cdiv class=\"card-title\">\u003Ci data-lucide=\"table\" style=\"width:14px;height:14px\">\u003C\u002Fi>Grille complète (valeur du point : 45 €)\u003C\u002Fdiv>\n      \u003Ctable class=\"grid-table\" id=\"sal-grid\">\n        \u003Cthead>\n          \u003Ctr>\n            \u003Cth>Coefficient\u003C\u002Fth>\n            \u003Cth>Salaire annuel\u003C\u002Fth>\n            \u003Cth>Salaire mensuel\u003C\u002Fth>\n          \u003C\u002Ftr>\n        \u003C\u002Fthead>\n        \u003Ctbody>\u003C\u002Ftbody>\n      \u003C\u002Ftable>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- TAB: Congés payés -->\n  \u003Cdiv class=\"tab-panel\" data-panel=\"conges\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\" style=\"width:18px;height:18px;flex-shrink:0\">\u003C\u002Fi>\n      \u003Cp>La CCN IDCC 1256 accorde \u003Cstrong>8 jours ouvrables supplémentaires tous les 2 ans\u003C\u002Fstrong> à partir de 2 ans d'ancienneté, en plus des 30 jours ouvrables légaux. Un cadre de 2 ans d'ancienneté dispose ainsi de \u003Cstrong>34 jours\u003C\u002Fstrong>, et cette majoration continue tous les 2 ans.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"card\">\n      \u003Cdiv class=\"card-title\">\u003Ci data-lucide=\"sliders-horizontal\" style=\"width:14px;height:14px\">\u003C\u002Fi>Paramètres\u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Ancienneté \u003Cspan class=\"val\" id=\"cong-anc-val\">5 ans\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"cong-anc\" min=\"0\" max=\"30\" step=\"1\" value=\"5\">\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card\" id=\"cong-result\">\n      \u003Cdiv class=\"result-label\">Congés payés annuels\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"cong-total\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"cong-sub\">\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-breakdown\" id=\"cong-breakdown\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- TAB: Durée d'essai -->\n  \u003Cdiv class=\"tab-panel\" data-panel=\"duree-essai\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\" style=\"width:18px;height:18px;flex-shrink:0\">\u003C\u002Fi>\n      \u003Cp>La CCN IDCC 1256 différencie la durée d'essai selon le niveau de poste : \u003Cstrong>3 mois pour les postes de niveaux I et II\u003C\u002Fstrong>, \u003Cstrong>6 mois pour les postes de niveau III et supérieurs\u003C\u002Fstrong>. Ce dernier palier dépasse les 4 mois prévus par L1221-19 mais reste dans la limite légale maximale renouvelable.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"card\">\n      \u003Cdiv class=\"card-title\">\u003Ci data-lucide=\"sliders-horizontal\" style=\"width:14px;height:14px\">\u003C\u002Fi>Niveau du poste\u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Cdiv style=\"font-size:0.875rem;font-weight:500;margin-bottom:0.4rem\">Niveau de classification\u003C\u002Fdiv>\n        \u003Cdiv class=\"pills\" id=\"essai-niveau-group\">\n          \u003Cbutton class=\"pill active\" data-val=\"1-2\">Niveaux I et II\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"3plus\">Niveau III et +\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card\" id=\"essai-result\">\n      \u003Cdiv class=\"result-label\">Durée de la période d'essai\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"essai-duration\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"essai-sub\">\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-breakdown\" id=\"essai-breakdown\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- Disclaimer (shared) -->\n  \u003Cp class=\"disclaimer\">\n    \u003Ci data-lucide=\"alert-triangle\" style=\"width:13px;height:13px;display:inline;vertical-align:middle;margin-right:4px\">\u003C\u002Fi>\n    Calcul indicatif basé sur la CCN IDCC 1256 (brochure 3042). Source :\n    \u003Ca href=\"https:\u002F\u002Fwww.legifrance.gouv.fr\u002Fconv_coll\u002Fid\u002FKALICONT000005635671\" target=\"_blank\" rel=\"noopener\">Légifrance — KALICONT000005635671\u003C\u002Fa>.\n    Mis à jour avec la valeur du point au 1er juillet 2024.\n    Pour toute validation légale ou litige\n  \u003C\u002Fp>\n\u003C\u002Fmain>\n\n\u003Cscript>\n\u002F\u002F ─── Formatters ───────────────────────────────────────────────────────────────\nconst fmtEur = v => new Intl.NumberFormat('fr-FR', { style: 'currency', currency: 'EUR', maximumFractionDigits: 0 }).format(v);\nconst fmtNum = v => new Intl.NumberFormat('fr-FR').format(v);\n\n\u002F\u002F ─── State ────────────────────────────────────────────────────────────────────\nconst state = {\n  ind: { sal: 3500, anc: 8, motif: 'licenciement' },\n  pre: { anc: 3, age: 45, motif: 'licenciement' },\n  sal: { coef: 64, heures: 35 },\n  cong: { anc: 5 },\n  essai: { niveau: '1-2' }\n};\n\n\u002F\u002F ─── Compute functions ────────────────────────────────────────────────────────\n\nfunction computeIndemnite() {\n  const { sal, anc, motif } = state.ind;\n  if (anc \u003C 2) {\n    return { amount: 0, breakdown: 'Ancienneté insuffisante (minimum 2 ans)', detail: '' };\n  }\n  \u002F\u002F CCN IDCC 1256 formula:\n  \u002F\u002F 1\u002F10 par an pour les années 2 à 5\n  \u002F\u002F 2\u002F10 par an pour les années 5 à 15\n  \u002F\u002F 3\u002F10 par an pour les années au-delà de 15\n  const a1 = Math.min(anc, 5) - 2; \u002F\u002F years 2-5 (0 to 3)\n  const a2_raw = Math.min(anc, 15) - 5; \u002F\u002F years 5-15\n  const a2 = Math.max(0, a2_raw);\n  const a3 = Math.max(0, anc - 15); \u002F\u002F years >15\n\n  const tranche1 = Math.max(0, a1) * sal * (1 \u002F 10);\n  const tranche2 = a2 * sal * (2 \u002F 10);\n  const tranche3 = a3 * sal * (3 \u002F 10);\n  const total = tranche1 + tranche2 + tranche3;\n\n  \u002F\u002F Legal calculation for comparison\n  const legal1 = Math.min(anc, 10) * sal * (1 \u002F 4);\n  const legal2 = Math.max(0, anc - 10) * sal * (1 \u002F 3);\n  const legalTotal = legal1 + legal2;\n\n  const applicable = Math.max(total, legalTotal);\n\n  let breakdown = '\u003Cul>';\n  if (a1 > 0) breakdown += `\u003Cli>\u003Cspan>Tranches 2-5 ans (${Math.max(0, a1)} an(s) × 1\u002F10)\u003C\u002Fspan>\u003Cspan>${fmtEur(tranche1)}\u003C\u002Fspan>\u003C\u002Fli>`;\n  if (a2 > 0) breakdown += `\u003Cli>\u003Cspan>Tranches 5-15 ans (${a2} an(s) × 2\u002F10)\u003C\u002Fspan>\u003Cspan>${fmtEur(tranche2)}\u003C\u002Fspan>\u003C\u002Fli>`;\n  if (a3 > 0) breakdown += `\u003Cli>\u003Cspan>Tranches >15 ans (${a3} an(s) × 3\u002F10)\u003C\u002Fspan>\u003Cspan>${fmtEur(tranche3)}\u003C\u002Fspan>\u003C\u002Fli>`;\n  breakdown += `\u003Cli>\u003Cspan>\u003Cstrong>Total CCN\u003C\u002Fstrong>\u003C\u002Fspan>\u003Cspan>\u003Cstrong>${fmtEur(total)}\u003C\u002Fstrong>\u003C\u002Fspan>\u003C\u002Fli>`;\n  breakdown += `\u003Cli>\u003Cspan>Minimum légal (L1234-9)\u003C\u002Fspan>\u003Cspan>${fmtEur(legalTotal)}\u003C\u002Fspan>\u003C\u002Fli>`;\n  breakdown += '\u003C\u002Ful>';\n\n  const basis = applicable === legalTotal && legalTotal > total ? 'Base : minimum légal (plus favorable)' : 'Base : formule conventionnelle';\n\n  return { amount: applicable, breakdown, detail: basis };\n}\n\nfunction computePreavis() {\n  const { anc, age, motif } = state.pre;\n  \u002F\u002F CCN IDCC 1256\n  \u002F\u002F Progressive: 1-15 days → 1 day; 16-31 days → 1 week; beyond → 1 month\n  \u002F\u002F Special case: age 50+ AND ancienneté 10+ → licenciement = 6 months, démission = 3 months\n\n  if (age >= 50 && anc >= 10) {\n    if (motif === 'licenciement') {\n      return { duration: '6 mois', sub: 'Disposition spéciale : cadre 50 ans et plus avec 10 ans d\\'ancienneté', note: 'Correspond à la disposition la plus protectrice de la CCN IDCC 1256.' };\n    } else {\n      return { duration: '3 mois', sub: 'Disposition spéciale démission : cadre 50 ans et plus avec 10 ans d\\'ancienneté', note: '' };\n    }\n  }\n\n  \u002F\u002F Standard progressive scale\n  let duration, sub;\n  if (anc === 0) {\n    duration = '1 jour';\n    sub = 'Période initiale (1 à 15 jours d\\'ancienneté)';\n  } else if (anc \u003C 1) {\n    duration = '1 semaine';\n    sub = 'Ancienneté de 16 à 31 jours';\n  } else {\n    duration = '1 mois';\n    sub = 'Cadre, ancienneté ≥ 1 mois';\n  }\n  return { duration, sub, note: '' };\n}\n\n\u002F\u002F Salary grid: coefficient × 45 € × 12 months \u002F 12\nconst GRID = [\n  { coef: 64, annual: 35424 },\n  { coef: 68, annual: 37638 },\n  { coef: 75, annual: 41513 },\n  { coef: 80, annual: 44280 },\n  { coef: 90, annual: 49815 },\n  { coef: 95, annual: 52583 },\n  { coef: 105, annual: 58118 },\n  { coef: 115, annual: 63653 },\n  { coef: 120, annual: 66420 },\n  { coef: 140, annual: 77490 },\n  { coef: 160, annual: 88560 },\n  { coef: 180, annual: 99630 },\n];\n\nfunction computeSalaire() {\n  const { coef, heures } = state.sal;\n  const row = GRID.find(r => r.coef === Number(coef)) || GRID[0];\n  const monthly35h = row.annual \u002F 12;\n  let monthly = monthly35h;\n  if (heures !== 35) {\n    monthly = monthly35h * (heures \u002F 35);\n  }\n  return { annual: row.annual, monthly35h, monthly, coef: row.coef };\n}\n\nfunction computeConges() {\n  const { anc } = state.cong;\n  const base = 30; \u002F\u002F legal minimum (ouvrables)\n  let extra = 0;\n  \u002F\u002F 8 extra working days every 2 years starting from 2 years seniority\n  if (anc >= 2) {\n    const periods = Math.floor(anc \u002F 2);\n    extra = periods * 8;\n  }\n  const total = base + extra;\n  return { base, extra, total, anc };\n}\n\nfunction computeEssai() {\n  const { niveau } = state.essai;\n  if (niveau === '1-2') {\n    return {\n      duration: '3 mois',\n      sub: 'Postes de niveaux I et II — conforme au plafond L1221-19',\n      breakdown: '\u003Cul>\u003Cli>\u003Cspan>Durée CCN\u003C\u002Fspan>\u003Cspan>3 mois\u003C\u002Fspan>\u003C\u002Fli>\u003Cli>\u003Cspan>Plafond légal (L1221-19)\u003C\u002Fspan>\u003Cspan>4 mois\u003C\u002Fspan>\u003C\u002Fli>\u003Cli>\u003Cspan>Renouvellement possible\u003C\u002Fspan>\u003Cspan>Non mentionné\u003C\u002Fspan>\u003C\u002Fli>\u003C\u002Ful>'\n    };\n  } else {\n    return {\n      duration: '6 mois',\n      sub: 'Postes de niveau III et supérieurs — accord de branche',\n      breakdown: '\u003Cul>\u003Cli>\u003Cspan>Durée CCN\u003C\u002Fspan>\u003Cspan>6 mois\u003C\u002Fspan>\u003C\u002Fli>\u003Cli>\u003Cspan>Plafond légal (L1221-19)\u003C\u002Fspan>\u003Cspan>4 mois (renouvelable → max 8 mois)\u003C\u002Fspan>\u003C\u002Fli>\u003Cli>\u003Cspan>Accord de branche\u003C\u002Fspan>\u003Cspan>Autorisé jusqu\\'à 8 mois\u003C\u002Fspan>\u003C\u002Fli>\u003C\u002Ful>'\n    };\n  }\n}\n\n\u002F\u002F ─── Render functions ─────────────────────────────────────────────────────────\nfunction renderIndemnite() {\n  const r = computeIndemnite();\n  document.getElementById('ind-amount').textContent = fmtEur(r.amount);\n  document.getElementById('ind-sub').textContent = r.detail;\n  document.getElementById('ind-breakdown').innerHTML = r.breakdown;\n}\n\nfunction renderPreavis() {\n  const r = computePreavis();\n  document.getElementById('pre-duration').textContent = r.duration;\n  document.getElementById('pre-sub').textContent = r.sub;\n}\n\nfunction renderSalaire() {\n  const r = computeSalaire();\n  document.getElementById('sal-amount').textContent = fmtEur(r.monthly);\n  document.getElementById('sal-sub').textContent = `Coefficient ${r.coef} × 45 € = ${fmtEur(r.annual)} \u002Fan`;\n  document.getElementById('sal-breakdown').innerHTML =\n    `\u003Cul>\n      \u003Cli>\u003Cspan>Salaire annuel conventionnel\u003C\u002Fspan>\u003Cspan>${fmtEur(r.annual)}\u003C\u002Fspan>\u003C\u002Fli>\n      \u003Cli>\u003Cspan>Salaire mensuel (35h)\u003C\u002Fspan>\u003Cspan>${fmtEur(r.monthly35h)}\u003C\u002Fspan>\u003C\u002Fli>\n      ${state.sal.heures !== 35 ? `\u003Cli>\u003Cspan>Ajusté ${state.sal.heures}h\u002Fsem\u003C\u002Fspan>\u003Cspan>${fmtEur(r.monthly)}\u003C\u002Fspan>\u003C\u002Fli>` : ''}\n      \u003Cli>\u003Cspan>Valeur du point (1er juil. 2024)\u003C\u002Fspan>\u003Cspan>45 €\u003C\u002Fspan>\u003C\u002Fli>\n    \u003C\u002Ful>`;\n\n  \u002F\u002F Build grid table\n  const tbody = document.querySelector('#sal-grid tbody');\n  tbody.innerHTML = '';\n  GRID.forEach(row => {\n    const tr = document.createElement('tr');\n    if (row.coef === Number(state.sal.coef)) tr.classList.add('highlighted');\n    tr.innerHTML = `\u003Ctd>${row.coef}\u003C\u002Ftd>\u003Ctd>${fmtEur(row.annual)}\u003C\u002Ftd>\u003Ctd>${fmtEur(row.annual \u002F 12)}\u003C\u002Ftd>`;\n    tbody.appendChild(tr);\n  });\n}\n\nfunction renderConges() {\n  const r = computeConges();\n  document.getElementById('cong-total').textContent = `${r.total} jours ouvrables`;\n  document.getElementById('cong-sub').textContent = r.anc \u003C 2 ? 'Ancienneté \u003C 2 ans — base légale uniquement' : `+${r.extra} jours conventionnels (${Math.floor(r.anc \u002F 2)} période(s) × 8 jours)`;\n  document.getElementById('cong-breakdown').innerHTML =\n    `\u003Cul>\n      \u003Cli>\u003Cspan>Base légale (L3141-3)\u003C\u002Fspan>\u003Cspan>${r.base} jours\u003C\u002Fspan>\u003C\u002Fli>\n      \u003Cli>\u003Cspan>Jours supplémentaires CCN\u003C\u002Fspan>\u003Cspan>+${r.extra} jours\u003C\u002Fspan>\u003C\u002Fli>\n      \u003Cli>\u003Cspan>\u003Cstrong>Total\u003C\u002Fstrong>\u003C\u002Fspan>\u003Cspan>\u003Cstrong>${r.total} jours\u003C\u002Fstrong>\u003C\u002Fspan>\u003C\u002Fli>\n    \u003C\u002Ful>`;\n}\n\nfunction renderEssai() {\n  const r = computeEssai();\n  document.getElementById('essai-duration').textContent = r.duration;\n  document.getElementById('essai-sub').textContent = r.sub;\n  document.getElementById('essai-breakdown').innerHTML = r.breakdown;\n}\n\n\u002F\u002F ─── Input wiring ─────────────────────────────────────────────────────────────\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  renderIndemnite();\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} ans`;\n  renderIndemnite();\n});\ndocument.getElementById('ind-motif-group').addEventListener('click', e => {\n  const pill = e.target.closest('.pill');\n  if (!pill) return;\n  document.querySelectorAll('#ind-motif-group .pill').forEach(p => p.classList.remove('active'));\n  pill.classList.add('active');\n  state.ind.motif = pill.dataset.val;\n  renderIndemnite();\n});\n\ndocument.getElementById('pre-anc').addEventListener('input', e => {\n  state.pre.anc = +e.target.value;\n  document.getElementById('pre-anc-val').textContent = `${state.pre.anc} ans`;\n  renderPreavis();\n});\ndocument.getElementById('pre-age').addEventListener('input', e => {\n  state.pre.age = +e.target.value;\n  document.getElementById('pre-age-val').textContent = `${state.pre.age} ans`;\n  renderPreavis();\n});\ndocument.getElementById('pre-motif-group').addEventListener('click', e => {\n  const pill = e.target.closest('.pill');\n  if (!pill) return;\n  document.querySelectorAll('#pre-motif-group .pill').forEach(p => p.classList.remove('active'));\n  pill.classList.add('active');\n  state.pre.motif = pill.dataset.val;\n  renderPreavis();\n});\n\ndocument.getElementById('sal-coef').addEventListener('change', e => {\n  state.sal.coef = +e.target.value;\n  renderSalaire();\n});\ndocument.getElementById('sal-h').addEventListener('input', e => {\n  state.sal.heures = +e.target.value;\n  document.getElementById('sal-h-val').textContent = `${state.sal.heures}h`;\n  renderSalaire();\n});\n\ndocument.getElementById('cong-anc').addEventListener('input', e => {\n  state.cong.anc = +e.target.value;\n  document.getElementById('cong-anc-val').textContent = `${state.cong.anc} ans`;\n  renderConges();\n});\n\ndocument.getElementById('essai-niveau-group').addEventListener('click', e => {\n  const pill = e.target.closest('.pill');\n  if (!pill) return;\n  document.querySelectorAll('#essai-niveau-group .pill').forEach(p => p.classList.remove('active'));\n  pill.classList.add('active');\n  state.essai.niveau = pill.dataset.val;\n  renderEssai();\n});\n\n\u002F\u002F ─── Tab activation ───────────────────────────────────────────────────────────\nconst tabBtns = document.querySelectorAll('[data-tab]');\nconst tabPanels = document.querySelectorAll('[data-panel]');\n\nfunction activate(id) {\n  tabBtns.forEach(t => t.classList.toggle('active', t.dataset.tab === id));\n  tabPanels.forEach(p => p.classList.toggle('active', p.dataset.panel === id));\n  if (location.hash !== '#' + id) location.hash = id;\n  requestAnimationFrame(() => window.dispatchEvent(new Event('resize')));\n}\n\ntabBtns.forEach(t => t.addEventListener('click', () => activate(t.dataset.tab)));\n\n\u002F\u002F ─── Init ─────────────────────────────────────────────────────────────────────\ndocument.addEventListener('DOMContentLoaded', () => {\n  lucide.createIcons();\n\n  const hashTab = location.hash.slice(1);\n  const validTab = document.querySelector(`[data-tab=\"${hashTab}\"]`) ? hashTab : tabBtns[0].dataset.tab;\n  activate(validTab);\n\n  renderIndemnite();\n  renderPreavis();\n  renderSalaire();\n  renderConges();\n  renderEssai();\n});\n\n\u002F\u002F ─── Iframe resize contract ───────────────────────────────────────────────────\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\u003C\u002Fscript>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n","generated","juridique","consumer","both","https:\u002F\u002Fpub-bdebbd2dad294475a2da0eb657815b6b.r2.dev\u002Ftools\u002Fccn-cadres-ingenieurs-et-assimiles-des-entreprises-de-66821179e3.webp",[]]