[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"footer-root-categories-fr-FR":3,"tool-content-ccn-cadres-des-industries-de-carrieres-et-materiaux-fr":83,"footer-cities-fr":160},[4,14,22,30,38,45,53,60,67,75],{"seo_content":5,"id":8,"name":9,"slug":10,"parentId":7,"lang":11,"_count":12},[6],{"page_slug":7},null,"cmkzhl7xm00dbulbc93h4qog5","Juridique","avocats","fr-FR",{"experts":13},8,{"seo_content":15,"id":17,"name":18,"slug":19,"parentId":7,"lang":11,"_count":20},[16],{"page_slug":7},"cmkzhl84700djulbcbv6pzu9e","Informatique","informaticiens",{"experts":21},3,{"seo_content":23,"id":25,"name":26,"slug":27,"parentId":7,"lang":11,"_count":28},[24],{"page_slug":7},"cmkzhlaos00gnulbc07i9jrco","Amélioration de la Maison","artisans",{"experts":29},4,{"seo_content":31,"id":33,"name":34,"slug":35,"parentId":7,"lang":11,"_count":36},[32],{"page_slug":7},"cmkzhlaqg00gpulbcx38bwoc2","Général","divers-generalistes",{"experts":37},0,{"seo_content":39,"id":41,"name":42,"slug":43,"parentId":7,"lang":11,"_count":44},[40],{"page_slug":7},"cmkzhlbvq00i3ulbcutdbcz50","Électronique Grand Public","techniciens-electronique",{"experts":21},{"seo_content":46,"id":48,"name":49,"slug":50,"parentId":7,"lang":11,"_count":51},[47],{"page_slug":7},"cmkzhlcaw00ilulbc38pxoogr","Santé","medecins",{"experts":52},5,{"seo_content":54,"id":56,"name":57,"slug":58,"parentId":7,"lang":11,"_count":59},[55],{"page_slug":7},"cmkzhlcmi00izulbcxva1m47f","Gestion de Patrimoine","conseillers-patrimoniaux",{"experts":21},{"seo_content":61,"id":63,"name":64,"slug":65,"parentId":7,"lang":11,"_count":66},[62],{"page_slug":7},"cmkzhldcv00jvulbcmcd5a7mk","Animaux et Vétérinaires","veterinaires",{"experts":21},{"seo_content":68,"id":70,"name":71,"slug":72,"parentId":7,"lang":11,"_count":73},[69],{"page_slug":7},"cmkzhldrr00kdulbchxfo67eg","Mécanique et Réparation","mecaniciens",{"experts":74},1,{"seo_content":76,"id":78,"name":79,"slug":80,"parentId":7,"lang":11,"_count":81},[77],{"page_slug":7},"cmkzhl9l300fbulbcv3i8q8p3","Aide aux Devoirs","professeurs-particuliers",{"experts":82},6,{"slug":84,"title":85,"page_title":86,"description":87,"content_md":88,"local_slug":84,"json_ld":89,"faq":134,"tool_html":154,"source":155,"category":156,"audience":157,"publish_mode":158,"hero_image":159,"hero_image_alt":85},"ccn-cadres-des-industries-de-carrieres-et-materiaux","CCN des cadres des industries de carrières et matériaux — calculateur complet","Calculateur CCN cadres industries carrières et matériaux IDCC 211 | Expert Zoom","Outil interactif couvrant indemnité de licenciement (formule âge\u002Fancienneté), préavis, grille salariale 2025, congés par ancienneté, forfait jours et période d'essai de la CCN IDCC 211.","Ce calculateur couvre les 6 principales dérogations de la CCN des cadres des industries de carrières et matériaux (IDCC 211) : indemnité de licenciement (formule âge\u002Fancienneté, plafond 18 mois), préavis (3 mois pour les cadres ayant 2+ ans d'ancienneté), grille salariale 2025 (niveaux 8 à 10, de 32 186 € à 63 575 €\u002Fan), congés par ancienneté (+1 à +3 jours), forfait jours (10 RTT\u002Fan pour niveaux 8-10) et période d'essai (3 mois renouvelable, max 6 mois).",[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 des cadres des industries de carrières et matériaux — IDCC 211","WebApplication",{"name":94,"@type":95,"identifier":96},"Convention collective nationale des cadres des industries de carrières et matériaux","Thing","IDCC 211",{"name":98,"@type":99},"Expert-Zoom","Organization","https:\u002F\u002Fschema.org",{"url":102,"@type":103},"\u002Ffr\u002Fmagazine\u002Fjuridique\u002Fles-conventions-collectives-en-france","Article","fr","Outil interactif couvrant l'indemnité de licenciement, le préavis, la grille salariale, les congés par ancienneté, le forfait jours et la période d'essai de la convention collective nationale des cadres des industries de carrières et matériaux (IDCC 211 \u002F IDCC 3249).","All","FinanceApplication",true,{"@type":110,"@context":100,"mainEntity":111},"FAQPage",[112,118,122,126,130],{"name":113,"@type":114,"acceptedAnswer":115},"Comment calculer l'indemnité de licenciement dans la CCN des cadres des industries de carrières et matériaux (IDCC 211) ?","Question",{"text":116,"@type":117},"La CCN IDCC 211 prévoit : 1 mois de salaire pour 1 à 5 ans d'ancienneté ; puis 1,5 + (ancienneté − 5) × coefficient (0,44 pour \u003C 40 ans, 0,55 pour 40-49 ans, 0,66 pour 50-59 ans, 0,55 pour ≥ 60 ans), plafonné à 18 mois. Ce barème est plus favorable que L1234-9.","Answer",{"name":119,"@type":114,"acceptedAnswer":120},"Quelle est la durée du préavis pour un cadre relevant de l'IDCC 211 ?",{"text":121,"@type":117},"3 mois pour les cadres avec au moins 2 ans d'ancienneté (vs 2 mois légaux L1234-1). Pour une ancienneté inférieure à 2 ans, le préavis est de 2 mois.",{"name":123,"@type":114,"acceptedAnswer":124},"Quelle est la grille des salaires minimaux des cadres de l'IDCC 211 en 2025 ?",{"text":125,"@type":117},"Grille 2025 (accord 18 fév. 2025, +1,5 %) : de 32 186 € (niveau 8, échelon 1) à 63 575 € annuels (niveau 10, échelon 1).",{"name":127,"@type":114,"acceptedAnswer":128},"Y a-t-il des congés supplémentaires pour ancienneté dans la CCN cadres carrières et matériaux ?",{"text":129,"@type":117},"Oui : +1 jour à 20 ans d'ancienneté, +2 jours à 25 ans, +3 jours à 30 ans, en sus des 30 jours ouvrables légaux.",{"name":131,"@type":114,"acceptedAnswer":132},"Quelle est la durée de la période d'essai pour un cadre sous l'IDCC 211 ?",{"text":133,"@type":117},"3 mois renouvelable une fois (max 6 mois), avec préavis écrit de 48 heures. Durée inférieure au plafond légal de 8 mois pour les cadres (L1221-19).",[135,137,139,141,143,146,148,151],{"a":136,"q":113},"La CCN IDCC 211 prévoit un barème basé sur l'âge et l'ancienneté. Pour moins de 5 ans d'ancienneté : 1 mois de salaire. Pour 5 ans et plus, la formule est : 1,5 mois + (ancienneté − 5) × coefficient. Le coefficient est de 0,44 pour moins de 40 ans, 0,55 pour 40-49 ans, 0,66 pour 50-59 ans, et 0,55 pour 60 ans et plus. Le tout est plafonné à 18 mois de salaire brut. Ce barème est généralement plus favorable que l'article L1234-9 du Code du travail.",{"a":138,"q":119},"La CCN IDCC 211 prévoit un préavis de 3 mois pour les cadres ayant au moins 2 ans d'ancienneté, soit un mois de plus que le minimum légal prévu par L1234-1 (2 mois pour les cadres). Pour une ancienneté inférieure à 2 ans, le préavis reste de 2 mois, conforme à la loi.",{"a":140,"q":123},"Suite à l'accord du 18 février 2025 (+1,5 %), les salaires annuels bruts vont de 32 186 € (niveau 8, échelon 1) à 63 575 € (niveau 10, échelon 1). Le niveau 9 échelon 1 correspond à 47 441 € brut annuel. Ces minima sont nettement supérieurs au SMIC (21 624 €\u002Fan en 2025). Depuis 2022, cette grille s'applique à la convention unifiée IDCC 3249.",{"a":142,"q":127},"Oui, la CCN accorde des jours de congés supplémentaires selon l'ancienneté : +1 jour à partir de 20 ans d'ancienneté, +2 jours à partir de 25 ans, +3 jours à partir de 30 ans. Ces jours s'ajoutent aux 30 jours ouvrables légaux (L3141-3), portant le total à jusqu'à 33 jours ouvrables.",{"a":144,"q":145},"Non. Les cadres des niveaux 8, 9 et 10 relèvent du forfait jours avec 10 jours RTT par an. Ce régime déroge au décompte horaire traditionnel et aux majorations prévues par L3121-36. La valeur journalière est calculée sur une base de 218 jours par an.","Les cadres de l'IDCC 211 sont-ils soumis aux heures supplémentaires classiques ?",{"a":147,"q":131},"La période d'essai est fixée à 3 mois de travail effectif, renouvelable une fois sur préavis écrit de 48 heures, pour un maximum de 6 mois. Cette durée totale est inférieure au plafond légal de 8 mois prévu par L1221-19 pour les cadres.",{"a":149,"q":150},"L'IDCC 211 (convention cadres) a fusionné avec les IDCC 87 (ouvriers) et 135 (ETAM) le 6 juillet 2022 pour former la Convention collective nationale des industries de carrières et matériaux de construction (IDCC 3249). Les dispositions essentielles de l'IDCC 211, notamment la formule d'indemnité et le préavis, ont été reprises dans la nouvelle convention.","L'IDCC 211 est-elle encore en vigueur en 2026 ?",{"a":152,"q":153},"Avec 12 ans d'ancienneté et 52 ans (tranche 50-59 ans, coeff. 0,66) : indemnité = 1,5 + (12 − 5) × 0,66 = 1,5 + 4,62 = 6,12 mois de salaire. Soit 6,12 × 4 000 € = 24 480 €. La formule légale L1234-9 aurait donné : (10 × 0,25) + (2 × 0,333) = 3,17 mois = 12 667 €. Le gain CCN représente ici 11 813 €.","Comment calculer l'indemnité pour un cadre de 52 ans avec 12 ans d'ancienneté et 4 000 € de salaire mensuel ?","\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 des cadres des industries de carrières et matériaux — IDCC 211\u003C\u002Ftitle>\n  \u003Cscript src=\"https:\u002F\u002Funpkg.com\u002Flucide@latest\u002Fdist\u002Fumd\u002Flucide.min.js\">\u003C\u002Fscript>\n  \u003Cstyle>\n    *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n    :root {\n      --bg: #fafaf9;\n      --surface: #ffffff;\n      --border: #e7e5e4;\n      --accent: #2563eb;\n      --accent-light: #eff6ff;\n      --accent-dark: #1d4ed8;\n      --text: #1c1917;\n      --text-muted: #78716c;\n      --info-bg: #eff6ff;\n      --info-border: #bfdbfe;\n      --info-text: #1e40af;\n      --radius: 0.75rem;\n      --radius-sm: 0.5rem;\n      --shadow: 0 1px 3px rgba(0,0,0,.08), 0 1px 2px rgba(0,0,0,.05);\n    }\n    body {\n      font-family: system-ui, -apple-system, sans-serif;\n      background: var(--bg);\n      color: var(--text);\n      font-size: 0.9375rem;\n      line-height: 1.6;\n      padding: 1rem;\n    }\n    .tool-root { max-width: 680px; margin: 0 auto; }\n\n    .tool-header { margin-bottom: 1.25rem; }\n    .tool-header h1 { font-size: 1.125rem; font-weight: 700; color: var(--text); }\n    .badge {\n      display: inline-flex; align-items: center; gap: 0.3rem;\n      background: var(--accent-light); color: var(--accent);\n      font-size: 0.75rem; font-weight: 600; padding: 0.2rem 0.55rem;\n      border-radius: 9999px; margin-top: 0.35rem;\n    }\n\n    .tabs-nav {\n      display: flex; gap: 0.25rem; flex-wrap: wrap;\n      border-bottom: 2px solid var(--border);\n      margin-bottom: 1.25rem;\n    }\n    .tab-btn {\n      display: flex; align-items: center; gap: 0.35rem;\n      padding: 0.55rem 0.9rem; border: none; background: transparent;\n      color: var(--text-muted); font-size: 0.84rem; font-weight: 500;\n      cursor: pointer; border-bottom: 2px solid transparent;\n      margin-bottom: -2px; border-radius: var(--radius-sm) var(--radius-sm) 0 0;\n      transition: color .15s, border-color .15s, background .15s;\n    }\n    .tab-btn:hover { color: var(--accent); background: var(--accent-light); }\n    .tab-btn.active { color: var(--accent); border-bottom-color: var(--accent); font-weight: 600; }\n    .tab-btn svg { width: 15px; height: 15px; flex-shrink: 0; }\n\n    .panel { display: none; }\n    .panel.active { display: block; }\n\n    .rule-callout {\n      display: flex; gap: 0.65rem; align-items: flex-start;\n      background: var(--info-bg); border: 1px solid var(--info-border);\n      border-radius: var(--radius-sm); padding: 0.75rem 1rem;\n      margin-bottom: 1.25rem; color: var(--info-text); font-size: 0.875rem;\n    }\n    .rule-callout svg { width: 16px; height: 16px; flex-shrink: 0; margin-top: 0.1rem; }\n\n    .form-grid { display: grid; gap: 1rem; margin-bottom: 1.25rem; }\n    .field label {\n      display: flex; justify-content: space-between; align-items: center;\n      font-size: 0.84rem; font-weight: 500; margin-bottom: 0.35rem; color: var(--text);\n    }\n    .field label span { font-weight: 700; color: var(--accent); font-variant-numeric: tabular-nums; }\n    input[type=\"range\"] { width: 100%; accent-color: var(--accent); cursor: pointer; height: 4px; }\n    select {\n      width: 100%; padding: 0.5rem 0.75rem; border: 1px solid var(--border);\n      border-radius: var(--radius-sm); font-size: 0.875rem; background: var(--surface);\n      color: var(--text); outline: none; transition: border-color .15s;\n    }\n    select:focus { border-color: var(--accent); }\n\n    .pills { display: flex; flex-wrap: wrap; gap: 0.4rem; }\n    .pill {\n      padding: 0.35rem 0.75rem; border: 1.5px solid var(--border);\n      border-radius: 9999px; font-size: 0.8rem; font-weight: 500;\n      cursor: pointer; color: var(--text-muted); background: var(--surface);\n      transition: all .15s;\n    }\n    .pill.active { border-color: var(--accent); color: var(--accent); background: var(--accent-light); }\n\n    .result-card {\n      background: var(--surface); border: 2px solid var(--accent);\n      border-radius: var(--radius); padding: 1.25rem 1.5rem;\n      margin-bottom: 1rem; box-shadow: var(--shadow);\n    }\n    .result-label { font-size: 0.8rem; color: var(--text-muted); margin-bottom: 0.25rem; font-weight: 500; }\n    .result-value {\n      font-size: 1.85rem; font-weight: 800; color: var(--accent);\n      font-variant-numeric: tabular-nums; line-height: 1.1;\n    }\n    .result-detail { font-size: 0.8rem; color: var(--text-muted); margin-top: 0.35rem; }\n\n    .sub-results { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px,1fr)); gap: 0.6rem; margin-bottom: 1rem; }\n    .sub-card {\n      background: var(--bg); border: 1px solid var(--border);\n      border-radius: var(--radius-sm); padding: 0.65rem 0.85rem;\n    }\n    .sub-card .sub-label { font-size: 0.75rem; color: var(--text-muted); margin-bottom: 0.15rem; }\n    .sub-card .sub-val { font-size: 1.05rem; font-weight: 700; color: var(--text); font-variant-numeric: tabular-nums; }\n\n    .grid-table { width: 100%; border-collapse: collapse; font-size: 0.84rem; margin-bottom: 1rem; }\n    .grid-table th {\n      background: var(--accent-light); color: var(--accent); font-weight: 600;\n      padding: 0.5rem 0.7rem; text-align: left; border-bottom: 2px solid var(--accent);\n    }\n    .grid-table td { padding: 0.45rem 0.7rem; border-bottom: 1px solid var(--border); }\n    .grid-table tr:last-child td { border-bottom: none; }\n    .grid-table tr.highlight td { background: var(--accent-light); font-weight: 600; }\n\n    .disclaimer {\n      font-size: 0.775rem; color: var(--text-muted); border-top: 1px solid var(--border);\n      padding-top: 0.85rem; margin-top: 0.5rem; line-height: 1.5;\n    }\n    .disclaimer a { color: var(--accent); text-decoration: none; }\n    .disclaimer a:hover { text-decoration: underline; }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\u003Cbody>\n\u003C!-- CCN IDCC 211 — cadres des industries de carrieres et materiaux\n     Deviations vs code du travail:\n     indemnite: formule age\u002Fanciennete (1.5 + coeff selon age × (anc-5)), plafond 18 mois (source: KALICONT000005635430)\n     preavis: 3 mois cadres 2+ ans vs L1234-1 2 mois (source: KALICONT000005635430)\n     salaire-min: grille niveaux 8-10, 32 186 EUR a 63 575 EUR\u002Fan (accord 18 fev 2025, +1.5%)\n     conges: +1 j (20 ans), +2 j (25 ans), +3 j (30 ans) au-dela des 30 j L3141-3\n     heures-supp: forfait jours niveaux 8-10 avec 10 RTT\u002Fan — deroge L3121-36\n     duree-essai: 3 mois renouvelable 1x (max 6 mois) vs 8 mois plafond legal\n     Source: Legifrance KALICONT000005635430 \u002F IDCC 3249 KALICONT000050551393\n-->\n\u003Cmain class=\"tool-root\">\n  \u003Cdiv class=\"tool-header\">\n    \u003Ch1>Convention collective des cadres des industries de carrières et matériaux\u003C\u002Fh1>\n    \u003Cdiv class=\"badge\">\u003Ci data-lucide=\"landmark\">\u003C\u002Fi> IDCC 211\u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003Cnav class=\"tabs-nav\" role=\"tablist\">\n    \u003Cbutton class=\"tab-btn\" data-tab=\"indemnite\" role=\"tab\" aria-selected=\"false\">\n      \u003Ci data-lucide=\"banknote\">\u003C\u002Fi> Indemnité\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"preavis\" role=\"tab\" aria-selected=\"false\">\n      \u003Ci data-lucide=\"clock\">\u003C\u002Fi> Préavis\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"salaire\" role=\"tab\" aria-selected=\"false\">\n      \u003Ci data-lucide=\"table-2\">\u003C\u002Fi> Grille salariale\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"conges\" role=\"tab\" aria-selected=\"false\">\n      \u003Ci data-lucide=\"sun\">\u003C\u002Fi> Congés\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"heures\" role=\"tab\" aria-selected=\"false\">\n      \u003Ci data-lucide=\"timer\">\u003C\u002Fi> Temps de travail\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"essai\" role=\"tab\" aria-selected=\"false\">\n      \u003Ci data-lucide=\"user-check\">\u003C\u002Fi> Période d'essai\n    \u003C\u002Fbutton>\n  \u003C\u002Fnav>\n\n  \u003C!-- TAB 1: Indemnité de licenciement -->\n  \u003Csection class=\"panel\" data-panel=\"indemnite\" role=\"tabpanel\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cp>La CCN prévoit une formule majorée tenant compte de l'\u003Cstrong>âge du salarié\u003C\u002Fstrong> : 1,5 mois + coefficient annuel (0,44 à 0,66 selon l'âge) × années au-delà de 5 ans, plafonnée à \u003Cstrong>18 mois\u003C\u002Fstrong> de salaire. Généralement plus favorable que L1234-9 pour les cadres seniors.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"form-grid\">\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Salaire brut mensuel de référence \u003Cspan id=\"ind-sal-val\">3 500 €\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"ind-sal\" min=\"1500\" max=\"12000\" step=\"100\" value=\"3500\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Ancienneté (années complètes) \u003Cspan id=\"ind-anc-val\">10 ans\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"ind-anc\" min=\"1\" max=\"40\" step=\"1\" value=\"10\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Âge du salarié \u003Cspan id=\"ind-age-val\">45 ans\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"ind-age\" min=\"25\" max=\"65\" step=\"1\" value=\"45\">\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card\">\n      \u003Cdiv class=\"result-label\">Indemnité conventionnelle brute estimée\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"ind-result\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-detail\" id=\"ind-detail\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"sub-results\">\n      \u003Cdiv class=\"sub-card\">\n        \u003Cdiv class=\"sub-label\">Équivalent en mois de salaire\u003C\u002Fdiv>\n        \u003Cdiv class=\"sub-val\" id=\"ind-mois\">—\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"sub-card\">\n        \u003Cdiv class=\"sub-label\">Indemnité légale (L1234-9)\u003C\u002Fdiv>\n        \u003Cdiv class=\"sub-val\" id=\"ind-legal\">—\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"sub-card\">\n        \u003Cdiv class=\"sub-label\">Gain CCN vs. légal\u003C\u002Fdiv>\n        \u003Cdiv class=\"sub-val\" id=\"ind-gain\">—\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fsection>\n\n  \u003C!-- TAB 2: Préavis -->\n  \u003Csection class=\"panel\" data-panel=\"preavis\" role=\"tabpanel\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cp>La CCN garantit \u003Cstrong>3 mois de préavis\u003C\u002Fstrong> pour les cadres ayant 2 ans d'ancienneté ou plus — un mois supplémentaire par rapport au minimum légal de L1234-1 (2 mois pour les cadres).\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"form-grid\">\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Ancienneté (années complètes) \u003Cspan id=\"pre-anc-val\">5 ans\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"pre-anc\" min=\"0\" max=\"40\" step=\"1\" value=\"5\">\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card\">\n      \u003Cdiv class=\"result-label\">Durée du préavis (CCN IDCC 211)\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"pre-result\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-detail\" id=\"pre-detail\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"sub-results\">\n      \u003Cdiv class=\"sub-card\">\n        \u003Cdiv class=\"sub-label\">Minimum légal cadres\u003C\u002Fdiv>\n        \u003Cdiv class=\"sub-val\" id=\"pre-legal\">—\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"sub-card\">\n        \u003Cdiv class=\"sub-label\">Catégorie\u003C\u002Fdiv>\n        \u003Cdiv class=\"sub-val\">Cadres (niveaux 8-10)\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fsection>\n\n  \u003C!-- TAB 3: Grille salariale -->\n  \u003Csection class=\"panel\" data-panel=\"salaire\" role=\"tabpanel\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cp>La grille en vigueur au \u003Cstrong>1er janvier 2025\u003C\u002Fstrong> (accord du 18 fév. 2025, +1,5 %) fixe des minima annuels de \u003Cstrong>32 186 € à 63 575 €\u003C\u002Fstrong> selon le niveau et l'échelon, nettement supérieurs au SMIC.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"form-grid\">\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Niveau \u002F Échelon\u003C\u002Flabel>\n        \u003Cselect id=\"sal-niveau\">\n          \u003Coption value=\"8-1\">Niveau 8 – Échelon 1\u003C\u002Foption>\n          \u003Coption value=\"8-2\">Niveau 8 – Échelon 2\u003C\u002Foption>\n          \u003Coption value=\"8-3\">Niveau 8 – Échelon 3\u003C\u002Foption>\n          \u003Coption value=\"9-1\">Niveau 9 – Échelon 1\u003C\u002Foption>\n          \u003Coption value=\"10-1\">Niveau 10 – Échelon 1\u003C\u002Foption>\n        \u003C\u002Fselect>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Heures hebdomadaires \u003Cspan id=\"sal-h-val\">35 h\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"sal-heures\" min=\"24\" max=\"39\" step=\"0.5\" value=\"35\">\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card\">\n      \u003Cdiv class=\"result-label\">Salaire minimum conventionnel mensuel brut\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"sal-result\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-detail\" id=\"sal-detail\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"sub-results\">\n      \u003Cdiv class=\"sub-card\">\n        \u003Cdiv class=\"sub-label\">Annuel brut\u003C\u002Fdiv>\n        \u003Cdiv class=\"sub-val\" id=\"sal-annuel\">—\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"sub-card\">\n        \u003Cdiv class=\"sub-label\">SMIC mensuel (2025)\u003C\u002Fdiv>\n        \u003Cdiv class=\"sub-val\">1 802 €\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"sub-card\">\n        \u003Cdiv class=\"sub-label\">Écart vs SMIC\u003C\u002Fdiv>\n        \u003Cdiv class=\"sub-val\" id=\"sal-smic-gap\">—\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Ctable class=\"grid-table\">\n      \u003Cthead>\n        \u003Ctr>\n          \u003Cth>Niveau\u003C\u002Fth>\n          \u003Cth>Échelon\u003C\u002Fth>\n          \u003Cth>Annuel brut (2025)\u003C\u002Fth>\n          \u003Cth>Mensuel brut\u003C\u002Fth>\n        \u003C\u002Ftr>\n      \u003C\u002Fthead>\n      \u003Ctbody id=\"sal-tbody\">\u003C\u002Ftbody>\n    \u003C\u002Ftable>\n  \u003C\u002Fsection>\n\n  \u003C!-- TAB 4: Congés payés -->\n  \u003Csection class=\"panel\" data-panel=\"conges\" role=\"tabpanel\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cp>La CCN accorde des \u003Cstrong>jours de congés supplémentaires par ancienneté\u003C\u002Fstrong> : +1 jour dès 20 ans, +2 jours dès 25 ans, +3 jours dès 30 ans — en sus des 30 jours ouvrables légaux (L3141-3).\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"form-grid\">\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Ancienneté (années) \u003Cspan id=\"cong-anc-val\">10 ans\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"cong-anc\" min=\"0\" max=\"40\" step=\"1\" value=\"10\">\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card\">\n      \u003Cdiv class=\"result-label\">Congés annuels (jours ouvrables)\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"cong-result\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-detail\" id=\"cong-detail\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"sub-results\">\n      \u003Cdiv class=\"sub-card\">\n        \u003Cdiv class=\"sub-label\">Base légale (L3141-3)\u003C\u002Fdiv>\n        \u003Cdiv class=\"sub-val\">30 j. ouvrables\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"sub-card\">\n        \u003Cdiv class=\"sub-label\">Jours supplémentaires CCN\u003C\u002Fdiv>\n        \u003Cdiv class=\"sub-val\" id=\"cong-extra\">—\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"sub-card\">\n        \u003Cdiv class=\"sub-label\">Total en semaines\u003C\u002Fdiv>\n        \u003Cdiv class=\"sub-val\" id=\"cong-semaines\">—\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fsection>\n\n  \u003C!-- TAB 5: Temps de travail \u002F Forfait jours -->\n  \u003Csection class=\"panel\" data-panel=\"heures\" role=\"tabpanel\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cp>Les cadres de niveaux 8, 9 et 10 relèvent du \u003Cstrong>forfait jours\u003C\u002Fstrong> avec \u003Cstrong>10 jours RTT\u003C\u002Fstrong> par an. Ce régime déroge au décompte horaire traditionnel et aux majorations heures supplémentaires de L3121-36.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"form-grid\">\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Salaire brut mensuel \u003Cspan id=\"heur-sal-val\">4 000 €\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"heur-sal\" min=\"2000\" max=\"12000\" step=\"100\" value=\"4000\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Jours RTT pris dans l'année \u003Cspan id=\"heur-rtt-val\">10 j\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"heur-rtt\" min=\"0\" max=\"10\" step=\"1\" value=\"10\">\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card\">\n      \u003Cdiv class=\"result-label\">Valeur journalière (base forfait 218 j\u002Fan)\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"heur-result\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-detail\" id=\"heur-detail\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"sub-results\">\n      \u003Cdiv class=\"sub-card\">\n        \u003Cdiv class=\"sub-label\">Jours effectivement travaillés\u003C\u002Fdiv>\n        \u003Cdiv class=\"sub-val\" id=\"heur-jours\">—\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"sub-card\">\n        \u003Cdiv class=\"sub-label\">RTT conventionnels\u003C\u002Fdiv>\n        \u003Cdiv class=\"sub-val\">10 j \u002F an\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"sub-card\">\n        \u003Cdiv class=\"sub-label\">Forfait annuel\u003C\u002Fdiv>\n        \u003Cdiv class=\"sub-val\">218 j \u002F an\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fsection>\n\n  \u003C!-- TAB 6: Période d'essai -->\n  \u003Csection class=\"panel\" data-panel=\"essai\" role=\"tabpanel\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cp>La CCN fixe la période d'essai des cadres à \u003Cstrong>3 mois\u003C\u002Fstrong>, renouvelable une fois sur préavis écrit de 48 heures, pour un \u003Cstrong>maximum de 6 mois\u003C\u002Fstrong> — durée inférieure au plafond légal de 8 mois (L1221-19).\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"form-grid\">\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Renouvellement\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"essai-pills\">\n          \u003Cbutton class=\"pill active\" data-val=\"0\">Sans renouvellement\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"1\">Avec renouvellement\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card\">\n      \u003Cdiv class=\"result-label\">Durée totale de la période d'essai (CCN)\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"essai-result\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-detail\" id=\"essai-detail\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"sub-results\">\n      \u003Cdiv class=\"sub-card\">\n        \u003Cdiv class=\"sub-label\">Durée initiale CCN\u003C\u002Fdiv>\n        \u003Cdiv class=\"sub-val\">3 mois\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"sub-card\">\n        \u003Cdiv class=\"sub-label\">Plafond légal (L1221-19)\u003C\u002Fdiv>\n        \u003Cdiv class=\"sub-val\">8 mois\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"sub-card\">\n        \u003Cdiv class=\"sub-label\">Préavis de renouvellement\u003C\u002Fdiv>\n        \u003Cdiv class=\"sub-val\">48 h (écrit)\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fsection>\n\n  \u003Cp class=\"disclaimer\">\n    Calcul indicatif basé sur la CCN IDCC 211 (cadres des industries de carrières et matériaux), fusionnée dans l'IDCC 3249 depuis juillet 2022.\n    Source : \u003Ca href=\"https:\u002F\u002Fwww.legifrance.gouv.fr\u002Fconv_coll\u002Fid\u002FKALICONT000005635430\" target=\"_blank\" rel=\"noopener\">Légifrance KALICONT000005635430\u003C\u002Fa>.\n    Pour toute validation légale\n  \u003C\u002Fp>\n\u003C\u002Fmain>\n\n\u003Cscript>\n\u002F* Utilities *\u002F\nconst fmt = new Intl.NumberFormat('fr-FR', { style: 'currency', currency: 'EUR', maximumFractionDigits: 0 });\nconst fmtDec = new Intl.NumberFormat('fr-FR', { style: 'currency', currency: 'EUR', maximumFractionDigits: 2 });\nfunction el(id) { return document.getElementById(id); }\nfunction setVal(id, v) { const e = el(id); if (e) e.textContent = v; }\n\n\u002F* Salary grid IDCC 211 \u002F 3249, cadres, 2025 *\u002F\nconst GRID = [\n  { niv: 8, ech: 1, annuel: 32186 },\n  { niv: 8, ech: 2, annuel: 40103 },\n  { niv: 8, ech: 3, annuel: 42544 },\n  { niv: 9, ech: 1, annuel: 47441 },\n  { niv: 10, ech: 1, annuel: 63575 },\n];\n\n\u002F* TAB 1: Indemnite de licenciement *\u002F\nfunction computeIndemnite() {\n  const sal = +el('ind-sal').value;\n  const anc = +el('ind-anc').value;\n  const age = +el('ind-age').value;\n\n  setVal('ind-sal-val', fmt.format(sal));\n  setVal('ind-anc-val', anc + ' an' + (anc > 1 ? 's' : ''));\n  setVal('ind-age-val', age + ' ans');\n\n  let mois = 0;\n  let detail = '';\n\n  if (anc \u003C 1) {\n    mois = 0;\n    detail = 'Ancienneté insuffisante (\u003C 1 an) — aucune indemnité';\n  } else if (anc \u003C 5) {\n    mois = 1;\n    detail = '1 mois de salaire pour 1 à 5 ans d\\'ancienneté';\n  } else {\n    let coeff;\n    if (age \u003C 40) { coeff = 0.44; detail = 'Coeff. 0,44\u002Fan (âge \u003C 40 ans)'; }\n    else if (age \u003C 50) { coeff = 0.55; detail = 'Coeff. 0,55\u002Fan (40 ≤ âge \u003C 50 ans)'; }\n    else if (age \u003C 60) { coeff = 0.66; detail = 'Coeff. 0,66\u002Fan (50 ≤ âge \u003C 60 ans)'; }\n    else { coeff = 0.55; detail = 'Coeff. 0,55\u002Fan (âge ≥ 60 ans)'; }\n    mois = 1.5 + (anc - 5) * coeff;\n    if (mois > 18) mois = 18;\n    detail += ' — 1,5 + (' + anc + ' − 5) × ' + coeff + ' = ' + mois.toFixed(2) + ' mois' + (mois >= 18 ? ' (plafonné 18)' : '');\n  }\n\n  const montant = mois * sal;\n\n  \u002F* Legal baseline L1234-9 *\u002F\n  let moisLegal = 0;\n  if (anc >= 8\u002F12) {\n    if (anc \u003C= 10) moisLegal = anc * 0.25;\n    else moisLegal = (10 * 0.25) + (anc - 10) * (1 \u002F 3);\n  }\n  const montantLegal = moisLegal * sal;\n  const gain = montant - montantLegal;\n\n  setVal('ind-result', mois === 0 ? '0 €' : fmtDec.format(montant));\n  setVal('ind-detail', detail);\n  setVal('ind-mois', mois.toFixed(2) + ' mois');\n  setVal('ind-legal', fmtDec.format(montantLegal));\n  setVal('ind-gain', (gain >= 0 ? '+' : '') + fmtDec.format(gain));\n}\n\n\u002F* TAB 2: Preavis *\u002F\nfunction computePreavis() {\n  const anc = +el('pre-anc').value;\n  setVal('pre-anc-val', anc + ' an' + (anc > 1 ? 's' : ''));\n\n  const ccn = anc \u003C 2 ? '2 mois' : '3 mois';\n  const legal = '2 mois';\n  const detail = anc \u003C 2\n    ? 'Ancienneté \u003C 2 ans — 2 mois (conforme minimum légal L1234-1)'\n    : 'Ancienneté ≥ 2 ans — 3 mois CCN (légal : 2 mois pour les cadres)';\n\n  setVal('pre-result', ccn);\n  setVal('pre-detail', detail);\n  setVal('pre-legal', legal);\n}\n\n\u002F* TAB 3: Grille salariale *\u002F\nfunction computeSalaire() {\n  const key = el('sal-niveau').value;\n  const h = +el('sal-heures').value;\n  setVal('sal-h-val', h + ' h');\n\n  const parts = key.split('-');\n  const row = GRID.find(r => r.niv === +parts[0] && r.ech === +parts[1]);\n  if (!row) return;\n\n  const prorata = h \u002F 35;\n  const mensuel = Math.round(row.annuel \u002F 12 * prorata);\n  const smic = 1802;\n  const gap = mensuel - smic;\n\n  setVal('sal-result', fmt.format(mensuel));\n  setVal('sal-detail', 'Niveau ' + row.niv + ', Échelon ' + row.ech + ' — grille 2025 (accord 18 fév. 2025, +1,5 %)');\n  setVal('sal-annuel', fmt.format(row.annuel));\n  setVal('sal-smic-gap', '+' + fmt.format(gap));\n\n  const tbody = el('sal-tbody');\n  tbody.innerHTML = GRID.map(r => {\n    const active = r.niv === +parts[0] && r.ech === +parts[1];\n    const men = Math.round(r.annuel \u002F 12);\n    return '\u003Ctr class=\"' + (active ? 'highlight' : '') + '\">' +\n      '\u003Ctd>Niveau ' + r.niv + '\u003C\u002Ftd>' +\n      '\u003Ctd>Échelon ' + r.ech + '\u003C\u002Ftd>' +\n      '\u003Ctd>' + fmt.format(r.annuel) + '\u003C\u002Ftd>' +\n      '\u003Ctd>' + fmt.format(men) + '\u003C\u002Ftd>' +\n      '\u003C\u002Ftr>';\n  }).join('');\n}\n\n\u002F* TAB 4: Conges *\u002F\nfunction computeConges() {\n  const anc = +el('cong-anc').value;\n  setVal('cong-anc-val', anc + ' an' + (anc > 1 ? 's' : ''));\n\n  let extra = 0;\n  if (anc >= 30) extra = 3;\n  else if (anc >= 25) extra = 2;\n  else if (anc >= 20) extra = 1;\n\n  const total = 30 + extra;\n  const semaines = (total \u002F 6).toFixed(1);\n\n  setVal('cong-result', total + ' jours ouvrables');\n  setVal('cong-detail', extra === 0\n    ? '30 jours légaux — ancienneté \u003C 20 ans, pas de congé supplémentaire CCN'\n    : '30 j. légaux + ' + extra + ' j. ancienneté CCN (≥ ' + (anc >= 30 ? 30 : anc >= 25 ? 25 : 20) + ' ans)');\n  setVal('cong-extra', '+' + extra + ' j.');\n  setVal('cong-semaines', semaines + ' sem.');\n}\n\n\u002F* TAB 5: Temps de travail \u002F Forfait *\u002F\nfunction computeHeures() {\n  const sal = +el('heur-sal').value;\n  const rtt = +el('heur-rtt').value;\n  setVal('heur-sal-val', fmt.format(sal));\n  setVal('heur-rtt-val', rtt + ' j');\n\n  const forfaitJours = 218;\n  const travailles = forfaitJours - rtt;\n  const valJour = (sal * 12) \u002F forfaitJours;\n\n  setVal('heur-result', fmtDec.format(valJour) + ' \u002F jour');\n  setVal('heur-detail', 'Forfait ' + forfaitJours + ' j\u002Fan — valeur = (' + fmt.format(sal) + ' × 12) ÷ ' + forfaitJours);\n  setVal('heur-jours', (forfaitJours - rtt) + ' j');\n}\n\n\u002F* TAB 6: Periode d'essai *\u002F\nlet essaiRenouv = 0;\nfunction computeEssai() {\n  const duree = essaiRenouv === 0 ? 3 : 6;\n  setVal('essai-result', duree + ' mois');\n  setVal('essai-detail', essaiRenouv === 0\n    ? 'Période initiale seule — 3 mois de travail effectif'\n    : 'Période initiale (3 mois) + renouvellement (jusqu\\'à 3 mois) — maximum conventionnel : 6 mois');\n}\n\n\u002F* Pills for essai *\u002F\ndocument.querySelectorAll('#essai-pills .pill').forEach(p => {\n  p.addEventListener('click', () => {\n    document.querySelectorAll('#essai-pills .pill').forEach(x => x.classList.remove('active'));\n    p.classList.add('active');\n    essaiRenouv = +p.dataset.val;\n    computeEssai();\n  });\n});\n\n\u002F* Input listeners *\u002F\n['ind-sal', 'ind-anc', 'ind-age'].forEach(id => el(id).addEventListener('input', computeIndemnite));\nel('pre-anc').addEventListener('input', computePreavis);\nel('sal-niveau').addEventListener('change', computeSalaire);\nel('sal-heures').addEventListener('input', computeSalaire);\nel('cong-anc').addEventListener('input', computeConges);\n['heur-sal', 'heur-rtt'].forEach(id => el(id).addEventListener('input', computeHeures));\n\n\u002F* Initial renders *\u002F\ncomputeIndemnite();\ncomputePreavis();\ncomputeSalaire();\ncomputeConges();\ncomputeHeures();\ncomputeEssai();\n\n\u002F* Tab system *\u002F\nfunction activate(id) {\n  document.querySelectorAll('.tab-btn').forEach(t => {\n    const ok = t.dataset.tab === id;\n    t.classList.toggle('active', ok);\n    t.setAttribute('aria-selected', ok ? 'true' : 'false');\n  });\n  document.querySelectorAll('.panel').forEach(p => {\n    p.classList.toggle('active', p.dataset.panel === id);\n  });\n  if (location.hash !== '#' + id) location.hash = id;\n  requestAnimationFrame(() => window.dispatchEvent(new Event('resize')));\n}\n\ndocument.querySelectorAll('.tab-btn').forEach(t =>\n  t.addEventListener('click', () => activate(t.dataset.tab))\n);\n\nconst validTabs = ['indemnite', 'preavis', 'salaire', 'conges', 'heures', 'essai'];\nconst hashTab = location.hash.slice(1);\nactivate(validTabs.includes(hashTab) ? hashTab : 'indemnite');\n\n\u002F* Lucide icons *\u002F\nif (window.lucide) lucide.createIcons();\ndocument.addEventListener('DOMContentLoaded', () => { if (window.lucide) lucide.createIcons(); });\n\n\u002F* ResizeObserver — iframe contract *\u002F\nconst ro = new ResizeObserver(() => {\n  const h = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight);\n  parent.postMessage({ type: 'resize', height: h }, '*');\n});\nro.observe(document.documentElement);\n\u003C\u002Fscript>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n","generated","juridique","consumer","both","https:\u002F\u002Fpub-bdebbd2dad294475a2da0eb657815b6b.r2.dev\u002Ftools\u002Fccn-cadres-des-industries-de-carrieres-et-materiaux-5d9873b007.webp",[]]