[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"footer-root-categories-fr-FR":3,"tool-content-ccn-camping-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-camping","CCN du camping — calculateur complet","Calculateur CCN Industries du Camping IDCC 1618 | Expert Zoom","Outil interactif couvrant l'indemnité de licenciement, le préavis, la grille salariale, la prime d'ancienneté et les congés de la CCN Industries du Camping (IDCC 1618).","Ce calculateur couvre les 5 principales déviations de la convention collective des Industries du Camping (IDCC 1618) par rapport au code du travail : indemnité de licenciement (formule par tranches 3\u002F15→4\u002F15→5\u002F15 pour ouvriers\u002FETDAM), préavis structuré (1-2 mois selon statut, 3 mois cadres), grille salariale par coefficient (128 à 270), prime d'ancienneté obligatoire (3% à 15%), et jours de congés supplémentaires à partir de 20 ans d'ancienneté.",[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 Industries du Camping — IDCC 1618","WebApplication",{"name":94,"@type":95,"identifier":96},"Convention collective nationale des Industries du Camping","Thing","IDCC 1618",{"name":98,"@type":99},"Expert-Zoom","Organization","https:\u002F\u002Fschema.org",{"url":102,"@type":103},"\u002Ffr\u002Fmagazine\u002Fjuridique\u002Fles-conventions-collectives-en-france","Article","fr","Outil interactif couvrant l'indemnité de licenciement, le préavis, la grille salariale, la prime d'ancienneté et les congés de la convention collective des Industries du Camping (IDCC 1618, brochure n°3176).","All","FinanceApplication",true,[110,113,116,119,122,125,128,131],{"a":111,"q":112},"La CCN Industries du Camping (IDCC 1618) prévoit une formule par tranches : pour les ouvriers et ETDAM, 3\u002F15 de mois par année pour les 5 premières années, 4\u002F15 pour les années 6 à 10, et 5\u002F15 au-delà de 10 ans. Pour les cadres, 2\u002F10 de mois par année jusqu'à 8 ans, 3\u002F10 de 9 à 13 ans, et 4\u002F10 au-delà de 13 ans. Le montant retenu est toujours le plus favorable entre la convention et le légal (L1234-9 : 1\u002F4 mois ≤ 10 ans + 1\u002F3 mois > 10 ans).","Comment est calculée l'indemnité de licenciement dans la convention collective des Industries du Camping ?",{"a":114,"q":115},"La convention collective des Industries du Camping fixe les préavis suivants : 1 mois pour les ouvriers et ETDAM (coeff \u003C 221) avec moins de 2 ans d'ancienneté, 2 mois au-delà de 2 ans d'ancienneté, et 3 mois pour les cadres quelle que soit leur ancienneté. Le salarié dispose également de 50 heures pour rechercher un nouvel emploi pendant le préavis.","Quelle est la durée du préavis dans la CCN du Camping (IDCC 1618) ?",{"a":117,"q":118},"Oui. La CCN Industries du Camping publie une grille de salaires minima par coefficient hiérarchique (de 128 à 270), applicable aux ouvriers, ETDAM et cadres. Les salaires minima conventionnels s'échelonnent d'environ 1 521 € à 2 187 € brut mensuel pour 35h. Tout coefficient inférieur au SMIC (1 801,80 € en 2026) est automatiquement aligné sur le SMIC.","Existe-t-il une grille de salaires dans la convention du Camping (IDCC 1618) ?",{"a":120,"q":121},"Oui. La convention prévoit une prime d'ancienneté obligatoire pour les ouvriers et ETDAM, calculée en pourcentage du salaire mensuel brut de base : 3% à partir de 3 ans d'ancienneté, puis +3% tous les 3 ans supplémentaires, avec un plafond de 15% à partir de 15 ans d'ancienneté. Cette prime doit figurer sur le bulletin de paie de façon distincte. Elle ne s'applique pas aux cadres.","Y a-t-il une prime d'ancienneté dans la CCN Industries du Camping ?",{"a":123,"q":124},"Non. La convention collective des Industries du Camping (IDCC 1618) ne prévoit pas de 13e mois obligatoire. En revanche, elle institue une prime d'ancienneté représentant 3% à 15% du salaire mensuel selon l'ancienneté du salarié.","La CCN du Camping prévoit-elle un 13e mois ?",{"a":126,"q":127},"La CCN Industries du Camping accorde les 30 jours ouvrables légaux (L3141-3) auxquels s'ajoutent des jours supplémentaires liés à l'ancienneté : 1 jour supplémentaire à partir de 20 ans d'ancienneté, et 2 jours supplémentaires à partir de 25 ans d'ancienneté.","Les congés payés sont-ils différents dans la CCN du Camping par rapport à la loi ?",{"a":129,"q":130},"La convention collective des Industries du Camping applique les taux légaux : majoration de 25% pour les 8 premières heures supplémentaires (heures 36 à 43), et 50% au-delà (à partir de la 44e heure). Le contingent annuel d'heures supplémentaires est fixé à 110 heures (réduit à 70 heures en cas de modulation du temps de travail).","Quels sont les taux de majoration pour les heures supplémentaires dans la CCN du Camping ?",{"a":132,"q":133},"La Convention Collective Nationale des Industries du Camping (IDCC 1618, brochure n°3176) régit les conditions de travail des salariés des entreprises dont l'activité principale est la fabrication d'articles de camping : tentes, articles de sport en tissu, sacs à dos de sport et sacs de sport (hors cuir). Ne pas confondre avec la CCN de l'hôtellerie de plein air (IDCC 1631) qui concerne les campings comme lieux d'hébergement.","Qu'est-ce que la CCN Industries du Camping (IDCC 1618) ?","\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 Industries du Camping — IDCC 1618\u003C\u002Ftitle>\n  \u003Cscript src=\"https:\u002F\u002Funpkg.com\u002Flucide@latest\u002Fdist\u002Fumd\u002Flucide.min.js\">\u003C\u002Fscript>\n  \u003Cstyle>\n    *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n    :root {\n      --bg: #fafaf9;\n      --surface: #ffffff;\n      --border: #e7e5e4;\n      --accent: #2563eb;\n      --accent-light: #eff6ff;\n      --accent-dark: #1d4ed8;\n      --text: #1c1917;\n      --text-muted: #78716c;\n      --success-bg: #f0fdf4;\n      --success-border: #86efac;\n      --success-text: #15803d;\n      --info-bg: #eff6ff;\n      --info-border: #93c5fd;\n      --info-text: #1e40af;\n      --radius: 0.75rem;\n      --radius-sm: 0.5rem;\n    }\n    body { background: var(--bg); font-family: system-ui, -apple-system, sans-serif; color: var(--text); line-height: 1.5; font-size: 15px; }\n    .tool-root { max-width: 680px; margin: 0 auto; padding: 1.25rem 1rem 2rem; }\n    .tool-header { margin-bottom: 1.25rem; }\n    .tool-header h1 { font-size: 1.2rem; font-weight: 700; color: var(--text); }\n    .idcc-badge { display: inline-block; background: var(--accent); color: #fff; font-size: 0.7rem; font-weight: 600; padding: 0.2rem 0.55rem; border-radius: 9999px; margin-left: 0.5rem; vertical-align: middle; letter-spacing: 0.03em; }\n    .tool-header p { font-size: 0.85rem; color: var(--text-muted); margin-top: 0.35rem; }\n\n    \u002F* Tabs *\u002F\n    .tabs-nav { display: flex; gap: 0.15rem; border-bottom: 2px solid var(--border); margin-bottom: 1.25rem; overflow-x: auto; -webkit-overflow-scrolling: touch; padding-bottom: 0; }\n    .tab-btn {\n      display: flex; align-items: center; gap: 0.4rem;\n      padding: 0.6rem 0.9rem; font-size: 0.82rem; font-weight: 500;\n      color: var(--text-muted); background: none; border: none; cursor: pointer;\n      border-bottom: 2px solid transparent; margin-bottom: -2px;\n      white-space: nowrap; border-radius: var(--radius-sm) var(--radius-sm) 0 0;\n      transition: 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); background: var(--accent-light); font-weight: 600; }\n    .tab-btn svg { width: 15px; height: 15px; flex-shrink: 0; }\n    .panel { display: none; }\n    .panel.active { display: block; }\n\n    \u002F* Rule callout *\u002F\n    .rule-callout {\n      display: flex; gap: 0.65rem; align-items: flex-start;\n      background: var(--info-bg); border: 1px solid var(--info-border);\n      color: var(--info-text); border-radius: var(--radius-sm);\n      padding: 0.75rem 1rem; margin-bottom: 1.1rem; font-size: 0.84rem;\n    }\n    .rule-callout svg { width: 16px; height: 16px; flex-shrink: 0; margin-top: 0.1rem; }\n\n    \u002F* Cards *\u002F\n    .card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); padding: 1.1rem 1.25rem; margin-bottom: 1rem; }\n\n    \u002F* Form elements *\u002F\n    .field { margin-bottom: 1rem; }\n    .field:last-child { margin-bottom: 0; }\n    .field label { display: flex; justify-content: space-between; align-items: center; font-size: 0.83rem; font-weight: 500; color: var(--text); margin-bottom: 0.4rem; }\n    .field label span.val { font-weight: 600; color: var(--accent); font-variant-numeric: tabular-nums; }\n    input[type=range] { width: 100%; accent-color: var(--accent); cursor: pointer; }\n    select {\n      width: 100%; padding: 0.5rem 0.75rem; border: 1px solid var(--border);\n      border-radius: var(--radius-sm); background: var(--surface); font-size: 0.85rem;\n      color: var(--text); cursor: pointer; appearance: none;\n      background-image: url(\"data:image\u002Fsvg+xml,%3Csvg xmlns='http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg' width='12' height='12' 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; background-position: right 0.7rem center;\n      padding-right: 2rem;\n    }\n    select:focus { outline: 2px solid var(--accent); outline-offset: 2px; }\n\n    \u002F* Pills *\u002F\n    .pills { display: flex; flex-wrap: wrap; gap: 0.4rem; }\n    .pill {\n      padding: 0.35rem 0.8rem; border: 1.5px solid var(--border);\n      border-radius: 9999px; font-size: 0.8rem; font-weight: 500;\n      cursor: pointer; background: var(--surface); color: var(--text-muted);\n      transition: all 0.15s;\n    }\n    .pill:hover { border-color: var(--accent); color: var(--accent); }\n    .pill.active { background: var(--accent); border-color: var(--accent); color: #fff; }\n\n    \u002F* Toggle *\u002F\n    .toggle-row { display: flex; align-items: center; gap: 0.65rem; }\n    .toggle { position: relative; width: 40px; height: 22px; flex-shrink: 0; }\n    .toggle input { opacity: 0; width: 0; height: 0; }\n    .toggle-slider {\n      position: absolute; cursor: pointer; inset: 0;\n      background: #d6d3d1; border-radius: 9999px; transition: 0.2s;\n    }\n    .toggle-slider::before {\n      content: ''; position: absolute; width: 16px; height: 16px;\n      background: #fff; border-radius: 50%; left: 3px; top: 3px; transition: 0.2s;\n    }\n    .toggle input:checked + .toggle-slider { background: var(--accent); }\n    .toggle input:checked + .toggle-slider::before { transform: translateX(18px); }\n    .toggle-label { font-size: 0.83rem; font-weight: 500; }\n\n    \u002F* Result *\u002F\n    .result-card {\n      background: var(--success-bg); border: 1.5px solid var(--success-border);\n      border-radius: var(--radius); padding: 1.1rem 1.25rem;\n      display: flex; align-items: center; gap: 1rem; margin-top: 1rem;\n    }\n    .result-icon { width: 36px; height: 36px; background: var(--success-text); border-radius: 50%; display: flex; align-items: center; justify-content: center; flex-shrink: 0; }\n    .result-icon svg { width: 18px; height: 18px; color: #fff; }\n    .result-amount { font-size: 1.6rem; font-weight: 700; color: var(--success-text); font-variant-numeric: tabular-nums; }\n    .result-label { font-size: 0.78rem; color: var(--text-muted); margin-top: 0.1rem; }\n\n    \u002F* Comparison row *\u002F\n    .compare-row { display: flex; gap: 0.5rem; margin-top: 0.6rem; flex-wrap: wrap; }\n    .compare-chip {\n      font-size: 0.74rem; padding: 0.2rem 0.6rem; border-radius: 9999px;\n      font-variant-numeric: tabular-nums;\n    }\n    .chip-ccn { background: #dcfce7; color: #15803d; }\n    .chip-legal { background: #fef9c3; color: #854d0e; }\n\n    \u002F* Disclaimer *\u002F\n    .disclaimer { font-size: 0.75rem; color: var(--text-muted); margin-top: 1.25rem; line-height: 1.6; border-top: 1px solid var(--border); padding-top: 0.85rem; }\n    .disclaimer a { color: var(--accent); text-decoration: none; }\n    .disclaimer a:hover { text-decoration: underline; }\n\n    \u002F* Grid layout for two columns on wider screens *\u002F\n    @media (min-width: 480px) {\n      .two-col { display: grid; grid-template-columns: 1fr 1fr; gap: 0.85rem; }\n      .two-col .field { margin-bottom: 0; }\n    }\n\n    .section-title { font-size: 0.78rem; font-weight: 600; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.06em; margin-bottom: 0.65rem; }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\u003Cbody>\n\u003C!-- CCN IDCC 1618 — deviations\n     indemnite: L1234-9 (1\u002F4 → 1\u002F3) → ouvriers\u002FETDAM: 3\u002F15 → 4\u002F15 → 5\u002F15 mois\u002Fan (source: art. CCN camping, brochure 3176)\n     preavis: L1234-1 → 1-2 mois ouvriers\u002FETDAM, 3 mois cadres (source: art. CCN camping)\n     salaire-min: grille coefficients 128-270 (source: avenants salaires CCN camping)\n     prime-anciennete: 3%-15% par paliers d'ancienneté (source: art. CCN camping)\n     conges: L3141-3 (30j) → +1j à 20 ans, +2j à 25 ans (source: art. CCN camping) -->\n\u003Cmain class=\"tool-root\">\n  \u003Cdiv class=\"tool-header\">\n    \u003Ch1>Convention collective Industries du Camping \u003Cspan class=\"idcc-badge\">IDCC 1618\u003C\u002Fspan>\u003C\u002Fh1>\n    \u003Cp>Calculateur interactif : indemnités, préavis, grille salariale, ancienneté et congés\u003C\u002Fp>\n  \u003C\u002Fdiv>\n\n  \u003Cnav class=\"tabs-nav\" role=\"tablist\">\n    \u003Cbutton class=\"tab-btn\" data-tab=\"indemnite\" role=\"tab\">\n      \u003Ci data-lucide=\"calculator\">\u003C\u002Fi> Indemnité\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"preavis\" role=\"tab\">\n      \u003Ci data-lucide=\"clock\">\u003C\u002Fi> Préavis\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"salaire-min\" role=\"tab\">\n      \u003Ci data-lucide=\"bar-chart-2\">\u003C\u002Fi> Grille salariale\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"anciennete\" role=\"tab\">\n      \u003Ci data-lucide=\"trending-up\">\u003C\u002Fi> Prime d'ancienneté\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"conges\" role=\"tab\">\n      \u003Ci data-lucide=\"calendar\">\u003C\u002Fi> Congés\n    \u003C\u002Fbutton>\n  \u003C\u002Fnav>\n\n  \u003C!-- ═══════════════════════════════════════════════════════════ -->\n  \u003C!-- TAB: INDEMNITÉ DE LICENCIEMENT                             -->\n  \u003C!-- ═══════════════════════════════════════════════════════════ -->\n  \u003Cdiv class=\"panel\" data-panel=\"indemnite\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cp>La CCN Industries du Camping prévoit une formule par tranches différenciée selon le statut : \u003Cstrong>3\u002F15 → 4\u002F15 → 5\u002F15 de mois par année\u003C\u002Fstrong> pour les ouvriers\u002FETDAM, et \u003Cstrong>2\u002F10 → 3\u002F10 → 4\u002F10\u003C\u002Fstrong> pour les cadres. Ces tranches s'écartent du code du travail (L1234-9 : 1\u002F4 mois ≤ 10 ans + 1\u002F3 mois > 10 ans).\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"card\">\n      \u003Cdiv class=\"section-title\">Votre situation\u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Statut \u003Cspan class=\"val\" id=\"ind-statut-val\">Ouvrier \u002F ETDAM\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"ind-statut-pills\">\n          \u003Cbutton class=\"pill active\" data-val=\"ouvrier\">Ouvrier \u002F ETDAM\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"cadre\">Cadre\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Salaire brut mensuel de référence \u003Cspan class=\"val\" id=\"ind-salaire-val\">2 500 €\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"ind-salaire\" min=\"1400\" 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>Motif du licenciement\u003C\u002Flabel>\n        \u003Cselect id=\"ind-motif\">\n          \u003Coption value=\"personnel\">Motif personnel \u002F insuffisance professionnelle\u003C\u002Foption>\n          \u003Coption value=\"economique\">Motif économique\u003C\u002Foption>\n        \u003C\u002Fselect>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card\" id=\"ind-result\">\n      \u003Cdiv class=\"result-icon\">\u003Ci data-lucide=\"euro\">\u003C\u002Fi>\u003C\u002Fdiv>\n      \u003Cdiv>\n        \u003Cdiv class=\"result-amount\" id=\"ind-amount\">—\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-label\">Indemnité conventionnelle brute\u003C\u002Fdiv>\n        \u003Cdiv class=\"compare-row\">\n          \u003Cspan class=\"compare-chip chip-ccn\" id=\"ind-ccn-chip\">\u003C\u002Fspan>\n          \u003Cspan class=\"compare-chip chip-legal\" id=\"ind-legal-chip\">\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ═══════════════════════════════════════════════════════════ -->\n  \u003C!-- TAB: PRÉAVIS                                               -->\n  \u003C!-- ═══════════════════════════════════════════════════════════ -->\n  \u003Cdiv class=\"panel\" data-panel=\"preavis\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cp>La CCN établit des durées de préavis structurées par statut et ancienneté : \u003Cstrong>1 à 2 mois pour les ouvriers\u002FETDAM, 3 mois pour les cadres\u003C\u002Fstrong>, aussi bien en cas de licenciement que de démission. Pendant le préavis, les salariés bénéficient de \u003Cstrong>50 heures\u003C\u002Fstrong> pour rechercher un emploi.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"card\">\n      \u003Cdiv class=\"section-title\">Votre situation\u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Statut\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"prev-statut-pills\">\n          \u003Cbutton class=\"pill active\" data-val=\"ouvrier\">Ouvrier \u002F ETDAM &lt; coeff 221\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"etdam-senior\">ETDAM ≥ coeff 221\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"cadre\">Cadre\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Ancienneté \u003Cspan class=\"val\" id=\"prev-anc-val\">3 ans\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"prev-anc\" min=\"0\" max=\"30\" step=\"1\" value=\"3\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Type\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"prev-type-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    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card\" id=\"prev-result\">\n      \u003Cdiv class=\"result-icon\">\u003Ci data-lucide=\"clock\">\u003C\u002Fi>\u003C\u002Fdiv>\n      \u003Cdiv>\n        \u003Cdiv class=\"result-amount\" id=\"prev-amount\">—\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-label\" id=\"prev-label\">Durée du préavis\u003C\u002Fdiv>\n        \u003Cdiv class=\"compare-row\">\n          \u003Cspan class=\"compare-chip chip-ccn\" id=\"prev-detail\">\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ═══════════════════════════════════════════════════════════ -->\n  \u003C!-- TAB: GRILLE SALARIALE                                      -->\n  \u003C!-- ═══════════════════════════════════════════════════════════ -->\n  \u003Cdiv class=\"panel\" data-panel=\"salaire-min\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cp>La CCN Industries du Camping publie une \u003Cstrong>grille de salaires minima par coefficient\u003C\u002Fstrong> (128 à 270), indépendante du SMIC. Le salaire mensuel brut minimal conventionnel est applicable à tout salarié relevant de la convention. Les minima inférieurs au SMIC sont automatiquement portés au niveau légal.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"card\">\n      \u003Cdiv class=\"section-title\">Paramètres\u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Catégorie\u003C\u002Flabel>\n        \u003Cselect id=\"sal-categorie\">\n          \u003Coption value=\"ouvrier\">Ouvrier\u003C\u002Foption>\n          \u003Coption value=\"etdam\">ETDAM (Employé, Technicien, Dessinateur, Agent de Maîtrise)\u003C\u002Foption>\n          \u003Coption value=\"cadre\">Cadre\u003C\u002Foption>\n        \u003C\u002Fselect>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Coefficient hiérarchique\u003C\u002Flabel>\n        \u003Cselect id=\"sal-coeff\">\n          \u003Coption value=\"128\">128\u003C\u002Foption>\n          \u003Coption value=\"140\">140\u003C\u002Foption>\n          \u003Coption value=\"155\">155\u003C\u002Foption>\n          \u003Coption value=\"170\">170\u003C\u002Foption>\n          \u003Coption value=\"185\">185\u003C\u002Foption>\n          \u003Coption value=\"215\" selected>215\u003C\u002Foption>\n          \u003Coption value=\"240\">240\u003C\u002Foption>\n          \u003Coption value=\"255\">255\u003C\u002Foption>\n          \u003Coption value=\"270\">270\u003C\u002Foption>\n        \u003C\u002Fselect>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Durée hebdomadaire \u003Cspan class=\"val\" id=\"sal-heures-val\">35h\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"sal-heures\" min=\"24\" max=\"39\" step=\"1\" value=\"35\">\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card\" id=\"sal-result\">\n      \u003Cdiv class=\"result-icon\">\u003Ci data-lucide=\"banknote\">\u003C\u002Fi>\u003C\u002Fdiv>\n      \u003Cdiv>\n        \u003Cdiv class=\"result-amount\" id=\"sal-amount\">—\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-label\">Salaire brut mensuel minimum conventionnel\u003C\u002Fdiv>\n        \u003Cdiv class=\"compare-row\">\n          \u003Cspan class=\"compare-chip chip-ccn\" id=\"sal-coeff-chip\">\u003C\u002Fspan>\n          \u003Cspan class=\"compare-chip chip-legal\" id=\"sal-smic-chip\">\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ═══════════════════════════════════════════════════════════ -->\n  \u003C!-- TAB: PRIME D'ANCIENNETÉ                                    -->\n  \u003C!-- ═══════════════════════════════════════════════════════════ -->\n  \u003Cdiv class=\"panel\" data-panel=\"anciennete\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cp>La CCN instaure une \u003Cstrong>prime d'ancienneté obligatoire\u003C\u002Fstrong> pour les ouvriers et ETDAM, calculée en pourcentage du salaire mensuel brut : \u003Cstrong>+3% tous les 3 ans\u003C\u002Fstrong>, plafonnée à \u003Cstrong>+15% à 15 ans\u003C\u002Fstrong>. Cette prime doit figurer séparément sur le bulletin de salaire. Le code du travail ne prévoit aucune prime d'ancienneté légale.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"card\">\n      \u003Cdiv class=\"section-title\">Votre situation\u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Statut\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"anc-statut-pills\">\n          \u003Cbutton class=\"pill active\" data-val=\"ouvrier\">Ouvrier \u002F ETDAM\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"cadre\">Cadre (non applicable)\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Salaire brut mensuel de base \u003Cspan class=\"val\" id=\"anc-salaire-val\">2 000 €\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"anc-salaire\" min=\"1400\" max=\"6000\" step=\"50\" value=\"2000\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Ancienneté \u003Cspan class=\"val\" id=\"anc-annees-val\">6 ans\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"anc-annees\" min=\"0\" max=\"30\" step=\"1\" value=\"6\">\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card\" id=\"anc-result\">\n      \u003Cdiv class=\"result-icon\">\u003Ci data-lucide=\"trending-up\">\u003C\u002Fi>\u003C\u002Fdiv>\n      \u003Cdiv>\n        \u003Cdiv class=\"result-amount\" id=\"anc-amount\">—\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-label\" id=\"anc-label\">Prime d'ancienneté mensuelle brute\u003C\u002Fdiv>\n        \u003Cdiv class=\"compare-row\">\n          \u003Cspan class=\"compare-chip chip-ccn\" id=\"anc-taux-chip\">\u003C\u002Fspan>\n          \u003Cspan class=\"compare-chip chip-legal\" id=\"anc-legal-chip\">Code du travail : aucune prime légale\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ═══════════════════════════════════════════════════════════ -->\n  \u003C!-- TAB: CONGÉS                                                -->\n  \u003C!-- ═══════════════════════════════════════════════════════════ -->\n  \u003Cdiv class=\"panel\" data-panel=\"conges\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cp>La CCN accorde des \u003Cstrong>jours de congés supplémentaires liés à l'ancienneté\u003C\u002Fstrong> : +1 jour à partir de 20 ans d'ancienneté, +2 jours à partir de 25 ans. Ces jours s'ajoutent aux 30 jours ouvrables légaux (L3141-3).\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"card\">\n      \u003Cdiv class=\"section-title\">Votre situation\u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Ancienneté \u003Cspan class=\"val\" id=\"cong-anc-val\">12 ans\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"cong-anc\" min=\"0\" max=\"35\" step=\"1\" value=\"12\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Temps de travail\u003C\u002Flabel>\n        \u003Cdiv class=\"toggle-row\">\n          \u003Clabel class=\"toggle\">\n            \u003Cinput type=\"checkbox\" id=\"cong-partiel\">\n            \u003Cspan class=\"toggle-slider\">\u003C\u002Fspan>\n          \u003C\u002Flabel>\n          \u003Cspan class=\"toggle-label\">Temps partiel\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card\" id=\"cong-result\">\n      \u003Cdiv class=\"result-icon\">\u003Ci data-lucide=\"sun\">\u003C\u002Fi>\u003C\u002Fdiv>\n      \u003Cdiv>\n        \u003Cdiv class=\"result-amount\" id=\"cong-amount\">—\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-label\" id=\"cong-label\">Jours ouvrables de congés annuels\u003C\u002Fdiv>\n        \u003Cdiv class=\"compare-row\">\n          \u003Cspan class=\"compare-chip chip-ccn\" id=\"cong-ccn-chip\">\u003C\u002Fspan>\n          \u003Cspan class=\"compare-chip chip-legal\" id=\"cong-legal-chip\">Légal : 30 jours ouvrables\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003Cp class=\"disclaimer\">\n    Calcul indicatif basé sur la CCN Industries du Camping, IDCC 1618 (brochure n°3176).\n    Source&nbsp;: \u003Ca href=\"https:\u002F\u002Fwww.legifrance.gouv.fr\u002Fconv_coll\u002Fid\u002FKALICONT000005635255\" target=\"_blank\" rel=\"noopener\">Légifrance\u003C\u002Fa>.\n    Les montants sont fournis à titre indicatif et ne constituent pas un avis juridique.\n    Pour toute validation légale\n  \u003C\u002Fp>\n\u003C\u002Fmain>\n\n\u003Cscript>\n\u002F\u002F ── State ──────────────────────────────────────────────────────────────────\nconst fmtEur = new Intl.NumberFormat('fr-FR', { style: 'currency', currency: 'EUR', maximumFractionDigits: 0 });\nconst fmtEurDec = new Intl.NumberFormat('fr-FR', { style: 'currency', currency: 'EUR', minimumFractionDigits: 2, maximumFractionDigits: 2 });\n\n\u002F\u002F SMIC 2026 (base mensuel 35h)\nconst SMIC_MENSUEL = 1801.80;\n\n\u002F\u002F Grille salaires IDCC 1618 (coefficient → salaire mensuel brut 35h, base 2026)\nconst GRILLE = {\n  128: 1521.25, 140: 1562.00, 155: 1601.50, 170: 1650.00,\n  185: 1700.00, 215: 1785.00, 240: 1890.00, 255: 1970.00, 270: 2187.54\n};\n\n\u002F\u002F ── Tabs ───────────────────────────────────────────────────────────────────\nconst tabBtns = document.querySelectorAll('[data-tab]');\nconst panels  = document.querySelectorAll('[data-panel]');\n\nfunction activate(id) {\n  tabBtns.forEach(t => t.classList.toggle('active', t.dataset.tab === id));\n  panels.forEach(p  => p.classList.toggle('active', p.dataset.panel === id));\n  if (location.hash !== '#' + id) location.hash = id;\n  requestAnimationFrame(() => window.dispatchEvent(new Event('resize')));\n}\ntabBtns.forEach(t => t.addEventListener('click', () => activate(t.dataset.tab)));\nconst initHash = location.hash.slice(1);\nconst validTab = document.querySelector(`[data-tab=\"${initHash}\"]`) ? initHash : tabBtns[0].dataset.tab;\nactivate(validTab);\n\n\u002F\u002F ── Pill helpers ───────────────────────────────────────────────────────────\nfunction initPills(containerId, onChange) {\n  const container = document.getElementById(containerId);\n  container.querySelectorAll('.pill').forEach(pill => {\n    pill.addEventListener('click', () => {\n      container.querySelectorAll('.pill').forEach(p => p.classList.remove('active'));\n      pill.classList.add('active');\n      onChange(pill.dataset.val);\n    });\n  });\n  return () => container.querySelector('.pill.active')?.dataset.val;\n}\n\nfunction getPillVal(containerId) {\n  return document.getElementById(containerId).querySelector('.pill.active')?.dataset.val;\n}\n\n\u002F\u002F ── ResizeObserver ─────────────────────────────────────────────────────────\nconst ro = new ResizeObserver(() => {\n  const h = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight);\n  parent.postMessage({ type: 'resize', height: h }, '*');\n});\nro.observe(document.documentElement);\n\n\u002F\u002F ════════════════════════════════════════════════════════════════════════════\n\u002F\u002F TAB 1: INDEMNITÉ DE LICENCIEMENT\n\u002F\u002F ════════════════════════════════════════════════════════════════════════════\nconst indSalaire = document.getElementById('ind-salaire');\nconst indAnc     = document.getElementById('ind-anc');\nconst indMotif   = document.getElementById('ind-motif');\n\nlet indStatut = 'ouvrier';\ninitPills('ind-statut-pills', v => { indStatut = v; computeInd(); });\n\nfunction computeInd() {\n  const salaire = +indSalaire.value;\n  const annees  = +indAnc.value;\n\n  document.getElementById('ind-salaire-val').textContent = fmtEur.format(salaire);\n  document.getElementById('ind-anc-val').textContent = annees + ' an' + (annees > 1 ? 's' : '');\n\n  \u002F\u002F CCN formula\n  let ccn = 0;\n  if (indStatut === 'ouvrier') {\n    \u002F\u002F 3\u002F15 pour 1-5 ans, 4\u002F15 pour 6-10 ans, 5\u002F15 au-delà\n    const t1 = Math.min(annees, 5);\n    const t2 = Math.max(0, Math.min(annees - 5, 5));\n    const t3 = Math.max(0, annees - 10);\n    ccn = salaire * ((3\u002F15) * t1 + (4\u002F15) * t2 + (5\u002F15) * t3);\n  } else {\n    \u002F\u002F 2\u002F10 pour 1-8 ans, 3\u002F10 pour 9-13 ans, 4\u002F10 au-delà\n    const t1 = Math.min(annees, 8);\n    const t2 = Math.max(0, Math.min(annees - 8, 5));\n    const t3 = Math.max(0, annees - 13);\n    ccn = salaire * ((2\u002F10) * t1 + (3\u002F10) * t2 + (4\u002F10) * t3);\n  }\n\n  \u002F\u002F Legal formula (L1234-9)\n  const legal = salaire * ((1\u002F4) * Math.min(annees, 10) + (1\u002F3) * Math.max(0, annees - 10));\n\n  \u002F\u002F Applicable = max(ccn, legal)\n  const applicable = Math.max(ccn, legal);\n\n  document.getElementById('ind-amount').textContent = fmtEurDec.format(applicable);\n  document.getElementById('ind-ccn-chip').textContent = 'CCN : ' + fmtEurDec.format(ccn);\n  document.getElementById('ind-legal-chip').textContent = 'Légal L1234-9 : ' + fmtEurDec.format(legal);\n}\n\nindSalaire.addEventListener('input', computeInd);\nindAnc.addEventListener('input', computeInd);\nindMotif.addEventListener('change', computeInd);\ncomputeInd();\n\n\u002F\u002F ════════════════════════════════════════════════════════════════════════════\n\u002F\u002F TAB 2: PRÉAVIS\n\u002F\u002F ════════════════════════════════════════════════════════════════════════════\nconst prevAnc = document.getElementById('prev-anc');\nlet prevStatut = 'ouvrier';\nlet prevType   = 'licenciement';\ninitPills('prev-statut-pills', v => { prevStatut = v; computePrev(); });\ninitPills('prev-type-pills',   v => { prevType   = v; computePrev(); });\n\nfunction computePrev() {\n  const annees = +prevAnc.value;\n  document.getElementById('prev-anc-val').textContent = annees + ' an' + (annees > 1 ? 's' : '');\n\n  let duree = '', detail = '';\n\n  if (prevStatut === 'cadre') {\n    duree = '3 mois';\n    detail = 'Cadres : 3 mois quelle que soit l\\'ancienneté';\n  } else if (prevStatut === 'etdam-senior') {\n    if (prevType === 'licenciement') {\n      duree = annees >= 2 ? '2 mois' : '1 mois';\n      detail = annees >= 2 ? 'ETDAM ≥ coeff 221, ≥ 2 ans → 2 mois' : 'ETDAM ≥ coeff 221, \u003C 2 ans → 1 mois';\n    } else {\n      duree = annees >= 2 ? '2 mois' : '1 mois';\n      detail = 'Démission';\n    }\n  } else {\n    \u002F\u002F Ouvrier\n    if (prevType === 'licenciement') {\n      duree = annees >= 2 ? '2 mois' : '1 mois';\n      detail = annees >= 2 ? 'Ouvrier\u002FETDAM ≥ 2 ans → 2 mois' : 'Ouvrier\u002FETDAM \u003C 2 ans → 1 mois';\n    } else {\n      duree = '1 mois';\n      detail = 'Démission ouvrier : 1 mois';\n    }\n  }\n\n  document.getElementById('prev-amount').textContent = duree;\n  document.getElementById('prev-detail').textContent = detail;\n}\n\nprevAnc.addEventListener('input', computePrev);\ncomputePrev();\n\n\u002F\u002F ════════════════════════════════════════════════════════════════════════════\n\u002F\u002F TAB 3: GRILLE SALARIALE\n\u002F\u002F ════════════════════════════════════════════════════════════════════════════\nconst salCategorie = document.getElementById('sal-categorie');\nconst salCoeff     = document.getElementById('sal-coeff');\nconst salHeures    = document.getElementById('sal-heures');\n\nfunction computeSal() {\n  const h    = +salHeures.value;\n  const coeff = +salCoeff.value;\n  document.getElementById('sal-heures-val').textContent = h + 'h';\n\n  let base35 = GRILLE[coeff] || 1785;\n  \u002F\u002F Prorata heures\n  let mensuel = base35 * (h \u002F 35);\n  \u002F\u002F Apply minimum SMIC pro-rata\n  const smicProrata = SMIC_MENSUEL * (h \u002F 35);\n  const applicable = Math.max(mensuel, smicProrata);\n\n  document.getElementById('sal-amount').textContent = fmtEurDec.format(applicable);\n  document.getElementById('sal-coeff-chip').textContent = 'Coeff ' + coeff + ' CCN : ' + fmtEurDec.format(mensuel);\n  document.getElementById('sal-smic-chip').textContent = 'SMIC prorata : ' + fmtEurDec.format(smicProrata);\n}\n\nsalCategorie.addEventListener('change', computeSal);\nsalCoeff.addEventListener('change', computeSal);\nsalHeures.addEventListener('input', computeSal);\ncomputeSal();\n\n\u002F\u002F ════════════════════════════════════════════════════════════════════════════\n\u002F\u002F TAB 4: PRIME D'ANCIENNETÉ\n\u002F\u002F ════════════════════════════════════════════════════════════════════════════\nconst ancSalaire = document.getElementById('anc-salaire');\nconst ancAnnees  = document.getElementById('anc-annees');\nlet ancStatut = 'ouvrier';\ninitPills('anc-statut-pills', v => { ancStatut = v; computeAnc(); });\n\nfunction computeAnc() {\n  const salaire = +ancSalaire.value;\n  const annees  = +ancAnnees.value;\n  document.getElementById('anc-salaire-val').textContent = fmtEur.format(salaire);\n  document.getElementById('anc-annees-val').textContent  = annees + ' an' + (annees > 1 ? 's' : '');\n\n  if (ancStatut === 'cadre') {\n    document.getElementById('anc-amount').textContent = 'N\u002FA';\n    document.getElementById('anc-label').textContent  = 'Prime d\\'ancienneté non applicable aux cadres';\n    document.getElementById('anc-taux-chip').textContent = 'Cadres : pas de prime d\\'ancienneté CCN';\n    return;\n  }\n\n  \u002F\u002F Paliers : 3 ans → 3%, 6 ans → 6%, ..., 15 ans → 15% (cap)\n  let taux = 0;\n  if (annees >= 3) taux = Math.min(Math.floor(annees \u002F 3) * 3, 15);\n  const prime = salaire * taux \u002F 100;\n\n  document.getElementById('anc-amount').textContent   = taux > 0 ? fmtEurDec.format(prime) : '0 €';\n  document.getElementById('anc-label').textContent    = 'Prime d\\'ancienneté mensuelle brute';\n  document.getElementById('anc-taux-chip').textContent = taux > 0 ? 'Taux CCN : ' + taux + '%' : 'Ancienneté \u003C 3 ans : aucune prime';\n}\n\nancSalaire.addEventListener('input', computeAnc);\nancAnnees.addEventListener('input', computeAnc);\ncomputeAnc();\n\n\u002F\u002F ════════════════════════════════════════════════════════════════════════════\n\u002F\u002F TAB 5: CONGÉS\n\u002F\u002F ════════════════════════════════════════════════════════════════════════════\nconst congAnc     = document.getElementById('cong-anc');\nconst congPartiel = document.getElementById('cong-partiel');\n\nfunction computeCong() {\n  const annees  = +congAnc.value;\n  const partiel = congPartiel.checked;\n  document.getElementById('cong-anc-val').textContent = annees + ' an' + (annees > 1 ? 's' : '');\n\n  let base = 30; \u002F\u002F jours ouvrables légaux\n  let extra = 0;\n  if (annees >= 25) extra = 2;\n  else if (annees >= 20) extra = 1;\n\n  const total = base + extra;\n  const label = partiel ? '(au prorata du temps partiel — voir contrat)' : '';\n\n  document.getElementById('cong-amount').textContent = total + ' jours ouvrables';\n  document.getElementById('cong-label').textContent  = 'Congés annuels ' + (partiel ? '(base plein temps)' : '');\n  document.getElementById('cong-ccn-chip').textContent = extra > 0\n    ? 'CCN : +' + extra + ' jour' + (extra > 1 ? 's' : '') + ' ancienneté'\n    : 'CCN : pas de jours supplémentaires';\n}\n\ncongAnc.addEventListener('input', computeCong);\ncongPartiel.addEventListener('change', computeCong);\ncomputeCong();\n\n\u002F\u002F ── Init Lucide icons ──────────────────────────────────────────────────────\nlucide.createIcons();\n\u003C\u002Fscript>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n","generated","juridique","consumer","both","https:\u002F\u002Fpub-bdebbd2dad294475a2da0eb657815b6b.r2.dev\u002Ftools\u002Fccn-camping-274dabc868.webp",[]]