[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"footer-root-categories-fr-FR":3,"tool-content-ccn-bricolage-fr":83,"footer-cities-fr":147},[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":110,"tool_html":141,"source":142,"category":143,"audience":144,"publish_mode":145,"hero_image":146,"hero_image_alt":85},"ccn-bricolage","CCN du bricolage — calculateur complet","Calculateur CCN Bricolage IDCC 1606 | Expert Zoom","Outil interactif couvrant l'indemnité de licenciement, le préavis, la grille salariale et la durée d'essai de la CCN du bricolage (IDCC 1606).","Ce calculateur couvre les 4 principaux points de la convention collective du bricolage (IDCC 1606) qui dévient du droit commun : l'indemnité de licenciement (formule 2 % × salaire annuel × ancienneté, art. 9.2), la durée du préavis par catégorie (1, 2 ou 3 mois), la grille de salaires minima conventionnels (accord mars 2024, coefficients 120 à 600) et la durée d'essai réduite par rapport aux plafonds légaux.",[90],{"name":91,"@type":92,"about":93,"author":98,"@context":101,"isPartOf":102,"inLanguage":105,"description":106,"operatingSystem":107,"applicationCategory":108,"isAccessibleForFree":109},"Calculateur CCN du bricolage — IDCC 1606","WebApplication",{"name":94,"@type":95,"identifier":96,"alternateName":97},"Convention collective nationale du bricolage","Thing","IDCC 1606","CCN Bricolage — brochure JO 3232",{"name":99,"@type":100},"Expert-Zoom","Organization","https:\u002F\u002Fschema.org",{"url":103,"@type":104},"\u002Ffr\u002Fmagazine\u002Fjuridique\u002Fles-conventions-collectives-en-france","Article","fr","Outil interactif couvrant l'indemnité de licenciement, le préavis, la grille salariale et la durée d'essai de la convention collective nationale du bricolage (IDCC 1606, brochure JO 3232).","All","FinanceApplication",true,[111,114,117,120,123,126,129,132,135,138],{"a":112,"q":113},"La CCN Bricolage (IDCC 1606, art. 9.2) prévoit une indemnité égale à 2 % du salaire annuel brut multiplié par le nombre d'années d'ancienneté. Pour les cadres âgés de 50 ans et plus, ce taux est porté à 3 %. Si le minimum légal (L1234-9 : 1\u002F4 mois par année jusqu'à 10 ans, 1\u002F3 mois au-delà) est plus favorable, c'est lui qui s'applique.","Comment calculer l'indemnité de licenciement dans la convention collective du bricolage ?",{"a":115,"q":116},"La CCN Bricolage (art. 7) fixe la durée du préavis selon la catégorie professionnelle : 1 mois pour les employés, 2 mois pour les agents de maîtrise et 3 mois pour les cadres. Ces durées s'appliquent aussi bien en cas de licenciement que de démission.","Quelle est la durée du préavis dans la convention collective du bricolage ?",{"a":118,"q":119},"Selon l'accord du 13 février 2024, en vigueur au 1er mars 2024, les salaires minima conventionnels vont de 1 786 € brut\u002Fmois (grade B, coefficient 120, niveau 1) à 3 505 € brut\u002Fmois (grade N, coefficient 600, niveau 5 cadre) pour 35 heures hebdomadaires. Tous ces minima sont supérieurs au SMIC.","Quels sont les salaires minima de la convention collective du bricolage en 2024 ?",{"a":121,"q":122},"Non. Les sources officielles (Code du travail numérique) confirment que la CCN Bricolage (IDCC 1606) ne prévoit pas de prime de 13e mois obligatoire. Un accord d'entreprise ou le contrat de travail individuel peut toutefois prévoir une gratification de fin d'année.","La convention collective du bricolage prévoit-elle un 13e mois ?",{"a":124,"q":125},"La CCN Bricolage prévoit des périodes d'essai plus courtes que le maximum légal : 1 mois pour les employés (vs 2 mois légaux), 2 mois pour les agents de maîtrise (vs 3 mois légaux) et 3 mois pour les cadres (identique au plafond légal). Chaque période est renouvelable une fois pour une durée égale à la période initiale.","Quelle est la durée de la période d'essai dans la convention collective du bricolage ?",{"a":127,"q":128},"Non. La convention collective du bricolage (IDCC 1606) prévoit 30 jours ouvrables de congés payés par an, conformément au minimum légal de l'article L3141-3 du Code du travail. Il n'y a pas de jours supplémentaires obligatoires au niveau conventionnel.","La CCN Bricolage prévoit-elle des congés supplémentaires ?",{"a":130,"q":131},"La CCN Bricolage applique les majorations légales standard : 25 % pour les 8 premières heures supplémentaires (36e au 43e heure) et 50 % au-delà. Le contingent annuel d'heures supplémentaires est fixé à 220 heures. Ces taux sont conformes à l'article L3121-36 du Code du travail.","Quelles sont les majorations pour heures supplémentaires dans le secteur du bricolage ?",{"a":133,"q":134},"La grille de la CCN Bricolage comporte 5 niveaux avec des grades de A à N. Les coefficients vont de 120 (grade B, niveau 1, employés d'exécution) à 600 (grade N, niveau 5, cadres supérieurs). Les agents de maîtrise se situent au niveau 4 (grades H, I, J, coefficients 220 à 280) et les cadres au niveau 5 (grades K à N, coefficients 320 à 600).","Quels sont les coefficients de la grille de classification de la CCN Bricolage ?",{"a":136,"q":137},"Il faut justifier d'au moins 8 mois d'ancienneté continue chez le même employeur pour prétendre à l'indemnité de licenciement, conformément au seuil légal en vigueur depuis les ordonnances de 2017. L'indemnité n'est pas due en cas de faute grave ou lourde.","À partir de quelle ancienneté a-t-on droit à l'indemnité de licenciement dans la CCN Bricolage ?",{"a":139,"q":140},"Non. La CCN Bricolage (IDCC 1606) ne prévoit pas de prime d'ancienneté obligatoire au niveau conventionnel, selon les sources officielles du Code du travail numérique. L'ancienneté intervient toutefois dans le calcul de l'indemnité de licenciement (art. 9.2) mais pas sous forme de prime mensuelle récurrente.","Y a-t-il une prime d'ancienneté dans la convention collective du bricolage ?","\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 Bricolage IDCC 1606\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      --success: #16a34a;\n      --success-light: #f0fdf4;\n      --warning: #d97706;\n      --warning-light: #fffbeb;\n      --info-light: #eff6ff;\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    body {\n      font-family: system-ui, -apple-system, sans-serif;\n      background: var(--bg);\n      color: var(--text);\n      line-height: 1.5;\n      padding: 1rem;\n      font-size: 15px;\n    }\n    .tool-root {\n      max-width: 720px;\n      margin: 0 auto;\n    }\n    .tool-header {\n      margin-bottom: 1.25rem;\n    }\n    .tool-header h1 {\n      font-size: 1.25rem;\n      font-weight: 700;\n      color: var(--text);\n      line-height: 1.3;\n    }\n    .tool-header .badge {\n      display: inline-flex;\n      align-items: center;\n      gap: 0.25rem;\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: 9999px;\n      margin-top: 0.4rem;\n    }\n    \u002F* Tabs *\u002F\n    .tabs-bar {\n      display: flex;\n      gap: 0;\n      border-bottom: 2px solid var(--border);\n      margin-bottom: 1.25rem;\n      overflow-x: auto;\n      scrollbar-width: none;\n    }\n    .tabs-bar::-webkit-scrollbar { display: none; }\n    .tab-btn {\n      display: flex;\n      align-items: center;\n      gap: 0.35rem;\n      padding: 0.6rem 1rem;\n      font-size: 0.875rem;\n      font-weight: 500;\n      color: var(--text-muted);\n      background: none;\n      border: none;\n      border-bottom: 2px solid transparent;\n      margin-bottom: -2px;\n      cursor: pointer;\n      white-space: nowrap;\n      transition: color 0.15s, border-color 0.15s;\n    }\n    .tab-btn:hover { color: var(--accent); }\n    .tab-btn.active {\n      color: var(--accent);\n      border-bottom-color: var(--accent);\n      font-weight: 600;\n    }\n    \u002F* Panel *\u002F\n    .panel { display: none; }\n    .panel.visible { display: block; }\n    \u002F* Rule callout *\u002F\n    .rule-callout {\n      display: flex;\n      gap: 0.625rem;\n      align-items: flex-start;\n      background: var(--info-light);\n      border: 1px solid #bfdbfe;\n      border-radius: var(--radius);\n      padding: 0.875rem 1rem;\n      margin-bottom: 1.25rem;\n    }\n    .rule-callout svg { flex-shrink: 0; color: var(--accent); margin-top: 0.1rem; }\n    .rule-callout p { font-size: 0.875rem; color: #1e40af; line-height: 1.55; }\n    .rule-callout strong { font-weight: 600; }\n    \u002F* Card *\u002F\n    .card {\n      background: var(--surface);\n      border: 1px solid var(--border);\n      border-radius: var(--radius);\n      padding: 1.25rem;\n      box-shadow: var(--shadow);\n      margin-bottom: 1rem;\n    }\n    .card-title {\n      font-size: 0.8rem;\n      font-weight: 600;\n      text-transform: uppercase;\n      letter-spacing: 0.05em;\n      color: var(--text-muted);\n      margin-bottom: 1rem;\n    }\n    \u002F* Form elements *\u002F\n    .field { margin-bottom: 1.1rem; }\n    .field:last-child { margin-bottom: 0; }\n    label {\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n      font-size: 0.875rem;\n      font-weight: 500;\n      margin-bottom: 0.4rem;\n    }\n    label .val {\n      font-weight: 700;\n      color: var(--accent);\n      font-variant-numeric: tabular-nums;\n    }\n    input[type=\"range\"] {\n      -webkit-appearance: none;\n      width: 100%;\n      height: 4px;\n      background: var(--border);\n      border-radius: 9999px;\n      outline: none;\n      cursor: pointer;\n    }\n    input[type=\"range\"]::-webkit-slider-thumb {\n      -webkit-appearance: none;\n      width: 18px; height: 18px;\n      background: var(--accent);\n      border-radius: 50%;\n      box-shadow: 0 0 0 3px var(--accent-light);\n    }\n    input[type=\"range\"]::-moz-range-thumb {\n      width: 18px; height: 18px;\n      background: var(--accent);\n      border: none;\n      border-radius: 50%;\n    }\n    select {\n      width: 100%;\n      padding: 0.5rem 0.75rem;\n      border: 1px solid var(--border);\n      border-radius: 0.5rem;\n      background: var(--surface);\n      font-size: 0.875rem;\n      color: var(--text);\n      cursor: pointer;\n      outline: none;\n    }\n    select:focus { border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-light); }\n    \u002F* Pills *\u002F\n    .pills { display: flex; flex-wrap: wrap; gap: 0.4rem; margin-top: 0.4rem; }\n    .pill {\n      padding: 0.35rem 0.85rem;\n      border: 1px solid var(--border);\n      border-radius: 9999px;\n      font-size: 0.8rem;\n      font-weight: 500;\n      cursor: pointer;\n      transition: all 0.12s;\n      background: var(--surface);\n      color: var(--text-muted);\n    }\n    .pill.active {\n      background: var(--accent);\n      border-color: var(--accent);\n      color: #fff;\n    }\n    .pill:hover:not(.active) { border-color: var(--accent); color: var(--accent); }\n    \u002F* Toggle *\u002F\n    .toggle-row {\n      display: flex;\n      align-items: center;\n      gap: 0.75rem;\n      margin-top: 0.5rem;\n    }\n    .toggle {\n      position: relative;\n      width: 42px; height: 22px;\n      flex-shrink: 0;\n    }\n    .toggle input { opacity: 0; width: 0; height: 0; }\n    .toggle-slider {\n      position: absolute; inset: 0;\n      background: var(--border);\n      border-radius: 9999px;\n      cursor: pointer;\n      transition: background 0.2s;\n    }\n    .toggle-slider::before {\n      content: '';\n      position: absolute;\n      width: 16px; height: 16px;\n      left: 3px; top: 3px;\n      background: #fff;\n      border-radius: 50%;\n      transition: transform 0.2s;\n    }\n    .toggle input:checked + .toggle-slider { background: var(--accent); }\n    .toggle input:checked + .toggle-slider::before { transform: translateX(20px); }\n    .toggle-label { font-size: 0.875rem; font-weight: 500; }\n    \u002F* Result *\u002F\n    .result-card {\n      background: linear-gradient(135deg, var(--accent) 0%, var(--accent-dark) 100%);\n      color: #fff;\n      border-radius: var(--radius);\n      padding: 1.25rem 1.5rem;\n      margin-top: 1.25rem;\n    }\n    .result-label { font-size: 0.8rem; opacity: 0.85; margin-bottom: 0.3rem; }\n    .result-value {\n      font-size: 2rem;\n      font-weight: 800;\n      font-variant-numeric: tabular-nums;\n      line-height: 1.2;\n    }\n    .result-sub { font-size: 0.8rem; opacity: 0.75; margin-top: 0.4rem; }\n    \u002F* Grid result *\u002F\n    .result-grid {\n      background: var(--success-light);\n      border: 1px solid #bbf7d0;\n      border-radius: var(--radius);\n      padding: 1.125rem 1.25rem;\n      margin-top: 1.25rem;\n    }\n    .result-grid .rg-label { font-size: 0.8rem; color: #166534; font-weight: 600; margin-bottom: 0.3rem; }\n    .result-grid .rg-value {\n      font-size: 1.75rem;\n      font-weight: 800;\n      color: var(--success);\n      font-variant-numeric: tabular-nums;\n    }\n    .result-grid .rg-sub { font-size: 0.8rem; color: #166534; margin-top: 0.3rem; opacity: 0.85; }\n    \u002F* Info row *\u002F\n    .info-row {\n      display: flex;\n      align-items: center;\n      gap: 0.5rem;\n      background: var(--warning-light);\n      border: 1px solid #fde68a;\n      border-radius: 0.5rem;\n      padding: 0.625rem 0.875rem;\n      margin-top: 0.875rem;\n      font-size: 0.8rem;\n      color: #92400e;\n    }\n    .info-row svg { flex-shrink: 0; }\n    \u002F* Grid table *\u002F\n    .salary-table {\n      width: 100%;\n      border-collapse: collapse;\n      font-size: 0.82rem;\n      margin-top: 0.75rem;\n    }\n    .salary-table th {\n      text-align: left;\n      padding: 0.4rem 0.6rem;\n      background: var(--accent-light);\n      color: var(--accent);\n      font-weight: 600;\n      font-size: 0.75rem;\n      text-transform: uppercase;\n      letter-spacing: 0.04em;\n    }\n    .salary-table th:last-child, .salary-table td:last-child { text-align: right; }\n    .salary-table td {\n      padding: 0.4rem 0.6rem;\n      border-bottom: 1px solid var(--border);\n      color: var(--text);\n    }\n    .salary-table tr:last-child td { border-bottom: none; }\n    .salary-table tr.highlighted td { background: var(--accent-light); font-weight: 600; color: var(--accent); }\n    \u002F* Disclaimer *\u002F\n    .disclaimer {\n      font-size: 0.75rem;\n      color: var(--text-muted);\n      margin-top: 1.25rem;\n      line-height: 1.6;\n      padding-top: 0.875rem;\n      border-top: 1px solid var(--border);\n    }\n    .disclaimer a { color: var(--accent); text-decoration: none; }\n    .disclaimer a:hover { text-decoration: underline; }\n    \u002F* Fieldset *\u002F\n    .field-label { font-size: 0.8rem; font-weight: 600; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.04em; margin-bottom: 0.5rem; margin-top: 1rem; }\n    .field-label:first-child { margin-top: 0; }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\u003Cbody>\n\n\u003C!-- CCN IDCC 1606 — deviations\n     indemnite: L1234-9 → 2% × masse salariale annuelle × ancienneté (art. 9.2 CCN)\n     preavis: L1234-1 → 1 mois (employés) \u002F 2 mois (AM) \u002F 3 mois (cadres) par catégorie (art. 7 CCN)\n     salaire-min: SMIC → grille coefficients 120-600, accord 13 fév 2024, effectif 1er mars 2024\n     duree-essai: L1221-19 → 1 mois (employés) \u002F 2 mois (AM) \u002F 3 mois (cadres), renouvelable 1 fois -->\n\n\u003Cmain class=\"tool-root\">\n  \u003Cdiv class=\"tool-header\">\n    \u003Ch1>Calculateur — Convention collective du bricolage\u003C\u002Fh1>\n    \u003Cspan class=\"badge\">\u003Ci data-lucide=\"tag\" style=\"width:12px;height:12px;\">\u003C\u002Fi> IDCC 1606\u003C\u002Fspan>\n  \u003C\u002Fdiv>\n\n  \u003C!-- TABS BAR -->\n  \u003Cdiv class=\"tabs-bar\" role=\"tablist\">\n    \u003Cbutton class=\"tab-btn\" data-tab=\"indemnite\" role=\"tab\" aria-selected=\"false\">\n      \u003Ci data-lucide=\"calculator\" style=\"width:15px;height:15px;\">\u003C\u002Fi> Indemnité\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"preavis\" role=\"tab\" aria-selected=\"false\">\n      \u003Ci data-lucide=\"clock\" style=\"width:15px;height:15px;\">\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=\"euro\" style=\"width:15px;height:15px;\">\u003C\u002Fi> Grille salariale\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"duree-essai\" role=\"tab\" aria-selected=\"false\">\n      \u003Ci data-lucide=\"calendar\" style=\"width:15px;height:15px;\">\u003C\u002Fi> Période d'essai\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n\n  \u003C!-- PANEL: INDEMNITÉ DE LICENCIEMENT -->\n  \u003Cdiv class=\"panel\" data-panel=\"indemnite\" role=\"tabpanel\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\" style=\"width:16px;height:16px;\">\u003C\u002Fi>\n      \u003Cp>La CCN Bricolage (art. 9.2) prévoit une indemnité de \u003Cstrong>2 % de la masse salariale brute des 12 derniers mois × nombre d'années d'ancienneté\u003C\u002Fstrong>. Pour les cadres de 50 ans et plus, ce taux est porté à \u003Cstrong>3 %\u003C\u002Fstrong>. Le droit légal (L1234-9) applique 1\u002F4 mois × années ≤ 10 ans + 1\u002F3 mois × années > 10 ans — comparez les deux avant de décider.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"card\">\n      \u003Cp class=\"card-title\">Vos informations\u003C\u002Fp>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Salaire brut mensuel \u003Cspan class=\"val\" id=\"ind-salaire-val\">2 000 €\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"ind-salaire\" min=\"1400\" max=\"6000\" step=\"50\" value=\"2000\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Ancienneté \u003Cspan class=\"val\" id=\"ind-anc-val\">5 ans\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"ind-anc\" min=\"1\" max=\"35\" step=\"1\" value=\"5\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Cp class=\"field-label\">Statut\u003C\u002Fp>\n        \u003Cdiv class=\"pills\" id=\"ind-statut\">\n          \u003Cspan class=\"pill active\" data-val=\"employe\">Employé \u002F AM\u003C\u002Fspan>\n          \u003Cspan class=\"pill\" data-val=\"cadre50\">Cadre ≥ 50 ans\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv id=\"ind-result\" class=\"result-card\">\n      \u003Cdiv class=\"result-label\">Indemnité conventionnelle (CCN 1606)\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"ind-ccn-val\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"ind-ccn-sub\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"card\" style=\"margin-top:1rem;\">\n      \u003Cp class=\"card-title\" style=\"margin-bottom:0.75rem;\">Comparaison avec le droit légal (L1234-9)\u003C\u002Fp>\n      \u003Cdiv style=\"display:flex;gap:1rem;flex-wrap:wrap;\">\n        \u003Cdiv style=\"flex:1;min-width:180px;\">\n          \u003Cdiv style=\"font-size:0.78rem;color:var(--text-muted);margin-bottom:0.2rem;\">CCN Bricolage\u003C\u002Fdiv>\n          \u003Cdiv style=\"font-size:1.3rem;font-weight:700;color:var(--accent);font-variant-numeric:tabular-nums;\" id=\"ind-ccn-compare\">—\u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n        \u003Cdiv style=\"flex:1;min-width:180px;\">\n          \u003Cdiv style=\"font-size:0.78rem;color:var(--text-muted);margin-bottom:0.2rem;\">Légal (L1234-9)\u003C\u002Fdiv>\n          \u003Cdiv style=\"font-size:1.3rem;font-weight:700;color:var(--success);font-variant-numeric:tabular-nums;\" id=\"ind-legal-compare\">—\u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv id=\"ind-winner\" class=\"info-row\" style=\"margin-top:0.875rem;\">\n        \u003Ci data-lucide=\"alert-triangle\" style=\"width:14px;height:14px;\">\u003C\u002Fi>\n        \u003Cspan id=\"ind-winner-text\">\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- PANEL: PRÉAVIS -->\n  \u003Cdiv class=\"panel\" data-panel=\"preavis\" role=\"tabpanel\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\" style=\"width:16px;height:16px;\">\u003C\u002Fi>\n      \u003Cp>La CCN Bricolage (art. 7) fixe des durées de préavis \u003Cstrong>par catégorie professionnelle\u003C\u002Fstrong> : 1 mois pour les employés, 2 mois pour les agents de maîtrise, 3 mois pour les cadres — en cas de démission ou de licenciement (hors faute grave\u002Flourde).\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"card\">\n      \u003Cp class=\"card-title\">Votre situation\u003C\u002Fp>\n      \u003Cdiv class=\"field\">\n        \u003Cp class=\"field-label\">Catégorie professionnelle\u003C\u002Fp>\n        \u003Cdiv class=\"pills\" id=\"pre-categorie\">\n          \u003Cspan class=\"pill active\" data-val=\"employe\">Employé\u003C\u002Fspan>\n          \u003Cspan class=\"pill\" data-val=\"am\">Agent de maîtrise\u003C\u002Fspan>\n          \u003Cspan class=\"pill\" data-val=\"cadre\">Cadre\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Cp class=\"field-label\">Type de rupture\u003C\u002Fp>\n        \u003Cdiv class=\"pills\" id=\"pre-type\">\n          \u003Cspan class=\"pill active\" 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    \u003Cdiv id=\"pre-result\" class=\"result-card\" style=\"background:linear-gradient(135deg,#0891b2,#0e7490);\">\n      \u003Cdiv class=\"result-label\">Durée du préavis (CCN 1606)\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"pre-duree\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"pre-sub\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"card\" style=\"margin-top:1rem;\">\n      \u003Cp class=\"card-title\" style=\"margin-bottom:0.75rem;\">Droits pendant le préavis\u003C\u002Fp>\n      \u003Cul style=\"list-style:none;display:flex;flex-direction:column;gap:0.5rem;\">\n        \u003Cli style=\"display:flex;align-items:flex-start;gap:0.5rem;font-size:0.875rem;\">\n          \u003Ci data-lucide=\"check-circle\" style=\"width:15px;height:15px;color:var(--success);flex-shrink:0;margin-top:0.1rem;\">\u003C\u002Fi>\n          \u003Cspan>\u003Cstrong>Heures de recherche d'emploi :\u003C\u002Fstrong> 2 demi-journées ou 1 journée par semaine\u003C\u002Fspan>\n        \u003C\u002Fli>\n        \u003Cli style=\"display:flex;align-items:flex-start;gap:0.5rem;font-size:0.875rem;\">\n          \u003Ci data-lucide=\"check-circle\" style=\"width:15px;height:15px;color:var(--success);flex-shrink:0;margin-top:0.1rem;\">\u003C\u002Fi>\n          \u003Cspan>\u003Cstrong>Départ anticipé :\u003C\u002Fstrong> possible en 1ère moitié avec accord employeur ; en 2ème moitié avec préavis de 8 jours\u003C\u002Fspan>\n        \u003C\u002Fli>\n        \u003Cli style=\"display:flex;align-items:flex-start;gap:0.5rem;font-size:0.875rem;\">\n          \u003Ci data-lucide=\"check-circle\" style=\"width:15px;height:15px;color:var(--success);flex-shrink:0;margin-top:0.1rem;\">\u003C\u002Fi>\n          \u003Cspan>\u003Cstrong>Maintien du salaire\u003C\u002Fstrong> pendant toute la durée du préavis\u003C\u002Fspan>\n        \u003C\u002Fli>\n      \u003C\u002Ful>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- PANEL: GRILLE SALARIALE -->\n  \u003Cdiv class=\"panel\" data-panel=\"salaire-min\" role=\"tabpanel\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\" style=\"width:16px;height:16px;\">\u003C\u002Fi>\n      \u003Cp>La CCN Bricolage publie une \u003Cstrong>grille de salaires minima par coefficient\u003C\u002Fstrong> (accord du 13 février 2024, en vigueur au 1er mars 2024). Ces minima conventionnels s'appliquent sur la base de \u003Cstrong>35 h\u002Fsemaine\u003C\u002Fstrong> et sont supérieurs au SMIC.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"card\">\n      \u003Cp class=\"card-title\">Votre niveau\u003C\u002Fp>\n      \u003Cdiv class=\"field\">\n        \u003Cp class=\"field-label\">Catégorie\u003C\u002Fp>\n        \u003Cdiv class=\"pills\" id=\"sal-categorie\">\n          \u003Cspan class=\"pill active\" data-val=\"employe\">Employés (Niv. 1–3)\u003C\u002Fspan>\n          \u003Cspan class=\"pill\" data-val=\"am\">Agents maîtrise (Niv. 4)\u003C\u002Fspan>\n          \u003Cspan class=\"pill\" data-val=\"cadre\">Cadres (Niv. 5)\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\" id=\"sal-niveau-field\">\n        \u003Cp class=\"field-label\">Niveau \u002F Grade\u003C\u002Fp>\n        \u003Cselect id=\"sal-niveau\">\u003C\u002Fselect>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Heures hebdomadaires \u003Cspan class=\"val\" id=\"sal-heures-val\">35 h\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"sal-heures\" min=\"24\" max=\"48\" step=\"1\" value=\"35\">\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-grid\">\n      \u003Cdiv class=\"rg-label\">Salaire minimum conventionnel\u003C\u002Fdiv>\n      \u003Cdiv class=\"rg-value\" id=\"sal-result\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"rg-sub\" id=\"sal-sub\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"card\" style=\"margin-top:1rem;\">\n      \u003Cp class=\"card-title\">Grille complète — accord mars 2024\u003C\u002Fp>\n      \u003Ctable class=\"salary-table\" id=\"sal-table\">\n        \u003Cthead>\n          \u003Ctr>\n            \u003Cth>Niveau\u003C\u002Fth>\n            \u003Cth>Grade\u003C\u002Fth>\n            \u003Cth>Coeff.\u003C\u002Fth>\n            \u003Cth>Min. mensuel brut\u003C\u002Fth>\n          \u003C\u002Ftr>\n        \u003C\u002Fthead>\n        \u003Ctbody>\u003C\u002Ftbody>\n      \u003C\u002Ftable>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- PANEL: DURÉE D'ESSAI -->\n  \u003Cdiv class=\"panel\" data-panel=\"duree-essai\" role=\"tabpanel\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\" style=\"width:16px;height:16px;\">\u003C\u002Fi>\n      \u003Cp>La CCN Bricolage prévoit des \u003Cstrong>périodes d'essai initiales plus courtes\u003C\u002Fstrong> que le plafond légal : 1 mois pour les employés (vs 2 mois légaux), 2 mois pour les AM (vs 3 mois légaux), 3 mois pour les cadres (identique au légal). Renouvelable une fois pour une durée au plus égale à la période initiale.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"card\">\n      \u003Cp class=\"card-title\">Votre catégorie\u003C\u002Fp>\n      \u003Cdiv class=\"field\">\n        \u003Cp class=\"field-label\">Catégorie professionnelle\u003C\u002Fp>\n        \u003Cdiv class=\"pills\" id=\"ess-categorie\">\n          \u003Cspan class=\"pill active\" data-val=\"employe\">Employé\u003C\u002Fspan>\n          \u003Cspan class=\"pill\" data-val=\"am\">Agent de maîtrise\u003C\u002Fspan>\n          \u003Cspan class=\"pill\" data-val=\"cadre\">Cadre\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Cdiv class=\"toggle-row\">\n          \u003Clabel class=\"toggle\">\n            \u003Cinput type=\"checkbox\" id=\"ess-renouvellement\">\n            \u003Cspan class=\"toggle-slider\">\u003C\u002Fspan>\n          \u003C\u002Flabel>\n          \u003Cspan class=\"toggle-label\">Avec renouvellement\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv id=\"ess-result\" class=\"result-card\" style=\"background:linear-gradient(135deg,#7c3aed,#6d28d9);\">\n      \u003Cdiv class=\"result-label\">Durée de la période d'essai (CCN 1606)\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"ess-duree\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"ess-sub\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"card\" style=\"margin-top:1rem;\">\n      \u003Cp class=\"card-title\" style=\"margin-bottom:0.75rem;\">Délais de prévenance à la rupture\u003C\u002Fp>\n      \u003Ctable class=\"salary-table\">\n        \u003Cthead>\n          \u003Ctr>\n            \u003Cth>Catégorie\u003C\u002Fth>\n            \u003Cth>Délai (entreprise)\u003C\u002Fth>\n            \u003Cth>Délai (salarié)\u003C\u002Fth>\n          \u003C\u002Ftr>\n        \u003C\u002Fthead>\n        \u003Ctbody>\n          \u003Ctr>\n            \u003Ctd>Employé\u003C\u002Ftd>\n            \u003Ctd>1 semaine\u003C\u002Ftd>\n            \u003Ctd>48 h\u003C\u002Ftd>\n          \u003C\u002Ftr>\n          \u003Ctr>\n            \u003Ctd>Agent de maîtrise\u003C\u002Ftd>\n            \u003Ctd>15 jours\u003C\u002Ftd>\n            \u003Ctd>48 h\u003C\u002Ftd>\n          \u003C\u002Ftr>\n          \u003Ctr>\n            \u003Ctd>Cadre\u003C\u002Ftd>\n            \u003Ctd>1 mois\u003C\u002Ftd>\n            \u003Ctd>1 semaine\u003C\u002Ftd>\n          \u003C\u002Ftr>\n        \u003C\u002Ftbody>\n      \u003C\u002Ftable>\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:0.25rem;\">\u003C\u002Fi>\n    Calcul indicatif basé sur la CCN IDCC 1606 (convention collective nationale du bricolage — vente au détail en libre-service, brochure JO 3232).\n    Source : \u003Ca href=\"https:\u002F\u002Fwww.legifrance.gouv.fr\u002Fconv_coll\u002Fid\u002FKALICONT000005635871\" target=\"_blank\" rel=\"noopener\">Legifrance\u003C\u002Fa>.\n    Pour validation légale\n  \u003C\u002Fp>\n\u003C\u002Fmain>\n\n\u003Cscript>\n\u002F\u002F ─── DATA ────────────────────────────────────────────────────────────────────\nconst SALARY_GRID = {\n  employe: [\n    { niveau: '1', grade: 'B', coeff: 120, min: 1786 },\n    { niveau: '1', grade: 'C', coeff: 140, min: 1800 },\n    { niveau: '1', grade: 'D', coeff: 150, min: 1815 },\n    { niveau: '1', grade: 'E', coeff: 160, min: 1830 },\n    { niveau: '3', grade: 'F', coeff: 190, min: 1860 },\n    { niveau: '3', grade: 'G', coeff: 200, min: 1915 },\n  ],\n  am: [\n    { niveau: '4', grade: 'H', coeff: 220, min: 2015 },\n    { niveau: '4', grade: 'I', coeff: 250, min: 2090 },\n    { niveau: '4', grade: 'J', coeff: 280, min: 2205 },\n  ],\n  cadre: [\n    { niveau: '5', grade: 'K', coeff: 320, min: 2790 },\n    { niveau: '5', grade: 'L', coeff: 400, min: 2915 },\n    { niveau: '5', grade: 'M', coeff: 500, min: 3255 },\n    { niveau: '5', grade: 'N', coeff: 600, min: 3505 },\n  ]\n};\n\nconst PREAVIS = {\n  employe:  { licenciement: 1, demission: 1, label: '1 mois' },\n  am:       { licenciement: 2, demission: 2, label: '2 mois' },\n  cadre:    { licenciement: 3, demission: 3, label: '3 mois' },\n};\n\nconst ESSAI = {\n  employe: { initial: 1,  max: 2,  legaux: 2,  legauxMax: 4 },\n  am:      { initial: 2,  max: 4,  legaux: 3,  legauxMax: 6 },\n  cadre:   { initial: 3,  max: 6,  legaux: 4,  legauxMax: 8 },\n};\n\nconst fmt = (v) => new Intl.NumberFormat('fr-FR', { style: 'currency', currency: 'EUR', minimumFractionDigits: 0, maximumFractionDigits: 0 }).format(v);\nconst fmtH = (v) => new Intl.NumberFormat('fr-FR').format(v);\n\n\u002F\u002F ─── TABS ────────────────────────────────────────────────────────────────────\nconst tabBtns = document.querySelectorAll('[data-tab]');\nconst panels  = document.querySelectorAll('[data-panel]');\n\nfunction activateTab(id) {\n  tabBtns.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(() => window.dispatchEvent(new Event('resize')));\n}\n\ntabBtns.forEach(t => t.addEventListener('click', () => activateTab(t.dataset.tab)));\nconst initHash = location.hash.slice(1);\nconst validTabs = [...tabBtns].map(t => t.dataset.tab);\nactivateTab(validTabs.includes(initHash) ? initHash : validTabs[0]);\n\n\u002F\u002F ─── PILL HELPER ─────────────────────────────────────────────────────────────\nfunction bindPills(containerId, onChange) {\n  const container = document.getElementById(containerId);\n  if (!container) return;\n  container.querySelectorAll('.pill').forEach(p => {\n    p.addEventListener('click', () => {\n      container.querySelectorAll('.pill').forEach(x => x.classList.remove('active'));\n      p.classList.add('active');\n      onChange(p.dataset.val);\n    });\n  });\n}\nfunction activeVal(containerId) {\n  const el = document.querySelector(`#${containerId} .pill.active`);\n  return el ? el.dataset.val : null;\n}\n\n\u002F\u002F ─── INDEMNITÉ ───────────────────────────────────────────────────────────────\nconst indState = { salaire: 2000, anc: 5, statut: 'employe' };\n\nfunction computeInd() {\n  const { salaire, anc, statut } = indState;\n  const masseSalariale = salaire * 12;\n  const taux = statut === 'cadre50' ? 0.03 : 0.02;\n  const ccn = masseSalariale * taux * anc;\n  \u002F\u002F Légal L1234-9\n  const moisAnc10 = Math.min(anc, 10);\n  const moisAnc10plus = Math.max(0, anc - 10);\n  const legal = salaire * ((1\u002F4) * moisAnc10 + (1\u002F3) * moisAnc10plus);\n  return { ccn, legal };\n}\n\nfunction renderInd() {\n  const { ccn, legal } = computeInd();\n  document.getElementById('ind-ccn-val').textContent = fmt(ccn);\n  document.getElementById('ind-ccn-sub').textContent = `${indState.anc} an${indState.anc > 1 ? 's' : ''} × ${indState.statut === 'cadre50' ? '3' : '2'} % × ${fmt(indState.salaire * 12)} (masse annuelle)`;\n  document.getElementById('ind-ccn-compare').textContent = fmt(ccn);\n  document.getElementById('ind-legal-compare').textContent = fmt(legal);\n  const diff = ccn - legal;\n  const winnerEl = document.getElementById('ind-winner');\n  const winnerText = document.getElementById('ind-winner-text');\n  if (Math.abs(diff) \u003C 1) {\n    winnerText.textContent = 'Les deux formules donnent le même résultat.';\n    winnerEl.style.background = 'var(--info-light)';\n    winnerEl.style.borderColor = '#bfdbfe';\n    winnerEl.style.color = '#1e40af';\n  } else if (diff > 0) {\n    winnerText.textContent = `La CCN est plus favorable de ${fmt(diff)} (${((diff\u002Flegal)*100).toFixed(1)} % de plus).`;\n    winnerEl.style.background = 'var(--success-light)';\n    winnerEl.style.borderColor = '#bbf7d0';\n    winnerEl.style.color = '#166534';\n  } else {\n    winnerText.textContent = `Le droit légal est plus favorable de ${fmt(-diff)} — le salarié bénéficie du minimum légal.`;\n    winnerEl.style.background = 'var(--warning-light)';\n    winnerEl.style.borderColor = '#fde68a';\n    winnerEl.style.color = '#92400e';\n  }\n}\n\ndocument.getElementById('ind-salaire').addEventListener('input', e => {\n  indState.salaire = +e.target.value;\n  document.getElementById('ind-salaire-val').textContent = fmt(indState.salaire);\n  renderInd();\n});\ndocument.getElementById('ind-anc').addEventListener('input', e => {\n  indState.anc = +e.target.value;\n  document.getElementById('ind-anc-val').textContent = `${indState.anc} an${indState.anc > 1 ? 's' : ''}`;\n  renderInd();\n});\nbindPills('ind-statut', v => { indState.statut = v; renderInd(); });\nrenderInd();\n\n\u002F\u002F ─── PRÉAVIS ─────────────────────────────────────────────────────────────────\nconst preState = { categorie: 'employe', type: 'licenciement' };\n\nfunction renderPre() {\n  const { categorie, type } = preState;\n  const data = PREAVIS[categorie];\n  const mois = data[type];\n  const plural = mois > 1 ? 'mois' : 'mois';\n  document.getElementById('pre-duree').textContent = `${mois} ${plural}`;\n  const cat = { employe: 'Employé', am: 'Agent de maîtrise', cadre: 'Cadre' }[categorie];\n  const typ = type === 'licenciement' ? 'licenciement' : 'démission';\n  document.getElementById('pre-sub').textContent = `${cat} — ${typ} (art. 7 CCN 1606)`;\n}\n\nbindPills('pre-categorie', v => { preState.categorie = v; renderPre(); });\nbindPills('pre-type', v => { preState.type = v; renderPre(); });\nrenderPre();\n\n\u002F\u002F ─── GRILLE SALARIALE ─────────────────────────────────────────────────────────\nconst salState = { categorie: 'employe', niveauIdx: 0, heures: 35 };\n\nfunction buildSalSelect() {\n  const sel = document.getElementById('sal-niveau');\n  sel.innerHTML = '';\n  const grid = SALARY_GRID[salState.categorie];\n  grid.forEach((row, i) => {\n    const opt = document.createElement('option');\n    opt.value = i;\n    opt.textContent = `Niv. ${row.niveau} — Grade ${row.grade} (coeff. ${row.coeff})`;\n    sel.appendChild(opt);\n  });\n  salState.niveauIdx = 0;\n}\n\nfunction renderSalTable() {\n  const tbody = document.querySelector('#sal-table tbody');\n  tbody.innerHTML = '';\n  const allRows = [...SALARY_GRID.employe, ...SALARY_GRID.am, ...SALARY_GRID.cadre];\n  allRows.forEach(row => {\n    const tr = document.createElement('tr');\n    const selected = SALARY_GRID[salState.categorie][salState.niveauIdx];\n    if (row.grade === selected.grade) tr.classList.add('highlighted');\n    tr.innerHTML = `\u003Ctd>${row.niveau}\u003C\u002Ftd>\u003Ctd>${row.grade}\u003C\u002Ftd>\u003Ctd>${row.coeff}\u003C\u002Ftd>\u003Ctd>${fmt(row.min)}\u003C\u002Ftd>`;\n    tbody.appendChild(tr);\n  });\n}\n\nfunction renderSal() {\n  const grid = SALARY_GRID[salState.categorie];\n  const row = grid[Math.min(salState.niveauIdx, grid.length - 1)];\n  const facteur = salState.heures \u002F 35;\n  const salaire = Math.round(row.min * facteur);\n  document.getElementById('sal-result').textContent = fmt(salaire);\n  document.getElementById('sal-sub').textContent = `Grade ${row.grade} · Coeff. ${row.coeff} · ${salState.heures} h\u002Fsem. (accord 13 fév. 2024)`;\n  renderSalTable();\n}\n\nbuildSalSelect();\nbindPills('sal-categorie', v => {\n  salState.categorie = v;\n  buildSalSelect();\n  renderSal();\n});\ndocument.getElementById('sal-niveau').addEventListener('change', e => {\n  salState.niveauIdx = +e.target.value;\n  renderSal();\n});\ndocument.getElementById('sal-heures').addEventListener('input', e => {\n  salState.heures = +e.target.value;\n  document.getElementById('sal-heures-val').textContent = `${salState.heures} h`;\n  renderSal();\n});\nrenderSal();\n\n\u002F\u002F ─── DURÉE D'ESSAI ───────────────────────────────────────────────────────────\nconst essState = { categorie: 'employe', renouvellement: false };\n\nfunction renderEss() {\n  const { categorie, renouvellement } = essState;\n  const data = ESSAI[categorie];\n  const duree = renouvellement ? data.max : data.initial;\n  const unit = duree \u003C= 1 ? 'mois' : 'mois';\n  document.getElementById('ess-duree').textContent = `${duree} ${unit}`;\n  const cat = { employe: 'Employé', am: 'Agent de maîtrise', cadre: 'Cadre' }[categorie];\n  const legDuree = renouvellement ? data.legauxMax : data.legaux;\n  document.getElementById('ess-sub').textContent = `${cat} ${renouvellement ? 'avec renouvellement' : 'sans renouvellement'} — plafond légal : ${legDuree} mois (CCN plus favorable)`;\n}\n\nbindPills('ess-categorie', v => { essState.categorie = v; renderEss(); });\ndocument.getElementById('ess-renouvellement').addEventListener('change', e => {\n  essState.renouvellement = e.target.checked;\n  renderEss();\n});\nrenderEss();\n\n\u002F\u002F ─── RESIZE OBSERVER ─────────────────────────────────────────────────────────\nif (typeof ResizeObserver !== 'undefined') {\n  const ro = new ResizeObserver(() => {\n    const h = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight);\n    parent.postMessage({ type: 'resize', height: h }, '*');\n  });\n  ro.observe(document.documentElement);\n}\n\n\u002F\u002F Lucide icons\nif (typeof lucide !== 'undefined') lucide.createIcons();\n\u003C\u002Fscript>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n","generated","juridique","consumer","both","https:\u002F\u002Fpub-bdebbd2dad294475a2da0eb657815b6b.r2.dev\u002Ftools\u002Fccn-bricolage-28e8314a63.webp",[]]