[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"footer-root-categories-fr-FR":3,"tool-content-ccn-commerce-de-detail-alimentaire-non-specialise-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-commerce-de-detail-alimentaire-non-specialise","CCN du commerce de détail alimentaire non spécialisé — calculateur complet","Calculateur CCN Commerce de détail alimentaire non spécialisé IDCC 1505 | Expert Zoom","Outil interactif couvrant préavis de licenciement et grille salariale conventionnelle de la CCN du commerce de détail alimentaire non spécialisé (IDCC 1505).","Ce calculateur couvre les deux principales dérogations de la CCN IDCC 1505 par rapport au Code du travail : la durée du préavis de licenciement selon la catégorie et l'ancienneté (onglet Préavis) et la grille salariale conventionnelle avec 11 niveaux classés en employés, agents de maîtrise et cadres (onglet Grille salariale). Les autres dispositions (indemnité de licenciement, congés payés, heures supplémentaires) suivent les minima légaux.",[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 Commerce de détail alimentaire non spécialisé — IDCC 1505","WebApplication",{"name":94,"@type":95,"identifier":96},"Convention collective du commerce de détail alimentaire non spécialisé","Thing","IDCC 1505",{"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 la durée du préavis de licenciement et la grille salariale conventionnelle de la convention collective du commerce de détail alimentaire non spécialisé (IDCC 1505).","All","FinanceApplication",true,[110,113,116,119,122,125,128,131],{"a":111,"q":112},"Selon l'article 20 de la CCN IDCC 1505, la durée du préavis est : 1 mois pour les employés ayant moins de 2 ans d'ancienneté, 2 mois pour les employés avec 2 ans ou plus d'ancienneté, 2 mois pour les agents de maîtrise, et 3 mois pour les cadres. Pour les travailleurs handicapés, la durée est doublée dans la limite de 3 mois.","Quelle est la durée du préavis de licenciement dans la convention collective du commerce de détail alimentaire non spécialisé (IDCC 1505) ?",{"a":114,"q":115},"La CCN IDCC 1505 prévoit une grille salariale conventionnelle issue de l'accord du 7 mars 2024. Les salaires minima vont de 12,063 €\u002Fh (niveau E1) à 12,882 €\u002Fh (niveau E5++) pour les employés, de 16,023 €\u002Fh (AM1) à 16,296 €\u002Fh (AM2) pour les agents de maîtrise, et de 19,929 €\u002Fh (C1) à 22,077 €\u002Fh (C2) pour les cadres. Ces minima sont supérieurs au SMIC et s'imposent à tous les employeurs de la branche.","Quel est le salaire minimum dans la CCN commerce de détail alimentaire non spécialisé ?",{"a":117,"q":118},"Non, la convention collective du commerce de détail alimentaire non spécialisé (IDCC 1505) ne prévoit pas de 13ème mois ni de prime annuelle obligatoire. Un tel avantage ne peut exister que s'il est prévu par l'accord d'entreprise, le contrat de travail individuel ou un usage établi dans l'entreprise.","La CCN 1505 prévoit-elle un 13ème mois ou une prime annuelle obligatoire ?",{"a":120,"q":121},"La CCN IDCC 1505 suit le minimum légal de 30 jours ouvrables par an (5 semaines), sans jours supplémentaires liés à l'ancienneté. Des jours d'absence autorisée pour événements familiaux (mariage, naissance, décès) sont prévus par la convention.","Combien de jours de congés payés prévoit la CCN commerce de détail alimentaire non spécialisé ?",{"a":123,"q":124},"La CCN IDCC 1505 applique les taux légaux du Code du travail : +25 % pour les heures entre la 36e et la 43e heure, et +50 % au-delà de la 43e heure (ou repos compensateur équivalent). Le contingent annuel est fixé à 180 heures.","Quelle est la majoration pour heures supplémentaires dans la CCN 1505 ?",{"a":126,"q":127},"Oui, en cas de démission, les durées de préavis sont généralement plus courtes. La CCN IDCC 1505 précise les durées en cas de licenciement ; pour la démission, les délais légaux ou les stipulations du contrat de travail s'appliquent. Il est conseillé de vérifier le contrat individuel ou de contacter un expert en droit du travail.","Le préavis est-il différent en cas de démission pour la CCN 1505 ?",{"a":129,"q":130},"La CCN IDCC 1505 applique le barème légal de l'article L1234-9 du Code du travail : 1\u002F4 de mois de salaire brut par année d'ancienneté pour les 10 premières années, puis 1\u002F3 de mois par année au-delà de 10 ans. L'ancienneté minimale requise est de 8 mois. Le salaire de référence retenu est le plus favorable entre 1\u002F12 des 12 derniers mois ou 1\u002F3 des 3 derniers mois.","Comment calcule-t-on l'indemnité de licenciement dans la CCN commerce de détail alimentaire non spécialisé ?",{"a":132,"q":133},"Les niveaux E5+ (12,785 €\u002Fh) et E5++ (12,882 €\u002Fh) correspondent aux employés polyvalents les plus expérimentés dans la grille CCN 1505, positionnés au-dessus du niveau E5 standard (12,486 €\u002Fh). Ces échelons reconnaissent une expertise ou une responsabilité accrue sans statut de cadre ou d'agent de maîtrise.","Quel est le niveau de classification E5+ et E5++ dans la grille salariale CCN 1505 ?","\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 Commerce de détail alimentaire non spécialisé — IDCC 1505\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      --surface: #ffffff;\n      --border: #e7e5e4;\n      --accent: #2563eb;\n      --accent-light: #eff6ff;\n      --accent-hover: #1d4ed8;\n      --text: #1c1917;\n      --text-muted: #78716c;\n      --radius: 0.75rem;\n      --shadow: 0 1px 3px rgba(0,0,0,.08), 0 1px 2px rgba(0,0,0,.06);\n      --shadow-md: 0 4px 6px rgba(0,0,0,.07), 0 2px 4px 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: 0.9rem;\n      line-height: 1.5;\n    }\n\n    .tool-root {\n      max-width: 700px;\n      margin: 0 auto;\n      padding: 1.25rem 1rem 2rem;\n    }\n\n    .tool-header {\n      margin-bottom: 1.25rem;\n    }\n\n    .tool-title {\n      font-size: 1.15rem;\n      font-weight: 700;\n      color: var(--text);\n      line-height: 1.3;\n    }\n\n    .tool-idcc {\n      display: inline-block;\n      margin-top: 0.35rem;\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: 9999px;\n      letter-spacing: .02em;\n    }\n\n    \u002F* Tabs *\u002F\n    .tab-bar {\n      display: flex;\n      gap: 0.25rem;\n      border-bottom: 2px solid var(--border);\n      margin-bottom: 1.25rem;\n      overflow-x: auto;\n      scrollbar-width: none;\n    }\n    .tab-bar::-webkit-scrollbar { display: none; }\n\n    .tab-btn {\n      display: flex;\n      align-items: center;\n      gap: 0.4rem;\n      padding: 0.55rem 0.9rem;\n      border: none;\n      background: transparent;\n      color: var(--text-muted);\n      font-size: 0.82rem;\n      font-weight: 500;\n      cursor: pointer;\n      border-bottom: 2px solid transparent;\n      margin-bottom: -2px;\n      white-space: nowrap;\n      border-radius: 0.35rem 0.35rem 0 0;\n      transition: color .15s, border-color .15s, background .15s;\n    }\n    .tab-btn:hover { color: var(--accent); background: var(--accent-light); }\n    .tab-btn.active {\n      color: var(--accent);\n      border-bottom-color: var(--accent);\n      font-weight: 600;\n    }\n    .tab-btn svg { width: 15px; height: 15px; flex-shrink: 0; }\n\n    \u002F* Panels *\u002F\n    .panel { display: none; }\n    .panel.active { display: block; }\n\n    \u002F* Rule callout *\u002F\n    .rule-callout {\n      display: flex;\n      gap: 0.65rem;\n      align-items: flex-start;\n      background: var(--accent-light);\n      border: 1px solid #bfdbfe;\n      border-radius: var(--radius);\n      padding: 0.8rem 1rem;\n      margin-bottom: 1.25rem;\n    }\n    .rule-callout svg { width: 17px; height: 17px; color: var(--accent); flex-shrink: 0; margin-top: 1px; }\n    .rule-callout p { font-size: 0.82rem; color: #1e3a8a; line-height: 1.5; }\n    .rule-callout strong { font-weight: 600; }\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.1rem 1.25rem;\n      box-shadow: var(--shadow);\n      margin-bottom: 1rem;\n    }\n\n    .card-title {\n      font-size: 0.78rem;\n      font-weight: 600;\n      text-transform: uppercase;\n      letter-spacing: .06em;\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\n    .field-label {\n      display: flex;\n      justify-content: space-between;\n      align-items: baseline;\n      margin-bottom: 0.4rem;\n      font-size: 0.82rem;\n      font-weight: 500;\n    }\n    .field-label span { color: var(--text-muted); font-weight: 400; font-variant-numeric: tabular-nums; }\n\n    input[type=\"range\"] {\n      -webkit-appearance: none;\n      appearance: none;\n      width: 100%;\n      height: 5px;\n      background: var(--border);\n      border-radius: 9999px;\n      outline: none;\n    }\n    input[type=\"range\"]::-webkit-slider-thumb {\n      -webkit-appearance: none;\n      width: 18px; height: 18px;\n      background: var(--accent);\n      border-radius: 50%;\n      cursor: pointer;\n      border: 2px solid white;\n      box-shadow: 0 1px 3px rgba(0,0,0,.2);\n    }\n    input[type=\"range\"]::-moz-range-thumb {\n      width: 18px; height: 18px;\n      background: var(--accent);\n      border-radius: 50%;\n      cursor: pointer;\n      border: 2px solid white;\n      box-shadow: 0 1px 3px rgba(0,0,0,.2);\n    }\n\n    \u002F* Pills *\u002F\n    .pill-group { display: flex; flex-wrap: wrap; gap: 0.4rem; }\n    .pill {\n      padding: 0.35rem 0.75rem;\n      border: 1.5px solid var(--border);\n      border-radius: 9999px;\n      font-size: 0.78rem;\n      font-weight: 500;\n      cursor: pointer;\n      background: var(--surface);\n      color: var(--text-muted);\n      transition: all .15s;\n    }\n    .pill.active {\n      background: var(--accent);\n      border-color: var(--accent);\n      color: white;\n    }\n    .pill:hover:not(.active) { border-color: var(--accent); color: var(--accent); }\n\n    \u002F* Select *\u002F\n    select {\n      width: 100%;\n      padding: 0.5rem 0.75rem;\n      border: 1.5px solid var(--border);\n      border-radius: 0.5rem;\n      font-size: 0.83rem;\n      background: var(--surface);\n      color: var(--text);\n      cursor: pointer;\n      outline: none;\n      transition: border-color .15s;\n    }\n    select:focus { border-color: var(--accent); }\n\n    \u002F* Result card *\u002F\n    .result-card {\n      background: linear-gradient(135deg, var(--accent) 0%, #1d4ed8 100%);\n      color: white;\n      border-radius: var(--radius);\n      padding: 1.25rem 1.5rem;\n      margin-bottom: 1rem;\n      box-shadow: var(--shadow-md);\n    }\n    .result-label { font-size: 0.75rem; font-weight: 500; opacity: 0.85; margin-bottom: 0.3rem; }\n    .result-value { font-size: 1.9rem; font-weight: 700; font-variant-numeric: tabular-nums; letter-spacing: -0.02em; }\n    .result-sub { font-size: 0.75rem; opacity: 0.8; margin-top: 0.35rem; }\n\n    \u002F* Salary grid table *\u002F\n    .salary-table { width: 100%; border-collapse: collapse; font-size: 0.8rem; }\n    .salary-table th {\n      text-align: left;\n      padding: 0.45rem 0.6rem;\n      background: var(--bg);\n      font-weight: 600;\n      font-size: 0.74rem;\n      text-transform: uppercase;\n      letter-spacing: .05em;\n      color: var(--text-muted);\n      border-bottom: 2px solid var(--border);\n    }\n    .salary-table td {\n      padding: 0.45rem 0.6rem;\n      border-bottom: 1px solid var(--border);\n      font-variant-numeric: tabular-nums;\n    }\n    .salary-table tr:last-child td { border-bottom: none; }\n    .salary-table tr.highlighted td { background: var(--accent-light); font-weight: 600; color: var(--accent); }\n    .salary-table .cat-header td {\n      background: #f5f5f4;\n      font-weight: 700;\n      font-size: 0.74rem;\n      color: var(--text-muted);\n      text-transform: uppercase;\n      letter-spacing: .04em;\n    }\n\n    \u002F* Toggle *\u002F\n    .toggle-row { display: flex; align-items: center; justify-content: space-between; }\n    .toggle-label { font-size: 0.82rem; font-weight: 500; }\n    .toggle-switch {\n      position: relative;\n      width: 42px; height: 24px;\n    }\n    .toggle-switch input { opacity: 0; width: 0; height: 0; }\n    .toggle-slider {\n      position: absolute; top: 0; left: 0; right: 0; bottom: 0;\n      background: var(--border);\n      border-radius: 9999px;\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 3px rgba(0,0,0,.15);\n    }\n    .toggle-switch input:checked + .toggle-slider { background: var(--accent); }\n    .toggle-switch input:checked + .toggle-slider::before { transform: translateX(18px); }\n\n    \u002F* Notice period grid *\u002F\n    .notice-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.6rem; }\n    .notice-item {\n      background: var(--bg);\n      border: 1px solid var(--border);\n      border-radius: 0.5rem;\n      padding: 0.7rem 0.8rem;\n    }\n    .notice-item.highlighted {\n      background: var(--accent-light);\n      border-color: #93c5fd;\n    }\n    .notice-item .ni-label { font-size: 0.72rem; color: var(--text-muted); font-weight: 500; margin-bottom: 0.2rem; }\n    .notice-item .ni-val { font-size: 1rem; font-weight: 700; color: var(--text); font-variant-numeric: tabular-nums; }\n    .notice-item.highlighted .ni-val { color: var(--accent); }\n\n    \u002F* Disclaimer *\u002F\n    .disclaimer {\n      font-size: 0.74rem;\n      color: var(--text-muted);\n      line-height: 1.5;\n      padding: 0.85rem 1rem;\n      background: var(--bg);\n      border: 1px solid var(--border);\n      border-radius: 0.5rem;\n      margin-top: 1rem;\n    }\n    .disclaimer a { color: var(--accent); text-decoration: underline; }\n\n    @media (max-width: 480px) {\n      .notice-grid { grid-template-columns: 1fr; }\n      .result-value { font-size: 1.55rem; }\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\u003Cbody>\n\u003C!-- CCN IDCC 1505 — deviations\n     preavis: L1234-1 → employés \u003C2 ans: 1 mois, ≥2 ans: 2 mois; AM: 2 mois; cadres: 3 mois (source: art. 20 CCN 1505)\n     salaire-min: grille conventionnelle E1–E5++, AM1–AM2, C1–C2 > SMIC (source: Accord du 7 mars 2024, Légifrance IDCC 1505)\n     indemnite: conforme L1234-9 (1\u002F4 × ans ≤10 + 1\u002F3 × ans >10) — aucune déviation, pas de tab\n     conges: conforme L3141-3 30j ouvrables — pas de déviation\n     heures-supp: 25%\u002F50% conforme L3121-36 — pas de déviation\n     prime-annuelle: pas de 13e mois obligatoire — pas de déviation -->\n\n\u003Cmain class=\"tool-root\">\n\n  \u003Cdiv class=\"tool-header\">\n    \u003Cdiv class=\"tool-title\">CCN Commerce de détail alimentaire non spécialisé\u003C\u002Fdiv>\n    \u003Cspan class=\"tool-idcc\">\u003Ci data-lucide=\"bookmark\" style=\"display:inline;width:11px;height:11px;vertical-align:-1px;margin-right:3px;\">\u003C\u002Fi>IDCC 1505\u003C\u002Fspan>\n  \u003C\u002Fdiv>\n\n  \u003C!-- Tab bar -->\n  \u003Cdiv class=\"tab-bar\" role=\"tablist\">\n    \u003Cbutton class=\"tab-btn\" data-tab=\"preavis\" role=\"tab\" aria-selected=\"false\">\n      \u003Ci data-lucide=\"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  \u003C\u002Fdiv>\n\n  \u003C!-- ═══════════════════════════════════════════\n       TAB 1 — PRÉAVIS\n       ═══════════════════════════════════════════ -->\n  \u003Cdiv class=\"panel\" data-panel=\"preavis\">\n\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cp>L'article 20 de la CCN IDCC 1505 fixe des \u003Cstrong>durées de préavis précises\u003C\u002Fstrong> selon la catégorie et l'ancienneté, ce que le Code du travail (L1234-1) laisse à la négociation collective : 1 mois pour les employés &lt; 2 ans d'ancienneté, 2 mois au-delà, 2 mois pour les agents de maîtrise et 3 mois pour les cadres.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"card\">\n      \u003Cdiv class=\"card-title\">Votre situation\u003C\u002Fdiv>\n\n      \u003Cdiv class=\"field\">\n        \u003Cdiv class=\"field-label\">Catégorie professionnelle\u003C\u002Fdiv>\n        \u003Cdiv class=\"pill-group\" id=\"p-categorie\">\n          \u003Cbutton class=\"pill active\" data-val=\"employe\">Employé(e)\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"am\">Agent de maîtrise\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"cadre\">Cadre\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n\n      \u003Cdiv class=\"field\" id=\"p-anciennete-field\">\n        \u003Cdiv class=\"field-label\">\n          Ancienneté\n          \u003Cspan id=\"p-anc-val\">0 an\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n        \u003Cinput type=\"range\" id=\"p-anciennete\" min=\"0\" max=\"30\" value=\"0\" step=\"1\">\n      \u003C\u002Fdiv>\n\n      \u003Cdiv class=\"field\" id=\"p-handicap-field\">\n        \u003Cdiv class=\"toggle-row\">\n          \u003Cspan class=\"toggle-label\">Travailleur(se) handicapé(e)\u003C\u002Fspan>\n          \u003Clabel class=\"toggle-switch\">\n            \u003Cinput type=\"checkbox\" id=\"p-handicap\">\n            \u003Cspan class=\"toggle-slider\">\u003C\u002Fspan>\n          \u003C\u002Flabel>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"notice-grid\" id=\"p-notice-grid\">\n      \u003C!-- filled by JS -->\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card\" id=\"p-result-card\">\n      \u003Cdiv class=\"result-label\">Durée du préavis de licenciement\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"p-result-val\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"p-result-sub\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n  \u003C\u002Fdiv>\u003C!-- \u002Fpanel preavis -->\n\n  \u003C!-- ═══════════════════════════════════════════\n       TAB 2 — SALAIRE MINIMUM\n       ═══════════════════════════════════════════ -->\n  \u003Cdiv class=\"panel\" data-panel=\"salaire-min\">\n\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\">\u003C\u002Fi>\n      \u003Cp>La CCN IDCC 1505 publie une \u003Cstrong>grille salariale conventionnelle\u003C\u002Fstrong> (accord du 7 mars 2024) avec 9 niveaux répartis en 3 catégories (Employé·e, Agent de maîtrise, Cadre), tous supérieurs au SMIC. Ces minima sont \u003Cstrong>obligatoires\u003C\u002Fstrong> pour les employeurs relevant de la branche.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"card\">\n      \u003Cdiv class=\"card-title\">Simulateur de salaire minimum\u003C\u002Fdiv>\n\n      \u003Cdiv class=\"field\">\n        \u003Cdiv class=\"field-label\">Catégorie\u003C\u002Fdiv>\n        \u003Cdiv class=\"pill-group\" id=\"sm-categorie\">\n          \u003Cbutton class=\"pill active\" data-val=\"employe\">Employé(e)\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"am\">Agent de maîtrise\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"cadre\">Cadre\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n\n      \u003Cdiv class=\"field\">\n        \u003Cdiv class=\"field-label\">Niveau \u002F Échelon\u003C\u002Fdiv>\n        \u003Cselect id=\"sm-niveau\">\u003C\u002Fselect>\n      \u003C\u002Fdiv>\n\n      \u003Cdiv class=\"field\">\n        \u003Cdiv class=\"field-label\">\n          Heures hebdomadaires\n          \u003Cspan id=\"sm-heures-val\">35 h\u002Fsem\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n        \u003Cinput type=\"range\" id=\"sm-heures\" min=\"24\" max=\"48\" value=\"35\" step=\"1\">\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card\" id=\"sm-result-card\">\n      \u003Cdiv class=\"result-label\">Salaire minimum brut mensuel\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"sm-result-val\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"sm-result-sub\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"card\" style=\"margin-top:0.5rem;\">\n      \u003Cdiv class=\"card-title\">Grille complète (base 35h\u002Fsem) — 2025\u003C\u002Fdiv>\n      \u003Ctable class=\"salary-table\" id=\"sm-full-table\">\n        \u003Cthead>\n          \u003Ctr>\n            \u003Cth>Niveau\u003C\u002Fth>\n            \u003Cth>Taux horaire\u003C\u002Fth>\n            \u003Cth>Mensuel brut\u003C\u002Fth>\n          \u003C\u002Ftr>\n        \u003C\u002Fthead>\n        \u003Ctbody id=\"sm-table-body\">\u003C\u002Ftbody>\n      \u003C\u002Ftable>\n    \u003C\u002Fdiv>\n\n  \u003C\u002Fdiv>\u003C!-- \u002Fpanel salaire-min -->\n\n  \u003C!-- Disclaimer partagé -->\n  \u003Cp class=\"disclaimer\">\n    \u003Ci data-lucide=\"alert-circle\" style=\"display:inline;width:12px;height:12px;vertical-align:-1px;margin-right:4px;\">\u003C\u002Fi>\n    Calcul indicatif basé sur la CCN IDCC 1505 (accord salarial du 7 mars 2024).\n    Source&nbsp;: \u003Ca href=\"https:\u002F\u002Fwww.legifrance.gouv.fr\u002Fconv_coll\u002Fid\u002FKALICONT000005635421\" target=\"_blank\" rel=\"noopener\">Légifrance — CCN 1505\u003C\u002Fa>.\n    Pour toute validation légale\n  \u003C\u002Fp>\n\n\u003C\u002Fmain>\n\n\u003Cscript>\n(function () {\n  \u002F\u002F ─────────────────────────────────────────\n  \u002F\u002F DATA\n  \u002F\u002F ─────────────────────────────────────────\n  const SALARY_GRID = [\n    \u002F\u002F Employés\n    { cat: 'employe', label: 'E1', hourly: 12.063 },\n    { cat: 'employe', label: 'E2', hourly: 12.134 },\n    { cat: 'employe', label: 'E3', hourly: 12.147 },\n    { cat: 'employe', label: 'E4', hourly: 12.400 },\n    { cat: 'employe', label: 'E5', hourly: 12.486 },\n    { cat: 'employe', label: 'E5+', hourly: 12.785 },\n    { cat: 'employe', label: 'E5++', hourly: 12.882 },\n    \u002F\u002F Agents de maîtrise\n    { cat: 'am', label: 'AM1', hourly: 16.023 },\n    { cat: 'am', label: 'AM2', hourly: 16.296 },\n    \u002F\u002F Cadres\n    { cat: 'cadre', label: 'C1', hourly: 19.929 },\n    { cat: 'cadre', label: 'C2', hourly: 22.077 },\n  ];\n\n  const FMT_EUR = new Intl.NumberFormat('fr-FR', { style: 'currency', currency: 'EUR', maximumFractionDigits: 2 });\n  const FMT_NUM = new Intl.NumberFormat('fr-FR', { maximumFractionDigits: 2 });\n  const SMIC_HOURLY = 11.88; \u002F\u002F SMIC 2025\n\n  \u002F\u002F ─────────────────────────────────────────\n  \u002F\u002F TAB LOGIC\n  \u002F\u002F ─────────────────────────────────────────\n  const tabBtns  = document.querySelectorAll('[data-tab]');\n  const panels   = document.querySelectorAll('[data-panel]');\n\n  function activate(id) {\n    tabBtns.forEach(t => {\n      const match = t.dataset.tab === id;\n      t.classList.toggle('active', match);\n      t.setAttribute('aria-selected', match ? 'true' : 'false');\n    });\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  }\n\n  tabBtns.forEach(t => t.addEventListener('click', () => activate(t.dataset.tab)));\n\n  const hashTab = location.hash.slice(1);\n  const firstTabId = tabBtns[0] ? tabBtns[0].dataset.tab : 'preavis';\n  activate(document.querySelector('[data-tab=\"' + hashTab + '\"]') ? hashTab : firstTabId);\n\n  \u002F\u002F ─────────────────────────────────────────\n  \u002F\u002F PRÉAVIS TAB\n  \u002F\u002F ─────────────────────────────────────────\n  const pState = { categorie: 'employe', anciennete: 0, handicap: false };\n\n  function computePreavis(s) {\n    let months;\n    if (s.categorie === 'employe') {\n      months = s.anciennete \u003C 2 ? 1 : 2;\n    } else if (s.categorie === 'am') {\n      months = 2;\n    } else { \u002F\u002F cadre\n      months = 3;\n    }\n\n    \u002F\u002F Travailleur handicapé: doubled, max 3 months\n    let baseMonths = months;\n    let handicapLabel = null;\n    if (s.handicap) {\n      const doubled = months * 2;\n      months = Math.min(doubled, 3);\n      if (doubled > 3) {\n        handicapLabel = 'Doublement plafonné à 3 mois (art. L5213-9)';\n      } else {\n        handicapLabel = 'Durée doublée (travailleur handicapé)';\n      }\n    }\n    return { months, baseMonths, handicapLabel };\n  }\n\n  function renderPreavis() {\n    const r = computePreavis(pState);\n\n    \u002F\u002F Result card\n    const weeks = r.months === 1 ? '4 semaines' : r.months === 2 ? '8 semaines' : '12 semaines';\n    document.getElementById('p-result-val').textContent = r.months + (r.months === 1 ? ' mois' : ' mois');\n    document.getElementById('p-result-sub').textContent = r.handicapLabel\n      ? r.handicapLabel\n      : 'Catégorie : ' + { employe: 'Employé(e)', am: 'Agent de maîtrise', cadre: 'Cadre' }[pState.categorie]\n        + (pState.categorie === 'employe' ? ' — ' + (pState.anciennete \u003C 2 ? '\u003C 2 ans d\\'ancienneté' : '≥ 2 ans d\\'ancienneté') : '');\n\n    \u002F\u002F Notice grid — show full table for reference\n    const grid = document.getElementById('p-notice-grid');\n    const items = [\n      { label: 'Employé(e) — \u003C 2 ans', val: '1 mois', highlight: pState.categorie === 'employe' && pState.anciennete \u003C 2 },\n      { label: 'Employé(e) — ≥ 2 ans', val: '2 mois', highlight: pState.categorie === 'employe' && pState.anciennete >= 2 },\n      { label: 'Agent de maîtrise', val: '2 mois', highlight: pState.categorie === 'am' },\n      { label: 'Cadre', val: '3 mois', highlight: pState.categorie === 'cadre' },\n    ];\n    grid.innerHTML = items.map(it => `\n      \u003Cdiv class=\"notice-item${it.highlight ? ' highlighted' : ''}\">\n        \u003Cdiv class=\"ni-label\">${it.label}\u003C\u002Fdiv>\n        \u003Cdiv class=\"ni-val\">${it.val}\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    `).join('');\n\n    \u002F\u002F Show\u002Fhide ancienneté field only for employés\n    document.getElementById('p-anciennete-field').style.display = pState.categorie === 'employe' ? '' : 'none';\n\n    lucide.createIcons();\n    requestAnimationFrame(() => window.dispatchEvent(new Event('resize')));\n  }\n\n  \u002F\u002F Pill group for préavis categorie\n  document.getElementById('p-categorie').addEventListener('click', e => {\n    const pill = e.target.closest('.pill');\n    if (!pill) return;\n    document.querySelectorAll('#p-categorie .pill').forEach(p => p.classList.remove('active'));\n    pill.classList.add('active');\n    pState.categorie = pill.dataset.val;\n    renderPreavis();\n  });\n\n  \u002F\u002F Ancienneté slider\n  document.getElementById('p-anciennete').addEventListener('input', e => {\n    pState.anciennete = parseInt(e.target.value);\n    const val = pState.anciennete;\n    document.getElementById('p-anc-val').textContent = val === 0 ? 'Moins d\\'1 an' : val + (val === 1 ? ' an' : ' ans');\n    renderPreavis();\n  });\n\n  \u002F\u002F Handicap toggle\n  document.getElementById('p-handicap').addEventListener('change', e => {\n    pState.handicap = e.target.checked;\n    renderPreavis();\n  });\n\n  renderPreavis();\n\n  \u002F\u002F ─────────────────────────────────────────\n  \u002F\u002F SALAIRE MINIMUM TAB\n  \u002F\u002F ─────────────────────────────────────────\n  const smState = { categorie: 'employe', niveauIndex: 0, heures: 35 };\n\n  function getGridForCat(cat) {\n    return SALARY_GRID.filter(g => g.cat === cat);\n  }\n\n  function renderNiveauSelect() {\n    const sel = document.getElementById('sm-niveau');\n    const grid = getGridForCat(smState.categorie);\n    sel.innerHTML = grid.map((g, i) => `\u003Coption value=\"${i}\">${g.label}\u003C\u002Foption>`).join('');\n    sel.value = Math.min(smState.niveauIndex, grid.length - 1);\n    smState.niveauIndex = parseInt(sel.value);\n  }\n\n  function computeSalaire(s) {\n    const grid = getGridForCat(s.categorie);\n    const idx = Math.min(s.niveauIndex, grid.length - 1);\n    const row = grid[idx];\n    const weeklyHours = s.heures;\n    const monthlyHours = weeklyHours * 52 \u002F 12;\n    const monthly = row.hourly * monthlyHours;\n    return { row, monthly, monthlyHours, idx };\n  }\n\n  function renderSalaireMin() {\n    renderNiveauSelect();\n    const r = computeSalaire(smState);\n\n    document.getElementById('sm-result-val').textContent = FMT_EUR.format(r.monthly);\n    document.getElementById('sm-result-sub').textContent =\n      `Niveau ${r.row.label} — ${FMT_NUM.format(r.row.hourly)} €\u002Fh × ${FMT_NUM.format(r.monthlyHours)} h\u002Fmois`;\n\n    \u002F\u002F Full table\n    const CAT_LABELS = { employe: 'Employé(e)', am: 'Agent de maîtrise', cadre: 'Cadre' };\n    const CATS = ['employe', 'am', 'cadre'];\n    let html = '';\n    CATS.forEach(cat => {\n      html += `\u003Ctr class=\"cat-header\">\u003Ctd colspan=\"3\">${CAT_LABELS[cat]}\u003C\u002Ftd>\u003C\u002Ftr>`;\n      const rows = SALARY_GRID.filter(g => g.cat === cat);\n      rows.forEach(g => {\n        const monthly35 = g.hourly * 35 * 52 \u002F 12;\n        const isCurrent = g.label === r.row.label && cat === smState.categorie;\n        html += `\u003Ctr${isCurrent ? ' class=\"highlighted\"' : ''}>\n          \u003Ctd>${g.label}\u003C\u002Ftd>\n          \u003Ctd>${FMT_EUR.format(g.hourly)}\u003C\u002Ftd>\n          \u003Ctd>${FMT_EUR.format(monthly35)}\u003C\u002Ftd>\n        \u003C\u002Ftr>`;\n      });\n    });\n    document.getElementById('sm-table-body').innerHTML = html;\n\n    requestAnimationFrame(() => window.dispatchEvent(new Event('resize')));\n  }\n\n  \u002F\u002F Pill group for salaire categorie\n  document.getElementById('sm-categorie').addEventListener('click', e => {\n    const pill = e.target.closest('.pill');\n    if (!pill) return;\n    document.querySelectorAll('#sm-categorie .pill').forEach(p => p.classList.remove('active'));\n    pill.classList.add('active');\n    smState.categorie = pill.dataset.val;\n    smState.niveauIndex = 0;\n    renderSalaireMin();\n  });\n\n  document.getElementById('sm-niveau').addEventListener('change', e => {\n    smState.niveauIndex = parseInt(e.target.value);\n    renderSalaireMin();\n  });\n\n  document.getElementById('sm-heures').addEventListener('input', e => {\n    smState.heures = parseInt(e.target.value);\n    document.getElementById('sm-heures-val').textContent = smState.heures + ' h\u002Fsem';\n    renderSalaireMin();\n  });\n\n  renderSalaireMin();\n\n  \u002F\u002F ─────────────────────────────────────────\n  \u002F\u002F RESIZE OBSERVER (iframe height)\n  \u002F\u002F ─────────────────────────────────────────\n  lucide.createIcons();\n\n  const ro = new ResizeObserver(() => {\n    const h = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight);\n    parent.postMessage({ type: 'resize', height: h }, '*');\n  });\n  ro.observe(document.documentElement);\n\n  window.addEventListener('resize', () => {\n    const h = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight);\n    parent.postMessage({ type: 'resize', height: h }, '*');\n  });\n\n})();\n\u003C\u002Fscript>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n","generated","juridique","consumer","both","https:\u002F\u002Fpub-bdebbd2dad294475a2da0eb657815b6b.r2.dev\u002Ftools\u002Fccn-commerce-de-detail-alimentaire-non-specialise-b336f53054.webp",[]]