How to determine the fixed and variable salary of a salesperson?

Choosing the right sales status: employee or independent?

The choice of a salesperson’s status is a strategic step for the company, directly affecting their compensation, tax burden, responsibilities and ability to adapt to growth. The two main options are a salaried salesperson and an independent salesperson, such as a commercial agent or mandatary.

Simulator: Fixed & variable salary of a sales representative

Salaried sales representative Independent sales agent
Absolute (fixed rate) Progressive (thresholds) On margin
/* Ce script simule le calcul du salaire fixe et variable d’un commercial, selon plusieurs modèles de commission (absolue, progressive, sur la marge), statut (salarié/indépendant), volume de ventes et primes. Il affiche un camembert visuel pour une répartition claire. Toutes les chaînes sont en français, facilement éditables. Sans dépendance externe, performant et accessible. */ /** * Affichage dynamique des blocs selon le choix du modèle de commission */ function switchBlocCommission() { const mode = document.getElementById(‘commission-modele’).value; document.getElementById(‘bloc-absolue’).classList.toggle(“hidden”, mode !== ‘absolue’); document.getElementById(‘bloc-progressive’).classList.toggle(“hidden”, mode !== ‘progressive’); document.getElementById(‘bloc-marge’).classList.toggle(“hidden”, mode !== ‘marge’); } document.getElementById(‘commission-modele’).addEventListener(‘change’, switchBlocCommission); /** * Affichage du bloc salaire fixe pour salarié uniquement */ document.getElementById(‘statut’).addEventListener(‘change’, e => { document.getElementById(‘bloc-fixe’).classList.toggle(“hidden”, e.target.value !== ‘salarie’); }); /** * Calcul de la commission selon le mode */ function calculCommission(mode, params) { let commission = 0; // Absolue : taux fixe % sur CA if (mode === ‘absolue’) { const tx = Number(params.taux) || 0; const ca = Number(params.ca) || 0; commission = ca * tx / 100; } // Progressive : palier avec deux taux else if (mode === ‘progressive’) { const seuil = Number(params.palierMontant) || 0; const tx1 = Number(params.palierTaux1) || 0; const tx2 = Number(params.palierTaux2) || 0; const ca = Number(params.ca) || 0; if (ca (v-0.25) * 2 * Math.PI; const start = angle(from); const end = angle(to); const x1 = cx + radius * Math.cos(start); const y1 = cy + radius * Math.sin(start); const x2 = cx + radius * Math.cos(end); const y2 = cy + radius * Math.sin(end); const largeArc = (to-from) > 0.5 ? 1 : 0; return `M${cx},${cy} L${x1},${y1} A${radius},${radius} 0 ${largeArc} 1 ${x2},${y2} Z`; } // Les angles const a1 = p1, a2 = p1 + p2, a3 = 1.0; document.getElementById(“chart-salaire”).innerHTML = ( `
Compensation pie chart ${desc} ${v1>0?“:”} ${v2>0?“:”} ${v3>0?“:”} <ul class="space-y-2"> <li class="flex items-center gap-2"><span class="inline-block w-4 h-4 rounded-full"><span class="text-gray-700">Fixed salary <span class="font-mono text-xs ml-2">${fixe.toLocaleString(‘fr-FR’)} € <li class="flex items-center gap-2"><span class="inline-block w-4 h-4 rounded-full"><span class="text-gray-700">Commissions <span class="font-mono text-xs ml-2">${commission.toLocaleString(‘fr-FR’)} € <li class="flex items-center gap-2"><span class="inline-block w-4 h-4 rounded-full"><span class="text-gray-700">Bonuses <span class="font-mono text-xs ml-2">${primes.toLocaleString(‘fr-FR’)} € ` ); } /** * Gestion de l’évènement principal */ document.getElementById(‘calculer’).addEventListener(‘click’, function(){ // Saisie / Par défaut const statut = document.getElementById(“statut”).value; const salaireFixe = statut === “salarie” ? Number(document.getElementById(“salaire-fixe”).value) || 0 : 0; const ca = Number(document.getElementById(“volume”).value) || 0; const primes = Number(document.getElementById(“primes”).value) || 0; const mode = document.getElementById(“commission-modele”).value; // Récupération paramètres selon mode let commission = 0; if (mode === “absolue”) { commission = calculCommission(‘absolue’, { taux: document.getElementById(“commission-taux”).value, ca: ca }); } else if (mode === “progressive”) { commission = calculCommission(‘progressive’, { palierMontant: document.getElementById(“palier-montant”).value, palierTaux1: document.getElementById(“palier-taux1”).value, palierTaux2: document.getElementById(“palier-taux2”).value, ca: ca }); } else if (mode === “marge”) { commission = calculCommission(‘marge’, { taux : document.getElementById(“marge-taux”).value, marge : document.getElementById(“marge-brute”).value }); } // Résultat let total = salaireFixe + commission + primes; // Affichage document.getElementById(‘res-fixe’).textContent = `${salaireFixe.toLocaleString(‘fr-FR’)} €`; document.getElementById(‘res-commission’).textContent = `${commission.toLocaleString(‘fr-FR’)} €`; document.getElementById(‘res-primes’).textContent = `${primes.toLocaleString(‘fr-FR’)} €`; document.getElementById(‘res-total’).textContent = `${total.toLocaleString(‘fr-FR’)} €`; document.getElementById(‘resultats’).classList.remove(‘hidden’); afficheChart({fixe: salaireFixe, commission: commission, primes: primes}); }); // Initialisation à l’affichage switchBlocCommission(); <p class="wp-block-paragraph">The salaried sales representative benefits from a secure framework: guaranteed fixed salary, social rights (health insurance, retirement) and a certain stability. In return, they have limited flexibility in organizing their work, and compensation is often inflexible. The compensation for this type of salesperson typically includes a fixed salary combined with a variable component based on performance. They are often integrated into a structured sales team, which promotes cohesion and strategic alignment.</p> <p class="wp-block-paragraph">Conversely, the independent worker, such as a commercial agent, operates under a contractual status and is often paid by commission or bonuses. This status provides greater flexibility for the company, allowing rapid adaptation to market changes. However, it also requires increased oversight of the salesperson’s management, compensation and performance. Variable pay is predominant, focused on performance and actual sales.</p> <p class="wp-block-paragraph">The choice is generally made based on several criteria: the company’s size, its resources, its expectations in terms of flexibility and the desired level of involvement. For a small structure in a startup phase, an independent salesperson can offer the necessary flexibility to test markets without burdening the organization. A large company with precise management strategy will be more inclined to choose a salaried status to strengthen cohesion and control.</p> <figure class="wp-block-table"><table><tbody><tr><th rowspan="1" colspan="1"><p>Characteristics</p></th><th rowspan="1" colspan="1"><p>Salaried sales representative</p></th><th rowspan="1" colspan="1"><p>Independent sales agent</p></th></tr><tr><td rowspan="1" colspan="1"><p>Salary</p></td><td rowspan="1" colspan="1"><p>Fixed + variable</p></td><td rowspan="1" colspan="1"><p>Commissions / bonuses</p></td></tr><tr><td rowspan="1" colspan="1"><p>Social charges</p></td><td rowspan="1" colspan="1"><p>Paid by employer and employee</p></td><td rowspan="1" colspan="1"><p></p></td></tr><tr><td rowspan="1" colspan="1"><p>Flexibility</p></td><td rowspan="1" colspan="1"><p>Limited, standardized contract</p></td><td rowspan="1" colspan="1"><p></p></td></tr><tr><td rowspan="1" colspan="1"><p>Involvement in management</p></td><td rowspan="1" colspan="1"><p>Low, supervised by the company</p></td><td rowspan="1" colspan="1"><p></p></td></tr><tr><td rowspan="1" colspan="1"><p>Adaptability</p></td><td rowspan="1" colspan="1"><p>Less flexible, fixed-term or open-ended contract</p></td><td rowspan="1" colspan="1"><p></p></td></tr></tbody></table></figure> <h3 class="wp-block-heading">Key differences between a salaried sales representative and an independent sales agent</h3> <p class="wp-block-paragraph">The fundamental differences lie in the legal framework, compensation and daily management. The relationship with the company also affects motivation and engagement. The independent sales agent often operates under a mandate contract, with freedom in organization and direct dependence on performance for remuneration. Their outcome depends entirely on the commissions they receive, which can motivate them to maximize effort but also expose them to financial risk.</p> <p class="wp-block-paragraph">By contrast, the salaried sales representative benefits from a structured work environment and financial stability, but may sometimes lack autonomy. The management of compensation, particularly the variable part, is more regulated and tied to team results. The decision to choose one status over the other should therefore be based on the business model and the company’s maturity.</p> <h4 class="wp-block-heading">Adapting the status to the business model and company maturity</h4> <p class="wp-block-paragraph">A startup focused on rapid expansion may favor independent salespeople to limit fixed costs and test various markets. Mature companies with a robust organization will be more inclined to invest in salaried salespeople to sustain their team and ensure strategic cohesion.</p> <h3 class="wp-block-heading">Selection criteria: skills, expectations and required involvement</h3> <p class="wp-block-paragraph">The salesperson’s profile and expectations play a central role in selecting the status. A junior salesperson or one in a learning phase will often prefer the stability of a fixed salary with a moderate variable portion. Conversely, an experienced profile with a strong network may opt for independence, relying on commissions to maximize earnings.</p> <p class="wp-block-paragraph">The required skills should also be considered: strong autonomy, the ability to manage one’s affairs and a sharp sales sense are essential for the independent. Motivation must align with the required level of involvement: a sales team driven by performance will have more interest in a flexible, results-oriented regime.</p> <h2 class="wp-block-heading">Variable sales compensation: understanding commissions and target bonuses</h2> <p class="wp-block-paragraph">Variable compensation is a strategic component to encourage sales performance. It mainly relies on two levers: commission, which incentivizes sales, and target bonuses that focus on specific results. A clear understanding of how they work allows aligning sales strategy with team motivation.</p> <h3 class="wp-block-heading">How commissions work: incentives and safeguards to know</h3> <p class="wp-block-paragraph">Commissions are usually calculated as a percentage of sales revenue or the margin generated by the salesperson. They constitute a direct incentive to sell, reinforcing motivation to win new clients or increase the value of existing contracts.</p> <p class="wp-block-paragraph">A simple example: if a salesperson receives a 10% commission on a €10,000 sale, they will earn €1,000 for each contract of that amount. However, it is advisable to set thresholds or tiers to avoid demotivation in the event of a performance drop. Implementing caps or bonuses linked to quota achievement helps prevent opportunistic behavior, such as hard selling or excessive discounting.</p> <figure class="wp-block-table"><table><tbody><tr><th rowspan="1" colspan="1"><p>Type of commission</p></th><th rowspan="1" colspan="1"><p>Calculation method</p></th><th rowspan="1" colspan="1"><p>Strengths</p></th><th rowspan="1" colspan="1"><p>Risks</p></th></tr><tr><td rowspan="1" colspan="1"><p>Absolute commission</p></td><td rowspan="1" colspan="1"><p>Fixed percentage</p></td><td rowspan="1" colspan="1"><p>Simplicity, clear motivation</p></td><td rowspan="1" colspan="1"><p>Dependence on volume</p></td></tr><tr><td rowspan="1" colspan="1"><p>Progressive commission</p></td><td rowspan="1" colspan="1"><p>Tiers (e.g. 10% up to €50,000 then 12%)</p></td><td rowspan="1" colspan="1"><p>Encourages excellence</p></td><td rowspan="1" colspan="1"><p>More complex calculation</p></td></tr><tr><td rowspan="1" colspan="1"><p>Margin-based commission</p></td><td rowspan="1" colspan="1"><p>Percentage of gross margin</p></td><td rowspan="1" colspan="1"><p>Favors profitability</p></td><td rowspan="1" colspan="1"><p>Requires more detailed analysis</p></td></tr></tbody></table></figure> <h3 class="wp-block-heading">Boosting motivation with target bonuses: advantages and limits</h3> <p class="wp-block-paragraph">Target bonuses allow setting specific qualitative or quantitative results, such as acquiring new clients, increasing revenue or retaining customers. Their main advantage is to focus on strategic priorities and encourage salespeople to exceed set thresholds.</p> <p class="wp-block-paragraph">An example: a €2,000 bonus for each new client beyond 10 contracts signed in a quarter. However, this approach also has limits: if objectives are poorly calibrated, the salesperson might focus solely on quantity at the expense of quality or customer satisfaction. Short-term over-motivation can also generate deviant behaviors or lasting demotivation if results do not follow.</p> <h3 class="wp-block-heading">Mixing commissions and bonuses: combining levers to boost performance</h3> <p class="wp-block-paragraph">The right balance between commissions and target bonuses offers optimal flexibility. Commission rewards sales directly, while bonuses steer toward strategic results, such as retention or strategic development by market segment.</p> <p class="wp-block-paragraph">A company can thus encourage sales while valuing contribution to sustainable growth. For example, a salesperson receives 5% commission on each sale and €1,000 bonus when they exceed quarterly targets. Integrating these two levers must be clear, transparent and well communicated to ensure team engagement.</p> <h2 class="wp-block-heading">Calculating variable compensation: methods and tips to optimize the compensation plan</h2> <p class="wp-block-paragraph">Accurate calculation of variable compensation is essential to ensure fairness, motivation and profitability. Various methods exist to adapt to each company’s typical model while remaining aligned with the sales strategy.</p> <h3 class="wp-block-heading">Commission models: absolute, progressive, territorial, margin or mixed</h3> <p class="wp-block-paragraph">The choice of model depends on commercial complexity and strategic objectives. Here is a concise presentation of the main ones:</p> <ul class="wp-block-list"><li><p>Absolute commission: fixed percentage of sales revenue or sale amount.</p></li><li><p>Progressive commission: sales thresholds triggering increasing percentages.</p></li><li><p>Territorial commission: based on the salesperson’s zone or market.</p></li><li><p>Margin-based commission: favoring profitability rather than volume.</p></li><li><p>Mixed model: combining several types to balance volume and margin.</p></li></ul> <h4 class="wp-block-heading">Numerical examples: commission & tier calculation simulation</h4> <figure class="wp-block-table"><table><tbody><tr><th rowspan="1" colspan="1"><p>Sale</p></th><th rowspan="1" colspan="1"><p>Model</p></th><th rowspan="1" colspan="1"><p>Detailed calculation</p></th><th rowspan="1" colspan="1"><p>Compensation</p></th></tr><tr><td rowspan="1" colspan="1"><p>€10,000</p></td><td rowspan="1" colspan="1"><p>Absolute commission</p></td><td rowspan="1" colspan="1"><p>10% of €10,000</p></td><td rowspan="1" colspan="1"><p>€1,000</p></td></tr><tr><td rowspan="1" colspan="1"><p>€50,000</p></td><td rowspan="1" colspan="1"><p>Progressive commission (0–50,000 € at 10%); >50,000 € at 12%)</p></td><td rowspan="1" colspan="1"><p>– 10% of €50,000 = €5,000<br>– If sale reaches €70,000:<br>– €50,000 at 10% = €5,000<br>– €20,000 at 12% = €2,400<br>– Total = €7,400</p></td><td rowspan="1" colspan="1"><p>Variable depending on achieved volume</p></td></tr></tbody></table></figure> <h3 class="wp-block-heading">Aligning variable compensation with SMART commercial objectives</h3> <p class="wp-block-paragraph">Objectives must be specific, measurable, achievable, realistic and time-bound. For example, increase revenue by 15% in 6 months or acquire 20 new clients in a quarter. A well-set objective will enable durable motivation, avoiding demotivation or excessive solicitation that could harm sales quality. It is also a lever to effectively structure variable compensation.</p> <h3 class="wp-block-heading">Setting payment frequency: impact on motivation and cash flow</h3> <p class="wp-block-paragraph">Depending on the business cycle, payment frequency varies: payment upon signature, when the client pays, or at the end of the evaluation period. Fast payment can stimulate immediate motivation but may also strain cash flow. Conversely, a longer frequency, such as quarterly or annual, offers better management for the company but may slow immediate salespeople engagement. The best approach should balance these issues to ensure motivation and financial health.</p> <h2 class="wp-block-heading">Succeeding in calibrating sales compensation: personalization, objectives and modern tools</h2> <p class="wp-block-paragraph">Effective compensation adapts to each profile while supporting the company’s overall strategy. Personalizing the plan, precise objectives and using modern tools are key to ensuring sustainable performance.</p> <h3 class="wp-block-heading">Integrate the salesperson’s profile: junior, senior, field or inside sales</h3> <p class="wp-block-paragraph">A junior salesperson generally needs a higher fixed salary to ensure stability, with a moderate variable part. Conversely, a senior or experienced salesperson can be assigned a larger variable portion to maximize performance, especially for field or hunter profiles.</p> <p class="wp-block-paragraph">For inside sales profiles focused on management or support, the fixed salary should be adapted and the variable part should reward service quality or retention.</p> <h3 class="wp-block-heading">Define relevant sales quotas: bottom-up & top-down approach</h3> <p class="wp-block-paragraph">Quota setting should rely on two complementary approaches:</p> <ol class="wp-block-list"><li><p><strong>Bottom-up</strong> : precise analysis of individual or territory capacities, adjusting targets according to historical performance.</p></li><li><p><strong>Top-down</strong> : overall objectives set by management, taking into account the market and expansion strategy.</p></li></ol> <p class="wp-block-paragraph">Regular adjustment of quotas based on results and market evolution ensures precise and motivating calibration.</p> <h4 class="wp-block-heading">Adjustment and regular monitoring: key to lasting motivation</h4> <p class="wp-block-paragraph">Modern management tools, such as commission software, facilitate synchronization between objectives and performance. Regular review allows quickly detecting gaps and adjusting challenges to maintain optimal momentum.</p> <h3 class="wp-block-heading">Consider Customer Acquisition Cost (CAC) to adjust variable pay</h3> <p class="wp-block-paragraph">Comparing compensation with CAC ensures the profitability of sales actions. An overly high bonus or commission on an acquired client can reduce overall margin. CAC analysis anticipates adjusting bonuses according to the complexity or potential of the sale, thus ensuring optimal return.</p> <h3 class="wp-block-heading">Ensure transparency and readability with commission management tools</h3> <p class="wp-block-paragraph">Modern software makes it easier to visualize, trace and report performance. Transparency in commission management encourages trust and engagement from salespeople while simplifying administrative management.</p> <h3 class="wp-block-heading">Careful communication and support around the compensation plan</h3> <p class="wp-block-paragraph">Clear, regular and tailored communication is essential to ensure each salesperson understands their earning levers. Personalized support and training on the compensation system facilitate adoption, avoiding demotivation or misunderstandings.</p> <figure class="wp-block-image"><img decoding="async" src="https://mon-crm-eagle-rocket.fr/wp-content/uploads/2025/06/comment-determiner-le-salaire-fixe-et-variable-dun-commercial.jpg" alt="Découvrez les clés pour établir le salaire fixe et variable d'un commercial. Apprenez à évaluer les performances, à adapter les rémunérations et à motiver votre équipe de vente grâce à des stratégies efficaces." class="wp-image-140465" /></figure><div class="post-views content-post post-5922 entry-meta load-static"> <span class="post-views-icon dashicons dashicons-chart-bar"></span> <span class="post-views-label">Post Views:</span> <span class="post-views-count">6</span> </div> <!-- AUTHOR BOX --> <div style="margin-top: 6rem; padding-top: 3rem; border-top: 1px solid rgba(255,255,255,0.1); display: flex; gap: 2rem; align-items: center; justify-content: center; text-align: left;"> <img alt='' src='https://secure.gravatar.com/avatar/?s=100&d=mm&r=g' srcset='https://secure.gravatar.com/avatar/?s=200&d=mm&r=g 2x' class='avatar avatar-100 photo avatar-default' height='100' width='100' decoding='async'/> <div> <h4 style="color:#fff; font-size:1.4rem; margin-bottom:0.5rem; font-family:var(--font-display);"></h4> <p style="font-size:1rem; margin:0; color:var(--text-muted); max-width:400px;"></p> <a href="https://jenegociemonsalaire.com/en/author/" style="display:inline-block; margin-top:0.8rem; color:var(--accent); font-weight:700; font-size:0.9rem;">Voir les articles →</a> </div> </div> </main> <!-- SIDEBAR STICKY --> <aside class="article-sidebar"> <div class="sticky-wrapper"> <!-- TOC WIDGET --> <div class="widget-toc" id="tocWidget"> <div class="widget-title">Dans cet article</div> <ul class="toc-list" id="tocList"> <!-- JS will populate this --> </ul> </div> <!-- OFFER WIDGET --> <div class="widget-cta"> <h4>Ne laisse plus d'argent sur la table.</h4> <p>Télécharge le script exact pour demander +15%.</p> <a href="#" class="btn-black">Télécharger le PDF</a> </div> </div> </aside> </div> <!-- NEWSLETTER --> <section class="newsletter-section fade-in"> <h3 class="nl-title">Rejoins l'élite des négociateurs</h3> <p style="color: #bbb; max-width:500px; margin:0 auto;">Chaque lundi, reçois une technique de négociation interdite aux amateurs.</p> <form class="nl-form" action="#" method="post"> <input type="email" placeholder="Ton meilleur email..." class="nl-input" required> <button type="submit" class="nl-btn">Accéder aux secrets</button> </form> </section> </article> <!-- FOOTER --> <footer> <p>© 2026 JeNégocieMonSalaire. Version 3.5</p> </footer> <script type="speculationrules"> {"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/template/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} </script> <div class="eagle-contact-footer-link" style="text-align:center;padding:1.1rem 1rem;border-top:1px solid rgba(120,120,120,.25);font-size:1rem;line-height:1.4"><a href="https://jenegociemonsalaire.com/contact/" style="font-weight:600;text-decoration:underline">Contact</a></div><script id="pll_cookie_script-js-after"> (function() { var expirationDate = new Date(); expirationDate.setTime( expirationDate.getTime() + 31536000 * 1000 ); document.cookie = "pll_language=en; expires=" + expirationDate.toUTCString() + "; path=/; secure; SameSite=Lax"; }()); //# sourceURL=pll_cookie_script-js-after </script> <script id="template-navigation-js" src="https://jenegociemonsalaire.com/wp-content/themes/template/js/navigation.js?ver=1.0.0"></script> <script id="wp-emoji-settings" type="application/json"> {"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://jenegociemonsalaire.com/wp-includes/js/wp-emoji-release.min.js?ver=7.0"}} </script> <script type="module"> /*! This file is auto-generated */ const a=JSON.parse(document.getElementById("wp-emoji-settings").textContent),o=(window._wpemojiSettings=a,"wpEmojiSettingsSupports"),s=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const a=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===a[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,a){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!a(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,a){let r;const o=(r="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),s=(o.textBaseline="top",o.font="600 32px Arial",{});return e.forEach(e=>{s[e]=t(o,e,n,a)}),s}function r(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}a.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(o));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(s),u.toString(),c.toString(),p.toString()].join(",")+"));",a=new Blob([e],{type:"text/javascript"});const r=new Worker(URL.createObjectURL(a),{name:"wpTestEmojiSupports"});return void(r.onmessage=e=>{i(n=e.data),r.terminate(),t(n)})}catch(e){}i(n=f(s,u,c,p))}t(n)}).then(e=>{for(const n in e)a.supports[n]=e[n],a.supports.everything=a.supports.everything&&a.supports[n],"flag"!==n&&(a.supports.everythingExceptFlag=a.supports.everythingExceptFlag&&a.supports[n]);var t;a.supports.everythingExceptFlag=a.supports.everythingExceptFlag&&!a.supports.flag,a.supports.everything||((t=a.source||{}).concatemoji?r(t.concatemoji):t.wpemoji&&t.twemoji&&(r(t.twemoji),r(t.wpemoji)))}); //# sourceURL=https://jenegociemonsalaire.com/wp-includes/js/wp-emoji-loader.min.js </script> <!-- SCRIPTS --> <script> document.addEventListener("DOMContentLoaded", function() { // 1. GENERATE TABLE OF CONTENTS const content = document.getElementById('mainContent'); const tocList = document.getElementById('tocList'); const headings = content.querySelectorAll('h2'); if (headings.length > 0) { headings.forEach((heading, index) => { const id = 'chapter-' + index; heading.id = id; const li = document.createElement('li'); const a = document.createElement('a'); a.href = '#' + id; a.textContent = heading.textContent; a.addEventListener('click', (e) => { e.preventDefault(); document.querySelector(a.getAttribute('href')).scrollIntoView({ behavior: 'smooth' }); }); li.appendChild(a); tocList.appendChild(li); }); } else { document.getElementById('tocWidget').style.display = 'none'; } // 2. PROGRESS BAR const progressBar = document.getElementById('progressBar'); window.addEventListener('scroll', () => { const scrollTop = window.scrollY; const docHeight = document.body.scrollHeight - window.innerHeight; const scrollPercent = (scrollTop / docHeight) * 100; progressBar.style.width = scrollPercent + "%"; }); // 3. FADE IN ANIMATION const observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { entry.target.style.opacity = 1; entry.target.style.transform = 'translateY(0)'; } }); }); document.querySelectorAll('.fade-in').forEach(el => { el.style.opacity = 0; el.style.transform = 'translateY(20px)'; el.style.transition = '0.8s ease'; observer.observe(el); }); }); </script> </body> </html>