[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"footer-root-categories-fr-FR":3,"tool-content-ccn-entreprises-de-prevention-et-de-securite-fr":83,"footer-cities-fr":140},[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":134,"source":135,"category":136,"audience":137,"publish_mode":138,"hero_image":139,"hero_image_alt":85},"ccn-entreprises-de-prevention-et-de-securite","CCN des entreprises de prévention et de sécurité — calculateur complet","Calculateur CCN Sécurité Privée IDCC 1351 | Expert Zoom","Outil interactif couvrant le préavis, la grille de salaires 2026, la prime d'ancienneté, le 13e mois et les heures supplémentaires de la CCN des entreprises de prévention et de sécurité (IDCC 1351).","Ce calculateur couvre les principales dérogations de la CCN sécurité privée (IDCC 1351) au code du travail : grille de préavis par catégorie et ancienneté, minima conventionnels 2026 (coefficients 120–800, +2,8 %), prime d'ancienneté obligatoire (2–12 %), 13e mois (art. 27), et heures supplémentaires (équivalence 36h, contingent 329h).",[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 Sécurité Privée — IDCC 1351","WebApplication",{"name":94,"@type":95,"identifier":96},"Convention collective nationale des entreprises de prévention et de sécurité","Thing","IDCC 1351",{"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 le préavis, la grille de salaires, la prime d'ancienneté, le 13e mois et les heures supplémentaires de la convention collective des entreprises de prévention et de sécurité (IDCC 1351)","All","FinanceApplication",true,[110,113,116,119,122,125,128,131],{"a":111,"q":112},"La CCN sécurité privée (IDCC 1351) fixe une grille de préavis par catégorie et ancienneté. Pour les agents d'exploitation (niveaux I–III), le préavis va de 1 jour ouvrable (15 jours–1 mois d'ancienneté) à 2 mois (plus de 2 ans). Pour les agents de maîtrise niveaux IV–V, il peut atteindre 3 mois dès 2 ans d'ancienneté. Les cadres bénéficient jusqu'à 3 mois après 1 an d'ancienneté. Les travailleurs reconnus handicapés ont un préavis doublé, plafonné à 3 mois.","Quelle est la durée du préavis de licenciement dans la CCN sécurité privée (IDCC 1351) ?",{"a":114,"q":115},"La CCN 1351 publie une grille de minima conventionnels par coefficient (120 à 800). Au 1er janvier 2026, la revalorisation est de +2,8 % (accord triennal 2023). Le coefficient 120 (agent de sécurité qualifié) correspond à 1 883,85 €\u002Fmois brut (12,42 €\u002Fh). Le coefficient 140 (chef d'équipe\u002FSSIAP 1) atteint 1 965,78 €, le coefficient 150 (opérateur qualifié\u002Faéroport) 2 039,33 €, et les cadres (coef. 300) 2 968,47 €\u002Fmois.","Quelle est la grille de salaires minima de la CCN sécurité privée en 2026 ?",{"a":117,"q":118},"Oui, la CCN 1351 prévoit une prime d'ancienneté obligatoire pour les agents d'exploitation, employés, techniciens et agents de maîtrise. Elle est calculée sur le salaire minimum conventionnel : 2 % dès 4 ans d'ancienneté, 5 % à 7 ans, 8 % à 10 ans, 10 % à 12 ans, et 12 % à partir de 15 ans. Le code du travail n'impose aucune prime d'ancienneté.","La CCN sécurité privée prévoit-elle une prime d'ancienneté ?",{"a":120,"q":121},"Oui, l'article 27 de la CCN prévention et sécurité (IDCC 1351) impose un 13e mois obligatoire. Il correspond à un mois de salaire brut de base, versé annuellement aux salariés ayant au moins 1 an d'ancienneté et présents dans l'entreprise au 31 octobre. En cas d'année incomplète, le 13e mois est proratisé en fonction des mois travaillés.","Y a-t-il un 13e mois dans la convention collective sécurité privée ?",{"a":123,"q":124},"Oui, la CCN 1351 prévoit une équivalence : les heures effectuées entre 35h et 36h ne sont pas majorées (contrairement au droit commun qui prévoit +25 % dès la 36e heure). Les heures entre 36h et 43h sont majorées de 25 %, et celles à partir de 44h de 50 %. Le contingent annuel d'heures supplémentaires est fixé à 329 heures, contre 220 h par défaut dans le code du travail.","Les heures supplémentaires sont-elles majorées différemment dans la CCN sécurité privée ?",{"a":126,"q":127},"La CCN 1351 prévoit plusieurs primes spécifiques au secteur : une prime de panier de 4,48 € après 6 heures consécutives de travail, une prime mensuelle d'entretien des tenues de 8,54 € net (11 mois\u002Fan), une prime de nuit de +10 % du taux horaire conventionnel pour les heures effectuées entre 21h et 6h avec 1 % de repos compensateur, et le paiement du temps d'habillage\u002Fdéshabillage. Pour les agents aéroportuaires, des primes supplémentaires s'appliquent (prime annuelle sûreté, prime de panier 6,87 €).","Quelles sont les primes sectorielles spécifiques à la CCN sécurité privée ?",{"a":129,"q":130},"La CCN sécurité privée (IDCC 1351) ne prévoit pas de formule propre d'indemnité de licenciement : c'est l'indemnité légale du code du travail (art. L1234-9) qui s'applique, soit 1\u002F4 de mois de salaire par année pour les 10 premières années, puis 1\u002F3 de mois par année au-delà de 10 ans. En cas de licenciement pour inaptitude, l'indemnité est doublée conformément à la loi.","Quelle est l'indemnité de licenciement dans la convention collective sécurité privée ?",{"a":132,"q":133},"La convention collective nationale des entreprises de prévention et de sécurité porte le numéro IDCC 1351 et la brochure JO 3196. Elle est consultable sur Legifrance à l'adresse https:\u002F\u002Fwww.legifrance.gouv.fr\u002Fconv_coll\u002Fid\u002FKALICONT000005635405\u002F et s'applique aux entreprises du secteur de la sécurité privée en France.","Quel est l'IDCC de la convention collective des entreprises de prévention et de sécurité ?","\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 Sécurité Privée IDCC 1351\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      --muted: #78716c;\n      --success-bg: #f0fdf4;\n      --success-border: #bbf7d0;\n      --success-text: #166534;\n      --info-bg: #eff6ff;\n      --info-border: #bfdbfe;\n      --info-text: #1e40af;\n      --warning-bg: #fffbeb;\n      --warning-border: #fde68a;\n      --warning-text: #92400e;\n      --radius: 0.75rem;\n      --radius-sm: 0.5rem;\n    }\n    body { background: var(--bg); font-family: system-ui, -apple-system, sans-serif; font-size: 14px; color: var(--text); min-height: 100vh; }\n    .tool-root { max-width: 720px; margin: 0 auto; padding: 1rem; }\n    .tool-header { margin-bottom: 1.25rem; }\n    .tool-header h1 { font-size: 1.15rem; font-weight: 700; color: var(--text); line-height: 1.3; }\n    .tool-header .badge { display: inline-flex; align-items: center; gap: 0.3rem; background: var(--accent-light); color: var(--accent); border-radius: 9999px; padding: 0.2rem 0.65rem; font-size: 0.72rem; font-weight: 600; margin-top: 0.35rem; }\n    .tab-bar { display: flex; gap: 0.25rem; border-bottom: 2px solid var(--border); margin-bottom: 1.25rem; overflow-x: auto; padding-bottom: 0; -webkit-overflow-scrolling: touch; }\n    .tab-btn { flex-shrink: 0; display: flex; align-items: center; gap: 0.35rem; padding: 0.55rem 0.9rem; border: none; background: none; cursor: pointer; font-size: 0.8rem; font-weight: 500; color: var(--muted); border-bottom: 2.5px solid transparent; margin-bottom: -2px; transition: color 0.15s, border-color 0.15s; border-radius: var(--radius-sm) var(--radius-sm) 0 0; white-space: nowrap; }\n    .tab-btn:hover { color: var(--text); background: var(--accent-light); }\n    .tab-btn.active { color: var(--accent); border-bottom-color: var(--accent); font-weight: 600; }\n    .panel { display: none; }\n    .panel.active { display: block; }\n    .rule-callout { display: flex; gap: 0.6rem; align-items: flex-start; background: var(--info-bg); border: 1px solid var(--info-border); border-radius: var(--radius); padding: 0.75rem 1rem; margin-bottom: 1rem; }\n    .rule-callout i { color: var(--accent); flex-shrink: 0; margin-top: 1px; }\n    .rule-callout p { font-size: 0.82rem; color: var(--info-text); line-height: 1.5; }\n    .rule-callout strong { color: var(--accent-dark); }\n    .form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.9rem; margin-bottom: 1rem; }\n    @media (max-width: 480px) { .form-grid { grid-template-columns: 1fr; } }\n    .form-group { display: flex; flex-direction: column; gap: 0.35rem; }\n    .form-group.full { grid-column: 1 \u002F -1; }\n    label { font-size: 0.78rem; font-weight: 600; color: var(--text); }\n    .value-display { font-size: 0.72rem; color: var(--accent); font-weight: 600; font-variant-numeric: tabular-nums; }\n    input[type=range] { width: 100%; accent-color: var(--accent); height: 4px; cursor: pointer; }\n    select, input[type=number] { width: 100%; padding: 0.45rem 0.65rem; border: 1.5px solid var(--border); border-radius: var(--radius-sm); font-size: 0.82rem; color: var(--text); background: var(--surface); transition: border-color 0.15s; outline: none; }\n    select:focus, input[type=number]:focus { border-color: var(--accent); }\n    .pills { display: flex; flex-wrap: wrap; gap: 0.35rem; }\n    .pill { padding: 0.3rem 0.75rem; border-radius: 9999px; border: 1.5px solid var(--border); background: var(--surface); font-size: 0.78rem; cursor: pointer; transition: all 0.15s; font-weight: 500; color: var(--muted); }\n    .pill.active { background: var(--accent); border-color: var(--accent); color: #fff; }\n    .result-card { background: var(--success-bg); border: 2px solid var(--success-border); border-radius: var(--radius); padding: 1rem 1.25rem; display: flex; align-items: center; gap: 1rem; margin-top: 0.5rem; }\n    .result-card i { color: #16a34a; flex-shrink: 0; }\n    .result-label { font-size: 0.78rem; color: var(--success-text); font-weight: 500; }\n    .result-value { font-size: 1.35rem; font-weight: 700; color: #15803d; font-variant-numeric: tabular-nums; }\n    .result-sub { font-size: 0.72rem; color: var(--success-text); margin-top: 0.15rem; }\n    .result-card-neutral { background: var(--warning-bg); border: 2px solid var(--warning-border); border-radius: var(--radius); padding: 1rem 1.25rem; display: flex; align-items: center; gap: 1rem; margin-top: 0.5rem; }\n    .result-card-neutral i { color: #d97706; flex-shrink: 0; }\n    .result-label-n { font-size: 0.78rem; color: var(--warning-text); font-weight: 500; }\n    .result-value-n { font-size: 1.35rem; font-weight: 700; color: #92400e; font-variant-numeric: tabular-nums; }\n    .result-sub-n { font-size: 0.72rem; color: var(--warning-text); margin-top: 0.15rem; }\n    .table-wrapper { overflow-x: auto; margin-bottom: 1rem; border-radius: var(--radius); border: 1px solid var(--border); }\n    table { width: 100%; border-collapse: collapse; font-size: 0.8rem; }\n    th { background: var(--accent-light); color: var(--accent-dark); font-weight: 600; padding: 0.5rem 0.75rem; text-align: left; border-bottom: 1px solid var(--info-border); white-space: nowrap; }\n    td { padding: 0.45rem 0.75rem; border-bottom: 1px solid var(--border); color: var(--text); }\n    tr:last-child td { border-bottom: none; }\n    tr.highlight td { background: var(--accent-light); font-weight: 600; color: var(--accent-dark); }\n    .section-title { font-size: 0.85rem; font-weight: 700; color: var(--text); margin: 1rem 0 0.5rem; display: flex; align-items: center; gap: 0.4rem; }\n    .disclaimer { font-size: 0.72rem; color: var(--muted); border-top: 1px solid var(--border); margin-top: 1.25rem; padding-top: 0.75rem; line-height: 1.6; }\n    .disclaimer a { color: var(--accent); text-decoration: none; }\n    .disclaimer a:hover { text-decoration: underline; }\n    .divider { border: none; border-top: 1px solid var(--border); margin: 1rem 0; }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\u003Cbody>\n\u003C!-- CCN IDCC 1351 — entreprises de prévention et de sécurité\n     Deviations vs code du travail:\n     preavis: L1234-1 → grille spécifique par catégorie\u002Fniveau\u002Fancienneté\n     salaire-min: SMIC → grille coefficients 120–800 (accord triennal 2023, +2.8% au 01\u002F01\u002F2026)\n     prime-anciennete: aucune obligation légale → 2% à 12% sur salaire conventionnel (art. CCN)\n     13e-mois: aucune obligation légale → 1 mois de salaire brut de base (art. 27 CCN, 1 an ancienneté)\n     heures-supp: L3121-36 (35h) → 36h-43h = +25%, ≥44h = +50%, contingent 329h\u002Fan\n     Sources: https:\u002F\u002Fwww.legifrance.gouv.fr\u002Fconv_coll\u002Fid\u002FKALICONT000005635405\u002F\n              https:\u002F\u002Fcode.travail.gouv.fr\u002Fconvention-collective\u002F1351-entreprises-de-prevention-et-de-securite -->\n\u003Cmain class=\"tool-root\">\n  \u003Cdiv class=\"tool-header\">\n    \u003Ch1>Calculateur CCN Sécurité Privée\u003C\u002Fh1>\n    \u003Cspan class=\"badge\">\u003Ci data-lucide=\"shield\" style=\"width:12px;height:12px\">\u003C\u002Fi> IDCC 1351 · Brochure JO 3196\u003C\u002Fspan>\n  \u003C\u002Fdiv>\n\n  \u003Cdiv class=\"tab-bar\" role=\"tablist\">\n    \u003Cbutton class=\"tab-btn\" data-tab=\"preavis\" role=\"tab\">\u003Ci data-lucide=\"clock\" style=\"width:14px;height:14px\">\u003C\u002Fi> Préavis\u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"salaire\" role=\"tab\">\u003Ci data-lucide=\"bar-chart-2\" style=\"width:14px;height:14px\">\u003C\u002Fi> Grille salaires\u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"anciennete\" role=\"tab\">\u003Ci data-lucide=\"trending-up\" style=\"width:14px;height:14px\">\u003C\u002Fi> Prime ancienneté\u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"treizieme\" role=\"tab\">\u003Ci data-lucide=\"gift\" style=\"width:14px;height:14px\">\u003C\u002Fi> 13e mois\u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"heures\" role=\"tab\">\u003Ci data-lucide=\"timer\" style=\"width:14px;height:14px\">\u003C\u002Fi> Heures supp.\u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ===== TAB: PREAVIS ===== -->\n  \u003Cdiv class=\"panel\" data-panel=\"preavis\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\" style=\"width:16px;height:16px\">\u003C\u002Fi>\n      \u003Cp>La CCN prévention &amp; sécurité (IDCC 1351) fixe une grille de préavis \u003Cstrong>par catégorie, niveau et ancienneté\u003C\u002Fstrong>, distincte des durées générales de L1234-1. Les travailleurs handicapés bénéficient d'un préavis doublé, plafonné à 3 mois.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"form-grid\">\n      \u003Cdiv class=\"form-group full\">\n        \u003Clabel>Catégorie professionnelle\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"cat-pills\">\n          \u003Cspan class=\"pill active\" data-val=\"exploitation\">Agents d'exploitation \u002F Employés \u002F Techniciens\u003C\u002Fspan>\n          \u003Cspan class=\"pill\" data-val=\"maitrise\">Agents de maîtrise\u003C\u002Fspan>\n          \u003Cspan class=\"pill\" data-val=\"cadre\">Cadres\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"form-group\" id=\"niveau-group\">\n        \u003Clabel>Niveau\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"niveau-pills\">\n          \u003Cspan class=\"pill active\" data-val=\"1-3\">Niveaux I–III\u003C\u002Fspan>\n          \u003Cspan class=\"pill\" data-val=\"4-5\">Niveaux IV–V\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"form-group\">\n        \u003Clabel>Ancienneté dans l'entreprise\u003C\u002Flabel>\n        \u003Cselect id=\"anc-preavis\">\n          \u003Coption value=\"15j-1m\">15 jours – 1 mois\u003C\u002Foption>\n          \u003Coption value=\"1m-2m\">1 – 2 mois\u003C\u002Foption>\n          \u003Coption value=\"2m-6m\">2 – 6 mois\u003C\u002Foption>\n          \u003Coption value=\"6m-2a\">6 mois – 2 ans\u003C\u002Foption>\n          \u003Coption value=\"2a+\">Plus de 2 ans\u003C\u002Foption>\n        \u003C\u002Fselect>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"form-group full\">\n        \u003Clabel>Travailleur handicapé (RQTH) ?\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"th-pills\">\n          \u003Cspan class=\"pill active\" data-val=\"non\">Non\u003C\u002Fspan>\n          \u003Cspan class=\"pill\" data-val=\"oui\">Oui (préavis ×2, max 3 mois)\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card-neutral\" id=\"res-preavis\">\n      \u003Ci data-lucide=\"clock\" style=\"width:28px;height:28px\">\u003C\u002Fi>\n      \u003Cdiv>\n        \u003Cdiv class=\"result-label-n\">Durée du préavis\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-value-n\" id=\"preavis-val\">—\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-sub-n\" id=\"preavis-sub\">\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ===== TAB: SALAIRE ===== -->\n  \u003Cdiv class=\"panel\" data-panel=\"salaire\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\" style=\"width:16px;height:16px\">\u003C\u002Fi>\n      \u003Cp>La CCN publie une grille de \u003Cstrong>minima conventionnels par coefficient (120 à 800)\u003C\u002Fstrong>, révisée chaque année. Au 1er janvier 2026, la revalorisation est de +2,8 % (accord triennal 2023). Ces minima sont supérieurs au SMIC (1 823,03 €\u002Fmois en 2026).\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"form-grid\">\n      \u003Cdiv class=\"form-group\">\n        \u003Clabel>Catégorie\u003C\u002Flabel>\n        \u003Cselect id=\"cat-salaire\">\n          \u003Coptgroup label=\"Agents d'exploitation\">\n            \u003Coption value=\"120\">Coef. 120 — Agent de sécurité qualifié\u003C\u002Foption>\n            \u003Coption value=\"130\">Coef. 130 — Agent confirmé\u003C\u002Foption>\n            \u003Coption value=\"140\">Coef. 140 — Chef d'équipe \u002F SSIAP 1\u003C\u002Foption>\n            \u003Coption value=\"150\">Coef. 150 — Opérateur qualifié \u002F Aéroport\u003C\u002Foption>\n            \u003Coption value=\"160\">Coef. 160 — Agent aéroportuaire\u003C\u002Foption>\n            \u003Coption value=\"190\">Coef. 190 — Coordinateur\u003C\u002Foption>\n            \u003Coption value=\"210\">Coef. 210 — Niveau IV\u003C\u002Foption>\n            \u003Coption value=\"250\">Coef. 250 — Niveau V senior\u003C\u002Foption>\n          \u003C\u002Foptgroup>\n          \u003Coptgroup label=\"Agents de maîtrise\">\n            \u003Coption value=\"am150\">AM 150 — Chef d'équipe maîtrise\u003C\u002Foption>\n            \u003Coption value=\"am200\">AM 200 — Responsable encadrement\u003C\u002Foption>\n            \u003Coption value=\"am275\">AM 275 — Encadrement supérieur\u003C\u002Foption>\n          \u003C\u002Foptgroup>\n          \u003Coptgroup label=\"Cadres\">\n            \u003Coption value=\"300\">Coef. 300 — Cadre débutant\u003C\u002Foption>\n            \u003Coption value=\"500\">Coef. 500 — Cadre confirmé\u003C\u002Foption>\n            \u003Coption value=\"800\">Coef. 800 — Cadre supérieur\u003C\u002Foption>\n          \u003C\u002Foptgroup>\n        \u003C\u002Fselect>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"form-group\">\n        \u003Clabel>Durée hebdomadaire de travail (h)\u003C\u002Flabel>\n        \u003Cinput type=\"number\" id=\"heures-hebdo\" value=\"35\" min=\"10\" max=\"48\" step=\"0.5\">\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card\" id=\"res-salaire\">\n      \u003Ci data-lucide=\"euro\" style=\"width:28px;height:28px\">\u003C\u002Fi>\n      \u003Cdiv>\n        \u003Cdiv class=\"result-label\">Salaire minimum conventionnel mensuel brut\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-value\" id=\"salaire-val\">—\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-sub\" id=\"salaire-sub\">\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Chr class=\"divider\">\n    \u003Cdiv class=\"section-title\">\u003Ci data-lucide=\"table\" style=\"width:15px;height:15px\">\u003C\u002Fi> Extrait grille 2026 (coefficients principaux)\u003C\u002Fdiv>\n    \u003Cdiv class=\"table-wrapper\">\n      \u003Ctable>\n        \u003Cthead>\n          \u003Ctr>\u003Cth>Coefficient\u003C\u002Fth>\u003Cth>Poste type\u003C\u002Fth>\u003Cth>Salaire mensuel brut\u003C\u002Fth>\u003Cth>Taux horaire\u003C\u002Fth>\u003C\u002Ftr>\n        \u003C\u002Fthead>\n        \u003Ctbody>\n          \u003Ctr>\u003Ctd>120\u003C\u002Ftd>\u003Ctd>Agent de sécurité qualifié\u003C\u002Ftd>\u003Ctd>1 883,85 €\u003C\u002Ftd>\u003Ctd>12,42 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>130\u003C\u002Ftd>\u003Ctd>Agent confirmé\u003C\u002Ftd>\u003Ctd>1 908,54 €\u003C\u002Ftd>\u003Ctd>12,58 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>140\u003C\u002Ftd>\u003Ctd>Chef d'équipe \u002F SSIAP 1\u003C\u002Ftd>\u003Ctd>1 965,78 €\u003C\u002Ftd>\u003Ctd>12,96 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>150\u003C\u002Ftd>\u003Ctd>Opérateur qualifié \u002F Aéroport \u002F Nucléaire\u003C\u002Ftd>\u003Ctd>2 039,33 €\u003C\u002Ftd>\u003Ctd>13,45 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>160\u003C\u002Ftd>\u003Ctd>Agent aéroportuaire\u003C\u002Ftd>\u003Ctd>2 152,09 €\u003C\u002Ftd>\u003Ctd>14,19 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>190\u003C\u002Ftd>\u003Ctd>Coordinateur\u003C\u002Ftd>\u003Ctd>2 502,06 €\u003C\u002Ftd>\u003Ctd>16,49 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>210\u003C\u002Ftd>\u003Ctd>Niveau IV\u003C\u002Ftd>\u003Ctd>2 735,99 €\u003C\u002Ftd>\u003Ctd>18,03 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>250\u003C\u002Ftd>\u003Ctd>Niveau V senior\u003C\u002Ftd>\u003Ctd>3 202,76 €\u003C\u002Ftd>\u003Ctd>21,11 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>AM 150\u003C\u002Ftd>\u003Ctd>Chef d'équipe maîtrise\u003C\u002Ftd>\u003Ctd>2 234,30 €\u003C\u002Ftd>\u003Ctd>14,73 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>AM 200\u003C\u002Ftd>\u003Ctd>Responsable encadrement\u003C\u002Ftd>\u003Ctd>2 851,20 €\u003C\u002Ftd>\u003Ctd>18,80 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>AM 275\u003C\u002Ftd>\u003Ctd>Encadrement supérieur\u003C\u002Ftd>\u003Ctd>3 776,29 €\u003C\u002Ftd>\u003Ctd>24,90 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>300\u003C\u002Ftd>\u003Ctd>Cadre débutant\u003C\u002Ftd>\u003Ctd>2 968,47 €\u003C\u002Ftd>\u003Ctd>19,57 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>500\u003C\u002Ftd>\u003Ctd>Cadre confirmé\u003C\u002Ftd>\u003Ctd>4 600,00 €\u003C\u002Ftd>\u003Ctd>30,33 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>800\u003C\u002Ftd>\u003Ctd>Cadre supérieur\u003C\u002Ftd>\u003Ctd>6 908,48 €\u003C\u002Ftd>\u003Ctd>45,55 €\u003C\u002Ftd>\u003C\u002Ftr>\n        \u003C\u002Ftbody>\n      \u003C\u002Ftable>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ===== TAB: PRIME ANCIENNETÉ ===== -->\n  \u003Cdiv class=\"panel\" data-panel=\"anciennete\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\" style=\"width:16px;height:16px\">\u003C\u002Fi>\n      \u003Cp>La CCN prévoit une \u003Cstrong>prime d'ancienneté obligatoire\u003C\u002Fstrong> pour les agents d'exploitation, employés, techniciens et agents de maîtrise, calculée en % du salaire minimum conventionnel. Le code du travail ne prévoit pas de telle obligation.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"form-grid\">\n      \u003Cdiv class=\"form-group\">\n        \u003Clabel>Ancienneté \u003Cspan class=\"value-display\" id=\"anc-val-display\">0 an\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"anc-slider\" min=\"0\" max=\"25\" step=\"1\" value=\"0\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"form-group\">\n        \u003Clabel>Salaire minimum conventionnel mensuel (€)\u003C\u002Flabel>\n        \u003Cinput type=\"number\" id=\"sal-anc\" value=\"1884\" min=\"1823\" step=\"1\">\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card\" id=\"res-anciennete\">\n      \u003Ci data-lucide=\"trending-up\" style=\"width:28px;height:28px\">\u003C\u002Fi>\n      \u003Cdiv>\n        \u003Cdiv class=\"result-label\">Prime d'ancienneté mensuelle brute\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-value\" id=\"anc-val\">—\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-sub\" id=\"anc-sub\">\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Chr class=\"divider\">\n    \u003Cdiv class=\"section-title\">\u003Ci data-lucide=\"table\" style=\"width:15px;height:15px\">\u003C\u002Fi> Barème CCN\u003C\u002Fdiv>\n    \u003Cdiv class=\"table-wrapper\">\n      \u003Ctable>\n        \u003Cthead>\u003Ctr>\u003Cth>Ancienneté\u003C\u002Fth>\u003Cth>Taux\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\n        \u003Ctbody>\n          \u003Ctr>\u003Ctd>Moins de 4 ans\u003C\u002Ftd>\u003Ctd>0 %\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>Dès 4 ans\u003C\u002Ftd>\u003Ctd>2 %\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>Dès 7 ans\u003C\u002Ftd>\u003Ctd>5 %\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>Dès 10 ans\u003C\u002Ftd>\u003Ctd>8 %\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>Dès 12 ans\u003C\u002Ftd>\u003Ctd>10 %\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>Dès 15 ans\u003C\u002Ftd>\u003Ctd>12 %\u003C\u002Ftd>\u003C\u002Ftr>\n        \u003C\u002Ftbody>\n      \u003C\u002Ftable>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ===== TAB: 13E MOIS ===== -->\n  \u003Cdiv class=\"panel\" data-panel=\"treizieme\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\" style=\"width:16px;height:16px\">\u003C\u002Fi>\n      \u003Cp>La CCN (art. 27) prévoit un \u003Cstrong>13e mois obligatoire\u003C\u002Fstrong>, versé annuellement à tout salarié ayant au moins 1 an d'ancienneté et présent dans l'entreprise le 31 octobre. Le code du travail ne prévoit aucune obligation de 13e mois.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"form-grid\">\n      \u003Cdiv class=\"form-group\">\n        \u003Clabel>Salaire brut de base mensuel (€) \u003Cspan class=\"value-display\" id=\"sal13-display\">2 000 €\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"sal13-slider\" min=\"1823\" max=\"8000\" step=\"10\" value=\"2000\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"form-group\">\n        \u003Clabel>Ancienneté au 31 octobre\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"anc13-pills\">\n          \u003Cspan class=\"pill\" data-val=\"moins1\">Moins de 1 an\u003C\u002Fspan>\n          \u003Cspan class=\"pill active\" data-val=\"1plus\">1 an ou plus\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"form-group\">\n        \u003Clabel>Mois travaillés dans l'année\u003C\u002Flabel>\n        \u003Cinput type=\"number\" id=\"mois13\" value=\"12\" min=\"1\" max=\"12\" step=\"1\">\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card\" id=\"res-13\">\n      \u003Ci data-lucide=\"gift\" style=\"width:28px;height:28px\">\u003C\u002Fi>\n      \u003Cdiv>\n        \u003Cdiv class=\"result-label\">13e mois annuel brut\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-value\" id=\"treize-val\">—\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-sub\" id=\"treize-sub\">\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ===== TAB: HEURES SUPP ===== -->\n  \u003Cdiv class=\"panel\" data-panel=\"heures\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\" style=\"width:16px;height:16px\">\u003C\u002Fi>\n      \u003Cp>La CCN prévention &amp; sécurité fixe la \u003Cstrong>durée équivalence à 36 heures\u003C\u002Fstrong> : les heures effectuées entre 35h et 36h sont payées au taux normal, les heures 36h–43h à \u003Cstrong>+25 %\u003C\u002Fstrong>, et à partir de 44h à \u003Cstrong>+50 %\u003C\u002Fstrong>. Le contingent annuel est de \u003Cstrong>329 h\u003C\u002Fstrong> (vs 220 h légal).\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"form-grid\">\n      \u003Cdiv class=\"form-group\">\n        \u003Clabel>Salaire horaire brut de base (€) \u003Cspan class=\"value-display\" id=\"taux-display\">12,42 €\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"taux-slider\" min=\"12\" max=\"50\" step=\"0.01\" value=\"12.42\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"form-group\">\n        \u003Clabel>Heures travaillées cette semaine\u003C\u002Flabel>\n        \u003Cinput type=\"number\" id=\"heures-sem\" value=\"40\" min=\"35\" max=\"60\" step=\"0.5\">\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card\" id=\"res-heures\">\n      \u003Ci data-lucide=\"timer\" style=\"width:28px;height:28px\">\u003C\u002Fi>\n      \u003Cdiv>\n        \u003Cdiv class=\"result-label\">Rémunération heures supplémentaires\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-value\" id=\"heures-val\">—\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-sub\" id=\"heures-sub\">\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Chr class=\"divider\">\n    \u003Cdiv class=\"section-title\">\u003Ci data-lucide=\"table\" style=\"width:15px;height:15px\">\u003C\u002Fi> Barème majorations CCN 1351\u003C\u002Fdiv>\n    \u003Cdiv class=\"table-wrapper\">\n      \u003Ctable>\n        \u003Cthead>\u003Ctr>\u003Cth>Tranche horaire\u003C\u002Fth>\u003Cth>Majoration CCN\u003C\u002Fth>\u003Cth>Code du travail\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\n        \u003Ctbody>\n          \u003Ctr>\u003Ctd>35h – 36h\u003C\u002Ftd>\u003Ctd>0 % (équivalence)\u003C\u002Ftd>\u003Ctd>+25 %\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>36h – 43h\u003C\u002Ftd>\u003Ctd>+25 %\u003C\u002Ftd>\u003Ctd>+25 %\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>≥ 44h\u003C\u002Ftd>\u003Ctd>+50 %\u003C\u002Ftd>\u003Ctd>+50 %\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>Contingent annuel\u003C\u002Ftd>\u003Ctd>329 h\u003C\u002Ftd>\u003Ctd>220 h (défaut)\u003C\u002Ftd>\u003C\u002Ftr>\n        \u003C\u002Ftbody>\n      \u003C\u002Ftable>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003Cp class=\"disclaimer\">\n    Calcul indicatif basé sur la CCN IDCC 1351 (brochure JO 3196) — Entreprises de prévention et de sécurité.\n    Source&nbsp;: \u003Ca href=\"https:\u002F\u002Fwww.legifrance.gouv.fr\u002Fconv_coll\u002Fid\u002FKALICONT000005635405\u002F\" target=\"_blank\" rel=\"noopener\">Legifrance\u003C\u002Fa> &amp;\n    \u003Ca href=\"https:\u002F\u002Fcode.travail.gouv.fr\u002Fconvention-collective\u002F1351-entreprises-de-prevention-et-de-securite\" target=\"_blank\" rel=\"noopener\">code.travail.gouv.fr\u003C\u002Fa>.\n    Grille salariale à jour au 1er janvier 2026 (+2,8&nbsp;%, accord triennal 2023).\n    Pour validation légale\n  \u003C\u002Fp>\n\u003C\u002Fmain>\n\n\u003Cscript>\n\u002F\u002F ==================== PREAVIS STATE ====================\nconst statePreavis = { cat: 'exploitation', niveau: '1-3', anc: '6m-2a', th: 'non' };\n\nconst preAvisGrid = {\n  exploitation: {\n    '1-3': { '15j-1m': '1 jour ouvrable', '1m-2m': '2 jours ouvrables', '2m-6m': '7 jours calendaires', '6m-2a': '1 mois', '2a+': '2 mois' },\n    '4-5': { '15j-1m': '1 jour ouvrable', '1m-2m': '2 jours ouvrables', '2m-6m': '14 jours calendaires', '6m-2a': '1 mois', '2a+': '2 mois' }\n  },\n  maitrise: {\n    '1-3': { '15j-1m': '1 semaine', '1m-2m': '1 semaine', '2m-6m': '2 semaines', '6m-2a': '1 mois', '2a+': '2 mois' },\n    '4-5': { '15j-1m': '1 semaine', '1m-2m': '1 semaine', '2m-6m': '2 semaines', '6m-2a': '2 mois', '2a+': '3 mois' }\n  },\n  cadre: {\n    '1-3': { '15j-1m': '7 jours calendaires', '1m-2m': '14 jours calendaires', '2m-6m': '1 mois', '6m-2a': '2 mois', '2a+': '3 mois' },\n    '4-5': { '15j-1m': '7 jours calendaires', '1m-2m': '14 jours calendaires', '2m-6m': '1 mois', '6m-2a': '2 mois', '2a+': '3 mois' }\n  }\n};\n\nfunction computePreavis() {\n  const base = preAvisGrid[statePreavis.cat]?.[statePreavis.cat === 'cadre' ? '1-3' : statePreavis.niveau]?.[statePreavis.anc] || '—';\n  let result = base;\n  let sub = '';\n  if (statePreavis.th === 'oui') {\n    sub = '(doublé RQTH, plafonné à 3 mois selon CCN)';\n    const doubleMap = {\n      '1 jour ouvrable': '2 jours ouvrables',\n      '2 jours ouvrables': '4 jours ouvrables',\n      '7 jours calendaires': '14 jours calendaires',\n      '14 jours calendaires': '1 mois',\n      '1 semaine': '2 semaines',\n      '2 semaines': '1 mois',\n      '1 mois': '2 mois',\n      '2 mois': '3 mois (plafond RQTH)',\n      '3 mois': '3 mois (plafond RQTH)'\n    };\n    result = doubleMap[base] || base;\n  }\n  document.getElementById('preavis-val').textContent = result;\n  document.getElementById('preavis-sub').textContent = sub;\n}\n\ndocument.querySelectorAll('#cat-pills .pill').forEach(p => p.addEventListener('click', () => {\n  document.querySelectorAll('#cat-pills .pill').forEach(x => x.classList.remove('active'));\n  p.classList.add('active');\n  statePreavis.cat = p.dataset.val;\n  document.getElementById('niveau-group').style.display = statePreavis.cat === 'cadre' ? 'none' : '';\n  computePreavis();\n}));\ndocument.querySelectorAll('#niveau-pills .pill').forEach(p => p.addEventListener('click', () => {\n  document.querySelectorAll('#niveau-pills .pill').forEach(x => x.classList.remove('active'));\n  p.classList.add('active');\n  statePreavis.niveau = p.dataset.val;\n  computePreavis();\n}));\ndocument.getElementById('anc-preavis').addEventListener('change', e => { statePreavis.anc = e.target.value; computePreavis(); });\ndocument.querySelectorAll('#th-pills .pill').forEach(p => p.addEventListener('click', () => {\n  document.querySelectorAll('#th-pills .pill').forEach(x => x.classList.remove('active'));\n  p.classList.add('active');\n  statePreavis.th = p.dataset.val;\n  computePreavis();\n}));\n\n\u002F\u002F ==================== SALAIRE STATE ====================\nconst salaireGrid = {\n  '120': { base: 1883.85, label: 'Agent de sécurité qualifié (coef. 120)' },\n  '130': { base: 1908.54, label: 'Agent confirmé (coef. 130)' },\n  '140': { base: 1965.78, label: 'Chef d\\'équipe \u002F SSIAP 1 (coef. 140)' },\n  '150': { base: 2039.33, label: 'Opérateur qualifié \u002F Aéroport (coef. 150)' },\n  '160': { base: 2152.09, label: 'Agent aéroportuaire (coef. 160)' },\n  '190': { base: 2502.06, label: 'Coordinateur (coef. 190)' },\n  '210': { base: 2735.99, label: 'Niveau IV (coef. 210)' },\n  '250': { base: 3202.76, label: 'Niveau V senior (coef. 250)' },\n  'am150': { base: 2234.30, label: 'Chef d\\'équipe maîtrise (AM 150)' },\n  'am200': { base: 2851.20, label: 'Responsable encadrement (AM 200)' },\n  'am275': { base: 3776.29, label: 'Encadrement supérieur (AM 275)' },\n  '300': { base: 2968.47, label: 'Cadre débutant (coef. 300)' },\n  '500': { base: 4600.00, label: 'Cadre confirmé (coef. 500)' },\n  '800': { base: 6908.48, label: 'Cadre supérieur (coef. 800)' }\n};\n\nconst fmt = v => new Intl.NumberFormat('fr-FR', { style: 'currency', currency: 'EUR' }).format(v);\nconst fmth = v => new Intl.NumberFormat('fr-FR', { style: 'currency', currency: 'EUR', minimumFractionDigits: 2 }).format(v);\n\nfunction computeSalaire() {\n  const key = document.getElementById('cat-salaire').value;\n  const h = parseFloat(document.getElementById('heures-hebdo').value) || 35;\n  const d = salaireGrid[key];\n  if (!d) return;\n  const base35 = d.base;\n  const salAdjuste = base35 * (h \u002F 35);\n  const tauxH = base35 \u002F 151.67;\n  document.getElementById('salaire-val').textContent = fmt(salAdjuste);\n  document.getElementById('salaire-sub').textContent = `Base 35h : ${fmt(base35)} · Taux horaire : ${fmth(tauxH)} · SMIC 2026 : 1 823,03 €`;\n}\ndocument.getElementById('cat-salaire').addEventListener('change', computeSalaire);\ndocument.getElementById('heures-hebdo').addEventListener('input', computeSalaire);\n\n\u002F\u002F ==================== ANCIENNETÉ STATE ====================\nconst ancBareme = [\n  { min: 0, max: 3, taux: 0 },\n  { min: 4, max: 6, taux: 0.02 },\n  { min: 7, max: 9, taux: 0.05 },\n  { min: 10, max: 11, taux: 0.08 },\n  { min: 12, max: 14, taux: 0.10 },\n  { min: 15, max: 99, taux: 0.12 }\n];\nfunction getTaux(anc) {\n  for (let b of ancBareme) if (anc >= b.min && anc \u003C= b.max) return b.taux;\n  return 0.12;\n}\nfunction computeAnciennete() {\n  const anc = parseInt(document.getElementById('anc-slider').value) || 0;\n  const sal = parseFloat(document.getElementById('sal-anc').value) || 1884;\n  document.getElementById('anc-val-display').textContent = anc + ' an' + (anc > 1 ? 's' : '');\n  const taux = getTaux(anc);\n  const prime = sal * taux;\n  document.getElementById('anc-val').textContent = fmt(prime);\n  document.getElementById('anc-sub').textContent = `Taux : ${(taux * 100).toFixed(0)} % × ${fmt(sal)} (salaire conventionnel)`;\n}\ndocument.getElementById('anc-slider').addEventListener('input', computeAnciennete);\ndocument.getElementById('sal-anc').addEventListener('input', computeAnciennete);\n\n\u002F\u002F ==================== 13E MOIS STATE ====================\nlet state13 = { eligible: true };\nfunction compute13() {\n  const sal = parseInt(document.getElementById('sal13-slider').value) || 2000;\n  const mois = parseInt(document.getElementById('mois13').value) || 12;\n  document.getElementById('sal13-display').textContent = fmt(sal);\n  if (!state13.eligible) {\n    document.getElementById('treize-val').textContent = '0 €';\n    document.getElementById('treize-sub').textContent = 'Ancienneté insuffisante (\u003C 1 an ou absent au 31 octobre)';\n    return;\n  }\n  const prime = sal * (mois \u002F 12);\n  document.getElementById('treize-val').textContent = fmt(prime);\n  document.getElementById('treize-sub').textContent = `${sal} € × ${mois}\u002F12 mois${mois \u003C 12 ? ' (proratisé)' : ''}`;\n}\ndocument.getElementById('sal13-slider').addEventListener('input', compute13);\ndocument.getElementById('mois13').addEventListener('input', compute13);\ndocument.querySelectorAll('#anc13-pills .pill').forEach(p => p.addEventListener('click', () => {\n  document.querySelectorAll('#anc13-pills .pill').forEach(x => x.classList.remove('active'));\n  p.classList.add('active');\n  state13.eligible = p.dataset.val === '1plus';\n  compute13();\n}));\n\n\u002F\u002F ==================== HEURES SUPP STATE ====================\nfunction computeHeures() {\n  const taux = parseFloat(document.getElementById('taux-slider').value) || 12.42;\n  const h = parseFloat(document.getElementById('heures-sem').value) || 40;\n  document.getElementById('taux-display').textContent = fmth(taux);\n\n  let total = 0, detail = [];\n  \u002F\u002F 35h-36h : pas de majoration (équivalence CCN)\n  if (h > 35) {\n    const h1 = Math.min(h, 36) - 35;\n    const m1 = h1 * taux;\n    total += m1;\n    if (h1 > 0) detail.push(`${h1.toFixed(1)}h (35h–36h) × ${fmth(taux)} = ${fmt(m1)}`);\n  }\n  \u002F\u002F 36h-43h : +25%\n  if (h > 36) {\n    const h2 = Math.min(h, 43) - 36;\n    const m2 = h2 * taux * 1.25;\n    total += m2;\n    if (h2 > 0) detail.push(`${h2.toFixed(1)}h (36h–43h) × ${fmth(taux)} × 1,25 = ${fmt(m2)}`);\n  }\n  \u002F\u002F ≥44h : +50%\n  if (h > 43) {\n    const h3 = h - 43;\n    const m3 = h3 * taux * 1.5;\n    total += m3;\n    if (h3 > 0) detail.push(`${h3.toFixed(1)}h (≥44h) × ${fmth(taux)} × 1,50 = ${fmt(m3)}`);\n  }\n  document.getElementById('heures-val').textContent = h \u003C= 35 ? '0 € (≤ 35h)' : fmt(total);\n  document.getElementById('heures-sub').textContent = detail.join(' · ') || 'Aucune heure supplémentaire';\n}\ndocument.getElementById('taux-slider').addEventListener('input', computeHeures);\ndocument.getElementById('heures-sem').addEventListener('input', computeHeures);\n\n\u002F\u002F ==================== TABS ====================\nconst tabs = document.querySelectorAll('[data-tab]');\nconst panels = document.querySelectorAll('[data-panel]');\nfunction activate(id) {\n  tabs.forEach(t => t.classList.toggle('active', t.dataset.tab === id));\n  panels.forEach(p => p.classList.toggle('active', p.dataset.panel === id));\n  if (location.hash !== '#' + id) location.hash = id;\n  requestAnimationFrame(() => {\n    const h = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight);\n    parent.postMessage({ type: 'resize', height: h }, '*');\n  });\n}\ntabs.forEach(t => t.addEventListener('click', () => activate(t.dataset.tab)));\nconst hashTab = location.hash.slice(1);\nconst firstTab = tabs[0]?.dataset.tab;\nconst targetTab = document.querySelector(`[data-tab=\"${hashTab}\"]`) ? hashTab : firstTab;\nactivate(targetTab);\n\n\u002F\u002F ==================== INITIAL COMPUTE ====================\ncomputePreavis();\ncomputeSalaire();\ncomputeAnciennete();\ncompute13();\ncomputeHeures();\n\n\u002F\u002F ==================== RESIZE OBSERVER ====================\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 ==================== LUCIDE 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-entreprises-de-prevention-et-de-securite-3860201acb.webp",[]]