[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"footer-root-categories-fr-FR":3,"tool-content-ccn-commerce-et-de-la-reparation-de-l-automobile-du-cycle-fr":83,"footer-cities-fr":167},[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":134,"tool_html":161,"source":162,"category":163,"audience":164,"publish_mode":165,"hero_image":166,"hero_image_alt":85},"ccn-commerce-et-de-la-reparation-de-l-automobile-du-cycle","CCN du commerce et de la réparation de l'automobile, du cycle et du motocycle — calculateur complet","Calculateur CCN Commerce Automobile IDCC 1090 | Expert Zoom","Outil interactif couvrant l'indemnité de licenciement, le préavis, la grille salariale 2026, les congés d'ancienneté et les heures supplémentaires de la CCN du commerce et de la réparation de l'automobile (IDCC 1090).","Ce calculateur couvre les 5 principales déviations de la CCN 1090 par rapport au code du travail : l'indemnité de licenciement (art. 4.04, formule 2\u002F10 + 2\u002F15), le préavis structuré par catégorie et ancienneté, la grille salariale 2026 (avenant n°110, 1 853 € à 5 904 €\u002Fmois), les congés supplémentaires d'ancienneté et les heures choisies majorées à 30 %.",[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 Commerce et Réparation Automobile — IDCC 1090","WebApplication",{"name":94,"@type":95,"identifier":96},"Convention collective du commerce et de la réparation de l'automobile, du cycle et du motocycle","Thing","IDCC 1090",{"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 2026, les congés d'ancienneté et les heures supplémentaires de la convention collective nationale du commerce et de la réparation de l'automobile, du cycle et du motocycle (IDCC 1090, brochure JO 3034).","All","FinanceApplication",true,{"@type":110,"@context":100,"mainEntity":111},"FAQPage",[112,118,122,126,130],{"name":113,"@type":114,"acceptedAnswer":115},"Comment calculer l'indemnité de licenciement dans la convention collective automobile (IDCC 1090) ?","Question",{"text":116,"@type":117},"Selon l'article 4.04 de la CCN 1090, l'indemnité se calcule ainsi : 2\u002F10 de mois de salaire par année d'ancienneté pour toutes les années, plus 2\u002F15 de mois supplémentaire pour chaque année au-delà de 10 ans. La base de calcul retient le plus favorable entre 1\u002F12 des 12 derniers mois bruts ou 1\u002F3 des 3 derniers mois. Une ancienneté minimale d'1 an est requise.","Answer",{"name":119,"@type":114,"acceptedAnswer":120},"Quelle est la durée du préavis dans la CCN du commerce et réparation automobile ?",{"text":121,"@type":117},"La durée du préavis varie selon la catégorie professionnelle : pour les ouvriers\u002Femployés niveaux 1-2, le préavis est de 2 semaines. Pour les niveaux 3-12, il est d'1 mois (moins de 2 ans) ou 2 mois (2 ans et plus) en licenciement. Pour les agents de maîtrise et cadres, le préavis est de 2 à 3 mois selon le degré et le niveau.",{"name":123,"@type":114,"acceptedAnswer":124},"Quelle est la grille de salaires de la convention collective automobile en 2026 ?",{"text":125,"@type":117},"L'avenant n°110 (applicable au 1er mai 2026) fixe les minima conventionnels de 1 853 € à 5 904 € bruts\u002Fmois selon la catégorie et le niveau, sur la base de 151,67 h\u002Fmois.",{"name":127,"@type":114,"acceptedAnswer":128},"Y a-t-il des congés payés supplémentaires dans la CCN 1090 ?",{"text":129,"@type":117},"Oui, la CCN 1090 accorde +1 jour à 20 ans d'ancienneté, +2 jours à 25 ans et +3 jours à 30 ans, en plus des 30 jours ouvrables légaux.",{"name":131,"@type":114,"acceptedAnswer":132},"Y a-t-il un 13e mois dans la CCN automobile IDCC 1090 ?",{"text":133,"@type":117},"Non, le 13e mois n'est pas obligatoire dans la CCN 1090. Il relève de l'accord d'entreprise ou du contrat individuel.",[135,136,138,140,143,146,149,152,155,158],{"a":116,"q":113},{"a":137,"q":119},"La durée du préavis varie selon la catégorie professionnelle : pour les ouvriers\u002Femployés niveaux 1-2, le préavis est de 2 semaines. Pour les niveaux 3-12, il est d'1 mois (moins de 2 ans d'ancienneté) ou 2 mois (2 ans et plus) en cas de licenciement. Pour les agents de maîtrise et cadres (art. 4.10 CCN 1090), le préavis est de 2 à 3 mois selon le degré et le niveau.",{"a":139,"q":123},"L'avenant n°110 du 22 janvier 2026 (applicable au 1er mai 2026) fixe les minima conventionnels de 1 853 € à 2 480 € bruts\u002Fmois pour les ouvriers\u002Femployés (niveaux 1-8), de 2 590 € à 3 305 € pour les agents de maîtrise, et de 3 472 € à 5 904 € pour les cadres, sur la base de 151,67 h\u002Fmois (35h\u002Fsemaine). La valeur du point de formation-qualification est de 3,47 €.",{"a":141,"q":142},"Oui. En plus des 30 jours ouvrables légaux (art. L3141-3), la CCN 1090 accorde des jours supplémentaires selon l'ancienneté dans l'entreprise : +1 jour dès 20 ans d'ancienneté, +2 jours dès 25 ans, et +3 jours dès 30 ans. Ces jours ne sont pas divisibles et doivent être pris dans l'année d'acquisition.","Y a-t-il des congés payés supplémentaires dans la CCN 1090 commerce automobile ?",{"a":144,"q":145},"Les taux de majoration standard sont identiques au code du travail : 25 % pour les 8 premières heures et 50 % au-delà. L'avenant n°51 (mai 2008) prévoit un contingent de 220 heures par an hors annualisation (ou 130 h avec annualisation). Pour les heures dites 'choisies' effectuées au-delà du contingent avec l'accord du salarié, la majoration de la première tranche est portée à 30 % (au lieu de 25 %).","Quelles sont les règles sur les heures supplémentaires dans la CCN automobile IDCC 1090 ?",{"a":147,"q":148},"Non. La CCN 1090 ne prévoit pas de 13e mois obligatoire pour l'ensemble du secteur. Les éventuelles primes annuelles relèvent de l'accord d'entreprise, du contrat de travail individuel ou d'un usage propre à chaque entreprise. Elles ne sont donc pas uniformes dans toutes les entreprises relevant de la convention.","Y a-t-il un 13e mois obligatoire dans la convention collective IDCC 1090 ?",{"a":150,"q":151},"Oui, la CCN 1090 couvre les mécaniciens et techniciens automobiles, ainsi que tous les salariés travaillant dans le commerce et la réparation de véhicules automobiles (codes NAF 4520A, 4520B notamment), les cycles et motocycles, le contrôle technique (7120A) et la formation de conducteurs (8553Z). La brochure JO est le n°3034.","La convention collective automobile IDCC 1090 s'applique-t-elle aux mécaniciens ?",{"a":153,"q":154},"Pour les 10 premières années d'ancienneté, la CCN 1090 est moins favorable (0,2 mois\u002Fan contre 0,25 mois\u002Fan légalement). Au-delà de 10 ans, les deux régimes sont équivalents. En revanche, l'employeur doit toujours appliquer le minimum légal si celui-ci est supérieur au montant conventionnel : le code du travail sert de plancher.","Quelle est la différence entre la CCN 1090 et le code du travail pour l'indemnité de licenciement ?",{"a":156,"q":157},"Le salaire minimum conventionnel pour le niveau le plus bas (niveau 1, échelon 1 — ouvriers\u002Femployés) est de 1 853 € bruts par mois depuis le 1er mai 2026 (avenant n°110). Ce minimum est supérieur au SMIC légal et doit être respecté par toutes les entreprises relevant de la CCN 1090.","Quel est le salaire minimum dans la convention collective commerce automobile ?",{"a":159,"q":160},"Oui, mais uniquement dans un cas spécifique : lorsque le licenciement est motivé par une inaptitude d'origine professionnelle (accident du travail ou maladie professionnelle) avec impossibilité de reclassement. Dans cette situation, l'article 4.04 de la CCN 1090 prévoit le doublement de l'indemnité conventionnelle de licenciement.","L'indemnité de licenciement est-elle doublée dans la CCN 1090 ?","\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 Commerce et Réparation Automobile — IDCC 1090\u003C\u002Ftitle>\n  \u003Cscript src=\"https:\u002F\u002Funpkg.com\u002Flucide@latest\u002Fdist\u002Fumd\u002Flucide.min.js\">\u003C\u002Fscript>\n  \u003Cstyle>\n    *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n    :root {\n      --bg: #fafaf9;\n      --surface: #ffffff;\n      --border: #e7e5e4;\n      --accent: #2563eb;\n      --accent-light: #eff6ff;\n      --accent-dark: #1d4ed8;\n      --text: #1c1917;\n      --text-muted: #78716c;\n      --green: #16a34a;\n      --green-light: #f0fdf4;\n      --amber: #d97706;\n      --amber-light: #fffbeb;\n      --radius: 0.75rem;\n      --radius-sm: 0.5rem;\n    }\n    body {\n      background: var(--bg);\n      font-family: system-ui, -apple-system, sans-serif;\n      color: var(--text);\n      font-size: 0.9375rem;\n      line-height: 1.5;\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    .tool-header .badge {\n      display: inline-flex;\n      align-items: center;\n      gap: 0.3rem;\n      background: var(--accent-light);\n      color: var(--accent);\n      font-size: 0.75rem;\n      font-weight: 600;\n      padding: 0.2rem 0.55rem;\n      border-radius: 999px;\n      margin-top: 0.4rem;\n    }\n    \u002F* Tabs *\u002F\n    .tab-list {\n      display: flex;\n      gap: 0;\n      border-bottom: 2px solid var(--border);\n      margin-bottom: 1.5rem;\n      overflow-x: auto;\n      scrollbar-width: none;\n    }\n    .tab-list::-webkit-scrollbar { display: none; }\n    .tab-btn {\n      display: flex;\n      align-items: center;\n      gap: 0.35rem;\n      padding: 0.55rem 0.9rem;\n      font-size: 0.8125rem;\n      font-weight: 600;\n      color: var(--text-muted);\n      background: none;\n      border: none;\n      border-bottom: 2px solid transparent;\n      margin-bottom: -2px;\n      cursor: pointer;\n      white-space: nowrap;\n      transition: color 0.15s, border-color 0.15s;\n    }\n    .tab-btn:hover { color: var(--accent); }\n    .tab-btn.active {\n      color: var(--accent);\n      border-bottom-color: var(--accent);\n    }\n    .tab-btn svg { width: 14px; height: 14px; }\n    \u002F* Panels *\u002F\n    .panel { display: none; }\n    .panel.active { display: block; }\n    \u002F* Rule callout *\u002F\n    .rule-callout {\n      display: flex;\n      gap: 0.6rem;\n      background: var(--amber-light);\n      border: 1px solid #fde68a;\n      border-radius: var(--radius-sm);\n      padding: 0.75rem 1rem;\n      margin-bottom: 1.25rem;\n      font-size: 0.8375rem;\n      color: #92400e;\n    }\n    .rule-callout svg { flex-shrink: 0; width: 16px; height: 16px; margin-top: 2px; color: var(--amber); }\n    .rule-callout p { line-height: 1.45; }\n    .rule-callout strong { color: #78350f; }\n    \u002F* Form elements *\u002F\n    .form-group {\n      margin-bottom: 1rem;\n    }\n    .form-label {\n      display: flex;\n      justify-content: space-between;\n      align-items: baseline;\n      font-size: 0.8125rem;\n      font-weight: 600;\n      color: var(--text);\n      margin-bottom: 0.4rem;\n    }\n    .form-label .val {\n      font-size: 0.875rem;\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      height: 6px;\n    }\n    .pills {\n      display: flex;\n      gap: 0.4rem;\n      flex-wrap: wrap;\n    }\n    .pill {\n      padding: 0.3rem 0.75rem;\n      border-radius: 999px;\n      border: 1.5px solid var(--border);\n      background: var(--surface);\n      font-size: 0.8125rem;\n      font-weight: 500;\n      cursor: pointer;\n      color: var(--text-muted);\n      transition: all 0.15s;\n    }\n    .pill:hover { border-color: var(--accent); color: var(--accent); }\n    .pill.active {\n      background: var(--accent);\n      border-color: var(--accent);\n      color: #fff;\n    }\n    select {\n      width: 100%;\n      padding: 0.5rem 0.75rem;\n      border: 1.5px solid var(--border);\n      border-radius: var(--radius-sm);\n      background: var(--surface);\n      font-size: 0.875rem;\n      color: var(--text);\n      appearance: none;\n      background-image: url(\"data:image\u002Fsvg+xml,%3Csvg xmlns='http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%2378716c' stroke-width='2'%3E%3Cpath d='m6 9 6 6 6-6'\u002F%3E%3C\u002Fsvg%3E\");\n      background-repeat: no-repeat;\n      background-position: right 0.6rem center;\n      padding-right: 2rem;\n      cursor: pointer;\n    }\n    select:focus { outline: 2px solid var(--accent); outline-offset: 1px; border-color: var(--accent); }\n    .toggle-group {\n      display: flex;\n      border: 1.5px solid var(--border);\n      border-radius: var(--radius-sm);\n      overflow: hidden;\n      width: fit-content;\n    }\n    .toggle-btn {\n      padding: 0.4rem 1rem;\n      font-size: 0.8125rem;\n      font-weight: 500;\n      border: none;\n      background: var(--surface);\n      color: var(--text-muted);\n      cursor: pointer;\n      transition: all 0.15s;\n    }\n    .toggle-btn.active {\n      background: var(--accent);\n      color: #fff;\n    }\n    .grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem; }\n    @media (max-width: 480px) { .grid-2 { grid-template-columns: 1fr; } }\n    \u002F* Result card *\u002F\n    .result-card {\n      background: var(--green-light);\n      border: 1.5px solid #bbf7d0;\n      border-radius: var(--radius);\n      padding: 1rem 1.25rem;\n      margin-top: 1.25rem;\n      display: flex;\n      align-items: center;\n      gap: 1rem;\n    }\n    .result-card .result-icon {\n      width: 2.5rem;\n      height: 2.5rem;\n      background: var(--green);\n      border-radius: var(--radius-sm);\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      flex-shrink: 0;\n      color: #fff;\n    }\n    .result-card .result-icon svg { width: 20px; height: 20px; }\n    .result-card .result-label {\n      font-size: 0.75rem;\n      font-weight: 600;\n      color: #15803d;\n      text-transform: uppercase;\n      letter-spacing: 0.04em;\n    }\n    .result-card .result-value {\n      font-size: 1.5rem;\n      font-weight: 800;\n      color: var(--green);\n      font-variant-numeric: tabular-nums;\n    }\n    .result-card .result-sub {\n      font-size: 0.75rem;\n      color: #166534;\n      margin-top: 0.15rem;\n    }\n    \u002F* Breakdown *\u002F\n    .breakdown {\n      margin-top: 0.75rem;\n      background: var(--surface);\n      border: 1px solid var(--border);\n      border-radius: var(--radius-sm);\n      padding: 0.75rem 1rem;\n    }\n    .breakdown-row {\n      display: flex;\n      justify-content: space-between;\n      font-size: 0.8125rem;\n      padding: 0.2rem 0;\n      color: var(--text-muted);\n      font-variant-numeric: tabular-nums;\n    }\n    .breakdown-row strong { color: var(--text); }\n    .breakdown-divider { border-top: 1px solid var(--border); margin: 0.4rem 0; }\n    \u002F* Disclaimer *\u002F\n    .disclaimer {\n      margin-top: 1.5rem;\n      font-size: 0.75rem;\n      color: var(--text-muted);\n      line-height: 1.5;\n      border-top: 1px solid var(--border);\n      padding-top: 0.75rem;\n    }\n    .disclaimer a { color: var(--accent); text-decoration: none; }\n    .disclaimer a:hover { text-decoration: underline; }\n    \u002F* Salary grid table *\u002F\n    .grid-table {\n      width: 100%;\n      border-collapse: collapse;\n      font-size: 0.8125rem;\n      margin-top: 0.5rem;\n    }\n    .grid-table th {\n      background: var(--accent-light);\n      color: var(--accent-dark);\n      font-weight: 700;\n      padding: 0.45rem 0.6rem;\n      text-align: left;\n      border-bottom: 2px solid var(--accent);\n    }\n    .grid-table td {\n      padding: 0.4rem 0.6rem;\n      border-bottom: 1px solid var(--border);\n      font-variant-numeric: tabular-nums;\n    }\n    .grid-table tr:last-child td { border-bottom: none; }\n    .grid-table tr:nth-child(even) td { background: #f5f5f4; }\n    \u002F* Section label *\u002F\n    .section-label {\n      font-size: 0.6875rem;\n      font-weight: 700;\n      text-transform: uppercase;\n      letter-spacing: 0.07em;\n      color: var(--text-muted);\n      margin-bottom: 0.5rem;\n      margin-top: 1rem;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\u003Cbody>\n\u003C!-- CCN IDCC 1090 — deviations detected\n     indemnite: L1234-9 baseline → CCN art. 4.04: 2\u002F10 mois × toutes années + 2\u002F15 mois × années >10 ans (moins favorable que 1\u002F4 + 1\u002F3 pour 1-10 ans)\n     preavis: L1234-1 baseline → CCN art. 2.12 (ouvriers\u002Femployés) + art. 4.10 (AM\u002Fcadres): grille structurée par niveau et ancienneté\n     salaire-min: SMIC baseline → Avenant n°110 (22\u002F01\u002F2026, eff. 01\u002F05\u002F2026): grille complète 1 853 € à 5 904 €\u002Fmois\n     conges: L3141-3 (30 j ouvrables) → CCN: +1 j (>20 ans), +2 j (>25 ans), +3 j (>30 ans)\n     heures-supp: L3121-36 (25%\u002F50%) → CCN avenant n°51: heures choisies au-delà contingent: 30%\u002F50%\n  -->\n\u003Cmain class=\"tool-root\">\n  \u003Cdiv class=\"tool-header\">\n    \u003Ch1>CCN Commerce &amp; Réparation Automobile — Calculateur\u003C\u002Fh1>\n    \u003Cspan class=\"badge\">\n      \u003Ci data-lucide=\"briefcase\">\u003C\u002Fi>\n      IDCC 1090\n    \u003C\u002Fspan>\n  \u003C\u002Fdiv>\n\n  \u003C!-- Tab list -->\n  \u003Cdiv class=\"tab-list\" role=\"tablist\">\n    \u003Cbutton class=\"tab-btn\" data-tab=\"indemnite\" role=\"tab\">\n      \u003Ci data-lucide=\"banknote\">\u003C\u002Fi>Indemnité\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"preavis\" role=\"tab\">\n      \u003Ci data-lucide=\"clock\">\u003C\u002Fi>Préavis\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"salaire\" role=\"tab\">\n      \u003Ci data-lucide=\"table-2\">\u003C\u002Fi>Grille salariale\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"conges\" role=\"tab\">\n      \u003Ci data-lucide=\"calendar-days\">\u003C\u002Fi>Congés\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"heures\" role=\"tab\">\n      \u003Ci data-lucide=\"timer\">\u003C\u002Fi>Heures supp.\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ============================================================ -->\n  \u003C!-- TAB: INDEMNITÉ DE LICENCIEMENT -->\n  \u003C!-- ============================================================ -->\n  \u003Cdiv class=\"panel\" data-panel=\"indemnite\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cp>La CCN 1090 (art. 4.04) prévoit \u003Cstrong>2\u002F10 de mois par année pour toutes les années\u003C\u002Fstrong> + \u003Cstrong>2\u002F15 de mois par année au-delà de 10 ans\u003C\u002Fstrong>. Pour les 10 premières années, cette formule est moins favorable que le code du travail (1\u002F4 mois\u002Fan). L'ancienneté minimale requise est \u003Cstrong>1 an\u003C\u002Fstrong> (vs 8 mois légalement).\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\">\n      \u003Cdiv class=\"form-label\">\n        \u003Cspan>Salaire brut mensuel de référence\u003C\u002Fspan>\n        \u003Cspan class=\"val\" id=\"ind-sal-val\">2 500 €\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cinput type=\"range\" id=\"ind-sal\" min=\"1400\" max=\"8000\" step=\"50\" value=\"2500\">\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\">\n      \u003Cdiv class=\"form-label\">\n        \u003Cspan>Ancienneté (années complètes)\u003C\u002Fspan>\n        \u003Cspan class=\"val\" id=\"ind-anc-val\">5 ans\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cinput type=\"range\" id=\"ind-anc\" min=\"1\" max=\"40\" step=\"1\" value=\"5\">\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\">\n      \u003Cdiv class=\"form-label\">\u003Cspan>Motif de rupture\u003C\u002Fspan>\u003C\u002Fdiv>\n      \u003Cdiv class=\"pills\" id=\"ind-motif-pills\">\n        \u003Cbutton class=\"pill active\" data-motif=\"economique\">Économique\u003C\u002Fbutton>\n        \u003Cbutton class=\"pill\" data-motif=\"personnel\">Personnel (non faute)  \u003C\u002Fbutton>\n        \u003Cbutton class=\"pill\" data-motif=\"inaptitude\">Inaptitude professionnelle\u003C\u002Fbutton>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card\" id=\"ind-result\">\n      \u003Cdiv class=\"result-icon\">\u003Ci data-lucide=\"euro\">\u003C\u002Fi>\u003C\u002Fdiv>\n      \u003Cdiv>\n        \u003Cdiv class=\"result-label\">Indemnité estimée (CCN 1090)\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-value\" id=\"ind-amount\">—\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-sub\" id=\"ind-sub\">\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"breakdown\" id=\"ind-breakdown\">\n      \u003Cdiv class=\"breakdown-row\">\u003Cspan>Tranche ≤ 10 ans (2\u002F10 × salaire × années)\u003C\u002Fspan>\u003Cspan id=\"bd-t1\">—\u003C\u002Fspan>\u003C\u002Fdiv>\n      \u003Cdiv class=\"breakdown-row\">\u003Cspan>Tranche > 10 ans (2\u002F15 × salaire × années supp.)\u003C\u002Fspan>\u003Cspan id=\"bd-t2\">—\u003C\u002Fspan>\u003C\u002Fdiv>\n      \u003Cdiv class=\"breakdown-divider\">\u003C\u002Fdiv>\n      \u003Cdiv class=\"breakdown-row\">\u003Cstrong>Total brut CCN\u003C\u002Fstrong>\u003Cspan id=\"bd-total\">—\u003C\u002Fspan>\u003C\u002Fdiv>\n      \u003Cdiv class=\"breakdown-row\">\u003Cspan>Comparaison code du travail (indicative)\u003C\u002Fspan>\u003Cspan id=\"bd-legal\">—\u003C\u002Fspan>\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ============================================================ -->\n  \u003C!-- TAB: PRÉAVIS -->\n  \u003C!-- ============================================================ -->\n  \u003Cdiv class=\"panel\" data-panel=\"preavis\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cp>La CCN 1090 fixe des durées précises selon le \u003Cstrong>statut\u003C\u002Fstrong> et l'\u003Cstrong>ancienneté\u003C\u002Fstrong> (art. 2.12 pour ouvriers\u002Femployés, art. 4.10 pour agents de maîtrise et cadres), généralement plus longues que le minimum légal (L1234-1).\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\">\n      \u003Cdiv class=\"form-label\">\u003Cspan>Catégorie professionnelle\u003C\u002Fspan>\u003C\u002Fdiv>\n      \u003Cdiv class=\"pills\" id=\"pr-cat-pills\">\n        \u003Cbutton class=\"pill active\" data-cat=\"oe\">Ouvrier \u002F Employé (niv. 1-2)\u003C\u002Fbutton>\n        \u003Cbutton class=\"pill\" data-cat=\"oe3\">Ouvrier \u002F Employé (niv. 3-12)\u003C\u002Fbutton>\n        \u003Cbutton class=\"pill\" data-cat=\"am\">Agent de maîtrise \u002F Cadre\u003C\u002Fbutton>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\" id=\"pr-anc-group\">\n      \u003Cdiv class=\"form-label\">\n        \u003Cspan>Ancienneté (années)\u003C\u002Fspan>\n        \u003Cspan class=\"val\" id=\"pr-anc-val\">1 an\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cinput type=\"range\" id=\"pr-anc\" min=\"0\" max=\"30\" step=\"1\" value=\"1\">\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\">\n      \u003Cdiv class=\"form-label\">\u003Cspan>Type de rupture\u003C\u002Fspan>\u003C\u002Fdiv>\n      \u003Cdiv class=\"toggle-group\">\n        \u003Cbutton class=\"toggle-btn active\" data-rupture=\"licenciement\">Licenciement\u003C\u002Fbutton>\n        \u003Cbutton class=\"toggle-btn\" data-rupture=\"demission\">Démission\u003C\u002Fbutton>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card\">\n      \u003Cdiv class=\"result-icon\">\u003Ci data-lucide=\"clock\">\u003C\u002Fi>\u003C\u002Fdiv>\n      \u003Cdiv>\n        \u003Cdiv class=\"result-label\">Durée du préavis (CCN 1090)\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-value\" id=\"pr-result\">—\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-sub\" id=\"pr-sub\">\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ============================================================ -->\n  \u003C!-- TAB: GRILLE SALARIALE -->\n  \u003C!-- ============================================================ -->\n  \u003Cdiv class=\"panel\" data-panel=\"salaire\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cp>La CCN 1090 dispose de sa propre grille de salaires minima conventionnels (avenant n°110 du 22\u002F01\u002F2026, applicable au \u003Cstrong>1er mai 2026\u003C\u002Fstrong>). Trois grilles couvrent ouvriers\u002Femployés, agents de maîtrise et cadres, avec des minima de \u003Cstrong>1 853 €\u003C\u002Fstrong> à \u003Cstrong>5 904 € bruts\u002Fmois\u003C\u002Fstrong> (base 151,67 h\u002Fmois).\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\">\n      \u003Cdiv class=\"form-label\">\u003Cspan>Catégorie\u003C\u002Fspan>\u003C\u002Fdiv>\n      \u003Cdiv class=\"pills\" id=\"sal-cat-pills\">\n        \u003Cbutton class=\"pill active\" data-salcat=\"oe\">Ouvriers \u002F Employés\u003C\u002Fbutton>\n        \u003Cbutton class=\"pill\" data-salcat=\"am\">Agents de maîtrise\u003C\u002Fbutton>\n        \u003Cbutton class=\"pill\" data-salcat=\"cadre\">Cadres\u003C\u002Fbutton>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv id=\"sal-oe-table\">\n      \u003Cdiv class=\"section-label\">Grille Ouvriers \u002F Employés (base 35h\u002Fsem)\u003C\u002Fdiv>\n      \u003Ctable class=\"grid-table\">\n        \u003Cthead>\u003Ctr>\u003Cth>Niveau\u003C\u002Fth>\u003Cth>Échelon\u003C\u002Fth>\u003Cth>Salaire min. brut\u002Fmois\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\n        \u003Ctbody>\n          \u003Ctr>\u003Ctd>1\u003C\u002Ftd>\u003Ctd>1\u003C\u002Ftd>\u003Ctd>1 853 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>1\u003C\u002Ftd>\u003Ctd>2\u003C\u002Ftd>\u003Ctd>1 858 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>2\u003C\u002Ftd>\u003Ctd>1\u003C\u002Ftd>\u003Ctd>1 864 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>2\u003C\u002Ftd>\u003Ctd>2\u003C\u002Ftd>\u003Ctd>1 875 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>3\u003C\u002Ftd>\u003Ctd>1\u003C\u002Ftd>\u003Ctd>1 889 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>3\u003C\u002Ftd>\u003Ctd>2\u003C\u002Ftd>\u003Ctd>1 910 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>4\u003C\u002Ftd>\u003Ctd>1\u003C\u002Ftd>\u003Ctd>1 936 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>4\u003C\u002Ftd>\u003Ctd>2\u003C\u002Ftd>\u003Ctd>1 965 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>5\u003C\u002Ftd>\u003Ctd>1\u003C\u002Ftd>\u003Ctd>2 001 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>5\u003C\u002Ftd>\u003Ctd>2\u003C\u002Ftd>\u003Ctd>2 045 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>6\u003C\u002Ftd>\u003Ctd>1\u003C\u002Ftd>\u003Ctd>2 095 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>6\u003C\u002Ftd>\u003Ctd>2\u003C\u002Ftd>\u003Ctd>2 152 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>7\u003C\u002Ftd>\u003Ctd>1\u003C\u002Ftd>\u003Ctd>2 218 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>7\u003C\u002Ftd>\u003Ctd>2\u003C\u002Ftd>\u003Ctd>2 294 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>8\u003C\u002Ftd>\u003Ctd>1\u003C\u002Ftd>\u003Ctd>2 382 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>8\u003C\u002Ftd>\u003Ctd>2\u003C\u002Ftd>\u003Ctd>2 480 €\u003C\u002Ftd>\u003C\u002Ftr>\n        \u003C\u002Ftbody>\n      \u003C\u002Ftable>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv id=\"sal-am-table\" style=\"display:none;\">\n      \u003Cdiv class=\"section-label\">Grille Agents de maîtrise (base 35h\u002Fsem)\u003C\u002Fdiv>\n      \u003Ctable class=\"grid-table\">\n        \u003Cthead>\u003Ctr>\u003Cth>Degré\u003C\u002Fth>\u003Cth>Niveau\u003C\u002Fth>\u003Cth>Salaire min. brut\u002Fmois\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\n        \u003Ctbody>\n          \u003Ctr>\u003Ctd>A\u003C\u002Ftd>\u003Ctd>1\u003C\u002Ftd>\u003Ctd>2 590 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>A\u003C\u002Ftd>\u003Ctd>2\u003C\u002Ftd>\u003Ctd>2 720 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>A\u003C\u002Ftd>\u003Ctd>3\u003C\u002Ftd>\u003Ctd>2 855 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>B\u003C\u002Ftd>\u003Ctd>1\u003C\u002Ftd>\u003Ctd>2 998 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>B\u003C\u002Ftd>\u003Ctd>2\u003C\u002Ftd>\u003Ctd>3 148 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>B\u003C\u002Ftd>\u003Ctd>3\u003C\u002Ftd>\u003Ctd>3 305 €\u003C\u002Ftd>\u003C\u002Ftr>\n        \u003C\u002Ftbody>\n      \u003C\u002Ftable>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv id=\"sal-cadre-table\" style=\"display:none;\">\n      \u003Cdiv class=\"section-label\">Grille Cadres (base 35h\u002Fsem)\u003C\u002Fdiv>\n      \u003Ctable class=\"grid-table\">\n        \u003Cthead>\u003Ctr>\u003Cth>Degré\u003C\u002Fth>\u003Cth>Niveau\u003C\u002Fth>\u003Cth>Salaire min. brut\u002Fmois\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\n        \u003Ctbody>\n          \u003Ctr>\u003Ctd>C\u003C\u002Ftd>\u003Ctd>1\u003C\u002Ftd>\u003Ctd>3 472 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>C\u003C\u002Ftd>\u003Ctd>2\u003C\u002Ftd>\u003Ctd>3 820 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>C\u003C\u002Ftd>\u003Ctd>3\u003C\u002Ftd>\u003Ctd>4 202 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>D\u003C\u002Ftd>\u003Ctd>1\u003C\u002Ftd>\u003Ctd>4 622 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>D\u003C\u002Ftd>\u003Ctd>2\u003C\u002Ftd>\u003Ctd>5 084 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>D\u003C\u002Ftd>\u003Ctd>3\u003C\u002Ftd>\u003Ctd>5 904 €\u003C\u002Ftd>\u003C\u002Ftr>\n        \u003C\u002Ftbody>\n      \u003C\u002Ftable>\n      \u003Cp style=\"font-size:0.75rem;color:var(--text-muted);margin-top:0.5rem;\">Point de formation-qualification : 3,47 € | Panier repas : 6,09 €\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv style=\"margin-top:1.25rem;\">\n      \u003Cdiv class=\"form-label\">\u003Cspan>Vérifier mon salaire\u003C\u002Fspan>\u003C\u002Fdiv>\n      \u003Cdiv class=\"grid-2\">\n        \u003Cdiv class=\"form-group\">\n          \u003Clabel style=\"font-size:0.8125rem;color:var(--text-muted);display:block;margin-bottom:0.3rem;\">Mon salaire brut mensuel (€)\u003C\u002Flabel>\n          \u003Cinput type=\"number\" id=\"sal-check\" min=\"1400\" max=\"10000\" step=\"50\" value=\"2000\"\n            style=\"width:100%;padding:0.5rem 0.75rem;border:1.5px solid var(--border);border-radius:var(--radius-sm);font-size:0.875rem;background:var(--surface);color:var(--text);\">\n        \u003C\u002Fdiv>\n        \u003Cdiv style=\"display:flex;align-items:flex-end;padding-bottom:0.1rem;\">\n          \u003Cdiv id=\"sal-check-result\" style=\"padding:0.5rem 0.75rem;border-radius:var(--radius-sm);font-size:0.8125rem;font-weight:600;width:100%;text-align:center;\">\u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ============================================================ -->\n  \u003C!-- TAB: CONGÉS PAYÉS -->\n  \u003C!-- ============================================================ -->\n  \u003Cdiv class=\"panel\" data-panel=\"conges\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cp>La CCN 1090 accorde des \u003Cstrong>jours supplémentaires de congés payés en fonction de l'ancienneté\u003C\u002Fstrong> : +1 jour à partir de 20 ans, +2 jours à partir de 25 ans, +3 jours à partir de 30 ans. Ces jours s'ajoutent aux 30 jours ouvrables légaux (L3141-3).\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\">\n      \u003Cdiv class=\"form-label\">\n        \u003Cspan>Ancienneté dans l'entreprise (années)\u003C\u002Fspan>\n        \u003Cspan class=\"val\" id=\"cg-anc-val\">10 ans\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cinput type=\"range\" id=\"cg-anc\" min=\"0\" max=\"40\" step=\"1\" value=\"10\">\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\">\n      \u003Cdiv class=\"form-label\">\u003Cspan>Temps de travail\u003C\u002Fspan>\u003C\u002Fdiv>\n      \u003Cdiv class=\"toggle-group\">\n        \u003Cbutton class=\"toggle-btn active\" data-temps=\"plein\">Temps plein\u003C\u002Fbutton>\n        \u003Cbutton class=\"toggle-btn\" data-temps=\"partiel\">Temps partiel\u003C\u002Fbutton>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card\">\n      \u003Cdiv class=\"result-icon\">\u003Ci data-lucide=\"sun\">\u003C\u002Fi>\u003C\u002Fdiv>\n      \u003Cdiv>\n        \u003Cdiv class=\"result-label\">Congés payés annuels (CCN 1090)\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-value\" id=\"cg-result\">—\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-sub\" id=\"cg-sub\">\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"breakdown\" id=\"cg-breakdown\">\n      \u003Cdiv class=\"breakdown-row\">\u003Cspan>Congés légaux (art. L3141-3)\u003C\u002Fspan>\u003Cspan>30 jours ouvrables\u003C\u002Fspan>\u003C\u002Fdiv>\n      \u003Cdiv class=\"breakdown-row\">\u003Cspan>Jours supplémentaires d'ancienneté CCN\u003C\u002Fspan>\u003Cspan id=\"bd-extra-days\">0 jour\u003C\u002Fspan>\u003C\u002Fdiv>\n      \u003Cdiv class=\"breakdown-divider\">\u003C\u002Fdiv>\n      \u003Cdiv class=\"breakdown-row\">\u003Cstrong>Total\u003C\u002Fstrong>\u003Cspan id=\"bd-cg-total\">—\u003C\u002Fspan>\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ============================================================ -->\n  \u003C!-- TAB: HEURES SUPPLÉMENTAIRES -->\n  \u003C!-- ============================================================ -->\n  \u003Cdiv class=\"panel\" data-panel=\"heures\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cp>Les taux de majoration standard sont identiques au code du travail (25 % puis 50 %). Toutefois, pour les \u003Cstrong>heures choisies\u003C\u002Fstrong> (au-delà du contingent de 220 h\u002Fan, avec accord salarié), l'avenant n°51 prévoit une majoration de \u003Cstrong>30 %\u003C\u002Fstrong> (au lieu de 25 %) pour les 8 premières heures au-delà du contingent.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\">\n      \u003Cdiv class=\"form-label\">\n        \u003Cspan>Salaire horaire brut (€)\u003C\u002Fspan>\n        \u003Cspan class=\"val\" id=\"hs-taux-val\">15,00 €\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cinput type=\"range\" id=\"hs-taux\" min=\"10\" max=\"80\" step=\"0.5\" value=\"15\">\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\">\n      \u003Cdiv class=\"form-label\">\u003Cspan>Type d'heures\u003C\u002Fspan>\u003C\u002Fdiv>\n      \u003Cdiv class=\"pills\" id=\"hs-type-pills\">\n        \u003Cbutton class=\"pill active\" data-hstype=\"standard\">Standard (dans contingent)\u003C\u002Fbutton>\n        \u003Cbutton class=\"pill\" data-hstype=\"choisies\">Heures choisies (hors contingent)\u003C\u002Fbutton>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\">\n      \u003Cdiv class=\"form-label\">\n        \u003Cspan id=\"hs-h1-label\">Heures supp. tranche 1 (1re à 8e h)\u003C\u002Fspan>\n        \u003Cspan class=\"val\" id=\"hs-h1-val\">0 h\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cinput type=\"range\" id=\"hs-h1\" min=\"0\" max=\"8\" step=\"0.5\" value=\"0\">\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\">\n      \u003Cdiv class=\"form-label\">\n        \u003Cspan>Heures supp. tranche 2 (au-delà de 8 h)\u003C\u002Fspan>\n        \u003Cspan class=\"val\" id=\"hs-h2-val\">0 h\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cinput type=\"range\" id=\"hs-h2\" min=\"0\" max=\"20\" step=\"0.5\" value=\"0\">\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card\">\n      \u003Cdiv class=\"result-icon\">\u003Ci data-lucide=\"timer\">\u003C\u002Fi>\u003C\u002Fdiv>\n      \u003Cdiv>\n        \u003Cdiv class=\"result-label\">Montant total majoré\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-value\" id=\"hs-result\">—\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-sub\" id=\"hs-sub\">\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"breakdown\">\n      \u003Cdiv class=\"breakdown-row\">\u003Cspan id=\"hs-bd-label1\">Tranche 1 (×1,25)\u003C\u002Fspan>\u003Cspan id=\"hs-bd-t1\">—\u003C\u002Fspan>\u003C\u002Fdiv>\n      \u003Cdiv class=\"breakdown-row\">\u003Cspan>Tranche 2 (×1,50)\u003C\u002Fspan>\u003Cspan id=\"hs-bd-t2\">—\u003C\u002Fspan>\u003C\u002Fdiv>\n      \u003Cdiv class=\"breakdown-divider\">\u003C\u002Fdiv>\n      \u003Cdiv class=\"breakdown-row\">\u003Cstrong>Total\u003C\u002Fstrong>\u003Cspan id=\"hs-bd-total\">—\u003C\u002Fspan>\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- Disclaimer (shared) -->\n  \u003Cp class=\"disclaimer\">\n    Calcul indicatif basé sur la CCN IDCC 1090 (Brochure JO n°3034) — avenant n°110 (salaires 2026), avenant n°51 (heures supp).\n    Source : \u003Ca href=\"https:\u002F\u002Fwww.legifrance.gouv.fr\u002Fconv_coll\u002Fid\u002FKALICONT000005635191\u002F\" target=\"_blank\" rel=\"noopener\">Légifrance\u003C\u002Fa>.\n    Pour validation légale\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 fmtEUR2 = v => new Intl.NumberFormat('fr-FR',{style:'currency',currency:'EUR',minimumFractionDigits:2,maximumFractionDigits:2}).format(v);\n\n\u002F\u002F ── TAB SYSTEM ────────────────────────────────────────────────────\nconst tabs = document.querySelectorAll('[data-tab]');\nconst panels = document.querySelectorAll('[data-panel]');\n\nfunction activateTab(id) {\n  tabs.forEach(t => t.classList.toggle('active', t.dataset.tab === id));\n  panels.forEach(p => {\n    const isActive = p.dataset.panel === id;\n    p.classList.toggle('active', isActive);\n    p.style.display = isActive ? 'block' : 'none';\n  });\n  try { if (location.hash !== '#' + id) location.hash = id; } catch(e){}\n  requestAnimationFrame(() => {\n    window.dispatchEvent(new Event('resize'));\n  });\n}\n\ntabs.forEach(t => t.addEventListener('click', () => {\n  activateTab(t.dataset.tab);\n  \u002F\u002F recompute panel after activation\n  const panel = t.dataset.tab;\n  if (panel === 'indemnite') computeIndemnite();\n  if (panel === 'preavis') computePreavis();\n  if (panel === 'salaire') computeSalaire();\n  if (panel === 'conges') computeConges();\n  if (panel === 'heures') computeHeures();\n}));\n\nconst hashTab = location.hash.slice(1);\nconst validTabs = Array.from(tabs).map(t => t.dataset.tab);\nconst initTab = validTabs.includes(hashTab) ? hashTab : validTabs[0];\nactivateTab(initTab);\n\n\u002F\u002F ── INDEMNITÉ ─────────────────────────────────────────────────────\nlet indState = { sal: 2500, anc: 5, motif: 'economique' };\n\nconst indSalSlider = document.getElementById('ind-sal');\nconst indSalVal = document.getElementById('ind-sal-val');\nconst indAncSlider = document.getElementById('ind-anc');\nconst indAncVal = document.getElementById('ind-anc-val');\n\nindSalSlider.addEventListener('input', () => {\n  indState.sal = +indSalSlider.value;\n  indSalVal.textContent = fmtEUR(indState.sal);\n  computeIndemnite();\n});\nindAncSlider.addEventListener('input', () => {\n  indState.anc = +indAncSlider.value;\n  indAncVal.textContent = indState.anc + ' an' + (indState.anc > 1 ? 's' : '');\n  computeIndemnite();\n});\ndocument.querySelectorAll('#ind-motif-pills .pill').forEach(p => {\n  p.addEventListener('click', () => {\n    document.querySelectorAll('#ind-motif-pills .pill').forEach(x => x.classList.remove('active'));\n    p.classList.add('active');\n    indState.motif = p.dataset.motif;\n    computeIndemnite();\n  });\n});\n\nfunction computeIndemnite() {\n  const { sal, anc, motif } = indState;\n  \u002F\u002F CCN 1090 art. 4.04: 2\u002F10 × sal × toutes années + 2\u002F15 × sal × années > 10\n  const t1Years = Math.min(anc, 10);\n  const t2Years = Math.max(0, anc - 10);\n  const t1 = (2\u002F10) * sal * t1Years;\n  const t2 = (2\u002F15) * sal * t2Years;\n  let total = t1 + t2;\n  \u002F\u002F Inaptitude professionnelle → doublement\n  if (motif === 'inaptitude') total *= 2;\n  \u002F\u002F Baseline code du travail\n  const legalT1 = (1\u002F4) * sal * t1Years;\n  const legalT2 = (1\u002F3) * sal * t2Years;\n  const legal = legalT1 + legalT2;\n\n  document.getElementById('ind-amount').textContent = fmtEUR(total);\n  document.getElementById('ind-sub').textContent =\n    motif === 'inaptitude' ? 'Doublée pour inaptitude professionnelle (art. 4.04 CCN)' :\n    total >= legal ? 'Plus favorable que le code du travail' :\n    `Code du travail : ${fmtEUR(legal)} (plus favorable pour \u003C10 ans)`;\n  document.getElementById('bd-t1').textContent = fmtEUR(t1);\n  document.getElementById('bd-t2').textContent = t2Years > 0 ? fmtEUR(t2) : '—';\n  document.getElementById('bd-total').textContent = fmtEUR(motif === 'inaptitude' ? total\u002F2 : total) + (motif === 'inaptitude' ? ' × 2 = ' + fmtEUR(total) : '');\n  document.getElementById('bd-legal').textContent = fmtEUR(legal);\n}\ncomputeIndemnite();\n\n\u002F\u002F ── PRÉAVIS ───────────────────────────────────────────────────────\nlet prState = { cat: 'oe', anc: 1, rupture: 'licenciement' };\n\ndocument.querySelectorAll('#pr-cat-pills .pill').forEach(p => {\n  p.addEventListener('click', () => {\n    document.querySelectorAll('#pr-cat-pills .pill').forEach(x => x.classList.remove('active'));\n    p.classList.add('active');\n    prState.cat = p.dataset.cat;\n    computePreavis();\n  });\n});\ndocument.getElementById('pr-anc').addEventListener('input', () => {\n  prState.anc = +document.getElementById('pr-anc').value;\n  document.getElementById('pr-anc-val').textContent = prState.anc + ' an' + (prState.anc > 1 ? 's' : '');\n  computePreavis();\n});\ndocument.querySelectorAll('[data-rupture]').forEach(b => {\n  b.addEventListener('click', () => {\n    document.querySelectorAll('[data-rupture]').forEach(x => x.classList.remove('active'));\n    b.classList.add('active');\n    prState.rupture = b.dataset.rupture;\n    computePreavis();\n  });\n});\n\nfunction computePreavis() {\n  const { cat, anc, rupture } = prState;\n  let result = '', sub = '';\n  if (cat === 'oe') {\n    \u002F\u002F Niveaux 1-2\n    if (rupture === 'licenciement') {\n      result = '2 semaines';\n      sub = 'Niveaux 1-2 — toute ancienneté (art. 2.12 CCN 1090)';\n    } else {\n      result = '2 semaines';\n      sub = 'Niveaux 1-2 — démission (art. 2.12 CCN 1090)';\n    }\n  } else if (cat === 'oe3') {\n    \u002F\u002F Niveaux 3-12\n    if (rupture === 'licenciement') {\n      if (anc \u003C 2) {\n        result = '1 mois';\n        sub = 'Niveaux 3-12, \u003C 2 ans d\\'ancienneté (art. 2.12 CCN 1090)';\n      } else {\n        result = '2 mois';\n        sub = 'Niveaux 3-12, ≥ 2 ans d\\'ancienneté (art. 2.12 CCN 1090)';\n      }\n    } else {\n      result = '1 mois';\n      sub = 'Niveaux 3-12 — démission (art. 2.12 CCN 1090)';\n    }\n  } else {\n    \u002F\u002F AM et Cadres\n    result = '2 à 3 mois';\n    sub = 'Agents de maîtrise et cadres — selon degré\u002Fniveau (art. 4.10 CCN 1090). Préavis de départ à notifier 15 jours avant la fin souhaitée.';\n  }\n  document.getElementById('pr-result').textContent = result;\n  document.getElementById('pr-sub').textContent = sub;\n}\ncomputePreavis();\n\n\u002F\u002F ── GRILLE SALARIALE ──────────────────────────────────────────────\nlet salState = { cat: 'oe' };\n\nconst salGrids = {\n  oe: { min: 1853, max: 2480 },\n  am: { min: 2590, max: 3305 },\n  cadre: { min: 3472, max: 5904 }\n};\n\ndocument.querySelectorAll('#sal-cat-pills .pill').forEach(p => {\n  p.addEventListener('click', () => {\n    document.querySelectorAll('#sal-cat-pills .pill').forEach(x => x.classList.remove('active'));\n    p.classList.add('active');\n    salState.cat = p.dataset.salcat;\n    computeSalaire();\n  });\n});\ndocument.getElementById('sal-check').addEventListener('input', () => computeSalaire());\n\nfunction computeSalaire() {\n  const { cat } = salState;\n  document.getElementById('sal-oe-table').style.display = cat === 'oe' ? 'block' : 'none';\n  document.getElementById('sal-am-table').style.display = cat === 'am' ? 'block' : 'none';\n  document.getElementById('sal-cadre-table').style.display = cat === 'cadre' ? 'block' : 'none';\n\n  const val = +document.getElementById('sal-check').value;\n  const grid = salGrids[cat];\n  const el = document.getElementById('sal-check-result');\n  if (!val || isNaN(val)) { el.textContent = '—'; return; }\n  if (val \u003C grid.min) {\n    el.style.background = '#fef2f2';\n    el.style.color = '#b91c1c';\n    el.textContent = `En dessous du minimum CCN (${fmtEUR(grid.min)}\u002Fmois)`;\n  } else {\n    el.style.background = '#f0fdf4';\n    el.style.color = '#15803d';\n    el.textContent = `Conforme à la grille CCN 1090`;\n  }\n  requestAnimationFrame(() => window.dispatchEvent(new Event('resize')));\n}\ncomputeSalaire();\n\n\u002F\u002F ── CONGÉS ────────────────────────────────────────────────────────\nlet cgState = { anc: 10, temps: 'plein' };\n\ndocument.getElementById('cg-anc').addEventListener('input', () => {\n  cgState.anc = +document.getElementById('cg-anc').value;\n  document.getElementById('cg-anc-val').textContent = cgState.anc + ' an' + (cgState.anc > 1 ? 's' : '');\n  computeConges();\n});\ndocument.querySelectorAll('[data-temps]').forEach(b => {\n  b.addEventListener('click', () => {\n    document.querySelectorAll('[data-temps]').forEach(x => x.classList.remove('active'));\n    b.classList.add('active');\n    cgState.temps = b.dataset.temps;\n    computeConges();\n  });\n});\n\nfunction computeConges() {\n  const { anc, temps } = cgState;\n  let extra = 0;\n  if (anc >= 30) extra = 3;\n  else if (anc >= 25) extra = 2;\n  else if (anc >= 20) extra = 1;\n  const total = 30 + extra;\n  document.getElementById('cg-result').textContent = total + ' jours ouvrables';\n  document.getElementById('cg-sub').textContent =\n    extra > 0\n      ? `dont ${extra} jour${extra>1?'s':''} supplémentaire${extra>1?'s':''} d'ancienneté CCN${temps==='partiel'?' (temps partiel : proratisé)':''}`\n      : `Base légale — ancienneté insuffisante pour jours supplémentaires${temps==='partiel'?' (temps partiel : proratisé)':''}`;\n  document.getElementById('bd-extra-days').textContent = extra + ' jour' + (extra > 1 ? 's' : '');\n  document.getElementById('bd-cg-total').textContent = total + ' jours ouvrables';\n}\ncomputeConges();\n\n\u002F\u002F ── HEURES SUPP. ─────────────────────────────────────────────────\nlet hsState = { taux: 15, hstype: 'standard', h1: 0, h2: 0 };\n\ndocument.getElementById('hs-taux').addEventListener('input', () => {\n  hsState.taux = +document.getElementById('hs-taux').value;\n  document.getElementById('hs-taux-val').textContent = fmtEUR2(hsState.taux);\n  computeHeures();\n});\ndocument.querySelectorAll('#hs-type-pills .pill').forEach(p => {\n  p.addEventListener('click', () => {\n    document.querySelectorAll('#hs-type-pills .pill').forEach(x => x.classList.remove('active'));\n    p.classList.add('active');\n    hsState.hstype = p.dataset.hstype;\n    computeHeures();\n  });\n});\ndocument.getElementById('hs-h1').addEventListener('input', () => {\n  hsState.h1 = +document.getElementById('hs-h1').value;\n  document.getElementById('hs-h1-val').textContent = hsState.h1 + ' h';\n  computeHeures();\n});\ndocument.getElementById('hs-h2').addEventListener('input', () => {\n  hsState.h2 = +document.getElementById('hs-h2').value;\n  document.getElementById('hs-h2-val').textContent = hsState.h2 + ' h';\n  computeHeures();\n});\n\nfunction computeHeures() {\n  const { taux, hstype, h1, h2 } = hsState;\n  const rate1 = hstype === 'choisies' ? 1.30 : 1.25;\n  const rate2 = 1.50;\n  const label1 = hstype === 'choisies' ? 'Tranche 1 (×1,30 — heures choisies)' : 'Tranche 1 (×1,25 — standard)';\n  const t1 = h1 * taux * rate1;\n  const t2 = h2 * taux * rate2;\n  const total = t1 + t2;\n  document.getElementById('hs-bd-label1').textContent = label1;\n  document.getElementById('hs-h1-label').textContent = hstype === 'choisies' ? 'Heures choisies tranche 1 (1re à 8e h au-delà contingent)' : 'Heures supp. tranche 1 (1re à 8e h)';\n  document.getElementById('hs-bd-t1').textContent = h1 > 0 ? fmtEUR2(t1) : '—';\n  document.getElementById('hs-bd-t2').textContent = h2 > 0 ? fmtEUR2(t2) : '—';\n  document.getElementById('hs-bd-total').textContent = fmtEUR2(total);\n  document.getElementById('hs-result').textContent = fmtEUR2(total);\n  document.getElementById('hs-sub').textContent =\n    hstype === 'choisies'\n      ? 'Taux choisies 30% (avenant n°51 CCN 1090) — contingent 220h\u002Fan'\n      : 'Taux standard 25%\u002F50% — identique au code du travail';\n}\ncomputeHeures();\n\n\u002F\u002F ── RESIZE OBSERVER ───────────────────────────────────────────────\nconst ro = new ResizeObserver(() => {\n  const h = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight);\n  parent.postMessage({ type: 'resize', height: h }, '*');\n});\nro.observe(document.documentElement);\n\n\u002F\u002F ── LUCIDE ────────────────────────────────────────────────────────\nif (typeof lucide !== 'undefined') lucide.createIcons();\n\u003C\u002Fscript>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n","generated","juridique","consumer","both","https:\u002F\u002Fpub-bdebbd2dad294475a2da0eb657815b6b.r2.dev\u002Ftools\u002Fccn-commerce-et-de-la-reparation-de-l-automobile-du-cycle-42c886723c.webp",[]]