[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"footer-root-categories-fr-FR":3,"tool-content-ccn-organismes-de-tourisme-fr":83,"footer-cities-fr":160},[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":127,"tool_html":154,"source":155,"category":156,"audience":157,"publish_mode":158,"hero_image":159,"hero_image_alt":85},"ccn-organismes-de-tourisme","CCN des organismes de tourisme — calculateur complet","Calculateur CCN Organismes de Tourisme IDCC 1909 | Expert Zoom","Outil interactif couvrant l'indemnité de licenciement (avec doublement pour ≥20 ans et ≥52 ans), le préavis, la grille salariale à points, la gratification 17,5 % et les heures supp. de la CCN IDCC 1909.","Ce calculateur couvre les 5 déviations principales de la convention collective des organismes de tourisme (IDCC 1909) par rapport au code du travail : l'indemnité de licenciement avec doublement pour les salariés de 52 ans et plus ayant 20 ans d'ancienneté, les préavis catégoriels (1 à 3 mois), la grille de salaires à points (valeur 1,2546 € — Avenant n°45 de mars 2025), la gratification annuelle obligatoire de 17,5 % et la majoration renforcée des heures supplémentaires à 30 % pour les 8 premières heures.",[90,110],{"name":91,"@type":92,"about":93,"author":98,"@context":101,"isPartOf":102,"inLanguage":105,"description":106,"operatingSystem":107,"applicationCategory":108,"isAccessibleForFree":109},"Calculateur CCN Organismes de Tourisme — IDCC 1909","WebApplication",{"name":94,"@type":95,"sameAs":96,"identifier":97},"Convention collective nationale des organismes de tourisme","Thing","https:\u002F\u002Fwww.legifrance.gouv.fr\u002Fconv_coll\u002Fid\u002FKALICONT000005635728","IDCC 1909",{"name":99,"@type":100},"Expert-Zoom","Organization","https:\u002F\u002Fschema.org",{"url":103,"@type":104},"\u002Ffr\u002Fmagazine\u002Fjuridique\u002Fles-conventions-collectives-en-france","Article","fr","Outil interactif couvrant l'indemnité de licenciement, le préavis, la grille salariale, la gratification annuelle (13e mois) et les heures supplémentaires de la convention collective des organismes de tourisme (IDCC 1909).","All","FinanceApplication",true,{"@type":111,"@context":101,"mainEntity":112},"FAQPage",[113,119,123],{"name":114,"@type":115,"acceptedAnswer":116},"Quelle est l'indemnité de licenciement dans la CCN des organismes de tourisme (IDCC 1909) ?","Question",{"text":117,"@type":118},"L'indemnité de licenciement dans la CCN 1909 est calculée selon la formule de l'article L1234-9 : ¼ de mois de salaire brut par année pour les 10 premières années, ⅓ de mois au-delà. La particularité de cette convention est le doublement de l'indemnité pour les salariés ayant au moins 20 ans d'ancienneté et 52 ans ou plus au moment du licenciement (Avenant n°25 du 17 juillet 2018, art. 13).","Answer",{"name":120,"@type":115,"acceptedAnswer":121},"La convention collective organismes de tourisme prévoit-elle un 13e mois ?",{"text":122,"@type":118},"Oui. La CCN 1909 impose une gratification annuelle obligatoire équivalente à 17,5 % du salaire moyen des 12 derniers mois. Cette gratification est ouverte aux salariés ayant au moins 6 mois d'ancienneté et proratisée en cas d'année incomplète.",{"name":124,"@type":115,"acceptedAnswer":125},"Quelle majoration s'applique aux heures supplémentaires dans la CCN 1909 ?",{"text":126,"@type":118},"La CCN des organismes de tourisme prévoit une majoration de 30 % pour les 8 premières heures supplémentaires hebdomadaires (contre 25 % dans le code du travail). Au-delà, la majoration est de 50 %. Le contingent annuel est fixé à 130 heures.",[128,129,132,135,137,140,142,145,148,151],{"a":117,"q":114},{"a":130,"q":131},"La CCN 1909 fixe des préavis catégoriels : les employés ont 1 mois de préavis, porté à 2 mois dès 2 ans d'ancienneté. Les agents de maîtrise bénéficient systématiquement de 2 mois. Les cadres ont droit à 3 mois, quelle que soit leur ancienneté. En cas de licenciement, les salariés peuvent s'absenter 2 demi-journées par semaine pour chercher un emploi.","Quelle est la durée du préavis dans la convention collective des organismes de tourisme ?",{"a":133,"q":134},"La CCN 1909 utilise un système de rémunération à points. La valeur du point est fixée à 1,2546 € depuis le 1er mars 2025 (Avenant n°45). Le salaire minimum le plus bas (coefficient 147) s'établit à environ 1 844 € brut mensuel pour 35h hebdomadaires, soit au-dessus du SMIC 2025 (1 801,80 €). Le salaire maximal de la grille atteint environ 4 240 € pour les cadres dirigeants (coefficient 338).","Quelle est la grille des salaires minima pour les organismes de tourisme en 2025 ?",{"a":136,"q":120},"Oui. La CCN 1909 impose une gratification annuelle obligatoire équivalente à 17,5 % du salaire moyen des 12 derniers mois. Cette gratification est ouverte aux salariés ayant au moins 6 mois d'ancienneté et proratisée en cas d'année incomplète. Le code du travail ne prévoit aucun 13e mois obligatoire : c'est un avantage propre à cette convention.",{"a":138,"q":139},"La convention prévoit une prime d'ancienneté de 3 % du salaire à partir de 3 ans de service, avec une majoration de 1 % supplémentaire tous les 3 ans, jusqu'à un plafond de 15 % atteint à 30 ans d'ancienneté. Elle s'ajoute au salaire de base et est distincte de la gratification annuelle (17,5 %).","Quelle est la prime d'ancienneté dans la CCN des organismes de tourisme ?",{"a":141,"q":124},"La CCN des organismes de tourisme prévoit une majoration de 30 % pour les 8 premières heures supplémentaires hebdomadaires (contre 25 % dans le code du travail). Au-delà, la majoration est de 50 %. Le contingent annuel d'heures supplémentaires est fixé à 130 heures (contre 220 heures en l'absence de convention collective).",{"a":143,"q":144},"La base est la même que la loi : 2,5 jours ouvrables par mois travaillé, soit 30 jours ouvrables par an. La CCN 1909 accorde 1 jour ouvrable supplémentaire après 10 ans d'ancienneté dans l'entreprise, portant le total à 31 jours ouvrables (26 jours ouvrés).","Les congés payés sont-ils plus avantageux dans la CCN des organismes de tourisme ?",{"a":146,"q":147},"La CCN des organismes de tourisme (IDCC 1909) s'applique aux agences de voyages, aux offices du tourisme, aux syndicats d'initiative, aux associations de tourisme social et aux autres organismes dont l'activité principale est le tourisme et les voyages, en France métropolitaine.","Quelles entreprises sont couvertes par la convention collective IDCC 1909 ?",{"a":149,"q":150},"Le numéro IDCC (Identifiant de la Convention Collective) est mentionné sur le bulletin de paie, dans le contrat de travail ou dans les registres de l'entreprise. Pour les organismes de tourisme, il s'agit du numéro 1909. Vous pouvez également le vérifier sur le site du Ministère du Travail ou sur Legifrance (KALICONT000005635728).","Comment vérifier si ma convention collective est bien l'IDCC 1909 ?",{"a":152,"q":153},"L'indemnité de licenciement est exonérée d'impôt sur le revenu dans la limite prévue par la loi. Pour un licenciement (hors faute grave\u002Flourde), l'exonération s'applique au montant le plus élevé entre : l'indemnité légale ou conventionnelle intégrale, 50 % du total reçu ou 2 fois la rémunération annuelle brute, dans la limite de 6 fois le plafond annuel de la Sécurité sociale (PASS).","L'indemnité de licenciement est-elle imposable dans la CCN organismes de tourisme ?","\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 Organismes de Tourisme — IDCC 1909\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      --success-bg: #f0fdf4;\n      --warn: #d97706;\n      --warn-bg: #fffbeb;\n      --radius: 0.75rem;\n      --shadow: 0 1px 3px rgba(0,0,0,0.08), 0 1px 2px rgba(0,0,0,0.04);\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    \u002F* Header *\u002F\n    .tool-header {\n      margin-bottom: 1.25rem;\n    }\n    .tool-header h1 {\n      font-size: 1.1rem;\n      font-weight: 700;\n      color: var(--text);\n      line-height: 1.3;\n    }\n    .badge {\n      display: inline-flex;\n      align-items: center;\n      gap: 0.25rem;\n      background: var(--accent-light);\n      color: var(--accent);\n      font-size: 0.75rem;\n      font-weight: 600;\n      padding: 0.2rem 0.55rem;\n      border-radius: 999px;\n      margin-top: 0.4rem;\n    }\n    \u002F* Tab nav *\u002F\n    .tab-nav {\n      display: flex;\n      gap: 0.25rem;\n      overflow-x: auto;\n      border-bottom: 2px solid var(--border);\n      margin-bottom: 1.25rem;\n      padding-bottom: 0;\n      -ms-overflow-style: none;\n      scrollbar-width: none;\n    }\n    .tab-nav::-webkit-scrollbar { display: none; }\n    .tab-btn {\n      flex-shrink: 0;\n      padding: 0.55rem 0.9rem;\n      border: none;\n      background: none;\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: 0.375rem 0.375rem 0 0;\n      transition: color 0.15s, border-color 0.15s;\n      white-space: nowrap;\n    }\n    .tab-btn:hover { color: var(--accent); }\n    .tab-btn.active {\n      color: var(--accent);\n      border-bottom-color: var(--accent);\n      font-weight: 600;\n    }\n    \u002F* Panel *\u002F\n    .panel { display: none; }\n    .panel.active { display: block; }\n    \u002F* Rule callout *\u002F\n    .rule-callout {\n      display: flex;\n      gap: 0.65rem;\n      align-items: flex-start;\n      background: var(--warn-bg);\n      border: 1px solid #fde68a;\n      border-radius: var(--radius);\n      padding: 0.85rem 1rem;\n      margin-bottom: 1.1rem;\n      font-size: 0.875rem;\n      color: #92400e;\n    }\n    .rule-callout svg { flex-shrink: 0; margin-top: 0.1rem; color: var(--warn); }\n    \u002F* Form card *\u002F\n    .form-card {\n      background: var(--card);\n      border: 1px solid var(--border);\n      border-radius: var(--radius);\n      padding: 1.1rem 1.1rem;\n      margin-bottom: 1rem;\n      box-shadow: var(--shadow);\n    }\n    .field { margin-bottom: 1rem; }\n    .field:last-child { margin-bottom: 0; }\n    label {\n      display: flex;\n      justify-content: space-between;\n      align-items: baseline;\n      font-size: 0.85rem;\n      font-weight: 500;\n      color: var(--text);\n      margin-bottom: 0.4rem;\n    }\n    label .val {\n      font-size: 0.875rem;\n      font-weight: 700;\n      color: var(--accent);\n      font-variant-numeric: tabular-nums;\n    }\n    input[type=\"range\"] {\n      width: 100%;\n      accent-color: var(--accent);\n      height: 4px;\n      cursor: pointer;\n    }\n    select {\n      width: 100%;\n      padding: 0.5rem 0.65rem;\n      border: 1px solid var(--border);\n      border-radius: 0.5rem;\n      font-size: 0.875rem;\n      background: var(--bg);\n      color: var(--text);\n      cursor: pointer;\n    }\n    \u002F* Pills *\u002F\n    .pills { display: flex; flex-wrap: wrap; gap: 0.4rem; margin-top: 0.4rem; }\n    .pill {\n      padding: 0.3rem 0.75rem;\n      border: 1.5px solid var(--border);\n      border-radius: 999px;\n      font-size: 0.8125rem;\n      cursor: pointer;\n      background: var(--bg);\n      color: var(--muted);\n      transition: all 0.12s;\n      white-space: nowrap;\n    }\n    .pill.active {\n      background: var(--accent);\n      border-color: var(--accent);\n      color: #fff;\n      font-weight: 600;\n    }\n    \u002F* Toggle *\u002F\n    .toggle-wrap { display: flex; align-items: center; gap: 0.6rem; margin-top: 0.35rem; }\n    .toggle {\n      position: relative;\n      width: 2.5rem;\n      height: 1.35rem;\n      display: inline-block;\n    }\n    .toggle input { opacity: 0; width: 0; height: 0; }\n    .slider-track {\n      position: absolute;\n      inset: 0;\n      background: var(--border);\n      border-radius: 999px;\n      cursor: pointer;\n      transition: background 0.2s;\n    }\n    .slider-track::before {\n      content: '';\n      position: absolute;\n      width: 1rem;\n      height: 1rem;\n      left: 0.175rem;\n      top: 50%;\n      transform: translateY(-50%);\n      background: #fff;\n      border-radius: 50%;\n      transition: transform 0.2s;\n      box-shadow: 0 1px 3px rgba(0,0,0,0.2);\n    }\n    .toggle input:checked + .slider-track { background: var(--accent); }\n    .toggle input:checked + .slider-track::before { transform: translateY(-50%) translateX(1.125rem); }\n    .toggle-label { font-size: 0.85rem; color: var(--text); }\n    \u002F* Result card *\u002F\n    .result-card {\n      background: linear-gradient(135deg, var(--accent) 0%, var(--accent-dark) 100%);\n      border-radius: var(--radius);\n      padding: 1.1rem 1.25rem;\n      color: #fff;\n      margin-bottom: 1rem;\n      box-shadow: 0 4px 12px rgba(37,99,235,0.25);\n    }\n    .result-card .result-label {\n      font-size: 0.8rem;\n      font-weight: 500;\n      opacity: 0.85;\n      text-transform: uppercase;\n      letter-spacing: 0.04em;\n      margin-bottom: 0.2rem;\n    }\n    .result-card .result-amount {\n      font-size: 2rem;\n      font-weight: 800;\n      font-variant-numeric: tabular-nums;\n      line-height: 1.1;\n    }\n    .result-card .result-sub {\n      font-size: 0.8125rem;\n      opacity: 0.85;\n      margin-top: 0.4rem;\n    }\n    .result-detail {\n      background: var(--success-bg);\n      border: 1px solid #bbf7d0;\n      border-radius: 0.5rem;\n      padding: 0.75rem 1rem;\n      font-size: 0.8125rem;\n      color: #166534;\n      margin-bottom: 1rem;\n    }\n    .result-detail p { margin-bottom: 0.2rem; }\n    \u002F* Disclaimer *\u002F\n    .disclaimer {\n      font-size: 0.775rem;\n      color: var(--muted);\n      border-top: 1px solid var(--border);\n      padding-top: 0.85rem;\n      margin-top: 0.5rem;\n      line-height: 1.5;\n    }\n    .disclaimer a { color: var(--accent); text-decoration: none; }\n    .disclaimer a:hover { text-decoration: underline; }\n    \u002F* Grid rows *\u002F\n    .grid-table { width: 100%; border-collapse: collapse; font-size: 0.8125rem; }\n    .grid-table th {\n      text-align: left;\n      font-weight: 600;\n      color: var(--muted);\n      padding: 0.4rem 0.5rem;\n      border-bottom: 2px solid var(--border);\n    }\n    .grid-table td {\n      padding: 0.45rem 0.5rem;\n      border-bottom: 1px solid var(--border);\n    }\n    .grid-table tr:last-child td { border-bottom: none; }\n    .grid-table .highlight { background: var(--accent-light); font-weight: 600; color: var(--accent); }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\u003Cbody>\n\u003C!-- CCN IDCC 1909 — Déviations :\n     indemnite: L1234-9 → doublement pour ≥20 ans ET âge ≥52 ans (Avenant n°25, art. 13)\n     preavis: L1234-1 → grille catégorielle : employés 1→2 mois (≥2 ans), AM 2 mois, cadres 3 mois\n     salaire-min: SMIC → grille à points (valeur du point Avenant n°45, 01\u002F03\u002F2025: 1.2546€)\n     prime-annuelle: néant → gratification obligatoire 17.5% + prime ancienneté 3%-15%\n     heures-supp: L3121-36 → majoration 30% (vs 25%) pour les 8 premières h; contingent 130h\n-->\n\u003Cmain class=\"tool-root\">\n  \u003Cdiv class=\"tool-header\">\n    \u003Ch1>Calculateur CCN — Organismes de Tourisme\u003C\u002Fh1>\n    \u003Cdiv class=\"badge\">\n      \u003Ci data-lucide=\"landmark\" style=\"width:12px;height:12px;\">\u003C\u002Fi>\n      IDCC 1909\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003Cnav class=\"tab-nav\" role=\"tablist\">\n    \u003Cbutton class=\"tab-btn\" data-tab=\"indemnite\" role=\"tab\">Indemnité\u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"preavis\" role=\"tab\">Préavis\u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"salaire-min\" role=\"tab\">Grille salaires\u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"prime-annuelle\" role=\"tab\">13e mois & ancienneté\u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"heures-supp\" role=\"tab\">Heures supp.\u003C\u002Fbutton>\n  \u003C\u002Fnav>\n\n  \u003C!-- ═══════════════════════════════════════════════════\n       PANEL 1 — INDEMNITÉ DE LICENCIEMENT\n  ═══════════════════════════════════════════════════ -->\n  \u003Cdiv class=\"panel\" data-panel=\"indemnite\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"alert-circle\" style=\"width:16px;height:16px;\">\u003C\u002Fi>\n      \u003Cp>\u003Cstrong>Avantage CCN&nbsp;:\u003C\u002Fstrong> La CCN IDCC 1909 double l'indemnité pour les salariés ayant au moins 20 ans d'ancienneté \u003Cem>et\u003C\u002Fem> un âge de 52 ans ou plus — ce que le code du travail (L1234-9) ne prévoit pas. Pour les autres, le calcul est identique : ¼ mois par année jusqu'à 10 ans, ⅓ mois au-delà.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"form-card\">\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Salaire brut de référence mensuel \u003Cspan class=\"val\" id=\"ind-sal-val\">2 500 €\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"ind-sal\" min=\"1200\" max=\"8000\" step=\"50\" value=\"2500\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Ancienneté \u003Cspan class=\"val\" id=\"ind-anc-val\">8 ans\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"ind-anc\" min=\"1\" max=\"40\" step=\"1\" value=\"8\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Âge du salarié \u003Cspan class=\"val\" id=\"ind-age-val\">45 ans\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"ind-age\" min=\"18\" max=\"65\" step=\"1\" value=\"45\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel style=\"margin-bottom:0.4rem;\">Motif du licenciement\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"ind-motif-pills\">\n          \u003Cbutton class=\"pill active\" data-value=\"perso\">Motif personnel\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-value=\"eco\">Économique\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-result\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"ind-result-sub\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-detail\" id=\"ind-detail\">\u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ═══════════════════════════════════════════════════\n       PANEL 2 — PRÉAVIS\n  ═══════════════════════════════════════════════════ -->\n  \u003Cdiv class=\"panel\" data-panel=\"preavis\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"alert-circle\" style=\"width:16px;height:16px;\">\u003C\u002Fi>\n      \u003Cp>\u003Cstrong>Grille CCN&nbsp;:\u003C\u002Fstrong> La CCN fixe des préavis catégoriels. Les employés passent à 2 mois dès 2 ans d'ancienneté. Les agents de maîtrise bénéficient de 2 mois systématiques. Les cadres ont droit à 3 mois. En cas de licenciement, 2 demi-journées hebdomadaires d'absence autorisée pour recherche d'emploi (accord mutuel).\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"form-card\">\n      \u003Cdiv class=\"field\">\n        \u003Clabel style=\"margin-bottom:0.4rem;\">Catégorie professionnelle\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"pre-cat-pills\">\n          \u003Cbutton class=\"pill active\" data-value=\"employe\">Employé\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-value=\"am\">Agent de maîtrise\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-value=\"cadre\">Cadre\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Ancienneté \u003Cspan class=\"val\" id=\"pre-anc-val\">1 an\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"pre-anc\" min=\"0\" max=\"40\" step=\"1\" value=\"1\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel style=\"margin-bottom:0.4rem;\">Sens du préavis\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"pre-sens-pills\">\n          \u003Cbutton class=\"pill active\" data-value=\"licenciement\">Licenciement\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-value=\"demission\">Démission\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card\">\n      \u003Cdiv class=\"result-label\">Durée du préavis\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-amount\" id=\"pre-result\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"pre-result-sub\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-detail\" id=\"pre-detail\">\u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ═══════════════════════════════════════════════════\n       PANEL 3 — GRILLE DES SALAIRES\n  ═══════════════════════════════════════════════════ -->\n  \u003Cdiv class=\"panel\" data-panel=\"salaire-min\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"alert-circle\" style=\"width:16px;height:16px;\">\u003C\u002Fi>\n      \u003Cp>\u003Cstrong>Système à points&nbsp;:\u003C\u002Fstrong> La CCN 1909 utilise une grille à coefficients. La valeur du point est fixée à \u003Cstrong>1,2546 €\u003C\u002Fstrong> depuis le 1er mars 2025 (Avenant n°45). Le salaire minimum conventionnel est supérieur au SMIC pour toutes les catégories.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"form-card\">\n      \u003Cdiv class=\"field\">\n        \u003Clabel style=\"margin-bottom:0.4rem;\">Niveau \u002F Coefficient\u003C\u002Flabel>\n        \u003Cselect id=\"sal-niveau\">\n          \u003Coption value=\"1470\">Niveau I — Coefficient 147 (entrée)\u003C\u002Foption>\n          \u003Coption value=\"1560\">Niveau I — Coefficient 156\u003C\u002Foption>\n          \u003Coption value=\"1670\">Niveau II — Coefficient 167\u003C\u002Foption>\n          \u003Coption value=\"1780\">Niveau II — Coefficient 178\u003C\u002Foption>\n          \u003Coption value=\"1900\">Niveau III — Coefficient 190\u003C\u002Foption>\n          \u003Coption value=\"2050\">Niveau III — Coefficient 205\u003C\u002Foption>\n          \u003Coption value=\"2250\">Niveau IV — Coefficient 225\u003C\u002Foption>\n          \u003Coption value=\"2500\">Niveau IV — Coefficient 250\u003C\u002Foption>\n          \u003Coption value=\"2800\">Niveau V — Coefficient 280\u003C\u002Foption>\n          \u003Coption value=\"3200\">Niveau V — Coefficient 320\u003C\u002Foption>\n          \u003Coption value=\"3380\">Cadre — Coefficient 338\u003C\u002Foption>\n        \u003C\u002Fselect>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Heures hebdomadaires \u003Cspan class=\"val\" id=\"sal-h-val\">35 h\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"sal-h\" min=\"24\" max=\"44\" step=\"1\" value=\"35\">\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card\">\n      \u003Cdiv class=\"result-label\">Salaire minimum mensuel brut\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-amount\" id=\"sal-result\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"sal-result-sub\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-detail\" id=\"sal-detail\">\u003C\u002Fdiv>\n    \u003Cdetails style=\"margin-bottom:1rem;\">\n      \u003Csummary style=\"font-size:0.85rem;font-weight:600;cursor:pointer;color:var(--accent);margin-bottom:0.5rem;\">Voir la grille complète 2025\u003C\u002Fsummary>\n      \u003Cdiv class=\"form-card\" style=\"padding:0.75rem;\">\n        \u003Ctable class=\"grid-table\">\n          \u003Cthead>\u003Ctr>\u003Cth>Catégorie\u003C\u002Fth>\u003Cth>Coefficient\u003C\u002Fth>\u003Cth>Salaire min. mensuel\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\n          \u003Ctbody>\n            \u003Ctr>\u003Ctd>Employé N.I\u003C\u002Ftd>\u003Ctd>147\u003C\u002Ftd>\u003Ctd>1 844 €\u003C\u002Ftd>\u003C\u002Ftr>\n            \u003Ctr>\u003Ctd>Employé N.I\u003C\u002Ftd>\u003Ctd>156\u003C\u002Ftd>\u003Ctd>1 957 €\u003C\u002Ftd>\u003C\u002Ftr>\n            \u003Ctr>\u003Ctd>Employé N.II\u003C\u002Ftd>\u003Ctd>167\u003C\u002Ftd>\u003Ctd>2 095 €\u003C\u002Ftd>\u003C\u002Ftr>\n            \u003Ctr>\u003Ctd>Employé N.II\u003C\u002Ftd>\u003Ctd>178\u003C\u002Ftd>\u003Ctd>2 233 €\u003C\u002Ftd>\u003C\u002Ftr>\n            \u003Ctr>\u003Ctd>Technicien N.III\u003C\u002Ftd>\u003Ctd>190\u003C\u002Ftd>\u003Ctd>2 384 €\u003C\u002Ftd>\u003C\u002Ftr>\n            \u003Ctr>\u003Ctd>Technicien N.III\u003C\u002Ftd>\u003Ctd>205\u003C\u002Ftd>\u003Ctd>2 572 €\u003C\u002Ftd>\u003C\u002Ftr>\n            \u003Ctr>\u003Ctd>Agent maîtrise N.IV\u003C\u002Ftd>\u003Ctd>225\u003C\u002Ftd>\u003Ctd>2 823 €\u003C\u002Ftd>\u003C\u002Ftr>\n            \u003Ctr>\u003Ctd>Agent maîtrise N.IV\u003C\u002Ftd>\u003Ctd>250\u003C\u002Ftd>\u003Ctd>3 137 €\u003C\u002Ftd>\u003C\u002Ftr>\n            \u003Ctr>\u003Ctd>Cadre N.V\u003C\u002Ftd>\u003Ctd>280\u003C\u002Ftd>\u003Ctd>3 513 €\u003C\u002Ftd>\u003C\u002Ftr>\n            \u003Ctr>\u003Ctd>Cadre N.V\u003C\u002Ftd>\u003Ctd>320\u003C\u002Ftd>\u003Ctd>4 015 €\u003C\u002Ftd>\u003C\u002Ftr>\n            \u003Ctr class=\"highlight\">\u003Ctd>Cadre dirigeant\u003C\u002Ftd>\u003Ctd>338\u003C\u002Ftd>\u003Ctd>4 240 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003C\u002Ftbody>\n        \u003C\u002Ftable>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdetails>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ═══════════════════════════════════════════════════\n       PANEL 4 — 13e MOIS & PRIME D'ANCIENNETÉ\n  ═══════════════════════════════════════════════════ -->\n  \u003Cdiv class=\"panel\" data-panel=\"prime-annuelle\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"alert-circle\" style=\"width:16px;height:16px;\">\u003C\u002Fi>\n      \u003Cp>\u003Cstrong>Double avantage CCN&nbsp;:\u003C\u002Fstrong> La convention impose une \u003Cstrong>gratification annuelle de 17,5 %\u003C\u002Fstrong> du salaire moyen des 12 derniers mois (dès 6 mois d'ancienneté), et une \u003Cstrong>prime d'ancienneté\u003C\u002Fstrong> allant de 3 % (3 ans) à 15 % (30 ans). Le code du travail ne prévoit aucune de ces obligations.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"form-card\">\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Salaire brut mensuel \u003Cspan class=\"val\" id=\"pr-sal-val\">2 500 €\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"pr-sal\" min=\"1200\" max=\"8000\" step=\"50\" value=\"2500\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Ancienneté \u003Cspan class=\"val\" id=\"pr-anc-val\">5 ans\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"pr-anc\" min=\"0\" max=\"40\" step=\"1\" value=\"5\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel style=\"margin-bottom:0.3rem;\">Type de calcul\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"pr-type-pills\">\n          \u003Cbutton class=\"pill active\" data-value=\"global\">Total (gratification + ancienneté)\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-value=\"gratif\">Gratification seule\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-value=\"anc\">Prime ancienneté seule\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card\">\n      \u003Cdiv class=\"result-label\">Montant annuel estimé\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-amount\" id=\"pr-result\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"pr-result-sub\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-detail\" id=\"pr-detail\">\u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ═══════════════════════════════════════════════════\n       PANEL 5 — HEURES SUPPLÉMENTAIRES\n  ═══════════════════════════════════════════════════ -->\n  \u003Cdiv class=\"panel\" data-panel=\"heures-supp\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"alert-circle\" style=\"width:16px;height:16px;\">\u003C\u002Fi>\n      \u003Cp>\u003Cstrong>Majoration renforcée&nbsp;:\u003C\u002Fstrong> La CCN 1909 prévoit \u003Cstrong>+30 %\u003C\u002Fstrong> pour les 8 premières heures supplémentaires (contre +25 % dans le code du travail). Au-delà, la majoration est de +50 % comme dans la loi. Le contingent annuel est de 130 heures (vs 220 h en l'absence de CCN).\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"form-card\">\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Salaire horaire brut \u003Cspan class=\"val\" id=\"hs-taux-val\">14,40 €\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"hs-taux\" min=\"10\" max=\"50\" step=\"0.10\" value=\"14.40\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Heures supp. dans la tranche 1 à 8 h \u003Cspan class=\"val\" id=\"hs-h1-val\">4 h\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"hs-h1\" min=\"0\" max=\"8\" step=\"1\" value=\"4\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Heures supp. au-delà de 8 h \u003Cspan class=\"val\" id=\"hs-h2-val\">0 h\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"hs-h2\" min=\"0\" max=\"30\" step=\"1\" value=\"0\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Cdiv class=\"toggle-wrap\">\n          \u003Clabel class=\"toggle\">\n            \u003Cinput type=\"checkbox\" id=\"hs-dimanche\">\n            \u003Cspan class=\"slider-track\">\u003C\u002Fspan>\n          \u003C\u002Flabel>\n          \u003Cspan class=\"toggle-label\">Travail du dimanche (+50 %)\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card\">\n      \u003Cdiv class=\"result-label\">Rémunération heures supp. estimée\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-amount\" id=\"hs-result\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"hs-result-sub\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-detail\" id=\"hs-detail\">\u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003Cp class=\"disclaimer\">\n    Calcul indicatif basé sur la CCN IDCC 1909 (Avenant n°25 — indemnités, Avenant n°45 — salaires, mars 2025).\n    Source&nbsp;: \u003Ca href=\"https:\u002F\u002Fwww.legifrance.gouv.fr\u002Fconv_coll\u002Fid\u002FKALICONT000005635728\" target=\"_blank\" rel=\"noopener\">Legifrance — KALICONT000005635728\u003C\u002Fa>.\n    Pour validation légale\n  \u003C\u002Fp>\n\u003C\u002Fmain>\n\n\u003Cscript>\n(function () {\n  'use strict';\n\n  \u002F* ── Formatters ── *\u002F\n  const fmtEUR = v => new Intl.NumberFormat('fr-FR', { style: 'currency', currency: 'EUR', maximumFractionDigits: 0 }).format(v);\n  const fmtNum = v => new Intl.NumberFormat('fr-FR').format(v);\n\n  \u002F* ═══════════════════════════════════════════════\n     TAB SYSTEM\n  ═══════════════════════════════════════════════ *\u002F\n  const tabs = document.querySelectorAll('[data-tab]');\n  const panels = document.querySelectorAll('[data-panel]');\n\n  function activate(id) {\n    tabs.forEach(t => t.classList.toggle('active', t.dataset.tab === id));\n    panels.forEach(p => {\n      const isActive = p.dataset.panel === id;\n      p.classList.toggle('active', isActive);\n      if (isActive) { p.style.display = 'block'; } else { p.style.display = 'none'; }\n    });\n    if (location.hash !== '#' + id) location.hash = id;\n    requestAnimationFrame(() => window.dispatchEvent(new Event('resize')));\n  }\n\n  tabs.forEach(t => t.addEventListener('click', () => activate(t.dataset.tab)));\n  const hashTab = location.hash.slice(1);\n  const firstTabId = tabs[0] ? tabs[0].dataset.tab : '';\n  activate(document.querySelector(`[data-tab=\"${hashTab}\"]`) ? hashTab : firstTabId);\n\n  \u002F* ═══════════════════════════════════════════════\n     PILL HELPER\n  ═══════════════════════════════════════════════ *\u002F\n  function setupPills(groupId, onChange) {\n    const container = document.getElementById(groupId);\n    if (!container) return;\n    container.querySelectorAll('.pill').forEach(p => {\n      p.addEventListener('click', () => {\n        container.querySelectorAll('.pill').forEach(x => x.classList.remove('active'));\n        p.classList.add('active');\n        onChange(p.dataset.value);\n      });\n    });\n  }\n  function getActivePill(groupId) {\n    const container = document.getElementById(groupId);\n    if (!container) return '';\n    const active = container.querySelector('.pill.active');\n    return active ? active.dataset.value : '';\n  }\n\n  \u002F* ═══════════════════════════════════════════════\n     PANEL 1 — INDEMNITÉ\n  ═══════════════════════════════════════════════ *\u002F\n  const indState = { sal: 2500, anc: 8, age: 45, motif: 'perso' };\n\n  function computeInd(s) {\n    if (s.anc \u003C 0.67) return { montant: 0, details: 'Ancienneté insuffisante (moins de 8 mois).' };\n    const tranche1 = Math.min(s.anc, 10) * (1 \u002F 4) * s.sal;\n    const tranche2 = Math.max(0, s.anc - 10) * (1 \u002F 3) * s.sal;\n    let montant = tranche1 + tranche2;\n    const doublement = s.anc >= 20 && s.age >= 52;\n    if (doublement) montant *= 2;\n    return {\n      montant,\n      doublement,\n      t1: tranche1,\n      t2: tranche2,\n      details: doublement\n        ? `Doublement CCN appliqué : ≥ 20 ans d'ancienneté ET âge ≥ 52 ans.`\n        : `Calcul standard CCN 1909 (art. 13 + Avenant n°25).`\n    };\n  }\n\n  function renderInd() {\n    const r = computeInd(indState);\n    document.getElementById('ind-result').textContent = r.montant > 0 ? fmtEUR(r.montant) : '—';\n    document.getElementById('ind-result-sub').textContent = r.montant > 0\n      ? `Base : ${fmtEUR(indState.sal)} × ${indState.anc} ans${r.doublement ? ' × 2 (doublement)' : ''}`\n      : 'Ancienneté insuffisante (\u003C 8 mois)';\n    document.getElementById('ind-detail').innerHTML = [\n      `\u003Cp>\u003Cstrong>Tranche 1 (0–10 ans)\u003C\u002Fstrong> : ${fmtEUR(r.t1 || 0)}\u003C\u002Fp>`,\n      `\u003Cp>\u003Cstrong>Tranche 2 (>10 ans)\u003C\u002Fstrong> : ${fmtEUR(r.t2 || 0)}\u003C\u002Fp>`,\n      r.doublement ? `\u003Cp>\u003Cstrong>Doublement CCN\u003C\u002Fstrong> : ≥ 20 ans + âge ≥ 52 ans → indemnité × 2\u003C\u002Fp>` : '',\n      `\u003Cp style=\"margin-top:0.3rem;font-style:italic;color:var(--muted);\">${r.details}\u003C\u002Fp>`\n    ].join('');\n  }\n\n  document.getElementById('ind-sal').addEventListener('input', e => {\n    indState.sal = +e.target.value;\n    document.getElementById('ind-sal-val').textContent = fmtEUR(indState.sal);\n    renderInd();\n  });\n  document.getElementById('ind-anc').addEventListener('input', e => {\n    indState.anc = +e.target.value;\n    document.getElementById('ind-anc-val').textContent = indState.anc + ' an' + (indState.anc > 1 ? 's' : '');\n    renderInd();\n  });\n  document.getElementById('ind-age').addEventListener('input', e => {\n    indState.age = +e.target.value;\n    document.getElementById('ind-age-val').textContent = indState.age + ' ans';\n    renderInd();\n  });\n  setupPills('ind-motif-pills', v => { indState.motif = v; renderInd(); });\n  renderInd();\n\n  \u002F* ═══════════════════════════════════════════════\n     PANEL 2 — PRÉAVIS\n  ═══════════════════════════════════════════════ *\u002F\n  const preState = { cat: 'employe', anc: 1, sens: 'licenciement' };\n\n  function computePre(s) {\n    if (s.sens === 'licenciement') {\n      if (s.cat === 'cadre') return { duree: '3 mois', details: 'Cadre — licenciement : 3 mois quelle que soit l\\'ancienneté.' };\n      if (s.cat === 'am') return { duree: '2 mois', details: 'Agent de maîtrise — licenciement : 2 mois quelle que soit l\\'ancienneté.' };\n      \u002F\u002F Employé\n      if (s.anc \u003C 2) return { duree: '1 mois', details: 'Employé — licenciement, \u003C 2 ans d\\'ancienneté : 1 mois.' };\n      return { duree: '2 mois', details: 'Employé — licenciement, ≥ 2 ans d\\'ancienneté : 2 mois.' };\n    } else {\n      \u002F\u002F Démission\n      if (s.cat === 'cadre') return { duree: '3 mois', details: 'Cadre — démission : 3 mois.' };\n      if (s.cat === 'am') return { duree: '2 mois', details: 'Agent de maîtrise — démission : 2 mois.' };\n      if (s.anc \u003C 2) return { duree: '1 mois', details: 'Employé — démission, \u003C 2 ans : 1 mois.' };\n      return { duree: '2 mois', details: 'Employé avec responsabilités — démission, ≥ 2 ans : 2 mois.' };\n    }\n  }\n\n  function renderPre() {\n    const r = computePre(preState);\n    document.getElementById('pre-result').textContent = r.duree;\n    document.getElementById('pre-result-sub').textContent = r.details;\n    document.getElementById('pre-detail').innerHTML =\n      `\u003Cp>${r.details}\u003C\u002Fp>` +\n      (preState.sens === 'licenciement'\n        ? `\u003Cp style=\"margin-top:0.3rem;\">\u003Cstrong>Recherche d'emploi&nbsp;:\u003C\u002Fstrong> 2 demi-journées par semaine autorisées (accord mutuel) jusqu'à la fin du préavis.\u003C\u002Fp>`\n        : '');\n  }\n\n  document.getElementById('pre-anc').addEventListener('input', e => {\n    preState.anc = +e.target.value;\n    document.getElementById('pre-anc-val').textContent = preState.anc + ' an' + (preState.anc > 1 ? 's' : '');\n    renderPre();\n  });\n  setupPills('pre-cat-pills', v => { preState.cat = v; renderPre(); });\n  setupPills('pre-sens-pills', v => { preState.sens = v; renderPre(); });\n  renderPre();\n\n  \u002F* ═══════════════════════════════════════════════\n     PANEL 3 — GRILLE SALAIRES\n  ═══════════════════════════════════════════════ *\u002F\n  const POINT_VALUE = 1.2546; \u002F\u002F Avenant n°45, 01\u002F03\u002F2025\n  const SMIC_2025 = 1801.80;\n  const salState = { coef: 1470, heures: 35 };\n\n  function computeSal(s) {\n    const base35 = s.coef * POINT_VALUE;\n    const adjusted = base35 * (s.heures \u002F 35);\n    return { base35, adjusted, aboveSmic: adjusted - SMIC_2025 };\n  }\n\n  function renderSal() {\n    const r = computeSal(salState);\n    document.getElementById('sal-result').textContent = fmtEUR(r.adjusted);\n    document.getElementById('sal-result-sub').textContent =\n      `Base 35h : ${fmtEUR(r.base35)} | Point : ${POINT_VALUE.toFixed(4)} €`;\n    document.getElementById('sal-detail').innerHTML =\n      `\u003Cp>\u003Cstrong>Coefficient\u003C\u002Fstrong> : ${salState.coef}\u003C\u002Fp>` +\n      `\u003Cp>\u003Cstrong>Valeur du point\u003C\u002Fstrong> : ${POINT_VALUE.toFixed(4)} € (Avenant n°45 — mars 2025)\u003C\u002Fp>` +\n      `\u003Cp>\u003Cstrong>Base 35h\u002Fsemaine\u003C\u002Fstrong> : ${fmtEUR(r.base35)}\u003C\u002Fp>` +\n      `\u003Cp>\u003Cstrong>Ajusté à ${salState.heures}h\u003C\u002Fstrong> : ${fmtEUR(r.adjusted)}\u003C\u002Fp>` +\n      `\u003Cp>\u003Cstrong>Écart vs SMIC 2025\u003C\u002Fstrong> : +${fmtEUR(Math.max(0, r.aboveSmic))}\u003C\u002Fp>`;\n  }\n\n  document.getElementById('sal-niveau').addEventListener('change', e => {\n    salState.coef = +e.target.value;\n    renderSal();\n  });\n  document.getElementById('sal-h').addEventListener('input', e => {\n    salState.heures = +e.target.value;\n    document.getElementById('sal-h-val').textContent = salState.heures + ' h';\n    renderSal();\n  });\n  renderSal();\n\n  \u002F* ═══════════════════════════════════════════════\n     PANEL 4 — PRIME ANNUELLE\n  ═══════════════════════════════════════════════ *\u002F\n  const prState = { sal: 2500, anc: 5, type: 'global' };\n\n  function computePrimeAnciennete(anc) {\n    if (anc \u003C 3) return 0;\n    \u002F\u002F 3% à 3 ans, +1% tous les 3 ans, max 15%\n    const paliers = Math.floor(anc \u002F 3);\n    return Math.min(3 + (paliers - 1), 15);\n  }\n\n  function computePr(s) {\n    const gratif = s.sal * 12 * 0.175;\n    const ancPct = computePrimeAnciennete(s.anc);\n    const ancMontant = s.sal * 12 * (ancPct \u002F 100);\n    return { gratif, ancPct, ancMontant, total: gratif + ancMontant };\n  }\n\n  function renderPr() {\n    const r = computePr(prState);\n    let montant, sub;\n    if (prState.type === 'global') {\n      montant = r.total;\n      sub = `Gratification ${fmtEUR(r.gratif)} + Prime ancienneté ${fmtEUR(r.ancMontant)} (${r.ancPct}%)`;\n    } else if (prState.type === 'gratif') {\n      montant = r.gratif;\n      sub = `17,5 % × ${fmtEUR(prState.sal * 12)}`;\n    } else {\n      montant = r.ancMontant;\n      sub = `${r.ancPct} % du salaire annuel`;\n    }\n    document.getElementById('pr-result').textContent = fmtEUR(montant);\n    document.getElementById('pr-result-sub').textContent = sub;\n    document.getElementById('pr-detail').innerHTML =\n      `\u003Cp>\u003Cstrong>Gratification annuelle\u003C\u002Fstrong> : 17,5 % × salaire annuel = ${fmtEUR(r.gratif)} (versée si ≥ 6 mois ancienneté)\u003C\u002Fp>` +\n      `\u003Cp>\u003Cstrong>Prime d'ancienneté\u003C\u002Fstrong> : ${r.ancPct} % = ${fmtEUR(r.ancMontant)}\u003C\u002Fp>` +\n      `\u003Cp style=\"margin-top:0.3rem;font-style:italic;color:var(--muted);\">Grille ancienneté : 3 % dès 3 ans, +1 % tous les 3 ans, plafond 15 % à 30 ans.\u003C\u002Fp>`;\n  }\n\n  document.getElementById('pr-sal').addEventListener('input', e => {\n    prState.sal = +e.target.value;\n    document.getElementById('pr-sal-val').textContent = fmtEUR(prState.sal);\n    renderPr();\n  });\n  document.getElementById('pr-anc').addEventListener('input', e => {\n    prState.anc = +e.target.value;\n    document.getElementById('pr-anc-val').textContent = prState.anc + ' an' + (prState.anc > 1 ? 's' : '');\n    renderPr();\n  });\n  setupPills('pr-type-pills', v => { prState.type = v; renderPr(); });\n  renderPr();\n\n  \u002F* ═══════════════════════════════════════════════\n     PANEL 5 — HEURES SUPP\n  ═══════════════════════════════════════════════ *\u002F\n  const hsState = { taux: 14.40, h1: 4, h2: 0, dimanche: false };\n\n  function computeHs(s) {\n    const maj1 = s.h1 * s.taux * 1.30; \u002F\u002F +30% CCN\n    const maj2 = s.h2 * s.taux * 1.50; \u002F\u002F +50%\n    let dimSupplement = 0;\n    if (s.dimanche) {\n      \u002F\u002F +50% supplémentaire sur le taux normal pour les heures du dimanche\n      dimSupplement = (s.h1 + s.h2) * s.taux * 0.50;\n    }\n    const total = maj1 + maj2 + dimSupplement;\n    return { maj1, maj2, dimSupplement, total };\n  }\n\n  function renderHs() {\n    const r = computeHs(hsState);\n    document.getElementById('hs-result').textContent = fmtEUR(r.total);\n    document.getElementById('hs-result-sub').textContent =\n      `Taux horaire : ${hsState.taux.toFixed(2)} € | ${hsState.h1 + hsState.h2} h supp.`;\n    document.getElementById('hs-detail').innerHTML =\n      `\u003Cp>\u003Cstrong>Tranche 1 (${hsState.h1} h à +30 %)\u003C\u002Fstrong> : ${fmtEUR(r.maj1)}\u003C\u002Fp>` +\n      `\u003Cp>\u003Cstrong>Tranche 2 (${hsState.h2} h à +50 %)\u003C\u002Fstrong> : ${fmtEUR(r.maj2)}\u003C\u002Fp>` +\n      (hsState.dimanche ? `\u003Cp>\u003Cstrong>Supplément dimanche (+50 %)\u003C\u002Fstrong> : ${fmtEUR(r.dimSupplement)}\u003C\u002Fp>` : '') +\n      `\u003Cp style=\"margin-top:0.3rem;font-style:italic;color:var(--muted);\">Contingent annuel CCN : 130 h (vs 220 h en l'absence de CCN). Au-delà : contrepartie obligatoire en repos.\u003C\u002Fp>`;\n  }\n\n  document.getElementById('hs-taux').addEventListener('input', e => {\n    hsState.taux = +e.target.value;\n    document.getElementById('hs-taux-val').textContent = (+e.target.value).toFixed(2) + ' €';\n    renderHs();\n  });\n  document.getElementById('hs-h1').addEventListener('input', e => {\n    hsState.h1 = +e.target.value;\n    document.getElementById('hs-h1-val').textContent = e.target.value + ' h';\n    renderHs();\n  });\n  document.getElementById('hs-h2').addEventListener('input', e => {\n    hsState.h2 = +e.target.value;\n    document.getElementById('hs-h2-val').textContent = e.target.value + ' h';\n    renderHs();\n  });\n  document.getElementById('hs-dimanche').addEventListener('change', e => {\n    hsState.dimanche = e.target.checked;\n    renderHs();\n  });\n  renderHs();\n\n  \u002F* ═══════════════════════════════════════════════\n     IFRAME RESIZE\n  ═══════════════════════════════════════════════ *\u002F\n  const ro = new ResizeObserver(() => {\n    const h = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight);\n    parent.postMessage({ type: 'resize', height: h }, '*');\n  });\n  ro.observe(document.documentElement);\n\n  \u002F* Init icons *\u002F\n  if (window.lucide) lucide.createIcons();\n})();\n\u003C\u002Fscript>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n","generated","juridique","consumer","both","https:\u002F\u002Fpub-bdebbd2dad294475a2da0eb657815b6b.r2.dev\u002Ftools\u002Fccn-organismes-de-tourisme-589eb63dad.webp",[]]