[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"footer-root-categories-fr-FR":3,"tool-content-ccn-entreprises-du-bureau-et-du-numerique-commerces-et-services-fr":83,"footer-cities-fr":143},[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":109,"tool_html":137,"source":138,"category":139,"audience":140,"publish_mode":141,"hero_image":142,"hero_image_alt":85},"ccn-entreprises-du-bureau-et-du-numerique-commerces-et-services","CCN des entreprises du bureau et du numérique – Commerces et services — calculateur complet","Calculateur CCN Entreprises du Bureau et du Numérique IDCC 1539 | Expert Zoom","Outil interactif couvrant indemnité de licenciement, préavis, grille salariale, 13e mois et congés de la CCN des entreprises du bureau et du numérique (IDCC 1539).","Ce calculateur couvre les 5 principales dérogations de la CCN des entreprises du bureau et du numérique (IDCC 1539) : indemnité de licenciement (1\u002F5 mois\u002Fan ≤ 10 ans, plancher 1,5 mois), préavis cadres (3 mois), grille de 12 niveaux salariaux 2025, 13e mois obligatoire et prime d'ancienneté de 3 à 12 %, et jours de congés supplémentaires selon l'ancienneté.",[90],{"name":91,"@type":92,"about":93,"author":97,"@context":100,"isPartOf":101,"inLanguage":104,"description":105,"operatingSystem":106,"applicationCategory":107,"isAccessibleForFree":108},"Calculateur CCN Entreprises du Bureau et du Numérique — IDCC 1539","WebApplication",{"name":94,"@type":95,"identifier":96},"Convention collective des entreprises du bureau et du numérique – Commerces et services","Thing","IDCC 1539",{"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 de salaires, le 13e mois et les congés de la convention collective des entreprises du bureau et du numérique (IDCC 1539).","All","FinanceApplication",true,[110,113,116,119,122,125,128,131,134],{"a":111,"q":112},"La CCN 1539 prévoit 1\u002F5 de mois de salaire brut par année d'ancienneté pour les 10 premières années, puis 1\u002F3 au-delà. Un plancher de 1,5 mois est garanti après 5 ans de service. Le salaire de référence est le plus favorable entre 1\u002F12 des 12 derniers mois et 1\u002F3 des 3 derniers mois.","Comment est calculée l'indemnité de licenciement dans la CCN des entreprises du bureau et du numérique (IDCC 1539) ?",{"a":114,"q":115},"Pour les cadres, la CCN des entreprises du bureau et du numérique (IDCC 1539) prévoit un préavis de 3 mois, quelle que soit l'ancienneté — contre 2 mois légaux. Pour les non-cadres, le préavis reste conforme au code du travail (1 mois entre 6 mois et 2 ans d'ancienneté, 2 mois au-delà).","Quelle est la durée du préavis pour un cadre dans la CCN 1539 ?",{"a":117,"q":118},"La grille 2025 (avenant en vigueur au 1er septembre 2025) comporte 12 niveaux, du coefficient 140 (niveau A1 : 1 835 € brut\u002Fmois) au coefficient 500 (niveau C4 : 4 720 € brut\u002Fmois). Les niveaux B et C dépassent largement le SMIC.","Quelle est la grille de salaires de la CCN 1539 en 2025 ?",{"a":120,"q":121},"Oui. La convention collective des entreprises du bureau et du numérique impose le versement d'un 13e mois en décembre, calculé au prorata des mois travaillés dans l'année. Ce bonus n'est pas prévu par le code du travail.","Y a-t-il un 13e mois obligatoire dans la CCN 1539 ?",{"a":123,"q":124},"Oui. La CCN 1539 prévoit une prime d'ancienneté mensuelle de 3 % du salaire de base à partir de 3 ans, 6 % à 6 ans, 9 % à 9 ans et 12 % à partir de 15 ans d'ancienneté. Cette prime est proratisée pour les salariés à temps partiel.","La CCN 1539 prévoit-elle une prime d'ancienneté ?",{"a":126,"q":127},"Oui. Au-delà des 25 jours ouvrés légaux, la CCN 1539 accorde 1 jour supplémentaire à partir de 20 ans d'ancienneté, 2 jours à partir de 25 ans et 3 jours à partir de 30 ans.","Des jours de congés supplémentaires sont-ils prévus par la CCN 1539 ?",{"a":129,"q":130},"Non. La CCN 1539 applique les taux légaux : +25 % pour les 8 premières heures supplémentaires hebdomadaires (36e à 43e heure) et +50 % au-delà. Aucune déviation par rapport au code du travail sur ce point.","Les heures supplémentaires sont-elles majorées différemment dans la CCN 1539 ?",{"a":132,"q":133},"La CCN IDCC 1539 couvre les entreprises dont l'activité principale relève du commerce et des services du bureau et du numérique : distribution de matériel informatique et bureautique, papeterie, librairie professionnelle, services associés (maintenance, formation). Elle est aussi parfois désignée sous le terme 'Burotica'.","Quel secteur couvre la convention collective IDCC 1539 ?",{"a":135,"q":136},"La convention applicable est mentionnée sur votre bulletin de paie ou dans votre contrat de travail. Vous pouvez aussi rechercher le numéro IDCC 1539 sur le site Légifrance ou interroger votre employeur. La CCN est identifiée dans la convention collective nationale 'Entreprises du bureau et du numérique – Commerces et services'.","Comment vérifier que la CCN 1539 s'applique à mon contrat de travail ?","\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 Entreprises du Bureau et du Numérique — IDCC 1539\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      --surface: #ffffff;\n      --border: #e7e5e4;\n      --accent: #2563eb;\n      --accent-light: #eff6ff;\n      --text: #1c1917;\n      --text-muted: #78716c;\n      --success: #16a34a;\n      --radius: 0.75rem;\n      --shadow: 0 1px 3px 0 rgb(0 0 0 \u002F 0.1), 0 1px 2px -1px rgb(0 0 0 \u002F 0.1);\n    }\n    * { box-sizing: border-box; margin: 0; padding: 0; }\n    body { background: var(--bg); font-family: system-ui, -apple-system, sans-serif; color: var(--text); font-size: 15px; line-height: 1.5; }\n    .tool-root { max-width: 720px; margin: 0 auto; padding: 1.25rem 1rem 2rem; }\n    .tool-header { margin-bottom: 1.25rem; }\n    .tool-header h1 { font-size: 1.15rem; font-weight: 700; color: var(--text); }\n    .tool-header .badge { display: inline-block; background: var(--accent-light); color: var(--accent); font-size: 0.72rem; font-weight: 600; padding: 0.2rem 0.55rem; border-radius: 999px; margin-top: 0.3rem; letter-spacing: 0.03em; }\n    \u002F* Tabs *\u002F\n    .tabs { display: flex; gap: 0.25rem; border-bottom: 2px solid var(--border); margin-bottom: 1.25rem; overflow-x: auto; scrollbar-width: none; padding-bottom: 0; flex-wrap: nowrap; }\n    .tabs::-webkit-scrollbar { display: none; }\n    .tab-btn { display: flex; align-items: center; gap: 0.4rem; padding: 0.55rem 0.9rem; border: none; background: none; cursor: pointer; font-size: 0.82rem; font-weight: 500; color: var(--text-muted); border-bottom: 2px solid transparent; margin-bottom: -2px; white-space: nowrap; transition: color 0.15s, border-color 0.15s; border-radius: 0.25rem 0.25rem 0 0; }\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 i { width: 14px; height: 14px; }\n    \u002F* Panels *\u002F\n    .panel { display: none; }\n    .panel.visible { display: block; }\n    \u002F* Rule callout *\u002F\n    .rule-callout { display: flex; gap: 0.65rem; align-items: flex-start; background: var(--accent-light); border: 1px solid #bfdbfe; border-radius: var(--radius); padding: 0.85rem 1rem; margin-bottom: 1.25rem; }\n    .rule-callout i { color: var(--accent); flex-shrink: 0; margin-top: 0.1rem; width: 16px; height: 16px; }\n    .rule-callout p { font-size: 0.83rem; color: #1e3a5f; line-height: 1.5; }\n    .rule-callout strong { color: var(--accent); }\n    \u002F* Form *\u002F\n    .form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; margin-bottom: 1.25rem; }\n    @media (max-width: 480px) { .form-grid { grid-template-columns: 1fr; } }\n    .form-full { grid-column: 1 \u002F -1; }\n    .field label { display: block; font-size: 0.78rem; font-weight: 600; color: var(--text-muted); margin-bottom: 0.35rem; letter-spacing: 0.04em; text-transform: uppercase; }\n    .field input[type=range] { width: 100%; accent-color: var(--accent); cursor: pointer; }\n    .field .val-display { font-size: 0.9rem; font-weight: 700; color: var(--accent); font-variant-numeric: tabular-nums; margin-top: 0.2rem; }\n    .field select { width: 100%; padding: 0.5rem 0.65rem; border: 1px solid var(--border); border-radius: 0.5rem; font-size: 0.88rem; background: var(--surface); color: var(--text); cursor: pointer; }\n    .field select:focus { outline: 2px solid var(--accent); outline-offset: 1px; }\n    \u002F* Pills toggle *\u002F\n    .pills { display: flex; gap: 0.4rem; flex-wrap: wrap; margin-top: 0.35rem; }\n    .pill { padding: 0.35rem 0.75rem; border: 1px solid var(--border); border-radius: 999px; font-size: 0.8rem; cursor: pointer; background: var(--surface); color: var(--text); transition: all 0.15s; }\n    .pill.active { background: var(--accent); color: #fff; border-color: var(--accent); font-weight: 600; }\n    \u002F* Result card *\u002F\n    .result-card { background: var(--surface); border: 1.5px solid var(--border); border-radius: var(--radius); padding: 1.1rem 1.25rem; box-shadow: var(--shadow); }\n    .result-card .result-label { font-size: 0.75rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; color: var(--text-muted); margin-bottom: 0.35rem; }\n    .result-card .result-value { font-size: 1.75rem; font-weight: 800; color: var(--success); font-variant-numeric: tabular-nums; }\n    .result-card .result-detail { font-size: 0.8rem; color: var(--text-muted); margin-top: 0.5rem; line-height: 1.5; }\n    .result-card .result-detail strong { color: var(--text); }\n    .result-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 0.75rem; margin-top: 0.5rem; }\n    .result-cell { background: var(--bg); border-radius: 0.5rem; padding: 0.65rem 0.85rem; }\n    .result-cell .rc-label { font-size: 0.72rem; color: var(--text-muted); font-weight: 500; margin-bottom: 0.2rem; }\n    .result-cell .rc-val { font-size: 1rem; font-weight: 700; color: var(--text); font-variant-numeric: tabular-nums; }\n    \u002F* Table *\u002F\n    .grid-table { width: 100%; border-collapse: collapse; font-size: 0.82rem; margin-top: 0.5rem; }\n    .grid-table th { background: var(--bg); padding: 0.5rem 0.65rem; text-align: left; font-weight: 600; font-size: 0.75rem; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.04em; border-bottom: 1px solid var(--border); }\n    .grid-table td { padding: 0.45rem 0.65rem; border-bottom: 1px solid var(--border); color: var(--text); }\n    .grid-table tr.highlight td { background: var(--accent-light); font-weight: 600; color: var(--accent); }\n    .grid-table tr:last-child td { border-bottom: none; }\n    \u002F* Disclaimer *\u002F\n    .disclaimer { margin-top: 1.5rem; padding: 0.75rem 1rem; background: #f5f5f4; border-radius: 0.5rem; font-size: 0.75rem; color: var(--text-muted); line-height: 1.6; border: 1px solid var(--border); }\n    .disclaimer a { color: var(--accent); text-decoration: none; }\n    .disclaimer a:hover { text-decoration: underline; }\n    .section-sep { height: 1px; background: var(--border); margin: 1rem 0; }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\u003Cbody>\n\u003C!-- CCN IDCC 1539 — deviations\n     indemnite: L1234-9 → 1\u002F5 mois\u002Fan (≤10 ans) au lieu de 1\u002F4, 1\u002F3 au-delà; minimum 1.5 mois après 5 ans\n     preavis: L1234-1 → cadres: 3 mois (vs 2 mois légal)\n     salaire-min: grille 12 niveaux A1-C4 (avenant 2025)\n     prime-annuelle: 13e mois obligatoire + prime ancienneté 3\u002F6\u002F9\u002F12% (art. CCN 1539)\n     conges: jours supplémentaires ancienneté 20\u002F25\u002F30 ans\n     heures-supp: conforme L3121-36 — aucune déviation, onglet non émis\n     Source: Légifrance KALICONT000005635434 + avenants salaires 2025 -->\n\u003Cmain class=\"tool-root\">\n  \u003Cdiv class=\"tool-header\">\n    \u003Ch1>Calculateur — CCN Entreprises du Bureau et du Numérique\u003C\u002Fh1>\n    \u003Cspan class=\"badge\">IDCC 1539\u003C\u002Fspan>\n  \u003C\u002Fdiv>\n\n  \u003C!-- Tabs -->\n  \u003Cdiv class=\"tabs\" role=\"tablist\">\n    \u003Cbutton class=\"tab-btn\" data-tab=\"indemnite\" role=\"tab\" aria-selected=\"false\">\n      \u003Ci data-lucide=\"calculator\">\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-min\" role=\"tab\" aria-selected=\"false\">\n      \u003Ci data-lucide=\"bar-chart-2\">\u003C\u002Fi> Grille salariale\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"prime-annuelle\" role=\"tab\" aria-selected=\"false\">\n      \u003Ci data-lucide=\"gift\">\u003C\u002Fi> 13\u003Csup style=\"font-size:0.7em\">e\u003C\u002Fsup> mois &amp; ancienneté\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  \u003C\u002Fdiv>\n\n  \u003C!-- ── PANEL: INDEMNITÉ ── -->\n  \u003Cdiv class=\"panel\" data-panel=\"indemnite\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cp>La CCN 1539 prévoit \u003Cstrong>1\u002F5 de mois de salaire par année (≤ 10 ans)\u003C\u002Fstrong>, contre 1\u002F4 légal — puis 1\u002F3 par année au-delà de 10 ans, comme le code du travail. Plancher : \u003Cstrong>1,5 mois après 5 ans d'ancienneté.\u003C\u002Fstrong>\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"form-grid\">\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Salaire brut mensuel\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"ind-salaire\" min=\"1800\" max=\"8000\" step=\"50\" value=\"2800\">\n        \u003Cdiv class=\"val-display\" id=\"ind-salaire-val\">2 800 €\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Ancienneté (années)\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"ind-anc\" min=\"1\" max=\"40\" step=\"1\" value=\"8\">\n        \u003Cdiv class=\"val-display\" id=\"ind-anc-val\">8 ans\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field form-full\">\n        \u003Clabel>Motif de rupture\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"ind-motif\">\n          \u003Cspan class=\"pill active\" data-motif=\"licenciement\">Licenciement\u003C\u002Fspan>\n          \u003Cspan class=\"pill\" data-motif=\"retraite\">Mise à la retraite\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card\" id=\"ind-result\">\n      \u003Cdiv class=\"result-label\">Indemnité de licenciement (brut)\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"ind-montant\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-detail\" id=\"ind-detail\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"section-sep\">\u003C\u002Fdiv>\n    \u003Cp style=\"font-size:0.8rem;color:var(--text-muted)\">Calcul sur la base la plus favorable : 1\u002F12 des 12 derniers mois ou 1\u002F3 des 3 derniers mois.\u003C\u002Fp>\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>Pour les \u003Cstrong>cadres\u003C\u002Fstrong>, la CCN 1539 impose un préavis de \u003Cstrong>3 mois\u003C\u002Fstrong> (contre 2 mois légaux). Pour les non-cadres, le préavis est conforme à l'article L1234-1.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"form-grid\">\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Statut\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"preavis-statut\">\n          \u003Cspan class=\"pill active\" data-statut=\"non-cadre\">Non-cadre\u003C\u002Fspan>\n          \u003Cspan class=\"pill\" data-statut=\"cadre\">Cadre\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Ancienneté (années)\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"preavis-anc\" min=\"0\" max=\"30\" step=\"1\" value=\"3\">\n        \u003Cdiv class=\"val-display\" id=\"preavis-anc-val\">3 ans\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field form-full\">\n        \u003Clabel>Type de rupture\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"preavis-type\">\n          \u003Cspan class=\"pill active\" data-ptype=\"licenciement\">Licenciement\u003C\u002Fspan>\n          \u003Cspan class=\"pill\" data-ptype=\"demission\">Démission\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card\" id=\"preavis-result\">\n      \u003Cdiv class=\"result-label\">Durée du préavis\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"preavis-duree\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-detail\" id=\"preavis-detail\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ── PANEL: GRILLE SALARIALE ── -->\n  \u003Cdiv class=\"panel\" data-panel=\"salaire-min\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cp>La CCN 1539 publie une \u003Cstrong>grille de 12 niveaux (A1 à C4)\u003C\u002Fstrong> avec des minima conventionnels supérieurs au SMIC pour les niveaux B et C. Avenant salaires en vigueur au \u003Cstrong>1er septembre 2025\u003C\u002Fstrong>.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"form-grid\">\n      \u003Cdiv class=\"field form-full\">\n        \u003Clabel>Niveau \u002F Échelon\u003C\u002Flabel>\n        \u003Cselect id=\"sm-niveau\">\n          \u003Coption value=\"A1\">A1 — Coefficient 140\u003C\u002Foption>\n          \u003Coption value=\"A2\">A2 — Coefficient 150\u003C\u002Foption>\n          \u003Coption value=\"A3\">A3 — Coefficient 170\u003C\u002Foption>\n          \u003Coption value=\"A4\">A4 — Coefficient 190\u003C\u002Foption>\n          \u003Coption value=\"A5\">A5 — Coefficient 220\u003C\u002Foption>\n          \u003Coption value=\"B1\">B1 — Coefficient 240\u003C\u002Foption>\n          \u003Coption value=\"B2\">B2 — Coefficient 260\u003C\u002Foption>\n          \u003Coption value=\"B3\">B3 — Coefficient 280\u003C\u002Foption>\n          \u003Coption value=\"C1\">C1 — Coefficient 300\u003C\u002Foption>\n          \u003Coption value=\"C2\">C2 — Coefficient 360\u003C\u002Foption>\n          \u003Coption value=\"C3\">C3 — Coefficient 450\u003C\u002Foption>\n          \u003Coption value=\"C4\">C4 — Coefficient 500\u003C\u002Foption>\n        \u003C\u002Fselect>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Heures hebdomadaires\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"sm-heures\" min=\"24\" max=\"39\" step=\"0.5\" value=\"35\">\n        \u003Cdiv class=\"val-display\" id=\"sm-heures-val\">35 h\u003C\u002Fdiv>\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=\"sm-montant\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-detail\" id=\"sm-detail\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"section-sep\">\u003C\u002Fdiv>\n    \u003Ctable class=\"grid-table\" id=\"sm-table\">\n      \u003Cthead>\n        \u003Ctr>\n          \u003Cth>Niveau\u003C\u002Fth>\n          \u003Cth>Coeff.\u003C\u002Fth>\n          \u003Cth>Salaire mensuel brut (35h)\u003C\u002Fth>\n        \u003C\u002Ftr>\n      \u003C\u002Fthead>\n      \u003Ctbody id=\"sm-tbody\">\u003C\u002Ftbody>\n    \u003C\u002Ftable>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ── PANEL: 13E MOIS & ANCIENNETÉ ── -->\n  \u003Cdiv class=\"panel\" data-panel=\"prime-annuelle\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cp>La CCN 1539 impose un \u003Cstrong>13\u003Csup>e\u003C\u002Fsup> mois obligatoire\u003C\u002Fstrong> (versé en décembre) et une \u003Cstrong>prime d'ancienneté\u003C\u002Fstrong> de 3 % à 12 % selon l'ancienneté — avantages non prévus par le code du travail.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"form-grid\">\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Salaire brut mensuel de base\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"pa-salaire\" min=\"1800\" max=\"8000\" step=\"50\" value=\"2500\">\n        \u003Cdiv class=\"val-display\" id=\"pa-salaire-val\">2 500 €\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Ancienneté (années)\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"pa-anc\" min=\"0\" max=\"35\" step=\"1\" value=\"5\">\n        \u003Cdiv class=\"val-display\" id=\"pa-anc-val\">5 ans\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field form-full\">\n        \u003Clabel>Mois travaillés dans l'année (pro rata 13e mois)\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"pa-mois\" min=\"1\" max=\"12\" step=\"1\" value=\"12\">\n        \u003Cdiv class=\"val-display\" id=\"pa-mois-val\">12 mois\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card\">\n      \u003Cdiv class=\"result-grid\">\n        \u003Cdiv class=\"result-cell\">\n          \u003Cdiv class=\"rc-label\">Prime d'ancienneté mensuelle\u003C\u002Fdiv>\n          \u003Cdiv class=\"rc-val\" id=\"pa-prime-anc\">—\u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n        \u003Cdiv class=\"result-cell\">\n          \u003Cdiv class=\"rc-label\">13\u003Csup>e\u003C\u002Fsup> mois (pro rata)\u003C\u002Fdiv>\n          \u003Cdiv class=\"rc-val\" id=\"pa-13mois\">—\u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n        \u003Cdiv class=\"result-cell\">\n          \u003Cdiv class=\"rc-label\">Salaire brut annuel total\u003C\u002Fdiv>\n          \u003Cdiv class=\"rc-val\" id=\"pa-total\">—\u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"result-detail\" id=\"pa-detail\" style=\"margin-top:0.75rem\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\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>Au-delà des \u003Cstrong>25 jours ouvrés légaux\u003C\u002Fstrong>, la CCN 1539 accorde des \u003Cstrong>jours supplémentaires selon l'ancienneté\u003C\u002Fstrong> : +1 jour à 20 ans, +2 jours à 25 ans, +3 jours à 30 ans.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"form-grid\">\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Ancienneté dans l'entreprise (années)\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"cg-anc\" min=\"0\" max=\"35\" step=\"1\" value=\"10\">\n        \u003Cdiv class=\"val-display\" id=\"cg-anc-val\">10 ans\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Temps de travail\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"cg-temps\">\n          \u003Cspan class=\"pill active\" data-temps=\"plein\">Temps plein\u003C\u002Fspan>\n          \u003Cspan class=\"pill\" data-temps=\"partiel\">Temps partiel\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field form-full\" id=\"cg-quotite-wrap\" style=\"display:none\">\n        \u003Clabel>Quotité temps partiel (%)\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"cg-quotite\" min=\"20\" max=\"90\" step=\"5\" value=\"80\">\n        \u003Cdiv class=\"val-display\" id=\"cg-quotite-val\">80 %\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card\">\n      \u003Cdiv class=\"result-grid\">\n        \u003Cdiv class=\"result-cell\">\n          \u003Cdiv class=\"rc-label\">Congés légaux\u003C\u002Fdiv>\n          \u003Cdiv class=\"rc-val\" id=\"cg-legal\">25 j ouvrés\u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n        \u003Cdiv class=\"result-cell\">\n          \u003Cdiv class=\"rc-label\">Jours supplémentaires CCN\u003C\u002Fdiv>\n          \u003Cdiv class=\"rc-val\" id=\"cg-supp\">—\u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n        \u003Cdiv class=\"result-cell\">\n          \u003Cdiv class=\"rc-label\">Total congés annuels\u003C\u002Fdiv>\n          \u003Cdiv class=\"rc-val\" id=\"cg-total\">—\u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"result-detail\" id=\"cg-detail\" style=\"margin-top:0.75rem\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- Disclaimer (shared) -->\n  \u003Cp class=\"disclaimer\">\n    \u003Ci data-lucide=\"shield-check\" style=\"width:12px;height:12px;vertical-align:middle;margin-right:4px\">\u003C\u002Fi>\n    Calcul indicatif basé sur la CCN IDCC 1539 (Entreprises du Bureau et du Numérique).\n    Source : \u003Ca href=\"https:\u002F\u002Fwww.legifrance.gouv.fr\u002Fconv_coll\u002Fid\u002FKALICONT000005635434\" target=\"_blank\" rel=\"noopener\">Légifrance\u003C\u002Fa> + avenants salaires 2025.\n    Pour toute validation légale\n  \u003C\u002Fp>\n\u003C\u002Fmain>\n\n\u003Cscript>\n\u002F\u002F ── State ──\nconst state = {\n  indemnite: { salaire: 2800, anc: 8, motif: 'licenciement' },\n  preavis: { statut: 'non-cadre', anc: 3, ptype: 'licenciement' },\n  salaireMin: { niveau: 'A1', heures: 35 },\n  primeAnnuelle: { salaire: 2500, anc: 5, mois: 12 },\n  conges: { anc: 10, temps: 'plein', quotite: 80 }\n};\n\n\u002F\u002F ── Salary grid (2025) ──\nconst GRID = [\n  { niveau: 'A1', coeff: 140, salaire: 1835 },\n  { niveau: 'A2', coeff: 150, salaire: 1855 },\n  { niveau: 'A3', coeff: 170, salaire: 1875 },\n  { niveau: 'A4', coeff: 190, salaire: 1905 },\n  { niveau: 'A5', coeff: 220, salaire: 1970 },\n  { niveau: 'B1', coeff: 240, salaire: 2075 },\n  { niveau: 'B2', coeff: 260, salaire: 2185 },\n  { niveau: 'B3', coeff: 280, salaire: 2385 },\n  { niveau: 'C1', coeff: 300, salaire: 2530 },\n  { niveau: 'C2', coeff: 360, salaire: 3280 },\n  { niveau: 'C3', coeff: 450, salaire: 4020 },\n  { niveau: 'C4', coeff: 500, salaire: 4720 },\n];\n\n\u002F\u002F ── Formatters ──\nconst fmt = new Intl.NumberFormat('fr-FR', { style: 'currency', currency: 'EUR', maximumFractionDigits: 0 });\nconst fmtDec = new Intl.NumberFormat('fr-FR', { style: 'currency', currency: 'EUR', minimumFractionDigits: 2, maximumFractionDigits: 2 });\n\n\u002F\u002F ── Compute: Indemnité ──\nfunction computeIndemnite() {\n  const { salaire, anc, motif } = state.indemnite;\n  if (anc \u003C 1) {\n    document.getElementById('ind-montant').textContent = '0 €';\n    document.getElementById('ind-detail').textContent = \"Ancienneté inférieure à 1 an : aucune indemnité légale.\";\n    return;\n  }\n  if (motif === 'retraite' && anc \u003C 2) {\n    document.getElementById('ind-montant').textContent = '0 €';\n    document.getElementById('ind-detail').textContent = \"Mise à la retraite : ancienneté \u003C 2 ans, aucune indemnité.\";\n    return;\n  }\n  \u002F\u002F CCN 1539: 1\u002F5 par an ≤10 ans, puis 1\u002F5 + 2\u002F15 = 1\u002F3 par an >10 ans\n  let montant = 0;\n  const an1 = Math.min(anc, 10);\n  const an2 = Math.max(anc - 10, 0);\n  montant = salaire * ((1\u002F5) * an1 + (1\u002F3) * an2);\n  \u002F\u002F Minimum: 1.5 mois après 5 ans\n  if (anc >= 5) {\n    montant = Math.max(montant, salaire * 1.5);\n  }\n  \u002F\u002F Mise à la retraite: même calcul, légalement basé sur art. L1237-19\n  if (motif === 'retraite') {\n    \u002F\u002F même formule, pas de spécificité CCN pour la mise à la retraite\n  }\n  const detail = `${an1} an${an1>1?'s':''} × 1\u002F5 = ${fmtDec.format(salaire\u002F5*an1)}` +\n    (an2 > 0 ? ` + ${an2} an${an2>1?'s':''} × 1\u002F3 = ${fmtDec.format(salaire\u002F3*an2)}` : '') +\n    (anc >= 5 ? `. Plancher conventionnel : 1,5 mois = ${fmtDec.format(salaire*1.5)}.` : '');\n  document.getElementById('ind-montant').textContent = fmt.format(Math.round(montant));\n  document.getElementById('ind-detail').textContent = detail;\n}\n\n\u002F\u002F ── Compute: Préavis ──\nfunction computePreavis() {\n  const { statut, anc, ptype } = state.preavis;\n  let duree = '';\n  let detail = '';\n  if (statut === 'cadre') {\n    duree = '3 mois';\n    detail = 'Cadres CCN 1539 : 3 mois quel que soit le type de rupture (vs 2 mois légaux). Un cadre ayant retrouvé un emploi peut être dispensé de la 2e moitié du préavis.';\n  } else {\n    \u002F\u002F Non-cadre: L1234-1\n    if (anc \u003C 0.5) {\n      duree = ptype === 'licenciement' ? '15 jours' : '— (pas de préavis)';\n      detail = 'Ancienneté \u003C 6 mois : préavis de 15 jours en cas de licenciement (usage).';\n    } else if (anc \u003C 2) {\n      duree = '1 mois';\n      detail = 'De 6 mois à moins de 2 ans : 1 mois (conforme L1234-1).';\n    } else {\n      if (ptype === 'licenciement') {\n        duree = '2 mois';\n        detail = 'Au-delà de 2 ans, licenciement : 2 mois (conforme L1234-1 — pas de déviation CCN pour les non-cadres).';\n      } else {\n        duree = '1 mois';\n        detail = 'Au-delà de 2 ans, démission : 1 mois (usage conventionnel).';\n      }\n    }\n  }\n  document.getElementById('preavis-duree').textContent = duree;\n  document.getElementById('preavis-detail').textContent = detail;\n}\n\n\u002F\u002F ── Compute: Salaire min ──\nfunction computeSalaireMin() {\n  const { niveau, heures } = state.salaireMin;\n  const entry = GRID.find(g => g.niveau === niveau);\n  if (!entry) return;\n  const base35 = entry.salaire;\n  const mensuel = base35 * (heures \u002F 35);\n  document.getElementById('sm-montant').textContent = fmt.format(Math.round(mensuel));\n  document.getElementById('sm-detail').textContent =\n    `Niveau ${entry.niveau} (coefficient ${entry.coeff}) — Base 35h : ${fmt.format(base35)} → proraté ${heures}h : ${fmt.format(Math.round(mensuel))}`;\n  \u002F\u002F Render table\n  const tbody = document.getElementById('sm-tbody');\n  tbody.innerHTML = '';\n  GRID.forEach(g => {\n    const tr = document.createElement('tr');\n    if (g.niveau === niveau) tr.classList.add('highlight');\n    tr.innerHTML = `\u003Ctd>${g.niveau}\u003C\u002Ftd>\u003Ctd>${g.coeff}\u003C\u002Ftd>\u003Ctd>${fmt.format(g.salaire)}\u003C\u002Ftd>`;\n    tbody.appendChild(tr);\n  });\n}\n\n\u002F\u002F ── Compute: Prime annuelle ──\nfunction computePrimeAnnuelle() {\n  const { salaire, anc, mois } = state.primeAnnuelle;\n  \u002F\u002F Prime ancienneté: 3% à 3 ans, 6% à 6 ans, 9% à 9 ans, 12% à 15 ans\n  let txAnc = 0;\n  let palier = '';\n  if (anc >= 15) { txAnc = 0.12; palier = '15 ans → 12 %'; }\n  else if (anc >= 9) { txAnc = 0.09; palier = '9 ans → 9 %'; }\n  else if (anc >= 6) { txAnc = 0.06; palier = '6 ans → 6 %'; }\n  else if (anc >= 3) { txAnc = 0.03; palier = '3 ans → 3 %'; }\n  else { palier = 'Ancienneté \u003C 3 ans : pas de prime d\\'ancienneté'; }\n  const primeAnc = salaire * txAnc;\n  const treizieme = salaire * (mois \u002F 12);\n  const salaireAnnuel = salaire * 12 + primeAnc * 12 + treizieme;\n\n  const fmtMens = v => fmtDec.format(v);\n  document.getElementById('pa-prime-anc').textContent = txAnc > 0 ? fmt.format(Math.round(primeAnc)) + '\u002Fmois' : '0 €';\n  document.getElementById('pa-13mois').textContent = fmt.format(Math.round(treizieme));\n  document.getElementById('pa-total').textContent = fmt.format(Math.round(salaireAnnuel));\n  document.getElementById('pa-detail').textContent =\n    `Prime d'ancienneté : ${palier}${txAnc > 0 ? ' — ' + fmtMens(primeAnc) + '\u002Fmois' : ''}. ` +\n    `13e mois pro rata ${mois}\u002F12 = ${fmt.format(Math.round(treizieme))}.`;\n}\n\n\u002F\u002F ── Compute: Congés ──\nfunction computeConges() {\n  const { anc, temps, quotite } = state.conges;\n  let supps = 0;\n  let palier = '';\n  if (anc >= 30) { supps = 3; palier = '30 ans et + → +3 jours'; }\n  else if (anc >= 25) { supps = 2; palier = '25 ans et + → +2 jours'; }\n  else if (anc >= 20) { supps = 1; palier = '20 ans et + → +1 jour'; }\n  else { palier = 'Ancienneté \u003C 20 ans : pas de jour supplémentaire'; }\n\n  let base = 25;\n  let coeff = temps === 'partiel' ? quotite \u002F 100 : 1;\n  \u002F\u002F Les congés supplémentaires sont accordés en jours entiers (pas proratisés)\n  const legal = temps === 'partiel' ? Math.round(base * coeff) : base;\n  const total = legal + supps;\n\n  document.getElementById('cg-legal').textContent = `${legal} j ouvrés`;\n  document.getElementById('cg-supp').textContent = supps > 0 ? `+${supps} jour${supps>1?'s':''}` : '0 jour';\n  document.getElementById('cg-total').textContent = `${total} j ouvrés`;\n  document.getElementById('cg-detail').textContent =\n    `${palier}. ${temps === 'partiel' ? `Temps partiel ${quotite}% : congés légaux proratisés = ${legal} j.` : 'Congés légaux : 25 jours ouvrés.'} Total : ${total} jours ouvrés\u002Fan.`;\n}\n\n\u002F\u002F ── All compute ──\nfunction computeAll() {\n  computeIndemnite();\n  computePreavis();\n  computeSalaireMin();\n  computePrimeAnnuelle();\n  computeConges();\n}\n\n\u002F\u002F ── Tab activation ──\nconst tabs = document.querySelectorAll('[data-tab]');\nconst panels = document.querySelectorAll('[data-panel]');\n\nfunction activate(id) {\n  tabs.forEach(t => {\n    const active = t.dataset.tab === id;\n    t.classList.toggle('active', active);\n    t.setAttribute('aria-selected', active);\n  });\n  panels.forEach(p => p.classList.toggle('visible', p.dataset.panel === id));\n  if (location.hash !== '#' + id) location.hash = id;\n  requestAnimationFrame(() => {\n    const h = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight);\n    parent.postMessage({ type: 'resize', height: h }, '*');\n  });\n}\n\ntabs.forEach(t => t.addEventListener('click', () => activate(t.dataset.tab)));\nconst hashTab = location.hash.slice(1);\nconst validTabs = Array.from(tabs).map(t => t.dataset.tab);\nactivate(validTabs.includes(hashTab) ? hashTab : validTabs[0]);\n\n\u002F\u002F ── Input bindings: Indemnité ──\nfunction bindSlider(id, valId, unit, stateKey, stateField, fmt2) {\n  const el = document.getElementById(id);\n  const vd = document.getElementById(valId);\n  el.addEventListener('input', () => {\n    state[stateKey][stateField] = parseFloat(el.value);\n    vd.textContent = fmt2 ? fmt2(parseFloat(el.value)) : el.value + ' ' + unit;\n    computeAll();\n  });\n  vd.textContent = fmt2 ? fmt2(parseFloat(el.value)) : el.value + ' ' + unit;\n}\nconst fmtEur = v => new Intl.NumberFormat('fr-FR',{style:'currency',currency:'EUR',maximumFractionDigits:0}).format(v);\nbindSlider('ind-salaire', 'ind-salaire-val', '€', 'indemnite', 'salaire', fmtEur);\nbindSlider('ind-anc', 'ind-anc-val', 'ans', 'indemnite', 'anc');\nbindSlider('preavis-anc', 'preavis-anc-val', 'ans', 'preavis', 'anc');\nbindSlider('sm-heures', 'sm-heures-val', 'h', 'salaireMin', 'heures');\nbindSlider('pa-salaire', 'pa-salaire-val', '€', 'primeAnnuelle', 'salaire', fmtEur);\nbindSlider('pa-anc', 'pa-anc-val', 'ans', 'primeAnnuelle', 'anc');\nbindSlider('pa-mois', 'pa-mois-val', 'mois', 'primeAnnuelle', 'mois');\nbindSlider('cg-anc', 'cg-anc-val', 'ans', 'conges', 'anc');\nbindSlider('cg-quotite', 'cg-quotite-val', '%', 'conges', 'quotite');\n\n\u002F\u002F Pills: indemnité motif\ndocument.querySelectorAll('#ind-motif .pill').forEach(p => {\n  p.addEventListener('click', () => {\n    document.querySelectorAll('#ind-motif .pill').forEach(x => x.classList.remove('active'));\n    p.classList.add('active');\n    state.indemnite.motif = p.dataset.motif;\n    computeAll();\n  });\n});\n\u002F\u002F Pills: préavis statut\ndocument.querySelectorAll('#preavis-statut .pill').forEach(p => {\n  p.addEventListener('click', () => {\n    document.querySelectorAll('#preavis-statut .pill').forEach(x => x.classList.remove('active'));\n    p.classList.add('active');\n    state.preavis.statut = p.dataset.statut;\n    computeAll();\n  });\n});\n\u002F\u002F Pills: préavis type\ndocument.querySelectorAll('#preavis-type .pill').forEach(p => {\n  p.addEventListener('click', () => {\n    document.querySelectorAll('#preavis-type .pill').forEach(x => x.classList.remove('active'));\n    p.classList.add('active');\n    state.preavis.ptype = p.dataset.ptype;\n    computeAll();\n  });\n});\n\u002F\u002F Salaire min select\ndocument.getElementById('sm-niveau').addEventListener('change', e => {\n  state.salaireMin.niveau = e.target.value;\n  computeAll();\n});\n\u002F\u002F Congés temps\ndocument.querySelectorAll('#cg-temps .pill').forEach(p => {\n  p.addEventListener('click', () => {\n    document.querySelectorAll('#cg-temps .pill').forEach(x => x.classList.remove('active'));\n    p.classList.add('active');\n    state.conges.temps = p.dataset.temps;\n    document.getElementById('cg-quotite-wrap').style.display = p.dataset.temps === 'partiel' ? '' : 'none';\n    computeAll();\n  });\n});\n\n\u002F\u002F ── Initial compute ──\ncomputeAll();\n\n\u002F\u002F ── Lucide icons ──\nlucide.createIcons();\n\n\u002F\u002F ── ResizeObserver (iframe contract) ──\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-entreprises-du-bureau-et-du-numerique-commerces-et-services-7caba3c672.webp",[]]