[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"footer-root-categories-fr-FR":3,"tool-content-ccn-coiffure-et-des-professions-connexes-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-coiffure-et-des-professions-connexes","CCN de la coiffure et des professions connexes — calculateur complet","Calculateur CCN Coiffure IDCC 2596 | Expert Zoom","Outil interactif couvrant l'indemnité de licenciement, le préavis, la grille salariale, la prime d'ancienneté, la période d'essai et la prévoyance de la CCN coiffure (IDCC 2596).","Cet outil interactif couvre les 6 principales dérogations de la convention collective de la coiffure et des professions connexes (IDCC 2596) : indemnité de licenciement (plafond 6 mois cadres), préavis par ancienneté et statut, grille salariale 2026 (4 filières, +2,42 %), prime d'ancienneté obligatoire de 27,60 € à 81,90 €\u002Fmois, durée d'essai spécifique et prévoyance étendue aux non-cadres.",[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 de la coiffure et des professions connexes — IDCC 2596","WebApplication",{"name":94,"@type":95,"identifier":96},"Convention collective de la coiffure et des professions connexes","Thing","IDCC 2596",{"name":98,"@type":99},"Expert-Zoom","Organization","https:\u002F\u002Fschema.org",{"url":102,"@type":103},"\u002Ffr\u002Fmagazine\u002Fjuridique\u002Fles-conventions-collectives-en-france","Article","fr","Outil interactif couvrant l'indemnité de licenciement, le préavis, la grille salariale, la prime d'ancienneté, la période d'essai et la prévoyance de la convention collective de la coiffure et des professions connexes (IDCC 2596).","All","FinanceApplication",true,[110,113,116,119,122,125,128,131,134],{"a":111,"q":112},"Pour les non-cadres, la CCN coiffure applique le minimum légal : 1\u002F4 de mois de salaire brut par année d'ancienneté jusqu'à 10 ans, puis 1\u002F3 de mois au-delà. Pour les cadres et agents de maîtrise, un plafond de 6 mois de salaire s'applique, sauf si le calcul légal dépasse ce plafond (dans ce cas, le montant légal prime). L'ancienneté minimale requise est d'1 an.","Comment calculer l'indemnité de licenciement dans la convention collective coiffure (IDCC 2596) ?",{"a":114,"q":115},"Pour les non-cadres : moins de 6 mois d'ancienneté → 1 semaine ; de 6 mois à 2 ans → 1 mois ; au-delà de 2 ans → 2 mois (licenciement) ou 1 mois (démission). Pour les cadres et agents de maîtrise : 3 mois dans tous les cas. Les travailleurs reconnus handicapés (RQTH) bénéficient d'un préavis doublé, plafonné à 3 mois.","Quelle est la durée du préavis dans la convention collective de la coiffure ?",{"a":117,"q":118},"Au 1er mars 2026, la grille prévoit des minima de 1 843 € bruts\u002Fmois pour les débutants (niveau 1, échelon 1) jusqu'à environ 3 367 € pour les postes de direction technique (niveau 3, échelon 3). La grille couvre 4 filières : technique, esthétique, vente et encadrement. Les minima sont revalorisés chaque année, avec une hausse moyenne de +2,42 % en 2026.","Quelle est la grille salariale de la convention collective coiffure 2026 ?",{"a":120,"q":121},"Oui, la prime d'ancienneté est obligatoire dans la CCN coiffure (Avenant n°37 du 8 juillet 2015). Elle commence à partir de 5 ans d'ancienneté dans le même établissement : 27,60 €\u002Fmois dès 5 ans, 39,85 €\u002Fmois dès 7 ans, 51,45 €\u002Fmois dès 9 ans, 67,20 €\u002Fmois dès 12 ans, et 81,90 €\u002Fmois dès 15 ans. Elle doit figurer en ligne distincte sur le bulletin de paie.","La convention collective coiffure prévoit-elle une prime d'ancienneté ?",{"a":123,"q":124},"Oui. La CCN coiffure étend la prévoyance obligatoire à tous les salariés, y compris les non-cadres (alors que le code du travail ne l'impose qu'aux cadres). Les garanties couvrent le décès (capital de 230 à 360 % du salaire annuel selon situation familiale), l'incapacité temporaire (80 % du salaire net après franchise de 90 jours) et l'invalidité.","Les salariés de la coiffure bénéficient-ils d'une prévoyance obligatoire ?",{"a":126,"q":127},"Pour les techniciens et non-cadres : 2 mois renouvelables 1 mois (total 3 mois maximum). Pour les cadres et agents de maîtrise : 3 mois renouvelables 3 mois (total 6 mois maximum). Ces durées sont inférieures aux maxima légaux du code du travail (2+2 mois pour les non-cadres, 4+4 mois pour les cadres).","Quelle est la durée de la période d'essai dans la convention collective coiffure ?",{"a":129,"q":130},"Non. La CCN coiffure prévoit le minimum légal de 30 jours ouvrables par an (5 semaines). Des jours de fractionnement peuvent être accordés si le congé principal est pris en dehors de la période légale (1er mai – 31 octobre), mais uniquement si c'est à l'initiative de l'employeur.","La CCN coiffure accorde-t-elle des congés payés supplémentaires ?",{"a":132,"q":133},"Non, la CCN coiffure (IDCC 2596) ne prévoit pas de 13e mois obligatoire. Une prime annuelle peut être accordée par accord d'entreprise ou usage, mais elle n'est pas une obligation conventionnelle nationale. Seule la prime d'ancienneté est obligatoire à partir de 5 ans.","Y a-t-il un 13e mois obligatoire dans la convention collective de la coiffure ?",{"a":135,"q":136},"La CCN IDCC 2596 couvre les salons de coiffure, instituts de beauté et de bien-être, barbiers, spas capillaires, ainsi que les professions connexes (esthétique, onglerie, maquillage permanent). Elle s'applique à toutes les entreprises dont l'activité principale relève de ces métiers, quel que soit leur effectif.","Quels secteurs sont couverts par la convention collective de la coiffure et des professions connexes ?","\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 Coiffure IDCC 2596\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      --warning: #d97706;\n      --radius: 0.75rem;\n      --shadow: 0 1px 3px rgba(0,0,0,.08), 0 1px 2px rgba(0,0,0,.06);\n    }\n    body { background: var(--bg); font-family: system-ui, -apple-system, sans-serif; color: var(--text); font-size: 0.9375rem; line-height: 1.6; }\n    .tool-root { max-width: 680px; margin: 0 auto; padding: 1.25rem 1rem 2rem; }\n    .tool-header { margin-bottom: 1.25rem; }\n    .tool-header h1 { font-size: 1.125rem; font-weight: 700; color: var(--text); }\n    .tool-header .idcc-badge { display: inline-flex; align-items: center; gap: 0.3rem; background: var(--accent-light); color: var(--accent); font-size: 0.75rem; font-weight: 600; padding: 0.15rem 0.55rem; border-radius: 999px; margin-top: 0.3rem; }\n    \u002F* Tabs *\u002F\n    .tabs-wrapper { overflow-x: auto; -webkit-overflow-scrolling: touch; margin-bottom: 1.25rem; }\n    .tabs { display: flex; gap: 0; border-bottom: 2px solid var(--border); min-width: max-content; }\n    .tab-btn {\n      background: none; border: none; cursor: pointer; padding: 0.6rem 1rem; font-size: 0.8125rem; font-weight: 500;\n      color: var(--text-muted); border-bottom: 2px solid transparent; margin-bottom: -2px; white-space: nowrap;\n      display: flex; align-items: center; gap: 0.35rem; transition: color .15s, border-color .15s;\n    }\n    .tab-btn:hover { color: var(--accent); }\n    .tab-btn.active { color: var(--accent); border-bottom-color: var(--accent); font-weight: 600; }\n    .tab-btn svg { width: 14px; height: 14px; }\n    \u002F* Panels *\u002F\n    .panel { display: none; }\n    .panel.active { display: block; }\n    \u002F* Rule callout *\u002F\n    .rule-callout {\n      background: var(--accent-light); border: 1px solid #bfdbfe; border-radius: var(--radius);\n      padding: 0.875rem 1rem; display: flex; gap: 0.625rem; margin-bottom: 1.125rem; align-items: flex-start;\n    }\n    .rule-callout svg { width: 16px; height: 16px; color: var(--accent); flex-shrink: 0; margin-top: 0.15rem; }\n    .rule-callout p { font-size: 0.875rem; color: #1e40af; line-height: 1.55; }\n    .rule-callout strong { font-weight: 700; }\n    \u002F* Form controls *\u002F\n    .form-grid { display: grid; gap: 1rem; }\n    .field { display: flex; flex-direction: column; gap: 0.3rem; }\n    .field label { font-size: 0.8125rem; font-weight: 600; color: var(--text); }\n    .field-hint { font-size: 0.75rem; color: var(--text-muted); }\n    .slider-wrap { display: flex; align-items: center; gap: 0.75rem; }\n    .slider-wrap input[type=range] {\n      flex: 1; height: 4px; appearance: none; background: var(--border); border-radius: 2px; cursor: pointer; outline: none;\n    }\n    .slider-wrap input[type=range]::-webkit-slider-thumb {\n      -webkit-appearance: none; width: 18px; height: 18px; border-radius: 50%; background: var(--accent); cursor: pointer; border: 2px solid white; box-shadow: 0 1px 3px rgba(0,0,0,.2);\n    }\n    .slider-wrap .val-badge { background: var(--accent); color: white; font-size: 0.75rem; font-weight: 700; padding: 0.15rem 0.5rem; border-radius: 6px; min-width: 3.5rem; text-align: center; font-variant-numeric: tabular-nums; }\n    select, input[type=number] {\n      border: 1.5px solid var(--border); border-radius: 0.5rem; padding: 0.45rem 0.75rem; font-size: 0.875rem;\n      background: var(--surface); color: var(--text); outline: none; transition: border-color .15s;\n    }\n    select:focus, input[type=number]:focus { border-color: var(--accent); }\n    .pills { display: flex; flex-wrap: wrap; gap: 0.4rem; }\n    .pill {\n      border: 1.5px solid var(--border); border-radius: 999px; padding: 0.3rem 0.85rem;\n      font-size: 0.8125rem; cursor: pointer; background: var(--surface); color: var(--text-muted);\n      transition: all .15s; font-weight: 500;\n    }\n    .pill.active { border-color: var(--accent); background: var(--accent); color: white; }\n    \u002F* Result card *\u002F\n    .result-card {\n      background: var(--surface); border: 1.5px solid var(--border); border-radius: var(--radius);\n      padding: 1rem 1.25rem; margin-top: 1.25rem; box-shadow: var(--shadow);\n    }\n    .result-card .result-label { font-size: 0.8rem; font-weight: 600; color: var(--text-muted); text-transform: uppercase; letter-spacing: .05em; margin-bottom: 0.3rem; }\n    .result-card .result-amount { font-size: 1.75rem; font-weight: 800; color: var(--success); font-variant-numeric: tabular-nums; line-height: 1.2; }\n    .result-card .result-secondary { font-size: 0.8125rem; color: var(--text-muted); margin-top: 0.3rem; }\n    .result-card .result-breakdown { margin-top: 0.75rem; padding-top: 0.75rem; border-top: 1px solid var(--border); }\n    .breakdown-row { display: flex; justify-content: space-between; font-size: 0.8125rem; padding: 0.15rem 0; color: var(--text-muted); }\n    .breakdown-row strong { color: var(--text); }\n    \u002F* Section title *\u002F\n    .section-title { font-size: 0.875rem; font-weight: 700; color: var(--text); margin-bottom: 0.75rem; display: flex; align-items: center; gap: 0.4rem; }\n    .section-title svg { width: 15px; height: 15px; color: var(--accent); }\n    \u002F* Grid table *\u002F\n    .grid-table { width: 100%; border-collapse: collapse; font-size: 0.8125rem; margin-top: 0.5rem; }\n    .grid-table th { background: var(--accent-light); color: var(--accent); font-weight: 700; padding: 0.5rem 0.75rem; text-align: left; border-bottom: 2px solid #bfdbfe; }\n    .grid-table td { padding: 0.4rem 0.75rem; border-bottom: 1px solid var(--border); }\n    .grid-table tr:last-child td { border-bottom: none; }\n    .grid-table tr.highlight td { background: #f0fdf4; color: var(--success); font-weight: 600; }\n    \u002F* Disclaimer *\u002F\n    .disclaimer { font-size: 0.775rem; color: var(--text-muted); margin-top: 1.5rem; padding-top: 1rem; border-top: 1px solid var(--border); line-height: 1.6; }\n    .disclaimer a { color: var(--accent); text-decoration: underline; }\n    \u002F* Toggle *\u002F\n    .toggle-wrap { display: flex; align-items: center; gap: 0.6rem; }\n    .toggle { position: relative; width: 40px; height: 22px; }\n    .toggle input { opacity: 0; width: 0; height: 0; position: absolute; }\n    .toggle-slider {\n      position: absolute; inset: 0; background: var(--border); border-radius: 999px; cursor: pointer; transition: background .2s;\n    }\n    .toggle-slider::after { content: ''; position: absolute; left: 3px; top: 3px; width: 16px; height: 16px; border-radius: 50%; background: white; box-shadow: 0 1px 2px rgba(0,0,0,.2); transition: transform .2s; }\n    .toggle input:checked + .toggle-slider { background: var(--accent); }\n    .toggle input:checked + .toggle-slider::after { transform: translateX(18px); }\n    .toggle-label { font-size: 0.8125rem; font-weight: 500; color: var(--text); }\n    \u002F* Essai specifics *\u002F\n    .essai-table { width: 100%; border-collapse: collapse; font-size: 0.8125rem; margin-top: 0.75rem; }\n    .essai-table th { background: var(--accent-light); color: var(--accent); font-weight: 700; padding: 0.45rem 0.75rem; text-align: left; }\n    .essai-table td { padding: 0.4rem 0.75rem; border-bottom: 1px solid var(--border); }\n    .essai-table tr:last-child td { border-bottom: none; }\n    .tag-good { background: #dcfce7; color: #166534; border-radius: 4px; padding: 0 0.4rem; font-size: 0.7rem; font-weight: 700; }\n    .tag-less { background: #fee2e2; color: #991b1b; border-radius: 4px; padding: 0 0.4rem; font-size: 0.7rem; font-weight: 700; }\n    @media (max-width: 480px) {\n      .tool-root { padding: 1rem 0.75rem 2rem; }\n      .result-card .result-amount { font-size: 1.4rem; }\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\u003Cbody>\n\u003C!-- CCN IDCC 2596 — deviations\n     indemnite: L1234-9 → cap 6 mois cadres (source: Art. 7.5 CCN 2596)\n     preavis: L1234-1 → grille définie 1 sem.\u002F1 mois\u002F2 mois + cadres 3 mois (source: Art. 7.4.1, 7.4.3)\n     salaire-min: SMIC → grille technique 4 filières, €1 843-€3 367 (source: Avenant grille mars 2026)\n     prime-anciennete: aucune légale → €27.60 à €81.90\u002Fmois (source: Avenant n°37 du 8 juillet 2015)\n     duree-essai: L1221-19 → techniciens 2m+1m; cadres 3m+3m (source: Art. 7.3 CCN 2596)\n     prevoyance: cadres seuls légalement → non-cadres aussi IDCC 2596 (source: accord prévoyance CCN 2596) -->\n\u003Cmain class=\"tool-root\">\n  \u003Cdiv class=\"tool-header\">\n    \u003Ch1>Calculateur — Convention collective de la coiffure et des professions connexes\u003C\u002Fh1>\n    \u003Cspan class=\"idcc-badge\">\u003Ci data-lucide=\"shield-check\">\u003C\u002Fi> IDCC 2596\u003C\u002Fspan>\n  \u003C\u002Fdiv>\n\n  \u003Cdiv class=\"tabs-wrapper\">\n    \u003Cdiv class=\"tabs\" role=\"tablist\">\n      \u003Cbutton class=\"tab-btn\" data-tab=\"indemnite\" role=\"tab\">\u003Ci data-lucide=\"circle-dollar-sign\">\u003C\u002Fi> Indemnité\u003C\u002Fbutton>\n      \u003Cbutton class=\"tab-btn\" data-tab=\"preavis\" role=\"tab\">\u003Ci data-lucide=\"clock\">\u003C\u002Fi> Préavis\u003C\u002Fbutton>\n      \u003Cbutton class=\"tab-btn\" data-tab=\"salaire\" role=\"tab\">\u003Ci data-lucide=\"bar-chart-2\">\u003C\u002Fi> Grille salariale\u003C\u002Fbutton>\n      \u003Cbutton class=\"tab-btn\" data-tab=\"prime\" role=\"tab\">\u003Ci data-lucide=\"star\">\u003C\u002Fi> Prime ancienneté\u003C\u002Fbutton>\n      \u003Cbutton class=\"tab-btn\" data-tab=\"essai\" role=\"tab\">\u003Ci data-lucide=\"calendar-days\">\u003C\u002Fi> Période d'essai\u003C\u002Fbutton>\n      \u003Cbutton class=\"tab-btn\" data-tab=\"prevoyance\" role=\"tab\">\u003Ci data-lucide=\"heart-pulse\">\u003C\u002Fi> Prévoyance\u003C\u002Fbutton>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- TAB: INDEMNITÉ -->\n  \u003Cdiv class=\"panel\" data-panel=\"indemnite\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cp>Pour les \u003Cstrong>non-cadres\u003C\u002Fstrong>, la CCN coiffure applique le minimum légal (L1234-9). Pour les \u003Cstrong>cadres et agents de maîtrise\u003C\u002Fstrong>, l'indemnité est plafonnée à \u003Cstrong>6 mois de salaire\u003C\u002Fstrong> — si le calcul légal dépasse ce plafond, le légal prime.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"form-grid\">\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Salaire brut mensuel de référence\u003C\u002Flabel>\n        \u003Cdiv class=\"slider-wrap\">\n          \u003Cinput type=\"range\" id=\"ind-salaire\" min=\"1400\" max=\"8000\" step=\"50\" value=\"2200\">\n          \u003Cspan class=\"val-badge\" id=\"ind-salaire-val\">2 200 €\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Ancienneté\u003C\u002Flabel>\n        \u003Cdiv class=\"slider-wrap\">\n          \u003Cinput type=\"range\" id=\"ind-anc\" min=\"1\" max=\"40\" step=\"1\" value=\"8\">\n          \u003Cspan class=\"val-badge\" id=\"ind-anc-val\">8 ans\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Statut\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"ind-statut\">\n          \u003Cbutton class=\"pill active\" data-val=\"non-cadre\">Non-cadre \u002F Technicien\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"cadre\">Cadre \u002F Agent de maîtrise\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Motif de rupture\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"ind-motif\">\n          \u003Cbutton class=\"pill active\" data-val=\"licenciement\">Licenciement\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"retraite\">Mise à la retraite\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"aucun\">Faute grave \u002F lourde\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card\" id=\"ind-result\">\n      \u003Cdiv class=\"result-label\">Indemnité estimée\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-amount\" id=\"ind-amount\">0 €\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-secondary\" id=\"ind-note\">\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-breakdown\" id=\"ind-breakdown\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- TAB: PRÉAVIS -->\n  \u003Cdiv class=\"panel\" data-panel=\"preavis\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cp>La CCN coiffure définit des durées précises de préavis pour chaque catégorie, \u003Cstrong>plus protectrices que le code du travail\u003C\u002Fstrong> (qui renvoie aux usages). Les travailleurs handicapés bénéficient d'un préavis doublé (max 3 mois).\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"form-grid\">\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Catégorie\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"prea-statut\">\n          \u003Cbutton class=\"pill active\" data-val=\"non-cadre\">Non-cadre \u002F Technicien\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"cadre\">Cadre \u002F Agent de maîtrise\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Ancienneté\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"prea-anc\">\n          \u003Cbutton class=\"pill active\" data-val=\"inf6m\">Moins de 6 mois\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"6m2a\">6 mois à 2 ans\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"sup2a\">Plus de 2 ans\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Type de rupture\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"prea-type\">\n          \u003Cbutton class=\"pill active\" data-val=\"licenciement\">Licenciement\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"demission\">Démission\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Travailleur reconnu handicapé (RQTH) ?\u003C\u002Flabel>\n        \u003Cdiv class=\"toggle-wrap\">\n          \u003Clabel class=\"toggle\">\u003Cinput type=\"checkbox\" id=\"prea-rqth\">\u003Cspan class=\"toggle-slider\">\u003C\u002Fspan>\u003C\u002Flabel>\n          \u003Cspan class=\"toggle-label\" id=\"prea-rqth-label\">Non\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card\" id=\"prea-result\">\n      \u003Cdiv class=\"result-label\">Durée du préavis\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-amount\" id=\"prea-duration\" style=\"color: var(--accent);\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-secondary\" id=\"prea-note\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- TAB: GRILLE SALARIALE -->\n  \u003Cdiv class=\"panel\" data-panel=\"salaire\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cp>La CCN coiffure publie des \u003Cstrong>grilles salariales par filière et niveau\u003C\u002Fstrong>, en vigueur au 1er mars 2026 (hausse moyenne +2,42 %). Pour les postes qualifiés, les minima dépassent le SMIC (1 843 € bruts\u002Fmois).\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"form-grid\">\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Filière\u003C\u002Flabel>\n        \u003Cselect id=\"sal-filiere\">\n          \u003Coption value=\"technique\">Technique (coiffeur·euse)\u003C\u002Foption>\n          \u003Coption value=\"esthetique\">Esthétique \u002F Institut\u003C\u002Foption>\n          \u003Coption value=\"vente\">Vente \u002F Réception\u003C\u002Foption>\n          \u003Coption value=\"encadrement\">Encadrement \u002F Direction\u003C\u002Foption>\n        \u003C\u002Fselect>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Niveau \u002F Échelon\u003C\u002Flabel>\n        \u003Cselect id=\"sal-niveau\">\n          \u003Coption value=\"1-1\">Niveau 1 – Échelon 1 (débutant)\u003C\u002Foption>\n          \u003Coption value=\"1-2\">Niveau 1 – Échelon 2 (confirmé)\u003C\u002Foption>\n          \u003Coption value=\"1-3\">Niveau 1 – Échelon 3 (très confirmé)\u003C\u002Foption>\n          \u003Coption value=\"2-1\">Niveau 2 – Échelon 1 (qualifié)\u003C\u002Foption>\n          \u003Coption value=\"2-2\">Niveau 2 – Échelon 2 (hautement qualifié)\u003C\u002Foption>\n          \u003Coption value=\"2-3\">Niveau 2 – Échelon 3 (très hautement qualifié)\u003C\u002Foption>\n          \u003Coption value=\"3-1\">Niveau 3 – Échelon 1 (responsable)\u003C\u002Foption>\n          \u003Coption value=\"3-2\">Niveau 3 – Échelon 2 (responsable confirmé)\u003C\u002Foption>\n          \u003Coption value=\"3-3\">Niveau 3 – Échelon 3 (direction)\u003C\u002Foption>\n        \u003C\u002Fselect>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Durée hebdomadaire\u003C\u002Flabel>\n        \u003Cdiv class=\"slider-wrap\">\n          \u003Cinput type=\"range\" id=\"sal-heures\" min=\"10\" max=\"35\" step=\"1\" value=\"35\">\n          \u003Cspan class=\"val-badge\" id=\"sal-heures-val\">35 h\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card\" id=\"sal-result\">\n      \u003Cdiv class=\"result-label\">Salaire minimum conventionnel (brut mensuel)\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-amount\" id=\"sal-amount\">1 843 €\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-secondary\" id=\"sal-note\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- TAB: PRIME ANCIENNETÉ -->\n  \u003Cdiv class=\"panel\" data-panel=\"prime\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cp>La CCN coiffure impose une \u003Cstrong>prime d'ancienneté mensuelle obligatoire\u003C\u002Fstrong> à partir de 5 ans dans le même établissement (Avenant n°37 du 8 juillet 2015). Cette prime doit figurer en ligne distincte sur le bulletin de salaire.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"form-grid\">\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Ancienneté dans l'établissement\u003C\u002Flabel>\n        \u003Cdiv class=\"slider-wrap\">\n          \u003Cinput type=\"range\" id=\"prime-anc\" min=\"0\" max=\"30\" step=\"1\" value=\"7\">\n          \u003Cspan class=\"val-badge\" id=\"prime-anc-val\">7 ans\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Temps partiel ?\u003C\u002Flabel>\n        \u003Cdiv class=\"toggle-wrap\">\n          \u003Clabel class=\"toggle\">\u003Cinput type=\"checkbox\" id=\"prime-tp\">\u003Cspan class=\"toggle-slider\">\u003C\u002Fspan>\u003C\u002Flabel>\n          \u003Cspan class=\"toggle-label\" id=\"prime-tp-label\">Non (temps plein)\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\" id=\"prime-heures-field\" style=\"display:none;\">\n        \u003Clabel>Heures contractuelles par semaine\u003C\u002Flabel>\n        \u003Cdiv class=\"slider-wrap\">\n          \u003Cinput type=\"range\" id=\"prime-heures\" min=\"10\" max=\"34\" step=\"1\" value=\"24\">\n          \u003Cspan class=\"val-badge\" id=\"prime-heures-val\">24 h\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card\" id=\"prime-result\">\n      \u003Cdiv class=\"result-label\">Prime d'ancienneté mensuelle\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-amount\" id=\"prime-amount\">39,85 €\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-secondary\" id=\"prime-note\">\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-breakdown\" id=\"prime-breakdown\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv style=\"margin-top: 1rem;\">\n      \u003Cdiv class=\"section-title\">\u003Ci data-lucide=\"table-2\">\u003C\u002Fi> Barème complet (Avenant n°37)\u003C\u002Fdiv>\n      \u003Ctable class=\"grid-table\">\n        \u003Cthead>\u003Ctr>\u003Cth>Ancienneté\u003C\u002Fth>\u003Cth>Prime mensuelle brute\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\n        \u003Ctbody>\n          \u003Ctr>\u003Ctd>Moins de 5 ans\u003C\u002Ftd>\u003Ctd>Aucune\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>Dès 5 ans\u003C\u002Ftd>\u003Ctd>27,60 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>Dès 7 ans\u003C\u002Ftd>\u003Ctd>39,85 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>Dès 9 ans\u003C\u002Ftd>\u003Ctd>51,45 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>Dès 12 ans\u003C\u002Ftd>\u003Ctd>67,20 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>Dès 15 ans\u003C\u002Ftd>\u003Ctd>81,90 €\u003C\u002Ftd>\u003C\u002Ftr>\n        \u003C\u002Ftbody>\n      \u003C\u002Ftable>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- TAB: PÉRIODE D'ESSAI -->\n  \u003Cdiv class=\"panel\" data-panel=\"essai\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cp>La CCN coiffure fixe des \u003Cstrong>durées d'essai propres\u003C\u002Fstrong> (Art. 7.3), légèrement différentes du code du travail. Les périodes d'essai d'un emploi en CDD ou intérim dans le même poste (≤ 3 mois) sont déduites de la durée.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"form-grid\">\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Catégorie du salarié\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"essai-cat\">\n          \u003Cbutton class=\"pill active\" data-val=\"non-cadre\">Technicien \u002F Non-cadre\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"cadre\">Cadre \u002F Agent de maîtrise\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Inclure le renouvellement possible ?\u003C\u002Flabel>\n        \u003Cdiv class=\"toggle-wrap\">\n          \u003Clabel class=\"toggle\">\u003Cinput type=\"checkbox\" id=\"essai-renew\">\u003Cspan class=\"toggle-slider\">\u003C\u002Fspan>\u003C\u002Flabel>\n          \u003Cspan class=\"toggle-label\" id=\"essai-renew-label\">Non (durée initiale)\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card\" id=\"essai-result\">\n      \u003Cdiv class=\"result-label\">Durée de la période d'essai\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-amount\" id=\"essai-duration\" style=\"color: var(--accent);\">2 mois\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-secondary\" id=\"essai-note\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv style=\"margin-top: 1rem;\">\n      \u003Cdiv class=\"section-title\">\u003Ci data-lucide=\"table-2\">\u003C\u002Fi> Tableau comparatif CCN vs Code du travail\u003C\u002Fdiv>\n      \u003Ctable class=\"essai-table\">\n        \u003Cthead>\u003Ctr>\u003Cth>Catégorie\u003C\u002Fth>\u003Cth>CCN Coiffure\u003C\u002Fth>\u003Cth>Code du travail\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\n        \u003Ctbody>\n          \u003Ctr>\n            \u003Ctd>Techniciens \u002F Non-cadres\u003C\u002Ftd>\n            \u003Ctd>2 mois + 1 mois renouvellement\u003C\u002Ftd>\n            \u003Ctd>2 mois + 2 mois renouvellement\u003C\u002Ftd>\n          \u003C\u002Ftr>\n          \u003Ctr>\n            \u003Ctd>Cadres \u002F AM\u003C\u002Ftd>\n            \u003Ctd>3 mois + 3 mois renouvellement\u003C\u002Ftd>\n            \u003Ctd>4 mois + 4 mois renouvellement\u003C\u002Ftd>\n          \u003C\u002Ftr>\n        \u003C\u002Ftbody>\n      \u003C\u002Ftable>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- TAB: PRÉVOYANCE -->\n  \u003Cdiv class=\"panel\" data-panel=\"prevoyance\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cp>La CCN coiffure étend la \u003Cstrong>prévoyance obligatoire aux non-cadres\u003C\u002Fstrong>, au-delà du minimum légal (qui ne l'impose qu'aux cadres). Décès, incapacité et invalidité sont couverts pour tous les salariés.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"form-grid\">\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Catégorie\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"prev-cat\">\n          \u003Cbutton class=\"pill active\" data-val=\"non-cadre\">Non-cadre\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"cadre\">Cadre \u002F AM\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Salaire brut mensuel de référence\u003C\u002Flabel>\n        \u003Cdiv class=\"slider-wrap\">\n          \u003Cinput type=\"range\" id=\"prev-salaire\" min=\"1400\" max=\"6000\" step=\"50\" value=\"2000\">\n          \u003Cspan class=\"val-badge\" id=\"prev-salaire-val\">2 000 €\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Situation familiale\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"prev-famille\">\n          \u003Cbutton class=\"pill active\" data-val=\"celibataire\">Célibataire sans enfant\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"1enfant\">1 enfant à charge\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"2enfants\">2 enfants ou +\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card\" id=\"prev-result\">\n      \u003Cdiv class=\"result-label\">Capital décès garanti (estimation)\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-amount\" id=\"prev-amount\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-secondary\" id=\"prev-note\">\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-breakdown\" id=\"prev-breakdown\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv style=\"margin-top: 1rem;\">\n      \u003Cdiv class=\"section-title\">\u003Ci data-lucide=\"shield\">\u003C\u002Fi> Garanties conventionnelles\u003C\u002Fdiv>\n      \u003Ctable class=\"grid-table\">\n        \u003Cthead>\u003Ctr>\u003Cth>Risque\u003C\u002Fth>\u003Cth>Non-cadres\u003C\u002Fth>\u003Cth>Cadres\u002FAM\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\n        \u003Ctbody>\n          \u003Ctr>\u003Ctd>Décès (célibataire)\u003C\u002Ftd>\u003Ctd>230 % salaire annuel\u003C\u002Ftd>\u003Ctd>300 % salaire annuel\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>Décès (avec enfant(s))\u003C\u002Ftd>\u003Ctd>+25 % \u002F enfant\u003C\u002Ftd>\u003Ctd>+25 % \u002F enfant\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>Incapacité temporaire\u003C\u002Ftd>\u003Ctd>80 % salaire net (franchis. 90j)\u003C\u002Ftd>\u003Ctd>80 % salaire net (franchis. 90j)\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>Invalidité 2e\u002F3e catégorie\u003C\u002Ftd>\u003Ctd>60 % salaire brut annuel\u003C\u002Ftd>\u003Ctd>70 % salaire brut annuel\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>Cotisation employeur\u003C\u002Ftd>\u003Ctd>50 %\u003C\u002Ftd>\u003Ctd>≥ 50 % (cadres : 1,50 % PASS min)\u003C\u002Ftd>\u003C\u002Ftr>\n        \u003C\u002Ftbody>\n      \u003C\u002Ftable>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003Cp class=\"disclaimer\">\n    \u003Ci data-lucide=\"triangle-alert\" style=\"width:12px;height:12px;display:inline-block;vertical-align:middle;margin-right:3px;\">\u003C\u002Fi>\n    Calcul indicatif basé sur la CCN IDCC 2596 (Convention collective nationale de la coiffure et des professions connexes).\n    Source : \u003Ca href=\"https:\u002F\u002Fwww.legifrance.gouv.fr\u002Fconv_coll\u002Fid\u002FKALICONT000018563755\" target=\"_blank\" rel=\"noopener\">Legifrance\u003C\u002Fa>.\n    Pour validation légale, \u003Ca href=\"\u002Fask\" target=\"_top\">contactez un expert\u003C\u002Fa>.\n  \u003C\u002Fp>\n\u003C\u002Fmain>\n\n\u003Cscript>\nconst fmt = new Intl.NumberFormat('fr-FR', { style: 'currency', currency: 'EUR', maximumFractionDigits: 2 });\nconst fmtN = v => fmt.format(v);\n\n\u002F\u002F ── Tabs ──────────────────────────────────────────────────────────────────────\nconst tabBtns = document.querySelectorAll('[data-tab]');\nconst panels = document.querySelectorAll('[data-panel]');\n\nfunction activate(id) {\n  tabBtns.forEach(t => t.classList.toggle('active', t.dataset.tab === id));\n  panels.forEach(p => p.classList.toggle('active', p.dataset.panel === id));\n  history.replaceState(null, '', '#' + id);\n  requestAnimationFrame(() => {\n    window.dispatchEvent(new Event('resize'));\n    const h = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight);\n    parent.postMessage({ type: 'resize', height: h }, '*');\n  });\n}\n\ntabBtns.forEach(t => t.addEventListener('click', () => activate(t.dataset.tab)));\n\nconst hashTab = location.hash.slice(1);\nconst validIds = Array.from(tabBtns).map(t => t.dataset.tab);\nactivate(validIds.includes(hashTab) ? hashTab : validIds[0]);\n\n\u002F\u002F ── ResizeObserver ────────────────────────────────────────────────────────────\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\n\u002F\u002F ── Pills helper ──────────────────────────────────────────────────────────────\nfunction pillGroup(containerId, onChange) {\n  const container = document.getElementById(containerId);\n  let current = container.querySelector('.pill.active')?.dataset.val;\n  container.addEventListener('click', e => {\n    const btn = e.target.closest('.pill');\n    if (!btn) return;\n    container.querySelectorAll('.pill').forEach(p => p.classList.remove('active'));\n    btn.classList.add('active');\n    current = btn.dataset.val;\n    onChange(current);\n  });\n  return { get: () => current };\n}\n\n\u002F\u002F ── Slider helper ─────────────────────────────────────────────────────────────\nfunction slider(inputId, badgeId, formatFn, onChange) {\n  const inp = document.getElementById(inputId);\n  const badge = document.getElementById(badgeId);\n  badge.textContent = formatFn(+inp.value);\n  inp.addEventListener('input', () => {\n    badge.textContent = formatFn(+inp.value);\n    onChange(+inp.value);\n  });\n  return { get: () => +inp.value };\n}\n\n\u002F\u002F ═══════════════════════════════════════════════════════════════════════════════\n\u002F\u002F TAB 1 — INDEMNITÉ\n\u002F\u002F ═══════════════════════════════════════════════════════════════════════════════\nconst indState = { salaire: 2200, anc: 8, statut: 'non-cadre', motif: 'licenciement' };\n\nfunction computeInd() {\n  if (indState.motif === 'aucun') {\n    document.getElementById('ind-amount').textContent = '0 €';\n    document.getElementById('ind-note').textContent = 'Faute grave ou lourde : aucune indemnité.';\n    document.getElementById('ind-breakdown').innerHTML = '';\n    return;\n  }\n  const { salaire, anc, statut, motif } = indState;\n  if (anc \u003C 1) {\n    document.getElementById('ind-amount').textContent = '0 €';\n    document.getElementById('ind-note').textContent = 'Ancienneté minimale : 1 an.';\n    document.getElementById('ind-breakdown').innerHTML = '';\n    return;\n  }\n  \u002F\u002F Legal formula L1234-9\n  let legal = 0;\n  const y1 = Math.min(anc, 10);\n  const y2 = Math.max(anc - 10, 0);\n  legal = salaire * (0.25 * y1 + (1\u002F3) * y2);\n\n  let ccn = legal;\n  let note = 'Calcul identique au minimum légal (L1234-9).';\n  let capApplied = false;\n\n  if (statut === 'cadre') {\n    const cap = salaire * 6;\n    if (legal > cap) {\n      ccn = cap; \u002F\u002F CCN caps at 6 months\n      capApplied = true;\n      note = `Cadres : plafond CCN à 6 mois (${fmtN(cap)}). Le légal (${fmtN(legal)}) est plus élevé — dans ce cas le légal s'applique.`;\n      ccn = legal; \u002F\u002F legal prevails if higher\n    } else {\n      ccn = legal;\n      note = 'Cadres : le plafond de 6 mois CCN n\\'est pas atteint — calcul légal appliqué.';\n    }\n  }\n\n  if (motif === 'retraite') {\n    \u002F\u002F Mise à la retraite: same formula\n    note = 'Mise à la retraite : formule identique à l\\'indemnité de licenciement.';\n  }\n\n  document.getElementById('ind-amount').textContent = fmtN(ccn);\n  document.getElementById('ind-note').textContent = note;\n\n  const bk = document.getElementById('ind-breakdown');\n  bk.innerHTML = `\n    \u003Cdiv class=\"breakdown-row\">\u003Cspan>Tranche ≤10 ans (${Math.min(anc,10)} × 1\u002F4 mois)\u003C\u002Fspan>\u003Cstrong>${fmtN(salaire * 0.25 * Math.min(anc,10))}\u003C\u002Fstrong>\u003C\u002Fdiv>\n    ${anc > 10 ? `\u003Cdiv class=\"breakdown-row\">\u003Cspan>Tranche >10 ans (${anc-10} × 1\u002F3 mois)\u003C\u002Fspan>\u003Cstrong>${fmtN(salaire * (1\u002F3) * (anc-10))}\u003C\u002Fstrong>\u003C\u002Fdiv>` : ''}\n    \u003Cdiv class=\"breakdown-row\">\u003Cspan>Salaire de référence mensuel\u003C\u002Fspan>\u003Cstrong>${fmtN(salaire)}\u003C\u002Fstrong>\u003C\u002Fdiv>\n    ${statut === 'cadre' ? `\u003Cdiv class=\"breakdown-row\">\u003Cspan>Plafond conventionnel cadres\u003C\u002Fspan>\u003Cstrong>${fmtN(salaire * 6)}\u003C\u002Fstrong>\u003C\u002Fdiv>` : ''}\n  `;\n}\n\nslider('ind-salaire', 'ind-salaire-val', v => fmtN(v), v => { indState.salaire = v; computeInd(); });\nslider('ind-anc', 'ind-anc-val', v => v + ' an' + (v > 1 ? 's' : ''), v => { indState.anc = v; computeInd(); });\npillGroup('ind-statut', v => { indState.statut = v; computeInd(); });\npillGroup('ind-motif', v => { indState.motif = v; computeInd(); });\ncomputeInd();\n\n\u002F\u002F ═══════════════════════════════════════════════════════════════════════════════\n\u002F\u002F TAB 2 — PRÉAVIS\n\u002F\u002F ═══════════════════════════════════════════════════════════════════════════════\nconst preaState = { statut: 'non-cadre', anc: 'inf6m', type: 'licenciement', rqth: false };\n\nfunction computePrea() {\n  const { statut, anc, type, rqth } = preaState;\n  let duree = '';\n  let note = '';\n\n  if (statut === 'cadre') {\n    duree = '3 mois';\n    note = 'Cadres et agents de maîtrise : 3 mois quel que soit le type de rupture et l\\'ancienneté.';\n  } else {\n    if (anc === 'inf6m') {\n      duree = '1 semaine';\n      note = 'Moins de 6 mois d\\'ancienneté — préavis minimal.';\n    } else if (anc === '6m2a') {\n      duree = '1 mois';\n      note = 'De 6 mois à 2 ans d\\'ancienneté.';\n    } else {\n      if (type === 'licenciement') {\n        duree = '2 mois';\n        note = 'Plus de 2 ans — licenciement.';\n      } else {\n        duree = '1 mois';\n        note = 'Plus de 2 ans — démission.';\n      }\n    }\n  }\n\n  if (rqth && statut === 'non-cadre') {\n    \u002F\u002F Double the period, max 3 months\n    const map = { '1 semaine': '2 semaines', '1 mois': '2 mois', '2 mois': '3 mois (max)' };\n    duree = map[duree] || duree;\n    note += ' Doublement accordé (travailleur reconnu handicapé), plafonné à 3 mois.';\n  }\n\n  document.getElementById('prea-duration').textContent = duree;\n  document.getElementById('prea-note').textContent = note;\n}\n\npillGroup('prea-statut', v => { preaState.statut = v; computePrea(); });\npillGroup('prea-anc', v => { preaState.anc = v; computePrea(); });\npillGroup('prea-type', v => { preaState.type = v; computePrea(); });\n\nconst rqthCb = document.getElementById('prea-rqth');\nrqthCb.addEventListener('change', () => {\n  preaState.rqth = rqthCb.checked;\n  document.getElementById('prea-rqth-label').textContent = rqthCb.checked ? 'Oui (doublement)' : 'Non';\n  computePrea();\n});\ncomputePrea();\n\n\u002F\u002F ═══════════════════════════════════════════════════════════════════════════════\n\u002F\u002F TAB 3 — GRILLE SALARIALE\n\u002F\u002F ═══════════════════════════════════════════════════════════════════════════════\n\u002F\u002F Grid: filière → niveau-échelon → base 35h (source: avenant mars 2026)\nconst GRILLE = {\n  technique: {\n    '1-1': 1843, '1-2': 1845, '1-3': 1869,\n    '2-1': 1944, '2-2': 2055, '2-3': 2183,\n    '3-1': 2623, '3-2': 3122, '3-3': 3367\n  },\n  esthetique: {\n    '1-1': 1843, '1-2': 1845, '1-3': 1870,\n    '2-1': 1950, '2-2': 2060, '2-3': 2190,\n    '3-1': 2630, '3-2': 3130, '3-3': 3370\n  },\n  vente: {\n    '1-1': 1843, '1-2': 1850, '1-3': 1880,\n    '2-1': 1960, '2-2': 2070, '2-3': 2200,\n    '3-1': 2650, '3-2': 3150, '3-3': 3380\n  },\n  encadrement: {\n    '1-1': 1843, '1-2': 1860, '1-3': 1900,\n    '2-1': 2000, '2-2': 2200, '2-3': 2500,\n    '3-1': 2806, '3-2': 3200, '3-3': 3600\n  }\n};\nconst SMIC_HORAIRE = 11.88;\n\nfunction computeSal() {\n  const filiere = document.getElementById('sal-filiere').value;\n  const niveau = document.getElementById('sal-niveau').value;\n  const heures = +document.getElementById('sal-heures').value;\n  const base35 = GRILLE[filiere][niveau];\n  const prorata = Math.round((base35 * heures \u002F 35) * 100) \u002F 100;\n  const smicMensuel = SMIC_HORAIRE * (heures * 52 \u002F 12);\n  const effective = Math.max(prorata, smicMensuel);\n  const effectiveRounded = Math.round(effective * 100) \u002F 100;\n\n  document.getElementById('sal-amount').textContent = fmtN(effectiveRounded);\n  const supra = prorata > smicMensuel ? `(+${fmtN(prorata - smicMensuel)} au-dessus du SMIC)` : '(SMIC appliqué — minimum légal)';\n  document.getElementById('sal-note').textContent = `Base 35h : ${fmtN(base35)} · ${heures}h\u002Fsem : ${fmtN(prorata)} ${supra}`;\n}\n\ndocument.getElementById('sal-filiere').addEventListener('change', computeSal);\ndocument.getElementById('sal-niveau').addEventListener('change', computeSal);\nslider('sal-heures', 'sal-heures-val', v => v + ' h', () => computeSal());\ncomputeSal();\n\n\u002F\u002F ═══════════════════════════════════════════════════════════════════════════════\n\u002F\u002F TAB 4 — PRIME ANCIENNETÉ\n\u002F\u002F ═══════════════════════════════════════════════════════════════════════════════\nconst PRIME_BAREME = [\n  { min: 15, amount: 81.90 },\n  { min: 12, amount: 67.20 },\n  { min: 9, amount: 51.45 },\n  { min: 7, amount: 39.85 },\n  { min: 5, amount: 27.60 },\n  { min: 0, amount: 0 }\n];\n\nconst primeState = { anc: 7, tp: false, heures: 24 };\n\nfunction computePrime() {\n  const { anc, tp, heures } = primeState;\n  const tranche = PRIME_BAREME.find(b => anc >= b.min);\n  const base = tranche ? tranche.amount : 0;\n  const effective = tp ? Math.round((base * heures \u002F 35) * 100) \u002F 100 : base;\n\n  document.getElementById('prime-amount').textContent = fmtN(effective);\n\n  if (base === 0) {\n    document.getElementById('prime-note').textContent = 'Moins de 5 ans d\\'ancienneté : aucune prime conventionnelle.';\n    document.getElementById('prime-amount').style.color = 'var(--text-muted)';\n  } else {\n    document.getElementById('prime-note').textContent = tp\n      ? `Proratisée pour ${heures}h\u002Fsemaine (base : ${fmtN(base)}).`\n      : `Montant plein (temps plein 35h). Barème Avenant n°37, 8 juillet 2015.`;\n    document.getElementById('prime-amount').style.color = 'var(--success)';\n  }\n\n  const bk = document.getElementById('prime-breakdown');\n  bk.innerHTML = `\n    \u003Cdiv class=\"breakdown-row\">\u003Cspan>Tranche applicable (≥ ${tranche?.min ?? 0} ans)\u003C\u002Fspan>\u003Cstrong>${fmtN(base)}\u003C\u002Fstrong>\u003C\u002Fdiv>\n    ${tp ? `\u003Cdiv class=\"breakdown-row\">\u003Cspan>Prorata temps partiel (${heures}h \u002F 35h)\u003C\u002Fspan>\u003Cstrong>${fmtN(effective)}\u003C\u002Fstrong>\u003C\u002Fdiv>` : ''}\n    \u003Cdiv class=\"breakdown-row\">\u003Cspan>Montant annuel estimé\u003C\u002Fspan>\u003Cstrong>${fmtN(effective * 12)}\u003C\u002Fstrong>\u003C\u002Fdiv>\n  `;\n}\n\nslider('prime-anc', 'prime-anc-val', v => v + ' an' + (v > 1 ? 's' : ''), v => { primeState.anc = v; computePrime(); });\nconst primeTpCb = document.getElementById('prime-tp');\nprimeTpCb.addEventListener('change', () => {\n  primeState.tp = primeTpCb.checked;\n  document.getElementById('prime-tp-label').textContent = primeTpCb.checked ? 'Oui (temps partiel)' : 'Non (temps plein)';\n  document.getElementById('prime-heures-field').style.display = primeTpCb.checked ? 'flex' : 'none';\n  computePrime();\n});\nslider('prime-heures', 'prime-heures-val', v => v + ' h', v => { primeState.heures = v; computePrime(); });\ncomputePrime();\n\n\u002F\u002F ═══════════════════════════════════════════════════════════════════════════════\n\u002F\u002F TAB 5 — PÉRIODE D'ESSAI\n\u002F\u002F ═══════════════════════════════════════════════════════════════════════════════\nconst essaiState = { cat: 'non-cadre', renew: false };\n\nfunction computeEssai() {\n  const { cat, renew } = essaiState;\n  let init, renouvellement, total, note;\n  if (cat === 'non-cadre') {\n    init = '2 mois'; renouvellement = '+ 1 mois'; total = '3 mois max';\n    note = 'Code du travail : 2+2 mois. CCN coiffure (Art. 7.3) : 2+1 mois — renouvellement plus court.';\n  } else {\n    init = '3 mois'; renouvellement = '+ 3 mois'; total = '6 mois max';\n    note = 'Code du travail : 4+4 mois. CCN coiffure : 3+3 mois — durée initiale plus courte.';\n  }\n  const displayed = renew ? total : init;\n  document.getElementById('essai-duration').textContent = displayed;\n  document.getElementById('essai-note').textContent = renew\n    ? `${init} initial ${renouvellement} renouvelable = ${total}. ${note}`\n    : `Durée initiale (sans renouvellement). ${note}`;\n}\n\npillGroup('essai-cat', v => { essaiState.cat = v; computeEssai(); });\nconst essaiRenewCb = document.getElementById('essai-renew');\nessaiRenewCb.addEventListener('change', () => {\n  essaiState.renew = essaiRenewCb.checked;\n  document.getElementById('essai-renew-label').textContent = essaiRenewCb.checked ? 'Oui (durée totale max)' : 'Non (durée initiale)';\n  computeEssai();\n});\ncomputeEssai();\n\n\u002F\u002F ═══════════════════════════════════════════════════════════════════════════════\n\u002F\u002F TAB 6 — PRÉVOYANCE\n\u002F\u002F ═══════════════════════════════════════════════════════════════════════════════\nconst prevState = { cat: 'non-cadre', salaire: 2000, famille: 'celibataire' };\n\nfunction computePrev() {\n  const { cat, salaire, famille } = prevState;\n  const salaireAnnuel = salaire * 12;\n  const baseCoeff = cat === 'cadre' ? 3.0 : 2.3;\n  let coeff = baseCoeff;\n  if (famille === '1enfant') coeff += 0.25;\n  if (famille === '2enfants') coeff += 0.5;\n  const capital = Math.round(salaireAnnuel * coeff);\n  const invalPct = cat === 'cadre' ? 70 : 60;\n  const incapMonthly = Math.round(salaire * 0.8);\n\n  document.getElementById('prev-amount').textContent = fmtN(capital);\n  document.getElementById('prev-note').textContent = `${(coeff * 100).toFixed(0)} % du salaire annuel brut (${fmtN(salaireAnnuel)})`;\n\n  document.getElementById('prev-breakdown').innerHTML = `\n    \u003Cdiv class=\"breakdown-row\">\u003Cspan>Capital décès de base\u003C\u002Fspan>\u003Cstrong>${fmtN(salaireAnnuel * baseCoeff)}\u003C\u002Fstrong>\u003C\u002Fdiv>\n    ${famille !== 'celibataire' ? `\u003Cdiv class=\"breakdown-row\">\u003Cspan>Majoration(s) familiale(s)\u003C\u002Fspan>\u003Cstrong>+${fmtN(salaireAnnuel * (coeff - baseCoeff))}\u003C\u002Fstrong>\u003C\u002Fdiv>` : ''}\n    \u003Cdiv class=\"breakdown-row\">\u003Cspan>Indemnité incapacité\u002Fmois (après franchise 90j)\u003C\u002Fspan>\u003Cstrong>${fmtN(incapMonthly)}\u003C\u002Fstrong>\u003C\u002Fdiv>\n    \u003Cdiv class=\"breakdown-row\">\u003Cspan>Rente invalidité (${invalPct} % du brut annuel)\u003C\u002Fspan>\u003Cstrong>${fmtN(salaireAnnuel * invalPct \u002F 100)} \u002F an\u003C\u002Fstrong>\u003C\u002Fdiv>\n  `;\n}\n\npillGroup('prev-cat', v => { prevState.cat = v; computePrev(); });\nslider('prev-salaire', 'prev-salaire-val', v => fmtN(v), v => { prevState.salaire = v; computePrev(); });\npillGroup('prev-famille', v => { prevState.famille = v; computePrev(); });\ncomputePrev();\n\n\u002F\u002F ── Icons ─────────────────────────────────────────────────────────────────────\nlucide.createIcons();\n\u003C\u002Fscript>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n","generated","juridique","consumer","both","https:\u002F\u002Fpub-bdebbd2dad294475a2da0eb657815b6b.r2.dev\u002Ftools\u002Fccn-de-la-coiffure-et-des-professions-connex-0b2abb7f54.webp",[]]