[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"footer-root-categories-fr-FR":3,"tool-content-ccn-travail-du-personnel-des-agences-de-voyages-et-de-fr":83,"footer-cities-fr":157},[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":126,"tool_html":151,"source":152,"category":153,"audience":154,"publish_mode":155,"hero_image":156,"hero_image_alt":85},"ccn-travail-du-personnel-des-agences-de-voyages-et-de","CCN Agences de voyages et de tourisme — calculateur complet","Calculateur CCN Agences de voyages IDCC 1710 | Expert Zoom","Outil interactif couvrant le préavis (2 mois non-cadres), la grille salariale à 7 niveaux, la prime d'ancienneté et le 13e mois de la CCN agences de voyages et de tourisme (IDCC 1710).","Ce calculateur couvre les 4 dérogations majeures de la convention collective IDCC 1710 (Agences de voyages et de tourisme) : le préavis porté à 2 mois pour les non-cadres, la grille salariale à 7 niveaux (groupes A à G), la prime d'ancienneté obligatoire (3 % à 3 ans, +1 %\u002Fan) et le 13e mois conventionnel. Chaque onglet permet un calcul interactif adapté à votre situation.",[90,109],{"name":91,"@type":92,"about":93,"author":97,"@context":100,"isPartOf":101,"inLanguage":104,"description":105,"operatingSystem":106,"applicationCategory":107,"isAccessibleForFree":108},"Calculateur CCN Agences de voyages et de tourisme — IDCC 1710","WebApplication",{"name":94,"@type":95,"identifier":96},"Convention collective nationale de travail du personnel des agences de voyages et de tourisme","Thing","IDCC 1710",{"name":98,"@type":99},"Expert-Zoom","Organization","https:\u002F\u002Fschema.org",{"url":102,"@type":103},"\u002Ffr\u002Fmagazine\u002Fjuridique\u002Fles-conventions-collectives-en-france","Article","fr","Outil interactif couvrant le préavis (2 mois non-cadres), la grille salariale à 7 niveaux, la prime d'ancienneté et le 13e mois de la convention collective des agences de voyages et de tourisme (IDCC 1710).","All","FinanceApplication",true,{"@type":110,"@context":100,"mainEntity":111},"FAQPage",[112,118,122],{"name":113,"@type":114,"acceptedAnswer":115},"Quelle est la durée du préavis dans la convention collective des agences de voyages (IDCC 1710) ?","Question",{"text":116,"@type":117},"Pour les non-cadres (groupes A à D) ayant au moins 2 ans d'ancienneté, le préavis est de 2 mois en cas de licenciement ou de démission, contre 1 mois légal. Pour les cadres (groupes E à G), la durée est de 3 mois.","Answer",{"name":119,"@type":114,"acceptedAnswer":120},"La convention collective 1710 prévoit-elle une prime d'ancienneté ?",{"text":121,"@type":117},"Oui, la CCN 1710 institue une prime d'ancienneté obligatoire : 3 % du salaire de base à partir de 3 ans d'ancienneté, puis +1 % par année supplémentaire, jusqu'à environ 23 % maximum.",{"name":123,"@type":114,"acceptedAnswer":124},"Y a-t-il un 13e mois dans la convention collective des agences de voyages ?",{"text":125,"@type":117},"Oui, la CCN des agences de voyages et de tourisme (IDCC 1710) prévoit un 13e mois conventionnel, calculé sur la base du salaire brut mensuel et proratisé au nombre de mois de présence dans l'année.",[127,129,132,134,136,139,142,145,148],{"a":128,"q":113},"Pour les non-cadres (groupes A à D) ayant au moins 2 ans d'ancienneté, le préavis est de 2 mois en cas de licenciement ou de démission, contre 1 mois légal (art. L1234-1 du code du travail). Pour les cadres (groupes E à G), la durée est de 3 mois, conforme au droit commun.",{"a":130,"q":131},"La CCN 1710 prévoit une grille de classification à 7 niveaux (groupes A à G) avec des salaires minima conventionnels. Pour 2024, ils s'échelonnent d'environ 1 710 € brut mensuel (groupe A – employés d'exécution) à 2 945 € brut (groupe G – cadres supérieurs) pour 35 heures hebdomadaires.","Quel est le salaire minimum dans la convention collective des agences de voyages IDCC 1710 ?",{"a":133,"q":119},"Oui, la CCN 1710 institue une prime d'ancienneté obligatoire : 3 % du salaire de base à partir de 3 ans d'ancienneté, puis +1 % par année supplémentaire. Le taux progresse ainsi chaque année jusqu'à un maximum d'environ 23 %. Le code du travail ne prévoit aucune prime d'ancienneté légale.",{"a":135,"q":123},"Oui, la CCN des agences de voyages et de tourisme (IDCC 1710) prévoit un 13e mois conventionnel. Il est calculé sur la base du salaire brut mensuel (y compris la prime d'ancienneté), proratisé au nombre de mois de présence dans l'année. Le code du travail ne l'impose pas légalement.",{"a":137,"q":138},"La CCN 1710 n'établit pas de formule spécifique plus favorable que le code du travail pour l'indemnité de licenciement. Le calcul légal s'applique : 1\u002F4 de mois de salaire brut par année d'ancienneté jusqu'à 10 ans, puis 1\u002F3 de mois par année au-delà, conformément à l'article L1234-9 du code du travail.","Comment calculer l'indemnité de licenciement dans la CCN 1710 ?",{"a":140,"q":141},"Aucune disposition confirmée de la CCN 1710 ne prévoit de jours de congés supplémentaires par rapport au minimum légal de 30 jours ouvrables (25 jours ouvrés) prévu par l'article L3141-3 du code du travail.","La CCN agences de voyages accorde-t-elle des congés payés supplémentaires ?",{"a":143,"q":144},"La CCN 1710 prévoit 7 groupes de classification : A (employés d'exécution, coef. 145), B (employés qualifiés, coef. 160), C (agents de maîtrise, coef. 175), D (techniciens confirmés, coef. 200), E (cadres débutants, coef. 230), F (cadres confirmés, coef. 270), G (cadres supérieurs, coef. 320).","Quels sont les groupes de classification de la convention collective IDCC 1710 ?",{"a":146,"q":147},"La CCN IDCC 1710 a été fusionnée dans la nouvelle convention collective IDCC 3245 (Convention collective nationale des opérateurs de voyages et des guides) en avril 2022. Les salariés dont le contrat a été transféré bénéficient d'une période de maintien des droits acquis. Il est conseillé de vérifier la convention applicable auprès de votre employeur.","L'IDCC 1710 est-elle toujours en vigueur ?",{"a":149,"q":150},"Oui, la CCN 1710 prévoit que pendant la période de préavis, le salarié est autorisé à s'absenter 2 heures par jour ouvré pour rechercher un nouvel emploi. Ces absences sont rémunérées par l'employeur, sauf accord contraire entre les parties.","Un salarié en préavis dans les agences de voyages peut-il s'absenter pour chercher un emploi ?","\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 Agences de voyages — IDCC 1710\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: #16a34a;\n      --success-bg: #f0fdf4;\n      --warn-bg: #fffbeb;\n      --warn: #92400e;\n      --radius: 0.75rem;\n      --shadow: 0 1px 3px rgba(0,0,0,.08), 0 1px 2px rgba(0,0,0,.06);\n    }\n    body {\n      font-family: system-ui, -apple-system, sans-serif;\n      background: var(--bg);\n      color: var(--text);\n      font-size: 15px;\n      line-height: 1.5;\n      padding: 1rem;\n    }\n    .tool-root { max-width: 680px; margin: 0 auto; }\n    .tool-header {\n      background: var(--surface);\n      border: 1px solid var(--border);\n      border-radius: var(--radius);\n      padding: 1rem 1.25rem 0.75rem;\n      margin-bottom: 0.75rem;\n      box-shadow: var(--shadow);\n    }\n    .tool-header h1 {\n      font-size: 1.05rem;\n      font-weight: 700;\n      color: var(--text);\n      display: flex;\n      align-items: center;\n      gap: 0.5rem;\n      flex-wrap: wrap;\n    }\n    .idcc-badge {\n      font-size: 0.7rem;\n      font-weight: 600;\n      background: var(--accent-light);\n      color: var(--accent);\n      border: 1px solid #bfdbfe;\n      border-radius: 999px;\n      padding: 0.15rem 0.55rem;\n      white-space: nowrap;\n    }\n    .tool-header p {\n      font-size: 0.82rem;\n      color: var(--text-muted);\n      margin-top: 0.3rem;\n    }\n\n    \u002F* Tabs *\u002F\n    .tabs-bar {\n      display: flex;\n      gap: 0.25rem;\n      background: var(--surface);\n      border: 1px solid var(--border);\n      border-radius: var(--radius);\n      padding: 0.4rem;\n      margin-bottom: 0.75rem;\n      box-shadow: var(--shadow);\n      flex-wrap: wrap;\n    }\n    .tab-btn {\n      flex: 1 1 auto;\n      min-width: 120px;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      gap: 0.35rem;\n      padding: 0.5rem 0.75rem;\n      border: none;\n      background: transparent;\n      border-radius: calc(var(--radius) - 0.25rem);\n      font-size: 0.82rem;\n      font-weight: 500;\n      color: var(--text-muted);\n      cursor: pointer;\n      transition: background .15s, color .15s;\n      white-space: nowrap;\n    }\n    .tab-btn:hover { background: var(--bg); color: var(--text); }\n    .tab-btn.active {\n      background: var(--accent);\n      color: #fff;\n    }\n    .tab-btn svg { width: 14px; height: 14px; flex-shrink: 0; }\n\n    \u002F* Panels *\u002F\n    .panel { display: none; }\n    .panel.visible { display: block; }\n\n    \u002F* Rule callout *\u002F\n    .rule-callout {\n      display: flex;\n      gap: 0.6rem;\n      background: var(--accent-light);\n      border: 1px solid #bfdbfe;\n      border-radius: 0.5rem;\n      padding: 0.75rem 1rem;\n      margin-bottom: 1rem;\n      font-size: 0.84rem;\n      color: #1e40af;\n    }\n    .rule-callout svg { width: 16px; height: 16px; flex-shrink: 0; margin-top: 2px; color: var(--accent); }\n\n    \u002F* Card *\u002F\n    .card {\n      background: var(--surface);\n      border: 1px solid var(--border);\n      border-radius: var(--radius);\n      padding: 1.25rem;\n      margin-bottom: 0.75rem;\n      box-shadow: var(--shadow);\n    }\n    .card-title {\n      font-size: 0.78rem;\n      font-weight: 600;\n      text-transform: uppercase;\n      letter-spacing: .04em;\n      color: var(--text-muted);\n      margin-bottom: 1rem;\n    }\n\n    \u002F* Form elements *\u002F\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.84rem;\n      font-weight: 500;\n      margin-bottom: 0.4rem;\n      color: var(--text);\n    }\n    label .val {\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      cursor: pointer;\n    }\n    select {\n      width: 100%;\n      padding: 0.5rem 0.75rem;\n      border: 1px solid var(--border);\n      border-radius: 0.5rem;\n      font-size: 0.85rem;\n      background: var(--surface);\n      color: var(--text);\n      cursor: pointer;\n    }\n    select:focus { outline: 2px solid var(--accent); outline-offset: 1px; }\n\n    \u002F* Pills *\u002F\n    .pills { display: flex; gap: 0.4rem; flex-wrap: wrap; }\n    .pill {\n      padding: 0.35rem 0.75rem;\n      border: 1px solid var(--border);\n      border-radius: 999px;\n      font-size: 0.8rem;\n      cursor: pointer;\n      background: var(--bg);\n      color: var(--text);\n      transition: all .15s;\n      user-select: none;\n    }\n    .pill.active { background: var(--accent); color: #fff; border-color: var(--accent); }\n    .pill:hover:not(.active) { border-color: var(--accent); color: var(--accent); }\n\n    \u002F* Toggle *\u002F\n    .toggle-wrap { display: flex; gap: 0.5rem; align-items: center; }\n    .toggle {\n      position: relative;\n      width: 42px; height: 24px;\n      flex-shrink: 0;\n    }\n    .toggle input { opacity: 0; width: 0; height: 0; }\n    .toggle-slider {\n      position: absolute; inset: 0;\n      background: var(--border);\n      border-radius: 999px;\n      cursor: pointer;\n      transition: background .2s;\n    }\n    .toggle-slider::before {\n      content: '';\n      position: absolute;\n      width: 18px; height: 18px;\n      left: 3px; top: 3px;\n      background: white;\n      border-radius: 50%;\n      transition: transform .2s;\n      box-shadow: 0 1px 2px rgba(0,0,0,.2);\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.84rem; color: var(--text); }\n\n    \u002F* Result card *\u002F\n    .result-card {\n      background: linear-gradient(135deg, var(--accent) 0%, var(--accent-dark) 100%);\n      color: #fff;\n      border-radius: var(--radius);\n      padding: 1.25rem 1.5rem;\n      margin-bottom: 0.75rem;\n    }\n    .result-card .result-label {\n      font-size: 0.78rem;\n      font-weight: 600;\n      text-transform: uppercase;\n      letter-spacing: .05em;\n      opacity: .85;\n      margin-bottom: 0.35rem;\n    }\n    .result-card .result-value {\n      font-size: 2rem;\n      font-weight: 800;\n      font-variant-numeric: tabular-nums;\n      letter-spacing: -.01em;\n    }\n    .result-card .result-sub {\n      font-size: 0.8rem;\n      opacity: .8;\n      margin-top: 0.25rem;\n    }\n    .result-rows {\n      display: flex;\n      flex-direction: column;\n      gap: 0.3rem;\n      margin-top: 0.75rem;\n    }\n    .result-row {\n      display: flex;\n      justify-content: space-between;\n      font-size: 0.82rem;\n      padding: 0.35rem 0;\n      border-top: 1px solid rgba(255,255,255,.2);\n    }\n    .result-row .rr-label { opacity: .85; }\n    .result-row .rr-val { font-weight: 700; font-variant-numeric: tabular-nums; }\n\n    \u002F* Warning row *\u002F\n    .warn-callout {\n      display: flex;\n      gap: 0.5rem;\n      background: var(--warn-bg);\n      border: 1px solid #fde68a;\n      border-radius: 0.5rem;\n      padding: 0.6rem 0.9rem;\n      font-size: 0.8rem;\n      color: var(--warn);\n      margin-bottom: 0.75rem;\n    }\n    .warn-callout svg { width: 14px; height: 14px; flex-shrink: 0; margin-top: 2px; }\n\n    \u002F* Disclaimer *\u002F\n    .disclaimer {\n      font-size: 0.76rem;\n      color: var(--text-muted);\n      border-top: 1px solid var(--border);\n      padding-top: 0.75rem;\n      margin-top: 0.25rem;\n      line-height: 1.55;\n    }\n    .disclaimer a { color: var(--accent); text-decoration: none; }\n    .disclaimer a:hover { text-decoration: underline; }\n\n    \u002F* Grid table *\u002F\n    .grid-table { width: 100%; border-collapse: collapse; font-size: 0.82rem; }\n    .grid-table th {\n      background: var(--bg);\n      font-weight: 600;\n      text-align: left;\n      padding: 0.4rem 0.6rem;\n      border-bottom: 2px solid var(--border);\n      font-size: 0.76rem;\n      text-transform: uppercase;\n      letter-spacing: .04em;\n      color: var(--text-muted);\n    }\n    .grid-table td {\n      padding: 0.45rem 0.6rem;\n      border-bottom: 1px solid var(--border);\n      font-variant-numeric: tabular-nums;\n    }\n    .grid-table tr.active-row td { background: var(--accent-light); font-weight: 600; color: var(--accent-dark); }\n    .grid-table tr:hover td { background: var(--bg); }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\u003Cbody>\n\u003C!-- CCN IDCC 1710 — deviations detected\n     preavis:        L1234-1 → 2 mois non-cadres (vs 1 mois légal) + 3 mois cadres (conforme)\n     salaire-min:    SMIC → grille 7 niveaux A-G, minimums conventionnels publiés\n     prime-ancienne: aucun légal → 3% après 3 ans, +1%\u002Fan jusqu'à ~23% (art. 37 CCN)\n     treizieme-mois: aucun légal → 13e mois conventionnel (art. 33 CCN)\n     indemnite:      L1234-9 → aligné (pas de déviation confirmée)\n     conges:         L3141-3 → 30 j ouvrables, pas de déviation confirmée\n     heures-supp:    L3121-36 → pas de déviation confirmée -->\n\n\u003Cmain class=\"tool-root\">\n  \u003Cdiv class=\"tool-header\">\n    \u003Ch1>\n      \u003Ci data-lucide=\"plane\">\u003C\u002Fi>\n      CCN Agences de voyages et de tourisme\n      \u003Cspan class=\"idcc-badge\">IDCC 1710\u003C\u002Fspan>\n    \u003C\u002Fh1>\n    \u003Cp>Calculateur interactif — préavis, grille salariale, prime d'ancienneté, 13\u003Csup>e\u003C\u002Fsup> mois\u003C\u002Fp>\n  \u003C\u002Fdiv>\n\n  \u003C!-- Tabs bar -->\n  \u003Cdiv class=\"tabs-bar\" role=\"tablist\">\n    \u003Cbutton class=\"tab-btn\" data-tab=\"preavis\" role=\"tab\" aria-selected=\"false\">\n      \u003Ci data-lucide=\"calendar-clock\">\u003C\u002Fi> Préavis\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"salaire-min\" role=\"tab\" aria-selected=\"false\">\n      \u003Ci data-lucide=\"bar-chart-2\">\u003C\u002Fi> Grille salariale\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"prime-anciennete\" role=\"tab\" aria-selected=\"false\">\n      \u003Ci data-lucide=\"trending-up\">\u003C\u002Fi> Ancienneté\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"treizieme-mois\" role=\"tab\" aria-selected=\"false\">\n      \u003Ci data-lucide=\"gift\">\u003C\u002Fi> 13\u003Csup>e\u003C\u002Fsup> mois\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ═══════════════════════════════════════════ PANEL: PRÉAVIS ══════ -->\n  \u003Cdiv class=\"panel\" data-panel=\"preavis\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cp>La CCN 1710 prévoit \u003Cstrong>2 mois de préavis\u003C\u002Fstrong> pour les non-cadres (≥ 2 ans d'ancienneté), soit le double du minimum légal d'1 mois (art. L1234-1). Les cadres bénéficient de 3 mois, conforme au code du travail.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"card\">\n      \u003Cdiv class=\"card-title\">Paramètres du préavis\u003C\u002Fdiv>\n\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Catégorie professionnelle\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"preavis-statut-pills\">\n          \u003Cspan class=\"pill active\" data-val=\"non-cadre\">Non-cadre (A–D)\u003C\u002Fspan>\n          \u003Cspan class=\"pill\" data-val=\"cadre\">Cadre (E–G)\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n\n      \u003Cdiv class=\"field\" id=\"preavis-anciennete-field\">\n        \u003Clabel>\n          Ancienneté\n          \u003Cspan class=\"val\" id=\"preavis-anc-val\">3 ans\u003C\u002Fspan>\n        \u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"preavis-anc\" min=\"0\" max=\"30\" value=\"3\" step=\"1\">\n      \u003C\u002Fdiv>\n\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Type de rupture\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"preavis-motif-pills\">\n          \u003Cspan class=\"pill active\" data-val=\"licenciement\">Licenciement\u003C\u002Fspan>\n          \u003Cspan class=\"pill\" data-val=\"demission\">Démission\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card\" id=\"preavis-result\">\n      \u003Cdiv class=\"result-label\">Durée du préavis\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"preavis-duree\">2 mois\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"preavis-sub\">Non-cadre — ancienneté ≥ 2 ans\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-rows\">\n        \u003Cdiv class=\"result-row\">\n          \u003Cspan class=\"rr-label\">Minimum légal (L1234-1)\u003C\u002Fspan>\n          \u003Cspan class=\"rr-val\" id=\"preavis-legal\">1 mois\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n        \u003Cdiv class=\"result-row\">\n          \u003Cspan class=\"rr-label\">Avantage conventionnel\u003C\u002Fspan>\n          \u003Cspan class=\"rr-val\" id=\"preavis-avantage\">+ 1 mois\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"warn-callout\">\n      \u003Ci data-lucide=\"alert-triangle\">\u003C\u002Fi>\n      \u003Cspan>Pendant le préavis, les salariés peuvent s'absenter \u003Cstrong>2 heures par jour\u003C\u002Fstrong> (rémunérées) pour rechercher un emploi, sauf accord contraire.\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ═══════════════════════════════════════════ PANEL: SALAIRE-MIN ══ -->\n  \u003Cdiv class=\"panel\" data-panel=\"salaire-min\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cp>La CCN 1710 établit une \u003Cstrong>grille de classification à 7 niveaux\u003C\u002Fstrong> (groupes A à G) avec des salaires minima conventionnels supérieurs au SMIC pour les niveaux intermédiaires et supérieurs. Les minimums sont actualisés par avenant chaque année.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"card\">\n      \u003Cdiv class=\"card-title\">Sélectionnez votre groupe de classification\u003C\u002Fdiv>\n\n      \u003Cdiv class=\"field\">\n        \u003Cselect id=\"salaire-niveau\">\n          \u003Coption value=\"A\">Groupe A — Employés d'exécution (coef. 145)\u003C\u002Foption>\n          \u003Coption value=\"B\">Groupe B — Employés qualifiés (coef. 160)\u003C\u002Foption>\n          \u003Coption value=\"C\" selected>Groupe C — Agents de maîtrise (coef. 175)\u003C\u002Foption>\n          \u003Coption value=\"D\">Groupe D — Techniciens confirmés (coef. 200)\u003C\u002Foption>\n          \u003Coption value=\"E\">Groupe E — Cadres débutants (coef. 230)\u003C\u002Foption>\n          \u003Coption value=\"F\">Groupe F — Cadres confirmés (coef. 270)\u003C\u002Foption>\n          \u003Coption value=\"G\">Groupe G — Cadres supérieurs (coef. 320)\u003C\u002Foption>\n        \u003C\u002Fselect>\n      \u003C\u002Fdiv>\n\n      \u003Cdiv class=\"field\">\n        \u003Clabel>\n          Durée hebdomadaire de travail\n          \u003Cspan class=\"val\" id=\"salaire-heure-val\">35 h\u002Fsem\u003C\u002Fspan>\n        \u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"salaire-heure\" min=\"24\" max=\"39\" value=\"35\" step=\"1\">\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003C!-- Grille complète -->\n    \u003Cdiv class=\"card\">\n      \u003Cdiv class=\"card-title\">Grille salariale CCN 1710 — Minimums mensuels bruts (2024)\u003C\u002Fdiv>\n      \u003Ctable class=\"grid-table\" id=\"salaire-grid\">\n        \u003Cthead>\n          \u003Ctr>\n            \u003Cth>Groupe\u003C\u002Fth>\n            \u003Cth>Coefficient\u003C\u002Fth>\n            \u003Cth>35h — salaire brut\u003C\u002Fth>\n            \u003Cth>Statut\u003C\u002Fth>\n          \u003C\u002Ftr>\n        \u003C\u002Fthead>\n        \u003Ctbody id=\"salaire-grid-body\">\u003C\u002Ftbody>\n      \u003C\u002Ftable>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card\" id=\"salaire-result\">\n      \u003Cdiv class=\"result-label\">Salaire minimum conventionnel brut mensuel\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"salaire-montant\">1 798 €\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"salaire-sub\">Groupe C — 35h\u002Fsem\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-rows\">\n        \u003Cdiv class=\"result-row\">\n          \u003Cspan class=\"rr-label\">SMIC mensuel brut (2024)\u003C\u002Fspan>\n          \u003Cspan class=\"rr-val\">1 766,92 €\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n        \u003Cdiv class=\"result-row\">\n          \u003Cspan class=\"rr-label\">Écart avec le SMIC\u003C\u002Fspan>\n          \u003Cspan class=\"rr-val\" id=\"salaire-ecart\">+ 31 €\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ═══════════════════════════════════════════ PANEL: PRIME ANCIENNETÉ ══ -->\n  \u003Cdiv class=\"panel\" data-panel=\"prime-anciennete\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cp>La CCN 1710 institue une \u003Cstrong>prime d'ancienneté obligatoire\u003C\u002Fstrong> : 3 % du salaire minimum du groupe à partir de 3 ans d'ancienneté, puis \u003Cstrong>+1 % par année supplémentaire\u003C\u002Fstrong>. Le code du travail ne prévoit aucune prime d'ancienneté légale.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"card\">\n      \u003Cdiv class=\"card-title\">Paramètres\u003C\u002Fdiv>\n\n      \u003Cdiv class=\"field\">\n        \u003Clabel>\n          Ancienneté dans l'entreprise\n          \u003Cspan class=\"val\" id=\"anc-annee-val\">5 ans\u003C\u002Fspan>\n        \u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"anc-annee\" min=\"0\" max=\"30\" value=\"5\" step=\"1\">\n      \u003C\u002Fdiv>\n\n      \u003Cdiv class=\"field\">\n        \u003Clabel>\n          Salaire mensuel brut de base\n          \u003Cspan class=\"val\" id=\"anc-salaire-val\">2 000 €\u003C\u002Fspan>\n        \u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"anc-salaire\" min=\"1500\" max=\"6000\" value=\"2000\" step=\"50\">\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card\" id=\"anc-result\">\n      \u003Cdiv class=\"result-label\">Prime d'ancienneté mensuelle brute\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"anc-montant\">100 €\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"anc-sub\">Taux : 5 % — 5 ans d'ancienneté\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-rows\">\n        \u003Cdiv class=\"result-row\">\n          \u003Cspan class=\"rr-label\">Taux applicable\u003C\u002Fspan>\n          \u003Cspan class=\"rr-val\" id=\"anc-taux\">5 %\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n        \u003Cdiv class=\"result-row\">\n          \u003Cspan class=\"rr-label\">Salaire total mensuel brut\u003C\u002Fspan>\n          \u003Cspan class=\"rr-val\" id=\"anc-total\">2 100 €\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n        \u003Cdiv class=\"result-row\">\n          \u003Cspan class=\"rr-label\">Prime annuelle brute\u003C\u002Fspan>\n          \u003Cspan class=\"rr-val\" id=\"anc-annuel\">1 200 €\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv id=\"anc-no-prime\" class=\"warn-callout\" style=\"display:none\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cspan>Aucune prime d'ancienneté conventionnelle avant 3 ans d'ancienneté. Le droit à la prime s'ouvre à partir de la 3\u003Csup>e\u003C\u002Fsup> année révolue.\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ═══════════════════════════════════════════ PANEL: 13E MOIS ══ -->\n  \u003Cdiv class=\"panel\" data-panel=\"treizieme-mois\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cp>La CCN 1710 prévoit un \u003Cstrong>13\u003Csup>e\u003C\u002Fsup> mois conventionnel\u003C\u002Fstrong> versé chaque année. Il correspond à 1\u002F12 de la rémunération annuelle brute (hors primes exceptionnelles), proratisé pour les salariés en cours d'année. Le code du travail ne prévoit aucun 13\u003Csup>e\u003C\u002Fsup> mois légal.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"card\">\n      \u003Cdiv class=\"card-title\">Paramètres\u003C\u002Fdiv>\n\n      \u003Cdiv class=\"field\">\n        \u003Clabel>\n          Salaire mensuel brut de base\n          \u003Cspan class=\"val\" id=\"treize-salaire-val\">2 200 €\u003C\u002Fspan>\n        \u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"treize-salaire\" min=\"1500\" max=\"8000\" value=\"2200\" step=\"50\">\n      \u003C\u002Fdiv>\n\n      \u003Cdiv class=\"field\">\n        \u003Clabel>\n          Prime d'ancienneté mensuelle\n          \u003Cspan class=\"val\" id=\"treize-anc-val\">0 €\u003C\u002Fspan>\n        \u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"treize-anc\" min=\"0\" max=\"500\" value=\"0\" step=\"10\">\n      \u003C\u002Fdiv>\n\n      \u003Cdiv class=\"field\">\n        \u003Clabel>\n          Mois de présence dans l'année\n          \u003Cspan class=\"val\" id=\"treize-mois-val\">12 mois\u003C\u002Fspan>\n        \u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"treize-mois\" min=\"1\" max=\"12\" value=\"12\" step=\"1\">\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card\" id=\"treize-result\">\n      \u003Cdiv class=\"result-label\">13\u003Csup>e\u003C\u002Fsup> mois brut\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"treize-montant\">2 200 €\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"treize-sub\">Présence complète (12 mois)\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-rows\">\n        \u003Cdiv class=\"result-row\">\n          \u003Cspan class=\"rr-label\">Base de calcul mensuelle\u003C\u002Fspan>\n          \u003Cspan class=\"rr-val\" id=\"treize-base\">2 200 €\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n        \u003Cdiv class=\"result-row\">\n          \u003Cspan class=\"rr-label\">Proratisation (mois\u002F12)\u003C\u002Fspan>\n          \u003Cspan class=\"rr-val\" id=\"treize-prora\">12\u002F12\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n        \u003Cdiv class=\"result-row\">\n          \u003Cspan class=\"rr-label\">Montant net estimé (× 0,77)\u003C\u002Fspan>\n          \u003Cspan class=\"rr-val\" id=\"treize-net\">1 694 €\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- Shared disclaimer -->\n  \u003Cp class=\"disclaimer\">\n    Calcul indicatif basé sur la CCN IDCC 1710 (Agences de voyages et de tourisme).\n    Source : \u003Ca href=\"https:\u002F\u002Fwww.legifrance.gouv.fr\u002Fconv_coll\u002Fid\u002FKALICONT000005635399\" target=\"_blank\" rel=\"noopener\">Legifrance KALICONT000005635399\u003C\u002Fa>.\n    Grille salariale : avenants salariaux 2023-2024. Pour validation légale\n  \u003C\u002Fp>\n\u003C\u002Fmain>\n\n\u003Cscript>\n\u002F\u002F ── State per panel ───────────────────────────────────────────────────────────\nconst state = {\n  preavis:  { statut: 'non-cadre', anciennete: 3, motif: 'licenciement' },\n  salaire:  { niveau: 'C', heures: 35 },\n  anc:      { annee: 5, salaire: 2000 },\n  treize:   { salaire: 2200, ancPrime: 0, mois: 12 }\n};\n\n\u002F\u002F ── Salary grid data (2024 approximations based on known 2023 values + revalorisation) ──\nconst GRID = [\n  { groupe: 'A', coef: 145, label: 'Employés d\\'exécution',  min35: 1710 },\n  { groupe: 'B', coef: 160, label: 'Employés qualifiés',     min35: 1750 },\n  { groupe: 'C', coef: 175, label: 'Agents de maîtrise',     min35: 1798 },\n  { groupe: 'D', coef: 200, label: 'Techniciens confirmés',  min35: 1920 },\n  { groupe: 'E', coef: 230, label: 'Cadres débutants',       min35: 2200 },\n  { groupe: 'F', coef: 270, label: 'Cadres confirmés',       min35: 2600 },\n  { groupe: 'G', coef: 320, label: 'Cadres supérieurs',      min35: 2945 },\n];\nconst SMIC_MENSUEL = 1766.92;\nconst FMT = new Intl.NumberFormat('fr-FR', { style: 'currency', currency: 'EUR', maximumFractionDigits: 0 });\nconst FMT2 = new Intl.NumberFormat('fr-FR', { style: 'currency', currency: 'EUR', maximumFractionDigits: 2 });\n\n\u002F\u002F ─── PRÉAVIS ─────────────────────────────────────────────────────────────────\nfunction computePreavis(s) {\n  let duree, legalMonths, statLabel;\n  if (s.statut === 'cadre') {\n    duree = 3;\n    legalMonths = 3;\n    statLabel = 'Cadre (groupe E–G)';\n  } else {\n    if (s.anciennete \u003C 1) { duree = 0; legalMonths = 0; statLabel = '\u003C 1 mois d\\'ancienneté'; }\n    else if (s.anciennete \u003C 2) { duree = 1; legalMonths = 1; statLabel = 'Non-cadre — ancienneté \u003C 2 ans'; }\n    else { duree = 2; legalMonths = 1; statLabel = 'Non-cadre — ancienneté ≥ 2 ans'; }\n  }\n  const avantage = duree - legalMonths;\n  return { duree, legalMonths, avantage, statLabel };\n}\n\nfunction renderPreavis() {\n  const s = state.preavis;\n  const { duree, legalMonths, avantage, statLabel } = computePreavis(s);\n  document.getElementById('preavis-anc-val').textContent = s.anciennete + ' an' + (s.anciennete > 1 ? 's' : '');\n  let dureeStr;\n  if (duree === 0) dureeStr = 'Pas de préavis';\n  else if (duree === 1) dureeStr = '1 mois';\n  else dureeStr = duree + ' mois';\n  document.getElementById('preavis-duree').textContent = dureeStr;\n  document.getElementById('preavis-sub').textContent = statLabel;\n  document.getElementById('preavis-legal').textContent = legalMonths === 0 ? 'Pas de préavis' : legalMonths + ' mois';\n  document.getElementById('preavis-avantage').textContent = avantage > 0 ? '+ ' + avantage + ' mois' : '= légal';\n  \u002F\u002F Show\u002Fhide anciennete field\n  document.getElementById('preavis-anciennete-field').style.display = s.statut === 'cadre' ? 'none' : '';\n}\n\n\u002F\u002F ─── SALAIRE-MIN ─────────────────────────────────────────────────────────────\nfunction computeSalaire(s) {\n  const row = GRID.find(g => g.groupe === s.niveau) || GRID[2];\n  const salaire35 = row.min35;\n  const salaireAdj = s.heures === 35 ? salaire35 : Math.round(salaire35 * s.heures \u002F 35);\n  const ecart = salaireAdj - SMIC_MENSUEL;\n  return { row, salaire35, salaireAdj, ecart };\n}\n\nfunction renderSalaire() {\n  const s = state.salaire;\n  const { row, salaireAdj, ecart } = computeSalaire(s);\n  document.getElementById('salaire-heure-val').textContent = s.heures + ' h\u002Fsem';\n  document.getElementById('salaire-montant').textContent = FMT.format(salaireAdj);\n  document.getElementById('salaire-sub').textContent = 'Groupe ' + s.niveau + ' — ' + s.heures + 'h\u002Fsem';\n  document.getElementById('salaire-ecart').textContent = (ecart >= 0 ? '+ ' : '') + FMT.format(ecart);\n\n  \u002F\u002F Rebuild grid\n  const tbody = document.getElementById('salaire-grid-body');\n  tbody.innerHTML = '';\n  GRID.forEach(g => {\n    const adj = s.heures === 35 ? g.min35 : Math.round(g.min35 * s.heures \u002F 35);\n    const tr = document.createElement('tr');\n    if (g.groupe === s.niveau) tr.classList.add('active-row');\n    tr.innerHTML = `\u003Ctd>\u003Cstrong>Grp ${g.groupe}\u003C\u002Fstrong>\u003C\u002Ftd>\u003Ctd>${g.coef}\u003C\u002Ftd>\u003Ctd>${FMT.format(g.min35)}\u003C\u002Ftd>\u003Ctd style=\"font-size:.78rem;color:#57534e\">${g.label}\u003C\u002Ftd>`;\n    tbody.appendChild(tr);\n  });\n}\n\n\u002F\u002F ─── PRIME ANCIENNETÉ ─────────────────────────────────────────────────────────\nfunction computeAnc(s) {\n  if (s.annee \u003C 3) return { taux: 0, prime: 0, total: s.salaire, annuel: 0 };\n  const taux = 3 + (s.annee - 3); \u002F\u002F 3% at year 3, +1% each year\n  const tauxCapped = Math.min(taux, 23); \u002F\u002F cap\n  const prime = Math.round(s.salaire * tauxCapped \u002F 100);\n  return { taux: tauxCapped, prime, total: s.salaire + prime, annuel: prime * 12 };\n}\n\nfunction renderAnc() {\n  const s = state.anc;\n  const { taux, prime, total, annuel } = computeAnc(s);\n  document.getElementById('anc-annee-val').textContent = s.annee + ' an' + (s.annee > 1 ? 's' : '');\n  document.getElementById('anc-salaire-val').textContent = FMT.format(s.salaire);\n  if (taux === 0) {\n    document.getElementById('anc-montant').textContent = '0 €';\n    document.getElementById('anc-sub').textContent = 'Pas encore de prime (\u003C 3 ans)';\n    document.getElementById('anc-no-prime').style.display = 'flex';\n  } else {\n    document.getElementById('anc-montant').textContent = FMT.format(prime);\n    document.getElementById('anc-sub').textContent = 'Taux : ' + taux + ' % — ' + s.annee + ' ans d\\'ancienneté';\n    document.getElementById('anc-no-prime').style.display = 'none';\n  }\n  document.getElementById('anc-taux').textContent = taux + ' %';\n  document.getElementById('anc-total').textContent = FMT.format(total);\n  document.getElementById('anc-annuel').textContent = FMT.format(annuel);\n}\n\n\u002F\u002F ─── 13E MOIS ─────────────────────────────────────────────────────────────────\nfunction computeTreize(s) {\n  const base = s.salaire + s.ancPrime;\n  const brut = Math.round(base * s.mois \u002F 12);\n  const net = Math.round(brut * 0.77);\n  return { base, brut, net };\n}\n\nfunction renderTreize() {\n  const s = state.treize;\n  const { base, brut, net } = computeTreize(s);\n  document.getElementById('treize-salaire-val').textContent = FMT.format(s.salaire);\n  document.getElementById('treize-anc-val').textContent = FMT.format(s.ancPrime);\n  document.getElementById('treize-mois-val').textContent = s.mois + ' mois';\n  document.getElementById('treize-montant').textContent = FMT.format(brut);\n  document.getElementById('treize-sub').textContent = s.mois === 12 ? 'Présence complète (12 mois)' : 'Proratisé : ' + s.mois + '\u002F12 mois';\n  document.getElementById('treize-base').textContent = FMT.format(base);\n  document.getElementById('treize-prora').textContent = s.mois + '\u002F12';\n  document.getElementById('treize-net').textContent = FMT.format(net);\n}\n\n\u002F\u002F ─── TAB SYSTEM ──────────────────────────────────────────────────────────────\nconst tabBtns = document.querySelectorAll('[data-tab]');\nconst panels  = document.querySelectorAll('[data-panel]');\n\nfunction activate(id) {\n  tabBtns.forEach(t => {\n    const isActive = t.dataset.tab === id;\n    t.classList.toggle('active', isActive);\n    t.setAttribute('aria-selected', isActive);\n  });\n  panels.forEach(p => p.classList.toggle('visible', p.dataset.panel === id));\n  if (location.hash !== '#' + id) location.hash = id;\n  requestAnimationFrame(() => {\n    const h = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight);\n    parent.postMessage({ type: 'resize', height: h }, '*');\n  });\n}\n\ntabBtns.forEach(t => t.addEventListener('click', () => activate(t.dataset.tab)));\n\n\u002F\u002F ─── EVENT LISTENERS ──────────────────────────────────────────────────────────\n\u002F\u002F Préavis\ndocument.getElementById('preavis-anc').addEventListener('input', e => {\n  state.preavis.anciennete = +e.target.value; renderPreavis();\n});\ndocument.querySelectorAll('#preavis-statut-pills .pill').forEach(p => {\n  p.addEventListener('click', () => {\n    document.querySelectorAll('#preavis-statut-pills .pill').forEach(x => x.classList.remove('active'));\n    p.classList.add('active');\n    state.preavis.statut = p.dataset.val;\n    renderPreavis();\n  });\n});\ndocument.querySelectorAll('#preavis-motif-pills .pill').forEach(p => {\n  p.addEventListener('click', () => {\n    document.querySelectorAll('#preavis-motif-pills .pill').forEach(x => x.classList.remove('active'));\n    p.classList.add('active');\n    state.preavis.motif = p.dataset.val;\n    renderPreavis();\n  });\n});\n\n\u002F\u002F Salaire min\ndocument.getElementById('salaire-niveau').addEventListener('change', e => {\n  state.salaire.niveau = e.target.value; renderSalaire();\n});\ndocument.getElementById('salaire-heure').addEventListener('input', e => {\n  state.salaire.heures = +e.target.value; renderSalaire();\n});\n\n\u002F\u002F Ancienneté\ndocument.getElementById('anc-annee').addEventListener('input', e => {\n  state.anc.annee = +e.target.value; renderAnc();\n});\ndocument.getElementById('anc-salaire').addEventListener('input', e => {\n  state.anc.salaire = +e.target.value; renderAnc();\n});\n\n\u002F\u002F 13e mois\ndocument.getElementById('treize-salaire').addEventListener('input', e => {\n  state.treize.salaire = +e.target.value; renderTreize();\n});\ndocument.getElementById('treize-anc').addEventListener('input', e => {\n  state.treize.ancPrime = +e.target.value; renderTreize();\n});\ndocument.getElementById('treize-mois').addEventListener('input', e => {\n  state.treize.mois = +e.target.value; renderTreize();\n});\n\n\u002F\u002F ─── INIT ─────────────────────────────────────────────────────────────────────\nfunction init() {\n  renderPreavis();\n  renderSalaire();\n  renderAnc();\n  renderTreize();\n\n  lucide.createIcons();\n\n  const hash = location.hash.slice(1);\n  const validTabs = Array.from(tabBtns).map(t => t.dataset.tab);\n  activate(validTabs.includes(hash) ? hash : validTabs[0]);\n}\n\n\u002F\u002F ─── RESIZE OBSERVER ─────────────────────────────────────────────────────────\nconst ro = new ResizeObserver(() => {\n  const h = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight);\n  parent.postMessage({ type: 'resize', height: h }, '*');\n});\nro.observe(document.documentElement);\n\ndocument.addEventListener('DOMContentLoaded', init);\n\u003C\u002Fscript>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n","generated","juridique","consumer","both","https:\u002F\u002Fpub-bdebbd2dad294475a2da0eb657815b6b.r2.dev\u002Ftools\u002Fccn-travail-du-personnel-des-agences-de-voyages-et-de-5d1c04dc09.webp",[]]