[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"tool-content-ccn-services-automobile-fr":3,"footer-cities-fr":82},{"slug":4,"title":5,"page_title":6,"description":7,"content_md":8,"local_slug":4,"json_ld":9,"faq":46,"tool_html":76,"source":77,"category":78,"audience":79,"publish_mode":80,"hero_image":81,"hero_image_alt":5},"ccn-services-automobile","CCN Services de l'Automobile — calculateur complet","Calculateur CCN Services de l'Automobile IDCC 1090 | Expert Zoom","Outil interactif couvrant le préavis, la grille salariale, le 13ème mois, les congés et les heures supplémentaires de la CCN services de l'automobile (IDCC 1090).","Ce calculateur couvre les 5 principales spécificités de la convention collective nationale des services de l'automobile (IDCC 1090) : les durées de préavis par échelon (de 2 semaines à 3 mois), la grille de salaires conventionnels 2026 (avenant n°110), la prime de 13ème mois obligatoire après 3 ans d'ancienneté, les jours de congés supplémentaires selon l'ancienneté, et les règles sur les heures supplémentaires incluant les «\\u00a0heures choisies\\u00a0».",[10,29],{"name":11,"@type":12,"about":13,"author":17,"@context":20,"isPartOf":21,"inLanguage":24,"description":25,"operatingSystem":26,"applicationCategory":27,"isAccessibleForFree":28},"Calculateur CCN Services de l'Automobile — IDCC 1090","WebApplication",{"name":14,"@type":15,"identifier":16},"Convention collective nationale du commerce et de la réparation de l'automobile, du cycle et du motocycle","Thing","IDCC 1090",{"name":18,"@type":19},"Expert-Zoom","Organization","https:\u002F\u002Fschema.org",{"url":22,"@type":23},"\u002Ffr\u002Fmagazine\u002Fjuridique\u002Fles-conventions-collectives-en-france","Article","fr","Outil interactif couvrant le préavis, la grille salariale, le 13ème mois, les congés supplémentaires et les heures supplémentaires de la convention collective nationale du commerce et de la réparation de l'automobile (IDCC 1090).","All","FinanceApplication",true,{"@type":30,"@context":20,"mainEntity":31},"FAQPage",[32,38,42],{"name":33,"@type":34,"acceptedAnswer":35},"Quelle est la durée du préavis dans la CCN services de l'automobile (IDCC 1090) ?","Question",{"text":36,"@type":37},"La CCN 1090 prévoit des préavis par échelon : 2 semaines pour les ouvriers\u002Femployés échelons 1-2, 1 mois pour les échelons 3-12, 2 mois pour les agents de maîtrise niveaux 17-19, et 3 mois pour les agents de maîtrise niveaux 20-25 et les cadres.","Answer",{"name":39,"@type":34,"acceptedAnswer":40},"Y a-t-il un 13ème mois dans la CCN automobile IDCC 1090 ?",{"text":41,"@type":37},"Oui. La CCN 1090 instaure une prime annuelle obligatoire (13ème mois) pour les salariés non-cadres ayant au moins 3 ans d'ancienneté effective dans l'entreprise.",{"name":43,"@type":34,"acceptedAnswer":44},"Quelle est la grille de salaires de la CCN automobile en 2026 ?",{"text":45,"@type":37},"L'avenant n°110 (janvier 2026) fixe le minimum conventionnel à 1 853 € brut mensuel (échelon 1, base 35h), supérieur au SMIC. La grille monte jusqu'à 5 904 € pour les cadres supérieurs.",[47,49,52,55,58,61,64,67,70,73],{"a":48,"q":33},"La CCN 1090 prévoit des préavis par échelon : 2 semaines pour les ouvriers\u002Femployés échelons 1-2, 1 mois pour les échelons 3-12, 2 mois pour les agents de maîtrise niveaux 17-19, et 3 mois pour les agents de maîtrise niveaux 20-25 et les cadres. En cas de licenciement, la règle la plus favorable entre la CCN et la loi s'applique.",{"a":50,"q":51},"L'avenant n°110 du 22 janvier 2026 a revalorisé la grille de +1,25 % en moyenne. Le minimum conventionnel débute à 1 853 € brut mensuel (échelon 1, base 35h), soit au-dessus du SMIC 2026 (1 801,80 €), et monte jusqu'à 5 904 € brut pour les cadres supérieurs.","Quelle est la grille de salaires dans la convention collective automobile 2026 ?",{"a":53,"q":54},"Oui. La CCN 1090 instaure une prime annuelle obligatoire (13ème mois) pour les salariés non-cadres (classes 1 à 4) disposant d'au moins 3 ans d'ancienneté effective dans l'entreprise. Le montant est égal à un mois de salaire brut de base, proratisé en cas d'année incomplète.","Y a-t-il un 13ème mois dans la convention collective services de l'automobile ?",{"a":56,"q":57},"En plus des 30 jours ouvrables légaux, la CCN 1090 octroie des jours de congés selon l'ancienneté : +1 jour après 20 ans, +2 jours après 25 ans, +3 jours après 30 ans. Des jours supplémentaires sont également prévus pour les enfants à charge de moins de 21 ans (+2 jours par enfant).","Quels sont les jours de congés supplémentaires prévus par la CCN automobile ?",{"a":59,"q":60},"Les heures supplémentaires sont majorées à +25 % pour les 8 premières heures (36ème à 43ème), puis à +50 % au-delà. Le contingent conventionnel est fixé à 220 heures par an. Les « heures choisies » réalisées au-delà de ce contingent bénéficient d'une majoration supplémentaire de 30 %.","Quelles sont les majorations heures supplémentaires dans la CCN 1090 ?",{"a":62,"q":63},"La prime d'ancienneté classique n'existe plus dans la CCN 1090. Elle a été remplacée par un capital de fin de carrière (calculé sur une base de référence de 38 224 € revalorisée annuellement) et par des jours de congés supplémentaires selon l'ancienneté.","La CCN automobile IDCC 1090 prévoit-elle une prime d'ancienneté ?",{"a":65,"q":66},"La convention collective nationale du commerce et de la réparation de l'automobile, du cycle et du motocycle et des activités connexes porte l'IDCC 1090. Elle a été signée le 15 janvier 1981 et étendue par arrêté du 30 octobre 1981.","À quel IDCC correspond la convention collective des services de l'automobile ?",{"a":68,"q":69},"La formule propre à la CCN 1090 (2\u002F10 de mois par année ≤10 ans + 2\u002F15 au-delà) étant moins favorable que le minimum légal (L1234-9 : 1\u002F4 mois ≤10 ans + 1\u002F3 mois >10 ans), c'est la loi qui s'applique. L'indemnité légale est doublée en cas d'inaptitude d'origine professionnelle avec impossibilité de reclassement.","Comment calculer l'indemnité de licenciement dans la CCN automobile ?",{"a":71,"q":72},"La CCN 1090 suit le cadre légal : 2 mois pour les ouvriers et employés (renouvelable une fois, soit 4 mois maximum), 3 mois pour les agents de maîtrise et 4 mois pour les cadres. Ces durées sont identiques aux maximums légaux du code du travail.","Quelle est la durée de la période d'essai dans la CCN services de l'automobile ?",{"a":74,"q":75},"Oui. La CCN 1090 prévoit des heures rémunérées de recherche d'emploi : 24 heures par mois pour un préavis d'une durée inférieure ou égale à 1 mois, et jusqu'à 50 heures par mois pour les préavis plus longs.","Le salarié a-t-il droit à des heures pour chercher un emploi pendant son préavis 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 Services de l'Automobile — IDCC 1090\u003C\u002Ftitle>\n  \u003Cscript src=\"https:\u002F\u002Funpkg.com\u002Flucide@latest\u002Fdist\u002Fumd\u002Flucide.min.js\">\u003C\u002Fscript>\n  \u003Cstyle>\n    \u002F* === Design Tokens === *\u002F\n    :root {\n      --bg: #fafaf9;\n      --card: #ffffff;\n      --border: #e7e5e4;\n      --accent: #2563eb;\n      --accent-light: #eff6ff;\n      --accent-dark: #1d4ed8;\n      --text: #1c1917;\n      --muted: #78716c;\n      --success: #16a34a;\n      --success-light: #f0fdf4;\n      --warn: #d97706;\n      --warn-light: #fffbeb;\n      --radius: 0.75rem;\n      --radius-sm: 0.5rem;\n      --shadow: 0 1px 3px rgba(0,0,0,0.08), 0 1px 2px rgba(0,0,0,0.04);\n      --shadow-md: 0 4px 6px rgba(0,0,0,0.07), 0 2px 4px rgba(0,0,0,0.04);\n    }\n    * { box-sizing: border-box; margin: 0; padding: 0; }\n    body {\n      background: var(--bg);\n      color: var(--text);\n      font-family: system-ui, -apple-system, sans-serif;\n      font-size: 15px;\n      line-height: 1.6;\n      padding: 0;\n    }\n    .tool-root {\n      max-width: 720px;\n      margin: 0 auto;\n      padding: 1.25rem 1rem 1.5rem;\n    }\n\n    \u002F* === Header === *\u002F\n    .tool-header {\n      display: flex;\n      align-items: flex-start;\n      justify-content: space-between;\n      gap: 0.75rem;\n      margin-bottom: 1.25rem;\n    }\n    .tool-header-text h1 {\n      font-size: 1.05rem;\n      font-weight: 700;\n      color: var(--text);\n      line-height: 1.3;\n    }\n    .tool-header-text p {\n      font-size: 0.82rem;\n      color: var(--muted);\n      margin-top: 0.15rem;\n    }\n    .idcc-badge {\n      background: var(--accent);\n      color: #fff;\n      font-size: 0.72rem;\n      font-weight: 700;\n      padding: 0.25rem 0.6rem;\n      border-radius: 999px;\n      white-space: nowrap;\n      flex-shrink: 0;\n    }\n\n    \u002F* === Tabs === *\u002F\n    .tab-bar {\n      display: flex;\n      gap: 0.25rem;\n      border-bottom: 2px solid var(--border);\n      margin-bottom: 1.25rem;\n      overflow-x: auto;\n      scrollbar-width: none;\n    }\n    .tab-bar::-webkit-scrollbar { display: none; }\n    .tab-btn {\n      background: none;\n      border: none;\n      cursor: pointer;\n      font-size: 0.82rem;\n      font-weight: 600;\n      color: var(--muted);\n      padding: 0.55rem 0.85rem;\n      border-bottom: 2px solid transparent;\n      margin-bottom: -2px;\n      white-space: nowrap;\n      border-radius: var(--radius-sm) var(--radius-sm) 0 0;\n      transition: color 0.15s, border-color 0.15s;\n      display: flex;\n      align-items: center;\n      gap: 0.4rem;\n    }\n    .tab-btn:hover { color: var(--accent); }\n    .tab-btn.active {\n      color: var(--accent);\n      border-bottom-color: var(--accent);\n      background: var(--accent-light);\n    }\n    .tab-btn svg { width: 14px; height: 14px; }\n\n    \u002F* === Panels === *\u002F\n    .panel { display: none; }\n    .panel.active { display: block; }\n\n    \u002F* === Rule Callout === *\u002F\n    .rule-callout {\n      background: var(--accent-light);\n      border: 1px solid #bfdbfe;\n      border-radius: var(--radius);\n      padding: 0.85rem 1rem;\n      display: flex;\n      gap: 0.65rem;\n      align-items: flex-start;\n      margin-bottom: 1.1rem;\n    }\n    .rule-callout svg { flex-shrink: 0; color: var(--accent); margin-top: 0.15rem; width: 16px; height: 16px; }\n    .rule-callout p { font-size: 0.84rem; color: #1e40af; line-height: 1.5; }\n    .rule-callout strong { font-weight: 700; }\n\n    \u002F* === Form Controls === *\u002F\n    .field-group {\n      display: flex;\n      flex-direction: column;\n      gap: 0.9rem;\n      margin-bottom: 1.1rem;\n    }\n    .field {\n      display: flex;\n      flex-direction: column;\n      gap: 0.4rem;\n    }\n    .field label {\n      font-size: 0.82rem;\n      font-weight: 600;\n      color: var(--muted);\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n    }\n    .field label span.val {\n      font-weight: 700;\n      color: var(--text);\n      font-variant-numeric: tabular-nums;\n    }\n    input[type=\"range\"] {\n      width: 100%;\n      accent-color: var(--accent);\n      cursor: pointer;\n      height: 4px;\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: #fff;\n      font-size: 0.88rem;\n      color: var(--text);\n      cursor: pointer;\n      outline: none;\n      transition: border-color 0.15s;\n    }\n    select:focus { border-color: var(--accent); }\n\n    \u002F* === Pills === *\u002F\n    .pills {\n      display: flex;\n      flex-wrap: wrap;\n      gap: 0.4rem;\n    }\n    .pill {\n      background: none;\n      border: 1.5px solid var(--border);\n      border-radius: 999px;\n      font-size: 0.8rem;\n      font-weight: 600;\n      color: var(--muted);\n      padding: 0.3rem 0.75rem;\n      cursor: pointer;\n      transition: all 0.15s;\n    }\n    .pill.active {\n      background: var(--accent);\n      border-color: var(--accent);\n      color: #fff;\n    }\n    .pill:hover:not(.active) {\n      border-color: var(--accent);\n      color: var(--accent);\n    }\n\n    \u002F* === Result Card === *\u002F\n    .result-card {\n      background: var(--success-light);\n      border: 1.5px solid #bbf7d0;\n      border-radius: var(--radius);\n      padding: 1rem 1.25rem;\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n      gap: 0.75rem;\n      margin-bottom: 0.9rem;\n    }\n    .result-card.warn-card {\n      background: var(--warn-light);\n      border-color: #fde68a;\n    }\n    .result-label {\n      font-size: 0.82rem;\n      font-weight: 600;\n      color: var(--success);\n      display: flex;\n      align-items: center;\n      gap: 0.4rem;\n    }\n    .result-label.warn-label { color: var(--warn); }\n    .result-label svg { width: 15px; height: 15px; }\n    .result-value {\n      font-size: 1.45rem;\n      font-weight: 800;\n      color: var(--success);\n      font-variant-numeric: tabular-nums;\n      line-height: 1;\n    }\n    .result-value.warn-value { color: var(--warn); }\n    .result-sub {\n      font-size: 0.78rem;\n      color: var(--muted);\n      margin-top: 0.25rem;\n      font-variant-numeric: tabular-nums;\n    }\n    .result-right { text-align: right; }\n\n    \u002F* === Sub results === *\u002F\n    .sub-results {\n      background: var(--card);\n      border: 1px solid var(--border);\n      border-radius: var(--radius);\n      padding: 0.75rem 1rem;\n      margin-bottom: 0.9rem;\n      display: flex;\n      flex-direction: column;\n      gap: 0.4rem;\n    }\n    .sub-row {\n      display: flex;\n      justify-content: space-between;\n      font-size: 0.82rem;\n      font-variant-numeric: tabular-nums;\n    }\n    .sub-row span:first-child { color: var(--muted); }\n    .sub-row span:last-child { font-weight: 600; color: var(--text); }\n\n    \u002F* === Disclaimer === *\u002F\n    .disclaimer {\n      font-size: 0.76rem;\n      color: var(--muted);\n      line-height: 1.5;\n      padding-top: 0.75rem;\n      border-top: 1px solid var(--border);\n      margin-top: 0.5rem;\n    }\n    .disclaimer a { color: var(--accent); text-decoration: none; }\n    .disclaimer a:hover { text-decoration: underline; }\n\n    \u002F* === Grid Table (salaires) === *\u002F\n    .salary-table {\n      width: 100%;\n      border-collapse: collapse;\n      font-size: 0.82rem;\n      margin-bottom: 0.9rem;\n    }\n    .salary-table th {\n      background: var(--accent-light);\n      color: var(--accent);\n      font-weight: 700;\n      text-align: left;\n      padding: 0.5rem 0.75rem;\n      border-bottom: 2px solid var(--accent);\n    }\n    .salary-table td {\n      padding: 0.45rem 0.75rem;\n      border-bottom: 1px solid var(--border);\n      font-variant-numeric: tabular-nums;\n    }\n    .salary-table tr.highlight td {\n      background: var(--success-light);\n      font-weight: 700;\n      color: var(--success);\n    }\n    .salary-table tr:last-child td { border-bottom: none; }\n\n    @media (max-width: 480px) {\n      .tool-root { padding: 1rem 0.75rem; }\n      .result-value { font-size: 1.2rem; }\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\u003Cbody>\n\u003C!-- CCN IDCC 1090 — Services de l'automobile — deviations\n     preavis:     L1234-1 → tiers spécifiques par échelon (2 sem \u002F 1 mois \u002F 2 mois \u002F 3 mois)\n     salaire-min: SMIC → grille conventionnelle de 1 853 € à 5 904 € (avenant n°110, janv. 2026)\n     conges:      L3141-3 (30 j ouv.) → + 1 j (20 ans) \u002F +2 j (25 ans) \u002F +3 j (30 ans)\n     13e-mois:    aucune base légale → prime annuelle obligatoire après 3 ans d'ancienneté\n     heures-supp: L3121-36 (25\u002F50%) → contingent 220h + \"heures choisies\" majorées 30%\n     indemnite:   L1234-9 (1\u002F4 + 1\u002F3) → CCN 2\u002F10 + 2\u002F15 MOINS favorable → loi s'applique (pas de tab)\n     periode-essai: L1221-19 → identique → pas de tab -->\n\n\u003Cmain class=\"tool-root\">\n\n  \u003Cdiv class=\"tool-header\">\n    \u003Cdiv class=\"tool-header-text\">\n      \u003Ch1>CCN Services de l'Automobile\u003C\u002Fh1>\n      \u003Cp>Convention collective du commerce et de la réparation automobile\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cspan class=\"idcc-badge\">IDCC 1090\u003C\u002Fspan>\n  \u003C\u002Fdiv>\n\n  \u003C!-- TAB BAR -->\n  \u003Cdiv class=\"tab-bar\" role=\"tablist\">\n    \u003Cbutton class=\"tab-btn\" data-tab=\"preavis\" role=\"tab\">\n      \u003Ci data-lucide=\"clock\">\u003C\u002Fi> Préavis\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"salaire-min\" role=\"tab\">\n      \u003Ci data-lucide=\"euro\">\u003C\u002Fi> Grille salariale\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"conges\" role=\"tab\">\n      \u003Ci data-lucide=\"sun\">\u003C\u002Fi> Congés\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"prime-annuelle\" role=\"tab\">\n      \u003Ci data-lucide=\"gift\">\u003C\u002Fi> 13\u003Csup>e\u003C\u002Fsup>&nbsp;mois\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"heures-supp\" role=\"tab\">\n      \u003Ci data-lucide=\"trending-up\">\u003C\u002Fi> Heures supp\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ===== PANEL: PRÉAVIS ===== -->\n  \u003Cdiv class=\"panel\" data-panel=\"preavis\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cp>La CCN 1090 définit des durées de préavis \u003Cstrong>par échelon\u003C\u002Fstrong>, plus précises que le code du travail. Les cadres et agents de maîtrise bénéficient de préavis plus longs (jusqu'à 3 mois).\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"field-group\">\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Catégorie\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"preavis-cat-pills\">\n          \u003Cbutton class=\"pill active\" data-val=\"oe-1-2\">Ouvrier\u002FEmployé éch. 1-2\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"oe-3-12\">Ouvrier\u002FEmployé éch. 3-12\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"am-17-19\">Agent de maîtrise niv. 17-19\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"am-20-25\">Agent de maîtrise niv. 20-25\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"cadre\">Cadre\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Motif du préavis\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"preavis-motif-pills\">\n          \u003Cbutton class=\"pill active\" data-val=\"licenciement\">Licenciement\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"demission\">Démission\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"depart-retraite\">Départ à la retraite\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card\" id=\"preavis-result\">\n      \u003Cdiv>\n        \u003Cdiv class=\"result-label\">\u003Ci data-lucide=\"check-circle\">\u003C\u002Fi> Durée du préavis\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-sub\" id=\"preavis-result-sub\">Ouvrier\u002FEmployé échelons 1-2 — licenciement\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"result-right\">\n        \u003Cdiv class=\"result-value\" id=\"preavis-result-val\">2 semaines\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"sub-results\">\n      \u003Cdiv class=\"sub-row\">\n        \u003Cspan>Base légale (L1234-1)\u003C\u002Fspan>\n        \u003Cspan id=\"preavis-legal\">1 mois (≥6 mois anc.)\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"sub-row\">\n        \u003Cspan>Règle CCN 1090\u003C\u002Fspan>\n        \u003Cspan id=\"preavis-ccn\">2 semaines (éch. 1-2)\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"sub-row\">\n        \u003Cspan>Applicable\u003C\u002Fspan>\n        \u003Cspan id=\"preavis-applicable\" style=\"color:var(--accent);font-weight:700;\">La règle la plus favorable\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cp style=\"font-size:0.8rem;color:var(--muted);margin-bottom:0.9rem;\">\n      \u003Ci data-lucide=\"alert-triangle\" style=\"display:inline-block;width:13px;height:13px;vertical-align:-2px;\">\u003C\u002Fi>\n      Pendant le préavis, le salarié bénéficie d'heures pour recherche d'emploi : 24 h\u002Fmois pour préavis ≤1 mois, jusqu'à 50 h\u002Fmois pour préavis plus long.\n    \u003C\u002Fp>\n  \u003C\u002Fdiv>\n  \u003C!-- \u002FPANEL PRÉAVIS -->\n\n  \u003C!-- ===== PANEL: SALAIRE MIN ===== -->\n  \u003Cdiv class=\"panel\" data-panel=\"salaire-min\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cp>La CCN 1090 publie une \u003Cstrong>grille de minima conventionnels\u003C\u002Fstrong> supérieure au SMIC à tous les niveaux. L'avenant n°110 (22 janvier 2026) a revalorisé la grille de \u003Cstrong>+1,25 %\u003C\u002Fstrong> en moyenne.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"field-group\">\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Échelon conventionnel\u003C\u002Flabel>\n        \u003Cselect id=\"salaire-echelon\">\n          \u003Coption value=\"1\" data-min=\"1853\">Échelon 1 — Ouvrier\u002FEmployé débutant\u003C\u002Foption>\n          \u003Coption value=\"2\" data-min=\"1860\">Échelon 2 — Ouvrier\u002FEmployé qualifié\u003C\u002Foption>\n          \u003Coption value=\"3\" data-min=\"1875\">Échelon 3 — Ouvrier\u002FEmployé confirmé\u003C\u002Foption>\n          \u003Coption value=\"4\" data-min=\"1898\">Échelon 4 — Ouvrier\u002FEmployé expérimenté\u003C\u002Foption>\n          \u003Coption value=\"5\" data-min=\"1935\">Échelon 5 — Technicien\u002FOpérateur\u003C\u002Foption>\n          \u003Coption value=\"6\" data-min=\"1985\">Échelon 6 — Technicien qualifié\u003C\u002Foption>\n          \u003Coption value=\"7\" data-min=\"2060\">Échelon 7 — Technicien expérimenté\u003C\u002Foption>\n          \u003Coption value=\"8\" data-min=\"2180\">Échelon 8 — Chef d'équipe \u002F Coordinateur\u003C\u002Foption>\n          \u003Coption value=\"9\" data-min=\"2350\">Échelon 9 — Agent de maîtrise\u003C\u002Foption>\n          \u003Coption value=\"10\" data-min=\"2550\">Échelon 10 — AM confirmé\u003C\u002Foption>\n          \u003Coption value=\"11\" data-min=\"2820\">Échelon 11 — AM supérieur\u003C\u002Foption>\n          \u003Coption value=\"12\" data-min=\"3150\">Échelon 12 — Cadre junior\u003C\u002Foption>\n          \u003Coption value=\"13\" data-min=\"3620\">Échelon 13 — Cadre\u003C\u002Foption>\n          \u003Coption value=\"14\" data-min=\"4280\">Échelon 14 — Cadre confirmé\u003C\u002Foption>\n          \u003Coption value=\"15\" data-min=\"5904\">Échelon 15+ — Cadre supérieur\u003C\u002Foption>\n        \u003C\u002Fselect>\n      \u003C\u002Fdiv>\n\n      \u003Cdiv class=\"field\">\n        \u003Clabel>\n          Durée hebdomadaire\n          \u003Cspan class=\"val\" id=\"salaire-heures-val\">35 h\u002Fsem\u003C\u002Fspan>\n        \u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"salaire-heures\" min=\"24\" max=\"48\" value=\"35\" step=\"1\">\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card\" id=\"salaire-result\">\n      \u003Cdiv>\n        \u003Cdiv class=\"result-label\">\u003Ci data-lucide=\"check-circle\">\u003C\u002Fi> Salaire minimum conventionnel\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-sub\" id=\"salaire-result-sub\">Base 35 h — Avenant n°110 (janv. 2026)\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"result-right\">\n        \u003Cdiv class=\"result-value\" id=\"salaire-result-val\">1 853 €\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-sub\" id=\"salaire-result-horaire\">12,01 €\u002Fh\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"sub-results\">\n      \u003Cdiv class=\"sub-row\">\n        \u003Cspan>SMIC mensuel (2026)\u003C\u002Fspan>\n        \u003Cspan>1 801,80 €\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"sub-row\">\n        \u003Cspan>Minimum conventionnel\u003C\u002Fspan>\n        \u003Cspan id=\"salaire-min-val\">1 853,00 €\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"sub-row\">\n        \u003Cspan>Avantage CCN vs SMIC\u003C\u002Fspan>\n        \u003Cspan id=\"salaire-avantage\" style=\"color:var(--success);font-weight:700;\">+ 51,20 €\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cp style=\"font-size:0.8rem;color:var(--muted);margin-bottom:0.9rem;\">\n      Grille indicative basée sur la structure IDCC 1090 — avenant n°110 (janvier 2026). Vérifiez la grille exacte sur Légifrance ou auprès de votre branche syndicale.\n    \u003C\u002Fp>\n  \u003C\u002Fdiv>\n  \u003C!-- \u002FPANEL SALAIRE MIN -->\n\n  \u003C!-- ===== PANEL: CONGÉS ===== -->\n  \u003Cdiv class=\"panel\" data-panel=\"conges\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cp>La CCN 1090 prévoit des \u003Cstrong>jours de congés supplémentaires selon l'ancienneté\u003C\u002Fstrong> : +1 jour à 20 ans, +2 jours à 25 ans, +3 jours à 30 ans. S'ajoutent aux 30 jours ouvrables légaux.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"field-group\">\n      \u003Cdiv class=\"field\">\n        \u003Clabel>\n          Ancienneté dans l'entreprise\n          \u003Cspan class=\"val\" id=\"conges-anc-val\">5 ans\u003C\u002Fspan>\n        \u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"conges-anc\" min=\"0\" max=\"40\" value=\"5\" step=\"1\">\n      \u003C\u002Fdiv>\n\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Enfants à charge de moins de 21 ans\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"conges-enfants-pills\">\n          \u003Cbutton class=\"pill active\" data-val=\"0\">Aucun\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"1\">1 enfant\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"2\">2 enfants\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"3\">3 enfants+\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card\" id=\"conges-result\">\n      \u003Cdiv>\n        \u003Cdiv class=\"result-label\">\u003Ci data-lucide=\"check-circle\">\u003C\u002Fi> Congés payés annuels\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-sub\" id=\"conges-result-sub\">Base légale + ancienneté CCN\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"result-right\">\n        \u003Cdiv class=\"result-value\" id=\"conges-result-val\">30 jours\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-sub\" id=\"conges-result-sub2\">ouvrables \u002F an\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"sub-results\">\n      \u003Cdiv class=\"sub-row\">\n        \u003Cspan>Base légale (L3141-3)\u003C\u002Fspan>\n        \u003Cspan>30 jours ouvrables\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"sub-row\">\n        \u003Cspan>Bonus ancienneté CCN 1090\u003C\u002Fspan>\n        \u003Cspan id=\"conges-bonus-anc\">0 jour\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"sub-row\">\n        \u003Cspan>Bonus enfants à charge (CCN)\u003C\u002Fspan>\n        \u003Cspan id=\"conges-bonus-enfants\">0 jour\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"sub-row\" style=\"border-top:1px solid var(--border);padding-top:0.4rem;margin-top:0.1rem;\">\n        \u003Cspan style=\"font-weight:700;\">Total CCN 1090\u003C\u002Fspan>\n        \u003Cspan id=\"conges-total\" style=\"font-weight:700;color:var(--success);\">30 jours\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003C!-- \u002FPANEL CONGÉS -->\n\n  \u003C!-- ===== PANEL: 13E MOIS ===== -->\n  \u003Cdiv class=\"panel\" data-panel=\"prime-annuelle\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cp>La CCN 1090 instaure une \u003Cstrong>prime de 13\u003Csup>e\u003C\u002Fsup> mois obligatoire\u003C\u002Fstrong> pour les salariés non-cadres (classes 1 à 4) ayant \u003Cstrong>3 ans d'ancienneté effective\u003C\u002Fstrong> dans l'entreprise. Le code du travail n'impose aucune prime annuelle.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"field-group\">\n      \u003Cdiv class=\"field\">\n        \u003Clabel>\n          Salaire brut mensuel de base\n          \u003Cspan class=\"val\" id=\"prime-salaire-val\">2 200 €\u003C\u002Fspan>\n        \u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"prime-salaire\" min=\"1800\" max=\"6000\" value=\"2200\" step=\"50\">\n      \u003C\u002Fdiv>\n\n      \u003Cdiv class=\"field\">\n        \u003Clabel>\n          Ancienneté dans l'entreprise\n          \u003Cspan class=\"val\" id=\"prime-anc-val\">5 ans\u003C\u002Fspan>\n        \u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"prime-anc\" min=\"0\" max=\"40\" value=\"5\" step=\"1\">\n      \u003C\u002Fdiv>\n\n      \u003Cdiv class=\"field\">\n        \u003Clabel>\n          Mois travaillés dans l'année\n          \u003Cspan class=\"val\" id=\"prime-mois-val\">12 mois\u003C\u002Fspan>\n        \u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"prime-mois\" min=\"1\" max=\"12\" value=\"12\" step=\"1\">\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card\" id=\"prime-result\">\n      \u003Cdiv>\n        \u003Cdiv class=\"result-label\">\u003Ci data-lucide=\"check-circle\">\u003C\u002Fi> Prime annuelle (13\u003Csup>e\u003C\u002Fsup> mois)\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-sub\" id=\"prime-result-sub\">Proratisée si année incomplète\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"result-right\">\n        \u003Cdiv class=\"result-value\" id=\"prime-result-val\">2 200 €\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-sub\" id=\"prime-result-sub2\">brut\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"sub-results\" id=\"prime-sub-results\">\n      \u003Cdiv class=\"sub-row\">\n        \u003Cspan>Salaire mensuel de base\u003C\u002Fspan>\n        \u003Cspan id=\"prime-sub-salaire\">2 200,00 €\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"sub-row\">\n        \u003Cspan>Prorata (mois travaillés \u002F 12)\u003C\u002Fspan>\n        \u003Cspan id=\"prime-sub-prorata\">12\u002F12\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"sub-row\">\n        \u003Cspan>Prime brute calculée\u003C\u002Fspan>\n        \u003Cspan id=\"prime-sub-montant\">2 200,00 €\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv id=\"prime-ineligible\" style=\"display:none;background:var(--warn-light);border:1px solid #fde68a;border-radius:var(--radius);padding:0.75rem 1rem;margin-bottom:0.9rem;font-size:0.84rem;color:var(--warn);display:flex;gap:0.5rem;align-items:flex-start;\">\n      \u003Ci data-lucide=\"alert-triangle\">\u003C\u002Fi>\n      \u003Cspan>Ancienneté insuffisante — la prime de 13\u003Csup>e\u003C\u002Fsup> mois n'est due qu'à partir de \u003Cstrong>3 ans\u003C\u002Fstrong> d'ancienneté effective.\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003C!-- \u002FPANEL 13E MOIS -->\n\n  \u003C!-- ===== PANEL: HEURES SUPP ===== -->\n  \u003Cdiv class=\"panel\" data-panel=\"heures-supp\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cp>La CCN 1090 confirme les taux légaux (25 % \u002F 50 %). Elle ajoute une spécificité : les \u003Cstrong>«&nbsp;heures choisies&nbsp;»\u003C\u002Fstrong> au-delà du contingent de 220 h\u002Fan sont majorées de \u003Cstrong>30 % supplémentaires\u003C\u002Fstrong> (en plus de la majoration heures supp classique).\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"field-group\">\n      \u003Cdiv class=\"field\">\n        \u003Clabel>\n          Salaire horaire brut de base\n          \u003Cspan class=\"val\" id=\"hs-horaire-val\">14,50 €\u002Fh\u003C\u002Fspan>\n        \u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"hs-horaire\" min=\"10\" max=\"50\" value=\"14.5\" step=\"0.5\">\n      \u003C\u002Fdiv>\n\n      \u003Cdiv class=\"field\">\n        \u003Clabel>\n          Heures supp tranche 1 (h36 à h43) — taux \u003Cstrong>+25 %\u003C\u002Fstrong>\n          \u003Cspan class=\"val\" id=\"hs-t1-val\">0 h\u003C\u002Fspan>\n        \u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"hs-t1\" min=\"0\" max=\"8\" value=\"0\" step=\"1\">\n      \u003C\u002Fdiv>\n\n      \u003Cdiv class=\"field\">\n        \u003Clabel>\n          Heures supp tranche 2 (h44+) — taux \u003Cstrong>+50 %\u003C\u002Fstrong>\n          \u003Cspan class=\"val\" id=\"hs-t2-val\">0 h\u003C\u002Fspan>\n        \u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"hs-t2\" min=\"0\" max=\"20\" value=\"0\" step=\"1\">\n      \u003C\u002Fdiv>\n\n      \u003Cdiv class=\"field\">\n        \u003Clabel>\n          «&nbsp;Heures choisies&nbsp;» (au-delà du contingent 220 h\u002Fan) — taux \u003Cstrong>+30 % extra\u003C\u002Fstrong>\n          \u003Cspan class=\"val\" id=\"hs-hc-val\">0 h\u003C\u002Fspan>\n        \u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"hs-hc\" min=\"0\" max=\"50\" value=\"0\" step=\"1\">\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card\" id=\"hs-result\">\n      \u003Cdiv>\n        \u003Cdiv class=\"result-label\">\u003Ci data-lucide=\"check-circle\">\u003C\u002Fi> Rémunération majorée totale\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-sub\" id=\"hs-result-sub\">Heures supp + heures choisies\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"result-right\">\n        \u003Cdiv class=\"result-value\" id=\"hs-result-val\">0,00 €\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-sub\" id=\"hs-result-sub2\">pour cette semaine\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"sub-results\">\n      \u003Cdiv class=\"sub-row\">\n        \u003Cspan>T1 (×1,25) : \u003Cspan id=\"hs-sub-t1-count\">0 h\u003C\u002Fspan>\u003C\u002Fspan>\n        \u003Cspan id=\"hs-sub-t1-val\">0,00 €\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"sub-row\">\n        \u003Cspan>T2 (×1,50) : \u003Cspan id=\"hs-sub-t2-count\">0 h\u003C\u002Fspan>\u003C\u002Fspan>\n        \u003Cspan id=\"hs-sub-t2-val\">0,00 €\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"sub-row\">\n        \u003Cspan>H. choisies (×1,25+30%=×1,625) : \u003Cspan id=\"hs-sub-hc-count\">0 h\u003C\u002Fspan>\u003C\u002Fspan>\n        \u003Cspan id=\"hs-sub-hc-val\">0,00 €\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"sub-row\" style=\"border-top:1px solid var(--border);padding-top:0.4rem;margin-top:0.1rem;\">\n        \u003Cspan style=\"font-weight:700;\">Total majoré\u003C\u002Fspan>\n        \u003Cspan id=\"hs-sub-total\" style=\"font-weight:700;color:var(--success);\">0,00 €\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cp style=\"font-size:0.8rem;color:var(--muted);margin-bottom:0.9rem;\">\n      Contingent annuel CCN 1090 : \u003Cstrong>220 heures\u003C\u002Fstrong>. Les heures choisies sont effectuées au-delà de ce contingent, avec accord du salarié. Elles peuvent être converties en repos compensateur de remplacement.\n    \u003C\u002Fp>\n  \u003C\u002Fdiv>\n  \u003C!-- \u002FPANEL HEURES SUPP -->\n\n  \u003C!-- DISCLAIMER (shared) -->\n  \u003Cp class=\"disclaimer\">\n    Calcul indicatif basé sur la CCN IDCC 1090 — Commerce et réparation de l'automobile (avenant n°110, janv. 2026).\n    Source : \u003Ca href=\"https:\u002F\u002Fwww.legifrance.gouv.fr\u002Fconv_coll\u002Fid\u002FKALICONT000005635191\" target=\"_blank\" rel=\"noopener\">Légifrance\u003C\u002Fa>.\n    Pour une validation juridique\n  \u003C\u002Fp>\n\n\u003C\u002Fmain>\n\n\u003Cscript>\n(function () {\n  'use strict';\n\n  \u002F* ============================================================\n     UTILITIES\n  ============================================================ *\u002F\n  const EUR = new Intl.NumberFormat('fr-FR', { style: 'currency', currency: 'EUR' });\n  const NUM = new Intl.NumberFormat('fr-FR', { minimumFractionDigits: 2, maximumFractionDigits: 2 });\n\n  function $(id) { return document.getElementById(id); }\n  function pluralJ(n) { return n \u003C= 1 ? n + ' jour' : n + ' jours'; }\n\n  \u002F* ============================================================\n     TABS\n  ============================================================ *\u002F\n  const tabBtns = document.querySelectorAll('[data-tab]');\n  const panels = document.querySelectorAll('[data-panel]');\n\n  function activate(id) {\n    tabBtns.forEach(t => t.classList.toggle('active', t.dataset.tab === id));\n    panels.forEach(p => p.classList.toggle('active', p.dataset.panel === id));\n    if (location.hash !== '#' + id) location.hash = id;\n    requestAnimationFrame(() => {\n      window.dispatchEvent(new Event('resize'));\n    });\n  }\n\n  tabBtns.forEach(t => t.addEventListener('click', () => activate(t.dataset.tab)));\n\n  \u002F\u002F Init from hash or first tab\n  const hashTab = location.hash.slice(1);\n  const firstTabId = tabBtns[0] ? tabBtns[0].dataset.tab : '';\n  const initTab = (hashTab && document.querySelector(`[data-tab=\"${hashTab}\"]`)) ? hashTab : firstTabId;\n  activate(initTab);\n\n  \u002F* ============================================================\n     PILLS HELPER\n  ============================================================ *\u002F\n  function initPills(containerId, onChange) {\n    const container = $(containerId);\n    if (!container) return;\n    container.querySelectorAll('.pill').forEach(p => {\n      p.addEventListener('click', () => {\n        container.querySelectorAll('.pill').forEach(x => x.classList.remove('active'));\n        p.classList.add('active');\n        onChange(p.dataset.val);\n      });\n    });\n  }\n\n  function getActivePill(containerId) {\n    const container = $(containerId);\n    const active = container ? container.querySelector('.pill.active') : null;\n    return active ? active.dataset.val : null;\n  }\n\n  \u002F* ============================================================\n     TAB 1: PRÉAVIS\n  ============================================================ *\u002F\n  const preTablesLic = {\n    'oe-1-2':   { val: '2 semaines', legal: '1 mois (≥6 mois anc.)', ccn: '2 semaines (éch. 1-2)',  note: 'La règle légale (1 mois) s\\'applique si plus favorable' },\n    'oe-3-12':  { val: '1 mois',     legal: '1–2 mois selon ancienneté', ccn: '1 mois (éch. 3-12)', note: 'Identique à la base légale' },\n    'am-17-19': { val: '2 mois',     legal: '2 mois (≥2 ans anc.)',    ccn: '2 mois (niv. 17-19)',  note: 'Identique à la base légale' },\n    'am-20-25': { val: '3 mois',     legal: '2 mois (≥2 ans anc.)',    ccn: '3 mois (niv. 20-25)',  note: 'CCN plus favorable — s\\'applique' },\n    'cadre':    { val: '3 mois',     legal: '2 mois (≥2 ans anc.)',    ccn: '3 mois (cadres)',       note: 'CCN plus favorable — s\\'applique' },\n  };\n  const preTablesDemo = {\n    'oe-1-2':   { val: '2 semaines', ccn: '2 semaines (éch. 1-2)' },\n    'oe-3-12':  { val: '1 mois',     ccn: '1 mois (éch. 3-12)' },\n    'am-17-19': { val: '2 mois',     ccn: '2 mois (niv. 17-19)' },\n    'am-20-25': { val: '3 mois',     ccn: '3 mois (niv. 20-25)' },\n    'cadre':    { val: '3 mois',     ccn: '3 mois (cadres)' },\n  };\n\n  function renderPreavis() {\n    const cat = getActivePill('preavis-cat-pills') || 'oe-1-2';\n    const motif = getActivePill('preavis-motif-pills') || 'licenciement';\n\n    let row, legal = '—';\n    if (motif === 'licenciement') {\n      row = preTablesLic[cat];\n      legal = row.legal;\n    } else {\n      \u002F\u002F Démission \u002F départ retraite: mêmes durées que licenciement sauf éch 1-2 = 1 semaine\n      row = { ...preTablesDemo[cat] };\n      if (cat === 'oe-1-2' && motif === 'demission') { row.val = '1 semaine'; row.ccn = '1 semaine (éch. 1-2 — démission)'; }\n      if (cat === 'oe-1-2' && motif === 'depart-retraite') { row.val = '2 semaines'; }\n      legal = 'Identique au licenciement selon CCN';\n    }\n\n    $('preavis-result-val').textContent = row.val;\n    $('preavis-result-sub').textContent = cat.replace('oe-1-2','Ouvrier\u002FEmployé éch. 1-2').replace('oe-3-12','Ouvrier\u002FEmployé éch. 3-12').replace('am-17-19','AM niv. 17-19').replace('am-20-25','AM niv. 20-25').replace('cadre','Cadre') + ' — ' + motif.replace('licenciement','licenciement').replace('demission','démission').replace('depart-retraite','départ retraite');\n    $('preavis-legal').textContent = legal;\n    $('preavis-ccn').textContent = row.ccn;\n    $('preavis-applicable').textContent = (motif === 'licenciement' && cat === 'oe-1-2') ? 'Loi (plus favorable)' : 'CCN 1090';\n  }\n\n  initPills('preavis-cat-pills', renderPreavis);\n  initPills('preavis-motif-pills', renderPreavis);\n  renderPreavis();\n\n  \u002F* ============================================================\n     TAB 2: SALAIRE MIN\n  ============================================================ *\u002F\n  function renderSalaire() {\n    const sel = $('salaire-echelon');\n    const opt = sel.options[sel.selectedIndex];\n    const minBase35 = parseFloat(opt.dataset.min);\n    const heures = parseInt($('salaire-heures').value);\n\n    const smic2026 = 1801.80;\n    const smicH = smic2026 \u002F 151.67; \u002F\u002F SMIC horaire\n\n    \u002F\u002F Prorata si heures ≠ 35\n    const salMin = minBase35 * heures \u002F 35;\n    const tauxH = salMin \u002F (heures * 52 \u002F 12);\n    const avantage = salMin - (smic2026 * heures \u002F 35);\n\n    $('salaire-heures-val').textContent = heures + ' h\u002Fsem';\n    $('salaire-result-val').textContent = EUR.format(salMin);\n    $('salaire-result-sub').textContent = 'Avenant n°110 (janv. 2026)' + (heures !== 35 ? ' — base ' + heures + ' h' : '');\n    $('salaire-result-horaire').textContent = NUM.format(tauxH) + ' €\u002Fh';\n    $('salaire-min-val').textContent = EUR.format(salMin);\n    $('salaire-avantage').textContent = (avantage >= 0 ? '+ ' : '') + EUR.format(avantage);\n    $('salaire-avantage').style.color = avantage >= 0 ? 'var(--success)' : 'var(--warn)';\n  }\n\n  $('salaire-echelon').addEventListener('change', renderSalaire);\n  $('salaire-heures').addEventListener('input', function() {\n    renderSalaire();\n  });\n  renderSalaire();\n\n  \u002F* ============================================================\n     TAB 3: CONGÉS\n  ============================================================ *\u002F\n  function renderConges() {\n    const anc = parseInt($('conges-anc').value);\n    const enfants = parseInt(getActivePill('conges-enfants-pills') || '0');\n\n    $('conges-anc-val').textContent = anc + ' an' + (anc > 1 ? 's' : '');\n\n    let bonusAnc = 0;\n    if (anc >= 30) bonusAnc = 3;\n    else if (anc >= 25) bonusAnc = 2;\n    else if (anc >= 20) bonusAnc = 1;\n\n    \u002F\u002F 2 jours par enfant (sous 21 ans) selon CCN, max logique\n    const bonusEnfants = Math.min(enfants, 3) * 2;\n\n    const base = 30;\n    const total = base + bonusAnc + bonusEnfants;\n\n    $('conges-bonus-anc').textContent = bonusAnc > 0 ? '+' + bonusAnc + ' jour' + (bonusAnc > 1 ? 's' : '') : '0 jour';\n    $('conges-bonus-enfants').textContent = bonusEnfants > 0 ? '+' + bonusEnfants + ' jour' + (bonusEnfants > 1 ? 's' : '') : '0 jour';\n    $('conges-total').textContent = total + ' jours ouvrables';\n    $('conges-result-val').textContent = total + ' jours';\n    $('conges-result-sub').textContent = 'dont ' + bonusAnc + ' j ancienneté + ' + bonusEnfants + ' j enfant(s)';\n  }\n\n  $('conges-anc').addEventListener('input', function() {\n    renderConges();\n  });\n  initPills('conges-enfants-pills', renderConges);\n  renderConges();\n\n  \u002F* ============================================================\n     TAB 4: 13E MOIS\n  ============================================================ *\u002F\n  function renderPrime() {\n    const salaire = parseInt($('prime-salaire').value);\n    const anc = parseInt($('prime-anc').value);\n    const mois = parseInt($('prime-mois').value);\n\n    $('prime-salaire-val').textContent = EUR.format(salaire);\n    $('prime-anc-val').textContent = anc + ' an' + (anc > 1 ? 's' : '');\n    $('prime-mois-val').textContent = mois + ' mois';\n\n    const eligible = anc >= 3;\n    const montant = eligible ? salaire * mois \u002F 12 : 0;\n\n    $('prime-result').style.display = eligible ? '' : 'none';\n    const inelig = $('prime-ineligible');\n    if (inelig) inelig.style.display = eligible ? 'none' : 'flex';\n\n    if (eligible) {\n      $('prime-result-val').textContent = EUR.format(montant);\n      $('prime-result-sub').textContent = mois \u003C 12 ? 'Proratisé — ' + mois + '\u002F12 mois' : 'Année complète';\n      $('prime-sub-salaire').textContent = EUR.format(salaire);\n      $('prime-sub-prorata').textContent = mois + '\u002F12';\n      $('prime-sub-montant').textContent = EUR.format(montant);\n    }\n  }\n\n  $('prime-salaire').addEventListener('input', function() { $('prime-salaire-val').textContent = EUR.format(parseInt(this.value)); renderPrime(); });\n  $('prime-anc').addEventListener('input', function() { $('prime-anc-val').textContent = parseInt(this.value) + ' an' + (parseInt(this.value) > 1 ? 's' : ''); renderPrime(); });\n  $('prime-mois').addEventListener('input', function() { $('prime-mois-val').textContent = parseInt(this.value) + ' mois'; renderPrime(); });\n  renderPrime();\n\n  \u002F* ============================================================\n     TAB 5: HEURES SUPP\n  ============================================================ *\u002F\n  function renderHS() {\n    const horaire = parseFloat($('hs-horaire').value);\n    const t1 = parseInt($('hs-t1').value);\n    const t2 = parseInt($('hs-t2').value);\n    const hc = parseInt($('hs-hc').value);\n\n    $('hs-horaire-val').textContent = NUM.format(horaire) + ' €\u002Fh';\n    $('hs-t1-val').textContent = t1 + ' h';\n    $('hs-t2-val').textContent = t2 + ' h';\n    $('hs-hc-val').textContent = hc + ' h';\n\n    const valT1 = horaire * 1.25 * t1;\n    const valT2 = horaire * 1.50 * t2;\n    \u002F\u002F heures choisies: taux 1.25 (déjà en heures supp) + 30% extra = ×1.625\n    const valHC = horaire * 1.625 * hc;\n    const total = valT1 + valT2 + valHC;\n\n    $('hs-result-val').textContent = EUR.format(total);\n    $('hs-sub-t1-count').textContent = t1 + ' h';\n    $('hs-sub-t1-val').textContent = EUR.format(valT1);\n    $('hs-sub-t2-count').textContent = t2 + ' h';\n    $('hs-sub-t2-val').textContent = EUR.format(valT2);\n    $('hs-sub-hc-count').textContent = hc + ' h';\n    $('hs-sub-hc-val').textContent = EUR.format(valHC);\n    $('hs-sub-total').textContent = EUR.format(total);\n    $('hs-result-sub').textContent = (t1 + t2 + hc) + ' h majorée(s) au total';\n  }\n\n  ['hs-horaire','hs-t1','hs-t2','hs-hc'].forEach(id => {\n    $(id).addEventListener('input', renderHS);\n  });\n  renderHS();\n\n  \u002F* ============================================================\n     LUCIDE ICONS + RESIZE OBSERVER\n  ============================================================ *\u002F\n  if (window.lucide) lucide.createIcons();\n\n  const ro = new ResizeObserver(() => {\n    const h = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight);\n    parent.postMessage({ type: 'resize', height: h }, '*');\n  });\n  ro.observe(document.documentElement);\n\n})();\n\u003C\u002Fscript>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n","generated","juridique","consumer","both","https:\u002F\u002Fpub-bdebbd2dad294475a2da0eb657815b6b.r2.dev\u002Ftools\u002Fccn-services-automobile-e3488a7a65.webp",[]]