[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"footer-root-categories-fr-FR":3,"tool-content-ccn-restauration-rapide-fr":83,"footer-cities-fr":154},[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":117,"tool_html":148,"source":149,"category":150,"audience":151,"publish_mode":152,"hero_image":153,"hero_image_alt":85},"ccn-restauration-rapide","CCN de la restauration rapide — calculateur complet","Calculateur CCN Restauration Rapide IDCC 1501 | Expert Zoom","Outil interactif couvrant l'indemnité de licenciement, le préavis, la grille salariale, la prime annuelle (PAC) et les heures supplémentaires de la CCN de la restauration rapide (IDCC 1501).","Ce calculateur couvre les 5 principales déviations de la convention collective de la restauration rapide (IDCC 1501) par rapport au code du travail : indemnité de licenciement (formule 1\u002F10 + 1\u002F15), préavis par catégorie et ancienneté, grille salariale 2024 (Avenant n°67), prime annuelle conventionnelle (PAC, Avenant n°68) et heures supplémentaires avec repos compensateur de remplacement.",[90],{"name":91,"@type":92,"about":93,"author":98,"@context":101,"isPartOf":102,"keywords":105,"inLanguage":106,"description":107,"featureList":108,"operatingSystem":114,"applicationCategory":115,"isAccessibleForFree":116},"Calculateur CCN Restauration Rapide — IDCC 1501","WebApplication",{"name":94,"@type":95,"sameAs":96,"identifier":97},"Convention collective nationale de la restauration rapide","Thing","https:\u002F\u002Fwww.legifrance.gouv.fr\u002Fconv_coll\u002Fid\u002FKALICONT000005635596","IDCC 1501",{"name":99,"@type":100},"Expert-Zoom","Organization","https:\u002F\u002Fschema.org",{"url":103,"@type":104},"\u002Ffr\u002Fmagazine\u002Fjuridique\u002Fles-conventions-collectives-en-france","Article","convention collective restauration rapide, IDCC 1501, indemnité licenciement, préavis, grille salaires, prime annuelle, heures supplémentaires","fr","Outil interactif couvrant l'indemnité de licenciement, le préavis, la grille salariale, la prime annuelle conventionnelle (PAC) et les heures supplémentaires de la convention collective de la restauration rapide (IDCC 1501).",[109,110,111,112,113],"Calcul indemnité de licenciement (non-cadre et cadre)","Durée du préavis par catégorie et ancienneté","Grille de salaires minimums conventionnels 2024","Prime annuelle conventionnelle (PAC) selon ancienneté","Calcul heures supplémentaires et repos compensateur","All","FinanceApplication",true,[118,121,124,127,130,133,136,139,142,145],{"a":119,"q":120},"La CCN restauration rapide prévoit pour les non-cadres : 1\u002F10 de mois de salaire par année d'ancienneté jusqu'à 10 ans, puis 1\u002F15 de mois par année au-delà. Pour les cadres, la formule est progressive par tranches (1\u002F5 jusqu'à 5 ans, puis 2\u002F10 + 1\u002F15 entre 5 et 10 ans, etc.). La règle la plus favorable entre le calcul conventionnel et le calcul légal (L1234-9 : 1\u002F4 mois × an ≤10 ans + 1\u002F3 mois × an >10 ans) s'applique au salarié.","Comment calculer l'indemnité de licenciement dans la restauration rapide (IDCC 1501) ?",{"a":122,"q":123},"La durée du préavis (licenciement ou démission) dépend de la catégorie : Ouvrier : 8 jours si moins de 6 mois d'ancienneté, 1 mois sinon. Employé : 8 jours (\u003C 6 mois), 15 jours (6 mois – 2 ans), 1 mois (> 2 ans). Agent de maîtrise : 1 mois (≤ 2 ans), 2 mois (> 2 ans). Cadre : 3 mois, quelle que soit l'ancienneté.","Quelle est la durée du préavis dans la restauration rapide ?",{"a":125,"q":126},"Depuis le 1er mai 2024 (Avenant n°67), la grille va de 11,65 €\u002Fh (Niveau I – Échelon A, soit environ 1 767 €\u002Fmois pour 35h) à 17,05 €\u002Fh (Niveau IV – Échelon D, soit environ 2 585 €\u002Fmois). Pour les cadres (Niveau V), les minima annuels sont : 43 899 € (Échelon A), 45 263 € (Échelon B) et 71 198 € (Échelon C).","Quels sont les salaires minimums de la convention collective restauration rapide en 2024 ?",{"a":128,"q":129},"La PAC est une prime obligatoire dès 1 an d'ancienneté, définie par l'Avenant n°68 du 30 avril 2024. Son montant varie selon l'ancienneté : 215 € (1 à 3 ans), 285 € (3 à 5 ans), 365 € (5 à 10 ans), 475 € (10 ans et plus). Elle est proratisée pour les temps partiels. Elle n'est pas cumulable avec un 13ème mois ou une prime d'ancienneté d'un montant supérieur.","Qu'est-ce que la prime annuelle conventionnelle (PAC) dans la restauration rapide ?",{"a":131,"q":132},"Les majorations sont identiques au code du travail : +25% pour les heures de la 36e à la 43e heure, +50% à partir de la 44e heure. La CCN prévoit également la possibilité de remplacer le paiement par un repos compensateur de remplacement (RCR) : 1h15 par heure à 25%, et 1h30 par heure à 50%. Le contingent annuel est fixé à 220 heures.","Quel est le taux de majoration des heures supplémentaires dans la restauration rapide ?",{"a":134,"q":135},"Les congés payés annuels restent à 30 jours ouvrables, identique à la loi. En revanche, la CCN ajoute des jours pour événements familiaux non prévus par le code du travail : 3 jours par an pour enfant hospitalisé de moins de 16 ans, et 2 jours par période de 3 ans pour déménagement.","Les congés payés sont-ils supérieurs à la loi dans la restauration rapide ?",{"a":137,"q":138},"La prime annuelle conventionnelle (PAC) est accessible dès 1 an d'ancienneté révolue. En dessous de ce seuil, le salarié n'y a pas droit. Elle est versée une fois par an, dans le mois suivant la clôture de l'exercice précédent.","À partir de combien d'années d'ancienneté peut-on prétendre à la prime annuelle de la restauration rapide ?",{"a":140,"q":141},"La classification se fait sur 5 niveaux : Niveau I (équipier débutant), Niveau II (équipier confirmé), Niveau III (poste à responsabilités ou chef de poste), Niveau IV (encadrement intermédiaire), Niveau V (cadres). Chaque niveau comprend des échelons (A, B, C, D) correspondant à des taux horaires différents. La progression du Niveau I Échelon A au B est automatique après 10 mois de présence.","Quelle est la différence entre les niveaux de classification dans la restauration rapide ?",{"a":143,"q":144},"Pour les non-cadres, la formule conventionnelle (1\u002F10 + 1\u002F15) est généralement moins favorable que le calcul légal (1\u002F4 + 1\u002F3 au-delà de 10 ans). C'est pourquoi la loi impose d'appliquer le calcul le plus favorable pour le salarié. En pratique, le calcul légal s'applique dans la quasi-totalité des cas pour les non-cadres.","L'indemnité de licenciement de la restauration rapide est-elle favorable ou défavorable pour le salarié ?",{"a":146,"q":147},"Un cadre relevant de la CCN restauration rapide (IDCC 1501) doit respecter un préavis de 3 mois en cas de démission, quelle que soit son ancienneté. Ce délai peut être réduit d'un commun accord entre l'employeur et le salarié.","Comment se calcule le préavis d'un cadre de la restauration rapide en cas de démission ?","\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 Restauration Rapide — IDCC 1501\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      --card: #ffffff;\n      --border: #e7e5e4;\n      --accent: #2563eb;\n      --accent-light: #eff6ff;\n      --accent-text: #1e40af;\n      --text: #1c1917;\n      --muted: #78716c;\n      --success: #16a34a;\n      --success-light: #f0fdf4;\n      --warning: #d97706;\n      --warning-light: #fffbeb;\n      --radius: 0.75rem;\n      --radius-sm: 0.375rem;\n    }\n    body {\n      font-family: system-ui, -apple-system, sans-serif;\n      background: var(--bg);\n      color: var(--text);\n      min-height: 100vh;\n      padding: 1rem;\n    }\n    .tool-root { max-width: 700px; margin: 0 auto; }\n    .tool-header {\n      margin-bottom: 1.25rem;\n    }\n    .tool-header h1 {\n      font-size: 1.2rem;\n      font-weight: 700;\n      color: var(--text);\n      line-height: 1.3;\n    }\n    .tool-header .idcc-badge {\n      display: inline-flex;\n      align-items: center;\n      gap: 0.3rem;\n      background: var(--accent-light);\n      color: var(--accent-text);\n      border-radius: 2rem;\n      padding: 0.2rem 0.65rem;\n      font-size: 0.78rem;\n      font-weight: 600;\n      margin-top: 0.4rem;\n    }\n    \u002F* Tabs *\u002F\n    .tabs-nav {\n      display: flex;\n      flex-wrap: wrap;\n      gap: 0.3rem;\n      border-bottom: 2px solid var(--border);\n      margin-bottom: 1.25rem;\n      padding-bottom: 0;\n    }\n    .tab-btn {\n      display: flex;\n      align-items: center;\n      gap: 0.35rem;\n      padding: 0.5rem 0.9rem;\n      border: none;\n      background: transparent;\n      color: var(--muted);\n      font-size: 0.85rem;\n      font-weight: 500;\n      cursor: pointer;\n      border-bottom: 2px solid transparent;\n      margin-bottom: -2px;\n      border-radius: var(--radius-sm) var(--radius-sm) 0 0;\n      transition: color 0.15s, border-color 0.15s, background 0.15s;\n    }\n    .tab-btn:hover { color: var(--accent); background: var(--accent-light); }\n    .tab-btn.active {\n      color: var(--accent);\n      border-bottom-color: var(--accent);\n      font-weight: 700;\n    }\n    .tab-panel { display: none; }\n    .tab-panel.visible { display: block; }\n\n    \u002F* Rule callout *\u002F\n    .rule-callout {\n      display: flex;\n      gap: 0.6rem;\n      align-items: flex-start;\n      background: var(--accent-light);\n      border: 1px solid #bfdbfe;\n      border-radius: var(--radius-sm);\n      padding: 0.75rem 1rem;\n      margin-bottom: 1.1rem;\n      font-size: 0.85rem;\n      color: var(--accent-text);\n      line-height: 1.5;\n    }\n    .rule-callout svg { flex-shrink: 0; margin-top: 0.1rem; }\n\n    \u002F* Form *\u002F\n    .form-group { margin-bottom: 1rem; }\n    label {\n      display: block;\n      font-size: 0.82rem;\n      font-weight: 600;\n      color: var(--muted);\n      margin-bottom: 0.35rem;\n      text-transform: uppercase;\n      letter-spacing: 0.04em;\n    }\n    .slider-row {\n      display: flex;\n      align-items: center;\n      gap: 0.75rem;\n    }\n    input[type=\"range\"] {\n      flex: 1;\n      accent-color: var(--accent);\n      height: 4px;\n    }\n    .slider-val {\n      font-size: 0.9rem;\n      font-weight: 700;\n      color: var(--accent);\n      min-width: 70px;\n      text-align: right;\n      font-variant-numeric: tabular-nums;\n    }\n    .pill-group {\n      display: flex;\n      flex-wrap: wrap;\n      gap: 0.4rem;\n    }\n    .pill {\n      padding: 0.35rem 0.85rem;\n      border: 1.5px solid var(--border);\n      border-radius: 2rem;\n      font-size: 0.82rem;\n      font-weight: 500;\n      cursor: pointer;\n      background: var(--card);\n      color: var(--muted);\n      transition: all 0.12s;\n    }\n    .pill.selected {\n      background: var(--accent);\n      border-color: var(--accent);\n      color: #fff;\n    }\n    select {\n      width: 100%;\n      padding: 0.55rem 0.75rem;\n      border: 1.5px solid var(--border);\n      border-radius: var(--radius-sm);\n      font-size: 0.88rem;\n      background: var(--card);\n      color: var(--text);\n      appearance: none;\n      background-image: url(\"data:image\u002Fsvg+xml,%3Csvg xmlns='http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%2378716c' stroke-width='2'%3E%3Cpath d='m6 9 6 6 6-6'\u002F%3E%3C\u002Fsvg%3E\");\n      background-repeat: no-repeat;\n      background-position: right 0.6rem center;\n      padding-right: 2rem;\n    }\n\n    \u002F* Result card *\u002F\n    .result-card {\n      background: var(--success-light);\n      border: 1.5px solid #bbf7d0;\n      border-radius: var(--radius);\n      padding: 1.1rem 1.25rem;\n      margin-top: 1.25rem;\n    }\n    .result-label {\n      font-size: 0.8rem;\n      font-weight: 600;\n      text-transform: uppercase;\n      letter-spacing: 0.05em;\n      color: var(--success);\n      margin-bottom: 0.3rem;\n    }\n    .result-value {\n      font-size: 1.85rem;\n      font-weight: 800;\n      color: var(--success);\n      font-variant-numeric: tabular-nums;\n      line-height: 1.1;\n    }\n    .result-sub {\n      font-size: 0.8rem;\n      color: var(--muted);\n      margin-top: 0.35rem;\n    }\n    .result-breakdown {\n      margin-top: 0.75rem;\n      font-size: 0.82rem;\n      color: var(--muted);\n      border-top: 1px solid #bbf7d0;\n      padding-top: 0.6rem;\n      line-height: 1.6;\n    }\n\n    \u002F* Preavis result *\u002F\n    .result-card.preavis {\n      background: var(--warning-light);\n      border-color: #fde68a;\n    }\n    .result-card.preavis .result-label { color: var(--warning); }\n    .result-card.preavis .result-value { color: var(--warning); }\n    .result-card.preavis .result-breakdown { border-color: #fde68a; }\n\n    \u002F* Salary grid table *\u002F\n    .salary-table {\n      width: 100%;\n      border-collapse: collapse;\n      font-size: 0.82rem;\n      margin-top: 0.5rem;\n    }\n    .salary-table th {\n      background: var(--accent-light);\n      color: var(--accent-text);\n      padding: 0.45rem 0.6rem;\n      text-align: left;\n      font-weight: 600;\n      font-size: 0.78rem;\n      text-transform: uppercase;\n      letter-spacing: 0.03em;\n    }\n    .salary-table td {\n      padding: 0.45rem 0.6rem;\n      border-bottom: 1px solid var(--border);\n      font-variant-numeric: tabular-nums;\n    }\n    .salary-table tr:last-child td { border-bottom: none; }\n    .salary-table tr.highlighted td {\n      background: var(--success-light);\n      color: var(--success);\n      font-weight: 700;\n    }\n    .salary-table tr:hover td { background: var(--bg); }\n\n    \u002F* PAC tab *\u002F\n    .pac-grid {\n      display: grid;\n      gap: 0.5rem;\n      margin-top: 0.5rem;\n    }\n    .pac-item {\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n      padding: 0.6rem 0.85rem;\n      border: 1.5px solid var(--border);\n      border-radius: var(--radius-sm);\n      background: var(--card);\n      transition: border-color 0.12s, background 0.12s;\n    }\n    .pac-item.active {\n      border-color: var(--accent);\n      background: var(--accent-light);\n    }\n    .pac-item-label { font-size: 0.84rem; font-weight: 500; }\n    .pac-item-amount { font-size: 0.95rem; font-weight: 700; color: var(--accent-text); font-variant-numeric: tabular-nums; }\n\n    \u002F* Disclaimer *\u002F\n    .disclaimer {\n      font-size: 0.75rem;\n      color: var(--muted);\n      line-height: 1.5;\n      margin-top: 1.25rem;\n      padding-top: 0.85rem;\n      border-top: 1px solid var(--border);\n    }\n    .disclaimer a { color: var(--accent); text-decoration: none; }\n    .disclaimer a:hover { text-decoration: underline; }\n\n    @media (max-width: 480px) {\n      body { padding: 0.75rem; }\n      .result-value { font-size: 1.4rem; }\n      .tab-btn { padding: 0.4rem 0.65rem; font-size: 0.8rem; }\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\u003Cbody>\n\u003C!-- CCN IDCC 1501 — Restauration Rapide — deviations\n     indemnite: L1234-9 → formule 1\u002F10 × années (≤10 ans) + 1\u002F15 × années au-delà (non-cadres)\n                cadres: 1\u002F5 × années (≤5 ans), 2\u002F10+1\u002F15 (5-10 ans), +2\u002F15 (10-15 ans), +3\u002F15 (>15 ans)\n                règle: appliquer le calcul le plus favorable entre légal et conventionnel\n     preavis: L1234-1 → tiers spécifiques par catégorie (ouvrier\u002Femployé\u002FAM\u002Fcadre) × ancienneté\n     salaire-min: grille 5 niveaux × échelons A-D (Avenant n°67, 1er mai 2024)\n     prime-annuelle: Avenant n°68 — PAC obligatoire 215-475 € selon ancienneté (≥1 an)\n     heures-supp: mêmes taux (25%\u002F50%) + modalité repos compensateur de remplacement détaillée\n     Source: Légifrance KALICONT000005635596 + Avenant n°67 et n°68 du 30 avril 2024 -->\n\u003Cmain class=\"tool-root\">\n  \u003Cdiv class=\"tool-header\">\n    \u003Ch1>Calculateur — Convention Collective de la Restauration Rapide\u003C\u002Fh1>\n    \u003Cspan class=\"idcc-badge\">\n      \u003Ci data-lucide=\"shield-check\" width=\"13\" height=\"13\">\u003C\u002Fi>\n      IDCC 1501\n    \u003C\u002Fspan>\n  \u003C\u002Fdiv>\n\n  \u003Cnav class=\"tabs-nav\" role=\"tablist\">\n    \u003Cbutton class=\"tab-btn\" data-tab=\"indemnite\" role=\"tab\" aria-selected=\"false\">\n      \u003Ci data-lucide=\"calculator\" width=\"14\" height=\"14\">\u003C\u002Fi> Indemnité\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"preavis\" role=\"tab\" aria-selected=\"false\">\n      \u003Ci data-lucide=\"clock\" width=\"14\" height=\"14\">\u003C\u002Fi> Préavis\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"salaire-min\" role=\"tab\" aria-selected=\"false\">\n      \u003Ci data-lucide=\"bar-chart-2\" width=\"14\" height=\"14\">\u003C\u002Fi> Grille salariale\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"prime\" role=\"tab\" aria-selected=\"false\">\n      \u003Ci data-lucide=\"gift\" width=\"14\" height=\"14\">\u003C\u002Fi> Prime annuelle\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"heures-supp\" role=\"tab\" aria-selected=\"false\">\n      \u003Ci data-lucide=\"trending-up\" width=\"14\" height=\"14\">\u003C\u002Fi> Heures supp.\n    \u003C\u002Fbutton>\n  \u003C\u002Fnav>\n\n  \u003C!-- TAB: INDEMNITÉ DE LICENCIEMENT -->\n  \u003Csection class=\"tab-panel\" data-panel=\"indemnite\" role=\"tabpanel\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\" width=\"16\" height=\"16\">\u003C\u002Fi>\n      \u003Cp>La CCN restauration rapide (IDCC 1501) prévoit une formule spécifique : \u003Cstrong>1\u002F10 de mois × années (≤10 ans) + 1\u002F15 de mois × années au-delà\u003C\u002Fstrong> pour les non-cadres. Pour les cadres, la formule est plus progressive. La règle la plus favorable entre le calcul conventionnel et légal (L1234-9) s'applique au salarié.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\">\n      \u003Clabel>Salaire brut mensuel de référence\u003C\u002Flabel>\n      \u003Cdiv class=\"slider-row\">\n        \u003Cinput type=\"range\" id=\"ind-salaire\" min=\"1200\" max=\"6000\" step=\"50\" value=\"2000\">\n        \u003Cspan class=\"slider-val\" id=\"ind-salaire-val\">2 000 €\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\">\n      \u003Clabel>Ancienneté\u003C\u002Flabel>\n      \u003Cdiv class=\"slider-row\">\n        \u003Cinput type=\"range\" id=\"ind-anciennete\" min=\"1\" max=\"35\" step=\"1\" value=\"5\">\n        \u003Cspan class=\"slider-val\" id=\"ind-anciennete-val\">5 ans\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\">\n      \u003Clabel>Catégorie\u003C\u002Flabel>\n      \u003Cdiv class=\"pill-group\" id=\"ind-categorie\">\n        \u003Cbutton class=\"pill selected\" data-val=\"non-cadre\">Non-cadre\u003C\u002Fbutton>\n        \u003Cbutton class=\"pill\" data-val=\"cadre\">Cadre\u003C\u002Fbutton>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\">\n      \u003Clabel>Motif de licenciement\u003C\u002Flabel>\n      \u003Cdiv class=\"pill-group\" id=\"ind-motif\">\n        \u003Cbutton class=\"pill selected\" data-val=\"perso\">Motif personnel\u003C\u002Fbutton>\n        \u003Cbutton class=\"pill\" data-val=\"eco\">Motif économique\u003C\u002Fbutton>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card\" id=\"ind-result\">\n      \u003Cdiv class=\"result-label\">Indemnité conventionnelle estimée\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"ind-amount\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"ind-sub\">\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-breakdown\" id=\"ind-breakdown\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fsection>\n\n  \u003C!-- TAB: PRÉAVIS -->\n  \u003Csection class=\"tab-panel\" data-panel=\"preavis\" role=\"tabpanel\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\" width=\"16\" height=\"16\">\u003C\u002Fi>\n      \u003Cp>La CCN IDCC 1501 fixe des durées de préavis selon la \u003Cstrong>catégorie professionnelle\u003C\u002Fstrong> et l'\u003Cstrong>ancienneté\u003C\u002Fstrong> — en licenciement comme en démission. Les cadres ont systématiquement 3 mois, quel que soit leur ancienneté.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\">\n      \u003Clabel>Catégorie professionnelle\u003C\u002Flabel>\n      \u003Cdiv class=\"pill-group\" id=\"prea-categorie\">\n        \u003Cbutton class=\"pill selected\" data-val=\"ouvrier\">Ouvrier\u003C\u002Fbutton>\n        \u003Cbutton class=\"pill\" data-val=\"employe\">Employé\u003C\u002Fbutton>\n        \u003Cbutton class=\"pill\" data-val=\"am\">Agent de maîtrise\u003C\u002Fbutton>\n        \u003Cbutton class=\"pill\" data-val=\"cadre\">Cadre\u003C\u002Fbutton>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\">\n      \u003Clabel>Ancienneté\u003C\u002Flabel>\n      \u003Cdiv class=\"slider-row\">\n        \u003Cinput type=\"range\" id=\"prea-anciennete\" min=\"0\" max=\"20\" step=\"1\" value=\"2\">\n        \u003Cspan class=\"slider-val\" id=\"prea-anciennete-val\">2 ans\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\">\n      \u003Clabel>Type de rupture\u003C\u002Flabel>\n      \u003Cdiv class=\"pill-group\" id=\"prea-type\">\n        \u003Cbutton class=\"pill selected\" data-val=\"licenciement\">Licenciement\u003C\u002Fbutton>\n        \u003Cbutton class=\"pill\" data-val=\"demission\">Démission\u003C\u002Fbutton>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card preavis\" id=\"prea-result\">\n      \u003Cdiv class=\"result-label\">Durée du préavis\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"prea-duration\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"prea-sub\">\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-breakdown\" id=\"prea-breakdown\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fsection>\n\n  \u003C!-- TAB: GRILLE SALARIALE -->\n  \u003Csection class=\"tab-panel\" data-panel=\"salaire-min\" role=\"tabpanel\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\" width=\"16\" height=\"16\">\u003C\u002Fi>\n      \u003Cp>La grille conventionnelle 2024 (Avenant n°67 du 30 avril 2024) définit 5 niveaux et plusieurs échelons. Sélectionnez votre niveau pour voir le salaire minimum applicable et comparer avec votre rémunération.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\">\n      \u003Clabel>Niveau et échelon\u003C\u002Flabel>\n      \u003Cselect id=\"sal-niveau\">\n        \u003Coption value=\"1A\">Niveau I – Échelon A (11,65 €\u002Fh)\u003C\u002Foption>\n        \u003Coption value=\"1B\">Niveau I – Échelon B (11,67 €\u002Fh)\u003C\u002Foption>\n        \u003Coption value=\"2A\">Niveau II – Échelon A (12,02 €\u002Fh)\u003C\u002Foption>\n        \u003Coption value=\"2B\">Niveau II – Échelon B (12,25 €\u002Fh)\u003C\u002Foption>\n        \u003Coption value=\"3A\">Niveau III – Échelon A (12,61 €\u002Fh)\u003C\u002Foption>\n        \u003Coption value=\"3B\">Niveau III – Échelon B (12,72 €\u002Fh)\u003C\u002Foption>\n        \u003Coption value=\"3C\">Niveau III – Échelon C (13,75 €\u002Fh)\u003C\u002Foption>\n        \u003Coption value=\"4A\">Niveau IV – Échelon A (14,76 €\u002Fh)\u003C\u002Foption>\n        \u003Coption value=\"4B\">Niveau IV – Échelon B (15,18 €\u002Fh)\u003C\u002Foption>\n        \u003Coption value=\"4C\">Niveau IV – Échelon C (15,79 €\u002Fh)\u003C\u002Foption>\n        \u003Coption value=\"4D\">Niveau IV – Échelon D (17,05 €\u002Fh)\u003C\u002Foption>\n        \u003Coption value=\"5A\">Niveau V (Cadre) – Échelon A (43 899 €\u002Fan)\u003C\u002Foption>\n        \u003Coption value=\"5B\">Niveau V (Cadre) – Échelon B (45 263 €\u002Fan)\u003C\u002Foption>\n        \u003Coption value=\"5C\">Niveau V (Cadre) – Échelon C (71 198 €\u002Fan)\u003C\u002Foption>\n      \u003C\u002Fselect>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\" id=\"sal-heures-group\">\n      \u003Clabel>Heures hebdomadaires contractuelles\u003C\u002Flabel>\n      \u003Cdiv class=\"slider-row\">\n        \u003Cinput type=\"range\" id=\"sal-heures\" min=\"10\" max=\"39\" step=\"1\" value=\"35\">\n        \u003Cspan class=\"slider-val\" id=\"sal-heures-val\">35 h\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card\" id=\"sal-result\">\n      \u003Cdiv class=\"result-label\">Salaire minimum mensuel\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"sal-amount\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"sal-sub\">\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-breakdown\" id=\"sal-breakdown\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Ctable class=\"salary-table\" style=\"margin-top:1.25rem\">\n      \u003Cthead>\n        \u003Ctr>\n          \u003Cth>Niveau\u003C\u002Fth>\n          \u003Cth>Échelon\u003C\u002Fth>\n          \u003Cth>Taux horaire\u003C\u002Fth>\n          \u003Cth>Mensuel (35h)\u003C\u002Fth>\n        \u003C\u002Ftr>\n      \u003C\u002Fthead>\n      \u003Ctbody id=\"sal-table-body\">\u003C\u002Ftbody>\n    \u003C\u002Ftable>\n  \u003C\u002Fsection>\n\n  \u003C!-- TAB: PRIME ANNUELLE (PAC) -->\n  \u003Csection class=\"tab-panel\" data-panel=\"prime\" role=\"tabpanel\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\" width=\"16\" height=\"16\">\u003C\u002Fi>\n      \u003Cp>La \u003Cstrong>Prime Annuelle Conventionnelle (PAC)\u003C\u002Fstrong> est obligatoire dès 1 an d'ancienneté (Avenant n°68 du 30 avril 2024). Son montant varie de \u003Cstrong>215 € à 475 €\u003C\u002Fstrong> selon l'ancienneté. Elle n'est pas cumulable avec un 13ème mois ou prime similaire d'un montant supérieur.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\">\n      \u003Clabel>Ancienneté dans l'entreprise\u003C\u002Flabel>\n      \u003Cdiv class=\"slider-row\">\n        \u003Cinput type=\"range\" id=\"pac-anciennete\" min=\"0\" max=\"20\" step=\"1\" value=\"3\">\n        \u003Cspan class=\"slider-val\" id=\"pac-anciennete-val\">3 ans\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\">\n      \u003Clabel>Temps de travail\u003C\u002Flabel>\n      \u003Cdiv class=\"pill-group\" id=\"pac-temps\">\n        \u003Cbutton class=\"pill selected\" data-val=\"plein\">Temps plein\u003C\u002Fbutton>\n        \u003Cbutton class=\"pill\" data-val=\"partiel\">Temps partiel\u003C\u002Fbutton>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\" id=\"pac-heures-group\" style=\"display:none\">\n      \u003Clabel>Heures hebdomadaires\u003C\u002Flabel>\n      \u003Cdiv class=\"slider-row\">\n        \u003Cinput type=\"range\" id=\"pac-heures\" min=\"10\" max=\"34\" step=\"1\" value=\"24\">\n        \u003Cspan class=\"slider-val\" id=\"pac-heures-val\">24 h\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"pac-grid\" id=\"pac-grid\">\n      \u003Cdiv class=\"pac-item\" data-seniority=\"0\">\n        \u003Cspan class=\"pac-item-label\">Moins d'1 an\u003C\u002Fspan>\n        \u003Cspan class=\"pac-item-amount\">Non éligible\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"pac-item\" data-seniority=\"1\">\n        \u003Cspan class=\"pac-item-label\">1 an à moins de 3 ans\u003C\u002Fspan>\n        \u003Cspan class=\"pac-item-amount\">215 €\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"pac-item\" data-seniority=\"3\">\n        \u003Cspan class=\"pac-item-label\">3 ans à moins de 5 ans\u003C\u002Fspan>\n        \u003Cspan class=\"pac-item-amount\">285 €\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"pac-item\" data-seniority=\"5\">\n        \u003Cspan class=\"pac-item-label\">5 ans à moins de 10 ans\u003C\u002Fspan>\n        \u003Cspan class=\"pac-item-amount\">365 €\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"pac-item\" data-seniority=\"10\">\n        \u003Cspan class=\"pac-item-label\">10 ans et plus\u003C\u002Fspan>\n        \u003Cspan class=\"pac-item-amount\">475 €\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card\" id=\"pac-result\" style=\"margin-top:1rem\">\n      \u003Cdiv class=\"result-label\">Prime annuelle estimée\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"pac-amount\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"pac-sub\">\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-breakdown\" id=\"pac-breakdown\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fsection>\n\n  \u003C!-- TAB: HEURES SUPPLÉMENTAIRES -->\n  \u003Csection class=\"tab-panel\" data-panel=\"heures-supp\" role=\"tabpanel\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\" width=\"16\" height=\"16\">\u003C\u002Fi>\n      \u003Cp>Les majorations sont identiques au code du travail (25% pour les 8 premières heures, 50% au-delà). La CCN prévoit en plus un \u003Cstrong>repos compensateur de remplacement\u003C\u002Fstrong> : 1h15 par heure supp. (tranche à 25%) et 1h30 (tranche à 50%). Le contingent annuel est fixé à \u003Cstrong>220 heures\u003C\u002Fstrong>.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\">\n      \u003Clabel>Salaire horaire brut\u003C\u002Flabel>\n      \u003Cdiv class=\"slider-row\">\n        \u003Cinput type=\"range\" id=\"hs-taux\" min=\"11.65\" max=\"30\" step=\"0.05\" value=\"12.50\">\n        \u003Cspan class=\"slider-val\" id=\"hs-taux-val\">12,50 €\u002Fh\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\">\n      \u003Clabel>Heures supplémentaires semaine (36e à 43e heure, taux 25%)\u003C\u002Flabel>\n      \u003Cdiv class=\"slider-row\">\n        \u003Cinput type=\"range\" id=\"hs-h25\" min=\"0\" max=\"8\" step=\"1\" value=\"4\">\n        \u003Cspan class=\"slider-val\" id=\"hs-h25-val\">4 h\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\">\n      \u003Clabel>Heures supplémentaires semaine (44e heure et au-delà, taux 50%)\u003C\u002Flabel>\n      \u003Cdiv class=\"slider-row\">\n        \u003Cinput type=\"range\" id=\"hs-h50\" min=\"0\" max=\"10\" step=\"1\" value=\"0\">\n        \u003Cspan class=\"slider-val\" id=\"hs-h50-val\">0 h\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-group\">\n      \u003Clabel>Mode de compensation\u003C\u002Flabel>\n      \u003Cdiv class=\"pill-group\" id=\"hs-mode\">\n        \u003Cbutton class=\"pill selected\" data-val=\"paiement\">Paiement majoré\u003C\u002Fbutton>\n        \u003Cbutton class=\"pill\" data-val=\"repos\">Repos compensateur (RCR)\u003C\u002Fbutton>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card\" id=\"hs-result\">\n      \u003Cdiv class=\"result-label\">Résultat hebdomadaire\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"hs-amount\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"hs-sub\">\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-breakdown\" id=\"hs-breakdown\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fsection>\n\n  \u003Cp class=\"disclaimer\">\n    \u003Ci data-lucide=\"alert-triangle\" width=\"12\" height=\"12\" style=\"vertical-align:middle;margin-right:3px\">\u003C\u002Fi>\n    Calcul indicatif basé sur la CCN IDCC 1501 (Restauration Rapide).\n    Sources : \u003Ca href=\"https:\u002F\u002Fwww.legifrance.gouv.fr\u002Fconv_coll\u002Fid\u002FKALICONT000005635596\" target=\"_blank\" rel=\"noopener\">Légifrance\u003C\u002Fa>\n    — Avenant n°67 et n°68 du 30 avril 2024.\n    Pour validation légale\n  \u003C\u002Fp>\n\u003C\u002Fmain>\n\n\u003Cscript>\n\u002F\u002F ──────────────────────────────────────────────\n\u002F\u002F Shared utilities\n\u002F\u002F ──────────────────────────────────────────────\nconst fmt = new Intl.NumberFormat('fr-FR', { style: 'currency', currency: 'EUR', maximumFractionDigits: 0 });\nconst fmtDec = new Intl.NumberFormat('fr-FR', { style: 'currency', currency: 'EUR', minimumFractionDigits: 2, maximumFractionDigits: 2 });\nconst fmtH = v => new Intl.NumberFormat('fr-FR', { minimumFractionDigits: 1, maximumFractionDigits: 2 }).format(v) + ' h';\n\nfunction pillarGroup(groupId, onChange) {\n  const group = document.getElementById(groupId);\n  group.querySelectorAll('.pill').forEach(pill => {\n    pill.addEventListener('click', () => {\n      group.querySelectorAll('.pill').forEach(p => p.classList.remove('selected'));\n      pill.classList.add('selected');\n      onChange(pill.dataset.val);\n    });\n  });\n}\nfunction getPill(groupId) {\n  return document.querySelector(`#${groupId} .pill.selected`)?.dataset.val;\n}\nfunction slider(id, displayId, format, onChange) {\n  const el = document.getElementById(id);\n  const disp = document.getElementById(displayId);\n  function update() { disp.textContent = format(parseFloat(el.value)); onChange(parseFloat(el.value)); }\n  el.addEventListener('input', update);\n  return () => parseFloat(el.value);\n}\n\n\u002F\u002F ──────────────────────────────────────────────\n\u002F\u002F TAB: INDEMNITÉ\n\u002F\u002F ──────────────────────────────────────────────\nconst indState = { salaire: 2000, anciennete: 5, categorie: 'non-cadre', motif: 'perso' };\n\nfunction computeIndemnite(s) {\n  const { salaire, anciennete, categorie } = s;\n  let ccn = 0, legal = 0;\n  const a = anciennete;\n\n  if (categorie === 'non-cadre') {\n    \u002F\u002F CCN: 1\u002F10 × années (tout, y compris >10 ans partie ≤10) + 1\u002F15 × années au-delà de 10\n    if (a \u003C= 10) {\n      ccn = salaire * (1\u002F10) * a;\n    } else {\n      ccn = salaire * (1\u002F10) * 10 + salaire * (1\u002F15) * (a - 10);\n    }\n    \u002F\u002F Legal L1234-9: 1\u002F4 × a≤10 + 1\u002F3 × a>10\n    if (a \u003C= 10) {\n      legal = salaire * (1\u002F4) * a;\n    } else {\n      legal = salaire * (1\u002F4) * 10 + salaire * (1\u002F3) * (a - 10);\n    }\n  } else {\n    \u002F\u002F Cadre CCN\n    if (a \u003C= 5) {\n      ccn = salaire * (1\u002F5) * a;\n    } else if (a \u003C= 10) {\n      ccn = salaire * (1\u002F5) * 5 + (salaire * (2\u002F10) + salaire * (1\u002F15)) * (a - 5);\n    } else if (a \u003C= 15) {\n      ccn = salaire * (1\u002F5) * 5 + (salaire * (2\u002F10) + salaire * (1\u002F15)) * 5 + salaire * (2\u002F15) * (a - 10);\n    } else {\n      ccn = salaire * (1\u002F5) * 5 + (salaire * (2\u002F10) + salaire * (1\u002F15)) * 5 + salaire * (2\u002F15) * 5 + salaire * (3\u002F15) * (a - 15);\n    }\n    \u002F\u002F Legal\n    if (a \u003C= 10) {\n      legal = salaire * (1\u002F4) * a;\n    } else {\n      legal = salaire * (1\u002F4) * 10 + salaire * (1\u002F3) * (a - 10);\n    }\n  }\n\n  const applicable = Math.max(ccn, legal);\n  return { ccn, legal, applicable };\n}\n\nfunction renderIndemnite() {\n  const r = computeIndemnite(indState);\n  document.getElementById('ind-amount').textContent = fmtDec.format(r.applicable);\n  const isFav = r.legal > r.ccn;\n  document.getElementById('ind-sub').textContent = isFav\n    ? 'Calcul légal (L1234-9) plus favorable — appliqué'\n    : 'Calcul conventionnel appliqué';\n  document.getElementById('ind-breakdown').innerHTML =\n    `Calcul CCN : ${fmtDec.format(r.ccn)} &nbsp;|&nbsp; Calcul légal : ${fmtDec.format(r.legal)}\u003Cbr>` +\n    `Formule la plus favorable retenue : ${fmtDec.format(r.applicable)}`;\n}\n\nslider('ind-salaire', 'ind-salaire-val', v => fmt.format(v).replace(',00', ''), v => { indState.salaire = v; renderIndemnite(); });\nslider('ind-anciennete', 'ind-anciennete-val', v => v + ' an' + (v > 1 ? 's' : ''), v => { indState.anciennete = v; renderIndemnite(); });\npillarGroup('ind-categorie', v => { indState.categorie = v; renderIndemnite(); });\npillarGroup('ind-motif', v => { indState.motif = v; renderIndemnite(); });\nrenderIndemnite();\n\n\u002F\u002F ──────────────────────────────────────────────\n\u002F\u002F TAB: PRÉAVIS\n\u002F\u002F ──────────────────────────────────────────────\nconst preaState = { categorie: 'ouvrier', anciennete: 2, type: 'licenciement' };\n\nfunction computePreavis(s) {\n  const { categorie, anciennete, type } = s;\n  let dureeText = '', note = '';\n\n  if (categorie === 'ouvrier') {\n    if (anciennete \u003C 0.5) { dureeText = '8 jours'; }\n    else { dureeText = '1 mois'; }\n    note = 'Ouvrier : 8 jours (\u003C 6 mois) \u002F 1 mois (≥ 6 mois)';\n  } else if (categorie === 'employe') {\n    if (anciennete \u003C 0.5) { dureeText = '8 jours'; }\n    else if (anciennete \u003C 2) { dureeText = '15 jours'; }\n    else { dureeText = '1 mois'; }\n    note = 'Employé : 8 jours (\u003C 6 mois) \u002F 15 jours (6 mois – 2 ans) \u002F 1 mois (> 2 ans)';\n  } else if (categorie === 'am') {\n    if (anciennete \u003C= 2) { dureeText = '1 mois'; }\n    else { dureeText = '2 mois'; }\n    note = 'Agent de maîtrise : 1 mois (≤ 2 ans) \u002F 2 mois (> 2 ans)';\n    if (type === 'demission') {\n      \u002F\u002F same for AM\n    }\n  } else {\n    \u002F\u002F cadre\n    dureeText = '3 mois';\n    note = 'Cadre : 3 mois, quelle que soit l\\'ancienneté';\n  }\n\n  return { dureeText, note };\n}\n\nfunction renderPreavis() {\n  const r = computePreavis(preaState);\n  document.getElementById('prea-duration').textContent = r.dureeText;\n  document.getElementById('prea-sub').textContent = preaState.type === 'licenciement' ? 'En cas de licenciement' : 'En cas de démission';\n  document.getElementById('prea-breakdown').textContent = r.note;\n}\n\nslider('prea-anciennete', 'prea-anciennete-val', v => v \u003C 1 ? Math.round(v * 12) + ' mois' : v + ' an' + (v > 1 ? 's' : ''), v => { preaState.anciennete = v; renderPreavis(); });\npillarGroup('prea-categorie', v => { preaState.categorie = v; renderPreavis(); });\npillarGroup('prea-type', v => { preaState.type = v; renderPreavis(); });\nrenderPreavis();\n\n\u002F\u002F ──────────────────────────────────────────────\n\u002F\u002F TAB: GRILLE SALARIALE\n\u002F\u002F ──────────────────────────────────────────────\nconst salGrid = [\n  { id:'1A', niveau:'I', echelon:'A', tauxH:11.65, cadre:false },\n  { id:'1B', niveau:'I', echelon:'B', tauxH:11.67, cadre:false },\n  { id:'2A', niveau:'II', echelon:'A', tauxH:12.02, cadre:false },\n  { id:'2B', niveau:'II', echelon:'B', tauxH:12.25, cadre:false },\n  { id:'3A', niveau:'III', echelon:'A', tauxH:12.61, cadre:false },\n  { id:'3B', niveau:'III', echelon:'B', tauxH:12.72, cadre:false },\n  { id:'3C', niveau:'III', echelon:'C', tauxH:13.75, cadre:false },\n  { id:'4A', niveau:'IV', echelon:'A', tauxH:14.76, cadre:false },\n  { id:'4B', niveau:'IV', echelon:'B', tauxH:15.18, cadre:false },\n  { id:'4C', niveau:'IV', echelon:'C', tauxH:15.79, cadre:false },\n  { id:'4D', niveau:'IV', echelon:'D', tauxH:17.05, cadre:false },\n  { id:'5A', niveau:'V', echelon:'A', tauxH:null, annuel:43899.49, cadre:true },\n  { id:'5B', niveau:'V', echelon:'B', tauxH:null, annuel:45263.24, cadre:true },\n  { id:'5C', niveau:'V', echelon:'C', tauxH:null, annuel:71197.75, cadre:true },\n];\n\nconst salState = { niveau: '1A', heures: 35 };\n\nfunction buildSalTable(selected) {\n  const tbody = document.getElementById('sal-table-body');\n  tbody.innerHTML = '';\n  salGrid.forEach(row => {\n    const tr = document.createElement('tr');\n    if (row.id === selected) tr.classList.add('highlighted');\n    const mensuel = row.cadre ? row.annuel \u002F 12 : row.tauxH * (salState.heures * 52 \u002F 12);\n    tr.innerHTML = `\u003Ctd>Niv. ${row.niveau}\u003C\u002Ftd>\u003Ctd>${row.echelon}\u003C\u002Ftd>\u003Ctd>${row.cadre ? '—' : fmtDec.format(row.tauxH) + '\u002Fh'}\u003C\u002Ftd>\u003Ctd>${fmtDec.format(mensuel)}\u003C\u002Ftd>`;\n    tbody.appendChild(tr);\n  });\n}\n\nfunction renderSalaire() {\n  const row = salGrid.find(r => r.id === salState.niveau);\n  const hg = document.getElementById('sal-heures-group');\n  if (row.cadre) {\n    hg.style.display = 'none';\n    const mensuel = row.annuel \u002F 12;\n    document.getElementById('sal-amount').textContent = fmtDec.format(mensuel);\n    document.getElementById('sal-sub').textContent = `Soit ${fmtDec.format(row.annuel)} brut annuel — Cadre niveau ${row.niveau} échelon ${row.echelon}`;\n    document.getElementById('sal-breakdown').textContent = 'Pour les cadres, la grille conventionnelle fixe un salaire annuel minimum.';\n  } else {\n    hg.style.display = '';\n    const mensuel = row.tauxH * (salState.heures * 52 \u002F 12);\n    document.getElementById('sal-amount').textContent = fmtDec.format(mensuel);\n    document.getElementById('sal-sub').textContent = `Taux horaire : ${fmtDec.format(row.tauxH)}\u002Fh — Niveau ${row.niveau} échelon ${row.echelon}`;\n    document.getElementById('sal-breakdown').textContent = `Base : ${salState.heures}h\u002Fsem × 52 semaines \u002F 12 mois = ${fmtDec.format(mensuel)} brut\u002Fmois`;\n  }\n  buildSalTable(salState.niveau);\n}\n\ndocument.getElementById('sal-niveau').addEventListener('change', e => { salState.niveau = e.target.value; renderSalaire(); });\nslider('sal-heures', 'sal-heures-val', v => v + ' h', v => { salState.heures = v; renderSalaire(); });\nrenderSalaire();\n\n\u002F\u002F ──────────────────────────────────────────────\n\u002F\u002F TAB: PRIME ANNUELLE (PAC)\n\u002F\u002F ──────────────────────────────────────────────\nconst pacBrackets = [\n  { min: 0, max: 1, label: 'Moins d\\'1 an', amount: 0 },\n  { min: 1, max: 3, label: '1 à 3 ans', amount: 215 },\n  { min: 3, max: 5, label: '3 à 5 ans', amount: 285 },\n  { min: 5, max: 10, label: '5 à 10 ans', amount: 365 },\n  { min: 10, max: 999, label: '10 ans et plus', amount: 475 },\n];\nconst pacState = { anciennete: 3, temps: 'plein', heures: 24 };\n\nfunction computePAC(s) {\n  const bracket = pacBrackets.find(b => s.anciennete >= b.min && s.anciennete \u003C b.max);\n  if (!bracket || bracket.amount === 0) return { amount: 0, eligible: false, bracket: bracket };\n  let amount = bracket.amount;\n  if (s.temps === 'partiel') {\n    amount = amount * (s.heures \u002F 35);\n  }\n  return { amount, eligible: true, bracket };\n}\n\nfunction renderPAC() {\n  const r = computePAC(pacState);\n  \u002F\u002F highlight pac grid\n  document.querySelectorAll('.pac-item').forEach(item => {\n    const seniority = parseInt(item.dataset.seniority);\n    const bracket = pacBrackets.find(b => pacState.anciennete >= b.min && pacState.anciennete \u003C b.max);\n    item.classList.toggle('active', bracket && bracket.min === seniority);\n  });\n\n  if (!r.eligible) {\n    document.getElementById('pac-amount').textContent = 'Non éligible';\n    document.getElementById('pac-sub').textContent = 'Ancienneté inférieure à 1 an';\n    document.getElementById('pac-breakdown').textContent = 'La PAC est versée dès 1 an d\\'ancienneté révolue.';\n  } else {\n    document.getElementById('pac-amount').textContent = fmtDec.format(r.amount);\n    document.getElementById('pac-sub').textContent = pacState.temps === 'partiel'\n      ? `Proratisé à ${pacState.heures}h\u002Fsem vs 35h` : 'Temps plein';\n    document.getElementById('pac-breakdown').textContent =\n      `Tranche applicable : ${r.bracket.label} → ${fmtDec.format(r.bracket.amount)}` +\n      (pacState.temps === 'partiel' ? ` × ${pacState.heures}\u002F35 = ${fmtDec.format(r.amount)}` : '');\n  }\n}\n\nslider('pac-anciennete', 'pac-anciennete-val', v => v + ' an' + (v > 1 ? 's' : ''), v => { pacState.anciennete = v; renderPAC(); });\npillarGroup('pac-temps', v => {\n  pacState.temps = v;\n  document.getElementById('pac-heures-group').style.display = v === 'partiel' ? '' : 'none';\n  renderPAC();\n});\nslider('pac-heures', 'pac-heures-val', v => v + ' h', v => { pacState.heures = v; renderPAC(); });\nrenderPAC();\n\n\u002F\u002F ──────────────────────────────────────────────\n\u002F\u002F TAB: HEURES SUPPLÉMENTAIRES\n\u002F\u002F ──────────────────────────────────────────────\nconst hsState = { taux: 12.50, h25: 4, h50: 0, mode: 'paiement' };\n\nfunction computeHS(s) {\n  const { taux, h25, h50, mode } = s;\n  if (mode === 'paiement') {\n    const montant25 = taux * 1.25 * h25;\n    const montant50 = taux * 1.50 * h50;\n    const total = montant25 + montant50;\n    return { total, montant25, montant50, repos25: null, repos50: null };\n  } else {\n    const repos25 = h25 * 1.25;\n    const repos50 = h50 * 1.50;\n    return { total: 0, montant25: 0, montant50: 0, repos25, repos50, totalRepos: repos25 + repos50 };\n  }\n}\n\nfunction renderHS() {\n  const r = computeHS(hsState);\n  const { h25, h50 } = hsState;\n  if (hsState.mode === 'paiement') {\n    document.getElementById('hs-amount').textContent = fmtDec.format(r.total);\n    document.getElementById('hs-sub').textContent = 'Paiement majoré hebdomadaire';\n    document.getElementById('hs-breakdown').innerHTML =\n      `Heures à 25% : ${h25}h × ${fmtDec.format(hsState.taux * 1.25)}\u002Fh = ${fmtDec.format(r.montant25)}\u003Cbr>` +\n      `Heures à 50% : ${h50}h × ${fmtDec.format(hsState.taux * 1.50)}\u002Fh = ${fmtDec.format(r.montant50)}`;\n  } else {\n    document.getElementById('hs-amount').textContent = fmtH(r.totalRepos);\n    document.getElementById('hs-sub').textContent = 'Repos compensateur de remplacement (RCR)';\n    document.getElementById('hs-breakdown').innerHTML =\n      `Heures à 25% : ${h25}h × 1,25 = ${fmtH(r.repos25)}\u003Cbr>` +\n      `Heures à 50% : ${h50}h × 1,50 = ${fmtH(r.repos50)}\u003Cbr>` +\n      `Total repos : ${fmtH(r.totalRepos)}`;\n  }\n}\n\nslider('hs-taux', 'hs-taux-val', v => fmtDec.format(v) + '\u002Fh', v => { hsState.taux = v; renderHS(); });\nslider('hs-h25', 'hs-h25-val', v => v + ' h', v => { hsState.h25 = v; renderHS(); });\nslider('hs-h50', 'hs-h50-val', v => v + ' h', v => { hsState.h50 = v; renderHS(); });\npillarGroup('hs-mode', v => { hsState.mode = v; renderHS(); });\nrenderHS();\n\n\u002F\u002F ──────────────────────────────────────────────\n\u002F\u002F TABS NAVIGATION\n\u002F\u002F ──────────────────────────────────────────────\nconst tabBtns = document.querySelectorAll('.tab-btn');\nconst tabPanels = document.querySelectorAll('.tab-panel');\n\nfunction activate(id) {\n  tabBtns.forEach(t => {\n    const isActive = t.dataset.tab === id;\n    t.classList.toggle('active', isActive);\n    t.setAttribute('aria-selected', isActive);\n  });\n  tabPanels.forEach(p => p.classList.toggle('visible', p.dataset.panel === id));\n  if (location.hash !== '#' + id) location.hash = id;\n  requestAnimationFrame(() => {\n    const h = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight);\n    parent.postMessage({ type: 'resize', height: h }, '*');\n  });\n}\n\ntabBtns.forEach(t => t.addEventListener('click', () => activate(t.dataset.tab)));\n\nconst hashTab = location.hash.slice(1);\nconst defaultTab = (hashTab && document.querySelector(`[data-tab=\"${hashTab}\"]`)) ? hashTab : 'indemnite';\nactivate(defaultTab);\n\n\u002F\u002F ──────────────────────────────────────────────\n\u002F\u002F RESIZE OBSERVER\n\u002F\u002F ──────────────────────────────────────────────\nlucide.createIcons();\n\nconst ro = new ResizeObserver(() => {\n  const h = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight);\n  parent.postMessage({ type: 'resize', height: h }, '*');\n});\nro.observe(document.documentElement);\n\u003C\u002Fscript>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n","generated","juridique","consumer","both","https:\u002F\u002Fpub-bdebbd2dad294475a2da0eb657815b6b.r2.dev\u002Ftools\u002Fccn-restauration-rapide-743e838bcd.webp",[]]