[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"footer-root-categories-fr-FR":3,"tool-content-ccn-negoce-et-de-distribution-de-combustibles-solides-fr":83,"footer-cities-fr":163},[4,14,22,30,38,45,53,60,67,75],{"seo_content":5,"id":8,"name":9,"slug":10,"parentId":7,"lang":11,"_count":12},[6],{"page_slug":7},null,"cmkzhl7xm00dbulbc93h4qog5","Juridique","avocats","fr-FR",{"experts":13},8,{"seo_content":15,"id":17,"name":18,"slug":19,"parentId":7,"lang":11,"_count":20},[16],{"page_slug":7},"cmkzhl84700djulbcbv6pzu9e","Informatique","informaticiens",{"experts":21},3,{"seo_content":23,"id":25,"name":26,"slug":27,"parentId":7,"lang":11,"_count":28},[24],{"page_slug":7},"cmkzhlaos00gnulbc07i9jrco","Amélioration de la Maison","artisans",{"experts":29},4,{"seo_content":31,"id":33,"name":34,"slug":35,"parentId":7,"lang":11,"_count":36},[32],{"page_slug":7},"cmkzhlaqg00gpulbcx38bwoc2","Général","divers-generalistes",{"experts":37},0,{"seo_content":39,"id":41,"name":42,"slug":43,"parentId":7,"lang":11,"_count":44},[40],{"page_slug":7},"cmkzhlbvq00i3ulbcutdbcz50","Électronique Grand Public","techniciens-electronique",{"experts":21},{"seo_content":46,"id":48,"name":49,"slug":50,"parentId":7,"lang":11,"_count":51},[47],{"page_slug":7},"cmkzhlcaw00ilulbc38pxoogr","Santé","medecins",{"experts":52},5,{"seo_content":54,"id":56,"name":57,"slug":58,"parentId":7,"lang":11,"_count":59},[55],{"page_slug":7},"cmkzhlcmi00izulbcxva1m47f","Gestion de Patrimoine","conseillers-patrimoniaux",{"experts":21},{"seo_content":61,"id":63,"name":64,"slug":65,"parentId":7,"lang":11,"_count":66},[62],{"page_slug":7},"cmkzhldcv00jvulbcmcd5a7mk","Animaux et Vétérinaires","veterinaires",{"experts":21},{"seo_content":68,"id":70,"name":71,"slug":72,"parentId":7,"lang":11,"_count":73},[69],{"page_slug":7},"cmkzhldrr00kdulbchxfo67eg","Mécanique et Réparation","mecaniciens",{"experts":74},1,{"seo_content":76,"id":78,"name":79,"slug":80,"parentId":7,"lang":11,"_count":81},[77],{"page_slug":7},"cmkzhl9l300fbulbcv3i8q8p3","Aide aux Devoirs","professeurs-particuliers",{"experts":82},6,{"slug":84,"title":85,"page_title":86,"description":87,"content_md":88,"local_slug":84,"json_ld":89,"faq":126,"tool_html":156,"source":157,"category":158,"audience":159,"publish_mode":160,"hero_image":161,"hero_image_alt":162},"ccn-negoce-et-de-distribution-de-combustibles-solides","CCN du négoce et de distribution de combustibles solides, liquides, gazeux, produits — calculateur complet","Calculateur CCN Négoce et Distribution Combustibles IDCC 1408 | Expert Zoom","Outil interactif couvrant indemnité de licenciement, préavis, grille salariale, prime d'ancienneté et congés de la CCN négoce et distribution de combustibles (IDCC 1408).","Ce calculateur couvre les 5 principales dérogations de la CCN IDCC 1408 (Négoce et Distribution de Combustibles) : indemnité de licenciement avec plafonds par catégorie (8\u002F10\u002F15 mois), préavis conventionnel (1 à 2 mois selon ancienneté), grille de salaires minima par coefficient (200 à 460), prime d'ancienneté progressive (3 % à 15 %) et jours de congés supplémentaires selon l'ancienneté.",[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 Négoce et Distribution de Combustibles — IDCC 1408","WebApplication",{"name":94,"@type":95,"identifier":96},"Convention collective du négoce et de la distribution de combustibles solides, liquides, gazeux et produits pétroliers","Thing","IDCC 1408",{"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, la prime d'ancienneté et les congés payés de la convention collective du négoce et de la distribution de combustibles solides, liquides, gazeux et produits pétroliers (IDCC 1408).","All","FinanceApplication",true,{"@type":110,"@context":100,"mainEntity":111},"FAQPage",[112,118,122],{"name":113,"@type":114,"acceptedAnswer":115},"Comment calculer l'indemnité de licenciement dans la CCN IDCC 1408 ?","Question",{"text":116,"@type":117},"La CCN IDCC 1408 applique la formule légale (1\u002F4 de mois par année ≤ 10 ans, 1\u002F3 au-delà), plafonnée à 8 mois pour les ouvriers\u002Femployés, 10 mois pour les TAM et 15 mois pour les cadres.","Answer",{"name":119,"@type":114,"acceptedAnswer":120},"Quelle est la durée du préavis dans la CCN combustibles IDCC 1408 ?",{"text":121,"@type":117},"1 mois pour les non-cadres avec moins de 2 ans d'ancienneté, 2 mois à partir de 2 ans. Les cadres bénéficient de 3 mois. Le salarié licencié dispose de 2 heures par jour pour rechercher un emploi.",{"name":123,"@type":114,"acceptedAnswer":124},"La CCN négoce combustibles prévoit-elle une prime d'ancienneté ?",{"text":125,"@type":117},"Oui, une prime progressive de 3 % à 3 ans jusqu'à 15 % à partir de 15 ans d'ancienneté, calculée sur le salaire minimum conventionnel garanti.",[127,130,132,135,138,141,144,147,150,153],{"a":128,"q":129},"La CCN du négoce et de la distribution de combustibles (IDCC 1408) applique la formule légale (1\u002F4 de mois de salaire par année d'ancienneté pour les 10 premières années, puis 1\u002F3 au-delà), dans la limite de plafonds conventionnels : 8 mois pour les ouvriers et employés, 10 mois pour les TAM et 15 mois pour les cadres.","Comment calculer l'indemnité de licenciement dans la convention collective IDCC 1408 ?",{"a":131,"q":119},"Pour les non-cadres, le préavis est de 1 mois si l'ancienneté est inférieure à 2 ans, et de 2 mois à partir de 2 ans d'ancienneté. Les cadres bénéficient généralement d'un préavis de 3 mois. En cas de licenciement, le salarié a droit à 2 heures par jour pour rechercher un emploi, cumulables en demi-journées.",{"a":133,"q":134},"La grille de salaires de la CCN IDCC 1408, revalorisée en mai 2025 (+2 %), s'étend du coefficient 200 (1 852,12 € brut\u002Fmois) au coefficient 460 (7 522,62 € brut\u002Fmois) pour 35 heures par semaine. Tous les salariés dont le coefficient est 200 ou plus doivent percevoir au minimum ces montants conventionnels.","Quels sont les salaires minimums dans la grille salariale CCN 1408 (2025) ?",{"a":136,"q":137},"Oui. La CCN IDCC 1408 prévoit une prime d'ancienneté progressive calculée sur le salaire minimum conventionnel garanti : 3 % à partir de 3 ans, 6 % à 6 ans, 9 % à 9 ans, 10 % à 10 ans et 15 % à partir de 15 ans d'ancienneté. Elle s'applique aux ouvriers, employés, techniciens et agents de maîtrise.","La CCN négoce et distribution combustibles prévoit-elle une prime d'ancienneté ?",{"a":139,"q":140},"La convention collective IDCC 1408 ne prévoit pas de 13ème mois obligatoire. Cependant, des accords d'entreprise ou usages internes peuvent instituer une prime annuelle dans certaines sociétés du secteur.","La CCN IDCC 1408 prévoit-elle un 13ème mois ?",{"a":142,"q":143},"Outre les 30 jours ouvrables légaux, la CCN octroie des jours supplémentaires selon l'ancienneté et la catégorie. Pour les ouvriers et employés : +1 jour à 10 ans, +2 jours à 20 ans, +3 jours à 25 ans. Pour les TAM : +1 jour à 10 ans, +2 jours à 15 ans, +3 jours à 20 ans. Les cadres bénéficient de +3 jours dès la première année.","Combien de jours de congés payés dans la CCN combustibles IDCC 1408 ?",{"a":145,"q":146},"Les majorations d'heures supplémentaires dans la CCN IDCC 1408 suivent le taux légal : +25 % pour les 8 premières heures supplémentaires et +50 % au-delà. La CCN prévoit également la possibilité de remplacer le paiement des heures supplémentaires par un repos compensateur équivalent, à prendre dans les 2 mois suivants.","Comment sont majorées les heures supplémentaires dans la CCN IDCC 1408 ?",{"a":148,"q":149},"La prime d'ancienneté démarre à partir de 3 ans d'ancienneté au taux de 3 % du salaire minimum conventionnel garanti. Elle augmente ensuite progressivement : 6 % à 6 ans, 9 % à 9 ans, 10 % à 10 ans et atteint son niveau maximum de 15 % à partir de 15 ans d'ancienneté.","À partir de quelle ancienneté la prime d'ancienneté commence-t-elle dans la CCN 1408 ?",{"a":151,"q":152},"La CCN IDCC 1408 fixe des durées de période d'essai selon la catégorie professionnelle : généralement 1 mois pour les ouvriers et employés (renouvelable une fois), 2 mois pour les techniciens et agents de maîtrise, et 3 mois pour les cadres. Ces durées restent dans les limites légales du code du travail.","Quelle est la période d'essai dans la CCN négoce et distribution de combustibles ?",{"a":154,"q":155},"Le plafond conventionnel peut être limitatif pour les salariés avec une très longue ancienneté et un salaire élevé, car la formule légale sans plafond donnerait un montant plus important dans ces cas. Pour les salariés dont l'ancienneté et le salaire sont modérés, le plafond n'est pas atteint et l'indemnité est identique au minimum légal.","Le plafond d'indemnité de licenciement dans la CCN 1408 est-il favorable au salarié ?","\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 Négoce et Distribution de Combustibles — IDCC 1408\u003C\u002Ftitle>\n  \u003Cscript src=\"https:\u002F\u002Funpkg.com\u002Flucide@latest\u002Fdist\u002Fumd\u002Flucide.min.js\">\u003C\u002Fscript>\n  \u003Cstyle>\n    *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n\n    :root {\n      --bg: #fafaf9;\n      --surface: #ffffff;\n      --border: #e7e5e4;\n      --text: #1c1917;\n      --muted: #78716c;\n      --accent: #2563eb;\n      --accent-light: #eff6ff;\n      --accent-hover: #1d4ed8;\n      --success: #16a34a;\n      --success-light: #f0fdf4;\n      --warning: #d97706;\n      --warning-light: #fffbeb;\n      --radius: 0.75rem;\n      --radius-sm: 0.5rem;\n    }\n\n    body {\n      font-family: system-ui, -apple-system, sans-serif;\n      background: var(--bg);\n      color: var(--text);\n      font-size: 15px;\n      line-height: 1.5;\n    }\n\n    .tool-root {\n      max-width: 720px;\n      margin: 0 auto;\n      padding: 1.5rem 1rem 2rem;\n    }\n\n    .tool-header {\n      margin-bottom: 1.5rem;\n    }\n\n    .tool-header h1 {\n      font-size: 1.2rem;\n      font-weight: 700;\n      color: var(--text);\n      line-height: 1.3;\n    }\n\n    .idcc-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.6rem;\n      border-radius: 99px;\n      margin-top: 0.4rem;\n    }\n\n    \u002F* Tabs *\u002F\n    .tabs-nav {\n      display: flex;\n      gap: 0.25rem;\n      border-bottom: 2px solid var(--border);\n      margin-bottom: 1.5rem;\n      flex-wrap: wrap;\n    }\n\n    .tab-btn {\n      display: flex;\n      align-items: center;\n      gap: 0.35rem;\n      padding: 0.6rem 0.9rem;\n      border: none;\n      background: transparent;\n      color: var(--muted);\n      font-size: 0.85rem;\n      font-weight: 500;\n      cursor: pointer;\n      border-bottom: 2px solid transparent;\n      margin-bottom: -2px;\n      border-radius: var(--radius-sm) var(--radius-sm) 0 0;\n      transition: color 0.15s, border-color 0.15s;\n      white-space: nowrap;\n    }\n\n    .tab-btn:hover { color: var(--accent); background: var(--accent-light); }\n    .tab-btn.active { color: var(--accent); border-bottom-color: var(--accent); font-weight: 600; }\n    .tab-btn svg { width: 15px; height: 15px; }\n\n    \u002F* Panels *\u002F\n    .tab-panel { display: none; }\n    .tab-panel.active { display: block; }\n\n    \u002F* Rule callout *\u002F\n    .rule-callout {\n      display: flex;\n      align-items: flex-start;\n      gap: 0.75rem;\n      background: var(--accent-light);\n      border: 1px solid #bfdbfe;\n      border-radius: var(--radius);\n      padding: 0.9rem 1rem;\n      margin-bottom: 1.25rem;\n    }\n\n    .rule-callout svg { width: 18px; height: 18px; color: var(--accent); flex-shrink: 0; margin-top: 1px; }\n    .rule-callout p { font-size: 0.85rem; color: #1e40af; line-height: 1.5; }\n    .rule-callout strong { color: #1d4ed8; }\n\n    \u002F* Form elements *\u002F\n    .form-grid {\n      display: grid;\n      gap: 1rem;\n      margin-bottom: 1.25rem;\n    }\n\n    .form-group label {\n      display: block;\n      font-size: 0.82rem;\n      font-weight: 600;\n      color: var(--muted);\n      margin-bottom: 0.35rem;\n      text-transform: uppercase;\n      letter-spacing: 0.03em;\n    }\n\n    .slider-row {\n      display: flex;\n      align-items: center;\n      gap: 0.75rem;\n    }\n\n    input[type=\"range\"] {\n      flex: 1;\n      accent-color: var(--accent);\n      height: 4px;\n      cursor: pointer;\n    }\n\n    .slider-val {\n      font-size: 0.9rem;\n      font-weight: 700;\n      color: var(--accent);\n      min-width: 6rem;\n      text-align: right;\n      font-variant-numeric: tabular-nums;\n    }\n\n    select {\n      width: 100%;\n      padding: 0.55rem 0.8rem;\n      border: 1.5px solid var(--border);\n      border-radius: var(--radius-sm);\n      font-size: 0.9rem;\n      background: var(--surface);\n      color: var(--text);\n      cursor: pointer;\n      appearance: none;\n      background-image: url(\"data:image\u002Fsvg+xml,%3Csvg xmlns='http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg' width='12' height='12' 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.75rem center;\n      padding-right: 2.2rem;\n    }\n\n    \u002F* Pills *\u002F\n    .pills {\n      display: flex;\n      flex-wrap: wrap;\n      gap: 0.4rem;\n    }\n\n    .pill {\n      padding: 0.35rem 0.8rem;\n      border: 1.5px solid var(--border);\n      border-radius: 99px;\n      font-size: 0.82rem;\n      cursor: pointer;\n      background: var(--surface);\n      color: var(--muted);\n      transition: all 0.15s;\n      user-select: none;\n    }\n\n    .pill:hover { border-color: var(--accent); color: var(--accent); }\n    .pill.selected { background: var(--accent); border-color: var(--accent); color: #fff; font-weight: 600; }\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: 1.1rem 1.25rem;\n      margin-top: 1.25rem;\n    }\n\n    .result-label {\n      font-size: 0.78rem;\n      font-weight: 600;\n      color: var(--success);\n      text-transform: uppercase;\n      letter-spacing: 0.05em;\n      margin-bottom: 0.3rem;\n    }\n\n    .result-value {\n      font-size: 1.8rem;\n      font-weight: 800;\n      color: var(--text);\n      font-variant-numeric: tabular-nums;\n      letter-spacing: -0.02em;\n    }\n\n    .result-sub {\n      font-size: 0.8rem;\n      color: var(--muted);\n      margin-top: 0.3rem;\n    }\n\n    .result-detail {\n      margin-top: 0.8rem;\n      padding-top: 0.8rem;\n      border-top: 1px solid #86efac;\n      font-size: 0.82rem;\n      color: #166534;\n      line-height: 1.6;\n    }\n\n    \u002F* Salary grid table *\u002F\n    .salary-table {\n      width: 100%;\n      border-collapse: collapse;\n      font-size: 0.82rem;\n      margin-bottom: 1rem;\n    }\n    .salary-table th {\n      background: var(--accent-light);\n      color: var(--accent);\n      font-weight: 600;\n      padding: 0.5rem 0.75rem;\n      text-align: left;\n      border-bottom: 2px solid #bfdbfe;\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(--accent-light);\n      font-weight: 600;\n      color: var(--accent);\n    }\n\n    \u002F* Disclaimer *\u002F\n    .disclaimer {\n      margin-top: 2rem;\n      padding-top: 1rem;\n      border-top: 1px solid var(--border);\n      font-size: 0.75rem;\n      color: var(--muted);\n      line-height: 1.6;\n    }\n    .disclaimer a { color: var(--accent); text-decoration: none; }\n    .disclaimer a:hover { text-decoration: underline; }\n\n    .hidden { display: none !important; }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\u003Cbody>\n\n\u003C!-- CCN IDCC 1408 — deviations\n     indemnite: L1234-9 → caps par catégorie (8 mois ouvriers, 10 mois TAM, 15 mois cadres) — source Légifrance KALITEXT000005643589\n     preavis: L1234-1 → 1 mois (\u003C2 ans ancienneté), 2 mois (≥2 ans) — source CCN art. sur préavis\n     salaire-min: SMIC → grille coefficients 200-460, avenant mai 2025 (KALITEXT000047747587)\n     prime-anciennete: aucun légal → 3% à 3 ans, 6% à 6 ans, 9% à 9 ans, 10% à 10 ans, 15% à 15 ans\n     conges: L3141-3 (30j) → +1 jour (10 ans), +2 jours (20 ans), +3 jours (25 ans) pour ouvriers\u002Femployés ; cadres +3 dès 1 an\n-->\n\n\u003Cmain class=\"tool-root\">\n  \u003Cdiv class=\"tool-header\">\n    \u003Ch1>Calculateur — CCN Négoce et Distribution de Combustibles\u003C\u002Fh1>\n    \u003Cdiv class=\"idcc-badge\">\n      \u003Ci data-lucide=\"tag\">\u003C\u002Fi>\n      IDCC 1408\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- Tabs navigation -->\n  \u003Cnav class=\"tabs-nav\" role=\"tablist\">\n    \u003Cbutton class=\"tab-btn\" data-tab=\"indemnite\" role=\"tab\">\n      \u003Ci data-lucide=\"banknote\">\u003C\u002Fi> Indemnité\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"preavis\" role=\"tab\">\n      \u003Ci data-lucide=\"clock\">\u003C\u002Fi> Préavis\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"salaire-min\" role=\"tab\">\n      \u003Ci data-lucide=\"bar-chart-2\">\u003C\u002Fi> Grille salariale\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"prime-anciennete\" role=\"tab\">\n      \u003Ci data-lucide=\"trending-up\">\u003C\u002Fi> Ancienneté\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"conges\" role=\"tab\">\n      \u003Ci data-lucide=\"calendar\">\u003C\u002Fi> Congés\n    \u003C\u002Fbutton>\n  \u003C\u002Fnav>\n\n  \u003C!-- ═══════════════ TAB: INDEMNITÉ ═══════════════ -->\n  \u003Cdiv class=\"tab-panel\" data-panel=\"indemnite\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cp>La CCN IDCC 1408 prévoit des plafonds d'indemnité selon la catégorie : \u003Cstrong>8 mois\u003C\u002Fstrong> pour ouvriers\u002Femployés, \u003Cstrong>10 mois\u003C\u002Fstrong> pour TAM, \u003Cstrong>15 mois\u003C\u002Fstrong> pour cadres. La formule suit le code du travail (1\u002F4 mois × années ≤ 10 ans + 1\u002F3 mois × années > 10 ans) dans la limite de ces plafonds.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-grid\">\n      \u003Cdiv class=\"form-group\">\n        \u003Clabel>Salaire brut mensuel de référence\u003C\u002Flabel>\n        \u003Cdiv class=\"slider-row\">\n          \u003Cinput type=\"range\" id=\"ind-salaire\" min=\"1500\" max=\"8000\" step=\"50\" value=\"2500\">\n          \u003Cspan class=\"slider-val\" id=\"ind-salaire-val\">2 500 €\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n\n      \u003Cdiv class=\"form-group\">\n        \u003Clabel>Ancienneté (années complètes)\u003C\u002Flabel>\n        \u003Cdiv class=\"slider-row\">\n          \u003Cinput type=\"range\" id=\"ind-anciennete\" min=\"1\" max=\"35\" step=\"1\" value=\"8\">\n          \u003Cspan class=\"slider-val\" id=\"ind-anciennete-val\">8 ans\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n\n      \u003Cdiv class=\"form-group\">\n        \u003Clabel>Catégorie professionnelle\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"ind-categorie\">\n          \u003Cspan class=\"pill selected\" data-val=\"employe\">Ouvrier \u002F Employé\u003C\u002Fspan>\n          \u003Cspan class=\"pill\" data-val=\"tam\">TAM\u003C\u002Fspan>\n          \u003Cspan class=\"pill\" data-val=\"cadre\">Cadre\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card\" id=\"ind-result\">\n      \u003Cdiv class=\"result-label\">Indemnité de licenciement\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"ind-montant\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"ind-sub\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-detail\" id=\"ind-detail\">—\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ═══════════════ TAB: PRÉAVIS ═══════════════ -->\n  \u003Cdiv class=\"tab-panel\" data-panel=\"preavis\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cp>La CCN prévoit un préavis de \u003Cstrong>1 mois\u003C\u002Fstrong> pour les salariés ayant moins de 2 ans d'ancienneté et \u003Cstrong>2 mois\u003C\u002Fstrong> pour ceux ayant 2 ans ou plus. Durant ce délai, les salariés disposent de \u003Cstrong>2 heures par jour\u003C\u002Fstrong> pour rechercher un emploi (cumulables en demi-journées).\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-grid\">\n      \u003Cdiv class=\"form-group\">\n        \u003Clabel>Ancienneté (années complètes)\u003C\u002Flabel>\n        \u003Cdiv class=\"slider-row\">\n          \u003Cinput type=\"range\" id=\"pre-anciennete\" min=\"0\" max=\"30\" step=\"1\" value=\"3\">\n          \u003Cspan class=\"slider-val\" id=\"pre-anciennete-val\">3 ans\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n\n      \u003Cdiv class=\"form-group\">\n        \u003Clabel>Statut\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"pre-statut\">\n          \u003Cspan class=\"pill selected\" data-val=\"non-cadre\">Non-cadre\u003C\u002Fspan>\n          \u003Cspan class=\"pill\" data-val=\"cadre\">Cadre\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n\n      \u003Cdiv class=\"form-group\">\n        \u003Clabel>Sens du préavis\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"pre-sens\">\n          \u003Cspan class=\"pill selected\" data-val=\"licenciement\">Licenciement\u003C\u002Fspan>\n          \u003Cspan class=\"pill\" data-val=\"demission\">Démission\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card\" id=\"pre-result\">\n      \u003Cdiv class=\"result-label\">Durée du préavis\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"pre-duree\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"pre-sub\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-detail\" id=\"pre-detail\">—\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ═══════════════ TAB: SALAIRE MINIMUM ═══════════════ -->\n  \u003Cdiv class=\"tab-panel\" data-panel=\"salaire-min\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cp>La CCN publie une grille de salaires minima conventionnels par coefficient (200 à 460). L'avenant de mai 2025 a revalorisé la grille de \u003Cstrong>+2 % en moyenne\u003C\u002Fstrong>. Ces minima s'appliquent pour \u003Cstrong>35 h\u002Fsemaine\u003C\u002Fstrong> et se substituent au SMIC si supérieurs.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-grid\">\n      \u003Cdiv class=\"form-group\">\n        \u003Clabel>Coefficient conventionnel\u003C\u002Flabel>\n        \u003Cselect id=\"sal-coeff\">\n          \u003Coption value=\"200\">200 — Ouvriers\u002FEmployés niveau 1\u003C\u002Foption>\n          \u003Coption value=\"210\">210 — Ouvriers\u002FEmployés niveau 2\u003C\u002Foption>\n          \u003Coption value=\"220\">220 — Ouvriers\u002FEmployés niveau 3\u003C\u002Foption>\n          \u003Coption value=\"230\">230 — Ouvriers\u002FEmployés niveau 4\u003C\u002Foption>\n          \u003Coption value=\"240\">240 — Ouvriers\u002FEmployés niveau 5\u003C\u002Foption>\n          \u003Coption value=\"250\">250 — Ouvriers\u002FEmployés niveau 6\u003C\u002Foption>\n          \u003Coption value=\"300\">300 — TAM niveau 1\u003C\u002Foption>\n          \u003Coption value=\"310\">310 — TAM niveau 2\u003C\u002Foption>\n          \u003Coption value=\"320\" selected>320 — TAM niveau 3\u003C\u002Foption>\n          \u003Coption value=\"400\">400 — Cadres niveau 1\u003C\u002Foption>\n          \u003Coption value=\"410\">410 — Cadres niveau 2\u003C\u002Foption>\n          \u003Coption value=\"420\">420 — Cadres niveau 3\u003C\u002Foption>\n          \u003Coption value=\"430\">430 — Cadres niveau 4\u003C\u002Foption>\n          \u003Coption value=\"440\">440 — Cadres niveau 5\u003C\u002Foption>\n          \u003Coption value=\"450\">450 — Cadres niveau 6\u003C\u002Foption>\n          \u003Coption value=\"460\">460 — Cadres niveau 7\u003C\u002Foption>\n        \u003C\u002Fselect>\n      \u003C\u002Fdiv>\n\n      \u003Cdiv class=\"form-group\">\n        \u003Clabel>Heures hebdomadaires\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"sal-heures\">\n          \u003Cspan class=\"pill selected\" data-val=\"35\">35 h\u003C\u002Fspan>\n          \u003Cspan class=\"pill\" data-val=\"39\">39 h\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card\" id=\"sal-result\">\n      \u003Cdiv class=\"result-label\">Salaire minimum conventionnel\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"sal-montant\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"sal-sub\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-detail\" id=\"sal-detail\">—\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdetails style=\"margin-top:1rem;\">\n      \u003Csummary style=\"font-size:0.82rem;font-weight:600;color:var(--accent);cursor:pointer;padding:0.5rem 0;\">Voir toute la grille salariale (avenant mai 2025)\u003C\u002Fsummary>\n      \u003Ctable class=\"salary-table\">\n        \u003Cthead>\n          \u003Ctr>\u003Cth>Coefficient\u003C\u002Fth>\u003Cth>Catégorie\u003C\u002Fth>\u003Cth>Salaire mensuel brut (35h)\u003C\u002Fth>\u003C\u002Ftr>\n        \u003C\u002Fthead>\n        \u003Ctbody>\n          \u003Ctr>\u003Ctd>200\u003C\u002Ftd>\u003Ctd>Ouvriers\u002FEmployés N1\u003C\u002Ftd>\u003Ctd>1 852,12 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>210\u003C\u002Ftd>\u003Ctd>Ouvriers\u002FEmployés N2\u003C\u002Ftd>\u003Ctd>1 858,37 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>220\u003C\u002Ftd>\u003Ctd>Ouvriers\u002FEmployés N3\u003C\u002Ftd>\u003Ctd>1 867,80 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>230\u003C\u002Ftd>\u003Ctd>Ouvriers\u002FEmployés N4\u003C\u002Ftd>\u003Ctd>1 882,42 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>240\u003C\u002Ftd>\u003Ctd>Ouvriers\u002FEmployés N5\u003C\u002Ftd>\u003Ctd>1 911,42 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>250\u003C\u002Ftd>\u003Ctd>Ouvriers\u002FEmployés N6\u003C\u002Ftd>\u003Ctd>1 989,36 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>300\u003C\u002Ftd>\u003Ctd>TAM N1\u003C\u002Ftd>\u003Ctd>2 145,22 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>310\u003C\u002Ftd>\u003Ctd>TAM N2\u003C\u002Ftd>\u003Ctd>2 456,96 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>320\u003C\u002Ftd>\u003Ctd>TAM N3\u003C\u002Ftd>\u003Ctd>2 768,68 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>400\u003C\u002Ftd>\u003Ctd>Cadres N1\u003C\u002Ftd>\u003Ctd>2 846,62 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>410\u003C\u002Ftd>\u003Ctd>Cadres N2\u003C\u002Ftd>\u003Ctd>3 158,36 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>420\u003C\u002Ftd>\u003Ctd>Cadres N3\u003C\u002Ftd>\u003Ctd>3 781,82 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>430\u003C\u002Ftd>\u003Ctd>Cadres N4\u003C\u002Ftd>\u003Ctd>4 405,29 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>440\u003C\u002Ftd>\u003Ctd>Cadres N5\u003C\u002Ftd>\u003Ctd>5 184,63 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>450\u003C\u002Ftd>\u003Ctd>Cadres N6\u003C\u002Ftd>\u003Ctd>6 119,83 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>460\u003C\u002Ftd>\u003Ctd>Cadres N7\u003C\u002Ftd>\u003Ctd>7 522,62 €\u003C\u002Ftd>\u003C\u002Ftr>\n        \u003C\u002Ftbody>\n      \u003C\u002Ftable>\n    \u003C\u002Fdetails>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ═══════════════ TAB: PRIME D'ANCIENNETÉ ═══════════════ -->\n  \u003Cdiv class=\"tab-panel\" data-panel=\"prime-anciennete\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cp>La CCN IDCC 1408 prévoit une prime d'ancienneté progressive calculée sur le \u003Cstrong>salaire minimum conventionnel garanti\u003C\u002Fstrong> : \u003Cstrong>3 %\u003C\u002Fstrong> à partir de 3 ans jusqu'à \u003Cstrong>15 %\u003C\u002Fstrong> à partir de 15 ans. Elle s'applique aux ouvriers, employés, techniciens et agents de maîtrise.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-grid\">\n      \u003Cdiv class=\"form-group\">\n        \u003Clabel>Salaire minimum garanti (base de calcul)\u003C\u002Flabel>\n        \u003Cdiv class=\"slider-row\">\n          \u003Cinput type=\"range\" id=\"anc-salaire\" min=\"1500\" max=\"5000\" step=\"50\" value=\"2145\">\n          \u003Cspan class=\"slider-val\" id=\"anc-salaire-val\">2 145 €\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n\n      \u003Cdiv class=\"form-group\">\n        \u003Clabel>Ancienneté (années complètes)\u003C\u002Flabel>\n        \u003Cdiv class=\"slider-row\">\n          \u003Cinput type=\"range\" id=\"anc-annees\" min=\"0\" max=\"30\" step=\"1\" value=\"6\">\n          \u003Cspan class=\"slider-val\" id=\"anc-annees-val\">6 ans\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card\" id=\"anc-result\">\n      \u003Cdiv class=\"result-label\">Prime d'ancienneté mensuelle\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"anc-montant\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"anc-sub\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-detail\" id=\"anc-detail\">—\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ═══════════════ TAB: CONGÉS ═══════════════ -->\n  \u003Cdiv class=\"tab-panel\" data-panel=\"conges\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cp>En plus des \u003Cstrong>30 jours ouvrables légaux\u003C\u002Fstrong>, la CCN accorde des jours de congé supplémentaires selon l'ancienneté : jusqu'à \u003Cstrong>+3 jours\u003C\u002Fstrong> pour les ouvriers\u002Femployés (à partir de 25 ans d'ancienneté). Les cadres bénéficient de \u003Cstrong>+3 jours dès la 1re année\u003C\u002Fstrong>.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-grid\">\n      \u003Cdiv class=\"form-group\">\n        \u003Clabel>Ancienneté (années complètes)\u003C\u002Flabel>\n        \u003Cdiv class=\"slider-row\">\n          \u003Cinput type=\"range\" id=\"cng-anciennete\" min=\"0\" max=\"30\" step=\"1\" value=\"5\">\n          \u003Cspan class=\"slider-val\" id=\"cng-anciennete-val\">5 ans\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n\n      \u003Cdiv class=\"form-group\">\n        \u003Clabel>Catégorie professionnelle\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"cng-categorie\">\n          \u003Cspan class=\"pill selected\" data-val=\"employe\">Ouvrier \u002F Employé\u003C\u002Fspan>\n          \u003Cspan class=\"pill\" data-val=\"tam\">TAM\u003C\u002Fspan>\n          \u003Cspan class=\"pill\" data-val=\"cadre\">Cadre\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card\" id=\"cng-result\">\n      \u003Cdiv class=\"result-label\">Congés annuels\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"cng-jours\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"cng-sub\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-detail\" id=\"cng-detail\">—\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- Disclaimer partagé -->\n  \u003Cp class=\"disclaimer\">\n    Calcul indicatif basé sur la CCN IDCC 1408 (Négoce et Distribution de Combustibles Solides, Liquides, Gazeux et Produits Pétroliers).\n    Source : \u003Ca href=\"https:\u002F\u002Fwww.legifrance.gouv.fr\u002Fconv_coll\u002Fid\u002FKALICONT000005635427\" target=\"_blank\" rel=\"noopener\">Légifrance KALICONT000005635427\u003C\u002Fa> — Grille salariale : avenant mai 2025 (KALITEXT000047747587).\n    Pour une validation légale\n  \u003C\u002Fp>\n\u003C\u002Fmain>\n\n\u003Cscript>\n\u002F\u002F ─── FORMATTERS ───────────────────────────────────────────────────────────────\nconst fmtEUR = new Intl.NumberFormat('fr-FR', { style: 'currency', currency: 'EUR', maximumFractionDigits: 2 });\nconst fmtNum = new Intl.NumberFormat('fr-FR', { maximumFractionDigits: 2 });\n\n\u002F\u002F ─── SALARY GRID ──────────────────────────────────────────────────────────────\nconst SALARY_GRID = {\n  200: 1852.12, 210: 1858.37, 220: 1867.80, 230: 1882.42,\n  240: 1911.42, 250: 1989.36, 300: 2145.22, 310: 2456.96,\n  320: 2768.68, 400: 2846.62, 410: 3158.36, 420: 3781.82,\n  430: 4405.29, 440: 5184.63, 450: 6119.83, 460: 7522.62\n};\n\n\u002F\u002F ─── PILL UTILS ───────────────────────────────────────────────────────────────\nfunction initPills(groupId, onChange) {\n  const container = document.getElementById(groupId);\n  if (!container) return;\n  container.querySelectorAll('.pill').forEach(p => {\n    p.addEventListener('click', () => {\n      container.querySelectorAll('.pill').forEach(x => x.classList.remove('selected'));\n      p.classList.add('selected');\n      onChange(p.dataset.val);\n    });\n  });\n}\n\nfunction getPillVal(groupId) {\n  const el = document.querySelector(`#${groupId} .pill.selected`);\n  return el ? el.dataset.val : null;\n}\n\n\u002F\u002F ─── TAB SYSTEM ───────────────────────────────────────────────────────────────\nconst tabBtns = document.querySelectorAll('[data-tab]');\nconst tabPanels = document.querySelectorAll('[data-panel]');\n\nfunction activate(id) {\n  tabBtns.forEach(t => t.classList.toggle('active', t.dataset.tab === id));\n  tabPanels.forEach(p => p.classList.toggle('active', p.dataset.panel === id));\n  if (location.hash !== '#' + id) location.hash = id;\n  requestAnimationFrame(() => notifyResize());\n}\n\ntabBtns.forEach(t => t.addEventListener('click', () => activate(t.dataset.tab)));\nconst hashId = location.hash.slice(1);\nconst validIds = Array.from(tabBtns).map(t => t.dataset.tab);\nactivate(validIds.includes(hashId) ? hashId : validIds[0]);\n\n\u002F\u002F ─── RESIZE OBSERVER ─────────────────────────────────────────────────────────\nfunction notifyResize() {\n  const h = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight);\n  parent.postMessage({ type: 'resize', height: h }, '*');\n}\n\nconst ro = new ResizeObserver(() => notifyResize());\nro.observe(document.documentElement);\n\n\u002F\u002F ─────────────────────────────────────────────────────────────────────────────\n\u002F\u002F TAB 1: INDEMNITÉ DE LICENCIEMENT\n\u002F\u002F ─────────────────────────────────────────────────────────────────────────────\nconst indState = { salaire: 2500, anciennete: 8, categorie: 'employe' };\n\nconst CAPS = { employe: 8, tam: 10, cadre: 15 };\n\nfunction computeIndemnite(s) {\n  const { salaire, anciennete, categorie } = s;\n  if (anciennete \u003C 1) return { montant: 0, detail: 'Moins de 1 an d\\'ancienneté : aucune indemnité.' };\n\n  \u002F\u002F Code du travail formula: 1\u002F4 × mois pour les 10 premières années, 1\u002F3 × mois au-delà\n  let base;\n  if (anciennete \u003C= 10) {\n    base = salaire * (1 \u002F 4) * anciennete;\n  } else {\n    base = salaire * (1 \u002F 4) * 10 + salaire * (1 \u002F 3) * (anciennete - 10);\n  }\n\n  const plafondMois = CAPS[categorie];\n  const plafond = salaire * plafondMois;\n  const plafonnee = base > plafond;\n  const montant = Math.min(base, plafond);\n\n  return {\n    montant,\n    plafonnee,\n    plafond,\n    base,\n    detail: plafonnee\n      ? `Formule légale : ${fmtEUR.format(base)} → plafonnée à ${plafondMois} mois de salaire (${fmtEUR.format(plafond)}) par la CCN.`\n      : `Formule légale appliquée : ${anciennete \u003C= 10 ? '1\u002F4 mois × ' + anciennete + ' ans' : '1\u002F4 × 10 ans + 1\u002F3 × ' + (anciennete - 10) + ' ans'}. Plafond CCN (${plafondMois} mois) non atteint.`\n  };\n}\n\nfunction renderIndemnite() {\n  const r = computeIndemnite(indState);\n  document.getElementById('ind-montant').textContent = fmtEUR.format(r.montant);\n  document.getElementById('ind-sub').textContent = `Ancienneté : ${indState.anciennete} ans · Catégorie : ${indState.categorie === 'employe' ? 'Ouvrier\u002FEmployé' : indState.categorie === 'tam' ? 'TAM' : 'Cadre'}`;\n  document.getElementById('ind-detail').textContent = r.detail;\n}\n\ndocument.getElementById('ind-salaire').addEventListener('input', e => {\n  indState.salaire = +e.target.value;\n  document.getElementById('ind-salaire-val').textContent = fmtEUR.format(indState.salaire);\n  renderIndemnite();\n});\ndocument.getElementById('ind-anciennete').addEventListener('input', e => {\n  indState.anciennete = +e.target.value;\n  document.getElementById('ind-anciennete-val').textContent = indState.anciennete + ' an' + (indState.anciennete > 1 ? 's' : '');\n  renderIndemnite();\n});\ninitPills('ind-categorie', v => { indState.categorie = v; renderIndemnite(); });\n\nrenderIndemnite();\n\n\u002F\u002F ─────────────────────────────────────────────────────────────────────────────\n\u002F\u002F TAB 2: PRÉAVIS\n\u002F\u002F ─────────────────────────────────────────────────────────────────────────────\nconst preState = { anciennete: 3, statut: 'non-cadre', sens: 'licenciement' };\n\nfunction computePreavis(s) {\n  const { anciennete, statut, sens } = s;\n  let duree, note;\n\n  if (statut === 'cadre') {\n    \u002F\u002F Cadres: généralement 3 mois selon la CCN\n    duree = 3;\n    note = 'Pour les cadres, la CCN prévoit 3 mois de préavis (standard pour les cadres).';\n  } else {\n    \u002F\u002F Non-cadres: 1 mois \u003C 2 ans, 2 mois ≥ 2 ans\n    if (anciennete \u003C 2) {\n      duree = 1;\n      note = 'Ancienneté \u003C 2 ans : 1 mois de préavis selon la CCN.';\n    } else {\n      duree = 2;\n      note = 'Ancienneté ≥ 2 ans : 2 mois de préavis selon la CCN (plus favorable que le minimum légal pour certains cas).';\n    }\n  }\n\n  \u002F\u002F En cas de démission, le préavis est généralement identique\n  const searchTime = (sens === 'licenciement') ? '2 heures \u002F jour pour recherche d\\'emploi (cumulables en demi-journées).' : 'Pas de droit aux heures de recherche d\\'emploi en cas de démission.';\n\n  return { duree, note, searchTime };\n}\n\nfunction renderPreavis() {\n  const r = computePreavis(preState);\n  document.getElementById('pre-duree').textContent = r.duree + ' mois';\n  document.getElementById('pre-sub').textContent = `Statut : ${preState.statut === 'cadre' ? 'Cadre' : 'Non-cadre'} · ${preState.sens === 'licenciement' ? 'Licenciement' : 'Démission'}`;\n  document.getElementById('pre-detail').textContent = r.note + ' ' + r.searchTime;\n}\n\ndocument.getElementById('pre-anciennete').addEventListener('input', e => {\n  preState.anciennete = +e.target.value;\n  document.getElementById('pre-anciennete-val').textContent = preState.anciennete + ' an' + (preState.anciennete > 1 ? 's' : '');\n  renderPreavis();\n});\ninitPills('pre-statut', v => { preState.statut = v; renderPreavis(); });\ninitPills('pre-sens', v => { preState.sens = v; renderPreavis(); });\n\nrenderPreavis();\n\n\u002F\u002F ─────────────────────────────────────────────────────────────────────────────\n\u002F\u002F TAB 3: SALAIRE MINIMUM\n\u002F\u002F ─────────────────────────────────────────────────────────────────────────────\nconst salState = { coeff: 320, heures: 35 };\n\nfunction computeSalaireMin(s) {\n  const base35h = SALARY_GRID[s.coeff] || 0;\n  let montant = base35h;\n  if (s.heures === 39) {\n    \u002F\u002F 39h: ajouter 4h supp à +25%\n    const tauxHoraire = base35h \u002F (35 * 52 \u002F 12);\n    const majoration = tauxHoraire * 4 * 1.25 * (52 \u002F 12);\n    montant = base35h + majoration;\n  }\n  const smicMensuel = 1801.80;\n  const applique = Math.max(montant, smicMensuel);\n  return { montant: applique, base35h, note: applique > smicMensuel ? `Minimum conventionnel (${fmtEUR.format(montant)}) > SMIC (${fmtEUR.format(smicMensuel)}) — le conventionnel s'applique.` : `SMIC (${fmtEUR.format(smicMensuel)}) > minimum conventionnel — le SMIC s'applique.` };\n}\n\nfunction renderSalaireMin() {\n  const r = computeSalaireMin(salState);\n  document.getElementById('sal-montant').textContent = fmtEUR.format(r.montant);\n  document.getElementById('sal-sub').textContent = `Coefficient ${salState.coeff} · ${salState.heures} h\u002Fsemaine`;\n  document.getElementById('sal-detail').textContent = r.note;\n\n  \u002F\u002F Highlight table row\n  document.querySelectorAll('.salary-table tr').forEach(tr => {\n    const cell = tr.querySelector('td');\n    tr.classList.toggle('highlight', cell && parseInt(cell.textContent) === salState.coeff);\n  });\n}\n\ndocument.getElementById('sal-coeff').addEventListener('change', e => {\n  salState.coeff = parseInt(e.target.value);\n  renderSalaireMin();\n});\ninitPills('sal-heures', v => { salState.heures = parseInt(v); renderSalaireMin(); });\n\nrenderSalaireMin();\n\n\u002F\u002F ─────────────────────────────────────────────────────────────────────────────\n\u002F\u002F TAB 4: PRIME D'ANCIENNETÉ\n\u002F\u002F ─────────────────────────────────────────────────────────────────────────────\nconst ancState = { salaire: 2145, annees: 6 };\n\nfunction getTauxAnciennete(annees) {\n  if (annees \u003C 3) return 0;\n  if (annees \u003C 6) return 0.03;\n  if (annees \u003C 9) return 0.06;\n  if (annees \u003C 10) return 0.09;\n  if (annees \u003C 15) return 0.10;\n  return 0.15;\n}\n\nfunction computePrimeAnciennete(s) {\n  const taux = getTauxAnciennete(s.annees);\n  const montant = s.salaire * taux;\n  const paliers = [\n    { annees: 3, taux: '3 %' }, { annees: 6, taux: '6 %' }, { annees: 9, taux: '9 %' },\n    { annees: 10, taux: '10 %' }, { annees: 15, taux: '15 %' }\n  ];\n  const prochain = paliers.find(p => p.annees > s.annees);\n  return {\n    montant,\n    taux,\n    note: taux === 0\n      ? 'Moins de 3 ans d\\'ancienneté : aucune prime d\\'ancienneté.'\n      : `Taux applicable : ${(taux * 100).toFixed(0)} % × salaire minimum garanti.`,\n    prochain: prochain ? `Prochain palier : ${(+prochain.taux.replace('%','').trim())} % à ${prochain.annees} ans.` : 'Taux maximum de 15 % atteint.'\n  };\n}\n\nfunction renderAnciennete() {\n  const r = computePrimeAnciennete(ancState);\n  document.getElementById('anc-montant').textContent = r.taux === 0 ? '0 €' : fmtEUR.format(r.montant);\n  document.getElementById('anc-sub').textContent = `${ancState.annees} an${ancState.annees > 1 ? 's' : ''} d'ancienneté · Taux : ${(r.taux * 100).toFixed(0)} %`;\n  document.getElementById('anc-detail').textContent = r.note + ' ' + r.prochain;\n}\n\ndocument.getElementById('anc-salaire').addEventListener('input', e => {\n  ancState.salaire = +e.target.value;\n  document.getElementById('anc-salaire-val').textContent = fmtEUR.format(ancState.salaire);\n  renderAnciennete();\n});\ndocument.getElementById('anc-annees').addEventListener('input', e => {\n  ancState.annees = +e.target.value;\n  document.getElementById('anc-annees-val').textContent = ancState.annees + ' an' + (ancState.annees > 1 ? 's' : '');\n  renderAnciennete();\n});\n\nrenderAnciennete();\n\n\u002F\u002F ─────────────────────────────────────────────────────────────────────────────\n\u002F\u002F TAB 5: CONGÉS PAYÉS\n\u002F\u002F ─────────────────────────────────────────────────────────────────────────────\nconst cngState = { anciennete: 5, categorie: 'employe' };\n\nfunction computeConges(s) {\n  const { anciennete, categorie } = s;\n  const base = 30; \u002F\u002F jours ouvrables légaux\n  let extra = 0;\n  let detail = '';\n\n  if (categorie === 'cadre') {\n    extra = 3; \u002F\u002F cadres : +3 jours dès la 1re année\n    detail = 'Les cadres bénéficient de 3 jours supplémentaires dès la 1re année (art. CCN IDCC 1408).';\n  } else if (categorie === 'tam') {\n    if (anciennete >= 20) { extra = 3; detail = '20 ans ou plus : +3 jours ouvrables supplémentaires.'; }\n    else if (anciennete >= 15) { extra = 2; detail = '15 à 19 ans : +2 jours ouvrables supplémentaires.'; }\n    else if (anciennete >= 10) { extra = 1; detail = '10 à 14 ans : +1 jour ouvrable supplémentaire.'; }\n    else { extra = 0; detail = 'Moins de 10 ans : pas de jours supplémentaires au titre de la CCN.'; }\n  } else {\n    \u002F\u002F Ouvriers\u002FEmployés\n    if (anciennete >= 25) { extra = 3; detail = '25 ans ou plus : +3 jours ouvrables supplémentaires.'; }\n    else if (anciennete >= 20) { extra = 2; detail = '20 à 24 ans : +2 jours ouvrables supplémentaires.'; }\n    else if (anciennete >= 10) { extra = 1; detail = '10 à 19 ans : +1 jour ouvrable supplémentaire.'; }\n    else { extra = 0; detail = 'Moins de 10 ans : pas de jours supplémentaires au titre de la CCN.'; }\n  }\n\n  return { total: base + extra, base, extra, detail };\n}\n\nfunction renderConges() {\n  const r = computeConges(cngState);\n  document.getElementById('cng-jours').textContent = r.total + ' jours ouvrables';\n  document.getElementById('cng-sub').textContent = `${r.base} jours légaux + ${r.extra} jour${r.extra !== 1 ? 's' : ''} CCN`;\n  document.getElementById('cng-detail').textContent = r.detail;\n}\n\ndocument.getElementById('cng-anciennete').addEventListener('input', e => {\n  cngState.anciennete = +e.target.value;\n  document.getElementById('cng-anciennete-val').textContent = cngState.anciennete + ' an' + (cngState.anciennete > 1 ? 's' : '');\n  renderConges();\n});\ninitPills('cng-categorie', v => { cngState.categorie = v; renderConges(); });\n\nrenderConges();\n\n\u002F\u002F ─── Initial render ──\nwindow.addEventListener('load', () => {\n  lucide.createIcons();\n  notifyResize();\n});\n\u003C\u002Fscript>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n","generated","juridique","consumer","both","https:\u002F\u002Fpub-bdebbd2dad294475a2da0eb657815b6b.r2.dev\u002Ftools\u002Fccn-negoce-et-de-distribution-de-combustibles-solides-1d31b7fb39-1779574750.webp","",[]]