[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"footer-root-categories-fr-FR":3,"tool-content-convention-collective-commerce-alimentaire-idcc-2216-fr":83,"footer-cities-fr":160},[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":89,"json_ld":90,"faq":133,"tool_html":155,"source":156,"category":7,"audience":157,"publish_mode":158,"hero_image":159,"hero_image_alt":85},"cc-alimentaire-idcc-2216","Convention Collective Commerce Alimentaire IDCC 2216 — Calculateurs","Outil IDCC 2216 : salaire, congés, licenciement","Calculateurs interactifs pour la convention collective du commerce alimentaire IDCC 2216 : salaire minimum 2026, heures supplémentaires, congés payés, préavis et indemnité de licenciement.","Cet outil interactif couvre tous les droits de la convention collective du commerce de détail et de gros à prédominance alimentaire (IDCC 2216). Calculez votre salaire minimum selon votre niveau de classification, simulez vos heures supplémentaires avec les majorations légales (25% et 50%), estimez votre indemnité de congés payés, votre préavis et votre indemnité de licenciement selon votre ancienneté et votre catégorie professionnelle.","convention-collective-commerce-alimentaire-idcc-2216",[91,116],{"name":92,"@type":93,"author":94,"offers":98,"@context":102,"inLanguage":103,"description":104,"featureList":105,"operatingSystem":113,"applicationCategory":114,"isAccessibleForFree":115},"Outil Convention Collective Commerce Alimentaire IDCC 2216","WebApplication",{"url":95,"name":96,"@type":97},"https:\u002F\u002Fexpert-zoom.com","Expert-Zoom","Organization",{"@type":99,"price":100,"priceCurrency":101},"Offer","0","EUR","https:\u002F\u002Fschema.org","fr","Calculateurs interactifs pour la convention collective du commerce de détail et de gros à prédominance alimentaire (IDCC 2216) : salaire minimum, heures supplémentaires, congés payés, préavis, indemnité de licenciement.",[106,107,108,109,110,111,112],"Calculateur de salaire minimum par niveau (IDCC 2216)","Simulateur d'heures supplémentaires avec majorations 25% et 50%","Calculateur de congés payés et indemnité","Calcul du préavis selon catégorie et ancienneté","Simulateur d'indemnité de licenciement conventionnelle","Grille complète des salaires minimaux 2026","Majoration travail le dimanche et jours fériés","All","BusinessApplication",true,{"@type":117,"@context":102,"mainEntity":118},"FAQPage",[119,125,129],{"name":120,"@type":121,"acceptedAnswer":122},"Qu'est-ce que la convention collective IDCC 2216 ?","Question",{"text":123,"@type":124},"La convention collective nationale du commerce de détail et de gros à prédominance alimentaire (IDCC 2216) est un accord collectif qui fixe les conditions de travail minimales applicables aux salariés des supermarchés, hypermarchés, épiceries et commerces alimentaires en France.","Answer",{"name":126,"@type":121,"acceptedAnswer":127},"Quel est le salaire minimum dans le commerce alimentaire (IDCC 2216) en 2026 ?",{"text":128,"@type":124},"En 2026, les salaires minimaux de la convention IDCC 2216 varient de 1 893,48 € brut\u002Fmois pour le niveau 1A à 3 953,38 € brut\u002Fmois pour le niveau 8.",{"name":130,"@type":121,"acceptedAnswer":131},"Comment sont calculées les heures supplémentaires dans le commerce alimentaire ?",{"text":132,"@type":124},"Les heures supplémentaires sont majorées de 25% pour les heures 36 à 43 et de 50% à partir de la 44e heure. Le contingent annuel est de 180 heures.",[134,136,138,140,143,146,149,152],{"a":135,"q":120},"La convention collective nationale du commerce de détail et de gros à prédominance alimentaire (IDCC 2216) est un accord collectif qui fixe les conditions de travail minimales applicables aux salariés des supermarchés, hypermarchés, épiceries et commerces alimentaires en France. Elle complète le Code du travail en définissant les salaires minima, les congés, les préavis, les indemnités de licenciement et d'autres droits spécifiques à ce secteur.",{"a":137,"q":126},"En 2026, les salaires minimaux de la convention IDCC 2216 varient selon les niveaux de classification : de 1 893,48 € brut\u002Fmois pour le niveau 1A (employé en période d'accueil) à 3 953,38 € brut\u002Fmois pour le niveau 8 (cadre supérieur). Le SMIC 2026 est de 1 801,80 €\u002Fmois pour 35h\u002Fsemaine, et le salaire conventionnel s'applique s'il est plus élevé.",{"a":139,"q":130},"Dans la convention IDCC 2216, les heures supplémentaires sont majorées de 25% pour les heures comprises entre la 36e et la 43e heure de la semaine, et de 50% pour les heures à partir de la 44e heure. Le contingent annuel d'heures supplémentaires est de 180 heures. Au-delà, un repos compensateur obligatoire s'ajoute à la majoration.",{"a":141,"q":142},"Les salariés du commerce alimentaire ont droit à 30 jours ouvrables de congés payés par an (base légale). Des jours supplémentaires sont accordés selon l'ancienneté : +1 jour à 10 ans, +2 jours à 15 ans, +3 jours à 20 ans. L'indemnité de congés est calculée selon la méthode la plus favorable : 1\u002F10e de la rémunération annuelle ou le maintien de salaire.","Quels sont les droits à congés payés dans la convention du commerce alimentaire ?",{"a":144,"q":145},"La convention IDCC 2216 prévoit une prime annuelle équivalente à 100% du salaire mensuel de base (parfois appelée 13e mois), versée généralement en novembre. Elle est due aux salariés ayant au moins 1 an d'ancienneté. En cas d'entrée en cours d'année, la prime est calculée au prorata à raison d'un 1\u002F12e par mois travaillé.","Quelle est la prime annuelle prévue par la convention IDCC 2216 ?",{"a":147,"q":148},"La majoration varie selon la situation : pour un travail occasionnel le dimanche, la rémunération est doublée (+100%). Pour les commerces de moins de 400 m² où le dimanche est un jour de travail régulier sans jour de repos compensateur consécutif, la majoration est de +20%. Pour les commerces de plus de 400 m², la majoration minimale est de +30% sur les heures effectuées le dimanche matin.","Quelle est la majoration pour travail le dimanche dans le commerce alimentaire ?",{"a":150,"q":151},"En cas de licenciement, la durée du préavis dépend de la catégorie et de l'ancienneté : pour les employés\u002Fouvriers, c'est 1 mois si l'ancienneté est inférieure à 2 ans, et 2 mois au-delà. Les agents de maîtrise ont un préavis de 2 mois quelle que soit leur ancienneté. Les cadres ont un préavis de 3 mois. Pendant le préavis de licenciement, le salarié dispose de 2h par jour pour rechercher un emploi.","Quelle est la durée de préavis en cas de licenciement dans le commerce alimentaire ?",{"a":153,"q":154},"Pour les employés, ouvriers et agents de maîtrise, l'indemnité est de 1\u002F5e de mois de salaire par année d'ancienneté pour les 10 premières années, puis 1\u002F5e + 2\u002F15e par année au-delà de 10 ans. Pour les cadres, le calcul est progressif (1\u002F5 de 0-5 ans, 3\u002F10 de 5-10 ans, 4\u002F10 de 10-20 ans, 1\u002F2 au-delà de 20 ans), plafonné à 12 mois. Aucune indemnité n'est due en cas de faute grave ou lourde.","Comment est calculée l'indemnité de licenciement dans la convention IDCC 2216 ?","\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.0\">\n  \u003Ctitle>Outil Convention Collective Commerce Alimentaire IDCC 2216\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\n    body {\n      font-family: system-ui, -apple-system, sans-serif;\n      background: #fafaf9;\n      color: #1c1917;\n      padding: 24px;\n      font-size: 15px;\n      line-height: 1.5;\n    }\n\n    h1 {\n      font-size: 22px;\n      font-weight: 700;\n      color: #1c1917;\n      margin-bottom: 4px;\n    }\n\n    .subtitle {\n      font-size: 14px;\n      color: #78716c;\n      margin-bottom: 24px;\n    }\n\n    \u002F* Tab navigation *\u002F\n    .tab-nav {\n      display: flex;\n      gap: 8px;\n      flex-wrap: wrap;\n      margin-bottom: 24px;\n      border-bottom: 1px solid #e7e5e4;\n      padding-bottom: 0;\n    }\n\n    .tab-btn {\n      display: flex;\n      align-items: center;\n      gap: 6px;\n      padding: 10px 16px;\n      border: none;\n      background: none;\n      font-size: 14px;\n      font-weight: 500;\n      color: #78716c;\n      cursor: pointer;\n      border-bottom: 2px solid transparent;\n      margin-bottom: -1px;\n      transition: color 150ms, border-color 150ms;\n      white-space: nowrap;\n    }\n\n    .tab-btn:hover { color: #1c1917; }\n    .tab-btn.active { color: #2563eb; border-bottom-color: #2563eb; }\n    .tab-btn i { width: 16px; height: 16px; }\n\n    \u002F* Tab panels *\u002F\n    .tab-panel { display: none; }\n    .tab-panel.active { display: block; }\n\n    \u002F* Cards *\u002F\n    .card {\n      background: #fff;\n      border: 1px solid #e7e5e4;\n      border-radius: 12px;\n      padding: 24px;\n      margin-bottom: 16px;\n    }\n\n    .card-title {\n      font-size: 16px;\n      font-weight: 600;\n      color: #1c1917;\n      margin-bottom: 16px;\n      display: flex;\n      align-items: center;\n      gap: 8px;\n    }\n\n    .card-title i { width: 18px; height: 18px; color: #2563eb; }\n\n    \u002F* Form fields *\u002F\n    .field {\n      margin-bottom: 16px;\n    }\n\n    .field:last-child { margin-bottom: 0; }\n\n    .field-header {\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n      margin-bottom: 8px;\n    }\n\n    label {\n      font-size: 14px;\n      font-weight: 500;\n      color: #44403c;\n    }\n\n    .value-display {\n      font-size: 14px;\n      font-weight: 600;\n      color: #2563eb;\n    }\n\n    input[type=\"range\"] {\n      width: 100%;\n      accent-color: #2563eb;\n      height: 6px;\n      cursor: pointer;\n    }\n\n    input[type=\"number\"],\n    select {\n      width: 100%;\n      padding: 10px 12px;\n      border: 1px solid #d6d3d1;\n      border-radius: 8px;\n      font-size: 14px;\n      color: #1c1917;\n      background: #fff;\n      outline: none;\n      transition: border-color 150ms, box-shadow 150ms;\n    }\n\n    input[type=\"number\"]:focus,\n    select:focus {\n      border-color: #2563eb;\n      box-shadow: 0 0 0 3px rgba(37,99,235,0.1);\n    }\n\n    .input-row {\n      display: grid;\n      grid-template-columns: 1fr 1fr;\n      gap: 12px;\n    }\n\n    \u002F* Pills *\u002F\n    .pills {\n      display: flex;\n      flex-wrap: wrap;\n      gap: 8px;\n    }\n\n    .pill {\n      padding: 7px 14px;\n      border: none;\n      border-radius: 8px;\n      font-size: 13px;\n      font-weight: 500;\n      cursor: pointer;\n      background: #f5f5f4;\n      color: #78716c;\n      transition: background 150ms, color 150ms;\n    }\n\n    .pill:hover { background: #e7e5e4; color: #1c1917; }\n    .pill.active { background: #1c1917; color: #fff; }\n\n    \u002F* Results *\u002F\n    .results-grid {\n      display: grid;\n      grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n      gap: 12px;\n      margin-bottom: 16px;\n    }\n\n    .result-card {\n      background: #eff6ff;\n      border: 1px solid #bfdbfe;\n      border-radius: 10px;\n      padding: 16px;\n      text-align: center;\n    }\n\n    .result-label {\n      font-size: 12px;\n      color: #3b82f6;\n      font-weight: 500;\n      margin-bottom: 4px;\n      text-transform: uppercase;\n      letter-spacing: 0.03em;\n    }\n\n    .result-value {\n      font-size: 22px;\n      font-weight: 700;\n      color: #1e40af;\n      font-variant-numeric: tabular-nums;\n    }\n\n    .result-sub {\n      font-size: 12px;\n      color: #60a5fa;\n      margin-top: 2px;\n    }\n\n    \u002F* Info box *\u002F\n    .info-box {\n      background: #f0fdf4;\n      border: 1px solid #bbf7d0;\n      border-radius: 8px;\n      padding: 12px 16px;\n      font-size: 13px;\n      color: #166534;\n      display: flex;\n      align-items: flex-start;\n      gap: 8px;\n    }\n\n    .info-box i { width: 16px; height: 16px; flex-shrink: 0; margin-top: 2px; }\n\n    .warn-box {\n      background: #fff7ed;\n      border: 1px solid #fed7aa;\n      border-radius: 8px;\n      padding: 12px 16px;\n      font-size: 13px;\n      color: #9a3412;\n      display: flex;\n      align-items: flex-start;\n      gap: 8px;\n      margin-top: 12px;\n    }\n\n    .warn-box i { width: 16px; height: 16px; flex-shrink: 0; margin-top: 2px; }\n\n    \u002F* Table *\u002F\n    .table-wrap {\n      overflow-x: auto;\n      border-radius: 8px;\n      border: 1px solid #e7e5e4;\n    }\n\n    table {\n      width: 100%;\n      border-collapse: collapse;\n      font-size: 14px;\n    }\n\n    thead tr {\n      background: #f5f5f4;\n    }\n\n    th {\n      padding: 10px 14px;\n      text-align: left;\n      font-weight: 600;\n      color: #44403c;\n      font-size: 13px;\n      border-bottom: 1px solid #e7e5e4;\n    }\n\n    td {\n      padding: 10px 14px;\n      border-bottom: 1px solid #f5f5f4;\n      color: #1c1917;\n    }\n\n    tr:last-child td { border-bottom: none; }\n    tr:hover td { background: #fafaf9; }\n    td.highlight { font-weight: 700; color: #2563eb; }\n\n    \u002F* Status badge *\u002F\n    .badge {\n      display: inline-flex;\n      align-items: center;\n      gap: 4px;\n      padding: 3px 10px;\n      border-radius: 20px;\n      font-size: 12px;\n      font-weight: 600;\n    }\n\n    .badge-blue { background: #dbeafe; color: #1d4ed8; }\n    .badge-green { background: #dcfce7; color: #166534; }\n    .badge-orange { background: #ffedd5; color: #9a3412; }\n\n    \u002F* Section label *\u002F\n    .section-label {\n      font-size: 11px;\n      font-weight: 600;\n      text-transform: uppercase;\n      letter-spacing: 0.06em;\n      color: #78716c;\n      margin-bottom: 8px;\n    }\n\n    \u002F* Detail row *\u002F\n    .detail-row {\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n      padding: 8px 0;\n      border-bottom: 1px solid #f5f5f4;\n      font-size: 14px;\n    }\n\n    .detail-row:last-child { border-bottom: none; }\n    .detail-key { color: #78716c; }\n    .detail-val { font-weight: 600; color: #1c1917; }\n    .detail-val.blue { color: #2563eb; }\n\n    \u002F* Responsive *\u002F\n    @media (max-width: 600px) {\n      body { padding: 16px; }\n      .input-row { grid-template-columns: 1fr; }\n      .tab-btn { padding: 8px 12px; font-size: 13px; }\n      .results-grid { grid-template-columns: 1fr 1fr; }\n    }\n\n    \u002F* Divider *\u002F\n    .divider { height: 1px; background: #e7e5e4; margin: 16px 0; }\n\n    \u002F* Two-col layout *\u002F\n    .two-col {\n      display: grid;\n      grid-template-columns: 1fr 1fr;\n      gap: 16px;\n    }\n\n    @media (max-width: 700px) {\n      .two-col { grid-template-columns: 1fr; }\n    }\n\n    .result-big {\n      background: #eff6ff;\n      border: 1px solid #bfdbfe;\n      border-radius: 12px;\n      padding: 20px 24px;\n      text-align: center;\n      margin-top: 16px;\n    }\n\n    .result-big-label { font-size: 13px; color: #3b82f6; font-weight: 500; margin-bottom: 6px; }\n    .result-big-value { font-size: 32px; font-weight: 800; color: #1e40af; font-variant-numeric: tabular-nums; }\n    .result-big-sub { font-size: 13px; color: #60a5fa; margin-top: 4px; }\n\n    .calc-btn {\n      width: 100%;\n      padding: 12px;\n      background: #2563eb;\n      color: #fff;\n      border: none;\n      border-radius: 8px;\n      font-size: 15px;\n      font-weight: 600;\n      cursor: pointer;\n      transition: background 150ms;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      gap: 8px;\n      margin-top: 16px;\n    }\n\n    .calc-btn:hover { background: #1d4ed8; }\n    .calc-btn i { width: 18px; height: 18px; }\n\n    .note { font-size: 12px; color: #a8a29e; margin-top: 8px; }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\u003Cbody>\n\n\u003Ch1>\u003Ci data-lucide=\"file-text\" style=\"width:24px;height:24px;vertical-align:middle;margin-right:8px;color:#2563eb;\">\u003C\u002Fi>Convention Collective Commerce Alimentaire\u003C\u002Fh1>\n\u003Cp class=\"subtitle\">IDCC 2216 — Outils de calcul interactifs pour salariés et employeurs\u003C\u002Fp>\n\n\u003C!-- Tab navigation -->\n\u003Cnav class=\"tab-nav\">\n  \u003Cbutton class=\"tab-btn active\" data-tab=\"salaire\">\n    \u003Ci data-lucide=\"euro\">\u003C\u002Fi> Salaire minimum\n  \u003C\u002Fbutton>\n  \u003Cbutton class=\"tab-btn\" data-tab=\"heures\">\n    \u003Ci data-lucide=\"clock\">\u003C\u002Fi> Heures supp.\n  \u003C\u002Fbutton>\n  \u003Cbutton class=\"tab-btn\" data-tab=\"conges\">\n    \u003Ci data-lucide=\"calendar\">\u003C\u002Fi> Congés payés\n  \u003C\u002Fbutton>\n  \u003Cbutton class=\"tab-btn\" data-tab=\"preavis\">\n    \u003Ci data-lucide=\"briefcase\">\u003C\u002Fi> Préavis\n  \u003C\u002Fbutton>\n  \u003Cbutton class=\"tab-btn\" data-tab=\"licenciement\">\n    \u003Ci data-lucide=\"shield\">\u003C\u002Fi> Indemnité licenciement\n  \u003C\u002Fbutton>\n  \u003Cbutton class=\"tab-btn\" data-tab=\"grille\">\n    \u003Ci data-lucide=\"book-open\">\u003C\u002Fi> Grille complète\n  \u003C\u002Fbutton>\n\u003C\u002Fnav>\n\n\u003C!-- ======================== TAB 1: SALAIRE ======================== -->\n\u003Cdiv class=\"tab-panel active\" id=\"tab-salaire\">\n  \u003Cdiv class=\"card\">\n    \u003Cdiv class=\"card-title\">\u003Ci data-lucide=\"euro\">\u003C\u002Fi> Calculateur de salaire minimum garanti\u003C\u002Fdiv>\n\n    \u003Cdiv class=\"field\">\n      \u003Clabel>Catégorie professionnelle\u003C\u002Flabel>\n      \u003Cdiv class=\"pills\" id=\"pills-categorie\" style=\"margin-top:8px;\">\n        \u003Cbutton class=\"pill active\" data-value=\"employe\">Employé \u002F Ouvrier (niv. 1-4)\u003C\u002Fbutton>\n        \u003Cbutton class=\"pill\" data-value=\"maitrise\">Agent de maîtrise (niv. 5-6)\u003C\u002Fbutton>\n        \u003Cbutton class=\"pill\" data-value=\"cadre\">Cadre (niv. 7-8)\u003C\u002Fbutton>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"field\" id=\"field-niveau-employe\">\n      \u003Clabel>Niveau et échelon\u003C\u002Flabel>\n      \u003Cselect id=\"niveau-employe\" style=\"margin-top:8px;\">\n        \u003Coption value=\"1893.48\">Niveau 1A — Période d'accueil\u003C\u002Foption>\n        \u003Coption value=\"1895.08\">Niveau 1B — Après 4 mois\u003C\u002Foption>\n        \u003Coption value=\"1896.67\">Niveau 2A — Période d'accueil\u003C\u002Foption>\n        \u003Coption value=\"1911.00\">Niveau 2B — Après 6 mois\u003C\u002Foption>\n        \u003Coption value=\"1912.59\">Niveau 3A — Période d'accueil\u003C\u002Foption>\n        \u003Coption value=\"1930.11\">Niveau 3B — Après 12 mois\u003C\u002Foption>\n        \u003Coption value=\"1933.30\">Niveau 4A — Période d'accueil\u003C\u002Foption>\n        \u003Coption value=\"2032.03\">Niveau 4B — Après 18 mois\u003C\u002Foption>\n      \u003C\u002Fselect>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"field\" id=\"field-niveau-maitrise\" style=\"display:none;\">\n      \u003Clabel>Niveau\u003C\u002Flabel>\n      \u003Cselect id=\"niveau-maitrise\" style=\"margin-top:8px;\">\n        \u003Coption value=\"2143.66\">Niveau 5 — Agent de maîtrise\u003C\u002Foption>\n        \u003Coption value=\"2265.97\">Niveau 6 — Technicien confirmé\u003C\u002Foption>\n      \u003C\u002Fselect>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"field\" id=\"field-niveau-cadre\" style=\"display:none;\">\n      \u003Clabel>Niveau\u003C\u002Flabel>\n      \u003Cselect id=\"niveau-cadre\" style=\"margin-top:8px;\">\n        \u003Coption value=\"2941.51\">Niveau 7 — Cadre\u003C\u002Foption>\n        \u003Coption value=\"3953.38\">Niveau 8 — Cadre supérieur\u003C\u002Foption>\n      \u003C\u002Fselect>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"field\">\n      \u003Cdiv class=\"field-header\">\n        \u003Clabel>Temps de travail hebdomadaire\u003C\u002Flabel>\n        \u003Cspan class=\"value-display\" id=\"tps-display\">35h \u002F semaine\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cinput type=\"range\" id=\"tps-slider\" min=\"10\" max=\"48\" step=\"1\" value=\"35\">\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"divider\">\u003C\u002Fdiv>\n\n    \u003Cdiv class=\"results-grid\">\n      \u003Cdiv class=\"result-card\">\n        \u003Cdiv class=\"result-label\">Salaire mensuel brut min.\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-value\" id=\"res-brut\">1 893 €\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-sub\">35h \u002F semaine\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"result-card\">\n        \u003Cdiv class=\"result-label\">Salaire mensuel net estimé\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-value\" id=\"res-net\">1 437 €\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-sub\">après cotis. ~24%\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"result-card\">\n        \u003Cdiv class=\"result-label\">Taux horaire brut\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-value\" id=\"res-horaire\">12,48 €\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-sub\">base 151,67h\u002Fmois\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"result-card\">\n        \u003Cdiv class=\"result-label\">Salaire annuel brut\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-value\" id=\"res-annuel\">22 722 €\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-sub\">hors primes\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"info-box\" id=\"smic-box\" style=\"display:none;\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cspan>Le SMIC mensuel brut (2026) pour 35h\u002Fsemaine est de \u003Cstrong>1 801,80 €\u003C\u002Fstrong>. Le salaire conventionnel s'applique s'il est supérieur au SMIC.\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"warn-box\" id=\"warn-partiel\">\n      \u003Ci data-lucide=\"alert-triangle\">\u003C\u002Fi>\n      \u003Cspan id=\"warn-partiel-text\">Le salaire est calculé au prorata horaire : \u003Cstrong id=\"warn-prorata\">—\u003C\u002Fstrong> du salaire plein temps.\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003Cdiv class=\"card\">\n    \u003Cdiv class=\"card-title\">\u003Ci data-lucide=\"calendar\">\u003C\u002Fi> Prime annuelle de fin d'année\u003C\u002Fdiv>\n    \u003Cp style=\"font-size:14px;color:#78716c;margin-bottom:12px;\">Équivalente à 1 mois de salaire de base — versée en novembre chaque année.\u003C\u002Fp>\n\n    \u003Cdiv class=\"detail-row\">\n      \u003Cspan class=\"detail-key\">Ancienneté minimale\u003C\u002Fspan>\n      \u003Cspan class=\"detail-val\">1 an de présence\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"detail-row\">\n      \u003Cspan class=\"detail-key\">Montant\u003C\u002Fspan>\n      \u003Cspan class=\"detail-val blue\">100% du salaire mensuel de base (novembre)\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"detail-row\">\n      \u003Cspan class=\"detail-key\">Pro rata si entrée en cours d'année\u003C\u002Fspan>\n      \u003Cspan class=\"detail-val\">1\u002F12ème par mois travaillé\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"detail-row\">\n      \u003Cspan class=\"detail-key\">Montant estimé (votre niveau)\u003C\u002Fspan>\n      \u003Cspan class=\"detail-val blue\" id=\"prime-annuelle\">1 893 €\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\n\n\u003C!-- ======================== TAB 2: HEURES SUPP ======================== -->\n\u003Cdiv class=\"tab-panel\" id=\"tab-heures\">\n  \u003Cdiv class=\"card\">\n    \u003Cdiv class=\"card-title\">\u003Ci data-lucide=\"clock\">\u003C\u002Fi> Calculateur d'heures supplémentaires\u003C\u002Fdiv>\n\n    \u003Cdiv class=\"input-row\">\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Salaire mensuel brut (€)\u003C\u002Flabel>\n        \u003Cinput type=\"number\" id=\"hs-salaire\" value=\"2000\" min=\"1500\" max=\"10000\" step=\"50\" style=\"margin-top:8px;\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Heures travaillées cette semaine\u003C\u002Flabel>\n        \u003Cinput type=\"number\" id=\"hs-heures\" value=\"40\" min=\"35\" max=\"60\" step=\"0.5\" style=\"margin-top:8px;\">\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"field\">\n      \u003Clabel>Nombre de semaines concernées\u003C\u002Flabel>\n      \u003Cinput type=\"number\" id=\"hs-semaines\" value=\"4\" min=\"1\" max=\"52\" step=\"1\" style=\"margin-top:8px;\">\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"divider\">\u003C\u002Fdiv>\n\n    \u003Cdiv class=\"results-grid\">\n      \u003Cdiv class=\"result-card\">\n        \u003Cdiv class=\"result-label\">Heures supp. \u002F semaine\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-value\" id=\"hs-nb\">5h\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-sub\">au-delà de 35h\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"result-card\">\n        \u003Cdiv class=\"result-label\">Majorées à 25%\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-value\" id=\"hs-25\">8h\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-sub\">heures 36 à 43\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"result-card\">\n        \u003Cdiv class=\"result-label\">Majorées à 50%\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-value\" id=\"hs-50\">0h\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-sub\">heures 44 et +\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"result-card\">\n        \u003Cdiv class=\"result-label\">Supplément brut \u002F semaine\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-value\" id=\"hs-supp-semaine\">—\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-sub\">heures supp. uniquement\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-big\">\n      \u003Cdiv class=\"result-big-label\">Supplément total sur la période\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-big-value\" id=\"hs-total\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-big-sub\" id=\"hs-total-sub\">pour 4 semaines\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"info-box\" style=\"margin-top:16px;\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cspan>Contingent annuel légal : \u003Cstrong>180h\u002Fan\u003C\u002Fstrong>. Au-delà, les heures supplémentaires ouvrent droit à un repos compensateur obligatoire.\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003Cdiv class=\"card\">\n    \u003Cdiv class=\"card-title\">\u003Ci data-lucide=\"sun\">\u003C\u002Fi> Majoration dimanche et jours fériés\u003C\u002Fdiv>\n\n    \u003Cdiv class=\"input-row\">\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Salaire horaire brut (€)\u003C\u002Flabel>\n        \u003Cinput type=\"number\" id=\"dim-horaire\" value=\"13.00\" min=\"11\" max=\"50\" step=\"0.01\" style=\"margin-top:8px;\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Nombre d'heures dimanche \u002F férié\u003C\u002Flabel>\n        \u003Cinput type=\"number\" id=\"dim-heures\" value=\"4\" min=\"1\" max=\"12\" step=\"0.5\" style=\"margin-top:8px;\">\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"field\">\n      \u003Clabel style=\"margin-bottom:8px;display:block;\">Type de travail dominical\u003C\u002Flabel>\n      \u003Cdiv class=\"pills\" id=\"pills-dimanche\">\n        \u003Cbutton class=\"pill active\" data-value=\"occasionnel\">Occasionnel (+100%)\u003C\u002Fbutton>\n        \u003Cbutton class=\"pill\" data-value=\"regulier_petit\">Régulier ≤400m² (+20%)\u003C\u002Fbutton>\n        \u003Cbutton class=\"pill\" data-value=\"regulier_grand\">Régulier >400m² (+30%)\u003C\u002Fbutton>\n        \u003Cbutton class=\"pill\" data-value=\"ferie_mai\">1er mai travaillé (+100%)\u003C\u002Fbutton>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-big\" style=\"margin-top:16px;\">\n      \u003Cdiv class=\"result-big-label\">Majoration perçue\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-big-value\" id=\"dim-majoration\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-big-sub\" id=\"dim-info\">Travail dominical occasionnel\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\n\n\u003C!-- ======================== TAB 3: CONGÉS ======================== -->\n\u003Cdiv class=\"tab-panel\" id=\"tab-conges\">\n  \u003Cdiv class=\"card\">\n    \u003Cdiv class=\"card-title\">\u003Ci data-lucide=\"calendar\">\u003C\u002Fi> Calculateur de congés payés\u003C\u002Fdiv>\n\n    \u003Cdiv class=\"input-row\">\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Salaire mensuel brut (€)\u003C\u002Flabel>\n        \u003Cinput type=\"number\" id=\"cp-salaire\" value=\"2000\" min=\"1500\" max=\"15000\" step=\"100\" style=\"margin-top:8px;\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Ancienneté (années)\u003C\u002Flabel>\n        \u003Cinput type=\"number\" id=\"cp-anciennete\" value=\"5\" min=\"0\" max=\"40\" step=\"1\" style=\"margin-top:8px;\">\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"input-row\">\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Mois travaillés (période de ref.)\u003C\u002Flabel>\n        \u003Cinput type=\"number\" id=\"cp-mois\" value=\"12\" min=\"1\" max=\"12\" step=\"1\" style=\"margin-top:8px;\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Jours de congés pris\u003C\u002Flabel>\n        \u003Cinput type=\"number\" id=\"cp-jours-pris\" value=\"25\" min=\"0\" max=\"40\" step=\"1\" style=\"margin-top:8px;\">\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"divider\">\u003C\u002Fdiv>\n\n    \u003Cdiv class=\"results-grid\">\n      \u003Cdiv class=\"result-card\">\n        \u003Cdiv class=\"result-label\">Jours acquis (base)\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-value\" id=\"cp-jours-base\">30 j\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-sub\">ouvrables (base 35h)\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"result-card\">\n        \u003Cdiv class=\"result-label\">Jours supplémentaires ancienneté\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-value\" id=\"cp-jours-supp\">0 j\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-sub\">selon ancienneté\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"result-card\">\n        \u003Cdiv class=\"result-label\">Total jours acquis\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-value\" id=\"cp-jours-total\">30 j\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-sub\">ouvrables\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"result-card\">\n        \u003Cdiv class=\"result-label\">Jours restants\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-value\" id=\"cp-jours-restants\">5 j\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-sub\">à prendre\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"divider\">\u003C\u002Fdiv>\n\n    \u003Cdiv class=\"section-label\">Calcul de l'indemnité de congés payés\u003C\u002Fdiv>\n    \u003Cp style=\"font-size:13px;color:#78716c;margin-bottom:12px;\">La loi impose d'appliquer la méthode la plus favorable entre les deux ci-dessous.\u003C\u002Fp>\n\n    \u003Cdiv class=\"two-col\">\n      \u003Cdiv class=\"result-card\">\n        \u003Cdiv class=\"result-label\">Méthode 1\u002F10e\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-value\" id=\"cp-methode1\">—\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-sub\">10% rémunération annuelle\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"result-card\">\n        \u003Cdiv class=\"result-label\">Méthode maintien salaire\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-value\" id=\"cp-methode2\">—\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-sub\">salaire pendant les congés\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-big\">\n      \u003Cdiv class=\"result-big-label\">Indemnité applicable (méthode la plus favorable)\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-big-value\" id=\"cp-indemnite\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-big-sub\" id=\"cp-methode-choisie\">—\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"warn-box\">\n      \u003Ci data-lucide=\"alert-triangle\">\u003C\u002Fi>\n      \u003Cspan>Jours ouvrables : du lundi au samedi (6 jours\u002Fsemaine). Les dimanche et jours fériés ne comptent pas. Le calcul ci-dessus est indicatif.\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\n\n\u003C!-- ======================== TAB 4: PRÉAVIS ======================== -->\n\u003Cdiv class=\"tab-panel\" id=\"tab-preavis\">\n  \u003Cdiv class=\"card\">\n    \u003Cdiv class=\"card-title\">\u003Ci data-lucide=\"briefcase\">\u003C\u002Fi> Calculateur de préavis et période d'essai\u003C\u002Fdiv>\n\n    \u003Cdiv class=\"field\">\n      \u003Clabel>Catégorie professionnelle\u003C\u002Flabel>\n      \u003Cdiv class=\"pills\" id=\"pills-preavis-cat\" style=\"margin-top:8px;\">\n        \u003Cbutton class=\"pill active\" data-value=\"employe\">Employé \u002F Ouvrier\u003C\u002Fbutton>\n        \u003Cbutton class=\"pill\" data-value=\"maitrise\">Agent de maîtrise\u003C\u002Fbutton>\n        \u003Cbutton class=\"pill\" data-value=\"cadre\">Cadre\u003C\u002Fbutton>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"field\">\n      \u003Clabel>Ancienneté\u003C\u002Flabel>\n      \u003Cdiv class=\"pills\" id=\"pills-preavis-anc\" style=\"margin-top:8px;\">\n        \u003Cbutton class=\"pill active\" data-value=\"inf2\">Moins de 2 ans\u003C\u002Fbutton>\n        \u003Cbutton class=\"pill\" data-value=\"sup2\">2 ans et plus\u003C\u002Fbutton>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"field\">\n      \u003Clabel>Motif de rupture\u003C\u002Flabel>\n      \u003Cdiv class=\"pills\" id=\"pills-preavis-motif\" style=\"margin-top:8px;\">\n        \u003Cbutton class=\"pill active\" data-value=\"licenciement\">Licenciement\u003C\u002Fbutton>\n        \u003Cbutton class=\"pill\" data-value=\"demission\">Démission\u003C\u002Fbutton>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"divider\">\u003C\u002Fdiv>\n\n    \u003Cdiv class=\"results-grid\">\n      \u003Cdiv class=\"result-card\">\n        \u003Cdiv class=\"result-label\">Durée du préavis\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-value\" id=\"pre-duree\">1 mois\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-sub\" id=\"pre-duree-sub\">en semaines : 4,3 sem.\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"result-card\">\n        \u003Cdiv class=\"result-label\">Heures de recherche d'emploi\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-value\" id=\"pre-heures-rech\">2h\u002Fjour\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-sub\">pendant le préavis\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"info-box\" style=\"margin-top:0;\" id=\"pre-info-box\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cspan id=\"pre-info-text\">—\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003Cdiv class=\"card\">\n    \u003Cdiv class=\"card-title\">\u003Ci data-lucide=\"clock\">\u003C\u002Fi> Période d'essai\u003C\u002Fdiv>\n    \u003Cp style=\"font-size:14px;color:#78716c;margin-bottom:12px;\">Durées maximales applicables selon l'IDCC 2216.\u003C\u002Fp>\n\n    \u003Cdiv class=\"table-wrap\">\n      \u003Ctable>\n        \u003Cthead>\n          \u003Ctr>\n            \u003Cth>Catégorie\u003C\u002Fth>\n            \u003Cth>Durée initiale\u003C\u002Fth>\n            \u003Cth>Renouvellement\u003C\u002Fth>\n            \u003Cth>Maximum total\u003C\u002Fth>\n          \u003C\u002Ftr>\n        \u003C\u002Fthead>\n        \u003Ctbody>\n          \u003Ctr>\n            \u003Ctd>Employé \u002F Ouvrier (niv. 1-4)\u003C\u002Ftd>\n            \u003Ctd class=\"highlight\">2 mois\u003C\u002Ftd>\n            \u003Ctd>Non autorisé\u003C\u002Ftd>\n            \u003Ctd class=\"highlight\">2 mois\u003C\u002Ftd>\n          \u003C\u002Ftr>\n          \u003Ctr>\n            \u003Ctd>Agent de maîtrise (niv. 5-6)\u003C\u002Ftd>\n            \u003Ctd class=\"highlight\">3 mois\u003C\u002Ftd>\n            \u003Ctd>+2 mois (une fois)\u003C\u002Ftd>\n            \u003Ctd class=\"highlight\">5 mois\u003C\u002Ftd>\n          \u003C\u002Ftr>\n          \u003Ctr>\n            \u003Ctd>Cadre (niv. 7-8)\u003C\u002Ftd>\n            \u003Ctd class=\"highlight\">4 mois\u003C\u002Ftd>\n            \u003Ctd>+4 mois (une fois)\u003C\u002Ftd>\n            \u003Ctd class=\"highlight\">8 mois\u003C\u002Ftd>\n          \u003C\u002Ftr>\n        \u003C\u002Ftbody>\n      \u003C\u002Ftable>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"info-box\" style=\"margin-top:12px;\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cspan>Le renouvellement doit être prévu dans le contrat et accepté par écrit par le salarié.\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\n\n\u003C!-- ======================== TAB 5: LICENCIEMENT ======================== -->\n\u003Cdiv class=\"tab-panel\" id=\"tab-licenciement\">\n  \u003Cdiv class=\"card\">\n    \u003Cdiv class=\"card-title\">\u003Ci data-lucide=\"shield\">\u003C\u002Fi> Calculateur d'indemnité de licenciement\u003C\u002Fdiv>\n\n    \u003Cdiv class=\"field\">\n      \u003Clabel>Catégorie professionnelle\u003C\u002Flabel>\n      \u003Cdiv class=\"pills\" id=\"pills-lic-cat\" style=\"margin-top:8px;\">\n        \u003Cbutton class=\"pill active\" data-value=\"employe\">Employé \u002F Ouvrier \u002F AM\u003C\u002Fbutton>\n        \u003Cbutton class=\"pill\" data-value=\"cadre\">Cadre\u003C\u002Fbutton>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"input-row\">\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Salaire mensuel brut (€)\u003C\u002Flabel>\n        \u003Cinput type=\"number\" id=\"lic-salaire\" value=\"2000\" min=\"1500\" max=\"20000\" step=\"100\" style=\"margin-top:8px;\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Ancienneté (années)\u003C\u002Flabel>\n        \u003Cinput type=\"number\" id=\"lic-anciennete\" value=\"5\" min=\"0\" max=\"40\" step=\"0.5\" style=\"margin-top:8px;\">\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"field\" id=\"lic-age-field\" style=\"display:none;\">\n      \u003Clabel>Âge du salarié (cadre)\u003C\u002Flabel>\n      \u003Cinput type=\"number\" id=\"lic-age\" value=\"45\" min=\"18\" max=\"70\" step=\"1\" style=\"margin-top:8px;\">\n    \u003C\u002Fdiv>\n\n    \u003Cbutton class=\"calc-btn\" id=\"btn-calc-lic\">\n      \u003Ci data-lucide=\"calculator\">\u003C\u002Fi> Calculer l'indemnité\n    \u003C\u002Fbutton>\n\n    \u003Cdiv id=\"lic-results\" style=\"margin-top:16px;display:none;\">\n      \u003Cdiv class=\"divider\">\u003C\u002Fdiv>\n      \u003Cdiv class=\"section-label\">Détail du calcul\u003C\u002Fdiv>\n\n      \u003Cdiv class=\"detail-row\">\n        \u003Cspan class=\"detail-key\">Ancienneté retenue\u003C\u002Fspan>\n        \u003Cspan class=\"detail-val blue\" id=\"lic-detail-anc\">—\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"detail-row\">\n        \u003Cspan class=\"detail-key\">Référence de salaire\u003C\u002Fspan>\n        \u003Cspan class=\"detail-val\" id=\"lic-detail-sal\">—\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"detail-row\" id=\"lic-row-tranche1\">\n        \u003Cspan class=\"detail-key\" id=\"lic-label-tranche1\">Tranche 1 (0-10 ans)\u003C\u002Fspan>\n        \u003Cspan class=\"detail-val blue\" id=\"lic-val-tranche1\">—\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"detail-row\" id=\"lic-row-tranche2\" style=\"display:none;\">\n        \u003Cspan class=\"detail-key\" id=\"lic-label-tranche2\">Tranche 2 (au-delà de 10 ans)\u003C\u002Fspan>\n        \u003Cspan class=\"detail-val blue\" id=\"lic-val-tranche2\">—\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"detail-row\" id=\"lic-row-tranche3\" style=\"display:none;\">\n        \u003Cspan class=\"detail-key\" id=\"lic-label-tranche3\">Majoration âge (40 ans+)\u003C\u002Fspan>\n        \u003Cspan class=\"detail-val blue\" id=\"lic-val-tranche3\">—\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n\n      \u003Cdiv class=\"result-big\">\n        \u003Cdiv class=\"result-big-label\">Indemnité conventionnelle de licenciement\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-big-value\" id=\"lic-total\">—\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-big-sub\" id=\"lic-mois\">— mois de salaire\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n\n      \u003Cdiv class=\"warn-box\" id=\"lic-warn\" style=\"display:none;\">\n        \u003Ci data-lucide=\"alert-triangle\">\u003C\u002Fi>\n        \u003Cspan id=\"lic-warn-text\">—\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n\n      \u003Cdiv class=\"info-box\" style=\"margin-top:12px;\">\n        \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n        \u003Cspan>Aucune indemnité n'est due en cas de faute grave ou lourde. L'ancienneté minimale est de \u003Cstrong>8 mois\u003C\u002Fstrong> pour les employés\u002Fouvriers.\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\n\n\u003C!-- ======================== TAB 6: GRILLE ======================== -->\n\u003Cdiv class=\"tab-panel\" id=\"tab-grille\">\n  \u003Cdiv class=\"card\">\n    \u003Cdiv class=\"card-title\">\u003Ci data-lucide=\"book-open\">\u003C\u002Fi> Grille de salaires minimaux — IDCC 2216 (2026)\u003C\u002Fdiv>\n\n    \u003Cdiv class=\"table-wrap\">\n      \u003Ctable>\n        \u003Cthead>\n          \u003Ctr>\n            \u003Cth>Niveau\u003C\u002Fth>\n            \u003Cth>Catégorie\u003C\u002Fth>\n            \u003Cth>Descriptif\u003C\u002Fth>\n            \u003Cth>Salaire min. mensuel brut\u003C\u002Fth>\n          \u003C\u002Ftr>\n        \u003C\u002Fthead>\n        \u003Ctbody>\n          \u003Ctr>\n            \u003Ctd>\u003Cspan class=\"badge badge-blue\">1A\u003C\u002Fspan>\u003C\u002Ftd>\n            \u003Ctd>Employé \u002F Ouvrier\u003C\u002Ftd>\n            \u003Ctd>Période d'accueil\u003C\u002Ftd>\n            \u003Ctd class=\"highlight\">1 893,48 €\u003C\u002Ftd>\n          \u003C\u002Ftr>\n          \u003Ctr>\n            \u003Ctd>\u003Cspan class=\"badge badge-blue\">1B\u003C\u002Fspan>\u003C\u002Ftd>\n            \u003Ctd>Employé \u002F Ouvrier\u003C\u002Ftd>\n            \u003Ctd>Après 4 mois\u003C\u002Ftd>\n            \u003Ctd class=\"highlight\">1 895,08 €\u003C\u002Ftd>\n          \u003C\u002Ftr>\n          \u003Ctr>\n            \u003Ctd>\u003Cspan class=\"badge badge-blue\">2A\u003C\u002Fspan>\u003C\u002Ftd>\n            \u003Ctd>Employé \u002F Ouvrier\u003C\u002Ftd>\n            \u003Ctd>Période d'accueil\u003C\u002Ftd>\n            \u003Ctd class=\"highlight\">1 896,67 €\u003C\u002Ftd>\n          \u003C\u002Ftr>\n          \u003Ctr>\n            \u003Ctd>\u003Cspan class=\"badge badge-blue\">2B\u003C\u002Fspan>\u003C\u002Ftd>\n            \u003Ctd>Employé \u002F Ouvrier\u003C\u002Ftd>\n            \u003Ctd>Après 6 mois\u003C\u002Ftd>\n            \u003Ctd class=\"highlight\">1 911,00 €\u003C\u002Ftd>\n          \u003C\u002Ftr>\n          \u003Ctr>\n            \u003Ctd>\u003Cspan class=\"badge badge-blue\">3A\u003C\u002Fspan>\u003C\u002Ftd>\n            \u003Ctd>Employé \u002F Ouvrier\u003C\u002Ftd>\n            \u003Ctd>Période d'accueil\u003C\u002Ftd>\n            \u003Ctd class=\"highlight\">1 912,59 €\u003C\u002Ftd>\n          \u003C\u002Ftr>\n          \u003Ctr>\n            \u003Ctd>\u003Cspan class=\"badge badge-blue\">3B\u003C\u002Fspan>\u003C\u002Ftd>\n            \u003Ctd>Employé \u002F Ouvrier\u003C\u002Ftd>\n            \u003Ctd>Après 12 mois\u003C\u002Ftd>\n            \u003Ctd class=\"highlight\">1 930,11 €\u003C\u002Ftd>\n          \u003C\u002Ftr>\n          \u003Ctr>\n            \u003Ctd>\u003Cspan class=\"badge badge-blue\">4A\u003C\u002Fspan>\u003C\u002Ftd>\n            \u003Ctd>Employé \u002F Ouvrier\u003C\u002Ftd>\n            \u003Ctd>Période d'accueil\u003C\u002Ftd>\n            \u003Ctd class=\"highlight\">1 933,30 €\u003C\u002Ftd>\n          \u003C\u002Ftr>\n          \u003Ctr>\n            \u003Ctd>\u003Cspan class=\"badge badge-blue\">4B\u003C\u002Fspan>\u003C\u002Ftd>\n            \u003Ctd>Employé \u002F Ouvrier\u003C\u002Ftd>\n            \u003Ctd>Après 18 mois\u003C\u002Ftd>\n            \u003Ctd class=\"highlight\">2 032,03 €\u003C\u002Ftd>\n          \u003C\u002Ftr>\n          \u003Ctr>\n            \u003Ctd>\u003Cspan class=\"badge badge-green\">5\u003C\u002Fspan>\u003C\u002Ftd>\n            \u003Ctd>Agent de maîtrise\u003C\u002Ftd>\n            \u003Ctd>Technicien \u002F Maîtrise\u003C\u002Ftd>\n            \u003Ctd class=\"highlight\">2 143,66 €\u003C\u002Ftd>\n          \u003C\u002Ftr>\n          \u003Ctr>\n            \u003Ctd>\u003Cspan class=\"badge badge-green\">6\u003C\u002Fspan>\u003C\u002Ftd>\n            \u003Ctd>Agent de maîtrise\u003C\u002Ftd>\n            \u003Ctd>Technicien confirmé\u003C\u002Ftd>\n            \u003Ctd class=\"highlight\">2 265,97 €\u003C\u002Ftd>\n          \u003C\u002Ftr>\n          \u003Ctr>\n            \u003Ctd>\u003Cspan class=\"badge badge-orange\">7\u003C\u002Fspan>\u003C\u002Ftd>\n            \u003Ctd>Cadre\u003C\u002Ftd>\n            \u003Ctd>Cadre\u003C\u002Ftd>\n            \u003Ctd class=\"highlight\">2 941,51 €\u003C\u002Ftd>\n          \u003C\u002Ftr>\n          \u003Ctr>\n            \u003Ctd>\u003Cspan class=\"badge badge-orange\">8\u003C\u002Fspan>\u003C\u002Ftd>\n            \u003Ctd>Cadre\u003C\u002Ftd>\n            \u003Ctd>Cadre supérieur\u003C\u002Ftd>\n            \u003Ctd class=\"highlight\">3 953,38 €\u003C\u002Ftd>\n          \u003C\u002Ftr>\n        \u003C\u002Ftbody>\n      \u003C\u002Ftable>\n    \u003C\u002Fdiv>\n\n    \u003Cp class=\"note\" style=\"margin-top:12px;\">Grille indicative au 1er janvier 2026. SMIC 2026 : 12,02 €\u002Fh brut (1 801,80 €\u002Fmois pour 35h). Source : avenant salarial IDCC 2216.\u003C\u002Fp>\n  \u003C\u002Fdiv>\n\n  \u003Cdiv class=\"card\">\n    \u003Cdiv class=\"card-title\">\u003Ci data-lucide=\"target\">\u003C\u002Fi> Récapitulatif des droits clés\u003C\u002Fdiv>\n    \u003Cdiv class=\"detail-row\">\u003Cspan class=\"detail-key\">Durée légale du travail\u003C\u002Fspan>\u003Cspan class=\"detail-val blue\">35h \u002F semaine\u003C\u002Fspan>\u003C\u002Fdiv>\n    \u003Cdiv class=\"detail-row\">\u003Cspan class=\"detail-key\">Durée quotidienne max.\u003C\u002Fspan>\u003Cspan class=\"detail-val\">10h (12h exceptionnellement)\u003C\u002Fspan>\u003C\u002Fdiv>\n    \u003Cdiv class=\"detail-row\">\u003Cspan class=\"detail-key\">Contingent heures supp. annuel\u003C\u002Fspan>\u003Cspan class=\"detail-val\">180 heures\u003C\u002Fspan>\u003C\u002Fdiv>\n    \u003Cdiv class=\"detail-row\">\u003Cspan class=\"detail-key\">Congés payés annuels\u003C\u002Fspan>\u003Cspan class=\"detail-val blue\">30 jours ouvrables (+ ancienneté)\u003C\u002Fspan>\u003C\u002Fdiv>\n    \u003Cdiv class=\"detail-row\">\u003Cspan class=\"detail-key\">Congés ancienneté (10 ans)\u003C\u002Fspan>\u003Cspan class=\"detail-val\">+1 jour\u003C\u002Fspan>\u003C\u002Fdiv>\n    \u003Cdiv class=\"detail-row\">\u003Cspan class=\"detail-key\">Congés ancienneté (15 ans)\u003C\u002Fspan>\u003Cspan class=\"detail-val\">+2 jours\u003C\u002Fspan>\u003C\u002Fdiv>\n    \u003Cdiv class=\"detail-row\">\u003Cspan class=\"detail-key\">Congés ancienneté (20 ans)\u003C\u002Fspan>\u003Cspan class=\"detail-val\">+3 jours\u003C\u002Fspan>\u003C\u002Fdiv>\n    \u003Cdiv class=\"detail-row\">\u003Cspan class=\"detail-key\">Majoration dimanche (occasionnel)\u003C\u002Fspan>\u003Cspan class=\"detail-val blue\">+100%\u003C\u002Fspan>\u003C\u002Fdiv>\n    \u003Cdiv class=\"detail-row\">\u003Cspan class=\"detail-key\">Majoration dimanche (régulier ≤400m²)\u003C\u002Fspan>\u003Cspan class=\"detail-val\">+20%\u003C\u002Fspan>\u003C\u002Fdiv>\n    \u003Cdiv class=\"detail-row\">\u003Cspan class=\"detail-key\">Majoration dimanche (régulier >400m²)\u003C\u002Fspan>\u003Cspan class=\"detail-val\">+30%\u003C\u002Fspan>\u003C\u002Fdiv>\n    \u003Cdiv class=\"detail-row\">\u003Cspan class=\"detail-key\">Majoration 1er mai travaillé\u003C\u002Fspan>\u003Cspan class=\"detail-val blue\">+100%\u003C\u002Fspan>\u003C\u002Fdiv>\n    \u003Cdiv class=\"detail-row\">\u003Cspan class=\"detail-key\">Prime annuelle (13e mois)\u003C\u002Fspan>\u003Cspan class=\"detail-val\">1 mois de salaire (versée en novembre)\u003C\u002Fspan>\u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\n\n\u003Cscript>\n  \u002F\u002F ===================== STATE =====================\n  const state = {\n    categorie: 'employe',\n    salaire_min: 1893.48,\n    tps: 35,\n    \u002F\u002F heures supp\n    hs_salaire: 2000,\n    hs_heures: 40,\n    hs_semaines: 4,\n    \u002F\u002F dimanche\n    dim_horaire: 13.00,\n    dim_heures: 4,\n    dim_type: 'occasionnel',\n    \u002F\u002F conges\n    cp_salaire: 2000,\n    cp_anciennete: 5,\n    cp_mois: 12,\n    cp_jours_pris: 25,\n    \u002F\u002F preavis\n    pre_cat: 'employe',\n    pre_anc: 'inf2',\n    pre_motif: 'licenciement',\n    \u002F\u002F licenciement\n    lic_cat: 'employe',\n    lic_salaire: 2000,\n    lic_anciennete: 5,\n    lic_age: 45,\n  };\n\n  \u002F\u002F ===================== FORMAT =====================\n  function fmtEur(n, dec = 0) {\n    return new Intl.NumberFormat('fr-FR', { maximumFractionDigits: dec, minimumFractionDigits: dec }).format(n) + ' €';\n  }\n\n  function fmtNum(n, dec = 0) {\n    return new Intl.NumberFormat('fr-FR', { maximumFractionDigits: dec, minimumFractionDigits: dec }).format(n);\n  }\n\n  \u002F\u002F ===================== TAB NAVIGATION =====================\n  document.querySelectorAll('.tab-btn').forEach(btn => {\n    btn.addEventListener('click', () => {\n      document.querySelectorAll('.tab-btn').forEach(b => b.classList.remove('active'));\n      document.querySelectorAll('.tab-panel').forEach(p => p.classList.remove('active'));\n      btn.classList.add('active');\n      document.getElementById('tab-' + btn.dataset.tab).classList.add('active');\n      if (window.lucide) lucide.createIcons();\n      notifyResize();\n    });\n  });\n\n  \u002F\u002F ===================== PILLS HELPER =====================\n  function bindPills(containerId, onChange) {\n    const container = document.getElementById(containerId);\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        onChange(pill.dataset.value);\n      });\n    });\n  }\n\n  \u002F\u002F ===================== TAB 1: SALAIRE =====================\n  const grille = {\n    employe: [\n      { label: '1A', val: 1893.48 }, { label: '1B', val: 1895.08 },\n      { label: '2A', val: 1896.67 }, { label: '2B', val: 1911.00 },\n      { label: '3A', val: 1912.59 }, { label: '3B', val: 1930.11 },\n      { label: '4A', val: 1933.30 }, { label: '4B', val: 2032.03 },\n    ],\n    maitrise: [{ label: '5', val: 2143.66 }, { label: '6', val: 2265.97 }],\n    cadre: [{ label: '7', val: 2941.51 }, { label: '8', val: 3953.38 }],\n  };\n\n  function computeSalaire() {\n    const min35h = state.salaire_min;\n    const taux_horaire_base = min35h \u002F 151.67;\n    const ratio = state.tps \u002F 35;\n    const sal_prorata = min35h * ratio;\n    const net_estim = sal_prorata * 0.762; \u002F\u002F 76.2% net après ~24% cotisations salariales\n    const taux_horaire = sal_prorata \u002F (state.tps * 4.333);\n    const annuel = sal_prorata * 12;\n\n    document.getElementById('res-brut').textContent = fmtEur(sal_prorata);\n    document.getElementById('res-net').textContent = fmtEur(net_estim);\n    document.getElementById('res-horaire').textContent = fmtNum(taux_horaire, 2) + ' €';\n    document.getElementById('res-annuel').textContent = fmtEur(annuel);\n    document.getElementById('prime-annuelle').textContent = fmtEur(sal_prorata);\n\n    const warnBox = document.getElementById('warn-partiel');\n    const warnText = document.getElementById('warn-prorata');\n    if (state.tps \u003C 35) {\n      warnBox.style.display = 'flex';\n      const pct = Math.round(ratio * 100);\n      warnText.textContent = `${pct}% (${state.tps}h\u002F${35}h)`;\n    } else {\n      warnBox.style.display = 'none';\n    }\n  }\n\n  bindPills('pills-categorie', val => {\n    state.categorie = val;\n    document.getElementById('field-niveau-employe').style.display = val === 'employe' ? '' : 'none';\n    document.getElementById('field-niveau-maitrise').style.display = val === 'maitrise' ? '' : 'none';\n    document.getElementById('field-niveau-cadre').style.display = val === 'cadre' ? '' : 'none';\n    \u002F\u002F reset to first option\n    const sel = document.getElementById('niveau-' + val);\n    state.salaire_min = parseFloat(sel.value);\n    computeSalaire();\n  });\n\n  ['niveau-employe', 'niveau-maitrise', 'niveau-cadre'].forEach(id => {\n    const sel = document.getElementById(id);\n    sel.addEventListener('change', () => {\n      state.salaire_min = parseFloat(sel.value);\n      computeSalaire();\n    });\n  });\n\n  const tpsSlider = document.getElementById('tps-slider');\n  tpsSlider.addEventListener('input', () => {\n    state.tps = parseInt(tpsSlider.value);\n    document.getElementById('tps-display').textContent = state.tps + 'h \u002F semaine';\n    computeSalaire();\n  });\n\n  \u002F\u002F ===================== TAB 2: HEURES SUPP =====================\n  function computeHS() {\n    const horaire = state.hs_salaire \u002F 151.67;\n    const hsTotales = Math.max(0, state.hs_heures - 35);\n    const hs25 = Math.min(hsTotales, 8); \u002F\u002F heures 36-43\n    const hs50 = Math.max(0, hsTotales - 8);\n\n    const majoration25 = horaire * 0.25 * hs25;\n    const majoration50 = horaire * 0.50 * hs50;\n    const suppBase = horaire * hsTotales;\n    const suppTotal = suppBase + majoration25 + majoration50;\n    const suppSemaine = suppTotal;\n    const suppPeriode = suppTotal * state.hs_semaines;\n\n    document.getElementById('hs-nb').textContent = fmtNum(hsTotales, 1) + 'h';\n    document.getElementById('hs-25').textContent = fmtNum(hs25, 1) + 'h';\n    document.getElementById('hs-50').textContent = fmtNum(hs50, 1) + 'h';\n    document.getElementById('hs-supp-semaine').textContent = fmtEur(suppSemaine, 2);\n    document.getElementById('hs-total').textContent = fmtEur(suppPeriode, 2);\n    document.getElementById('hs-total-sub').textContent = `pour ${state.hs_semaines} semaine${state.hs_semaines > 1 ? 's' : ''}`;\n  }\n\n  document.getElementById('hs-salaire').addEventListener('input', e => { state.hs_salaire = +e.target.value; computeHS(); });\n  document.getElementById('hs-heures').addEventListener('input', e => { state.hs_heures = +e.target.value; computeHS(); });\n  document.getElementById('hs-semaines').addEventListener('input', e => { state.hs_semaines = +e.target.value; computeHS(); });\n\n  \u002F\u002F Dimanche\n  const dimMajorations = {\n    occasionnel: { pct: 1.0, label: 'Travail dominical occasionnel (+100%)' },\n    regulier_petit: { pct: 0.20, label: 'Commerce ≤ 400m², régulier (+20%)' },\n    regulier_grand: { pct: 0.30, label: 'Commerce > 400m², régulier (+30%)' },\n    ferie_mai: { pct: 1.0, label: '1er mai travaillé (+100%)' },\n  };\n\n  function computeDimanche() {\n    const maj = dimMajorations[state.dim_type];\n    const montant = state.dim_horaire * state.dim_heures * maj.pct;\n    document.getElementById('dim-majoration').textContent = fmtEur(montant, 2);\n    document.getElementById('dim-info').textContent = maj.label;\n  }\n\n  bindPills('pills-dimanche', val => { state.dim_type = val; computeDimanche(); });\n  document.getElementById('dim-horaire').addEventListener('input', e => { state.dim_horaire = +e.target.value; computeDimanche(); });\n  document.getElementById('dim-heures').addEventListener('input', e => { state.dim_heures = +e.target.value; computeDimanche(); });\n\n  \u002F\u002F ===================== TAB 3: CONGÉS =====================\n  function computeConges() {\n    const anc = state.cp_anciennete;\n    const mois = Math.min(12, state.cp_mois);\n    let joursSupp = 0;\n    if (anc >= 20) joursSupp = 3;\n    else if (anc >= 15) joursSupp = 2;\n    else if (anc >= 10) joursSupp = 1;\n\n    const joursBase = Math.round(2.5 * mois);\n    const joursTotal = joursBase + joursSupp;\n    const joursRestants = Math.max(0, joursTotal - state.cp_jours_pris);\n\n    \u002F\u002F Indemnité méthode 1\u002F10e\n    const remuAnnuelle = state.cp_salaire * 12;\n    const methode1 = remuAnnuelle * 0.10 * (state.cp_jours_pris \u002F joursTotal);\n\n    \u002F\u002F Méthode maintien salaire\n    const salaireJournalier = (state.cp_salaire * 12) \u002F 360;\n    const joursOuvrables = state.cp_jours_pris;\n    const methode2 = salaireJournalier * joursOuvrables;\n\n    const indemnite = Math.max(methode1, methode2);\n    const methodeChoisie = methode1 >= methode2 ? 'Méthode du 1\u002F10e (plus favorable)' : 'Méthode du maintien de salaire (plus favorable)';\n\n    document.getElementById('cp-jours-base').textContent = joursBase + ' j';\n    document.getElementById('cp-jours-supp').textContent = '+' + joursSupp + ' j';\n    document.getElementById('cp-jours-total').textContent = joursTotal + ' j';\n    document.getElementById('cp-jours-restants').textContent = joursRestants + ' j';\n    document.getElementById('cp-methode1').textContent = fmtEur(methode1, 2);\n    document.getElementById('cp-methode2').textContent = fmtEur(methode2, 2);\n    document.getElementById('cp-indemnite').textContent = fmtEur(indemnite, 2);\n    document.getElementById('cp-methode-choisie').textContent = methodeChoisie;\n  }\n\n  document.getElementById('cp-salaire').addEventListener('input', e => { state.cp_salaire = +e.target.value; computeConges(); });\n  document.getElementById('cp-anciennete').addEventListener('input', e => { state.cp_anciennete = +e.target.value; computeConges(); });\n  document.getElementById('cp-mois').addEventListener('input', e => { state.cp_mois = +e.target.value; computeConges(); });\n  document.getElementById('cp-jours-pris').addEventListener('input', e => { state.cp_jours_pris = +e.target.value; computeConges(); });\n\n  \u002F\u002F ===================== TAB 4: PRÉAVIS =====================\n  function computePreavis() {\n    let duree = '';\n    let semaines = 0;\n    let infoText = '';\n    const motif = state.pre_motif;\n    const cat = state.pre_cat;\n    const anc = state.pre_anc;\n\n    if (motif === 'demission') {\n      duree = '1 mois';\n      semaines = 4.3;\n      infoText = 'En cas de démission, tous les niveaux sont soumis à un préavis d\\'1 mois. Les heures de recherche d\\'emploi ne s\\'appliquent pas.';\n    } else {\n      \u002F\u002F licenciement\n      if (cat === 'cadre') {\n        duree = '3 mois';\n        semaines = 13;\n        infoText = 'Les cadres ont un préavis de 3 mois quel que soit leur ancienneté. Droit à 2h\u002Fjour de recherche d\\'emploi pendant 1 mois.';\n      } else if (cat === 'maitrise') {\n        duree = '2 mois';\n        semaines = 8.7;\n        infoText = 'Les agents de maîtrise ont un préavis de 2 mois quel que soit leur ancienneté. Droit à 2h\u002Fjour de recherche d\\'emploi pendant 1 mois.';\n      } else {\n        \u002F\u002F employé\n        if (anc === 'inf2') {\n          duree = '1 mois';\n          semaines = 4.3;\n          infoText = 'Moins de 2 ans d\\'ancienneté : préavis d\\'1 mois. Droit à 2h\u002Fjour de recherche d\\'emploi pendant 1 mois.';\n        } else {\n          duree = '2 mois';\n          semaines = 8.7;\n          infoText = '2 ans d\\'ancienneté et plus : préavis de 2 mois. Droit à 2h\u002Fjour de recherche d\\'emploi pendant 1 mois.';\n        }\n      }\n    }\n\n    document.getElementById('pre-duree').textContent = duree;\n    document.getElementById('pre-duree-sub').textContent = `en semaines : ${fmtNum(semaines, 1)} sem.`;\n    document.getElementById('pre-heures-rech').textContent = motif === 'licenciement' ? '2h\u002Fjour' : 'Non applicable';\n    document.getElementById('pre-info-text').textContent = infoText;\n  }\n\n  bindPills('pills-preavis-cat', val => { state.pre_cat = val; computePreavis(); });\n  bindPills('pills-preavis-anc', val => { state.pre_anc = val; computePreavis(); });\n  bindPills('pills-preavis-motif', val => { state.pre_motif = val; computePreavis(); });\n\n  \u002F\u002F ===================== TAB 5: LICENCIEMENT =====================\n  function computeLicenciement() {\n    const anc = state.lic_anciennete;\n    const sal = state.lic_salaire;\n    const cat = state.lic_cat;\n    const age = state.lic_age;\n\n    document.getElementById('lic-results').style.display = 'block';\n    document.getElementById('lic-detail-anc').textContent = fmtNum(anc, 1) + ' an(s)';\n    document.getElementById('lic-detail-sal').textContent = fmtEur(sal) + ' \u002F mois (brut)';\n\n    let total = 0;\n    let moisTotal = 0;\n\n    if (cat === 'employe') {\n      \u002F\u002F 0-10 ans: 1\u002F5 de mois par an\n      \u002F\u002F Au-delà de 10 ans: 1\u002F5 + 2\u002F15 = 3\u002F15 + 2\u002F15 = 5\u002F15 = 1\u002F3 par an\n      const anc1 = Math.min(anc, 10);\n      const anc2 = Math.max(0, anc - 10);\n      const mois1 = anc1 * (1 \u002F 5);\n      const mois2 = anc2 * (1 \u002F 5 + 2 \u002F 15);\n      moisTotal = mois1 + mois2;\n      total = sal * moisTotal;\n\n      document.getElementById('lic-label-tranche1').textContent = `Tranche 1 (${fmtNum(anc1, 1)} ans × 1\u002F5 mois)`;\n      document.getElementById('lic-val-tranche1').textContent = fmtEur(sal * mois1, 2);\n      document.getElementById('lic-row-tranche1').style.display = '';\n      document.getElementById('lic-row-tranche3').style.display = 'none';\n\n      if (anc2 > 0) {\n        document.getElementById('lic-label-tranche2').textContent = `Tranche 2 (${fmtNum(anc2, 1)} ans × 1\u002F3 mois au-delà de 10 ans)`;\n        document.getElementById('lic-val-tranche2').textContent = fmtEur(sal * mois2, 2);\n        document.getElementById('lic-row-tranche2').style.display = '';\n      } else {\n        document.getElementById('lic-row-tranche2').style.display = 'none';\n      }\n\n    } else {\n      \u002F\u002F Cadre\n      const anc1 = Math.min(anc, 5);\n      const anc2 = Math.min(Math.max(0, anc - 5), 5); \u002F\u002F 5-10 ans\n      const anc3 = Math.min(Math.max(0, anc - 10), 10); \u002F\u002F 10-20 ans\n      const anc4 = Math.max(0, anc - 20); \u002F\u002F >20 ans\n\n      const mois1 = anc1 * (1 \u002F 5);\n      const mois2 = anc2 * (3 \u002F 10);\n      const mois3 = anc3 * (4 \u002F 10);\n      const mois4 = anc4 * (5 \u002F 10);\n      moisTotal = Math.min(12, mois1 + mois2 + mois3 + mois4);\n\n      \u002F\u002F Majoration âge 40+\n      const majAge = age >= 40 ? Math.max(0, age - 40) * (1 \u002F 3) : 0;\n\n      total = sal * moisTotal + sal * majAge;\n\n      document.getElementById('lic-label-tranche1').textContent = `Cadre 0-5 ans (${fmtNum(anc1, 1)} × 1\u002F5)`;\n      document.getElementById('lic-val-tranche1').textContent = fmtEur(sal * mois1, 2);\n      document.getElementById('lic-row-tranche1').style.display = '';\n\n      const label2Parts = [];\n      if (anc2 > 0) label2Parts.push(`5-10 ans (${fmtNum(anc2, 1)} × 3\u002F10)`);\n      if (anc3 > 0) label2Parts.push(`10-20 ans (${fmtNum(anc3, 1)} × 4\u002F10)`);\n      if (anc4 > 0) label2Parts.push(`>20 ans (${fmtNum(anc4, 1)} × 1\u002F2)`);\n\n      if (label2Parts.length > 0) {\n        document.getElementById('lic-label-tranche2').textContent = label2Parts.join(' + ');\n        document.getElementById('lic-val-tranche2').textContent = fmtEur(sal * (mois2 + mois3 + mois4), 2);\n        document.getElementById('lic-row-tranche2').style.display = '';\n      } else {\n        document.getElementById('lic-row-tranche2').style.display = 'none';\n      }\n\n      if (majAge > 0) {\n        document.getElementById('lic-label-tranche3').textContent = `Majoration âge (${age - 40} ans au-delà de 40 ans × 1\u002F3)`;\n        document.getElementById('lic-val-tranche3').textContent = fmtEur(sal * majAge, 2);\n        document.getElementById('lic-row-tranche3').style.display = '';\n      } else {\n        document.getElementById('lic-row-tranche3').style.display = 'none';\n      }\n\n      \u002F\u002F Plafond 12 mois pour les cadres (hors majoration âge)\n      const warnEl = document.getElementById('lic-warn');\n      const warnText = document.getElementById('lic-warn-text');\n      if ((mois1 + mois2 + mois3 + mois4) > 12) {\n        warnEl.style.display = 'flex';\n        warnText.textContent = `Le plafond de 12 mois de salaire s'applique aux cadres. L'indemnité a été plafonnée.`;\n      } else {\n        warnEl.style.display = 'none';\n      }\n    }\n\n    \u002F\u002F Ancienneté minimale\n    const warnMin = document.getElementById('lic-warn');\n    const warnTextMin = document.getElementById('lic-warn-text');\n    if (anc \u003C (8 \u002F 12) && cat === 'employe') {\n      warnMin.style.display = 'flex';\n      warnTextMin.textContent = 'Ancienneté insuffisante : l\\'ancienneté minimale pour bénéficier de l\\'indemnité conventionnelle est de 8 mois pour les employés\u002Fouvriers.';\n      total = 0;\n    }\n\n    document.getElementById('lic-total').textContent = fmtEur(total, 2);\n    document.getElementById('lic-mois').textContent = fmtNum(moisTotal, 2) + ' mois de salaire';\n\n    if (window.lucide) lucide.createIcons();\n    notifyResize();\n  }\n\n  bindPills('pills-lic-cat', val => {\n    state.lic_cat = val;\n    document.getElementById('lic-age-field').style.display = val === 'cadre' ? '' : 'none';\n  });\n\n  document.getElementById('btn-calc-lic').addEventListener('click', computeLicenciement);\n  document.getElementById('lic-salaire').addEventListener('input', e => { state.lic_salaire = +e.target.value; });\n  document.getElementById('lic-anciennete').addEventListener('input', e => { state.lic_anciennete = +e.target.value; });\n  document.getElementById('lic-age').addEventListener('input', e => { state.lic_age = +e.target.value; });\n\n  \u002F\u002F ===================== RESIZE OBSERVER =====================\n  function notifyResize() {\n    parent.postMessage({ type: 'resize', height: document.body.scrollHeight + 32 }, '*');\n  }\n\n  new ResizeObserver(notifyResize).observe(document.body);\n\n  \u002F\u002F ===================== INIT =====================\n  computeSalaire();\n  computeHS();\n  computeDimanche();\n  computeConges();\n  computePreavis();\n\n  if (window.lucide) lucide.createIcons();\n\u003C\u002Fscript>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n","generated","consumer","embed","https:\u002F\u002Fpub-bdebbd2dad294475a2da0eb657815b6b.r2.dev\u002Ftools\u002Fcc-alimentaire-idcc-2216-fb53bbcd0c.webp",[]]