[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"footer-root-categories-fr-FR":3,"tool-content-ccn-personnel-de-la-reprographie-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-personnel-de-la-reprographie","CCN du personnel de la reprographie — calculateur complet","Calculateur CCN Personnel de la Reprographie IDCC 706 | Expert Zoom","Outil interactif couvrant indemnité de licenciement, préavis, grille salariale, prime annuelle et heures supplémentaires de la CCN du personnel de la reprographie (IDCC 706, Brochure 3027).","Ce calculateur interactif couvre les 5 principales dérogations de la convention collective nationale du personnel de la reprographie (IDCC 706) au code du travail : indemnité de licenciement (formule 20 h\u002Fan pour ouvriers), préavis (2 mois non-cadres, 3 mois cadres), grille salariale en 11 niveaux (1 768 € à 3 560 €), prime annuelle obligatoire (art. 319, 1\u002F12 du salaire) et majorations heures supplémentaires.",[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 Personnel de la Reprographie — IDCC 706","WebApplication",{"name":94,"@type":95,"identifier":96},"Convention collective nationale du personnel de la reprographie","Thing","IDCC 706",{"name":98,"@type":99},"Expert-Zoom","Organization","https:\u002F\u002Fschema.org",{"url":102,"@type":103},"\u002Ffr\u002Fmagazine\u002Fjuridique\u002Fles-conventions-collectives-en-france","Article","fr","Outil interactif couvrant l'indemnité de licenciement, le préavis, la grille salariale, la prime annuelle et les heures supplémentaires de la convention collective du personnel de la reprographie (IDCC 706, Brochure 3027).","All","FinanceApplication",true,[110,113,116,119,122,125,128,131],{"a":111,"q":112},"La CCN reprographie (IDCC 706) prévoit pour les ouvriers et employés une indemnité de 20 heures de salaire par année d'ancienneté (à partir de 2 ans), calculée sur le taux horaire moyen. Pour les cadres, la formule est 1\u002F5 de mois par année jusqu'à 10 ans, puis 1\u002F3 de mois au-delà. Si le minimum légal (art. L1234-9) est plus favorable, c'est lui qui s'applique.","Comment calculer l'indemnité de licenciement dans la convention collective de la reprographie ?",{"a":114,"q":115},"La CCN reprographie fixe un préavis de 2 mois pour les non-cadres licenciés avec au moins 2 ans d'ancienneté, et de 3 mois pour les cadres et agents de maîtrise. En cas de démission, le préavis conventionnel est de 3 mois pour tous (art. 315 CCN), sauf accord de réduction.","Quelle est la durée du préavis dans la CCN reprographie ?",{"a":117,"q":118},"La grille salariale de l'IDCC 706 (avenant août 2023) s'étend de 1 768 € brut\u002Fmois (Ouvrier niveau 1) à 3 560 € brut\u002Fmois (Cadre niveau 4.5), pour une durée de 152,25 heures par mois. Ces minimums conventionnels s'imposent sur le SMIC.","Quelle est la grille de salaires de la convention collective reprographie ?",{"a":120,"q":121},"Oui. L'article 319 de la CCN reprographie instaure une prime annuelle équivalente à 1\u002F12 du salaire annuel perçu (soit un 13e mois). Elle est versée en deux acomptes : 50 % en juin et 50 % en décembre. Cette prime est due à tout salarié ayant terminé sa période d'essai.","La CCN reprographie prévoit-elle un 13e mois ou une prime annuelle ?",{"a":123,"q":124},"La CCN reprographie prévoit une majoration de 25 % pour les heures effectuées entre la 41e et la 48e heure hebdomadaire, et de 50 % à partir de la 49e heure. Des primes cumulatives s'ajoutent : +25 % pour travail de nuit ou journées dépassant 10 heures, et +100 % pour travail exceptionnel le dimanche.","Quelles sont les majorations pour heures supplémentaires dans la reprographie ?",{"a":126,"q":127},"Oui, la CCN reprographie accorde un mois de congé de date à date après 2 ans d'ancienneté pour les cadres et agents de maîtrise, et après 30 ans d'ancienneté pour les ouvriers et employés, en plus des 30 jours ouvrables légaux (art. L3141-3).","Y a-t-il des congés payés supplémentaires dans la CCN reprographie ?",{"a":129,"q":130},"La convention collective nationale du personnel de la reprographie a l'identifiant IDCC 706 et porte le numéro de brochure 3027. Elle est consultable sur Légifrance sous la référence KALICONT000005635891.","Quel est l'IDCC de la convention collective du personnel de la reprographie ?",{"a":132,"q":133},"Oui. Par arrêté ministériel du 9 avril 2019, la branche reprographie (IDCC 706) a été rattachée à la branche des entreprises de services de bureau et du numérique (IDCC 1539). Un accord de convergence du 27 novembre 2019 prévoit un rapprochement progressif. Les dispositions de l'IDCC 706 restent applicables pendant la période transitoire.","La convention collective reprographie a-t-elle fusionné avec une autre CCN ?","\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 Personnel de la Reprographie — IDCC 706\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-dark: #1d4ed8;\n      --text: #1c1917;\n      --muted: #78716c;\n      --success: #16a34a;\n      --warning: #d97706;\n      --warning-bg: #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      font-size: 0.9375rem;\n      line-height: 1.5;\n    }\n    .tool-root {\n      max-width: 680px;\n      margin: 0 auto;\n      padding: 1.25rem 1rem 2rem;\n    }\n    .tool-header { margin-bottom: 1.25rem; }\n    .tool-header h1 { font-size: 1.125rem; font-weight: 700; color: var(--text); }\n    .idcc-badge {\n      display: inline-flex;\n      align-items: center;\n      gap: 0.25rem;\n      background: var(--accent-light);\n      color: var(--accent-dark);\n      font-size: 0.75rem;\n      font-weight: 600;\n      padding: 0.2rem 0.6rem;\n      border-radius: 999px;\n      margin-top: 0.375rem;\n    }\n    \u002F* Tabs *\u002F\n    .tabs-nav {\n      display: flex;\n      gap: 0.25rem;\n      border-bottom: 2px solid var(--border);\n      margin-bottom: 1.25rem;\n      flex-wrap: wrap;\n    }\n    .tab-btn {\n      display: flex;\n      align-items: center;\n      gap: 0.375rem;\n      padding: 0.5rem 0.875rem;\n      font-size: 0.8125rem;\n      font-weight: 500;\n      color: var(--muted);\n      background: none;\n      border: none;\n      border-bottom: 2px solid transparent;\n      margin-bottom: -2px;\n      cursor: pointer;\n      white-space: nowrap;\n      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 { color: var(--accent); border-bottom-color: var(--accent); font-weight: 600; }\n    .tab-panel { display: none; }\n    .tab-panel.active { display: block; }\n    \u002F* Rule callout *\u002F\n    .rule-callout {\n      display: flex;\n      gap: 0.625rem;\n      background: var(--warning-bg);\n      border-left: 3px solid var(--warning);\n      border-radius: var(--radius-sm);\n      padding: 0.75rem 1rem;\n      margin-bottom: 1.25rem;\n      font-size: 0.875rem;\n      color: #92400e;\n    }\n    .rule-callout svg { flex-shrink: 0; margin-top: 0.125rem; color: var(--warning); }\n    \u002F* Form *\u002F\n    .form-grid { display: flex; flex-direction: column; gap: 1rem; margin-bottom: 1.25rem; }\n    .field-group { display: flex; flex-direction: column; gap: 0.375rem; }\n    .field-label { font-size: 0.8125rem; font-weight: 600; color: var(--text); }\n    .field-value { font-size: 0.8125rem; color: var(--muted); font-variant-numeric: tabular-nums; }\n    input[type=\"range\"] { width: 100%; accent-color: var(--accent); height: 4px; cursor: pointer; }\n    select {\n      width: 100%;\n      padding: 0.5rem 0.75rem;\n      border: 1px solid var(--border);\n      border-radius: var(--radius-sm);\n      background: var(--card);\n      font-size: 0.875rem;\n      color: var(--text);\n      cursor: pointer;\n    }\n    \u002F* Pills *\u002F\n    .pills { display: flex; flex-wrap: wrap; gap: 0.375rem; }\n    .pill {\n      padding: 0.35rem 0.875rem;\n      border: 1.5px solid var(--border);\n      border-radius: 999px;\n      font-size: 0.8125rem;\n      font-weight: 500;\n      background: var(--card);\n      color: var(--muted);\n      cursor: pointer;\n      transition: all 0.15s;\n    }\n    .pill.active { background: var(--accent); border-color: var(--accent); color: #fff; }\n    \u002F* Result card *\u002F\n    .result-card {\n      background: var(--card);\n      border: 1.5px solid var(--border);\n      border-radius: var(--radius);\n      padding: 1.125rem 1.25rem;\n      margin-bottom: 1rem;\n    }\n    .result-label { font-size: 0.8125rem; color: var(--muted); margin-bottom: 0.25rem; }\n    .result-amount { font-size: 1.75rem; font-weight: 700; color: var(--accent); font-variant-numeric: tabular-nums; }\n    .result-duration { font-size: 1.5rem; font-weight: 700; color: var(--accent); }\n    .result-sub { font-size: 0.8125rem; color: var(--muted); margin-top: 0.375rem; }\n    .result-breakdown {\n      margin-top: 0.75rem;\n      padding-top: 0.75rem;\n      border-top: 1px solid var(--border);\n      display: flex;\n      flex-direction: column;\n      gap: 0.25rem;\n    }\n    .breakdown-row { display: flex; justify-content: space-between; font-size: 0.8125rem; }\n    .breakdown-row span:first-child { color: var(--muted); }\n    .breakdown-row span:last-child { font-variant-numeric: tabular-nums; font-weight: 500; }\n    \u002F* Grille table *\u002F\n    .grille-table { width: 100%; border-collapse: collapse; font-size: 0.8125rem; margin-bottom: 1rem; }\n    .grille-table th {\n      text-align: left;\n      padding: 0.5rem 0.625rem;\n      background: var(--accent-light);\n      color: var(--accent-dark);\n      font-weight: 600;\n      border: 1px solid var(--border);\n    }\n    .grille-table td { padding: 0.5rem 0.625rem; border: 1px solid var(--border); font-variant-numeric: tabular-nums; }\n    .grille-table tr.highlight td { background: #fef9c3; font-weight: 600; }\n    \u002F* Disclaimer *\u002F\n    .disclaimer {\n      font-size: 0.75rem;\n      color: var(--muted);\n      border-top: 1px solid var(--border);\n      padding-top: 0.875rem;\n      margin-top: 0.5rem;\n      line-height: 1.6;\n    }\n    .disclaimer a { color: var(--accent); text-decoration: none; }\n    .disclaimer a:hover { text-decoration: underline; }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\u003Cbody>\n\u003C!-- CCN IDCC 706 — deviations vs code du travail\n     indemnite: L1234-9 → ouvriers\u002Femployés: 20 heures salaire × années (ancienneté ≥2 ans) ;\n                           cadres: 1\u002F5 mois ≤10 ans + 1\u002F3 mois >10 ans (CCN art. IV\u002FV)\n     preavis: L1234-1 → 2 mois licenciement (non-cadres, anc. ≥2 ans), 3 mois démission (art. 315 CCN)\n     salaire-min: SMIC → grille 11 niveaux (avenant salarial août 2023, BOCC 2023-40), base 152,25 h\u002Fmois\n     prime-annuelle: aucune obligation légale → 1\u002F12 salaire annuel (art. 319 CCN), versé juin + décembre\n     heures-supp: L3121-36 → 25% de 41e à 48e h, 50% ≥49e h ; +100% travail exceptionnel dimanche\n     Source: Légifrance KALICONT000005635891 + LégiSocial + Juristique grille 2023 -->\n\u003Cmain class=\"tool-root\">\n  \u003Cdiv class=\"tool-header\">\n    \u003Ch1>Calculateur — CCN du personnel de la reprographie\u003C\u002Fh1>\n    \u003Cspan class=\"idcc-badge\">\n      \u003Ci data-lucide=\"tag\" style=\"width:12px;height:12px;\">\u003C\u002Fi> IDCC 706 · Brochure 3027\n    \u003C\u002Fspan>\n  \u003C\u002Fdiv>\n\n  \u003C!-- Tab navigation -->\n  \u003Cdiv class=\"tabs-nav\">\n    \u003Cbutton class=\"tab-btn\" data-tab=\"indemnite\">\n      \u003Ci data-lucide=\"calculator\" style=\"width:14px;height:14px;\">\u003C\u002Fi> Indemnité\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"preavis\">\n      \u003Ci data-lucide=\"clock\" style=\"width:14px;height:14px;\">\u003C\u002Fi> Préavis\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"salaire-min\">\n      \u003Ci data-lucide=\"euro\" style=\"width:14px;height:14px;\">\u003C\u002Fi> Grille salariale\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"prime-annuelle\">\n      \u003Ci data-lucide=\"gift\" style=\"width:14px;height:14px;\">\u003C\u002Fi> Prime annuelle\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"heures-supp\">\n      \u003Ci data-lucide=\"timer\" style=\"width:14px;height:14px;\">\u003C\u002Fi> Heures supp\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ═══════════ TAB: INDEMNITÉ ═══════════ -->\n  \u003Cdiv class=\"tab-panel\" data-panel=\"indemnite\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\" style=\"width:16px;height:16px;\">\u003C\u002Fi>\n      \u003Cp>La CCN reprographie fixe pour les ouvriers\u002Femployés une indemnité de \u003Cstrong>20 heures de salaire par année d'ancienneté\u003C\u002Fstrong> (ancienneté ≥ 2 ans), calculée sur le salaire horaire moyen. Pour les cadres, le barème est de \u003Cstrong>1\u002F5 mois × années ≤ 10 ans\u003C\u002Fstrong> puis \u003Cstrong>1\u002F3 mois × années > 10 ans\u003C\u002Fstrong> — différent de L1234-9 (1\u002F4 puis 1\u002F3 mois).\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"form-grid\">\n      \u003Cdiv class=\"field-group\">\n        \u003Cdiv style=\"display:flex;justify-content:space-between;\">\n          \u003Cspan class=\"field-label\">Salaire brut mensuel\u003C\u002Fspan>\n          \u003Cspan class=\"field-value\" id=\"ind-sal-val\">2 500 €\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n        \u003Cinput type=\"range\" id=\"ind-sal\" min=\"1500\" max=\"8000\" step=\"50\" value=\"2500\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field-group\">\n        \u003Cdiv style=\"display:flex;justify-content:space-between;\">\n          \u003Cspan class=\"field-label\">Ancienneté\u003C\u002Fspan>\n          \u003Cspan class=\"field-value\" id=\"ind-anc-val\">5 ans\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n        \u003Cinput type=\"range\" id=\"ind-anc\" min=\"0\" max=\"40\" step=\"1\" value=\"5\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field-group\">\n        \u003Cspan class=\"field-label\">Catégorie professionnelle\u003C\u002Fspan>\n        \u003Cdiv class=\"pills\" id=\"ind-cat-pills\">\n          \u003Cbutton class=\"pill active\" data-val=\"ouvrier\">Ouvrier \u002F 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    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card\">\n      \u003Cdiv class=\"result-label\">Indemnité de licenciement estimée\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-amount\" 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\u002Fdiv>\n\n  \u003C!-- ═══════════ TAB: PRÉAVIS ═══════════ -->\n  \u003Cdiv class=\"tab-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 reprographie (art. 315) prévoit un préavis de \u003Cstrong>2 mois\u003C\u002Fstrong> pour les non-cadres licenciés ayant ≥ 2 ans d'ancienneté, et de \u003Cstrong>3 mois\u003C\u002Fstrong> en cas de démission. Pour les cadres, le préavis de licenciement est de \u003Cstrong>3 mois\u003C\u002Fstrong> quelle que soit l'ancienneté (≥ 2 ans).\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"form-grid\">\n      \u003Cdiv class=\"field-group\">\n        \u003Cspan class=\"field-label\">Situation\u003C\u002Fspan>\n        \u003Cdiv class=\"pills\" id=\"pre-motif-pills\">\n          \u003Cbutton class=\"pill active\" data-val=\"licenciement\">Licenciement\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"demission\">Démission\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field-group\">\n        \u003Cdiv style=\"display:flex;justify-content:space-between;\">\n          \u003Cspan class=\"field-label\">Ancienneté\u003C\u002Fspan>\n          \u003Cspan class=\"field-value\" id=\"pre-anc-val\">5 ans\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n        \u003Cinput type=\"range\" id=\"pre-anc\" min=\"0\" max=\"40\" step=\"1\" value=\"5\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field-group\">\n        \u003Cspan class=\"field-label\">Catégorie\u003C\u002Fspan>\n        \u003Cdiv class=\"pills\" id=\"pre-cat-pills\">\n          \u003Cbutton class=\"pill active\" data-val=\"nc\">Non-cadre\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"cadre\">Cadre \u002F AM\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card\">\n      \u003Cdiv class=\"result-label\">Durée de préavis conventionnel\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-duration\" id=\"pre-duration\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"pre-sub\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ═══════════ TAB: GRILLE SALARIALE ═══════════ -->\n  \u003Cdiv class=\"tab-panel\" data-panel=\"salaire-min\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\" style=\"width:16px;height:16px;\">\u003C\u002Fi>\n      \u003Cp>La grille conventionnelle IDCC 706 (avenant salarial août 2023) fixe des minima sur 11 niveaux, de \u003Cstrong>1 768 €\u003C\u002Fstrong> (Ouvrier N1) à \u003Cstrong>3 560 €\u003C\u002Fstrong> (Cadre N4.5), pour 152,25 h\u002Fmois. Ces minima conventionnels s'imposent sur le SMIC.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"form-grid\">\n      \u003Cdiv class=\"field-group\">\n        \u003Cspan class=\"field-label\">Niveau \u002F Échelon\u003C\u002Fspan>\n        \u003Cselect id=\"sal-niveau\">\n          \u003Coption value=\"1768\">Ouvrier N1 — 1 768 €\u003C\u002Foption>\n          \u003Coption value=\"1788\">Ouvrier N1.3 — 1 788 €\u003C\u002Foption>\n          \u003Coption value=\"1845\">Ouvrier N1.7 — 1 845 €\u003C\u002Foption>\n          \u003Coption value=\"1783\">Employé N2 — 1 783 €\u003C\u002Foption>\n          \u003Coption value=\"1853\">Employé N2.3 — 1 853 €\u003C\u002Foption>\n          \u003Coption value=\"1910\">Employé N2.7 — 1 910 €\u003C\u002Foption>\n          \u003Coption value=\"2000\">Agent de maîtrise N3 — 2 000 €\u003C\u002Foption>\n          \u003Coption value=\"2205\">Agent de maîtrise N3.5 — 2 205 €\u003C\u002Foption>\n          \u003Coption value=\"2280\">Cadre N4 — 2 280 €\u003C\u002Foption>\n          \u003Coption value=\"2840\">Cadre N4.3 — 2 840 €\u003C\u002Foption>\n          \u003Coption value=\"3560\">Cadre N4.5 — 3 560 €\u003C\u002Foption>\n        \u003C\u002Fselect>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field-group\">\n        \u003Cdiv style=\"display:flex;justify-content:space-between;\">\n          \u003Cspan class=\"field-label\">Heures hebdomadaires\u003C\u002Fspan>\n          \u003Cspan class=\"field-value\" id=\"sal-h-val\">35 h\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n        \u003Cinput type=\"range\" id=\"sal-h\" min=\"20\" max=\"48\" step=\"0.5\" value=\"35\">\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card\">\n      \u003Cdiv class=\"result-label\">Salaire brut mensuel minimum\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-amount\" id=\"sal-amount\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"sal-sub\">\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-breakdown\">\n        \u003Cdiv class=\"breakdown-row\">\u003Cspan>Base 35 h \u002F 152,25 h mois\u003C\u002Fspan>\u003Cspan id=\"sal-base\">—\u003C\u002Fspan>\u003C\u002Fdiv>\n        \u003Cdiv class=\"breakdown-row\">\u003Cspan>Taux horaire minimum\u003C\u002Fspan>\u003Cspan id=\"sal-horaire\">—\u003C\u002Fspan>\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Ctable class=\"grille-table\" id=\"grille-tbl\">\n      \u003Cthead>\n        \u003Ctr>\n          \u003Cth>Catégorie\u003C\u002Fth>\n          \u003Cth>Niveau\u003C\u002Fth>\n          \u003Cth>Salaire mensuel brut (35 h)\u003C\u002Fth>\n        \u003C\u002Ftr>\n      \u003C\u002Fthead>\n      \u003Ctbody>\u003C\u002Ftbody>\n    \u003C\u002Ftable>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ═══════════ TAB: PRIME ANNUELLE ═══════════ -->\n  \u003Cdiv class=\"tab-panel\" data-panel=\"prime-annuelle\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\" style=\"width:16px;height:16px;\">\u003C\u002Fi>\n      \u003Cp>L'article 319 de la CCN reprographie instaure une \u003Cstrong>prime annuelle équivalente à 1\u002F12 du salaire annuel\u003C\u002Fstrong> (13e mois), versée en deux acomptes : \u003Cstrong>50 % en juin\u003C\u002Fstrong> et \u003Cstrong>50 % en décembre\u003C\u002Fstrong>. Elle est due à tout salarié ayant terminé sa période d'essai. Le code du travail n'impose aucun 13e mois.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"form-grid\">\n      \u003Cdiv class=\"field-group\">\n        \u003Cdiv style=\"display:flex;justify-content:space-between;\">\n          \u003Cspan class=\"field-label\">Salaire brut mensuel\u003C\u002Fspan>\n          \u003Cspan class=\"field-value\" id=\"prime-sal-val\">2 500 €\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n        \u003Cinput type=\"range\" id=\"prime-sal\" min=\"1500\" max=\"8000\" step=\"50\" value=\"2500\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field-group\">\n        \u003Cdiv style=\"display:flex;justify-content:space-between;\">\n          \u003Cspan class=\"field-label\">Mois travaillés dans l'année\u003C\u002Fspan>\n          \u003Cspan class=\"field-value\" id=\"prime-mois-val\">12 mois\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n        \u003Cinput type=\"range\" id=\"prime-mois\" min=\"1\" max=\"12\" step=\"1\" value=\"12\">\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card\">\n      \u003Cdiv class=\"result-label\">Prime annuelle (art. 319 CCN)\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-amount\" id=\"prime-amount\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"prime-sub\">\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-breakdown\">\n        \u003Cdiv class=\"breakdown-row\">\u003Cspan>Acompte juin\u003C\u002Fspan>\u003Cspan id=\"prime-juin\">—\u003C\u002Fspan>\u003C\u002Fdiv>\n        \u003Cdiv class=\"breakdown-row\">\u003Cspan>Acompte décembre\u003C\u002Fspan>\u003Cspan id=\"prime-dec\">—\u003C\u002Fspan>\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ═══════════ TAB: HEURES SUPP ═══════════ -->\n  \u003Cdiv class=\"tab-panel\" data-panel=\"heures-supp\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\" style=\"width:16px;height:16px;\">\u003C\u002Fi>\n      \u003Cp>La CCN reprographie prévoit une majoration de \u003Cstrong>25 % de la 41e à la 48e heure\u003C\u002Fstrong> et de \u003Cstrong>50 % à partir de la 49e heure\u003C\u002Fstrong>. Des primes cumulatives s'ajoutent : \u003Cstrong>+25 % au-delà de 10 h\u002Fjour\u003C\u002Fstrong>, +25 % pour travail de nuit (21 h-6 h) et \u003Cstrong>+100 % pour travail exceptionnel le dimanche\u003C\u002Fstrong>.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"form-grid\">\n      \u003Cdiv class=\"field-group\">\n        \u003Cdiv style=\"display:flex;justify-content:space-between;\">\n          \u003Cspan class=\"field-label\">Salaire horaire brut\u003C\u002Fspan>\n          \u003Cspan class=\"field-value\" id=\"hs-horaire-val\">16,40 €\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n        \u003Cinput type=\"range\" id=\"hs-horaire\" min=\"10\" max=\"80\" step=\"0.1\" value=\"16.4\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field-group\">\n        \u003Cdiv style=\"display:flex;justify-content:space-between;\">\n          \u003Cspan class=\"field-label\">Heures totales travaillées dans la semaine\u003C\u002Fspan>\n          \u003Cspan class=\"field-value\" id=\"hs-total-val\">40 h\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n        \u003Cinput type=\"range\" id=\"hs-total\" min=\"35\" max=\"60\" step=\"0.5\" value=\"40\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field-group\">\n        \u003Cspan class=\"field-label\">Primes cumulatives applicables\u003C\u002Fspan>\n        \u003Cdiv class=\"pills\" id=\"hs-primes-pills\">\n          \u003Cbutton class=\"pill\" data-val=\"nuit\">Travail de nuit (+25 %)\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"longue\">Journée > 10 h (+25 %)\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"dimanche\">Dimanche exceptionnel (+100 %)\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card\">\n      \u003Cdiv class=\"result-label\">Rémunération heures supplémentaires majorées\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-amount\" id=\"hs-amount\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-breakdown\">\n        \u003Cdiv class=\"breakdown-row\">\u003Cspan>Heures normales (35-40 h)\u003C\u002Fspan>\u003Cspan id=\"hs-normales\">—\u003C\u002Fspan>\u003C\u002Fdiv>\n        \u003Cdiv class=\"breakdown-row\">\u003Cspan>H.supp à +25 % (41-48 h)\u003C\u002Fspan>\u003Cspan id=\"hs-25\">—\u003C\u002Fspan>\u003C\u002Fdiv>\n        \u003Cdiv class=\"breakdown-row\">\u003Cspan>H.supp à +50 % (≥ 49 h)\u003C\u002Fspan>\u003Cspan id=\"hs-50\">—\u003C\u002Fspan>\u003C\u002Fdiv>\n        \u003Cdiv class=\"breakdown-row\">\u003Cspan>Primes cumulatives\u003C\u002Fspan>\u003Cspan id=\"hs-primes-total\">—\u003C\u002Fspan>\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- Shared disclaimer -->\n  \u003Cp class=\"disclaimer\">\n    \u003Ci data-lucide=\"shield-check\" style=\"width:12px;height:12px;vertical-align:middle;margin-right:4px;\">\u003C\u002Fi>\n    Calcul indicatif basé sur la CCN IDCC 706 (personnel de la reprographie — Brochure 3027),\n    avenant salaires août 2023, art. 315 et 319.\n    Source : \u003Ca href=\"https:\u002F\u002Fwww.legifrance.gouv.fr\u002Fconv_coll\u002Fid\u002FKALICONT000005635891\" target=\"_blank\" rel=\"noopener\">Légifrance KALICONT000005635891\u003C\u002Fa>.\n    Rapprochement IDCC 1539 en cours depuis 2024 — vérifiez les avenants applicables.\n    Pour validation légale\n  \u003C\u002Fp>\n\u003C\u002Fmain>\n\n\u003Cscript>\n\u002F\u002F ─── UTILS ───────────────────────────────────────────────────────────────────\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 $ = id => document.getElementById(id);\n\n\u002F\u002F ─── TAB SYSTEM ──────────────────────────────────────────────────────────────\nconst tabBtns = document.querySelectorAll('[data-tab]');\nconst tabPanels = document.querySelectorAll('[data-panel]');\n\nfunction activate(id) {\n  tabBtns.forEach(t => t.classList.toggle('active', t.dataset.tab === id));\n  tabPanels.forEach(p => {\n    const on = p.dataset.panel === id;\n    p.classList.toggle('active', on);\n    p.style.display = on ? 'block' : 'none';\n  });\n  try { if (location.hash !== '#' + id) location.hash = id; } catch(e) {}\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)));\nconst hashTab = location.hash.slice(1);\nconst defaultTab = (hashTab && document.querySelector(`[data-tab=\"${hashTab}\"]`)) ? hashTab : tabBtns[0].dataset.tab;\nactivate(defaultTab);\n\n\u002F\u002F ─── PILLS HELPER ────────────────────────────────────────────────────────────\nfunction initPills(containerId, onChange, multi = false) {\n  const cont = $(containerId);\n  if (!cont) return;\n  cont.querySelectorAll('.pill').forEach(pill => {\n    pill.addEventListener('click', () => {\n      if (multi) { pill.classList.toggle('active'); }\n      else { cont.querySelectorAll('.pill').forEach(p => p.classList.remove('active')); pill.classList.add('active'); }\n      onChange();\n    });\n  });\n}\nconst getActivePill = cid => $(cid)?.querySelector('.pill.active')?.dataset.val ?? null;\nconst getActivePills = cid => [...($(cid)?.querySelectorAll('.pill.active') || [])].map(p => p.dataset.val);\n\n\u002F\u002F ─── TAB 1: INDEMNITÉ ────────────────────────────────────────────────────────\nconst indState = { sal: 2500, anc: 5, cat: 'ouvrier' };\n\nfunction computeInd() {\n  const { sal, anc, cat } = indState;\n  const hourlyRate = sal \u002F 152.25;\n  let amount = 0, breakdown = '';\n\n  if (anc \u003C 2) {\n    $('ind-amount').textContent = 'Non éligible';\n    $('ind-sub').textContent = 'Ancienneté minimale : 2 ans.';\n    $('ind-breakdown').innerHTML = '';\n    return;\n  }\n\n  if (cat === 'ouvrier') {\n    amount = hourlyRate * 20 * anc;\n    breakdown = `\u003Cdiv class=\"breakdown-row\">\u003Cspan>20 h × ${anc} an(s) × ${fmtDec.format(hourlyRate)}\u002Fh\u003C\u002Fspan>\u003Cspan>${fmt.format(amount)}\u003C\u002Fspan>\u003C\u002Fdiv>`;\n    const legal = anc \u003C= 10 ? sal * 0.25 * anc : sal * 0.25 * 10 + sal * (1\u002F3) * (anc - 10);\n    breakdown += `\u003Cdiv class=\"breakdown-row\">\u003Cspan>Minimum légal L1234-9\u003C\u002Fspan>\u003Cspan>${fmt.format(legal)}\u003C\u002Fspan>\u003C\u002Fdiv>`;\n    if (amount >= legal) {\n      breakdown += `\u003Cdiv class=\"breakdown-row\">\u003Cspan style=\"color:var(--success)\">CCN plus favorable\u003C\u002Fspan>\u003Cspan style=\"color:var(--success)\">+${fmt.format(amount - legal)}\u003C\u002Fspan>\u003C\u002Fdiv>`;\n    } else {\n      amount = legal;\n      breakdown += `\u003Cdiv class=\"breakdown-row\">\u003Cspan style=\"color:var(--warning)\">Légal appliqué (plus favorable)\u003C\u002Fspan>\u003Cspan style=\"color:var(--warning)\">${fmt.format(legal)}\u003C\u002Fspan>\u003C\u002Fdiv>`;\n    }\n  } else if (cat === 'am') {\n    const tranches = Math.floor(anc \u002F 5);\n    amount = Math.max(2, tranches) * sal;\n    breakdown = `\u003Cdiv class=\"breakdown-row\">\u003Cspan>Barème AM (min. 2 mois)\u003C\u002Fspan>\u003Cspan>${fmt.format(amount)}\u003C\u002Fspan>\u003C\u002Fdiv>`;\n    const legal = anc \u003C= 10 ? sal * 0.25 * anc : sal * 0.25 * 10 + sal * (1\u002F3) * (anc - 10);\n    breakdown += `\u003Cdiv class=\"breakdown-row\">\u003Cspan>Minimum légal L1234-9\u003C\u002Fspan>\u003Cspan>${fmt.format(legal)}\u003C\u002Fspan>\u003C\u002Fdiv>`;\n    if (amount \u003C legal) { amount = legal; }\n  } else {\n    const t1 = Math.min(anc, 10) * (1\u002F5) * sal;\n    const t2 = anc > 10 ? (anc - 10) * (1\u002F3) * sal : 0;\n    amount = t1 + t2;\n    breakdown = `\u003Cdiv class=\"breakdown-row\">\u003Cspan>1\u002F5 mois × ${Math.min(anc,10)} an(s) ≤10 ans\u003C\u002Fspan>\u003Cspan>${fmt.format(t1)}\u003C\u002Fspan>\u003C\u002Fdiv>`;\n    if (t2 > 0) breakdown += `\u003Cdiv class=\"breakdown-row\">\u003Cspan>1\u002F3 mois × ${anc-10} an(s) >10 ans\u003C\u002Fspan>\u003Cspan>${fmt.format(t2)}\u003C\u002Fspan>\u003C\u002Fdiv>`;\n    const legal = anc \u003C= 10 ? sal * 0.25 * anc : sal * 0.25 * 10 + sal * (1\u002F3) * (anc - 10);\n    breakdown += `\u003Cdiv class=\"breakdown-row\">\u003Cspan>Minimum légal L1234-9\u003C\u002Fspan>\u003Cspan>${fmt.format(legal)}\u003C\u002Fspan>\u003C\u002Fdiv>`;\n    if (amount > legal) breakdown += `\u003Cdiv class=\"breakdown-row\">\u003Cspan style=\"color:var(--success)\">CCN cadres plus favorable\u003C\u002Fspan>\u003Cspan style=\"color:var(--success)\">+${fmt.format(amount - legal)}\u003C\u002Fspan>\u003C\u002Fdiv>`;\n  }\n\n  $('ind-amount').textContent = fmt.format(amount);\n  $('ind-sub').textContent = `${anc} an(s) d'ancienneté — catégorie ${cat === 'ouvrier' ? 'Ouvrier\u002FEmployé' : cat === 'am' ? 'Agent de maîtrise' : 'Cadre'}`;\n  $('ind-breakdown').innerHTML = breakdown;\n}\n\n$('ind-sal').addEventListener('input', () => { indState.sal = +$('ind-sal').value; $('ind-sal-val').textContent = fmt.format(indState.sal); computeInd(); });\n$('ind-anc').addEventListener('input', () => { indState.anc = +$('ind-anc').value; $('ind-anc-val').textContent = indState.anc + ' ans'; computeInd(); });\ninitPills('ind-cat-pills', () => { indState.cat = getActivePill('ind-cat-pills'); computeInd(); });\ncomputeInd();\n\n\u002F\u002F ─── TAB 2: PRÉAVIS ──────────────────────────────────────────────────────────\nconst preState = { motif: 'licenciement', anc: 5, cat: 'nc' };\n\nfunction computePre() {\n  const { motif, anc, cat } = preState;\n  let duration = '', sub = '';\n  if (motif === 'demission') {\n    duration = '3 mois';\n    sub = 'Préavis de démission : 3 mois (art. 315 CCN). Réductible par accord mutuel.';\n  } else {\n    if (anc \u003C 0.5) { duration = '1 semaine'; sub = 'Ancienneté \u003C 6 mois.'; }\n    else if (anc \u003C 2) { duration = '1 mois'; sub = 'Ancienneté 6 mois – 2 ans : délai légal (L1234-1).'; }\n    else if (cat === 'cadre') { duration = '3 mois'; sub = 'Cadres \u002F AM ≥ 2 ans ancienneté : 3 mois (CCN reprographie).'; }\n    else { duration = '2 mois'; sub = 'Non-cadres ≥ 2 ans ancienneté : 2 mois (CCN reprographie, art. 315).'; }\n  }\n  $('pre-duration').textContent = duration;\n  $('pre-sub').textContent = sub;\n}\n\n$('pre-anc').addEventListener('input', () => { preState.anc = +$('pre-anc').value; $('pre-anc-val').textContent = preState.anc + ' ans'; computePre(); });\ninitPills('pre-motif-pills', () => { preState.motif = getActivePill('pre-motif-pills'); computePre(); });\ninitPills('pre-cat-pills', () => { preState.cat = getActivePill('pre-cat-pills'); computePre(); });\ncomputePre();\n\n\u002F\u002F ─── TAB 3: GRILLE SALARIALE ─────────────────────────────────────────────────\nconst grille = [\n  { cat: 'Ouvrier', niv: 'N1', base: 1768 },\n  { cat: 'Ouvrier', niv: 'N1.3', base: 1788 },\n  { cat: 'Ouvrier', niv: 'N1.7', base: 1845 },\n  { cat: 'Employé', niv: 'N2', base: 1783 },\n  { cat: 'Employé', niv: 'N2.3', base: 1853 },\n  { cat: 'Employé', niv: 'N2.7', base: 1910 },\n  { cat: 'Agent de maîtrise', niv: 'N3', base: 2000 },\n  { cat: 'Agent de maîtrise', niv: 'N3.5', base: 2205 },\n  { cat: 'Cadre', niv: 'N4', base: 2280 },\n  { cat: 'Cadre', niv: 'N4.3', base: 2840 },\n  { cat: 'Cadre', niv: 'N4.5', base: 3560 },\n];\n\nfunction computeSal() {\n  const selBase = +$('sal-niveau').value;\n  const h = +$('sal-h').value;\n  const adj = Math.round(selBase * h \u002F 35);\n  $('sal-amount').textContent = fmt.format(adj);\n  $('sal-sub').textContent = `Pour ${h} h\u002Fsem · base référence 35 h \u002F 152,25 h mois`;\n  $('sal-base').textContent = fmt.format(selBase);\n  $('sal-horaire').textContent = fmtDec.format(selBase \u002F 152.25) + '\u002Fh';\n  $('sal-h-val').textContent = h + ' h';\n  const tbody = document.querySelector('#grille-tbl tbody');\n  tbody.innerHTML = grille.map(g => `\u003Ctr class=\"${g.base === selBase ? 'highlight' : ''}\">\u003Ctd>${g.cat}\u003C\u002Ftd>\u003Ctd>${g.niv}\u003C\u002Ftd>\u003Ctd>${fmt.format(g.base)}\u003C\u002Ftd>\u003C\u002Ftr>`).join('');\n}\n\n$('sal-niveau').addEventListener('change', computeSal);\n$('sal-h').addEventListener('input', computeSal);\ncomputeSal();\n\n\u002F\u002F ─── TAB 4: PRIME ANNUELLE ───────────────────────────────────────────────────\nfunction computePrime() {\n  const sal = +$('prime-sal').value;\n  const mois = +$('prime-mois').value;\n  const prime = sal * mois \u002F 12;\n  $('prime-amount').textContent = fmt.format(prime);\n  $('prime-sub').textContent = `1\u002F12 de ${fmt.format(sal * mois)} (salaire cumulé sur ${mois} mois)`;\n  $('prime-juin').textContent = fmt.format(prime \u002F 2);\n  $('prime-dec').textContent = fmt.format(prime \u002F 2);\n  $('prime-sal-val').textContent = fmt.format(sal);\n  $('prime-mois-val').textContent = mois + ' mois';\n}\n\n$('prime-sal').addEventListener('input', computePrime);\n$('prime-mois').addEventListener('input', computePrime);\ncomputePrime();\n\n\u002F\u002F ─── TAB 5: HEURES SUPP ──────────────────────────────────────────────────────\nconst hsState = { horaire: 16.4, total: 40, primes: [] };\n\nfunction computeHs() {\n  const { horaire, total, primes } = hsState;\n  const h_norm = Math.max(0, Math.min(total, 40) - 35);\n  const h25 = Math.max(0, Math.min(total, 48) - 40);\n  const h50 = Math.max(0, total - 48);\n  const base_norm = h_norm * horaire;\n  const base25 = h25 * horaire * 1.25;\n  const base50 = h50 * horaire * 1.50;\n  const hsHours = h25 + h50;\n  let primesTotal = 0;\n  if (primes.includes('nuit')) primesTotal += hsHours * horaire * 0.25;\n  if (primes.includes('longue')) primesTotal += hsHours * horaire * 0.25;\n  if (primes.includes('dimanche')) primesTotal += hsHours * horaire;\n  const total_amt = base_norm + base25 + base50 + primesTotal;\n  $('hs-amount').textContent = fmtDec.format(total_amt);\n  $('hs-normales').textContent = h_norm > 0 ? fmtDec.format(base_norm) + ` (${h_norm}h)` : '—';\n  $('hs-25').textContent = h25 > 0 ? fmtDec.format(base25) + ` (${h25}h)` : '—';\n  $('hs-50').textContent = h50 > 0 ? fmtDec.format(base50) + ` (${h50}h)` : '—';\n  $('hs-primes-total').textContent = primesTotal > 0 ? fmtDec.format(primesTotal) : '—';\n  $('hs-horaire-val').textContent = fmtDec.format(horaire) + ' €';\n  $('hs-total-val').textContent = total + ' h';\n}\n\n$('hs-horaire').addEventListener('input', () => { hsState.horaire = parseFloat($('hs-horaire').value); computeHs(); });\n$('hs-total').addEventListener('input', () => { hsState.total = parseFloat($('hs-total').value); computeHs(); });\ninitPills('hs-primes-pills', () => { hsState.primes = getActivePills('hs-primes-pills'); computeHs(); }, true);\ncomputeHs();\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);\nlucide.createIcons();\n\u003C\u002Fscript>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n","generated","juridique","consumer","both","https:\u002F\u002Fpub-bdebbd2dad294475a2da0eb657815b6b.r2.dev\u002Ftools\u002Fccn-personnel-de-la-reprographie-dcff7d803a.webp",[]]