[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"footer-root-categories-fr-FR":3,"tool-content-ccn-couture-parisienne-fr":83,"footer-cities-fr":143},[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":137,"source":138,"category":139,"audience":140,"publish_mode":141,"hero_image":142,"hero_image_alt":85},"ccn-couture-parisienne","CCN de la couture parisienne — calculateur complet","Calculateur CCN Couture Parisienne IDCC 303 | Expert Zoom","Outil interactif couvrant préavis, grille de salaires, 13e mois, prime d'ancienneté, congés et heures supplémentaires de la CCN couture parisienne (IDCC 303).","Ce calculateur couvre les 5 points clés où la convention collective de la couture parisienne (IDCC 303) diffère du code du travail : préavis structurés par groupe et ancienneté, grille de salaires minimaux sur 9 niveaux (tous supérieurs au SMIC), 13e mois obligatoire versé en juin et décembre, prime d'ancienneté progressive de 3 % à 15 %, congés supplémentaires pour ancienneté et conditions de travail, et contingent annuel d'heures supplémentaires réduit à 160 heures.",[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 de la couture parisienne — IDCC 303","WebApplication",{"name":94,"@type":95,"identifier":96},"Convention collective de la couture parisienne","Thing","IDCC 303",{"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, la grille de salaires minimaux, le 13e mois et la prime d'ancienneté, les congés payés et les heures supplémentaires de la convention collective de la couture parisienne (IDCC 303, Brochure n° 3185).","All","FinanceApplication",true,[110,113,116,119,122,125,128,131,134],{"a":111,"q":112},"La durée du préavis dépend du groupe de classification et de l'ancienneté. Les salariés des groupes 1 à 5 ont droit à 1 semaine (moins de 6 mois d'ancienneté), 1 mois (6 mois à 2 ans) ou 2 mois (au-delà de 2 ans). Les cadres (groupe 6 et plus) bénéficient d'un préavis de 3 mois, porté à 4 mois pour les cadres d'au moins 50 ans ayant 10 ans ou plus d'ancienneté dans ce statut. Les salariés disposant d'au moins 6 mois d'ancienneté bénéficient en outre de 6 jours ouvrés payés pour rechercher un nouvel emploi.","Quelle est la durée du préavis dans la convention collective de la couture parisienne ?",{"a":114,"q":115},"La convention collective de la couture parisienne (IDCC 303) fixe une grille de salaires minimaux sur 9 niveaux, tous supérieurs au SMIC. En 2025, le niveau le plus bas démarre à environ 1 970 € brut mensuel pour 35 heures par semaine, soit environ 9 % au-dessus du SMIC légal. Les cadres (niveaux 6 à 9) bénéficient de minimums allant de 3 100 € à plus de 6 500 € brut\u002Fmois. La grille est révisée chaque année par avenant.","Quel est le salaire minimum dans la couture parisienne (IDCC 303) ?",{"a":117,"q":118},"Oui. La CCN couture parisienne (IDCC 303) impose le versement d'un 13e mois à tous les salariés. Il est versé en deux fois : la moitié en juin et la moitié en décembre. Son montant est égal à un mois de salaire de base. Les cadres administratifs, financiers et artistiques ainsi que les personnels de vente rémunérés à la commission sont exclus de la prime d'ancienneté, mais bénéficient du 13e mois dans les conditions de la convention.","La convention collective de la couture parisienne prévoit-elle un 13e mois ?",{"a":120,"q":121},"La prime d'ancienneté de la CCN couture parisienne est progressive : +3 % à partir de 3 ans, +6 % à 6 ans, +9 % à 9 ans, +12 % à 12 ans et +15 % à partir de 15 ans d'ancienneté. Elle s'applique sur le salaire de base mensuel et est versée deux fois par an (fin mars et fin septembre). Les cadres administratifs, financiers, artistiques et le personnel commercial à commissions en sont exclus.","Quelle est la prime d'ancienneté dans la couture parisienne ?",{"a":123,"q":124},"La base est de 25 jours ouvrés par an, conformément au code du travail. La CCN y ajoute des jours supplémentaires selon l'ancienneté : +5 jours à partir de 25 ans d'ancienneté et +6 jours à partir de 30 ans. Les salariés travaillant en sous-sol ou en local climatisé avec lumière artificielle bénéficient de 0,5 jour supplémentaire par mois travaillé dans ces conditions. Les salariés de moins de 18 ans ont droit à 6 jours supplémentaires pouvant être pris pendant les vacances scolaires.","Combien de jours de congés payés dans la couture parisienne ?",{"a":126,"q":127},"Le contingent annuel d'heures supplémentaires est fixé à 160 heures par an (sans modulation du temps de travail), extensible à 205 heures par accord. Ce seuil est plus restrictif que le contingent légal de 220 heures. Avec un accord de modulation, le contingent est réduit à 100 heures. Durant les périodes de collection (4 fois par an), les heures effectuées le 2e jour de repos hebdomadaire sont majorées à 50 %.","Quel est le contingent annuel d'heures supplémentaires dans la couture parisienne ?",{"a":129,"q":130},"Les taux de majoration sont identiques au code du travail : +25 % pour les 8 premières heures supplémentaires hebdomadaires et +50 % au-delà. Cependant, la CCN prévoit une majoration spécifique de +50 % pour les heures travaillées le 2e jour de repos hebdomadaire lors des périodes de collection (4 fois par an). Le contingent annuel est en revanche plus bas (160 h) que le seuil légal (220 h), ce qui impose d'obtenir une autorisation plus tôt.","Les heures supplémentaires sont-elles mieux rémunérées dans la couture parisienne qu'au niveau légal ?",{"a":132,"q":133},"Non, la convention collective de la couture parisienne (IDCC 303, Brochure n° 3185) est une convention collective régionale. Elle s'applique principalement aux maisons de couture et entreprises du secteur de la couture haute gamme de la région parisienne. Elle couvre les entreprises dont l'activité principale relève de la création et de la fabrication de vêtements de mode haut de gamme sur mesure ou en petite série.","La convention collective de la couture parisienne s'applique-t-elle à toute la France ?",{"a":135,"q":136},"Le code du travail ne fixe pas de durée de préavis minimale générale pour les cadres : celle-ci est déterminée par la convention collective applicable. La CCN couture parisienne (IDCC 303) fixe un préavis de 3 mois pour les cadres (groupe 6 et plus), porté à 4 mois pour les cadres âgés d'au moins 50 ans et justifiant d'au moins 10 ans d'ancienneté dans le statut cadre. Cette durée protège davantage les cadres seniors.","Quelle est la différence entre la CCN couture parisienne et le code du travail pour le préavis des cadres ?","\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 Couture Parisienne — IDCC 303\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\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-bg: #f0fdf4;\n      --success-border: #bbf7d0;\n      --success-text: #15803d;\n      --warn-bg: #fefce8;\n      --warn-border: #fde68a;\n      --warn-text: #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\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.6;\n      padding: 1rem;\n    }\n\n    .tool-root {\n      max-width: 680px;\n      margin: 0 auto;\n    }\n\n    .tool-header {\n      margin-bottom: 1.25rem;\n    }\n\n    .tool-header h1 {\n      font-size: 1.2rem;\n      font-weight: 700;\n      color: var(--text);\n      margin-bottom: 0.25rem;\n    }\n\n    .idcc-badge {\n      display: inline-flex;\n      align-items: center;\n      gap: 0.3rem;\n      background: var(--accent-light);\n      color: var(--accent);\n      font-size: 0.75rem;\n      font-weight: 600;\n      padding: 0.2rem 0.6rem;\n      border-radius: 999px;\n      margin-top: 0.25rem;\n    }\n\n    \u002F* Tabs *\u002F\n    .tabs-nav {\n      display: flex;\n      flex-wrap: wrap;\n      gap: 0.25rem;\n      border-bottom: 2px solid var(--border);\n      margin-bottom: 1.25rem;\n    }\n\n    .tab-btn {\n      background: none;\n      border: none;\n      cursor: pointer;\n      font-size: 0.82rem;\n      font-weight: 500;\n      color: var(--muted);\n      padding: 0.5rem 0.75rem;\n      border-bottom: 2px solid transparent;\n      margin-bottom: -2px;\n      border-radius: 0.25rem 0.25rem 0 0;\n      transition: color 0.15s, border-color 0.15s;\n      display: flex;\n      align-items: center;\n      gap: 0.35rem;\n    }\n\n    .tab-btn:hover { color: var(--accent); }\n    .tab-btn.active {\n      color: var(--accent);\n      border-bottom-color: var(--accent);\n      background: var(--accent-light);\n    }\n\n    .tab-panel { display: none; }\n    .tab-panel.active { display: block; }\n\n    \u002F* Cards *\u002F\n    .card {\n      background: var(--card);\n      border: 1px solid var(--border);\n      border-radius: var(--radius);\n      padding: 1rem 1.25rem;\n      box-shadow: var(--shadow);\n      margin-bottom: 1rem;\n    }\n\n    \u002F* Rule callout *\u002F\n    .rule-callout {\n      display: flex;\n      gap: 0.75rem;\n      align-items: flex-start;\n      background: var(--accent-light);\n      border: 1px solid #bfdbfe;\n      border-radius: var(--radius);\n      padding: 0.875rem 1rem;\n      margin-bottom: 1rem;\n      font-size: 0.875rem;\n      color: #1e40af;\n    }\n\n    .rule-callout i { flex-shrink: 0; margin-top: 2px; }\n    .rule-callout p { line-height: 1.5; }\n    .rule-callout strong { font-weight: 600; }\n\n    \u002F* Form elements *\u002F\n    .field { margin-bottom: 0.875rem; }\n    .field label {\n      display: block;\n      font-size: 0.82rem;\n      font-weight: 600;\n      color: var(--muted);\n      margin-bottom: 0.35rem;\n      text-transform: uppercase;\n      letter-spacing: 0.03em;\n    }\n\n    .field-row {\n      display: flex;\n      align-items: center;\n      gap: 0.75rem;\n    }\n\n    input[type=\"range\"] {\n      flex: 1;\n      accent-color: var(--accent);\n      height: 4px;\n      cursor: pointer;\n    }\n\n    .range-value {\n      font-size: 0.875rem;\n      font-weight: 700;\n      color: var(--accent);\n      min-width: 80px;\n      text-align: right;\n      font-variant-numeric: tabular-nums;\n    }\n\n    select {\n      width: 100%;\n      padding: 0.5rem 0.75rem;\n      border: 1px solid var(--border);\n      border-radius: 0.5rem;\n      background: var(--card);\n      font-size: 0.875rem;\n      color: var(--text);\n      cursor: pointer;\n    }\n\n    select:focus { outline: 2px solid var(--accent); outline-offset: 1px; }\n\n    \u002F* Pills *\u002F\n    .pills {\n      display: flex;\n      flex-wrap: wrap;\n      gap: 0.375rem;\n    }\n\n    .pill {\n      border: 1.5px solid var(--border);\n      background: var(--card);\n      color: var(--text);\n      border-radius: 999px;\n      padding: 0.3rem 0.8rem;\n      font-size: 0.8rem;\n      font-weight: 500;\n      cursor: pointer;\n      transition: all 0.15s;\n      white-space: nowrap;\n    }\n\n    .pill:hover { border-color: var(--accent); color: var(--accent); }\n    .pill.selected {\n      background: var(--accent);\n      border-color: var(--accent);\n      color: #fff;\n    }\n\n    \u002F* Toggle *\u002F\n    .toggle-wrap {\n      display: flex;\n      align-items: center;\n      gap: 0.75rem;\n    }\n\n    .toggle {\n      position: relative;\n      width: 44px;\n      height: 24px;\n      flex-shrink: 0;\n    }\n\n    .toggle input { opacity: 0; width: 0; height: 0; }\n\n    .toggle-slider {\n      position: absolute;\n      inset: 0;\n      background: var(--border);\n      border-radius: 999px;\n      cursor: pointer;\n      transition: background 0.2s;\n    }\n\n    .toggle-slider::before {\n      content: '';\n      position: absolute;\n      width: 18px;\n      height: 18px;\n      left: 3px;\n      top: 3px;\n      background: white;\n      border-radius: 50%;\n      transition: transform 0.2s;\n      box-shadow: 0 1px 3px rgba(0,0,0,.2);\n    }\n\n    .toggle input:checked + .toggle-slider { background: var(--accent); }\n    .toggle input:checked + .toggle-slider::before { transform: translateX(20px); }\n\n    \u002F* Result card *\u002F\n    .result-card {\n      background: linear-gradient(135deg, var(--accent) 0%, var(--accent-dark) 100%);\n      color: white;\n      border-radius: var(--radius);\n      padding: 1.25rem 1.5rem;\n      margin-bottom: 1rem;\n    }\n\n    .result-label {\n      font-size: 0.78rem;\n      font-weight: 600;\n      text-transform: uppercase;\n      letter-spacing: 0.05em;\n      opacity: 0.85;\n      margin-bottom: 0.35rem;\n    }\n\n    .result-value {\n      font-size: 2rem;\n      font-weight: 800;\n      font-variant-numeric: tabular-nums;\n      line-height: 1.1;\n    }\n\n    .result-sub {\n      font-size: 0.82rem;\n      opacity: 0.8;\n      margin-top: 0.35rem;\n    }\n\n    .result-grid {\n      display: grid;\n      grid-template-columns: 1fr 1fr;\n      gap: 0.75rem;\n      margin-bottom: 1rem;\n    }\n\n    .result-mini {\n      background: var(--card);\n      border: 1px solid var(--border);\n      border-radius: 0.5rem;\n      padding: 0.75rem 1rem;\n    }\n\n    .result-mini-label {\n      font-size: 0.72rem;\n      font-weight: 600;\n      color: var(--muted);\n      text-transform: uppercase;\n      letter-spacing: 0.04em;\n      margin-bottom: 0.2rem;\n    }\n\n    .result-mini-value {\n      font-size: 1.15rem;\n      font-weight: 700;\n      color: var(--accent);\n      font-variant-numeric: tabular-nums;\n    }\n\n    .success-badge {\n      display: inline-flex;\n      align-items: center;\n      gap: 0.35rem;\n      background: var(--success-bg);\n      border: 1px solid var(--success-border);\n      color: var(--success-text);\n      font-size: 0.78rem;\n      font-weight: 600;\n      padding: 0.25rem 0.7rem;\n      border-radius: 999px;\n    }\n\n    .warn-badge {\n      display: inline-flex;\n      align-items: center;\n      gap: 0.35rem;\n      background: var(--warn-bg);\n      border: 1px solid var(--warn-border);\n      color: var(--warn-text);\n      font-size: 0.78rem;\n      font-weight: 600;\n      padding: 0.25rem 0.7rem;\n      border-radius: 999px;\n    }\n\n    \u002F* Disclaimer *\u002F\n    .disclaimer {\n      font-size: 0.75rem;\n      color: var(--muted);\n      border-top: 1px solid var(--border);\n      padding-top: 0.875rem;\n      margin-top: 0.5rem;\n      line-height: 1.5;\n    }\n\n    .disclaimer a { color: var(--accent); }\n\n    @media (max-width: 480px) {\n      .result-grid { grid-template-columns: 1fr; }\n      .result-value { font-size: 1.6rem; }\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\u003Cbody>\n\u003C!-- CCN IDCC 303 — Couture Parisienne — deviations detected:\n     preavis: L1234-1 → groupes + ancienneté structurés, 6 jours recherche emploi\n     salaire-min: SMIC → grille 9 niveaux, niveau 1 = 1 970 € (>SMIC 2025)\n     prime-annuelle: néant → 13e mois + prime d'ancienneté progressive (3%→15%)\n     conges: L3141-3 → jours supplémentaires après 25\u002F30 ans + conditions spéciales\n     heures-supp: L3121-36 → contingent annuel réduit (160h vs 220h), régime collections\n-->\n\u003Cmain class=\"tool-root\">\n\n  \u003Cdiv class=\"tool-header\">\n    \u003Ch1>Calculateur CCN Couture Parisienne\u003C\u002Fh1>\n    \u003Cspan class=\"idcc-badge\">\u003Ci data-lucide=\"award\" style=\"width:13px;height:13px;\">\u003C\u002Fi> IDCC 303\u003C\u002Fspan>\n  \u003C\u002Fdiv>\n\n  \u003C!-- Tabs nav -->\n  \u003Cnav class=\"tabs-nav\" role=\"tablist\">\n    \u003Cbutton class=\"tab-btn\" data-tab=\"preavis\" role=\"tab\">\n      \u003Ci data-lucide=\"clock\" style=\"width:14px;height:14px;\">\u003C\u002Fi> Préavis\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"salaire-min\" role=\"tab\">\n      \u003Ci data-lucide=\"banknote\" style=\"width:14px;height:14px;\">\u003C\u002Fi> Salaire min.\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"prime-annuelle\" role=\"tab\">\n      \u003Ci data-lucide=\"gift\" style=\"width:14px;height:14px;\">\u003C\u002Fi> 13e mois &amp; ancienneté\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"conges\" role=\"tab\">\n      \u003Ci data-lucide=\"sun\" style=\"width:14px;height:14px;\">\u003C\u002Fi> Congés\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"heures-supp\" role=\"tab\">\n      \u003Ci data-lucide=\"timer\" style=\"width:14px;height:14px;\">\u003C\u002Fi> H. supp.\n    \u003C\u002Fbutton>\n  \u003C\u002Fnav>\n\n  \u003C!-- ===== PANEL: PRÉAVIS ===== -->\n  \u003Cdiv class=\"tab-panel\" data-panel=\"preavis\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\" style=\"width:16px;height:16px;flex-shrink:0;margin-top:2px;\">\u003C\u002Fi>\n      \u003Cp>La CCN Couture Parisienne fixe des \u003Cstrong>durées de préavis structurées par groupe de classification et ancienneté\u003C\u002Fstrong>. Les cadres (groupe 6+) bénéficient de 3 mois, portés à 4 mois dès 50 ans avec 10 ans d'ancienneté. Les salariés d'≥ 6 mois d'ancienneté disposent de \u003Cstrong>6 jours ouvrés payés\u003C\u002Fstrong> pour rechercher un emploi pendant le préavis.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"card\">\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Groupe de classification\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"p-groupe\">\n          \u003Cbutton class=\"pill\" data-val=\"1\">Groupe 1–2\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"3\">Groupe 3–5\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill selected\" data-val=\"6\">Groupe 6+ (cadre)\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Ancienneté\u003C\u002Flabel>\n        \u003Cdiv class=\"field-row\">\n          \u003Cinput type=\"range\" id=\"p-anciennete\" min=\"0\" max=\"40\" value=\"5\" step=\"1\">\n          \u003Cspan class=\"range-value\" id=\"p-anciennete-val\">5 ans\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n\n      \u003Cdiv class=\"field\" id=\"p-age-field\">\n        \u003Clabel>Âge (pour cadres ≥ 50 ans)\u003C\u002Flabel>\n        \u003Cdiv class=\"field-row\">\n          \u003Cinput type=\"range\" id=\"p-age\" min=\"20\" max=\"65\" value=\"45\" step=\"1\">\n          \u003Cspan class=\"range-value\" id=\"p-age-val\">45 ans\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card\" id=\"p-result\">\n      \u003Cdiv class=\"result-label\">Durée de préavis\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"p-duration\">3 mois\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"p-sub\">+ 6 jours payés pour recherche d'emploi\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv style=\"margin-bottom:1rem;\">\n      \u003Cspan class=\"success-badge\" id=\"p-badge\">\u003Ci data-lucide=\"check-circle\" style=\"width:12px;height:12px;\">\u003C\u002Fi> Plus favorable que L1234-1\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ===== PANEL: SALAIRE MIN ===== -->\n  \u003Cdiv class=\"tab-panel\" data-panel=\"salaire-min\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\" style=\"width:16px;height:16px;flex-shrink:0;margin-top:2px;\">\u003C\u002Fi>\n      \u003Cp>La convention fixe une \u003Cstrong>grille de salaires minimaux conventionnels\u003C\u002Fstrong> sur 9 niveaux, tous supérieurs au SMIC (€&nbsp;1&nbsp;801,80 brut en 2025). Le niveau 1 démarre à \u003Cstrong>1&nbsp;970 €\u003C\u002Fstrong> brut\u002Fmois pour 35h, soit environ 9 % au-dessus du SMIC.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"card\">\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Niveau de classification\u003C\u002Flabel>\n        \u003Cselect id=\"s-niveau\">\n          \u003Coption value=\"1970\">Niveau 1 — employé débutant (1 970 €)\u003C\u002Foption>\n          \u003Coption value=\"2050\">Niveau 2 — employé qualifié (2 050 €)\u003C\u002Foption>\n          \u003Coption value=\"2150\">Niveau 3 — employé confirmé (2 150 €)\u003C\u002Foption>\n          \u003Coption value=\"2350\">Niveau 4 — technicien \u002F agent de maîtrise (2 350 €)\u003C\u002Foption>\n          \u003Coption value=\"2600\">Niveau 5 — technicien supérieur (2 600 €)\u003C\u002Foption>\n          \u003Coption value=\"3100\">Niveau 6 — cadre débutant (3 100 €)\u003C\u002Foption>\n          \u003Coption value=\"3800\">Niveau 7 — cadre confirmé (3 800 €)\u003C\u002Foption>\n          \u003Coption value=\"4800\">Niveau 8 — cadre senior (4 800 €)\u003C\u002Foption>\n          \u003Coption value=\"6500\">Niveau 9 — cadre supérieur \u002F dirigeant (6 500 €)\u003C\u002Foption>\n        \u003C\u002Fselect>\n      \u003C\u002Fdiv>\n\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Heures hebdomadaires\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"s-heures\">\n          \u003Cbutton class=\"pill selected\" data-val=\"35\">35h (plein temps)\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"28\">28h (80%)\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"17.5\">17,5h (50%)\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card\">\n      \u003Cdiv class=\"result-label\">Salaire minimum conventionnel\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"s-result-val\">1 970 €\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"s-result-sub\">brut \u002F mois — base 35h\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-grid\">\n      \u003Cdiv class=\"result-mini\">\n        \u003Cdiv class=\"result-mini-label\">SMIC 2025\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-mini-value\" id=\"s-smic\">1 801,80 €\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"result-mini\">\n        \u003Cdiv class=\"result-mini-label\">Écart vs SMIC\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-mini-value\" id=\"s-ecart\">+ 168,20 €\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ===== PANEL: PRIME ANNUELLE ===== -->\n  \u003Cdiv class=\"tab-panel\" data-panel=\"prime-annuelle\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\" style=\"width:16px;height:16px;flex-shrink:0;margin-top:2px;\">\u003C\u002Fi>\n      \u003Cp>La CCN impose un \u003Cstrong>13e mois\u003C\u002Fstrong> versé en deux fois (moitié en juin, moitié en décembre), ainsi qu'une \u003Cstrong>prime d'ancienneté progressive\u003C\u002Fstrong> : +3 % à 3 ans, montant jusqu'à +15 % à 15 ans et plus. Aucune obligation équivalente n'existe dans le code du travail.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"card\">\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Salaire brut mensuel de base\u003C\u002Flabel>\n        \u003Cdiv class=\"field-row\">\n          \u003Cinput type=\"range\" id=\"pa-salaire\" min=\"1970\" max=\"8000\" value=\"2500\" step=\"50\">\n          \u003Cspan class=\"range-value\" id=\"pa-salaire-val\">2 500 €\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Ancienneté\u003C\u002Flabel>\n        \u003Cdiv class=\"field-row\">\n          \u003Cinput type=\"range\" id=\"pa-anciennete\" min=\"0\" max=\"30\" value=\"5\" step=\"1\">\n          \u003Cspan class=\"range-value\" id=\"pa-anciennete-val\">5 ans\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Statut\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"pa-statut\">\n          \u003Cbutton class=\"pill selected\" data-val=\"standard\">Salarié standard\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"exclu\">Cadre administratif \u002F artistique \u002F commercial à commissions\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card\" id=\"pa-result-card\">\n      \u003Cdiv class=\"result-label\">13e mois annuel\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"pa-result-13\">2 500 €\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"pa-result-sub\">Moitié en juin + moitié en décembre\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-grid\">\n      \u003Cdiv class=\"result-mini\">\n        \u003Cdiv class=\"result-mini-label\">Prime ancienneté\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-mini-value\" id=\"pa-prime-val\">+ 3 %\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"result-mini\">\n        \u003Cdiv class=\"result-mini-label\">Montant ancienneté\u002Fan\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-mini-value\" id=\"pa-prime-montant\">900 €\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv id=\"pa-exclu-msg\" style=\"display:none;\" class=\"warn-badge\">\n      \u003Ci data-lucide=\"alert-triangle\" style=\"width:12px;height:12px;\">\u003C\u002Fi>\n      Prime d'ancienneté non applicable à ce statut\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ===== PANEL: CONGÉS ===== -->\n  \u003Cdiv class=\"tab-panel\" data-panel=\"conges\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\" style=\"width:16px;height:16px;flex-shrink:0;margin-top:2px;\">\u003C\u002Fi>\n      \u003Cp>La base légale (25 jours ouvrés) est maintenue. La convention y ajoute des \u003Cstrong>jours supplémentaires pour ancienneté\u003C\u002Fstrong> (+ 5 j après 25 ans, + 6 j après 30 ans) et des jours pour les salariés travaillant en sous-sol ou en milieu climatisé à lumière artificielle (+ 0,5 j\u002Fmois travaillé).\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"card\">\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Ancienneté dans l'entreprise\u003C\u002Flabel>\n        \u003Cdiv class=\"field-row\">\n          \u003Cinput type=\"range\" id=\"c-anciennete\" min=\"0\" max=\"35\" value=\"10\" step=\"1\">\n          \u003Cspan class=\"range-value\" id=\"c-anciennete-val\">10 ans\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Conditions de travail spéciales\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"c-cond\">\n          \u003Cbutton class=\"pill selected\" data-val=\"standard\">Standard\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"soussol\">Sous-sol \u002F lumière artificielle\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"clim\">Local climatisé + lumière artificielle\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n\n      \u003Cdiv class=\"field\" id=\"c-mois-field\" style=\"display:none;\">\n        \u003Clabel>Mois travaillés dans l'année (conditions spéciales)\u003C\u002Flabel>\n        \u003Cdiv class=\"field-row\">\n          \u003Cinput type=\"range\" id=\"c-mois\" min=\"1\" max=\"12\" value=\"12\" step=\"1\">\n          \u003Cspan class=\"range-value\" id=\"c-mois-val\">12 mois\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Âge (jeunes salariés)\u003C\u002Flabel>\n        \u003Cdiv class=\"toggle-wrap\">\n          \u003Clabel class=\"toggle\">\n            \u003Cinput type=\"checkbox\" id=\"c-mineur\">\n            \u003Cspan class=\"toggle-slider\">\u003C\u002Fspan>\n          \u003C\u002Flabel>\n          \u003Cspan style=\"font-size:0.875rem;\">Salarié de moins de 18 ans\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card\">\n      \u003Cdiv class=\"result-label\">Congés payés annuels\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"c-result\">25 jours\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"c-sub\">jours ouvrés — base légale conforme\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-grid\">\n      \u003Cdiv class=\"result-mini\">\n        \u003Cdiv class=\"result-mini-label\">Base légale\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-mini-value\">25 j\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"result-mini\">\n        \u003Cdiv class=\"result-mini-label\">Jours supplémentaires CCN\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-mini-value\" id=\"c-extra\">0 j\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ===== PANEL: HEURES SUPP ===== -->\n  \u003Cdiv class=\"tab-panel\" data-panel=\"heures-supp\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\" style=\"width:16px;height:16px;flex-shrink:0;margin-top:2px;\">\u003C\u002Fi>\n      \u003Cp>Les taux de majoration (25 % et 50 %) sont identiques au code du travail. Le contingent annuel est en revanche \u003Cstrong>réduit à 160 h\u003C\u002Fstrong> (sans modulation, extensible à 205 h par accord) contre 220 h légales. Lors des périodes de collection, les heures du 2e jour de repos hebdomadaire sont majorées à \u003Cstrong>50 %\u003C\u002Fstrong>.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"card\">\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Salaire horaire brut\u003C\u002Flabel>\n        \u003Cdiv class=\"field-row\">\n          \u003Cinput type=\"range\" id=\"hs-taux\" min=\"11\" max=\"60\" value=\"16\" step=\"0.5\">\n          \u003Cspan class=\"range-value\" id=\"hs-taux-val\">16,00 €\u002Fh\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Heures supp. à 25 % (8 premières)\u003C\u002Flabel>\n        \u003Cdiv class=\"field-row\">\n          \u003Cinput type=\"range\" id=\"hs-25\" min=\"0\" max=\"8\" value=\"4\" step=\"0.5\">\n          \u003Cspan class=\"range-value\" id=\"hs-25-val\">4 h\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Heures supp. au-delà (50 %)\u003C\u002Flabel>\n        \u003Cdiv class=\"field-row\">\n          \u003Cinput type=\"range\" id=\"hs-50\" min=\"0\" max=\"20\" value=\"0\" step=\"0.5\">\n          \u003Cspan class=\"range-value\" id=\"hs-50-val\">0 h\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Heures de collection (2e jour de repos, +50 %)\u003C\u002Flabel>\n        \u003Cdiv class=\"field-row\">\n          \u003Cinput type=\"range\" id=\"hs-coll\" min=\"0\" max=\"8\" value=\"0\" step=\"0.5\">\n          \u003Cspan class=\"range-value\" id=\"hs-coll-val\">0 h\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card\">\n      \u003Cdiv class=\"result-label\">Majoration totale des heures supplémentaires\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"hs-result\">8,00 €\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"hs-sub\">salaire brut total : 72,00 €\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-grid\">\n      \u003Cdiv class=\"result-mini\">\n        \u003Cdiv class=\"result-mini-label\">Majoration 25 %\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-mini-value\" id=\"hs-m25\">8,00 €\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"result-mini\">\n        \u003Cdiv class=\"result-mini-label\">Majoration 50 %\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-mini-value\" id=\"hs-m50\">0,00 €\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv style=\"margin-bottom:1rem;\">\n      \u003Cspan class=\"warn-badge\">\u003Ci data-lucide=\"alert-triangle\" style=\"width:12px;height:12px;\">\u003C\u002Fi> Contingent annuel CCN : 160 h (vs 220 h légales)\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- Shared disclaimer -->\n  \u003Cp class=\"disclaimer\">\n    Calcul indicatif basé sur la CCN IDCC 303 (Couture Parisienne, Brochure n° 3185).\n    Source : \u003Ca href=\"https:\u002F\u002Fwww.legifrance.gouv.fr\u002Fconv_coll\u002Fsearch\u002F#\u002F?convTypes=IDCC&idcc=303\" target=\"_blank\" rel=\"noopener\">Légifrance\u003C\u002Fa>.\n    Grille de salaires indicative — vérifiez les derniers avenants signés.\n    Pour validation légale\n  \u003C\u002Fp>\n\u003C\u002Fmain>\n\n\u003Cscript>\n\u002F* ─── Formatters ─── *\u002F\nconst eur = n => new Intl.NumberFormat('fr-FR', { style: 'currency', currency: 'EUR', maximumFractionDigits: 0 }).format(n);\nconst eurDec = n => new Intl.NumberFormat('fr-FR', { style: 'currency', currency: 'EUR', minimumFractionDigits: 2, maximumFractionDigits: 2 }).format(n);\nconst pct = n => new Intl.NumberFormat('fr-FR', { style: 'percent', maximumFractionDigits: 0 }).format(n \u002F 100);\n\n\u002F* ─── State ─── *\u002F\nconst state = {\n  preavis: { groupe: '6', anciennete: 5, age: 45 },\n  salaireMin: { niveau: 1970, heures: 35 },\n  prime: { salaire: 2500, anciennete: 5, statut: 'standard' },\n  conges: { anciennete: 10, cond: 'standard', mois: 12, mineur: false },\n  heuresSupp: { taux: 16, h25: 4, h50: 0, hColl: 0 }\n};\n\n\u002F* ─── PRÉAVIS ─── *\u002F\nfunction computePreavis() {\n  const { groupe, anciennete, age } = state.preavis;\n  let duree = '';\n  let hasSix = false;\n\n  if (groupe === '6') {\n    if (anciennete >= 10 && age >= 50) {\n      duree = '4 mois';\n    } else {\n      duree = '3 mois';\n    }\n    hasSix = true;\n  } else {\n    if (anciennete \u003C 0.5) {\n      duree = '1 semaine';\n      hasSix = false;\n    } else if (anciennete \u003C 2) {\n      duree = '1 mois';\n      hasSix = true;\n    } else {\n      duree = '2 mois';\n      hasSix = true;\n    }\n  }\n\n  document.getElementById('p-duration').textContent = duree;\n  document.getElementById('p-sub').textContent = hasSix\n    ? '+ 6 jours ouvrés payés pour recherche d\\'emploi'\n    : 'Ancienneté insuffisante pour les jours de recherche d\\'emploi';\n  document.getElementById('p-age-field').style.display = groupe === '6' ? 'block' : 'none';\n}\n\n\u002F* Pills: Préavis groupe *\u002F\ndocument.querySelectorAll('#p-groupe .pill').forEach(btn => {\n  btn.addEventListener('click', () => {\n    document.querySelectorAll('#p-groupe .pill').forEach(b => b.classList.remove('selected'));\n    btn.classList.add('selected');\n    state.preavis.groupe = btn.dataset.val;\n    computePreavis();\n    triggerResize();\n  });\n});\n\ndocument.getElementById('p-anciennete').addEventListener('input', e => {\n  const v = +e.target.value;\n  state.preavis.anciennete = v;\n  document.getElementById('p-anciennete-val').textContent = v === 1 ? '1 an' : v + ' ans';\n  computePreavis();\n});\n\ndocument.getElementById('p-age').addEventListener('input', e => {\n  const v = +e.target.value;\n  state.preavis.age = v;\n  document.getElementById('p-age-val').textContent = v + ' ans';\n  computePreavis();\n});\n\n\u002F* ─── SALAIRE MIN ─── *\u002F\nconst SMIC_2025 = 1801.80;\n\nfunction computeSalaireMin() {\n  const base35 = state.salaireMin.niveau;\n  const heures = state.salaireMin.heures;\n  const prorata = base35 * (heures \u002F 35);\n  const smicProrata = SMIC_2025 * (heures \u002F 35);\n\n  document.getElementById('s-result-val').textContent = eur(Math.round(prorata));\n  document.getElementById('s-result-sub').textContent = `brut \u002F mois — base ${heures}h`;\n  document.getElementById('s-smic').textContent = new Intl.NumberFormat('fr-FR', { style: 'currency', currency: 'EUR', minimumFractionDigits: 2 }).format(smicProrata);\n  const ecart = prorata - smicProrata;\n  document.getElementById('s-ecart').textContent = (ecart >= 0 ? '+ ' : '- ') + eur(Math.abs(Math.round(ecart)));\n}\n\ndocument.getElementById('s-niveau').addEventListener('change', e => {\n  state.salaireMin.niveau = +e.target.value;\n  computeSalaireMin();\n});\n\ndocument.querySelectorAll('#s-heures .pill').forEach(btn => {\n  btn.addEventListener('click', () => {\n    document.querySelectorAll('#s-heures .pill').forEach(b => b.classList.remove('selected'));\n    btn.classList.add('selected');\n    state.salaireMin.heures = +btn.dataset.val;\n    computeSalaireMin();\n  });\n});\n\n\u002F* ─── PRIME ANNUELLE ─── *\u002F\nfunction getAncienneteRate(a) {\n  if (a \u003C 3) return 0;\n  if (a \u003C 6) return 3;\n  if (a \u003C 9) return 6;\n  if (a \u003C 12) return 9;\n  if (a \u003C 15) return 12;\n  return 15;\n}\n\nfunction computePrime() {\n  const { salaire, anciennete, statut } = state.prime;\n  const exclu = statut === 'exclu';\n\n  \u002F\u002F 13e mois = 1 mois de salaire de base\n  document.getElementById('pa-result-13').textContent = eur(salaire);\n  document.getElementById('pa-result-sub').textContent = exclu\n    ? 'Moitié en juin + moitié en décembre'\n    : 'Moitié en juin + moitié en décembre (base salaire mensuel)';\n\n  if (exclu) {\n    document.getElementById('pa-prime-val').textContent = 'Exonéré';\n    document.getElementById('pa-prime-montant').textContent = '— €';\n    document.getElementById('pa-exclu-msg').style.display = 'inline-flex';\n  } else {\n    const rate = getAncienneteRate(anciennete);\n    const montantMensuel = salaire * rate \u002F 100;\n    const montantAnnuel = montantMensuel * 12;\n    document.getElementById('pa-prime-val').textContent = '+ ' + rate + ' %';\n    document.getElementById('pa-prime-montant').textContent = eur(Math.round(montantAnnuel));\n    document.getElementById('pa-exclu-msg').style.display = 'none';\n  }\n}\n\ndocument.getElementById('pa-salaire').addEventListener('input', e => {\n  const v = +e.target.value;\n  state.prime.salaire = v;\n  document.getElementById('pa-salaire-val').textContent = eur(v);\n  computePrime();\n});\n\ndocument.getElementById('pa-anciennete').addEventListener('input', e => {\n  const v = +e.target.value;\n  state.prime.anciennete = v;\n  document.getElementById('pa-anciennete-val').textContent = v === 1 ? '1 an' : v + ' ans';\n  computePrime();\n});\n\ndocument.querySelectorAll('#pa-statut .pill').forEach(btn => {\n  btn.addEventListener('click', () => {\n    document.querySelectorAll('#pa-statut .pill').forEach(b => b.classList.remove('selected'));\n    btn.classList.add('selected');\n    state.prime.statut = btn.dataset.val;\n    computePrime();\n  });\n});\n\n\u002F* ─── CONGÉS ─── *\u002F\nfunction computeConges() {\n  const { anciennete, cond, mois, mineur } = state.conges;\n\n  let base = 25;\n  let extra = 0;\n  let details = [];\n\n  \u002F\u002F Ancienneté\n  if (anciennete >= 30) { extra += 6; details.push('+6 j ancienneté (≥30 ans)'); }\n  else if (anciennete >= 25) { extra += 5; details.push('+5 j ancienneté (≥25 ans)'); }\n\n  \u002F\u002F Conditions spéciales (0.5 j\u002Fmois)\n  if (cond !== 'standard') {\n    const jSpec = Math.round(mois * 0.5 * 2) \u002F 2;\n    extra += jSpec;\n    details.push('+' + jSpec + ' j conditions spéciales (' + mois + ' mois)');\n  }\n\n  \u002F\u002F Jeunes \u003C 18 ans\n  if (mineur) { extra += 6; details.push('+6 j (salarié \u003C 18 ans)'); }\n\n  const total = base + extra;\n  document.getElementById('c-result').textContent = total + ' jours';\n  document.getElementById('c-sub').textContent = total > 25\n    ? details.join(' · ')\n    : 'jours ouvrés — base légale (code du travail)';\n  document.getElementById('c-extra').textContent = (extra > 0 ? '+' : '') + extra + ' j';\n\n  \u002F\u002F Show\u002Fhide mois field\n  document.getElementById('c-mois-field').style.display = cond !== 'standard' ? 'block' : 'none';\n}\n\ndocument.getElementById('c-anciennete').addEventListener('input', e => {\n  const v = +e.target.value;\n  state.conges.anciennete = v;\n  document.getElementById('c-anciennete-val').textContent = v === 1 ? '1 an' : v + ' ans';\n  computeConges();\n  triggerResize();\n});\n\ndocument.querySelectorAll('#c-cond .pill').forEach(btn => {\n  btn.addEventListener('click', () => {\n    document.querySelectorAll('#c-cond .pill').forEach(b => b.classList.remove('selected'));\n    btn.classList.add('selected');\n    state.conges.cond = btn.dataset.val;\n    computeConges();\n    triggerResize();\n  });\n});\n\ndocument.getElementById('c-mois').addEventListener('input', e => {\n  const v = +e.target.value;\n  state.conges.mois = v;\n  document.getElementById('c-mois-val').textContent = v === 1 ? '1 mois' : v + ' mois';\n  computeConges();\n});\n\ndocument.getElementById('c-mineur').addEventListener('change', e => {\n  state.conges.mineur = e.target.checked;\n  computeConges();\n});\n\n\u002F* ─── HEURES SUPP ─── *\u002F\nfunction computeHeuresSupp() {\n  const { taux, h25, h50, hColl } = state.heuresSupp;\n\n  const m25 = taux * h25 * 0.25;\n  const m50 = taux * h50 * 0.50;\n  const mColl = taux * hColl * 0.50;\n  const totalMaj = m25 + m50 + mColl;\n  const salaireBase = taux * (h25 + h50 + hColl);\n  const total = salaireBase + totalMaj;\n\n  document.getElementById('hs-result').textContent = eurDec(totalMaj);\n  document.getElementById('hs-sub').textContent = 'salaire brut total heures supp : ' + eurDec(total);\n  document.getElementById('hs-m25').textContent = eurDec(m25);\n  document.getElementById('hs-m50').textContent = eurDec(m50 + mColl);\n}\n\ndocument.getElementById('hs-taux').addEventListener('input', e => {\n  const v = +e.target.value;\n  state.heuresSupp.taux = v;\n  document.getElementById('hs-taux-val').textContent = v.toFixed(2).replace('.', ',') + ' €\u002Fh';\n  computeHeuresSupp();\n});\n\ndocument.getElementById('hs-25').addEventListener('input', e => {\n  const v = +e.target.value;\n  state.heuresSupp.h25 = v;\n  document.getElementById('hs-25-val').textContent = v.toFixed(1).replace('.', ',') + ' h';\n  computeHeuresSupp();\n});\n\ndocument.getElementById('hs-50').addEventListener('input', e => {\n  const v = +e.target.value;\n  state.heuresSupp.h50 = v;\n  document.getElementById('hs-50-val').textContent = v.toFixed(1).replace('.', ',') + ' h';\n  computeHeuresSupp();\n});\n\ndocument.getElementById('hs-coll').addEventListener('input', e => {\n  const v = +e.target.value;\n  state.heuresSupp.hColl = v;\n  document.getElementById('hs-coll-val').textContent = v.toFixed(1).replace('.', ',') + ' h';\n  computeHeuresSupp();\n});\n\n\u002F* ─── Tabs ─── *\u002F\nconst tabBtns = document.querySelectorAll('[data-tab]');\nconst tabPanels = document.querySelectorAll('[data-panel]');\n\nfunction activate(id) {\n  tabBtns.forEach(t => t.classList.toggle('active', t.dataset.tab === id));\n  tabPanels.forEach(p => p.classList.toggle('active', p.dataset.panel === id));\n  if (location.hash !== '#' + id) location.hash = id;\n  requestAnimationFrame(() => {\n    window.dispatchEvent(new Event('resize'));\n    triggerResize();\n  });\n}\n\ntabBtns.forEach(t => t.addEventListener('click', () => activate(t.dataset.tab)));\n\n\u002F* ─── Init ─── *\u002F\nfunction triggerResize() {\n  const h = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight);\n  parent.postMessage({ type: 'resize', height: h }, '*');\n}\n\nconst ro = new ResizeObserver(() => triggerResize());\nro.observe(document.documentElement);\n\nwindow.addEventListener('load', () => {\n  lucide.createIcons();\n\n  \u002F\u002F Activate tab from hash or default\n  const hashTab = location.hash.slice(1);\n  const validTab = document.querySelector(`[data-tab=\"${hashTab}\"]`);\n  activate(validTab ? hashTab : 'preavis');\n\n  \u002F\u002F Init all computes\n  computePreavis();\n  computeSalaireMin();\n  computePrime();\n  computeConges();\n  computeHeuresSupp();\n\n  triggerResize();\n});\n\u003C\u002Fscript>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n","generated","juridique","consumer","both","https:\u002F\u002Fpub-bdebbd2dad294475a2da0eb657815b6b.r2.dev\u002Ftools\u002Fccn-couture-parisienne-ca1f6231e8.webp",[]]