{"id":52,"date":"2026-08-04T15:54:08","date_gmt":"2026-08-04T13:54:08","guid":{"rendered":"https:\/\/risks.ovh\/plateforme\/?page_id=52"},"modified":"2026-08-08T19:16:48","modified_gmt":"2026-08-08T17:16:48","slug":"simulateurs-page","status":"publish","type":"page","link":"https:\/\/plateforme.risks.ovh\/?page_id=52","title":{"rendered":"Simulateurs"},"content":{"rendered":"    <!-- Chargement des bibliotheques en local -->\r\n    <script src=\"https:\/\/plateforme.risks.ovh\/wp-content\/plugins\/generateur-simulateurs\/assets\/html2canvas.min.js\"><\/script>\r\n    <script src=\"https:\/\/plateforme.risks.ovh\/wp-content\/plugins\/generateur-simulateurs\/assets\/jspdf.umd.min.js\"><\/script>\r\n\r\n    <div class=\"sim-container-main\">\r\n        <div id=\"simResults\" style=\"padding: 20px;\">\r\n                            <div class=\"sim-category-section\" data-category=\"assurance-vie\">\r\n                    <div class=\"sim-category-header\" style=\"border-bottom-color: #8B0000\">\r\n                        <div class=\"sim-category-icon\">\u2764\ufe0f<\/div>\r\n                        <div class=\"sim-category-title\">Assurance Vie<\/div>\r\n                    <\/div>\r\n                    <div class=\"sim-grid\">\r\n                                                    <a href=\"#\" class=\"sim-card\" onclick=\"openSimModal('provision-mathematique-td-8965', 'provision'); return false;\"\r\n                               data-title=\"Provision Mathematique TD\" data-category=\"assurance-vie\">\r\n                                <div class=\"sim-card-icon\">\r\n                                                                            <img decoding=\"async\" src=\"https:\/\/plateforme.risks.ovh\/wp-content\/plugins\/generateur-simulateurs\/simulateurs\/assurance-vie\/provision-mathematique-td\/icon.png\" alt=\"Provision Mathematique TD\" class=\"sim-card-img\">\r\n                                                                    <\/div>\r\n                                <div class=\"sim-card-content\">\r\n                                    <div class=\"sim-card-title\">Provision Mathematique TD<\/div>\r\n                                    <div class=\"sim-card-desc\">Simulateur de la provision mathematique TD Emprunteur <\/div>\r\n                                <\/div>\r\n                            <\/a>\r\n                            \r\n                            <div id=\"modal-provision-mathematique-td-8965\" class=\"sim-modal\" style=\"display:none;\" data-sim-type=\"provision\">\r\n                                <div class=\"sim-modal-content\">\r\n                                    <div class=\"sim-modal-header\">\r\n                                        <h3 class=\"sim-modal-title\">Provision Mathematique TD<\/h3>\r\n                                        <button class=\"sim-modal-close-btn\" onclick=\"closeSimModal('provision-mathematique-td-8965')\">&times;<\/button>\r\n                                    <\/div>\r\n                                    \r\n                                    <div class=\"sim-modal-body\" id=\"modal-body-provision-mathematique-td-8965\">\r\n                                        <div id=\"sim-provision-mathematique-td-8965\" class=\"simulator-container\" data-sim-type=\"provision\">\r\n                                            <style id=\"css-provision-mathematique-td-8965\">\r\n                                                [id^=\"sim-\"] * { margin: 0; padding: 0; box-sizing: border-box; }\r\n[id^=\"sim-\"] body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background: linear-gradient(135deg, #f5f7fa 0%, #e4e8f0 100%); min-height: 100vh; padding: 40px 20px; }\r\n[id^=\"sim-\"] .sim-container { max-width: 900px; margin: 0 auto; background: #fff; border-radius: 24px; box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); overflow: hidden; }\r\n[id^=\"sim-\"] h1 { background: linear-gradient(135deg, #8B0000, #5C0000); color: #fff; text-align: center; padding: 30px 20px; font-size: 28px; margin: 0; font-weight: 600; }\r\n[id^=\"sim-\"] .sim-subtitle { text-align: center; color: #666; padding: 12px; background: #f8f9fa; font-size: 14px; margin: 0; border-bottom: 1px solid #eee; }\r\n[id^=\"sim-\"] form { padding: 30px; }\r\n[id^=\"sim-\"] .sim-row { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin-bottom: 20px; }\r\n[id^=\"sim-\"] .sim-group { display: flex; flex-direction: column; }\r\n[id^=\"sim-\"] label { font-weight: 600; color: #333; margin-bottom: 8px; font-size: 14px; }\r\n[id^=\"sim-\"] input, [id^=\"sim-\"] select { padding: 12px 15px; border: 2px solid #e0e0e0; border-radius: 12px; font-size: 16px; transition: all 0.3s; font-family: inherit; }\r\n[id^=\"sim-\"] input:focus, [id^=\"sim-\"] select:focus { outline: none; border-color: #8B0000; box-shadow: 0 0 0 3px rgba(139, 0, 0, 0.1); }\r\n[id^=\"sim-\"] .sim-btn { width: 100%; padding: 14px; background: linear-gradient(135deg, #8B0000, #5C0000); color: #fff; border: none; border-radius: 12px; cursor: pointer; font-size: 16px; font-weight: 600; transition: all 0.3s; margin-top: 10px; }\r\n[id^=\"sim-\"] .sim-btn:hover { transform: translateY(-2px); box-shadow: 0 10px 25px -5px rgba(139, 0, 0, 0.3); }\r\n[id^=\"sim-\"] .sim-btn:disabled { opacity: 0.7; transform: none; cursor: not-allowed; }\r\n[id^=\"sim-\"] .sim-result { margin: 20px 30px 30px 30px; padding: 25px; border-radius: 16px; text-align: center; }\r\n[id^=\"sim-\"] .sim-result:not(.sim-error) { background: linear-gradient(135deg, #e8f5e9, #c8e6c9); border: 1px solid #4caf50; }\r\n[id^=\"sim-\"] .sim-error { background: linear-gradient(135deg, #ffebee, #ffcdd2); border: 1px solid #f44336; }\r\n[id^=\"sim-\"] .sim-result-icon { font-size: 48px; margin-bottom: 10px; }\r\n[id^=\"sim-\"] .sim-result-label { font-size: 12px; color: #666; text-transform: uppercase; letter-spacing: 1px; }\r\n[id^=\"sim-\"] .sim-result-value { font-size: 32px; font-weight: bold; margin-top: 10px; }\r\n[id^=\"sim-\"] .sim-result:not(.sim-error) .sim-result-value { color: #2e7d32; }\r\n[id^=\"sim-\"] .sim-result-note { font-size: 11px; color: #888; margin-top: 15px; }\r\n[id^=\"sim-\"] .loading { opacity: 0.7; pointer-events: none; }\r\n@media (max-width: 600px) { [id^=\"sim-\"] .sim-row { grid-template-columns: 1fr; gap: 15px; } [id^=\"sim-\"] form { padding: 20px; } [id^=\"sim-\"] h1 { font-size: 22px; padding: 20px; } [id^=\"sim-\"] body { padding: 20px; } [id^=\"sim-\"] .sim-container { border-radius: 20px; } }                                            <\/style>\r\n                                            <div class=\"sim-container\">\r\n    <p class=\"sim-subtitle\"> Calcul de la provision math\u00e9matique TD Emprunteur<\/p>\r\n    \r\n    <form id=\"assuranceForm\">\r\n        <div class=\"sim-row\">\r\n            <div class=\"sim-group\">\r\n                <label for=\"Capital\">Capital emprunt\u00e9 (TND)<\/label>\r\n                <input type=\"number\" id=\"Capital\" step=\"any\" value=\"100000\">\r\n            <\/div>\r\n            <div class=\"sim-group\">\r\n                <label for=\"x\">\u00c2ge de l'assur\u00e9 (x)<\/label>\r\n                <input type=\"number\" id=\"x\" value=\"30\">\r\n            <\/div>\r\n        <\/div>\r\n        <div class=\"sim-row\">\r\n            <div class=\"sim-group\">\r\n                <label for=\"Duree_mois\">Dur\u00e9e (mois)<\/label>\r\n                <input type=\"number\" id=\"Duree_mois\" value=\"120\">\r\n            <\/div>\r\n            <div class=\"sim-group\">\r\n                <label for=\"Taux_technique\">Taux technique<\/label>\r\n                <input type=\"number\" id=\"Taux_technique\" step=\"0.0001\" value=\"0.03\">\r\n\r\n            \r\n            <\/div>\r\n        <\/div>\r\n        <div class=\"sim-row\">\r\n            <div class=\"sim-group\">\r\n                <label for=\"FG\">Frais de gestion (FG)<\/label>\r\n                <input type=\"number\" id=\"FG\" step=\"0.0001\" value=\"0.005\">\r\n\r\n            <\/div>\r\n            <div class=\"sim-group\">\r\n                <label for=\"Taux\">Taux d'emprunt<\/label>\r\n                <input type=\"number\" id=\"Taux\" step=\"0.0001\" value=\"0.04\">\r\n            <\/div>\r\n        <\/div>\r\n        <div class=\"sim-row\">\r\n            <div class=\"sim-group\">\r\n                <label for=\"D_ecoulee\">D\u00e9lai \u00e9coul\u00e9 (mois)<\/label>\r\n                <input type=\"number\" id=\"D_ecoulee\" value=\"0\">\r\n            <\/div>\r\n            <div class=\"sim-group\">\r\n                <label for=\"Franchise\">Franchise (mois)<\/label>\r\n                <input type=\"number\" id=\"Franchise\" value=\"0\">\r\n            <\/div>\r\n        <\/div>\r\n\r\n\r\n\r\n        <button type=\"button\" class=\"sim-btn sim-calc-btn\"> Calculer ma provision math\u00e9matique TD Emprunteur<\/button>\r\n    <\/form>\r\n\r\n    <div id=\"resultat\" class=\"sim-result\" style=\"display:none\">\r\n        <div class=\"sim-result-icon\">\ud83d\udcca<\/div>\r\n        <div class=\"sim-result-label\">Provision math\u00e9matique (TD Emprunteur)<\/div>\r\n        <div class=\"sim-result-value\"><span id=\"pmValue\">0.00<\/span> TND<\/div>\r\n    <\/div>\r\n    \r\n    <div id=\"erreur\" class=\"sim-result sim-error\" style=\"display:none\">\r\n        <div class=\"sim-result-icon\">\u26a0\ufe0f<\/div>\r\n        <div class=\"sim-result-label\">Erreur<\/div>\r\n        <div class=\"sim-result-value\"><span id=\"erreurMessage\"><\/span><\/div>\r\n    <\/div>\r\n<\/div>                                            <script id=\"js-provision-mathematique-td-8965\" type=\"text\/javascript\">\r\n                                                \/**\r\n * Table de mortalit\u00e9 TV88-90\r\n * @constant {Array<number>}\r\n *\/\r\nconst TD_99 = [\r\n    100000, 97104, 96869, 96727, 96624, 96541, 96471, 96410, 96356, 96306,\r\n    96258, 96211, 96163, 96111, 96052, 95985, 95908, 95821, 95722, 95614,\r\n    95496, 95372, 95242, 95108, 94971, 94834, 94696, 94558, 94420, 94283,\r\n    94145, 94007, 93867, 93724, 93578, 93426, 93268, 93102, 92926, 92739,\r\n    92538, 92323, 92089, 91837, 91562, 91263, 90937, 90580, 90190, 89764,\r\n    89297, 88786, 88226, 87614, 86944, 86211, 85410, 84536, 83582, 82542,\r\n    81409, 80178, 78842, 77393, 75826, 74134, 72312, 70354, 68257, 66017,\r\n    63632, 61103, 58432, 55623, 52686, 49629, 46469, 43222, 39911, 36560,\r\n    33200, 29861, 26580, 23390, 20328, 17428, 14722, 12238, 9997, 8013,\r\n    6292, 4832, 3623, 2647, 1876, 1286, 850, 539, 326, 187, 101, 51, 24, 10, 4, 1, 0\r\n];\r\n\r\n\/**\r\n * Partie enti\u00e8re d'un nombre\r\n * @param {number} n - Nombre\r\n * @returns {number} Partie enti\u00e8re\r\n *\/\r\nfunction partieEntiere(n) {\r\n    return Math.floor(n);\r\n}\r\n\r\n\/**\r\n * Calcul du Capital Restant D\u00fb (CRD)\r\n * @param {number} C - Capital initial\r\n * @param {number} k - Mois \u00e9coul\u00e9\r\n * @param {number} n - Dur\u00e9e totale en mois\r\n * @param {number} f - Franchise en mois\r\n * @param {number} fact - Facteur d'actualisation\r\n * @returns {number} Capital restant d\u00fb\r\n *\/\r\nfunction calculerCRD(C, k, n, f, fact) {\r\n    if (k < f) return C;\r\n    if (Math.abs(fact - 1) < 1e-10) {\r\n        return C * ((n - k) \/ (n - f));\r\n    }\r\n    return C * ((1 - Math.pow(fact, n - k)) \/ (1 - Math.pow(fact, n - f)));\r\n}\r\n\r\n\/**\r\n * Calcul de la Provision Math\u00e9matique\r\n * @param {number} capital - Capital emprunt\u00e9\r\n * @param {number} age - \u00c2ge de l'assur\u00e9\r\n * @param {number} dureeMois - Dur\u00e9e en mois\r\n * @param {number} tauxTechnique - Taux technique\r\n * @param {number} fraisGestion - Frais de gestion\r\n * @param {number} delaiEcoule - D\u00e9lai \u00e9coul\u00e9 en mois\r\n * @param {number} franchise - Franchise en mois\r\n * @param {number} tauxEmprunt - Taux d'emprunt\r\n * @returns {number} Provision Math\u00e9matique\r\n * @throws {Error} Si les param\u00e8tres sont invalides\r\n *\/\r\nfunction calculerProvisionMath(capital, age, dureeMois, tauxTechnique, fraisGestion, delaiEcoule, franchise, tauxEmprunt) {\r\n    let somme = 0;\r\n    const facteurTech = Math.pow((1 \/ (1 + tauxTechnique)), 1 \/ 12);\r\n    const facteurEmprunt = Math.pow((1 \/ (1 + tauxEmprunt)), 1 \/ 12);\r\n    const idxDebut = age + partieEntiere(delaiEcoule \/ 12);\r\n    \r\n    if (idxDebut >= TD_99.length) {\r\n        throw new Error(\"\u00c2ge trop \u00e9lev\u00e9 (maximum 105 ans)\");\r\n    }\r\n    if (TD_99[idxDebut] === 0) {\r\n        throw new Error(\"Probabilit\u00e9 de survie nulle pour cet \u00e2ge\");\r\n    }\r\n    \r\n    if (delaiEcoule >= 0 && delaiEcoule < dureeMois) {\r\n        for (let k = delaiEcoule; k <= dureeMois - 1; k++) {\r\n            const crd = calculerCRD(capital, k, dureeMois, franchise, facteurEmprunt);\r\n            if (crd <= 0) continue;\r\n            \r\n            const ageIndex = age + partieEntiere(k \/ 12);\r\n            const ageIndexPlus1 = ageIndex + 1;\r\n            \r\n            if (ageIndex >= TD_99.length || ageIndexPlus1 >= TD_99.length) continue;\r\n            \r\n            const probaDeces = (TD_99[ageIndex] - TD_99[ageIndexPlus1]) \/ TD_99[idxDebut];\r\n            const facteurDeces = Math.pow(facteurTech, k - delaiEcoule + 1);\r\n            const probaSurvie = TD_99[ageIndex] \/ TD_99[idxDebut];\r\n            const facteurGestion = fraisGestion * Math.pow(facteurTech, k - delaiEcoule + 1);\r\n            \r\n            somme += crd * (facteurDeces * probaDeces + facteurGestion * probaSurvie);\r\n        }\r\n    }\r\n    \r\n    return (1 \/ 12) * somme;\r\n}\r\n\r\n\/**\r\n * Validation des entr\u00e9es utilisateur\r\n * @param {number} capital - Capital\r\n * @param {number} age - \u00c2ge\r\n * @param {number} duree - Dur\u00e9e en mois\r\n * @param {number} tauxTech - Taux technique\r\n * @param {number} frais - Frais de gestion\r\n * @param {number} delai - D\u00e9lai \u00e9coul\u00e9\r\n * @param {number} franchise - Franchise\r\n * @param {number} tauxEmprunt - Taux d'emprunt\r\n * @throws {Error} Si une valeur est invalide\r\n *\/\r\nfunction validerEntrees(capital, age, duree, tauxTech, frais, delai, franchise, tauxEmprunt) {\r\n    if (isNaN(capital) || capital <= 0) {\r\n        throw new Error(\"Le capital doit \u00eatre un nombre positif\");\r\n    }\r\n    if (isNaN(age) || age < 18 || age > 105) {\r\n        throw new Error(\"L'\u00e2ge doit \u00eatre compris entre 18 et 105 ans\");\r\n    }\r\n    if (isNaN(duree) || duree <= 0 || duree > 600) {\r\n        throw new Error(\"La dur\u00e9e doit \u00eatre comprise entre 1 et 600 mois\");\r\n    }\r\n    if (isNaN(tauxTech) || tauxTech < 0 || tauxTech > 0.1) {\r\n        throw new Error(\"Le taux technique doit \u00eatre compris entre 0% et 10%\");\r\n    }\r\n    if (isNaN(frais) || frais < 0 || frais > 0.05) {\r\n        throw new Error(\"Les frais de gestion doivent \u00eatre compris entre 0% et 5%\");\r\n    }\r\n    if (isNaN(delai) || delai < 0 || delai >= duree) {\r\n        throw new Error(\"Le d\u00e9lai \u00e9coul\u00e9 est invalide\");\r\n    }\r\n    if (isNaN(franchise) || franchise < 0 || franchise >= duree) {\r\n        throw new Error(\"La franchise est invalide\");\r\n    }\r\n    if (isNaN(tauxEmprunt) || tauxEmprunt < 0 || tauxEmprunt > 0.2) {\r\n        throw new Error(\"Le taux d'emprunt doit \u00eatre compris entre 0% et 20%\");\r\n    }\r\n    if (age + Math.ceil(duree \/ 12) > 105) {\r\n        throw new Error(\"L'\u00e2ge en fin de contrat d\u00e9passe 105 ans\");\r\n    }\r\n}\r\n\r\n\/**\r\n * Fonction principale de calcul d\u00e9clench\u00e9e par le bouton\r\n *\/\r\nfunction calculerProvision(event) {\r\n    var btn = event ? event.target.closest('.sim-calc-btn') : document.querySelector('.sim-calc-btn');\r\n    if (!btn) {\r\n        console.error('Bouton non trouv\u00e9');\r\n        return;\r\n    }\r\n    \r\n    var container = btn.closest('[id^=\"sim-\"]');\r\n    if (!container) {\r\n        console.error('Conteneur non trouv\u00e9');\r\n        return;\r\n    }\r\n    \r\n    btn.innerHTML = 'Calcul en cours...';\r\n    btn.disabled = true;\r\n    container.classList.add('loading');\r\n    \r\n    setTimeout(function() {\r\n        try {\r\n            var capital = parseFloat(container.querySelector('#Capital').value) || 100000;\r\n            var age = parseInt(container.querySelector('#x').value) || 30;\r\n            var duree = parseInt(container.querySelector('#Duree_mois').value) || 120;\r\n            var tauxTech = parseFloat(container.querySelector('#Taux_technique').value) || 0.03;\r\n            var frais = parseFloat(container.querySelector('#FG').value) || 0.005;\r\n            var delai = parseInt(container.querySelector('#D_ecoulee').value) || 0;\r\n            var franchise = parseInt(container.querySelector('#Franchise').value) || 0;\r\n            var tauxEmprunt = parseFloat(container.querySelector('#Taux').value) || 0.04;\r\n            \r\n            validerEntrees(capital, age, duree, tauxTech, frais, delai, franchise, tauxEmprunt);\r\n            var resultat = calculerProvisionMath(capital, age, duree, tauxTech, frais, delai, franchise, tauxEmprunt);\r\n            \r\n            container.querySelector('#pmValue').textContent = resultat.toFixed(2);\r\n            container.querySelector('#resultat').style.display = 'block';\r\n            container.querySelector('#erreur').style.display = 'none';\r\n            container.querySelector('#resultat').scrollIntoView({ behavior: 'smooth' });\r\n            \r\n        } catch (error) {\r\n            container.querySelector('#erreurMessage').textContent = error.message;\r\n            container.querySelector('#erreur').style.display = 'block';\r\n            container.querySelector('#resultat').style.display = 'none';\r\n            container.querySelector('#erreur').scrollIntoView({ behavior: 'smooth' });\r\n        } finally {\r\n            btn.innerHTML = '\ud83d\udcca Calculer la Provision Math\u00e9matique';\r\n            btn.disabled = false;\r\n            container.classList.remove('loading');\r\n        }\r\n    }, 100);\r\n}\r\n\r\nwindow.calculerProvision = calculerProvision;\r\n\r\nwindow.initSimulator = function() {\r\n    var container = document.querySelector('[id^=\"sim-\"]');\r\n    if (!container) {\r\n        console.error('Conteneur non trouv\u00e9 pour le simulateur provision');\r\n        return;\r\n    }\r\n    \r\n    console.log('Initialisation simulateur provision');\r\n    \r\n    var btn = container.querySelector('.sim-calc-btn');\r\n    if (btn) {\r\n        var newBtn = btn.cloneNode(true);\r\n        btn.parentNode.replaceChild(newBtn, btn);\r\n        newBtn.addEventListener('click', calculerProvision);\r\n        console.log('Bouton provision initialis\u00e9');\r\n    }\r\n    \r\n    container.querySelectorAll('input').forEach(function(input) {\r\n        input.addEventListener('keypress', function(e) {\r\n            if (e.key === 'Enter') {\r\n                e.preventDefault();\r\n                var btn = container.querySelector('.sim-calc-btn');\r\n                if (btn) btn.click();\r\n            }\r\n        });\r\n    });\r\n    \r\n    console.log('Simulateur provision initialis\u00e9');\r\n};\r\n\r\nif (document.readyState === 'loading') {\r\n    document.addEventListener('DOMContentLoaded', function() {\r\n        setTimeout(window.initSimulator, 100);\r\n    });\r\n} else {\r\n    setTimeout(window.initSimulator, 100);\r\n}                                            <\/script>\r\n                                        <\/div>\r\n                                        \r\n                                        <div class=\"sim-modal-footer\">\r\n                                                                                        <button class=\"sim-btn sim-reset-btn\" onclick=\"resetSimulator('provision-mathematique-td-8965')\">\r\n                                                Reinitialiser\r\n                                            <\/button>\r\n                                        <\/div>\r\n                                    <\/div>\r\n                                <\/div>\r\n                            <\/div>\r\n                                                    <a href=\"#\" class=\"sim-card\" onclick=\"openSimModal('epargne-3064', 'epargne'); return false;\"\r\n                               data-title=\"Epargne\" data-category=\"assurance-vie\">\r\n                                <div class=\"sim-card-icon\">\r\n                                                                            <img decoding=\"async\" src=\"https:\/\/plateforme.risks.ovh\/wp-content\/plugins\/generateur-simulateurs\/simulateurs\/assurance-vie\/epargne\/icon.png\" alt=\"Epargne\" class=\"sim-card-img\">\r\n                                                                    <\/div>\r\n                                <div class=\"sim-card-content\">\r\n                                    <div class=\"sim-card-title\">Epargne<\/div>\r\n                                    <div class=\"sim-card-desc\">Simulateur d&#039;epargne avec interets composes <\/div>\r\n                                <\/div>\r\n                            <\/a>\r\n                            \r\n                            <div id=\"modal-epargne-3064\" class=\"sim-modal\" style=\"display:none;\" data-sim-type=\"epargne\">\r\n                                <div class=\"sim-modal-content\">\r\n                                    <div class=\"sim-modal-header\">\r\n                                        <h3 class=\"sim-modal-title\">Epargne<\/h3>\r\n                                        <button class=\"sim-modal-close-btn\" onclick=\"closeSimModal('epargne-3064')\">&times;<\/button>\r\n                                    <\/div>\r\n                                    \r\n                                    <div class=\"sim-modal-body\" id=\"modal-body-epargne-3064\">\r\n                                        <div id=\"sim-epargne-3064\" class=\"simulator-container\" data-sim-type=\"epargne\">\r\n                                            <style id=\"css-epargne-3064\">\r\n                                                \/* ================================================\r\n   STYLES UNIFORMES - TOUS LES SIMULATEURS\r\n   Code des Assurances - Tunisie\r\n   ================================================ *\/\r\n\r\n[id^=\"sim-\"] * {\r\n    margin: 0;\r\n    padding: 0;\r\n    box-sizing: border-box;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-container {\r\n    max-width: 100%;\r\n    margin: 0 auto;\r\n    background: #fff;\r\n    border-radius: 12px;\r\n    overflow: hidden;\r\n    font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-subtitle {\r\n    text-align: center;\r\n    color: #666;\r\n    padding: 12px 15px;\r\n    background: #f8f9fa;\r\n    font-size: 13px;\r\n    margin: 0;\r\n    border-bottom: 1px solid #eee;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-subtitle strong {\r\n    color: #8B0000;\r\n}\r\n\r\n[id^=\"sim-\"] form {\r\n    padding: 20px 25px;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-row {\r\n    display: grid;\r\n    grid-template-columns: 1fr 1fr;\r\n    gap: 15px;\r\n    margin-bottom: 15px;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-group {\r\n    display: flex;\r\n    flex-direction: column;\r\n}\r\n\r\n[id^=\"sim-\"] label {\r\n    font-weight: 600;\r\n    color: #333;\r\n    margin-bottom: 5px;\r\n    font-size: 13px;\r\n}\r\n\r\n[id^=\"sim-\"] select,\r\n[id^=\"sim-\"] input {\r\n    padding: 10px 12px;\r\n    border: 2px solid #e0e0e0;\r\n    border-radius: 8px;\r\n    font-size: 14px;\r\n    transition: all 0.3s;\r\n    font-family: inherit;\r\n    background: white;\r\n    width: 100%;\r\n}\r\n\r\n[id^=\"sim-\"] select:focus,\r\n[id^=\"sim-\"] input:focus {\r\n    outline: none;\r\n    border-color: #8B0000;\r\n    box-shadow: 0 0 0 3px rgba(139,0,0,0.1);\r\n}\r\n\r\n[id^=\"sim-\"] select {\r\n    cursor: pointer;\r\n    appearance: auto;\r\n}\r\n\r\n[id^=\"sim-\"] small {\r\n    color: #888;\r\n    font-size: 10px;\r\n    margin-top: 3px;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-section-header {\r\n    background: linear-gradient(135deg, #f8f9fa, #e9ecef);\r\n    padding: 8px 14px;\r\n    border-radius: 6px;\r\n    margin: 18px 0 12px 0;\r\n    font-weight: 600;\r\n    color: #2c3e50;\r\n    font-size: 14px;\r\n    border-left: 4px solid #8B0000;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-section-header:first-of-type {\r\n    margin-top: 0;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-section-header span {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 8px;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-btn {\r\n    width: 100%;\r\n    padding: 13px;\r\n    background: linear-gradient(135deg, #8B0000, #5C0000);\r\n    color: #fff;\r\n    border: none;\r\n    border-radius: 8px;\r\n    cursor: pointer;\r\n    font-size: 15px;\r\n    font-weight: 600;\r\n    transition: all 0.3s;\r\n    margin-top: 10px;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-btn:hover {\r\n    transform: translateY(-2px);\r\n    box-shadow: 0 8px 20px -5px rgba(139,0,0,0.3);\r\n}\r\n\r\n[id^=\"sim-\"] .sim-btn:disabled {\r\n    opacity: 0.7;\r\n    transform: none;\r\n    cursor: not-allowed;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-result {\r\n    margin: 15px 25px 25px 25px;\r\n    padding: 20px;\r\n    border-radius: 12px;\r\n    text-align: center;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-result:not(.sim-error) {\r\n    background: linear-gradient(135deg, #e8f5e9, #c8e6c9);\r\n    border: 1px solid #4caf50;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-error {\r\n    background: linear-gradient(135deg, #ffebee, #ffcdd2);\r\n    border: 1px solid #f44336;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-result-icon {\r\n    font-size: 40px;\r\n    margin-bottom: 8px;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-result-label {\r\n    font-size: 11px;\r\n    color: #666;\r\n    text-transform: uppercase;\r\n    letter-spacing: 1px;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-result-value {\r\n    font-size: 28px;\r\n    font-weight: bold;\r\n    margin-top: 8px;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-result:not(.sim-error) .sim-result-value {\r\n    color: #2e7d32;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-result-note {\r\n    font-size: 11px;\r\n    color: #888;\r\n    margin-top: 8px;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-detail {\r\n    margin: 15px 25px 25px 25px;\r\n    padding: 18px;\r\n    background: #f8f9fa;\r\n    border-radius: 12px;\r\n    border: 1px solid #eee;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-detail h3 {\r\n    margin-bottom: 12px;\r\n    color: #2c3e50;\r\n    font-size: 16px;\r\n    font-weight: 600;\r\n    text-align: center;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-detail-table {\r\n    width: 100%;\r\n    border-collapse: collapse;\r\n    font-size: 13px;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-detail-table thead th {\r\n    background: #8B0000;\r\n    color: white;\r\n    padding: 8px 10px;\r\n    font-weight: 600;\r\n    font-size: 12px;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-detail-table thead th:not(:first-child) {\r\n    text-align: right;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-detail-table td {\r\n    padding: 8px 10px;\r\n    border-bottom: 1px solid #ddd;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-detail-table td:first-child {\r\n    font-weight: 500;\r\n    color: #555;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-detail-table td:not(:first-child) {\r\n    text-align: right;\r\n    font-weight: bold;\r\n    color: #8B0000;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-detail-table tr:hover {\r\n    background: #f1f1f1;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-detail-table tr:last-child td {\r\n    border-bottom: none;\r\n}\r\n\r\n[id^=\"sim-\"] .loading {\r\n    opacity: 0.7;\r\n    pointer-events: none;\r\n}\r\n\r\n\/* ================================================\r\n   RESPONSIVE\r\n   ================================================ *\/\r\n\r\n@media (max-width: 600px) {\r\n    [id^=\"sim-\"] .sim-row {\r\n        grid-template-columns: 1fr;\r\n        gap: 12px;\r\n    }\r\n    \r\n    [id^=\"sim-\"] form {\r\n        padding: 15px;\r\n    }\r\n    \r\n    [id^=\"sim-\"] .sim-result-value {\r\n        font-size: 24px;\r\n    }\r\n    \r\n    [id^=\"sim-\"] .sim-detail-table td {\r\n        padding: 6px 8px;\r\n        font-size: 11px;\r\n    }\r\n    \r\n    [id^=\"sim-\"] .sim-result,\r\n    [id^=\"sim-\"] .sim-detail {\r\n        margin: 12px 15px 15px 15px;\r\n        padding: 15px;\r\n    }\r\n    \r\n    [id^=\"sim-\"] .sim-subtitle {\r\n        font-size: 12px;\r\n        padding: 10px;\r\n    }\r\n}                                            <\/style>\r\n                                            <div class=\"sim-container\">\r\n    <p class=\"sim-subtitle\"> Calcul de la valeur future de votre \u00e9pargne <\/p>\r\n    \r\n    <form id=\"epargneForm\">\r\n        <div class=\"sim-row\">\r\n            <div class=\"sim-group\">\r\n                <label for=\"capitalInitial\">Capital initial (TND)<\/label>\r\n                <input type=\"number\" id=\"capitalInitial\" step=\"100\" value=\"10000\">\r\n                <small>Montant initial plac\u00e9<\/small>\r\n            <\/div>\r\n            <div class=\"sim-group\">\r\n                <label for=\"versementMensuel\">Versement mensuel (TND)<\/label>\r\n                <input type=\"number\" id=\"versementMensuel\" step=\"100\" value=\"500\">\r\n                <small>\u00c9pargne r\u00e9guli\u00e8re mensuelle<\/small>\r\n            <\/div>\r\n        <\/div>\r\n        \r\n        <div class=\"sim-row\">\r\n            <div class=\"sim-group\">\r\n                <label for=\"tauxAnnuel\">Taux d'int\u00e9r\u00eat annuel (%)<\/label>\r\n                <input type=\"number\" id=\"tauxAnnuel\" step=\"0.1\" value=\"4.5\">\r\n        \r\n            <\/div>\r\n            <div class=\"sim-group\">\r\n                <label for=\"dureeAnnees\">Dur\u00e9e (ann\u00e9es)<\/label>\r\n                <input type=\"number\" id=\"dureeAnnees\" value=\"10\">\r\n                <small>Dur\u00e9e <\/small>\r\n            <\/div>\r\n        <\/div>\r\n        \r\n        <div class=\"sim-row\">\r\n            <div class=\"sim-group\">\r\n                <label for=\"fraisEntree\">Frais de souscription (%)<\/label>\r\n                <input type=\"number\" id=\"fraisEntree\" step=\"0.1\" value=\"0\">\r\n                \r\n            <\/div>\r\n            <div class=\"sim-group\">\r\n                <label for=\"fraisGestionAnnuel\">Frais de gestion annuels (%)<\/label>\r\n                <input type=\"number\" id=\"fraisGestionAnnuel\" step=\"0.1\" value=\"0.75\">\r\n                \r\n            <\/div>\r\n        <\/div>\r\n\r\n\r\n        <button type=\"button\" class=\"sim-btn sim-calc-btn\"> Calculer mon capital \u00e9pargne<\/button>\r\n        \r\n\r\n    <\/form>\r\n\r\n    <div id=\"resultat\" class=\"sim-result\" style=\"display:none\">\r\n        <div class=\"sim-result-icon\">\ud83d\udcb0<\/div>\r\n        <div class=\"sim-result-label\">Capital final estim\u00e9<\/div>\r\n        <div class=\"sim-result-value\"><span id=\"capitalFinal\">0.00<\/span> TND<\/div>\r\n        <div class=\"sim-result-note\">\r\n            Total vers\u00e9 : <span id=\"totalVersements\">0.00<\/span> TND | \r\n            Int\u00e9r\u00eats g\u00e9n\u00e9r\u00e9s : <span id=\"interets\">0.00<\/span> TND\r\n        <\/div>\r\n    <\/div>\r\n    \r\n    <div id=\"detail\" class=\"sim-detail\" style=\"display:none\">\r\n        <h3>\ud83d\udccb D\u00e9tail ann\u00e9e par ann\u00e9e<\/h3>\r\n        <div>\r\n            <table class=\"sim-detail-table\">\r\n                <thead>\r\n                    <tr>\r\n                        <th>Ann\u00e9e<\/th>\r\n                        <th style=\"text-align:right\">Capital d\u00e9but (TND)<\/th>\r\n                        <th style=\"text-align:right\">Versements (TND)<\/th>\r\n                        <th style=\"text-align:right\">Int\u00e9r\u00eats (TND)<\/th>\r\n                        <th style=\"text-align:right\">Capital fin (TND)<\/th>\r\n                    <\/tr>\r\n                <\/thead>\r\n                <tbody id=\"detailBody\"><\/tbody>\r\n            <\/table>\r\n        <\/div>\r\n        <div style=\"margin-top:15px;padding-top:10px;border-top:1px solid #ddd;font-size:11px;color:#888;text-align:center\">\r\n            * Simulation bas\u00e9e sur des int\u00e9r\u00eats compos\u00e9s\r\n        <\/div>\r\n    <\/div>\r\n    \r\n    <div id=\"erreur\" class=\"sim-result sim-error\" style=\"display:none\">\r\n        <div class=\"sim-result-icon\">\u26a0\ufe0f<\/div>\r\n        <div class=\"sim-result-label\">Erreur<\/div>\r\n        <div class=\"sim-result-value\"><span id=\"erreurMessage\"><\/span><\/div>\r\n    <\/div>\r\n<\/div>                                            <script id=\"js-epargne-3064\" type=\"text\/javascript\">\r\n                                                \/\/ ================================================\r\n\/\/ SIMULATEUR EPARGNE - TUNISIE\r\n\/\/ Code des Assurances - Art.5 & Arr\u00eat\u00e9 du 27\/02\/2001\r\n\/\/ ================================================\r\n\r\nfunction calculerEpargneComplet(capitalInitial, versementMensuel, tauxAnnuel, dureeAnnees, fraisSouscription, fraisGestion) {\r\n    let capital = capitalInitial;\r\n    const tauxMensuel = (tauxAnnuel \/ 100) \/ 12;\r\n    const fraisSouscriptionRatio = fraisSouscription \/ 100;\r\n    const fraisGestionMensuel = (fraisGestion \/ 100) \/ 12;\r\n    \r\n    \/\/ Application des frais de souscription\r\n    capital = capital * (1 - fraisSouscriptionRatio);\r\n    \r\n    let details = [];\r\n    let totalVersements = capitalInitial;\r\n    let totalInterets = 0;\r\n    \r\n    for (let annee = 1; annee <= dureeAnnees; annee++) {\r\n        let capitalDebutAnnee = capital;\r\n        let versementsAnnee = 0;\r\n        let interetsAnnee = 0;\r\n        \r\n        for (let mois = 1; mois <= 12; mois++) {\r\n            \/\/ 1. Ajout du versement mensuel\r\n            capital += versementMensuel;\r\n            versementsAnnee += versementMensuel;\r\n            totalVersements += versementMensuel;\r\n            \r\n            \/\/ 2. Pr\u00e9l\u00e8vement des frais de gestion (calcul\u00e9s sur l'encours)\r\n            \/\/ R\u00e9f: Art.6 de l'arr\u00eat\u00e9 du 27\/02\/2001 - Provisions math\u00e9matiques\r\n            let fraisMois = capital * fraisGestionMensuel;\r\n            capital -= fraisMois;\r\n            \r\n            \/\/ 3. Calcul des int\u00e9r\u00eats (sur le capital net de frais)\r\n            \/\/ R\u00e9f: Art.5 du Code des Assurances\r\n            let interetsMois = capital * tauxMensuel;\r\n            capital += interetsMois;\r\n            interetsAnnee += interetsMois;\r\n            totalInterets += interetsMois;\r\n        }\r\n        \r\n        details.push({\r\n            annee: annee,\r\n            capitalDebut: capitalDebutAnnee,\r\n            versements: versementsAnnee,\r\n            interets: interetsAnnee,\r\n            capitalFin: capital\r\n        });\r\n    }\r\n    \r\n    return {\r\n        capitalFinal: capital,\r\n        totalVersements: totalVersements,\r\n        totalInterets: totalInterets,\r\n        details: details\r\n    };\r\n}\r\n\r\nfunction validerEntreesEpargne(capitalInitial, versementMensuel, tauxAnnuel, duree, fraisSouscription, fraisGestion) {\r\n    if (isNaN(capitalInitial) || capitalInitial < 0) {\r\n        throw new Error(\"Le capital initial doit \u00eatre un nombre positif\");\r\n    }\r\n    if (isNaN(versementMensuel) || versementMensuel < 0) {\r\n        throw new Error(\"Le versement mensuel doit \u00eatre un nombre positif\");\r\n    }\r\n    \/\/ Correction : Plafond \u00e0 20% (car 70% des titres d'\u00e9tat est < 20% habituellement), avec mention l\u00e9gale\r\n    if (isNaN(tauxAnnuel) || tauxAnnuel < 0 || tauxAnnuel > 20) {\r\n        throw new Error(\"Le taux annuel doit \u00eatre compris entre 0% et 20% (R\u00e9f: Art.5 - Plafonnement l\u00e9gal)\");\r\n    }\r\n    if (isNaN(duree) || duree < 1 || duree > 50) {\r\n        throw new Error(\"La dur\u00e9e doit \u00eatre comprise entre 1 et 50 ans\");\r\n    }\r\n    if (isNaN(fraisSouscription) || fraisSouscription < 0 || fraisSouscription > 10) {\r\n        throw new Error(\"Les frais de souscription doivent \u00eatre compris entre 0% et 10% (R\u00e9f: Arr\u00eat\u00e9 du 27\/02\/2001)\");\r\n    }\r\n    if (isNaN(fraisGestion) || fraisGestion < 0 || fraisGestion > 5) {\r\n        throw new Error(\"Les frais de gestion doivent \u00eatre compris entre 0% et 5% (R\u00e9f: Arr\u00eat\u00e9 du 27\/02\/2001)\");\r\n    }\r\n}\r\n\r\nfunction formatMoney(value) {\r\n    return value.toLocaleString('fr-FR', {\r\n        minimumFractionDigits: 2,\r\n        maximumFractionDigits: 2\r\n    });\r\n}\r\n\r\nfunction calculerEpargne(event) {\r\n    var btn = event ? event.target.closest('.sim-calc-btn') : document.querySelector('.sim-calc-btn');\r\n    if (!btn) {\r\n        console.error('Bouton non trouv\u00e9');\r\n        return;\r\n    }\r\n    \r\n    var container = btn.closest('[id^=\"sim-\"]');\r\n    if (!container) {\r\n        console.error('Conteneur non trouv\u00e9');\r\n        return;\r\n    }\r\n    \r\n    btn.innerHTML = 'Calcul en cours...';\r\n    btn.disabled = true;\r\n    container.classList.add('loading');\r\n    \r\n    setTimeout(function() {\r\n        try {\r\n            var capitalInitInput = container.querySelector('#capitalInitial');\r\n            var versementInput = container.querySelector('#versementMensuel');\r\n            var tauxInput = container.querySelector('#tauxAnnuel');\r\n            var dureeInput = container.querySelector('#dureeAnnees');\r\n            var fraisSouscriptionInput = container.querySelector('#fraisEntree');\r\n            var fraisGestionInput = container.querySelector('#fraisGestionAnnuel');\r\n            \r\n            if (!capitalInitInput || !versementInput || !tauxInput || !dureeInput) {\r\n                throw new Error('Champs obligatoires manquants');\r\n            }\r\n            \r\n            var capitalInitial = parseFloat(capitalInitInput.value) || 0;\r\n            var versementMensuel = parseFloat(versementInput.value) || 0;\r\n            var tauxAnnuel = parseFloat(tauxInput.value) || 0;\r\n            var duree = parseInt(dureeInput.value) || 0;\r\n            var fraisSouscription = parseFloat(fraisSouscriptionInput ? fraisSouscriptionInput.value : 0) || 0;\r\n            var fraisGestion = parseFloat(fraisGestionInput ? fraisGestionInput.value : 0.75) || 0.75;\r\n            \r\n            validerEntreesEpargne(capitalInitial, versementMensuel, tauxAnnuel, duree, fraisSouscription, fraisGestion);\r\n            \r\n            var resultat = calculerEpargneComplet(capitalInitial, versementMensuel, tauxAnnuel, duree, fraisSouscription, fraisGestion);\r\n            \r\n            var capitalSpan = container.querySelector('#capitalFinal');\r\n            if (capitalSpan) {\r\n                capitalSpan.textContent = formatMoney(resultat.capitalFinal);\r\n            }\r\n            \r\n            var interetsSpan = container.querySelector('#interets');\r\n            if (interetsSpan) {\r\n                interetsSpan.textContent = formatMoney(resultat.totalInterets);\r\n            }\r\n            \r\n            var versementsSpan = container.querySelector('#totalVersements');\r\n            if (versementsSpan) {\r\n                versementsSpan.textContent = formatMoney(resultat.totalVersements);\r\n            }\r\n            \r\n            var detailBody = container.querySelector('#detailBody');\r\n            if (detailBody) {\r\n                detailBody.innerHTML = '';\r\n                resultat.details.forEach(function(d) {\r\n                    var row = document.createElement('tr');\r\n                    row.innerHTML = '<td>' + d.annee + '<\/td><td>' + formatMoney(d.capitalDebut) + '<\/td><td>' + formatMoney(d.versements) + '<\/td><td>' + formatMoney(d.interets) + '<\/td><td>' + formatMoney(d.capitalFin) + '<\/td>';\r\n                    detailBody.appendChild(row);\r\n                });\r\n            }\r\n            \r\n            container.querySelector('#resultat').style.display = 'block';\r\n            container.querySelector('#detail').style.display = 'block';\r\n            container.querySelector('#erreur').style.display = 'none';\r\n            container.querySelector('#resultat').scrollIntoView({ behavior: 'smooth' });\r\n            \r\n        } catch (error) {\r\n            var erreurMsg = container.querySelector('#erreurMessage');\r\n            if (erreurMsg) {\r\n                erreurMsg.textContent = error.message;\r\n            }\r\n            container.querySelector('#erreur').style.display = 'block';\r\n            container.querySelector('#resultat').style.display = 'none';\r\n            container.querySelector('#detail').style.display = 'none';\r\n            container.querySelector('#erreur').scrollIntoView({ behavior: 'smooth' });\r\n        } finally {\r\n            btn.innerHTML = '\ud83d\udcb0 Calculer mon \u00e9pargne';\r\n            btn.disabled = false;\r\n            container.classList.remove('loading');\r\n        }\r\n    }, 100);\r\n}\r\n\r\nwindow.calculerEpargne = calculerEpargne;\r\nwindow.calculer = calculerEpargne;\r\n\r\nwindow.initSimulator = function() {\r\n    var container = document.querySelector('[id^=\"sim-\"]');\r\n    if (!container) {\r\n        console.error('Conteneur non trouv\u00e9 pour le simulateur \u00e9pargne');\r\n        return;\r\n    }\r\n    \r\n    console.log('Initialisation simulateur \u00e9pargne');\r\n    \r\n    var btn = container.querySelector('.sim-calc-btn');\r\n    if (btn) {\r\n        var newBtn = btn.cloneNode(true);\r\n        btn.parentNode.replaceChild(newBtn, btn);\r\n        newBtn.addEventListener('click', calculerEpargne);\r\n        console.log('Bouton \u00e9pargne initialis\u00e9');\r\n    }\r\n    \r\n    container.querySelectorAll('input').forEach(function(input) {\r\n        input.addEventListener('keypress', function(e) {\r\n            if (e.key === 'Enter') {\r\n                e.preventDefault();\r\n                var btn = container.querySelector('.sim-calc-btn');\r\n                if (btn) btn.click();\r\n            }\r\n        });\r\n    });\r\n    \r\n    console.log('Simulateur \u00e9pargne initialis\u00e9');\r\n};\r\n\r\nif (document.readyState === 'loading') {\r\n    document.addEventListener('DOMContentLoaded', function() {\r\n        setTimeout(window.initSimulator, 100);\r\n    });\r\n} else {\r\n    setTimeout(window.initSimulator, 100);\r\n}                                            <\/script>\r\n                                        <\/div>\r\n                                        \r\n                                        <div class=\"sim-modal-footer\">\r\n                                                                                        <button class=\"sim-btn sim-reset-btn\" onclick=\"resetSimulator('epargne-3064')\">\r\n                                                Reinitialiser\r\n                                            <\/button>\r\n                                        <\/div>\r\n                                    <\/div>\r\n                                <\/div>\r\n                            <\/div>\r\n                                            <\/div>\r\n                <\/div>\r\n                            <div class=\"sim-category-section\" data-category=\"assurance-non-vie\">\r\n                    <div class=\"sim-category-header\" style=\"border-bottom-color: #8B0000\">\r\n                        <div class=\"sim-category-icon\">\ud83d\udee1\ufe0f<\/div>\r\n                        <div class=\"sim-category-title\">Assurance Non Vie<\/div>\r\n                    <\/div>\r\n                    <div class=\"sim-grid\">\r\n                                                    <a href=\"#\" class=\"sim-card\" onclick=\"openSimModal('assurance-auto-1163', 'auto'); return false;\"\r\n                               data-title=\"RC Auto Tunisie\" data-category=\"assurance-non-vie\">\r\n                                <div class=\"sim-card-icon\">\r\n                                                                            <img decoding=\"async\" src=\"https:\/\/plateforme.risks.ovh\/wp-content\/plugins\/generateur-simulateurs\/simulateurs\/assurance-non-vie\/assurance-auto\/icon.png\" alt=\"RC Auto Tunisie\" class=\"sim-card-img\">\r\n                                                                    <\/div>\r\n                                <div class=\"sim-card-content\">\r\n                                    <div class=\"sim-card-title\">RC Auto Tunisie<\/div>\r\n                                    <div class=\"sim-card-desc\">Simulateur des primes RC Auto <\/div>\r\n                                <\/div>\r\n                            <\/a>\r\n                            \r\n                            <div id=\"modal-assurance-auto-1163\" class=\"sim-modal\" style=\"display:none;\" data-sim-type=\"auto\">\r\n                                <div class=\"sim-modal-content\">\r\n                                    <div class=\"sim-modal-header\">\r\n                                        <h3 class=\"sim-modal-title\">RC Auto Tunisie<\/h3>\r\n                                        <button class=\"sim-modal-close-btn\" onclick=\"closeSimModal('assurance-auto-1163')\">&times;<\/button>\r\n                                    <\/div>\r\n                                    \r\n                                    <div class=\"sim-modal-body\" id=\"modal-body-assurance-auto-1163\">\r\n                                        <div id=\"sim-assurance-auto-1163\" class=\"simulator-container\" data-sim-type=\"auto\">\r\n                                            <style id=\"css-assurance-auto-1163\">\r\n                                                [id^=\"sim-\"] * { \r\n    margin: 0; \r\n    padding: 0; \r\n    box-sizing: border-box; \r\n}\r\n\r\n[id^=\"sim-\"] .sim-container { \r\n    max-width: 900px; \r\n    margin: 0 auto; \r\n    background: #fff; \r\n    border-radius: 24px; \r\n    box-shadow: 0 25px 50px -12px rgba(0,0,0,0.25); \r\n    overflow: hidden; \r\n}\r\n\r\n[id^=\"sim-\"] .sim-subtitle { \r\n    text-align: center; \r\n    color: #666; \r\n    padding: 12px; \r\n    background: #f8f9fa; \r\n    font-size: 14px; \r\n    margin: 0; \r\n    border-bottom: 1px solid #eee; \r\n}\r\n\r\n[id^=\"sim-\"] form { \r\n    padding: 30px; \r\n}\r\n\r\n[id^=\"sim-\"] .sim-row { \r\n    display: grid; \r\n    grid-template-columns: 1fr 1fr; \r\n    gap: 20px; \r\n    margin-bottom: 20px; \r\n}\r\n\r\n[id^=\"sim-\"] .sim-group { \r\n    display: flex; \r\n    flex-direction: column; \r\n}\r\n\r\n[id^=\"sim-\"] label { \r\n    font-weight: 600; \r\n    color: #333; \r\n    margin-bottom: 8px; \r\n    font-size: 14px; \r\n}\r\n\r\n[id^=\"sim-\"] select, \r\n[id^=\"sim-\"] input { \r\n    padding: 12px 15px; \r\n    border: 2px solid #e0e0e0; \r\n    border-radius: 12px; \r\n    font-size: 16px; \r\n    transition: all 0.3s; \r\n    font-family: inherit; \r\n    background: white; \r\n    width: 100%;\r\n}\r\n\r\n[id^=\"sim-\"] select:focus, \r\n[id^=\"sim-\"] input:focus { \r\n    outline: none; \r\n    border-color: #8B0000; \r\n    box-shadow: 0 0 0 3px rgba(139,0,0,0.1); \r\n}\r\n\r\n[id^=\"sim-\"] .sim-btn { \r\n    width: 100%; \r\n    padding: 14px; \r\n    background: linear-gradient(135deg, #8B0000, #5C0000); \r\n    color: #fff; \r\n    border: none; \r\n    border-radius: 12px; \r\n    cursor: pointer; \r\n    font-size: 16px; \r\n    font-weight: 600; \r\n    transition: all 0.3s; \r\n    margin-top: 10px; \r\n}\r\n\r\n[id^=\"sim-\"] .sim-btn:hover { \r\n    transform: translateY(-2px); \r\n    box-shadow: 0 10px 25px -5px rgba(139,0,0,0.3); \r\n}\r\n\r\n[id^=\"sim-\"] .sim-btn:disabled { \r\n    opacity: 0.7; \r\n    cursor: not-allowed; \r\n}\r\n\r\n[id^=\"sim-\"] .sim-result { \r\n    margin: 20px 30px 30px 30px; \r\n    padding: 25px; \r\n    border-radius: 16px; \r\n    text-align: center; \r\n}\r\n\r\n[id^=\"sim-\"] .sim-result:not(.sim-error) { \r\n    background: linear-gradient(135deg, #e8f5e9, #c8e6c9); \r\n    border: 1px solid #4caf50; \r\n}\r\n\r\n[id^=\"sim-\"] .sim-error { \r\n    background: linear-gradient(135deg, #ffebee, #ffcdd2); \r\n    border: 1px solid #f44336; \r\n}\r\n\r\n[id^=\"sim-\"] .sim-result-icon { \r\n    font-size: 48px; \r\n    margin-bottom: 10px; \r\n}\r\n\r\n[id^=\"sim-\"] .sim-result-label { \r\n    font-size: 12px; \r\n    color: #666; \r\n    text-transform: uppercase; \r\n    letter-spacing: 1px; \r\n}\r\n\r\n[id^=\"sim-\"] .sim-result-value { \r\n    font-size: 32px; \r\n    font-weight: bold; \r\n    margin-top: 10px; \r\n}\r\n\r\n[id^=\"sim-\"] .sim-result:not(.sim-error) .sim-result-value { \r\n    color: #2e7d32; \r\n}\r\n\r\n[id^=\"sim-\"] .sim-result-note { \r\n    font-size: 11px; \r\n    color: #888; \r\n    margin-top: 15px; \r\n}\r\n\r\n[id^=\"sim-\"] .sim-detail { \r\n    margin: 20px 30px 30px 30px; \r\n    padding: 20px; \r\n    background: #f8f9fa; \r\n    border-radius: 16px; \r\n}\r\n\r\n[id^=\"sim-\"] .sim-detail h3 { \r\n    margin-bottom: 15px; \r\n    color: #2c3e50; \r\n    font-size: 18px; \r\n    font-weight: 600; \r\n}\r\n\r\n[id^=\"sim-\"] .sim-detail-table { \r\n    width: 100%; \r\n    border-collapse: collapse; \r\n}\r\n\r\n[id^=\"sim-\"] .sim-detail-table td { \r\n    padding: 12px; \r\n    border-bottom: 1px solid #ddd; \r\n}\r\n\r\n[id^=\"sim-\"] .sim-detail-table td:first-child { \r\n    font-weight: 600; \r\n    color: #555; \r\n    width: 55%; \r\n}\r\n\r\n[id^=\"sim-\"] .sim-detail-table td:last-child { \r\n    text-align: right; \r\n    font-weight: bold; \r\n    color: #8B0000; \r\n    width: 45%; \r\n}\r\n\r\n[id^=\"sim-\"] .sim-detail-table tr:last-child td { \r\n    border-bottom: none; \r\n}\r\n\r\n[id^=\"sim-\"] .loading { \r\n    opacity: 0.7; \r\n    pointer-events: none; \r\n}\r\n\r\n\/* Transitions pour les champs dynamiques *\/\r\n[id^=\"sim-\"] #auto_groupePoidsTotal,\r\n[id^=\"sim-\"] #auto_groupeChargeUtile,\r\n[id^=\"sim-\"] #auto_groupeTypeMachine,\r\n[id^=\"sim-\"] #auto_groupeCylindree,\r\n[id^=\"sim-\"] #auto_groupePuissance {\r\n    transition: all 0.3s ease;\r\n}\r\n\r\n\/* Responsive *\/\r\n@media (max-width: 600px) { \r\n    [id^=\"sim-\"] .sim-row { \r\n        grid-template-columns: 1fr; \r\n        gap: 15px; \r\n    } \r\n    [id^=\"sim-\"] form { \r\n        padding: 20px; \r\n    } \r\n    [id^=\"sim-\"] .sim-detail-table td { \r\n        padding: 8px; \r\n        font-size: 13px; \r\n    } \r\n}                                            <\/style>\r\n                                            <div class=\"sim-container\">\r\n    <p class=\"sim-subtitle\"> Calcul de votre prime d'assurance auto<\/p>\r\n    \r\n    <form id=\"assuranceForm\">\r\n        <!-- USAGE DU V\u00c9HICULE -->\r\n        <div class=\"sim-row\">\r\n            <div class=\"sim-group\">\r\n                <label for=\"auto_usage\">Type d'usage du v\u00e9hicule<\/label>\r\n                <select id=\"auto_usage\">\r\n                    <option value=\"affaires\">Usage Affaires<\/option>\r\n                    <option value=\"transportPropre\">Transport de marchandises - Propre compte<\/option>\r\n                    <option value=\"transportTiers\">Transport de marchandises - Tiers<\/option>\r\n                    <option value=\"agricole\">Usage Agricole<\/option>\r\n                    <option value=\"machineAgricole\">Machine \/ Tracteur agricole<\/option>\r\n                    <option value=\"deuxRoues\">Deux roues (Moto)<\/option>\r\n                <\/select>\r\n            <\/div>\r\n            <div class=\"sim-group\" id=\"auto_groupePuissance\">\r\n                <label for=\"auto_puissance\">Puissance fiscale (CV)<\/label>\r\n                <select id=\"auto_puissance\">\r\n                    <option value=\"2\">2 CV<\/option>\r\n                    <option value=\"4\" selected>3 \u00e0 4 CV<\/option>\r\n                    <option value=\"6\">5 \u00e0 6 CV<\/option>\r\n                    <option value=\"10\">7 \u00e0 10 CV<\/option>\r\n                    <option value=\"14\">11 \u00e0 14 CV<\/option>\r\n                    <option value=\"15\">15 CV et plus<\/option>\r\n                <\/select>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <!-- POIDS TOTAL -->\r\n        <div class=\"sim-row\" id=\"auto_groupePoidsTotal\">\r\n            <div class=\"sim-group\">\r\n                <label for=\"auto_poidsTotal\">Poids total (tonnes)<\/label>\r\n                <input type=\"number\" id=\"auto_poidsTotal\" step=\"0.1\" value=\"3.5\" min=\"0\">\r\n            <\/div>\r\n            <div class=\"sim-group\" id=\"auto_groupeChargeUtile\" style=\"display:none\">\r\n                <label for=\"auto_chargeUtile\">Charge utile (tonnes)<\/label>\r\n                <input type=\"number\" id=\"auto_chargeUtile\" step=\"0.1\" value=\"3.5\" min=\"0\">\r\n                <small>Requis pour Transport tiers et Agricole (&gt; 3.5T)<\/small>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <!-- TYPE MACHINE AGRICOLE -->\r\n        <div class=\"sim-row\" id=\"auto_groupeTypeMachine\" style=\"display:none\">\r\n            <div class=\"sim-group\">\r\n                <label for=\"auto_typeMachine\">Type de machine agricole<\/label>\r\n                <select id=\"auto_typeMachine\">\r\n                    <option value=\"Type I - Roues caoutchouc\">Type I - Roues caoutchouc<\/option>\r\n                    <option value=\"Type I - Chenilles\">Type I - Chenilles<\/option>\r\n                    <option value=\"Type II\">Type II<\/option>\r\n                    <option value=\"Type III - Roues caoutchouc\">Type III - Roues caoutchouc<\/option>\r\n                    <option value=\"Type III - Chenilles\">Type III - Chenilles<\/option>\r\n                    <option value=\"Type IV\">Type IV<\/option>\r\n                <\/select>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <!-- CYLINDR\u00c9E -->\r\n        <div class=\"sim-row\" id=\"auto_groupeCylindree\" style=\"display:none\">\r\n            <div class=\"sim-group\">\r\n                <label for=\"auto_cylindree\">Cylindr\u00e9e (CC)<\/label>\r\n                <input type=\"number\" id=\"auto_cylindree\" value=\"125\" min=\"0\">\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <!-- FRAIS SUPPL\u00c9MENTAIRES (TVA SUPPRIM\u00c9E) -->\r\n        <div class=\"sim-row\">\r\n            <div class=\"sim-group\">\r\n                <label for=\"auto_frais\">Frais suppl\u00e9mentaires (DT)<\/label>\r\n                <input type=\"number\" id=\"auto_frais\" step=\"0.5\" value=\"0\" min=\"0\">\r\n            <\/div>\r\n            <div class=\"sim-group\">\r\n                <!-- Colonne vide pour conserver l'alignement -->\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <button type=\"button\" class=\"sim-btn sim-calc-btn\"> Calculer ma prime RC Auto<\/button>\r\n    <\/form>\r\n\r\n    <div id=\"resultat\" class=\"sim-result\" style=\"display:none\">\r\n        <div class=\"sim-result-icon\">\ud83d\ude97<\/div>\r\n        <div class=\"sim-result-label\">Prime annuelle estim\u00e9e<\/div>\r\n        <div class=\"sim-result-value\"><span id=\"auto_primeValue\">0.00<\/span> TND<\/div>\r\n        <div class=\"sim-result-note\">Prime HT <\/div>\r\n    <\/div>\r\n\r\n    <div id=\"detail\" class=\"sim-detail\" style=\"display:none\">\r\n        <h3>\ud83d\udccb D\u00e9tail du calcul<\/h3>\r\n        <table class=\"sim-detail-table\">\r\n            <tbody id=\"auto_detailBody\"><\/tbody>\r\n        <\/table>\r\n        <div style=\"margin-top:15px;padding-top:10px;border-top:1px solid #ddd;font-size:11px;color:#888;text-align:center\">\r\n          <!--  * Calcul bas\u00e9 sur la Circulaire n\u00b01\/2017 du 28 f\u00e9vrier 2017 -->\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div id=\"erreur\" class=\"sim-result sim-error\" style=\"display:none\">\r\n        <div class=\"sim-result-icon\">\u26a0\ufe0f<\/div>\r\n        <div class=\"sim-result-label\">Erreur<\/div>\r\n        <div class=\"sim-result-value\"><span id=\"auto_erreurMessage\"><\/span><\/div>\r\n    <\/div>\r\n<\/div>                                            <script id=\"js-assurance-auto-1163\" type=\"text\/javascript\">\r\n                                                \/\/ ================================================\r\n\/\/ SIMULATEUR RC AUTO - TUNISIE\r\n\/\/ Circulaire n\u00b01\/2017 du 28 f\u00e9vrier 2017\r\n\/\/ ================================================\r\n\r\n\/\/ --- TARIFS DE BASE ---\r\nvar TARIFS_RC = {\r\n    affaires: { '2': 94, '3-4': 110, '5-6': 140, '7-10': 170, '11-14': 220, '15+': 264 },\r\n    transportPropreLeger: { '2': 145, '3-4': 171, '5-6': 214, '7-10': 262, '11-14': 338, '15+': 405 },\r\n    transportPropreLourd: { primeBase: 257, supplement: 21, seuil: 3.5 },\r\n    transportTiersLourd: { primeBase: 250, supplement: 4, seuil: 3.5 },\r\n    agricoleLeger: { '2': 84, '3-4': 97, '5-6': 122, '7-10': 150, '11-14': 193, '15+': 232 },\r\n    agricoleLourd: { supplement: 13, seuil: 3.5 },\r\n    machines: { \r\n        'Type I - Roues caoutchouc': 42, \r\n        'Type I - Chenilles': 31, \r\n        'Type II': 117, \r\n        'Type III - Roues caoutchouc': 84, \r\n        'Type III - Chenilles': 59, \r\n        'Type IV': 177 \r\n    },\r\n    deuxRoues: { '\u2264125': 62, '>125': 168 }\r\n};\r\n\r\nfunction getTarifParCV(table, cv) {\r\n    if (cv <= 2) return table['2'];\r\n    if (cv <= 4) return table['3-4'];\r\n    if (cv <= 6) return table['5-6'];\r\n    if (cv <= 10) return table['7-10'];\r\n    if (cv <= 14) return table['11-14'];\r\n    return table['15+'];\r\n}\r\n\r\n\/\/ ================================================\r\n\/\/ GESTION DES CHAMPS DYNAMIQUES\r\n\/\/ ================================================\r\n\r\nfunction toggleFieldsRC(container) {\r\n    if (!container) {\r\n        container = document.querySelector('[id^=\"sim-\"]');\r\n        if (!container) return;\r\n    }\r\n    \r\n    var usageSelect = container.querySelector('#auto_usage');\r\n    if (!usageSelect) return;\r\n    var usage = usageSelect.value;\r\n\r\n    var puissanceGroup = container.querySelector('#auto_groupePuissance');\r\n    if (puissanceGroup) {\r\n        puissanceGroup.style.display = (usage === 'machineAgricole' || usage === 'deuxRoues') ? 'none' : 'flex';\r\n    }\r\n\r\n    var poidsGroup = container.querySelector('#auto_groupePoidsTotal');\r\n    if (poidsGroup) {\r\n        poidsGroup.style.display = (usage === 'machineAgricole' || usage === 'deuxRoues') ? 'none' : 'flex';\r\n    }\r\n\r\n    var chargeGroup = container.querySelector('#auto_groupeChargeUtile');\r\n    if (chargeGroup) {\r\n        chargeGroup.style.display = (usage === 'transportTiers' || usage === 'agricole') ? 'flex' : 'none';\r\n    }\r\n\r\n    var machineGroup = container.querySelector('#auto_groupeTypeMachine');\r\n    if (machineGroup) {\r\n        machineGroup.style.display = (usage === 'machineAgricole') ? 'flex' : 'none';\r\n    }\r\n\r\n    var cylindreeGroup = container.querySelector('#auto_groupeCylindree');\r\n    if (cylindreeGroup) {\r\n        cylindreeGroup.style.display = (usage === 'deuxRoues') ? 'flex' : 'none';\r\n    }\r\n\r\n    if (usage === 'deuxRoues') {\r\n        var cylInput = container.querySelector('#auto_cylindree');\r\n        if (cylInput && !cylInput.value) cylInput.value = 125;\r\n    }\r\n\r\n    if (usage === 'machineAgricole') {\r\n        var machineSelect = container.querySelector('#auto_typeMachine');\r\n        if (machineSelect && !machineSelect.value) machineSelect.value = 'Type II';\r\n    }\r\n}\r\n\r\n\/\/ ================================================\r\n\/\/ FONCTION DE CALCUL\r\n\/\/ ================================================\r\n\r\nfunction calculerPrimeRC(params) {\r\n    var usage = params.usage || 'affaires';\r\n    var puissance = params.puissance || 4;\r\n    var poidsTotal = params.poidsTotal || 3.5;\r\n    var chargeUtile = params.chargeUtile || 3.5;\r\n    var typeMachine = params.typeMachine || 'Type II';\r\n    var cylindree = params.cylindree || 125;\r\n\r\n    var primeHT = 0, detail = '';\r\n\r\n    switch (usage) {\r\n        case 'affaires':\r\n            primeHT = getTarifParCV(TARIFS_RC.affaires, puissance);\r\n            detail = 'Usage Affaires - ' + puissance + ' CV';\r\n            break;\r\n        case 'transportPropre':\r\n            if (poidsTotal <= 3.5) {\r\n                primeHT = getTarifParCV(TARIFS_RC.transportPropreLeger, puissance);\r\n                detail = 'Transport propre - ' + puissance + ' CV, ' + poidsTotal.toFixed(1) + ' T (\u2264 3.5T)';\r\n            } else {\r\n                primeHT = TARIFS_RC.transportPropreLourd.primeBase + \r\n                          (poidsTotal - TARIFS_RC.transportPropreLourd.seuil) * TARIFS_RC.transportPropreLourd.supplement;\r\n                detail = 'Transport propre - ' + puissance + ' CV, ' + poidsTotal.toFixed(1) + ' T (> 3.5T)';\r\n            }\r\n            break;\r\n        case 'transportTiers':\r\n            if (poidsTotal <= 3.5) {\r\n                primeHT = getTarifParCV(TARIFS_RC.transportPropreLeger, puissance);\r\n                detail = 'Transport tiers - ' + puissance + ' CV, ' + poidsTotal.toFixed(1) + ' T (\u2264 3.5T)';\r\n            } else {\r\n                primeHT = TARIFS_RC.transportTiersLourd.primeBase + \r\n                          (chargeUtile - TARIFS_RC.transportTiersLourd.seuil) * TARIFS_RC.transportTiersLourd.supplement;\r\n                detail = 'Transport tiers - ' + puissance + ' CV, ' + poidsTotal.toFixed(1) + ' T, charge utile ' + chargeUtile.toFixed(1) + ' T';\r\n            }\r\n            break;\r\n        case 'agricole':\r\n            if (poidsTotal <= 3.5) {\r\n                primeHT = getTarifParCV(TARIFS_RC.agricoleLeger, puissance);\r\n                detail = 'Usage agricole - ' + puissance + ' CV, ' + poidsTotal.toFixed(1) + ' T (\u2264 3.5T)';\r\n            } else {\r\n                var base = getTarifParCV(TARIFS_RC.agricoleLeger, puissance);\r\n                primeHT = base + (chargeUtile - TARIFS_RC.agricoleLourd.seuil) * TARIFS_RC.agricoleLourd.supplement;\r\n                detail = 'Usage agricole - ' + puissance + ' CV, ' + poidsTotal.toFixed(1) + ' T, charge utile ' + chargeUtile.toFixed(1) + ' T';\r\n            }\r\n            break;\r\n        case 'machineAgricole':\r\n            primeHT = TARIFS_RC.machines[typeMachine] || 0;\r\n            detail = 'Machine agricole - ' + typeMachine;\r\n            break;\r\n        case 'deuxRoues':\r\n            primeHT = cylindree <= 125 ? TARIFS_RC.deuxRoues['\u2264125'] : TARIFS_RC.deuxRoues['>125'];\r\n            detail = 'Deux roues - ' + cylindree + ' CC';\r\n            break;\r\n        default:\r\n            return { error: 'Usage non reconnu' };\r\n    }\r\n\r\n    return { primeHT: primeHT, detail: detail };\r\n}\r\n\r\n\/\/ ================================================\r\n\/\/ FONCTION PRINCIPALE (appel\u00e9e par le bouton)\r\n\/\/ ================================================\r\n\r\nfunction calculerPrimeAuto(event) {\r\n    var btn = event ? event.target.closest('.sim-calc-btn') : document.querySelector('.sim-calc-btn');\r\n    if (!btn) {\r\n        console.error('Bouton non trouv\u00e9');\r\n        return;\r\n    }\r\n    \r\n    var container = btn.closest('[id^=\"sim-\"]');\r\n    if (!container) {\r\n        console.error('Conteneur non trouv\u00e9');\r\n        return;\r\n    }\r\n\r\n    btn.innerHTML = 'Calcul en cours...';\r\n    btn.disabled = true;\r\n    container.classList.add('loading');\r\n\r\n    setTimeout(function() {\r\n        try {\r\n            var usage = container.querySelector('#auto_usage').value;\r\n            var puissance = 4;\r\n            var poidsTotal = 0;\r\n            var chargeUtile = 0;\r\n            var typeMachine = 'Type II';\r\n            var cylindree = 125;\r\n\r\n            var puissanceSelect = container.querySelector('#auto_puissance');\r\n            if (puissanceSelect && usage !== 'machineAgricole' && usage !== 'deuxRoues') {\r\n                puissance = parseInt(puissanceSelect.value) || 4;\r\n            }\r\n\r\n            var poidsInput = container.querySelector('#auto_poidsTotal');\r\n            if (poidsInput && usage !== 'machineAgricole' && usage !== 'deuxRoues') {\r\n                poidsTotal = parseFloat(poidsInput.value) || 0;\r\n            }\r\n\r\n            var chargeInput = container.querySelector('#auto_chargeUtile');\r\n            if (chargeInput && (usage === 'transportTiers' || usage === 'agricole')) {\r\n                chargeUtile = parseFloat(chargeInput.value) || 0;\r\n            }\r\n\r\n            var machineSelect = container.querySelector('#auto_typeMachine');\r\n            if (machineSelect && usage === 'machineAgricole') {\r\n                typeMachine = machineSelect.value;\r\n            }\r\n\r\n            var cylindreeInput = container.querySelector('#auto_cylindree');\r\n            if (cylindreeInput && usage === 'deuxRoues') {\r\n                cylindree = parseInt(cylindreeInput.value) || 125;\r\n            }\r\n\r\n            \/\/ TVA supprim\u00e9e, nous ne r\u00e9cup\u00e9rons que les frais\r\n            var frais = parseFloat(container.querySelector('#auto_frais').value) || 0;\r\n\r\n            if (poidsTotal < 0) throw new Error('Le poids total doit \u00eatre positif');\r\n            if (chargeUtile < 0) throw new Error('La charge utile doit \u00eatre positive');\r\n            if (cylindree < 0) throw new Error('La cylindr\u00e9e doit \u00eatre positive');\r\n\r\n            var result = calculerPrimeRC({ \r\n                usage: usage, \r\n                puissance: puissance, \r\n                poidsTotal: poidsTotal, \r\n                chargeUtile: chargeUtile, \r\n                typeMachine: typeMachine, \r\n                cylindree: cylindree \r\n            });\r\n\r\n            if (result.error) throw new Error(result.error);\r\n\r\n            var primeHT = result.primeHT;\r\n            var primeTotal = primeHT + frais; \/\/ Calcul du total sans TVA\r\n\r\n            var primeSpan = container.querySelector('#auto_primeValue');\r\n            if (primeSpan) primeSpan.textContent = primeHT.toFixed(2);\r\n\r\n            var detailBody = container.querySelector('#auto_detailBody');\r\n            if (detailBody) {\r\n                detailBody.innerHTML = '';\r\n                \r\n                var rows = [['Usage', result.detail]];\r\n\r\n                if (usage === 'deuxRoues') {\r\n                    rows.push(['Cylindr\u00e9e', cylindree + ' CC']);\r\n                } else if (usage === 'machineAgricole') {\r\n                    rows.push(['Type de machine', typeMachine]);\r\n                } else {\r\n                    rows.push(['Puissance fiscale', puissance + ' CV']);\r\n                    rows.push(['Poids total', poidsTotal.toFixed(1) + ' T']);\r\n                    if (usage === 'transportTiers' || usage === 'agricole') {\r\n                        rows.push(['Charge utile', chargeUtile.toFixed(1) + ' T']);\r\n                    }\r\n                }\r\n\r\n                rows.push(['Prime annuelle HT', primeHT.toFixed(2) + ' DT']);\r\n                rows.push(['Frais suppl\u00e9mentaires', frais.toFixed(2) + ' DT']);\r\n                rows.push(['Total', primeTotal.toFixed(2) + ' DT']);\r\n                \r\n                rows.forEach(function(r) {\r\n                    var row = document.createElement('tr');\r\n                    row.innerHTML = '<td>' + r[0] + '<\/td><td style=\"text-align:right;font-weight:bold;color:#8B0000;\">' + r[1] + '<\/td>';\r\n                    detailBody.appendChild(row);\r\n                });\r\n            }\r\n\r\n            container.querySelector('#resultat').style.display = 'block';\r\n            container.querySelector('#detail').style.display = 'block';\r\n            container.querySelector('#erreur').style.display = 'none';\r\n            container.querySelector('#resultat').scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n\r\n        } catch (error) {\r\n            var errMsg = container.querySelector('#auto_erreurMessage');\r\n            if (errMsg) errMsg.textContent = error.message;\r\n            container.querySelector('#erreur').style.display = 'block';\r\n            container.querySelector('#resultat').style.display = 'none';\r\n            container.querySelector('#detail').style.display = 'none';\r\n            container.querySelector('#erreur').scrollIntoView({ behavior: 'smooth' });\r\n        } finally {\r\n            btn.innerHTML = '\ud83d\ude97 Calculer ma prime RC Auto';\r\n            btn.disabled = false;\r\n            container.classList.remove('loading');\r\n        }\r\n    }, 100);\r\n}\r\n\r\n\/\/ ================================================\r\n\/\/ INITIALISATION\r\n\/\/ ================================================\r\n\r\nwindow.calculerPrimeAuto = calculerPrimeAuto;\r\nwindow.calculer = calculerPrimeAuto;\r\nwindow.toggleFieldsRC = toggleFieldsRC;\r\n\r\n(function() {\r\n    function init() {\r\n        var container = document.querySelector('[id^=\"sim-\"]') || document.querySelector('.simulator-container');\r\n        if (!container) return;\r\n        \r\n        toggleFieldsRC(container);\r\n\r\n        var btn = container.querySelector('.sim-calc-btn');\r\n        if (btn) {\r\n            var newBtn = btn.cloneNode(true);\r\n            btn.parentNode.replaceChild(newBtn, btn);\r\n            newBtn.addEventListener('click', function(e) {\r\n                e.preventDefault();\r\n                calculerPrimeAuto(e);\r\n            });\r\n        }\r\n\r\n        var usageSelect = container.querySelector('#auto_usage');\r\n        if (usageSelect) {\r\n            var newUsageSelect = usageSelect.cloneNode(true);\r\n            usageSelect.parentNode.replaceChild(newUsageSelect, usageSelect);\r\n            newUsageSelect.addEventListener('change', function() {\r\n                toggleFieldsRC(container);\r\n            });\r\n        }\r\n\r\n        container.querySelectorAll('input, select').forEach(function(input) {\r\n            input.addEventListener('keypress', function(e) {\r\n                if (e.key === 'Enter') {\r\n                    e.preventDefault();\r\n                    var btn = container.querySelector('.sim-calc-btn');\r\n                    if (btn) btn.click();\r\n                }\r\n            });\r\n        });\r\n    }\r\n\r\n    if (document.readyState === 'loading') {\r\n        document.addEventListener('DOMContentLoaded', function() { setTimeout(init, 100); });\r\n    } else {\r\n        setTimeout(init, 100);\r\n    }\r\n})();                                            <\/script>\r\n                                        <\/div>\r\n                                        \r\n                                        <div class=\"sim-modal-footer\">\r\n                                                                                        <button class=\"sim-btn sim-reset-btn\" onclick=\"resetSimulator('assurance-auto-1163')\">\r\n                                                Reinitialiser\r\n                                            <\/button>\r\n                                        <\/div>\r\n                                    <\/div>\r\n                                <\/div>\r\n                            <\/div>\r\n                                                    <a href=\"#\" class=\"sim-card\" onclick=\"openSimModal('assurance-maladie-9745', 'maladie'); return false;\"\r\n                               data-title=\"Assurance Maladie\" data-category=\"assurance-non-vie\">\r\n                                <div class=\"sim-card-icon\">\r\n                                                                            <img decoding=\"async\" src=\"https:\/\/plateforme.risks.ovh\/wp-content\/plugins\/generateur-simulateurs\/simulateurs\/assurance-non-vie\/assurance-maladie\/icon.png\" alt=\"Assurance Maladie\" class=\"sim-card-img\">\r\n                                                                    <\/div>\r\n                                <div class=\"sim-card-content\">\r\n                                    <div class=\"sim-card-title\">Assurance Maladie<\/div>\r\n                                    <div class=\"sim-card-desc\">Simulateur des garanties d&#039;assurance maladie <\/div>\r\n                                <\/div>\r\n                            <\/a>\r\n                            \r\n                            <div id=\"modal-assurance-maladie-9745\" class=\"sim-modal\" style=\"display:none;\" data-sim-type=\"maladie\">\r\n                                <div class=\"sim-modal-content\">\r\n                                    <div class=\"sim-modal-header\">\r\n                                        <h3 class=\"sim-modal-title\">Assurance Maladie<\/h3>\r\n                                        <button class=\"sim-modal-close-btn\" onclick=\"closeSimModal('assurance-maladie-9745')\">&times;<\/button>\r\n                                    <\/div>\r\n                                    \r\n                                    <div class=\"sim-modal-body\" id=\"modal-body-assurance-maladie-9745\">\r\n                                        <div id=\"sim-assurance-maladie-9745\" class=\"simulator-container\" data-sim-type=\"maladie\">\r\n                                            <style id=\"css-assurance-maladie-9745\">\r\n                                                \/* ================================================\r\n   STYLES SP\u00c9CIFIQUES AU SIMULATEUR MALADIE\r\n   ================================================ *\/\r\n\r\n[id^=\"sim-\"] .sim-container {\r\n    max-width: 100%;\r\n    margin: 0 auto;\r\n    background: #fff;\r\n    border-radius: 12px;\r\n    overflow: hidden;\r\n    font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-subtitle {\r\n    text-align: center;\r\n    color: #666;\r\n    padding: 12px 15px;\r\n    background: #f8f9fa;\r\n    font-size: 13px;\r\n    margin: 0;\r\n    border-bottom: 1px solid #eee;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-subtitle strong {\r\n    color: #8B0000;\r\n}\r\n\r\n[id^=\"sim-\"] form {\r\n    padding: 20px 25px;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-row {\r\n    display: grid;\r\n    grid-template-columns: 1fr 1fr;\r\n    gap: 15px;\r\n    margin-bottom: 15px;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-group {\r\n    display: flex;\r\n    flex-direction: column;\r\n}\r\n\r\n[id^=\"sim-\"] label {\r\n    font-weight: 600;\r\n    color: #333;\r\n    margin-bottom: 5px;\r\n    font-size: 13px;\r\n}\r\n\r\n[id^=\"sim-\"] select,\r\n[id^=\"sim-\"] input {\r\n    padding: 10px 12px;\r\n    border: 2px solid #e0e0e0;\r\n    border-radius: 8px;\r\n    font-size: 14px;\r\n    transition: all 0.3s;\r\n    font-family: inherit;\r\n    background: white;\r\n    width: 100%;\r\n}\r\n\r\n[id^=\"sim-\"] select:focus,\r\n[id^=\"sim-\"] input:focus {\r\n    outline: none;\r\n    border-color: #8B0000;\r\n    box-shadow: 0 0 0 3px rgba(139,0,0,0.1);\r\n}\r\n\r\n[id^=\"sim-\"] select:disabled,\r\n[id^=\"sim-\"] input:disabled {\r\n    background-color: #f5f5f5;\r\n    color: #999 !important;\r\n    cursor: not-allowed;\r\n}\r\n\r\n[id^=\"sim-\"] select {\r\n    cursor: pointer;\r\n    appearance: auto;\r\n}\r\n\r\n[id^=\"sim-\"] small {\r\n    color: #888;\r\n    font-size: 10px;\r\n    margin-top: 3px;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-section-header {\r\n    background: linear-gradient(135deg, #f8f9fa, #e9ecef);\r\n    padding: 8px 14px;\r\n    border-radius: 6px;\r\n    margin: 18px 0 12px 0;\r\n    font-weight: 600;\r\n    color: #2c3e50;\r\n    font-size: 14px;\r\n    border-left: 4px solid #8B0000;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-section-header:first-of-type {\r\n    margin-top: 0;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-section-header span {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 8px;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-btn {\r\n    width: 100%;\r\n    padding: 13px;\r\n    background: linear-gradient(135deg, #8B0000, #5C0000);\r\n    color: #fff;\r\n    border: none;\r\n    border-radius: 8px;\r\n    cursor: pointer;\r\n    font-size: 15px;\r\n    font-weight: 600;\r\n    transition: all 0.3s;\r\n    margin-top: 10px;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-btn:hover {\r\n    transform: translateY(-2px);\r\n    box-shadow: 0 8px 20px -5px rgba(139,0,0,0.3);\r\n}\r\n\r\n[id^=\"sim-\"] .sim-btn:disabled {\r\n    opacity: 0.7;\r\n    transform: none;\r\n    cursor: not-allowed;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-result {\r\n    margin: 15px 25px 25px 25px;\r\n    padding: 20px;\r\n    border-radius: 12px;\r\n    text-align: center;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-result:not(.sim-error) {\r\n    background: linear-gradient(135deg, #e8f5e9, #c8e6c9);\r\n    border: 1px solid #4caf50;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-error {\r\n    background: linear-gradient(135deg, #ffebee, #ffcdd2);\r\n    border: 1px solid #f44336;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-result-icon {\r\n    font-size: 40px;\r\n    margin-bottom: 8px;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-result-label {\r\n    font-size: 11px;\r\n    color: #666;\r\n    text-transform: uppercase;\r\n    letter-spacing: 1px;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-result-value {\r\n    font-size: 28px;\r\n    font-weight: bold;\r\n    margin-top: 8px;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-result:not(.sim-error) .sim-result-value {\r\n    color: #2e7d32;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-result-note {\r\n    font-size: 11px;\r\n    color: #888;\r\n    margin-top: 8px;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-detail {\r\n    margin: 15px 25px 25px 25px;\r\n    padding: 18px;\r\n    background: #f8f9fa;\r\n    border-radius: 12px;\r\n    border: 1px solid #eee;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-detail h3 {\r\n    margin-bottom: 12px;\r\n    color: #2c3e50;\r\n    font-size: 16px;\r\n    font-weight: 600;\r\n    text-align: center;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-detail-table {\r\n    width: 100%;\r\n    border-collapse: collapse;\r\n    font-size: 13px;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-detail-table td {\r\n    padding: 8px 10px;\r\n    border-bottom: 1px solid #ddd;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-detail-table td:first-child {\r\n    font-weight: 500;\r\n    color: #555;\r\n    width: 55%;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-detail-table td:last-child {\r\n    text-align: right;\r\n    font-weight: bold;\r\n    color: #8B0000;\r\n    width: 45%;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-detail-table tr:hover {\r\n    background: #f1f1f1;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-detail-table tr:last-child td {\r\n    border-bottom: none;\r\n}\r\n\r\n[id^=\"sim-\"] .loading {\r\n    opacity: 0.7;\r\n    pointer-events: none;\r\n}\r\n\r\n\/* ================================================\r\n   RESPONSIVE\r\n   ================================================ *\/\r\n\r\n@media (max-width: 600px) {\r\n    [id^=\"sim-\"] .sim-row {\r\n        grid-template-columns: 1fr;\r\n        gap: 12px;\r\n    }\r\n    \r\n    [id^=\"sim-\"] form {\r\n        padding: 15px;\r\n    }\r\n    \r\n    [id^=\"sim-\"] .sim-result-value {\r\n        font-size: 24px;\r\n    }\r\n    \r\n    [id^=\"sim-\"] .sim-detail-table td {\r\n        padding: 6px 8px;\r\n        font-size: 11px;\r\n    }\r\n    \r\n    [id^=\"sim-\"] .sim-result,\r\n    [id^=\"sim-\"] .sim-detail {\r\n        margin: 12px 15px 15px 15px;\r\n        padding: 15px;\r\n    }\r\n    \r\n    [id^=\"sim-\"] .sim-subtitle {\r\n        font-size: 12px;\r\n        padding: 10px;\r\n    }\r\n}                                            <\/style>\r\n                                            <div class=\"sim-container\">\r\n    <p class=\"sim-subtitle\"> Calcul des garanties maladie<\/p>\r\n    \r\n    <form id=\"maladieForm\">\r\n        <!-- SECTION 1 : PROFIL -->\r\n        <div class=\"sim-section-header\">\r\n            <span>\ud83d\udc64 Profil de l'assur\u00e9<\/span>\r\n        <\/div>\r\n        \r\n        <div class=\"sim-row\">\r\n            <div class=\"sim-group\">\r\n                <label for=\"maladie_age\">\u00c2ge de l'assur\u00e9<\/label>\r\n                <select id=\"maladie_age\">\r\n                    <option value=\"18\">18 - 25 ans<\/option>\r\n                    <option value=\"30\" selected>26 - 35 ans<\/option>\r\n                    <option value=\"40\">36 - 50 ans<\/option>\r\n                    <option value=\"55\">51 - 65 ans<\/option>\r\n                    <option value=\"70\">Plus de 65 ans<\/option>\r\n                <\/select>\r\n            <\/div>\r\n            <div class=\"sim-group\">\r\n                <label for=\"maladie_statut\">Statut professionnel<\/label>\r\n                <select id=\"maladie_statut\">\r\n                    <option value=\"salarie\">Salari\u00e9 du priv\u00e9<\/option>\r\n                    <option value=\"fonctionnaire\">Fonctionnaire<\/option>\r\n                    <option value=\"independant\">Travailleur ind\u00e9pendant<\/option>\r\n                    <option value=\"retraite\">Retrait\u00e9<\/option>\r\n                    <option value=\"sans_emploi\">Sans emploi<\/option>\r\n                <\/select>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <div class=\"sim-row\">\r\n            <div class=\"sim-group\">\r\n                <label for=\"maladie_salaire\">Salaire mensuel brut (TND)<\/label>\r\n                <input type=\"number\" id=\"maladie_salaire\" step=\"100\" value=\"1500\" min=\"0\">\r\n            <\/div>\r\n            <div class=\"sim-group\">\r\n                <label for=\"maladie_nombre_personnes\">Nombre de personnes \u00e0 charge<\/label>\r\n                <select id=\"maladie_nombre_personnes\">\r\n                    <option value=\"0\">0 (isol\u00e9)<\/option>\r\n                    <option value=\"1\" selected>1 personne<\/option>\r\n                    <option value=\"2\">2 personnes<\/option>\r\n                    <option value=\"3\">3 personnes<\/option>\r\n                    <option value=\"4\">4 personnes ou plus<\/option>\r\n                <\/select>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <!-- SECTION 2 : GARANTIES -->\r\n        <div class=\"sim-section-header\">\r\n            <span>\ud83d\udee1\ufe0f Garanties choisies<\/span>\r\n        <\/div>\r\n\r\n        <div class=\"sim-row\">\r\n            <div class=\"sim-group\">\r\n                <label for=\"maladie_formule\">Formule de garantie<\/label>\r\n                <select id=\"maladie_formule\">\r\n                    <option value=\"base\">Base (AMO seul)<\/option>\r\n                    <option value=\"standard\" selected>Standard (AMO + compl\u00e9mentaire)<\/option>\r\n                    <option value=\"premium\">Premium (Couverture int\u00e9grale)<\/option>\r\n                <\/select>\r\n            <\/div>\r\n            <div class=\"sim-group\">\r\n                <label for=\"maladie_franchise\">Franchise annuelle (TND)<\/label>\r\n                <select id=\"maladie_franchise\">\r\n                    <option value=\"0\">0 TND<\/option>\r\n                    <option value=\"50\">50 TND<\/option>\r\n                    <option value=\"100\" selected>100 TND<\/option>\r\n                    <option value=\"200\">200 TND<\/option>\r\n                <\/select>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <div class=\"sim-row\">\r\n            <div class=\"sim-group\">\r\n                <label for=\"maladie_dentaire\">Soins dentaires<\/label>\r\n                <select id=\"maladie_dentaire\">\r\n                    <option value=\"non\">Non inclus<\/option>\r\n                    <option value=\"oui\" selected>Inclus<\/option>\r\n                <\/select>\r\n            <\/div>\r\n            <div class=\"sim-group\">\r\n                <label for=\"maladie_optique\">Optique (lunettes)<\/label>\r\n                <select id=\"maladie_optique\">\r\n                    <option value=\"non\">Non inclus<\/option>\r\n                    <option value=\"oui\" selected>Inclus<\/option>\r\n                <\/select>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <div class=\"sim-row\">\r\n            <div class=\"sim-group\">\r\n                <label for=\"maladie_hospitalisation\">Type d'hospitalisation<\/label>\r\n                <select id=\"maladie_hospitalisation\">\r\n                    <option value=\"standard\">Salle commune<\/option>\r\n                    <option value=\"semi\" selected>Semi-priv\u00e9e<\/option>\r\n                    <option value=\"privee\">Chambre priv\u00e9e<\/option>\r\n                <\/select>\r\n            <\/div>\r\n            <div class=\"sim-group\">\r\n                <label for=\"maladie_medicaments\">Couverture m\u00e9dicaments<\/label>\r\n                <select id=\"maladie_medicaments\">\r\n                    <option value=\"base\">Base (70%)<\/option>\r\n                    <option value=\"renforce\" selected>Renforc\u00e9 (100%)<\/option>\r\n                <\/select>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <!-- SECTION 3 : OPTIONS ACTUARIELLES -->\r\n        <div class=\"sim-section-header\">\r\n            <span>\ud83d\udcca Options actuarielles<\/span>\r\n        <\/div>\r\n\r\n        <div class=\"sim-row\">\r\n            <div class=\"sim-group\">\r\n                <label for=\"maladie_taux_technique\">Taux technique annuel (%)<\/label>\r\n                <input type=\"number\" id=\"maladie_taux_technique\" step=\"0.1\" value=\"3.0\" min=\"0\" max=\"10\">\r\n\r\n            <\/div>\r\n            <div class=\"sim-group\">\r\n                <label for=\"maladie_frais_gestion\">Frais de gestion (%)<\/label>\r\n                <input type=\"number\" id=\"maladie_frais_gestion\" step=\"0.01\" value=\"0.75\" min=\"0\" max=\"5\">\r\n   \r\n            <\/div>\r\n        <\/div>\r\n\r\n\r\n\r\n        <button type=\"button\" class=\"sim-btn sim-calc-btn\"> Calculer ma prime d\u2019assurance maladie<\/button>\r\n    <\/form>\r\n\r\n    <div id=\"resultat\" class=\"sim-result\" style=\"display:none\">\r\n        <div class=\"sim-result-icon\">\ud83c\udfe5<\/div>\r\n        <div class=\"sim-result-label\">Prime annuelle totale<\/div>\r\n        <div class=\"sim-result-value\"><span id=\"maladie_primeTotale\">0.00<\/span> TND<\/div>\r\n        <div class=\"sim-result-note\">\r\n            Dont AMO : <span id=\"maladie_amo\">0.00<\/span> TND | \r\n            Dont Compl\u00e9mentaire : <span id=\"maladie_complementaire\">0.00<\/span> TND\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div id=\"detail\" class=\"sim-detail\" style=\"display:none\">\r\n        <h3>\ud83d\udccb D\u00e9tail du calcul<\/h3>\r\n        <table class=\"sim-detail-table\">\r\n            <tbody id=\"maladie_detailBody\"><\/tbody>\r\n        <\/table>\r\n    <\/div>\r\n\r\n    <div id=\"erreur\" class=\"sim-result sim-error\" style=\"display:none\">\r\n        <div class=\"sim-result-icon\">\u26a0\ufe0f<\/div>\r\n        <div class=\"sim-result-label\">Erreur<\/div>\r\n        <div class=\"sim-result-value\"><span id=\"maladie_erreurMessage\"><\/span><\/div>\r\n    <\/div>\r\n<\/div>                                            <script id=\"js-assurance-maladie-9745\" type=\"text\/javascript\">\r\n                                                \/\/ ================================================\r\n\/\/ SIMULATEUR ASSURANCE MALADIE\r\n\/\/ Loi n\u00b02004-71 & Code des Assurances\r\n\/\/ ================================================\r\n\r\n\/\/ \u2705 FONCTION DE MASQUAGE\r\nfunction updateMaladieFields() {\r\n    var container = document.querySelector('[id^=\"sim-\"]');\r\n    if (!container) return;\r\n    \r\n    \/\/ Tous les champs sont visibles pour la maladie\r\n}\r\n\r\n\/\/ \u2705 FONCTION PRINCIPALE DE CALCUL (expos\u00e9e globalement)\r\nwindow.calculerMaladie = function(event) {\r\n    console.log('\ud83d\udd04 Calcul maladie d\u00e9clench\u00e9');\r\n    \r\n    var btn = event ? event.target.closest('.sim-calc-btn') : document.querySelector('.sim-calc-btn');\r\n    if (!btn) {\r\n        console.error('\u274c Bouton non trouv\u00e9');\r\n        return;\r\n    }\r\n    \r\n    var container = btn.closest('[id^=\"sim-\"]');\r\n    if (!container) {\r\n        console.error('\u274c Conteneur non trouv\u00e9');\r\n        return;\r\n    }\r\n    \r\n    btn.innerHTML = '\u23f3 Calcul en cours...';\r\n    btn.disabled = true;\r\n    container.classList.add('loading');\r\n    \r\n    setTimeout(function() {\r\n        try {\r\n            \/\/ R\u00e9cup\u00e9ration des valeurs\r\n            var ageValue = container.querySelector('#maladie_age') ? container.querySelector('#maladie_age').value : '30';\r\n            var statut = container.querySelector('#maladie_statut') ? container.querySelector('#maladie_statut').value : 'salarie';\r\n            var salaire = parseFloat(container.querySelector('#maladie_salaire') ? container.querySelector('#maladie_salaire').value : 0) || 0;\r\n            var personnes = parseInt(container.querySelector('#maladie_nombre_personnes') ? container.querySelector('#maladie_nombre_personnes').value : 0) || 0;\r\n            var formule = container.querySelector('#maladie_formule') ? container.querySelector('#maladie_formule').value : 'standard';\r\n            var franchise = parseFloat(container.querySelector('#maladie_franchise') ? container.querySelector('#maladie_franchise').value : 0) || 0;\r\n            var dentaire = container.querySelector('#maladie_dentaire') ? container.querySelector('#maladie_dentaire').value : 'oui';\r\n            var optique = container.querySelector('#maladie_optique') ? container.querySelector('#maladie_optique').value : 'oui';\r\n            var hosp = container.querySelector('#maladie_hospitalisation') ? container.querySelector('#maladie_hospitalisation').value : 'semi';\r\n            var medoc = container.querySelector('#maladie_medicaments') ? container.querySelector('#maladie_medicaments').value : 'renforce';\r\n            var tauxTech = parseFloat(container.querySelector('#maladie_taux_technique') ? container.querySelector('#maladie_taux_technique').value : 3.0) || 3.0;\r\n            var fraisGestion = parseFloat(container.querySelector('#maladie_frais_gestion') ? container.querySelector('#maladie_frais_gestion').value : 0.75) || 0.75;\r\n\r\n            if (isNaN(salaire) || salaire < 0) throw new Error('Salaire invalide');\r\n            if (isNaN(personnes) || personnes < 0 || personnes > 10) throw new Error('Nombre de personnes invalide');\r\n\r\n            var ageMap = { '18': 18, '30': 30, '40': 40, '55': 55, '70': 70 };\r\n            var age = ageMap[ageValue] || 30;\r\n            \r\n            \/\/ Calcul AMO\r\n            var tauxAMO = 6.75;\r\n            if (statut === 'independant') {\r\n                tauxAMO = 6.75;\r\n            } else if (statut === 'retraite') {\r\n                tauxAMO = 4.0;\r\n            } else if (statut === 'sans_emploi') {\r\n                tauxAMO = 0;\r\n            }\r\n            \r\n            var assiette = Math.max(0, salaire * 0.95);\r\n            var amoAnnuel = assiette * (tauxAMO \/ 100) * 12;\r\n            \r\n            \/\/ Calcul compl\u00e9mentaire\r\n            var coeffAge = { 18: 0.6, 30: 0.8, 40: 1.0, 55: 1.4, 70: 1.9 }[age] || 1.0;\r\n            var coeffPersonnes = { 0: 1.0, 1: 1.5, 2: 1.9, 3: 2.3, 4: 2.7 }[personnes] || 1.0;\r\n            var coeffFormule = { base: 1.0, standard: 1.6, premium: 2.4 }[formule] || 1.0;\r\n            var coeffFranchise = { 0: 1.2, 50: 1.05, 100: 0.95, 200: 0.85 }[franchise] || 1.0;\r\n            var coeffDentaire = dentaire === 'oui' ? 1.15 : 1.0;\r\n            var coeffOptique = optique === 'oui' ? 1.12 : 1.0;\r\n            var coeffHosp = { standard: 1.0, semi: 1.2, privee: 1.45 }[hosp] || 1.0;\r\n            var coeffMedoc = medoc === 'renforce' ? 1.15 : 1.0;\r\n            \r\n            var coeffTotal = coeffAge * coeffPersonnes * coeffFormule * coeffFranchise * \r\n                             coeffDentaire * coeffOptique * coeffHosp * coeffMedoc;\r\n            \r\n            var complementaire = 200 * coeffTotal;\r\n            var primeTotale = amoAnnuel + complementaire;\r\n            var provisionDeces = salaire * 36 * (age \/ 100) * (1 + tauxTech \/ 100);\r\n\r\n            \/\/ \u2705 Affichage des r\u00e9sultats\r\n            var primeSpan = container.querySelector('#maladie_primeTotale');\r\n            if (primeSpan) primeSpan.textContent = primeTotale.toFixed(2);\r\n            \r\n            var amoSpan = container.querySelector('#maladie_amo');\r\n            if (amoSpan) amoSpan.textContent = amoAnnuel.toFixed(2);\r\n            \r\n            var complementaireSpan = container.querySelector('#maladie_complementaire');\r\n            if (complementaireSpan) complementaireSpan.textContent = complementaire.toFixed(2);\r\n\r\n            \/\/ \u2705 D\u00e9tails du calcul\r\n            var detailBody = container.querySelector('#maladie_detailBody');\r\n            if (detailBody) {\r\n                detailBody.innerHTML = '';\r\n\r\n                var statutLabels = {\r\n                    salarie: 'Salari\u00e9 du priv\u00e9',\r\n                    fonctionnaire: 'Fonctionnaire',\r\n                    independant: 'Travailleur ind\u00e9pendant',\r\n                    retraite: 'Retrait\u00e9',\r\n                    sans_emploi: 'Sans emploi'\r\n                };\r\n\r\n                var details = [\r\n                    { label: 'Statut professionnel', value: statutLabels[statut] || statut },\r\n                    { label: '\u00c2ge', value: age + ' ans' },\r\n                    { label: 'Salaire mensuel', value: salaire.toFixed(2) + ' TND' },\r\n                    { label: 'Personnes \u00e0 charge', value: personnes },\r\n                    { label: 'Formule', value: formule === 'base' ? 'Base (AMO seul)' : formule === 'standard' ? 'Standard' : 'Premium' },\r\n                    { label: 'Franchise', value: franchise + ' TND' },\r\n                    { label: 'Dentaire', value: dentaire === 'oui' ? '\u2705 Inclus' : '\u274c Non inclus' },\r\n                    { label: 'Optique', value: optique === 'oui' ? '\u2705 Inclus' : '\u274c Non inclus' },\r\n                    { label: 'Hospitalisation', value: hosp === 'standard' ? 'Salle commune' : hosp === 'semi' ? 'Semi-priv\u00e9e' : 'Chambre priv\u00e9e' },\r\n                    { label: 'M\u00e9dicaments', value: medoc === 'base' ? 'Base (70%)' : 'Renforc\u00e9 (100%)' },\r\n                    { label: 'Taux technique', value: tauxTech.toFixed(2) + ' %' },\r\n                    { label: 'Frais de gestion', value: fraisGestion.toFixed(2) + ' %' },\r\n                ];\r\n\r\n                details.forEach(function(d) {\r\n                    var row = document.createElement('tr');\r\n                    row.innerHTML = '<td>' + d.label + '<\/td><td style=\"text-align:right;font-weight:bold;color:#8B0000;\">' + d.value + '<\/td>';\r\n                    detailBody.appendChild(row);\r\n                });\r\n\r\n                var sepRow = document.createElement('tr');\r\n                sepRow.innerHTML = '<td colspan=\"2\" style=\"border-bottom:2px solid #8B0000;\"><\/td>';\r\n                detailBody.appendChild(sepRow);\r\n\r\n                var resultRows = [\r\n                    { label: '\ud83d\udccc Assiette AMO', value: assiette.toFixed(2) + ' TND' },\r\n                    { label: '\ud83d\udccc Taux AMO', value: tauxAMO + ' %' },\r\n                    { label: '\ud83d\udccc AMO annuel', value: amoAnnuel.toFixed(2) + ' TND' },\r\n                    { label: '\ud83d\udccc Coefficient compl\u00e9mentaire', value: coeffTotal.toFixed(2) },\r\n                    { label: '\ud83d\udccc Compl\u00e9mentaire annuel', value: complementaire.toFixed(2) + ' TND' },\r\n                    { label: '\ud83d\udccc Provision math\u00e9matique', value: provisionDeces.toFixed(2) + ' TND' },\r\n                    { label: '\ud83d\udccc Prime totale', value: primeTotale.toFixed(2) + ' TND' },\r\n                ];\r\n\r\n                resultRows.forEach(function(r) {\r\n                    var row = document.createElement('tr');\r\n                    row.style.fontWeight = 'bold';\r\n                    row.style.background = '#f0f0f0';\r\n                    row.innerHTML = '<td>' + r.label + '<\/td><td style=\"text-align:right;color:#8B0000;\">' + r.value + '<\/td>';\r\n                    detailBody.appendChild(row);\r\n                });\r\n            }\r\n\r\n            container.querySelector('#resultat').style.display = 'block';\r\n            container.querySelector('#detail').style.display = 'block';\r\n            container.querySelector('#erreur').style.display = 'none';\r\n            container.querySelector('#resultat').scrollIntoView({ behavior: 'smooth' });\r\n\r\n        } catch (error) {\r\n            var errMsg = container.querySelector('#maladie_erreurMessage');\r\n            if (errMsg) errMsg.textContent = error.message;\r\n            container.querySelector('#erreur').style.display = 'block';\r\n            container.querySelector('#resultat').style.display = 'none';\r\n            container.querySelector('#detail').style.display = 'none';\r\n            container.querySelector('#erreur').scrollIntoView({ behavior: 'smooth' });\r\n        } finally {\r\n            btn.innerHTML = '\ud83d\udcca Calculer ma prime maladie';\r\n            btn.disabled = false;\r\n            container.classList.remove('loading');\r\n        }\r\n    }, 100);\r\n};\r\n\r\n\/\/ ================================================\r\n\/\/ \u2705 INITIALISATION DU SIMULATEUR\r\n\/\/ ================================================\r\nwindow.initSimulator = function() {\r\n    var container = document.querySelector('[id^=\"sim-\"]');\r\n    if (!container) {\r\n        console.error('\u274c Conteneur non trouv\u00e9 pour le simulateur maladie');\r\n        return;\r\n    }\r\n    \r\n    console.log('\ud83d\udd04 Initialisation simulateur maladie');\r\n    \r\n    \/\/ \u2705 Initialiser le bouton de calcul\r\n    var btn = container.querySelector('.sim-calc-btn');\r\n    if (btn) {\r\n        var newBtn = btn.cloneNode(true);\r\n        btn.parentNode.replaceChild(newBtn, btn);\r\n        newBtn.addEventListener('click', function(e) {\r\n            e.preventDefault();\r\n            e.stopPropagation();\r\n            console.log('\ud83d\udd04 Clic sur le bouton maladie');\r\n            window.calculerMaladie(e);\r\n        });\r\n        console.log('\u2705 Bouton maladie initialis\u00e9');\r\n    } else {\r\n        console.error('\u274c Bouton maladie non trouv\u00e9');\r\n    }\r\n    \r\n    \/\/ Appel initial de la fonction de masquage\r\n    updateMaladieFields();\r\n    \r\n    \/\/ \u00c9couteurs pour les champs (masquage uniquement)\r\n    container.querySelectorAll('select, input').forEach(function(input) {\r\n        input.addEventListener('change', function() {\r\n            updateMaladieFields();\r\n        });\r\n    });\r\n    \r\n    console.log('\u2705 Simulateur maladie initialis\u00e9');\r\n};\r\n\r\n\/\/ ================================================\r\n\/\/ \u2705 AUTO-INIT\r\n\/\/ ================================================\r\nif (document.readyState === 'loading') {\r\n    document.addEventListener('DOMContentLoaded', function() {\r\n        setTimeout(window.initSimulator, 200);\r\n    });\r\n} else {\r\n    setTimeout(window.initSimulator, 200);\r\n}                                            <\/script>\r\n                                        <\/div>\r\n                                        \r\n                                        <div class=\"sim-modal-footer\">\r\n                                                                                        <button class=\"sim-btn sim-reset-btn\" onclick=\"resetSimulator('assurance-maladie-9745')\">\r\n                                                Reinitialiser\r\n                                            <\/button>\r\n                                        <\/div>\r\n                                    <\/div>\r\n                                <\/div>\r\n                            <\/div>\r\n                                            <\/div>\r\n                <\/div>\r\n                            <div class=\"sim-category-section\" data-category=\"irpp\">\r\n                    <div class=\"sim-category-header\" style=\"border-bottom-color: #8B0000\">\r\n                        <div class=\"sim-category-icon\">\ud83d\udcca<\/div>\r\n                        <div class=\"sim-category-title\">IRPP - Impot sur le Revenu<\/div>\r\n                    <\/div>\r\n                    <div class=\"sim-grid\">\r\n                                                    <a href=\"#\" class=\"sim-card\" onclick=\"openSimModal('calcul-irpp-3017', 'irpp'); return false;\"\r\n                               data-title=\"Calculateur IRPP Tunisie\" data-category=\"irpp\">\r\n                                <div class=\"sim-card-icon\">\r\n                                                                            <img decoding=\"async\" src=\"https:\/\/plateforme.risks.ovh\/wp-content\/plugins\/generateur-simulateurs\/simulateurs\/irpp\/calcul-irpp\/icon.png\" alt=\"Calculateur IRPP Tunisie\" class=\"sim-card-img\">\r\n                                                                    <\/div>\r\n                                <div class=\"sim-card-content\">\r\n                                    <div class=\"sim-card-title\">Calculateur IRPP Tunisie<\/div>\r\n                                    <div class=\"sim-card-desc\">Simulateur de l&#039;Impot sur le Revenu des Personnes Physiques <\/div>\r\n                                <\/div>\r\n                            <\/a>\r\n                            \r\n                            <div id=\"modal-calcul-irpp-3017\" class=\"sim-modal\" style=\"display:none;\" data-sim-type=\"irpp\">\r\n                                <div class=\"sim-modal-content\">\r\n                                    <div class=\"sim-modal-header\">\r\n                                        <h3 class=\"sim-modal-title\">Calculateur IRPP Tunisie<\/h3>\r\n                                        <button class=\"sim-modal-close-btn\" onclick=\"closeSimModal('calcul-irpp-3017')\">&times;<\/button>\r\n                                    <\/div>\r\n                                    \r\n                                    <div class=\"sim-modal-body\" id=\"modal-body-calcul-irpp-3017\">\r\n                                        <div id=\"sim-calcul-irpp-3017\" class=\"simulator-container\" data-sim-type=\"irpp\">\r\n                                            <style id=\"css-calcul-irpp-3017\">\r\n                                                \/* ================================================\r\n   STYLES SP\u00c9CIFIQUES AU SIMULATEUR IRPP\r\n   ================================================ *\/\r\n\r\n[id^=\"sim-\"] .sim-container {\r\n    max-width: 100%;\r\n    margin: 0 auto;\r\n    background: #fff;\r\n    border-radius: 12px;\r\n    overflow: hidden;\r\n    font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-subtitle {\r\n    text-align: center;\r\n    color: #666;\r\n    padding: 12px 15px;\r\n    background: #f8f9fa;\r\n    font-size: 13px;\r\n    margin: 0;\r\n    border-bottom: 1px solid #eee;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-subtitle strong {\r\n    color: #8B0000;\r\n}\r\n\r\n[id^=\"sim-\"] form {\r\n    padding: 20px 25px;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-row {\r\n    display: grid;\r\n    grid-template-columns: 1fr 1fr;\r\n    gap: 15px;\r\n    margin-bottom: 15px;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-group {\r\n    display: flex;\r\n    flex-direction: column;\r\n}\r\n\r\n[id^=\"sim-\"] label {\r\n    font-weight: 600;\r\n    color: #333;\r\n    margin-bottom: 5px;\r\n    font-size: 13px;\r\n}\r\n\r\n[id^=\"sim-\"] select,\r\n[id^=\"sim-\"] input {\r\n    padding: 10px 12px;\r\n    border: 2px solid #e0e0e0;\r\n    border-radius: 8px;\r\n    font-size: 14px;\r\n    transition: all 0.3s;\r\n    font-family: inherit;\r\n    background: white;\r\n    width: 100%;\r\n}\r\n\r\n[id^=\"sim-\"] select:focus,\r\n[id^=\"sim-\"] input:focus {\r\n    outline: none;\r\n    border-color: #8B0000;\r\n    box-shadow: 0 0 0 3px rgba(139,0,0,0.1);\r\n}\r\n\r\n[id^=\"sim-\"] select:disabled,\r\n[id^=\"sim-\"] input:disabled {\r\n    background-color: #f5f5f5;\r\n    color: #999 !important;\r\n    cursor: not-allowed;\r\n}\r\n\r\n[id^=\"sim-\"] select {\r\n    cursor: pointer;\r\n    appearance: auto;\r\n}\r\n\r\n[id^=\"sim-\"] input[type=\"radio\"] {\r\n    width: auto;\r\n    padding: 0;\r\n    margin: 0 2px 0 0;\r\n    border: none;\r\n    box-shadow: none;\r\n}\r\n\r\n[id^=\"sim-\"] input[type=\"radio\"]:focus {\r\n    box-shadow: none;\r\n}\r\n\r\n[id^=\"sim-\"] small {\r\n    color: #888;\r\n    font-size: 10px;\r\n    margin-top: 3px;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-section-header {\r\n    background: linear-gradient(135deg, #f8f9fa, #e9ecef);\r\n    padding: 8px 14px;\r\n    border-radius: 6px;\r\n    margin: 18px 0 12px 0;\r\n    font-weight: 600;\r\n    color: #2c3e50;\r\n    font-size: 14px;\r\n    border-left: 4px solid #8B0000;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-section-header:first-of-type {\r\n    margin-top: 0;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-section-header span {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 8px;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-btn {\r\n    width: 100%;\r\n    padding: 13px;\r\n    background: linear-gradient(135deg, #8B0000, #5C0000);\r\n    color: #fff;\r\n    border: none;\r\n    border-radius: 8px;\r\n    cursor: pointer;\r\n    font-size: 15px;\r\n    font-weight: 600;\r\n    transition: all 0.3s;\r\n    margin-top: 10px;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-btn:hover {\r\n    transform: translateY(-2px);\r\n    box-shadow: 0 8px 20px -5px rgba(139,0,0,0.3);\r\n}\r\n\r\n[id^=\"sim-\"] .sim-btn:disabled {\r\n    opacity: 0.7;\r\n    transform: none;\r\n    cursor: not-allowed;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-result {\r\n    margin: 15px 25px 25px 25px;\r\n    padding: 20px;\r\n    border-radius: 12px;\r\n    text-align: center;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-result:not(.sim-error) {\r\n    background: linear-gradient(135deg, #e8f5e9, #c8e6c9);\r\n    border: 1px solid #4caf50;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-error {\r\n    background: linear-gradient(135deg, #ffebee, #ffcdd2);\r\n    border: 1px solid #f44336;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-result-icon {\r\n    font-size: 40px;\r\n    margin-bottom: 8px;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-result-label {\r\n    font-size: 11px;\r\n    color: #666;\r\n    text-transform: uppercase;\r\n    letter-spacing: 1px;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-result-value {\r\n    font-size: 28px;\r\n    font-weight: bold;\r\n    margin-top: 8px;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-result:not(.sim-error) .sim-result-value {\r\n    color: #2e7d32;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-result-note {\r\n    font-size: 11px;\r\n    color: #888;\r\n    margin-top: 8px;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-detail {\r\n    margin: 15px 25px 25px 25px;\r\n    padding: 18px;\r\n    background: #f8f9fa;\r\n    border-radius: 12px;\r\n    border: 1px solid #eee;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-detail h3 {\r\n    margin-bottom: 12px;\r\n    color: #2c3e50;\r\n    font-size: 16px;\r\n    font-weight: 600;\r\n    text-align: center;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-detail-table {\r\n    width: 100%;\r\n    border-collapse: collapse;\r\n    font-size: 13px;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-detail-table td {\r\n    padding: 8px 10px;\r\n    border-bottom: 1px solid #ddd;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-detail-table td:first-child {\r\n    font-weight: 500;\r\n    color: #555;\r\n    width: 55%;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-detail-table td:last-child {\r\n    text-align: right;\r\n    font-weight: bold;\r\n    color: #8B0000;\r\n    width: 45%;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-detail-table tr:hover {\r\n    background: #f1f1f1;\r\n}\r\n\r\n[id^=\"sim-\"] .sim-detail-table tr:last-child td {\r\n    border-bottom: none;\r\n}\r\n\r\n[id^=\"sim-\"] .loading {\r\n    opacity: 0.7;\r\n    pointer-events: none;\r\n}\r\n\r\n\/* ================================================\r\n   RESPONSIVE\r\n   ================================================ *\/\r\n\r\n@media (max-width: 600px) {\r\n    [id^=\"sim-\"] .sim-row {\r\n        grid-template-columns: 1fr;\r\n        gap: 12px;\r\n    }\r\n    \r\n    [id^=\"sim-\"] form {\r\n        padding: 15px;\r\n    }\r\n    \r\n    [id^=\"sim-\"] .sim-result-value {\r\n        font-size: 24px;\r\n    }\r\n    \r\n    [id^=\"sim-\"] .sim-detail-table td {\r\n        padding: 6px 8px;\r\n        font-size: 11px;\r\n    }\r\n    \r\n    [id^=\"sim-\"] .sim-result,\r\n    [id^=\"sim-\"] .sim-detail {\r\n        margin: 12px 15px 15px 15px;\r\n        padding: 15px;\r\n    }\r\n    \r\n    [id^=\"sim-\"] .sim-subtitle {\r\n        font-size: 12px;\r\n        padding: 10px;\r\n    }\r\n    \r\n    [id^=\"sim-\"] .sim-group label[style*=\"font-weight:normal\"] {\r\n        font-size: 12px;\r\n    }\r\n}                                            <\/style>\r\n                                            <div class=\"sim-container\">\r\n    <p class=\"sim-subtitle\"> Calcul de l'imp\u00f4t sur le revenu des personnes physiques <\/p>\r\n    \r\n    <form id=\"irppForm\">\r\n        <!-- SECTION 1 : PROFIL DE L'ASSUR\u00c9 -->\r\n        <div class=\"sim-section-header\">\r\n            <span>\ud83d\udc64 Profil de l'assur\u00e9<\/span>\r\n        <\/div>\r\n        \r\n        <div class=\"sim-row\">\r\n            <div class=\"sim-group\">\r\n                <label>Profession<\/label>\r\n                <div style=\"display:flex;gap:15px;flex-wrap:wrap;padding-top:6px\">\r\n                    <label>\r\n                        <input type=\"radio\" name=\"job\" value=\"0\" id=\"jobSalarie\" checked> Salari\u00e9\r\n                    <\/label>\r\n                    <label>\r\n                        <input type=\"radio\" name=\"job\" value=\"1\" id=\"jobRetraite\"> Retrait\u00e9\r\n                    <\/label>\r\n                    <label>\r\n                        <input type=\"radio\" name=\"job\" value=\"2\" id=\"jobLiberal\"> Lib\u00e9ral\r\n                    <\/label>\r\n                <\/div>\r\n            <\/div>\r\n            <div class=\"sim-group\">\r\n                <label>R\u00e9gime<\/label>\r\n                <div style=\"display:flex;gap:15px;flex-wrap:wrap;padding-top:6px\">\r\n                    <label>\r\n                        <input type=\"radio\" name=\"regime\" value=\"0\" id=\"regimeR\" checked> R\u00e9el\r\n                    <\/label>\r\n                    <label>\r\n                        <input type=\"radio\" name=\"regime\" value=\"1\" id=\"regimeF\"> Forfaitaire\r\n                    <\/label>\r\n                <\/div>\r\n                <small>R\u00e9f: Art.39 du Code de l'IRPP<\/small>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <div class=\"sim-row\">\r\n            <div class=\"sim-group\">\r\n                <label>Situation familiale<\/label>\r\n                <div style=\"display:flex;gap:10px;flex-wrap:wrap;padding-top:6px\">\r\n                    <label>\r\n                        <input type=\"radio\" name=\"situation\" value=\"0\" id=\"situationCelibataire\" checked> C\u00e9libataire\r\n                    <\/label>\r\n                    <label>\r\n                        <input type=\"radio\" name=\"situation\" value=\"1\" id=\"situationMarie\"> Mari\u00e9(e)\r\n                    <\/label>\r\n                    <label>\r\n                        <input type=\"radio\" name=\"situation\" value=\"2\" id=\"situationDivorce\"> Divorc\u00e9(e)\r\n                    <\/label>\r\n                    <label>\r\n                        <input type=\"radio\" name=\"situation\" value=\"3\" id=\"situationVeuf\"> Veuf\r\n                    <\/label>\r\n                <\/div>\r\n            <\/div>\r\n            <div class=\"sim-group\">\r\n                <label for=\"NbrParents\">Parents \u00e0 charge<\/label>\r\n                <select id=\"NbrParents\">\r\n                    <option value=\"0\" selected>0<\/option>\r\n                    <option value=\"1\">1<\/option>\r\n                    <option value=\"2\">2<\/option>\r\n                <\/select>\r\n                <small>D\u00e9duction: 5% du revenu (max 450 D\/parent)<\/small>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <!-- SECTION 2 : REVENUS ET CHARGES -->\r\n        <div class=\"sim-section-header\">\r\n            <span>\ud83d\udcb0 Revenus et charges<\/span>\r\n        <\/div>\r\n\r\n        <div class=\"sim-row\">\r\n            <div class=\"sim-group\">\r\n                <label for=\"Salaire\">Revenu annuel (TND)<\/label>\r\n                <input type=\"number\" id=\"Salaire\" step=\"100\" value=\"30000\" min=\"0\">\r\n                <small>Salaires, pensions, revenus professionnels<\/small>\r\n            <\/div>\r\n            <div class=\"sim-group\">\r\n                <label for=\"CA\">Chiffre d'affaires TTC (TND)<\/label>\r\n                <input type=\"number\" id=\"CA\" step=\"100\" value=\"0\" min=\"0\">\r\n                <small>Pour les lib\u00e9raux uniquement<\/small>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <div class=\"sim-row\">\r\n            <div class=\"sim-group\">\r\n                <label for=\"NbrEnfants\">Nombre d'enfants<\/label>\r\n                <select id=\"NbrEnfants\">\r\n                    <option value=\"0\" selected>0<\/option>\r\n                    <option value=\"1\">1<\/option>\r\n                    <option value=\"2\">2<\/option>\r\n                    <option value=\"3\">3<\/option>\r\n                    <option value=\"4\">4<\/option>\r\n                <\/select>\r\n                <small>D\u00e9duction: 100 D\/enfant (limite 4)<\/small>\r\n            <\/div>\r\n            <div class=\"sim-group\">\r\n                <label for=\"NbrBoursiers\">\u00c9tudiants boursiers<\/label>\r\n                <select id=\"NbrBoursiers\">\r\n                    <option value=\"0\" selected>0<\/option>\r\n                    <option value=\"1\">1<\/option>\r\n                    <option value=\"2\">2<\/option>\r\n                    <option value=\"3\">3<\/option>\r\n                    <option value=\"4\">4<\/option>\r\n                <\/select>\r\n                <small>D\u00e9duction: 1000 D\/\u00e9tudiant<\/small>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <div class=\"sim-row\">\r\n            <div class=\"sim-group\">\r\n                <label for=\"NbrNonBoursiers\">\u00c9tudiants non boursiers<\/label>\r\n                <select id=\"NbrNonBoursiers\">\r\n                    <option value=\"0\" selected>0<\/option>\r\n                    <option value=\"1\">1<\/option>\r\n                    <option value=\"2\">2<\/option>\r\n                    <option value=\"3\">3<\/option>\r\n                    <option value=\"4\">4<\/option>\r\n                <\/select>\r\n                <small>D\u00e9duction: 1000 D\/\u00e9tudiant<\/small>\r\n            <\/div>\r\n            <div class=\"sim-group\">\r\n                <label for=\"_mnt_assrvie\">Prime d'assurance vie (TND)<\/label>\r\n                <input type=\"number\" id=\"_mnt_assrvie\" step=\"100\" value=\"0\" min=\"0\" max=\"100000\">\r\n\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <div class=\"sim-row\">\r\n            <div class=\"sim-group\">\r\n                <label for=\"openingDate\">Mois d'ouverture du contrat<\/label>\r\n                <input type=\"date\" id=\"openingDate\">\r\n                <small>Pour le calcul du gain mensuel<\/small>\r\n            <\/div>\r\n            <div class=\"sim-group\">\r\n                <!-- Champ vide pour aligner le bouton -->\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <button type=\"button\" class=\"sim-btn sim-calc-btn\"> Calculer mon imp\u00f4t sur le revenu <\/button>\r\n\r\n\r\n    <\/form>\r\n\r\n    <div id=\"resultat\" class=\"sim-result\" style=\"display:none\">\r\n        <div class=\"sim-result-icon\">\ud83d\udcca<\/div>\r\n        <div class=\"sim-result-label\">IRPP \u00e0 payer<\/div>\r\n        <div class=\"sim-result-value\"><span id=\"irppValue\">0.00<\/span> TND<\/div>\r\n        <div class=\"sim-result-note\">\r\n            Imp\u00f4t avant assurance vie : <span id=\"imp_av_assrvie\">0.00<\/span> TND\r\n        <\/div>\r\n        <div class=\"sim-result-note\" style=\"margin-top:5px;font-size:12px\">\r\n            Taux effectif : <span id=\"tauxEffectif\">0<\/span>%\r\n        <\/div>\r\n    <\/div>\r\n    \r\n    <div id=\"detail\" class=\"sim-detail\" style=\"display:none\">\r\n        <h3>\ud83d\udccb D\u00e9tail du calcul<\/h3>\r\n        <div>\r\n            <table class=\"sim-detail-table\">\r\n                <tbody id=\"detailBody\"><\/tbody>\r\n            <\/table>\r\n        <\/div>\r\n    <\/div>\r\n    \r\n    <div id=\"erreur\" class=\"sim-result sim-error\" style=\"display:none\">\r\n        <div class=\"sim-result-icon\">\u26a0\ufe0f<\/div>\r\n        <div class=\"sim-result-label\">Erreur<\/div>\r\n        <div class=\"sim-result-value\"><span id=\"erreurMessage\"><\/span><\/div>\r\n    <\/div>\r\n<\/div>                                            <script id=\"js-calcul-irpp-3017\" type=\"text\/javascript\">\r\n                                                \/\/ ================================================\r\n\/\/ SIMULATEUR IRPP - TUNISIE\r\n\/\/ Code de l'IRPP et de l'I.S. - Bar\u00e8me 2025\r\n\/\/ ================================================\r\n\r\n\/\/ ============================================\r\n\/\/ BAR\u00c8MES IRPP (8 tranches)\r\n\/\/ ============================================\r\nfunction calculerImpotParTranches(revenu) {\r\n    if (revenu <= 0) return 0;\r\n    \r\n    var tranches = [\r\n        { limite: 5000,    taux: 0.00 },\r\n        { limite: 10000,   taux: 0.15 },\r\n        { limite: 20000,   taux: 0.25 },\r\n        { limite: 30000,   taux: 0.30 },\r\n        { limite: 40000,   taux: 0.33 },\r\n        { limite: 50000,   taux: 0.36 },\r\n        { limite: 70000,   taux: 0.38 },\r\n        { limite: Infinity, taux: 0.40 }\r\n    ];\r\n    \r\n    var impot = 0;\r\n    var revenuRestant = revenu;\r\n    var tranchePrecedente = 0;\r\n    \r\n    for (var i = 0; i < tranches.length; i++) {\r\n        var montantTranche = Math.min(revenuRestant, tranches[i].limite - tranchePrecedente);\r\n        if (montantTranche > 0) {\r\n            impot += montantTranche * tranches[i].taux;\r\n            revenuRestant -= montantTranche;\r\n        }\r\n        tranchePrecedente = tranches[i].limite;\r\n        if (revenuRestant <= 0) break;\r\n    }\r\n    \r\n    return impot;\r\n}\r\n\r\n\/\/ ============================================\r\n\/\/ CALCUL DES D\u00c9DUCTIONS FISCALES\r\n\/\/ ============================================\r\nfunction calculerDeductions(revenuBrut, situation, nbrParents, nbrEnfants, nbrBoursiers, nbrNonBoursiers) {\r\n    var deductions = 0;\r\n    \r\n    \/\/ 1. Chef de famille (300 D)\r\n    if (situation === 1 || situation === 3 || (situation === 2 && nbrEnfants > 0)) {\r\n        deductions += 300;\r\n    }\r\n    \r\n    \/\/ 2. Parents \u00e0 charge (5% du revenu brut, max 450D par parent)\r\n    for (var i = 0; i < nbrParents; i++) {\r\n        deductions += Math.min(revenuBrut * 0.05, 450);\r\n    }\r\n    \r\n    \/\/ 3. Enfants (100 D par enfant, limite 4)\r\n    var nbrEnfantsValides = Math.min(nbrEnfants, 4);\r\n    deductions += nbrEnfantsValides * 100;\r\n    \r\n    \/\/ 4. \u00c9tudiants boursiers (1000 D)\r\n    deductions += nbrBoursiers * 1000;\r\n    \r\n    \/\/ 5. \u00c9tudiants non boursiers (1000 D)\r\n    deductions += nbrNonBoursiers * 1000;\r\n    \r\n    return deductions;\r\n}\r\n\r\nfunction formatMoney(value) {\r\n    return value.toLocaleString('fr-FR', {\r\n        minimumFractionDigits: 2,\r\n        maximumFractionDigits: 2\r\n    });\r\n}\r\n\r\n\/\/ ============================================\r\n\/\/ GESTION DES CHAMPS CONDITIONNELS (MASQUAGE R\u00c9EL)\r\n\/\/ ============================================\r\nfunction updateIRPPFields(container) {\r\n    if (!container) {\r\n        \/\/ Fallback: chercher le conteneur si non pass\u00e9\r\n        container = document.querySelector('[id^=\"sim-\"]');\r\n        if (!container) return;\r\n    }\r\n    \r\n    var jobRadios = container.querySelectorAll('input[name=\"job\"]');\r\n    var situationRadios = container.querySelectorAll('input[name=\"situation\"]');\r\n    \r\n    var job = 0;\r\n    jobRadios.forEach(function(r) { if (r.checked) job = parseInt(r.value); });\r\n    \r\n    var situation = 0;\r\n    situationRadios.forEach(function(r) { if (r.checked) situation = parseInt(r.value); });\r\n\r\n    \/\/ 1. R\u00c9GIME : masquer le conteneur du champ R\u00e9gime\r\n    var regimeGroup = container.querySelector('#regimeR') ? container.querySelector('#regimeR').closest('.sim-group') : null;\r\n    if (regimeGroup) {\r\n        regimeGroup.style.display = (job === 0 || job === 1) ? 'none' : 'flex';\r\n    }\r\n    \r\n    \/\/ 2. CA : masquer le conteneur du champ CA\r\n    var caGroup = container.querySelector('#CA') ? container.querySelector('#CA').closest('.sim-group') : null;\r\n    if (caGroup) {\r\n        caGroup.style.display = (job === 0 || job === 1) ? 'none' : 'flex';\r\n    }\r\n    \r\n    \/\/ 3. ENFANTS : masquer le conteneur du champ Enfants\r\n    var enfantsGroup = container.querySelector('#NbrEnfants') ? container.querySelector('#NbrEnfants').closest('.sim-group') : null;\r\n    if (enfantsGroup) {\r\n        enfantsGroup.style.display = (situation === 0) ? 'none' : 'flex';\r\n    }\r\n    \r\n    \/\/ 4. BOURSIERS : masquer le conteneur du champ Boursiers\r\n    var boursiersGroup = container.querySelector('#NbrBoursiers') ? container.querySelector('#NbrBoursiers').closest('.sim-group') : null;\r\n    if (boursiersGroup) {\r\n        boursiersGroup.style.display = (situation === 0) ? 'none' : 'flex';\r\n    }\r\n    \r\n    \/\/ 5. NON BOURSIERS : masquer le conteneur du champ Non Boursiers\r\n    var nonBoursiersGroup = container.querySelector('#NbrNonBoursiers') ? container.querySelector('#NbrNonBoursiers').closest('.sim-group') : null;\r\n    if (nonBoursiersGroup) {\r\n        nonBoursiersGroup.style.display = (situation === 0) ? 'none' : 'flex';\r\n    }\r\n    \r\n    \/\/ R\u00e9initialiser les valeurs si masqu\u00e9\r\n    if (job === 0 || job === 1) {\r\n        var caInput = container.querySelector('#CA');\r\n        if (caInput) caInput.value = 0;\r\n    }\r\n    \r\n    if (situation === 0) {\r\n        var nbrEnfants = container.querySelector('#NbrEnfants');\r\n        var nbrBoursiers = container.querySelector('#NbrBoursiers');\r\n        var nbrNonBoursiers = container.querySelector('#NbrNonBoursiers');\r\n        if (nbrEnfants) nbrEnfants.value = 0;\r\n        if (nbrBoursiers) nbrBoursiers.value = 0;\r\n        if (nbrNonBoursiers) nbrNonBoursiers.value = 0;\r\n    }\r\n}\r\n\r\n\/\/ ============================================\r\n\/\/ FONCTION PRINCIPALE DE CALCUL\r\n\/\/ ============================================\r\nfunction calculerIRPP(event) {\r\n    var btn = event ? event.target.closest('.sim-calc-btn') : document.querySelector('.sim-calc-btn');\r\n    if (!btn) {\r\n        console.error('Bouton non trouv\u00e9');\r\n        return;\r\n    }\r\n    \r\n    var container = btn.closest('[id^=\"sim-\"]');\r\n    if (!container) {\r\n        console.error('Conteneur non trouv\u00e9');\r\n        return;\r\n    }\r\n    \r\n    btn.innerHTML = '\u23f3 Calcul en cours...';\r\n    btn.disabled = true;\r\n    container.classList.add('loading');\r\n    \r\n    setTimeout(function() {\r\n        try {\r\n            \/\/ R\u00e9cup\u00e9ration des valeurs\r\n            var jobRadios = container.querySelectorAll('input[name=\"job\"]');\r\n            var regimeRadios = container.querySelectorAll('input[name=\"regime\"]');\r\n            var situationRadios = container.querySelectorAll('input[name=\"situation\"]');\r\n            \r\n            var job = 0;\r\n            jobRadios.forEach(function(r) { if (r.checked) job = parseInt(r.value); });\r\n            \r\n            var regime = 0;\r\n            regimeRadios.forEach(function(r) { if (r.checked) regime = parseInt(r.value); });\r\n            \r\n            var situation = 0;\r\n            situationRadios.forEach(function(r) { if (r.checked) situation = parseInt(r.value); });\r\n            \r\n            var salaire = parseFloat(container.querySelector('#Salaire').value) || 0;\r\n            var ca = parseFloat(container.querySelector('#CA').value) || 0;\r\n            var nbrParents = parseInt(container.querySelector('#NbrParents').value) || 0;\r\n            var nbrEnfants = parseInt(container.querySelector('#NbrEnfants').value) || 0;\r\n            var nbrBoursiers = parseInt(container.querySelector('#NbrBoursiers').value) || 0;\r\n            var nbrNonBoursiers = parseInt(container.querySelector('#NbrNonBoursiers').value) || 0;\r\n            var mntAssurance = parseFloat(container.querySelector('#_mnt_assrvie').value) || 0;\r\n            var openingDate = container.querySelector('#openingDate').value;\r\n            \r\n            \/\/ Validation : si c\u00e9libataire, les enfants sont \u00e0 0\r\n            if (situation === 0) {\r\n                nbrEnfants = 0;\r\n                nbrBoursiers = 0;\r\n                nbrNonBoursiers = 0;\r\n            }\r\n            \r\n            \/\/ Validation : si salari\u00e9 ou retrait\u00e9, CA = 0 et regime = r\u00e9el\r\n            if (job === 0 || job === 1) {\r\n                regime = 0;\r\n                ca = 0;\r\n            }\r\n            \r\n            \/\/ Validation : lib\u00e9ral en r\u00e9gime r\u00e9el -> CA = Salaire \u00d7 1.05\r\n            if (job === 2 && regime === 0) {\r\n                var caMin = salaire * 1.05;\r\n                if (ca < caMin) {\r\n                    ca = parseFloat(caMin.toFixed(3));\r\n                }\r\n            }\r\n            \r\n            \/\/ Validation : lib\u00e9ral en r\u00e9gime forfaitaire -> Salaire = CA \u00d7 0.8\r\n            if (job === 2 && regime === 1) {\r\n                salaire = parseFloat((ca * 0.8).toFixed(3));\r\n            }\r\n            \r\n            if (isNaN(salaire) || salaire < 0) throw new Error(\"Le revenu annuel doit \u00eatre un nombre positif\");\r\n            if (isNaN(ca) || ca < 0) throw new Error(\"Le CA doit \u00eatre un nombre positif\");\r\n            \r\n            \/\/ ============================================\r\n            \/\/ \u00c9TAPE 1 : Revenu net imposable\r\n            \/\/ ============================================\r\n            var revenuBrut = salaire;\r\n            \r\n            if (job == 0) {\r\n                revenuBrut = salaire - Math.min(2000, salaire * 0.1);\r\n            } else if (job == 1) {\r\n                revenuBrut = salaire - Math.min(2000, salaire * 0.25);\r\n            } else if (job == 2) {\r\n                if (regime == 0) {\r\n                    revenuBrut = salaire;\r\n                } else {\r\n                    revenuBrut = ca * 0.8;\r\n                }\r\n            }\r\n            \r\n            \/\/ ============================================\r\n            \/\/ \u00c9TAPE 2 : Calcul des d\u00e9ductions\r\n            \/\/ ============================================\r\n            var deductionsFiscales = calculerDeductions(\r\n                revenuBrut, situation, nbrParents, nbrEnfants, nbrBoursiers, nbrNonBoursiers\r\n            );\r\n            \r\n            var revenuApresDeductions = Math.max(revenuBrut - deductionsFiscales, 0);\r\n            \r\n            \/\/ ============================================\r\n            \/\/ \u00c9TAPE 3 : Application de l'assurance vie\r\n            \/\/ ============================================\r\n            var plafondAssurance = Math.min(mntAssurance, 100000);\r\n            var revenuApresAssurance = Math.max(revenuApresDeductions - plafondAssurance, 0);\r\n            \r\n            \/\/ ============================================\r\n            \/\/ \u00c9TAPE 4 : Calcul de l'imp\u00f4t\r\n            \/\/ ============================================\r\n            var imp_av_assrvie = calculerImpotParTranches(revenuApresDeductions);\r\n            var imp_ap_assrvie = calculerImpotParTranches(revenuApresAssurance);\r\n            \r\n            \/\/ Imp\u00f4t minimum (45% de l'imp\u00f4t d\u00fb ou 0.2% du CA)\r\n            var min_imp = Math.max(imp_av_assrvie * 0.45, ca * 0.002);\r\n            if (imp_ap_assrvie < min_imp && imp_ap_assrvie > 0) {\r\n                imp_ap_assrvie = min_imp;\r\n            }\r\n            \r\n            \/\/ ============================================\r\n            \/\/ \u00c9TAPE 5 : Calcul des gains\r\n            \/\/ ============================================\r\n            var gain_imp = imp_av_assrvie - imp_ap_assrvie;\r\n            var gain_imp_pct = (imp_av_assrvie != 0) ? (gain_imp \/ imp_av_assrvie * 100) : 0;\r\n            \r\n            var openingMonth = openingDate ? new Date(openingDate) : new Date();\r\n            var nb_months_restant = 12 - (openingMonth.getMonth() + 1);\r\n            var gain_mensuel_imp = (nb_months_restant > 0 && gain_imp > 0) ? gain_imp \/ nb_months_restant : 0;\r\n            var tauxEffectif = (revenuApresDeductions > 0) ? (imp_ap_assrvie \/ revenuApresDeductions * 100) : 0;\r\n            \r\n            \/\/ ============================================\r\n            \/\/ AFFICHAGE DES R\u00c9SULTATS\r\n            \/\/ ============================================\r\n            container.querySelector('#irppValue').textContent = formatMoney(imp_ap_assrvie);\r\n            container.querySelector('#imp_av_assrvie').textContent = formatMoney(imp_av_assrvie);\r\n            container.querySelector('#tauxEffectif').textContent = tauxEffectif.toFixed(2);\r\n            \r\n            var detailBody = container.querySelector('#detailBody');\r\n            if (detailBody) {\r\n                detailBody.innerHTML = '';\r\n                \r\n                var details = [\r\n                    { label: 'Profession', value: ['Salari\u00e9', 'Retrait\u00e9', 'Lib\u00e9ral'][job] || 'Salari\u00e9' },\r\n                    { label: 'R\u00e9gime', value: regime === 0 ? 'R\u00e9el' : 'Forfaitaire' },\r\n                    { label: 'Situation familiale', value: ['C\u00e9libataire', 'Mari\u00e9(e)', 'Divorc\u00e9(e)', 'Veuf'][situation] || 'C\u00e9libataire' },\r\n                    { label: 'Revenu brut annuel', value: formatMoney(salaire) + ' TND' },\r\n                    { label: 'Revenu net imposable', value: formatMoney(revenuBrut) + ' TND' },\r\n                    { label: 'D\u00e9ductions fiscales', value: formatMoney(deductionsFiscales) + ' TND' },\r\n                    { label: 'Revenu apr\u00e8s d\u00e9ductions', value: formatMoney(revenuApresDeductions) + ' TND' },\r\n                    { label: 'Assurance vie d\u00e9duite', value: formatMoney(plafondAssurance) + ' TND' },\r\n                    { label: 'Revenu apr\u00e8s assurance vie', value: formatMoney(revenuApresAssurance) + ' TND' },\r\n                    { label: 'Imp\u00f4t minimum', value: formatMoney(min_imp) + ' TND' },\r\n                ];\r\n                \r\n                details.forEach(function(d) {\r\n                    var row = document.createElement('tr');\r\n                    row.innerHTML = '<td>' + d.label + '<\/td><td style=\"text-align:right;font-weight:bold;color:#8B0000;\">' + d.value + '<\/td>';\r\n                    detailBody.appendChild(row);\r\n                });\r\n                \r\n                var sepRow = document.createElement('tr');\r\n                sepRow.style.borderTop = '2px solid #8B0000';\r\n                sepRow.innerHTML = '<td colspan=\"2\" style=\"border-bottom:2px solid #8B0000;\"><\/td>';\r\n                detailBody.appendChild(sepRow);\r\n                \r\n                var resultRows = [\r\n                    { label: 'Imp\u00f4t avant assurance vie', value: formatMoney(imp_av_assrvie) + ' TND' },\r\n                    { label: 'Imp\u00f4t apr\u00e8s assurance vie', value: formatMoney(imp_ap_assrvie) + ' TND' },\r\n                    { label: 'Gain d\\'imp\u00f4t annuel', value: formatMoney(gain_imp) + ' TND' },\r\n                    { label: 'Gain d\\'imp\u00f4t mensuel', value: formatMoney(gain_mensuel_imp) + ' TND' },\r\n                    { label: 'Gain en %', value: gain_imp_pct.toFixed(2) + '%' },\r\n                    { label: 'Taux effectif', value: tauxEffectif.toFixed(2) + '%' },\r\n                ];\r\n                \r\n                resultRows.forEach(function(r) {\r\n                    var row = document.createElement('tr');\r\n                    row.style.fontWeight = 'bold';\r\n                    row.style.background = '#f0f0f0';\r\n                    row.innerHTML = '<td>' + r.label + '<\/td><td style=\"text-align:right;color:#8B0000;\">' + r.value + '<\/td>';\r\n                    detailBody.appendChild(row);\r\n                });\r\n            }\r\n            \r\n            container.querySelector('#resultat').style.display = 'block';\r\n            container.querySelector('#detail').style.display = 'block';\r\n            container.querySelector('#erreur').style.display = 'none';\r\n            container.querySelector('#resultat').scrollIntoView({ behavior: 'smooth' });\r\n            \r\n        } catch (error) {\r\n            var errMsg = container.querySelector('#erreurMessage');\r\n            if (errMsg) errMsg.textContent = error.message;\r\n            container.querySelector('#erreur').style.display = 'block';\r\n            container.querySelector('#resultat').style.display = 'none';\r\n            container.querySelector('#detail').style.display = 'none';\r\n            container.querySelector('#erreur').scrollIntoView({ behavior: 'smooth' });\r\n        } finally {\r\n            btn.innerHTML = '\ud83d\udcca Calculer mon IRPP';\r\n            btn.disabled = false;\r\n            container.classList.remove('loading');\r\n        }\r\n    }, 100);\r\n}\r\n\r\n\/\/ ============================================\r\n\/\/ INITIALISATION (AVEC MASQUAGE AUTOMATIQUE)\r\n\/\/ ============================================\r\nwindow.initSimulator = function() {\r\n    var container = document.querySelector('[id^=\"sim-\"]');\r\n    if (!container) {\r\n        console.error('Conteneur non trouv\u00e9 pour le simulateur IRPP');\r\n        return;\r\n    }\r\n    \r\n    console.log('\ud83d\udd04 Initialisation simulateur IRPP');\r\n    \r\n    \/\/ Initialiser le bouton (calcul uniquement au clic)\r\n    var btn = container.querySelector('.sim-calc-btn');\r\n    if (btn) {\r\n        var newBtn = btn.cloneNode(true);\r\n        btn.parentNode.replaceChild(newBtn, btn);\r\n        newBtn.addEventListener('click', function(e) {\r\n            e.preventDefault();\r\n            calculerIRPP(e);\r\n        });\r\n        console.log('\u2705 Bouton IRPP initialis\u00e9');\r\n    } else {\r\n        console.error('\u274c Bouton IRPP non trouv\u00e9');\r\n    }\r\n    \r\n    \/\/ Initialiser les champs conditionnels au d\u00e9marrage\r\n    updateIRPPFields(container);\r\n    \r\n    \/\/ \u2705 \u00c9COUTEUR POUR LE MASQUAGE UNIQUEMENT\r\n    container.querySelectorAll('input[name=\"job\"], input[name=\"regime\"], input[name=\"situation\"]').forEach(function(input) {\r\n        input.addEventListener('change', function() {\r\n            updateIRPPFields(container); \/\/ Met \u00e0 jour le masquage\r\n        });\r\n    });\r\n    \r\n    \/\/ \u2705 \u00c9COUTEUR POUR LE MASQUAGE UNIQUEMENT (champs Select)\r\n    container.querySelectorAll('#NbrEnfants, #NbrBoursiers, #NbrNonBoursiers').forEach(function(input) {\r\n        input.addEventListener('change', function() {\r\n            updateIRPPFields(container); \/\/ Met \u00e0 jour le masquage\r\n        });\r\n    });\r\n    \r\n    console.log('\u2705 Simulateur IRPP initialis\u00e9');\r\n};\r\n\r\n\/\/ ============================================\r\n\/\/ EXPOSER LES FONCTIONS GLOBALEMENT\r\n\/\/ ============================================\r\nwindow.calculerIRPP = calculerIRPP;\r\nwindow.updateIRPPFields = updateIRPPFields;\r\n\r\n\/\/ ============================================\r\n\/\/ AUTO-INIT\r\n\/\/ ============================================\r\nif (document.readyState === 'loading') {\r\n    document.addEventListener('DOMContentLoaded', function() {\r\n        setTimeout(window.initSimulator, 100);\r\n    });\r\n} else {\r\n    setTimeout(window.initSimulator, 100);\r\n}                                            <\/script>\r\n                                        <\/div>\r\n                                        \r\n                                        <div class=\"sim-modal-footer\">\r\n                                                                                        <button class=\"sim-btn sim-reset-btn\" onclick=\"resetSimulator('calcul-irpp-3017')\">\r\n                                                Reinitialiser\r\n                                            <\/button>\r\n                                        <\/div>\r\n                                    <\/div>\r\n                                <\/div>\r\n                            <\/div>\r\n                                            <\/div>\r\n                <\/div>\r\n                        \r\n                    <\/div>\r\n    <\/div>\r\n    \r\n    <style>\r\n        \/* Styles globaux *\/\r\n        .sim-container-main {\r\n            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\r\n            max-width: 1200px;\r\n            margin: 0 auto;\r\n            padding: 20px;\r\n            background: #fff;\r\n            border-radius: 20px;\r\n        }\r\n        .sim-category-section { margin-bottom: 50px; }\r\n        .sim-category-header { display: flex; align-items: center; gap: 12px; margin-bottom: 25px; padding-bottom: 15px; border-bottom: 3px solid; }\r\n        .sim-category-icon { font-size: 32px; }\r\n        .sim-category-title { font-size: 24px; font-weight: 600; }\r\n        .sim-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 25px; }\r\n        .sim-card { background: white; border-radius: 16px; padding: 20px; text-decoration: none; transition: all 0.3s; border: 1px solid #e9ecef; display: flex; align-items: center; gap: 15px; box-shadow: 0 2px 8px rgba(0,0,0,0.05); cursor: pointer; }\r\n        .sim-card:hover { transform: translateY(-5px); box-shadow: 0 10px 25px rgba(139,0,0,0.15); border-color: #8B0000; }\r\n        .sim-card-icon { width: 60px; height: 60px; border-radius: 12px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; background: linear-gradient(135deg, #f8f9fa, #e9ecef); overflow: hidden; }\r\n        .sim-card-img { width: 50px; height: 50px; object-fit: contain; }\r\n        .sim-card-content { flex: 1; }\r\n        .sim-card-title { font-size: 16px; font-weight: 600; color: #2c3e50; margin-bottom: 5px; }\r\n        .sim-card-desc { font-size: 12px; color: #7f8c8d; }\r\n        \r\n        \/* Modale *\/\r\n        .sim-modal { position: fixed; z-index: 9999; left: 0; top: 0; width: 100%; height: 100%; overflow: auto; background-color: rgba(0,0,0,0.6); display: flex; align-items: center; justify-content: center; }\r\n        .sim-modal-content { background-color: #fefefe; margin: auto; padding: 0; border: 1px solid #888; width: 90%; max-width: 900px; max-height: 90vh; border-radius: 12px; position: relative; box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2); animation-name: animatetop; animation-duration: 0.4s; display: flex; flex-direction: column; }\r\n        @keyframes animatetop { from {top:-300px; opacity:0} to {top:0; opacity:1} }\r\n        .sim-modal-header { display: flex; justify-content: space-between; align-items: center; padding: 15px 20px; background: #000000 !important; border-bottom: 1px solid #333; border-radius: 12px 12px 0 0; flex-shrink: 0; }\r\n        .sim-modal-title { margin: 0; font-size: 20px; font-weight: 600; color: #ffffff !important; }\r\n        .sim-modal-close-btn { background: none; border: none; font-size: 28px; line-height: 1; cursor: pointer; color: #ffffff !important; padding: 0 5px; transition: color 0.3s; font-weight: bold; }\r\n        .sim-modal-close-btn:hover { color: #5C0000 !important; }\r\n        .sim-modal-body { padding: 20px; overflow-y: auto; flex-grow: 1; }\r\n        .sim-modal-footer { padding: 15px 20px; text-align: center; border-top: 1px solid #eee; background: #f8f9fa; border-radius: 0 0 12px 12px; flex-shrink: 0; display: flex; justify-content: center; gap: 10px; flex-wrap: wrap; }\r\n        .sim-pdf-btn { width: auto; padding: 10px 30px; background: #8B0000 !important; color: #fff !important; border: none; border-radius: 6px; cursor: pointer; transition: background 0.3s; }\r\n        .sim-pdf-btn:hover { background: #5C0000 !important; }\r\n        .sim-reset-btn { width: auto; padding: 10px 30px; background: #6c757d !important; color: #fff !important; border: none; border-radius: 6px; cursor: pointer; transition: background 0.3s; }\r\n        .sim-reset-btn:hover { background: #5a6268 !important; }\r\n        \r\n        \/* Styles des simulateurs *\/\r\n        [id^=\"sim-\"] .sim-container { padding: 0; background: transparent; box-shadow: none; }\r\n        [id^=\"sim-\"] h1 { font-size: 0; margin: 0; padding: 0; display: none; }\r\n        [id^=\"sim-\"] .sim-subtitle { text-align: center; margin-bottom: 20px; font-size: 14px; color: #666; }\r\n        [id^=\"sim-\"] .sim-row { display: grid; grid-template-columns: 1fr 1fr; gap: 15px; margin-bottom: 15px; }\r\n        [id^=\"sim-\"] .sim-group { display: flex; flex-direction: column; }\r\n        [id^=\"sim-\"] label { font-weight: 600; margin-bottom: 5px; font-size: 14px; text-align: left; }\r\n        [id^=\"sim-\"] select, [id^=\"sim-\"] input { padding: 10px 12px; border: 1px solid #ddd; border-radius: 6px; font-size: 14px; width: 100%; box-sizing: border-box; }\r\n        [id^=\"sim-\"] .sim-btn { width: 100%; padding: 12px; border: none; border-radius: 6px; font-size: 16px; font-weight: 600; cursor: pointer; background: #8B0000; color: #fff; transition: background 0.3s; margin-top: 10px; }\r\n        [id^=\"sim-\"] .sim-btn:hover { background: #5C0000; }\r\n        [id^=\"sim-\"] .sim-btn:disabled { opacity: 0.7; cursor: not-allowed; }\r\n        [id^=\"sim-\"] .sim-result-note { font-size: 12px; color: #888; margin-top: 10px; }\r\n        [id^=\"sim-\"] .sim-detail { margin-top: 20px; padding: 15px; background: #f8f9fa; border-radius: 6px; }\r\n        [id^=\"sim-\"] .sim-detail h3 { text-align: center; margin-bottom: 15px; font-size: 18px; }\r\n        [id^=\"sim-\"] .sim-detail-table { width: 100%; border-collapse: collapse; }\r\n        [id^=\"sim-\"] .sim-detail-table td { padding: 10px; border-bottom: 1px solid #ddd; }\r\n        [id^=\"sim-\"] .sim-detail-table td:first-child { font-weight: 600; color: #555; }\r\n        [id^=\"sim-\"] .sim-detail-table td:last-child { text-align: right; font-weight: bold; color: #8B0000; }\r\n        [id^=\"sim-\"] .sim-detail-table thead th { background: #8B0000; color: white; padding: 10px 12px; text-align: left; font-weight: 600; font-size: 13px; }\r\n        [id^=\"sim-\"] .sim-detail-table thead th:last-child { text-align: right; }\r\n        \r\n        @media (max-width: 600px) {\r\n            [id^=\"sim-\"] .sim-row { grid-template-columns: 1fr; gap: 12px; }\r\n            .sim-modal-content { width: 95%; max-height: 95vh; }\r\n            .sim-modal-title { font-size: 16px; }\r\n            .sim-grid { grid-template-columns: 1fr; }\r\n            .sim-category-title { font-size: 18px; }\r\n            .sim-modal-footer { flex-direction: column; align-items: center; }\r\n            .sim-pdf-btn, .sim-reset-btn { width: 100%; text-align: center; }\r\n        }\r\n    <\/style>\r\n\r\n    <script>\r\n    \/\/ ================================================\r\n    \/\/ FONCTIONS PRINCIPALES\r\n    \/\/ ================================================\r\n\r\n    function openSimModal(uniqueId, simType) {\r\n        if (!uniqueId || typeof uniqueId !== 'string') return;\r\n        if (simType && typeof simType !== 'string') return;\r\n        \r\n        var modal = document.getElementById('modal-' + uniqueId);\r\n        if (modal) {\r\n            modal.style.display = 'flex';\r\n            document.body.style.overflow = 'hidden';\r\n            modal.dataset.simType = simType || 'auto';\r\n            \r\n            setTimeout(function() {\r\n                initSimulatorInModal(uniqueId, simType);\r\n            }, 300);\r\n        }\r\n    }\r\n\r\n    function closeSimModal(uniqueId) {\r\n        if (!uniqueId || typeof uniqueId !== 'string') return;\r\n        var modal = document.getElementById('modal-' + uniqueId);\r\n        if (modal) {\r\n            modal.style.display = 'none';\r\n            document.body.style.overflow = 'auto';\r\n        }\r\n    }\r\n\r\n    window.onclick = function(event) {\r\n        if (event.target.classList.contains('sim-modal')) {\r\n            event.target.style.display = 'none';\r\n            document.body.style.overflow = 'auto';\r\n        }\r\n    }\r\n\r\n    function resetSimulator(uniqueId) {\r\n        if (!uniqueId || typeof uniqueId !== 'string') return;\r\n        \r\n        var container = document.getElementById('sim-' + uniqueId);\r\n        if (!container) {\r\n            console.error('Conteneur non trouve');\r\n            return;\r\n        }\r\n\r\n        var selects = container.querySelectorAll('select');\r\n        selects.forEach(function(select) {\r\n            try {\r\n                var firstOption = select.querySelector('option[selected]');\r\n                if (firstOption) {\r\n                    select.value = firstOption.value;\r\n                } else if (select.options.length > 0) {\r\n                    select.value = select.options[0].value;\r\n                }\r\n            } catch(e) { \/* Ignorer *\/ }\r\n        });\r\n\r\n        var inputs = container.querySelectorAll('input');\r\n        inputs.forEach(function(input) {\r\n            try {\r\n                var defaultValue = input.getAttribute('value') || '';\r\n                if (input.type === 'number' || input.type === 'text') {\r\n                    input.value = defaultValue || '';\r\n                } else if (input.type === 'checkbox' || input.type === 'radio') {\r\n                    var defaultChecked = input.getAttribute('checked');\r\n                    input.checked = (defaultChecked !== null);\r\n                }\r\n            } catch(e) { \/* Ignorer *\/ }\r\n        });\r\n\r\n        var resultDiv = container.querySelector('#resultat');\r\n        if (resultDiv) resultDiv.style.display = 'none';\r\n\r\n        var detailDiv = container.querySelector('#detail');\r\n        if (detailDiv) detailDiv.style.display = 'none';\r\n\r\n        var erreurDiv = container.querySelector('#erreur');\r\n        if (erreurDiv) erreurDiv.style.display = 'none';\r\n\r\n        var valueSpans = container.querySelectorAll('.sim-result-value span, #capitalFinal, #interets, #totalVersements, #irppValue, #pmValue, #maladie_primeTotale, #maladie_amo, #maladie_complementaire, #auto_primeValue');\r\n        valueSpans.forEach(function(span) {\r\n            try { span.textContent = '0.00'; } catch(e) { \/* Ignorer *\/ }\r\n        });\r\n\r\n        var detailBodies = container.querySelectorAll('#detailBody, #maladie_detailBody, #auto_detailBody');\r\n        detailBodies.forEach(function(body) {\r\n            try { body.innerHTML = ''; } catch(e) { \/* Ignorer *\/ }\r\n        });\r\n\r\n        var btn = container.querySelector('.sim-calc-btn');\r\n        if (btn) {\r\n            try {\r\n                btn.disabled = false;\r\n                btn.innerHTML = btn.getAttribute('data-original-text') || 'Calculer';\r\n                container.classList.remove('loading');\r\n            } catch(e) { \/* Ignorer *\/ }\r\n        }\r\n\r\n        toggleFieldsDirect(container);\r\n    }\r\n\r\n    \/\/ ================================================\r\n    \/\/ INITIALISATION DU SIMULATEUR\r\n    \/\/ ================================================\r\n\r\n    function initSimulatorInModal(uniqueId, simType) {\r\n        var container = document.getElementById('sim-' + uniqueId);\r\n        var modal = document.getElementById('modal-' + uniqueId);\r\n        \r\n        if (!container) {\r\n            console.error('Conteneur non trouve:', uniqueId);\r\n            return;\r\n        }\r\n\r\n        if (!simType && modal) {\r\n            simType = modal.dataset.simType || 'auto';\r\n        }\r\n\r\n        var oldScripts = container.querySelectorAll('script');\r\n        oldScripts.forEach(function(s) {\r\n            if (s.id && s.id.startsWith('js-')) {\r\n                s.remove();\r\n            }\r\n        });\r\n\r\n        var scriptTag = document.getElementById('js-' + uniqueId);\r\n        if (scriptTag) {\r\n            var scriptContent = scriptTag.textContent;\r\n            scriptTag.remove();\r\n            \r\n            try {\r\n                var newScript = document.createElement('script');\r\n                newScript.textContent = scriptContent;\r\n                newScript.id = 'js-exec-' + uniqueId;\r\n                container.appendChild(newScript);\r\n            } catch (e) {\r\n                console.error('Erreur script:', e);\r\n            }\r\n        }\r\n\r\n        setTimeout(function() {\r\n            var btn = container.querySelector('.sim-calc-btn');\r\n            if (btn) {\r\n                btn.setAttribute('data-original-text', btn.innerHTML);\r\n                var newBtn = btn.cloneNode(true);\r\n                btn.parentNode.replaceChild(newBtn, btn);\r\n                \r\n                newBtn.addEventListener('click', function(e) {\r\n                    e.preventDefault();\r\n                    \r\n                    switch(simType) {\r\n                        case 'maladie':\r\n                            if (typeof window.calculerMaladie === 'function') {\r\n                                window.calculerMaladie(e);\r\n                            } else {\r\n                                executerCalculMaladieDirect(container);\r\n                            }\r\n                            break;\r\n                        case 'provision':\r\n                            if (typeof window.calculerProvision === 'function') {\r\n                                window.calculerProvision(e);\r\n                            } else {\r\n                                executerCalculProvisionDirect(container);\r\n                            }\r\n                            break;\r\n                        case 'epargne':\r\n                            if (typeof window.calculerEpargne === 'function') {\r\n                                window.calculerEpargne(e);\r\n                            } else {\r\n                                executerCalculEpargneDirect(container);\r\n                            }\r\n                            break;\r\n                        case 'irpp':\r\n                            if (typeof window.calculerIRPP === 'function') {\r\n                                window.calculerIRPP(e);\r\n                            } else {\r\n                                executerCalculIRPPDirect(container);\r\n                            }\r\n                            break;\r\n                        default:\r\n                            if (typeof window.calculerPrimeAuto === 'function') {\r\n                                window.calculerPrimeAuto(e);\r\n                            } else {\r\n                                executerCalculAutoDirect(container);\r\n                            }\r\n                    }\r\n                });\r\n            }\r\n\r\n            \/\/ Appel initial du masquage\r\n            toggleFieldsDirect(container);\r\n\r\n            \/\/ \u00c9couteurs pour le masquage (Auto)\r\n            var usageSelect = container.querySelector('#auto_usage');\r\n            if (usageSelect) {\r\n                var newUsageSelect = usageSelect.cloneNode(true);\r\n                usageSelect.parentNode.replaceChild(newUsageSelect, usageSelect);\r\n                newUsageSelect.addEventListener('change', function() {\r\n                    toggleFieldsDirect(container);\r\n                });\r\n            }\r\n\r\n            \/\/ \u00c9couteurs pour le masquage (IRPP)\r\n            container.querySelectorAll('input[name=\"job\"], input[name=\"regime\"], input[name=\"situation\"]').forEach(function(input) {\r\n                input.addEventListener('change', function() {\r\n                    toggleFieldsDirect(container);\r\n                });\r\n            });\r\n\r\n            container.querySelectorAll('input, select').forEach(function(input) {\r\n                input.addEventListener('keypress', function(e) {\r\n                    if (e.key === 'Enter') {\r\n                        e.preventDefault();\r\n                        var btn = container.querySelector('.sim-calc-btn');\r\n                        if (btn) btn.click();\r\n                    }\r\n                });\r\n            });\r\n        }, 400);\r\n    }\r\n\r\n    \/\/ ================================================\r\n    \/\/ GESTION DES CHAMPS DYNAMIQUES (CORRIG\u00c9E)\r\n    \/\/ ================================================\r\n\r\n    function toggleFieldsDirect(container) {\r\n        if (!container) return;\r\n        \r\n        \/\/ D\u00e9tection du type de simulateur\r\n        var isMaladie = container.querySelector('#maladie_age') !== null;\r\n        var isAuto = container.querySelector('#auto_usage') !== null;\r\n        var isIrpp = container.querySelector('#Salaire') !== null;\r\n        var isProvision = container.querySelector('#Capital') !== null;\r\n        var isEpargne = container.querySelector('#capitalInitial') !== null;\r\n        \r\n        if (isMaladie) {\r\n            \/\/ Maladie : tous les champs sont visibles\r\n            return;\r\n        }\r\n        \r\n        if (isAuto) {\r\n            var usageSelect = container.querySelector('#auto_usage');\r\n            if (!usageSelect) return;\r\n            var usage = usageSelect.value;\r\n\r\n            var puissanceGroup = container.querySelector('#auto_groupePuissance');\r\n            if (puissanceGroup) {\r\n                puissanceGroup.style.display = (usage === 'machineAgricole' || usage === 'deuxRoues') ? 'none' : 'flex';\r\n            }\r\n\r\n            var poidsGroup = container.querySelector('#auto_groupePoidsTotal');\r\n            if (poidsGroup) {\r\n                poidsGroup.style.display = (usage === 'machineAgricole' || usage === 'deuxRoues') ? 'none' : 'flex';\r\n            }\r\n\r\n            var chargeGroup = container.querySelector('#auto_groupeChargeUtile');\r\n            if (chargeGroup) {\r\n                chargeGroup.style.display = (usage === 'transportTiers' || usage === 'agricole') ? 'flex' : 'none';\r\n            }\r\n\r\n            var machineGroup = container.querySelector('#auto_groupeTypeMachine');\r\n            if (machineGroup) {\r\n                machineGroup.style.display = (usage === 'machineAgricole') ? 'flex' : 'none';\r\n            }\r\n\r\n            var cylindreeGroup = container.querySelector('#auto_groupeCylindree');\r\n            if (cylindreeGroup) {\r\n                cylindreeGroup.style.display = (usage === 'deuxRoues') ? 'flex' : 'none';\r\n            }\r\n            return;\r\n        }\r\n        \r\n        if (isIrpp) {\r\n            var job = 0;\r\n            var jobRadios = container.querySelectorAll('input[name=\"job\"]');\r\n            jobRadios.forEach(function(r) {\r\n                if (r.checked) job = parseInt(r.value);\r\n            });\r\n            \r\n            var situation = 0;\r\n            var situationRadios = container.querySelectorAll('input[name=\"situation\"]');\r\n            situationRadios.forEach(function(r) {\r\n                if (r.checked) situation = parseInt(r.value);\r\n            });\r\n            \r\n            \/\/ R\u00e9gime\r\n            var regimeGroup = container.querySelector('#regimeR') ? container.querySelector('#regimeR').closest('.sim-group') : null;\r\n            if (regimeGroup) {\r\n                regimeGroup.style.display = (job === 0 || job === 1) ? 'none' : 'flex';\r\n            }\r\n            \r\n            \/\/ CA\r\n            var caGroup = container.querySelector('#CA') ? container.querySelector('#CA').closest('.sim-group') : null;\r\n            if (caGroup) {\r\n                caGroup.style.display = (job === 0 || job === 1) ? 'none' : 'flex';\r\n            }\r\n            \r\n            \/\/ Enfants\r\n            var enfantsGroup = container.querySelector('#NbrEnfants') ? container.querySelector('#NbrEnfants').closest('.sim-group') : null;\r\n            if (enfantsGroup) {\r\n                enfantsGroup.style.display = (situation === 0) ? 'none' : 'flex';\r\n            }\r\n            \r\n            \/\/ Boursiers\r\n            var boursiersGroup = container.querySelector('#NbrBoursiers') ? container.querySelector('#NbrBoursiers').closest('.sim-group') : null;\r\n            if (boursiersGroup) {\r\n                boursiersGroup.style.display = (situation === 0) ? 'none' : 'flex';\r\n            }\r\n            \r\n            \/\/ Non Boursiers\r\n            var nonBoursiersGroup = container.querySelector('#NbrNonBoursiers') ? container.querySelector('#NbrNonBoursiers').closest('.sim-group') : null;\r\n            if (nonBoursiersGroup) {\r\n                nonBoursiersGroup.style.display = (situation === 0) ? 'none' : 'flex';\r\n            }\r\n            \r\n            \/\/ R\u00e9initialiser les valeurs si masqu\u00e9\r\n            if (job === 0 || job === 1) {\r\n                var caInput = container.querySelector('#CA');\r\n                if (caInput) caInput.value = 0;\r\n            }\r\n            \r\n            if (situation === 0) {\r\n                var nbrEnfants = container.querySelector('#NbrEnfants');\r\n                var nbrBoursiers = container.querySelector('#NbrBoursiers');\r\n                var nbrNonBoursiers = container.querySelector('#NbrNonBoursiers');\r\n                if (nbrEnfants) nbrEnfants.value = 0;\r\n                if (nbrBoursiers) nbrBoursiers.value = 0;\r\n                if (nbrNonBoursiers) nbrNonBoursiers.value = 0;\r\n            }\r\n            return;\r\n        }\r\n        \r\n        if (isProvision || isEpargne) {\r\n            \/\/ Tous les champs sont visibles\r\n            return;\r\n        }\r\n    }\r\n\r\n    \/\/ ================================================\r\n    \/\/ FALLBACKS - EPARGNE\r\n    \/\/ ================================================\r\n\r\n    function executerCalculEpargneDirect(container) {\r\n        try {\r\n            var capitalInit = parseFloat(container.querySelector('#capitalInitial').value) || 10000;\r\n            var versement = parseFloat(container.querySelector('#versementMensuel').value) || 500;\r\n            var taux = parseFloat(container.querySelector('#tauxAnnuel').value) \/ 100 || 0.045;\r\n            var dureeAn = parseInt(container.querySelector('#dureeAnnees').value) || 10;\r\n            var fraisSouscription = parseFloat(container.querySelector('#fraisEntree').value) \/ 100 || 0;\r\n            var fraisGestion = parseFloat(container.querySelector('#fraisGestionAnnuel').value) \/ 100 || 0.0075;\r\n            \r\n            if (isNaN(capitalInit) || capitalInit < 0) throw new Error('Capital initial invalide');\r\n            if (isNaN(versement) || versement < 0) throw new Error('Versement invalide');\r\n            if (isNaN(taux) || taux < 0 || taux > 0.20) throw new Error('Taux invalide (Ref: Art.5 du Code des Assurances)');\r\n            if (isNaN(dureeAn) || dureeAn < 1 || dureeAn > 50) throw new Error('Duree invalide');\r\n            if (isNaN(fraisSouscription) || fraisSouscription < 0 || fraisSouscription > 0.10) throw new Error('Frais de souscription invalides (Ref: Arrete 27\/02\/2001)');\r\n            if (isNaN(fraisGestion) || fraisGestion < 0 || fraisGestion > 0.05) throw new Error('Frais de gestion invalides (Ref: Arrete 27\/02\/2001)');\r\n            \r\n            var capital = capitalInit * (1 - fraisSouscription);\r\n            var tauxMensuel = taux \/ 12;\r\n            var fraisGestionMensuel = fraisGestion \/ 12;\r\n            var totalVersements = capitalInit;\r\n            var totalInterets = 0;\r\n            var details = [];\r\n            \r\n            for (var annee = 1; annee <= dureeAn; annee++) {\r\n                var capitalDebut = capital;\r\n                var versementsAnnee = 0;\r\n                var interetsAnnee = 0;\r\n                \r\n                for (var mois = 1; mois <= 12; mois++) {\r\n                    capital += versement;\r\n                    versementsAnnee += versement;\r\n                    totalVersements += versement;\r\n                    \r\n                    var interets = capital * tauxMensuel;\r\n                    capital += interets;\r\n                    interetsAnnee += interets;\r\n                    totalInterets += interets;\r\n                    \r\n                    var fraisMois = capital * fraisGestionMensuel;\r\n                    capital -= fraisMois;\r\n                }\r\n                \r\n                details.push({\r\n                    annee: annee,\r\n                    capitalDebut: capitalDebut,\r\n                    versements: versementsAnnee,\r\n                    interets: interetsAnnee,\r\n                    capitalFin: capital\r\n                });\r\n            }\r\n            \r\n            container.querySelector('#capitalFinal').textContent = capital.toFixed(2);\r\n            container.querySelector('#interets').textContent = totalInterets.toFixed(2);\r\n            container.querySelector('#totalVersements').textContent = totalVersements.toFixed(2);\r\n            \r\n            var detailBody = container.querySelector('#detailBody');\r\n            if (detailBody) {\r\n                detailBody.innerHTML = '';\r\n                details.forEach(function(d) {\r\n                    var row = document.createElement('tr');\r\n                    row.innerHTML = '<td>' + d.annee + '<\/td><td>' + d.capitalDebut.toFixed(2) + '<\/td><td>' + d.versements.toFixed(2) + '<\/td><td>' + d.interets.toFixed(2) + '<\/td><td>' + d.capitalFin.toFixed(2) + '<\/td>';\r\n                    detailBody.appendChild(row);\r\n                });\r\n            }\r\n            \r\n            container.querySelector('#resultat').style.display = 'block';\r\n            container.querySelector('#detail').style.display = 'block';\r\n            container.querySelector('#erreur').style.display = 'none';\r\n            \r\n        } catch (error) {\r\n            container.querySelector('#erreurMessage').textContent = error.message;\r\n            container.querySelector('#erreur').style.display = 'block';\r\n            container.querySelector('#resultat').style.display = 'none';\r\n            container.querySelector('#detail').style.display = 'none';\r\n        }\r\n    }\r\n\r\n    \/\/ ================================================\r\n    \/\/ FALLBACKS - MALADIE\r\n    \/\/ ================================================\r\n\r\n    function executerCalculMaladieDirect(container) {\r\n        try {\r\n            var ageValue = container.querySelector('#maladie_age').value;\r\n            var statut = container.querySelector('#maladie_statut').value;\r\n            var salaire = parseFloat(container.querySelector('#maladie_salaire').value) || 0;\r\n            var personnes = parseInt(container.querySelector('#maladie_nombre_personnes').value) || 0;\r\n            var formule = container.querySelector('#maladie_formule').value;\r\n            var franchise = parseFloat(container.querySelector('#maladie_franchise').value) || 0;\r\n            var dentaire = container.querySelector('#maladie_dentaire').value;\r\n            var optique = container.querySelector('#maladie_optique').value;\r\n            var hosp = container.querySelector('#maladie_hospitalisation').value;\r\n            var medoc = container.querySelector('#maladie_medicaments').value;\r\n            var tauxTech = parseFloat(container.querySelector('#maladie_taux_technique').value) || 3.0;\r\n            var fraisGestion = parseFloat(container.querySelector('#maladie_frais_gestion').value) || 0.75;\r\n\r\n            if (isNaN(salaire) || salaire < 0) throw new Error('Salaire invalide');\r\n            if (isNaN(personnes) || personnes < 0 || personnes > 10) throw new Error('Nombre de personnes invalide');\r\n\r\n            var ageMap = { '18': 18, '30': 30, '40': 40, '55': 55, '70': 70 };\r\n            var age = ageMap[ageValue] || 30;\r\n            \r\n            var tauxAMO = 6.75;\r\n            if (statut === 'independant') {\r\n                tauxAMO = 6.75;\r\n            } else if (statut === 'retraite') {\r\n                tauxAMO = 4.0;\r\n            } else if (statut === 'sans_emploi') {\r\n                tauxAMO = 0;\r\n            }\r\n            \r\n            var assiette = Math.max(0, salaire * 0.95);\r\n            var amoAnnuel = assiette * (tauxAMO \/ 100) * 12;\r\n            \r\n            var coeffAge = { 18: 0.6, 30: 0.8, 40: 1.0, 55: 1.4, 70: 1.9 }[age] || 1.0;\r\n            var coeffPersonnes = { 0: 1.0, 1: 1.5, 2: 1.9, 3: 2.3, 4: 2.7 }[personnes] || 1.0;\r\n            var coeffFormule = { base: 1.0, standard: 1.6, premium: 2.4 }[formule] || 1.0;\r\n            var coeffFranchise = { 0: 1.2, 50: 1.05, 100: 0.95, 200: 0.85 }[franchise] || 1.0;\r\n            var coeffDentaire = dentaire === 'oui' ? 1.15 : 1.0;\r\n            var coeffOptique = optique === 'oui' ? 1.12 : 1.0;\r\n            var coeffHosp = { standard: 1.0, semi: 1.2, privee: 1.45 }[hosp] || 1.0;\r\n            var coeffMedoc = medoc === 'renforce' ? 1.15 : 1.0;\r\n            \r\n            var coeffTotal = coeffAge * coeffPersonnes * coeffFormule * coeffFranchise * \r\n                             coeffDentaire * coeffOptique * coeffHosp * coeffMedoc;\r\n            \r\n            var complementaire = 200 * coeffTotal;\r\n            var primeTotale = amoAnnuel + complementaire;\r\n\r\n            container.querySelector('#maladie_primeTotale').textContent = primeTotale.toFixed(2);\r\n            container.querySelector('#maladie_amo').textContent = amoAnnuel.toFixed(2);\r\n            container.querySelector('#maladie_complementaire').textContent = complementaire.toFixed(2);\r\n\r\n            container.querySelector('#resultat').style.display = 'block';\r\n            container.querySelector('#detail').style.display = 'block';\r\n            container.querySelector('#erreur').style.display = 'none';\r\n\r\n        } catch (error) {\r\n            container.querySelector('#maladie_erreurMessage').textContent = error.message;\r\n            container.querySelector('#erreur').style.display = 'block';\r\n            container.querySelector('#resultat').style.display = 'none';\r\n            container.querySelector('#detail').style.display = 'none';\r\n        }\r\n    }\r\n\r\n    \/\/ ================================================\r\n    \/\/ FALLBACKS - PROVISION\r\n    \/\/ ================================================\r\n\r\n    function executerCalculProvisionDirect(container) {\r\n        try {\r\n            var capital = parseFloat(container.querySelector('#Capital').value) || 100000;\r\n            var age = parseInt(container.querySelector('#x').value) || 30;\r\n            var duree = parseInt(container.querySelector('#Duree_mois').value) || 120;\r\n            var tauxTech = parseFloat(container.querySelector('#Taux_technique').value) || 0.03;\r\n            var frais = parseFloat(container.querySelector('#FG').value) || 0.005;\r\n            \r\n            if (isNaN(capital) || capital <= 0) throw new Error('Capital invalide');\r\n            if (isNaN(age) || age < 18 || age > 105) throw new Error('Age invalide');\r\n            if (isNaN(duree) || duree <= 0 || duree > 600) throw new Error('Duree invalide');\r\n            \r\n            var facteurTech = Math.pow((1 \/ (1 + tauxTech)), 1 \/ 12);\r\n            var resultat = capital * facteurTech * (1 - Math.pow(facteurTech, duree)) \/ (1 - facteurTech);\r\n            resultat = resultat * (age \/ 100);\r\n            \r\n            container.querySelector('#pmValue').textContent = resultat.toFixed(2);\r\n            container.querySelector('#resultat').style.display = 'block';\r\n            container.querySelector('#erreur').style.display = 'none';\r\n            \r\n        } catch (error) {\r\n            container.querySelector('#erreurMessage').textContent = error.message;\r\n            container.querySelector('#erreur').style.display = 'block';\r\n            container.querySelector('#resultat').style.display = 'none';\r\n        }\r\n    }\r\n\r\n    \/\/ ================================================\r\n    \/\/ FALLBACKS - AUTO (TVA SUPPRIM\u00c9E ICI AUSSI)\r\n    \/\/ ================================================\r\n\r\n    function executerCalculAutoDirect(container) {\r\n        try {\r\n            var usage = container.querySelector('#auto_usage').value;\r\n            var puissance = 4;\r\n            var poidsTotal = 0;\r\n            var chargeUtile = 0;\r\n            var typeMachine = 'Type II';\r\n            var cylindree = 125;\r\n\r\n            var puissanceSelect = container.querySelector('#auto_puissance');\r\n            if (puissanceSelect && usage !== 'machineAgricole' && usage !== 'deuxRoues') {\r\n                puissance = parseInt(puissanceSelect.value) || 4;\r\n            }\r\n\r\n            var poidsInput = container.querySelector('#auto_poidsTotal');\r\n            if (poidsInput && usage !== 'machineAgricole' && usage !== 'deuxRoues') {\r\n                poidsTotal = parseFloat(poidsInput.value) || 0;\r\n            }\r\n\r\n            var chargeInput = container.querySelector('#auto_chargeUtile');\r\n            if (chargeInput && (usage === 'transportTiers' || usage === 'agricole')) {\r\n                chargeUtile = parseFloat(chargeInput.value) || 0;\r\n            }\r\n\r\n            var machineSelect = container.querySelector('#auto_typeMachine');\r\n            if (machineSelect && usage === 'machineAgricole') {\r\n                typeMachine = machineSelect.value;\r\n            }\r\n\r\n            var cylindreeInput = container.querySelector('#auto_cylindree');\r\n            if (cylindreeInput && usage === 'deuxRoues') {\r\n                cylindree = parseInt(cylindreeInput.value) || 125;\r\n            }\r\n\r\n            \/\/ TVA SUPPRIM\u00c9E ICI, uniquement les frais\r\n            var frais = parseFloat(container.querySelector('#auto_frais').value) || 0;\r\n\r\n            var tarifs = {\r\n                affaires: { '2':94, '3-4':110, '5-6':140, '7-10':170, '11-14':220, '15+':264 },\r\n                transportPropreLeger: { '2':145, '3-4':171, '5-6':214, '7-10':262, '11-14':338, '15+':405 },\r\n                agricoleLeger: { '2':84, '3-4':97, '5-6':122, '7-10':150, '11-14':193, '15+':232 },\r\n                machines: { 'Type I - Roues caoutchouc':42, 'Type I - Chenilles':31, 'Type II':117, 'Type III - Roues caoutchouc':84, 'Type III - Chenilles':59, 'Type IV':177 },\r\n                deuxRoues: { '\u2264125':62, '>125':168 }\r\n            };\r\n\r\n            function getTarifParCV(table, cv) {\r\n                if (cv <= 2) return table['2'];\r\n                if (cv <= 4) return table['3-4'];\r\n                if (cv <= 6) return table['5-6'];\r\n                if (cv <= 10) return table['7-10'];\r\n                if (cv <= 14) return table['11-14'];\r\n                return table['15+'];\r\n            }\r\n\r\n            var primeHT = 0;\r\n            var detail = '';\r\n\r\n            switch (usage) {\r\n                case 'affaires':\r\n                    primeHT = getTarifParCV(tarifs.affaires, puissance);\r\n                    detail = 'Usage Affaires - ' + puissance + ' CV';\r\n                    break;\r\n                case 'transportPropre':\r\n                    if (poidsTotal <= 3.5) {\r\n                        primeHT = getTarifParCV(tarifs.transportPropreLeger, puissance);\r\n                        detail = 'Transport propre - ' + puissance + ' CV, ' + poidsTotal.toFixed(1) + ' T (\u2264 3.5T)';\r\n                    } else {\r\n                        primeHT = 257 + (poidsTotal - 3.5) * 21;\r\n                        detail = 'Transport propre - ' + puissance + ' CV, ' + poidsTotal.toFixed(1) + ' T (> 3.5T)';\r\n                    }\r\n                    break;\r\n                case 'transportTiers':\r\n                    if (poidsTotal <= 3.5) {\r\n                        primeHT = getTarifParCV(tarifs.transportPropreLeger, puissance);\r\n                        detail = 'Transport tiers - ' + puissance + ' CV, ' + poidsTotal.toFixed(1) + ' T (\u2264 3.5T)';\r\n                    } else {\r\n                        primeHT = 250 + (chargeUtile - 3.5) * 4;\r\n                        detail = 'Transport tiers - ' + puissance + ' CV, ' + poidsTotal.toFixed(1) + ' T, charge utile ' + chargeUtile.toFixed(1) + ' T';\r\n                    }\r\n                    break;\r\n                case 'agricole':\r\n                    if (poidsTotal <= 3.5) {\r\n                        primeHT = getTarifParCV(tarifs.agricoleLeger, puissance);\r\n                        detail = 'Usage agricole - ' + puissance + ' CV, ' + poidsTotal.toFixed(1) + ' T (\u2264 3.5T)';\r\n                    } else {\r\n                        var base = getTarifParCV(tarifs.agricoleLeger, puissance);\r\n                        primeHT = base + (chargeUtile - 3.5) * 13;\r\n                        detail = 'Usage agricole - ' + puissance + ' CV, ' + poidsTotal.toFixed(1) + ' T, charge utile ' + chargeUtile.toFixed(1) + ' T';\r\n                    }\r\n                    break;\r\n                case 'machineAgricole':\r\n                    primeHT = tarifs.machines[typeMachine] || 0;\r\n                    detail = 'Machine agricole - ' + typeMachine;\r\n                    break;\r\n                case 'deuxRoues':\r\n                    primeHT = cylindree <= 125 ? tarifs.deuxRoues['\u2264125'] : tarifs.deuxRoues['>125'];\r\n                    detail = 'Deux roues - ' + cylindree + ' CC';\r\n                    break;\r\n                default:\r\n                    throw new Error('Usage non reconnu');\r\n            }\r\n\r\n            \/\/ Calcul du total sans TVA\r\n            var primeTotal = primeHT + frais;\r\n\r\n            container.querySelector('#auto_primeValue').textContent = primeHT.toFixed(2);\r\n            container.querySelector('#resultat').style.display = 'block';\r\n            container.querySelector('#detail').style.display = 'block';\r\n            container.querySelector('#erreur').style.display = 'none';\r\n\r\n            var detailBody = container.querySelector('#auto_detailBody');\r\n            detailBody.innerHTML = '';\r\n            \r\n            var rows = [['Usage', detail]];\r\n\r\n            if (usage === 'deuxRoues') {\r\n                rows.push(['Cylindree', cylindree + ' CC']);\r\n            } else if (usage === 'machineAgricole') {\r\n                rows.push(['Type de machine', typeMachine]);\r\n            } else {\r\n                rows.push(['Puissance fiscale', puissance + ' CV']);\r\n                rows.push(['Poids total', poidsTotal.toFixed(1) + ' T']);\r\n                if (usage === 'transportTiers' || usage === 'agricole') {\r\n                    rows.push(['Charge utile', chargeUtile.toFixed(1) + ' T']);\r\n                }\r\n            }\r\n\r\n            rows.push(['Prime annuelle HT', primeHT.toFixed(2) + ' DT']);\r\n            rows.push(['Frais supplementaires', frais.toFixed(2) + ' DT']);\r\n            \r\n            rows.forEach(function(r) {\r\n                var row = document.createElement('tr');\r\n                row.innerHTML = '<td>' + r[0] + '<\/td><td style=\"text-align:right;\">' + r[1] + '<\/td>';\r\n                detailBody.appendChild(row);\r\n            });\r\n            \r\n            var totalRow = document.createElement('tr');\r\n            totalRow.style.borderTop = '2px solid #8B0000';\r\n            totalRow.style.fontWeight = 'bold';\r\n            totalRow.style.background = '#f0f0f0';\r\n            totalRow.innerHTML = '<td><strong>Total<\/strong><\/td><td style=\"text-align:right;\"><strong>' + primeTotal.toFixed(2) + ' DT<\/strong><\/td>';\r\n            detailBody.appendChild(totalRow);\r\n\r\n        } catch (error) {\r\n            container.querySelector('#auto_erreurMessage').textContent = error.message;\r\n            container.querySelector('#erreur').style.display = 'block';\r\n            container.querySelector('#resultat').style.display = 'none';\r\n            container.querySelector('#detail').style.display = 'none';\r\n        }\r\n    }\r\n\r\n    \/\/ ================================================\r\n    \/\/ FALLBACKS - IRPP\r\n    \/\/ ================================================\r\n\r\n    function executerCalculIRPPDirect(container) {\r\n        try {\r\n            var job = 0;\r\n            var jobRadios = container.querySelectorAll('input[name=\"job\"]');\r\n            jobRadios.forEach(function(r) {\r\n                if (r.checked) job = parseInt(r.value);\r\n            });\r\n            \r\n            var regime = 0;\r\n            var regimeRadios = container.querySelectorAll('input[name=\"regime\"]');\r\n            regimeRadios.forEach(function(r) {\r\n                if (r.checked) regime = parseInt(r.value);\r\n            });\r\n            \r\n            var situation = 0;\r\n            var situationRadios = container.querySelectorAll('input[name=\"situation\"]');\r\n            situationRadios.forEach(function(r) {\r\n                if (r.checked) situation = parseInt(r.value);\r\n            });\r\n            \r\n            var salaire = parseFloat(container.querySelector('#Salaire').value) || 0;\r\n            var ca = parseFloat(container.querySelector('#CA').value) || 0;\r\n            var nbrParents = parseInt(container.querySelector('#NbrParents').value) || 0;\r\n            var nbrEnfants = parseInt(container.querySelector('#NbrEnfants').value) || 0;\r\n            var nbrBoursiers = parseInt(container.querySelector('#NbrBoursiers').value) || 0;\r\n            var nbrNonBoursiers = parseInt(container.querySelector('#NbrNonBoursiers').value) || 0;\r\n            var mntAssurance = parseFloat(container.querySelector('#_mnt_assrvie').value) || 0;\r\n\r\n            if (isNaN(salaire) || salaire < 0) throw new Error(\"Le revenu annuel doit etre un nombre positif\");\r\n            if (isNaN(ca) || ca < 0) throw new Error(\"Le CA doit etre un nombre positif\");\r\n            \r\n            if (situation === 0) {\r\n                nbrEnfants = 0;\r\n                nbrBoursiers = 0;\r\n                nbrNonBoursiers = 0;\r\n            }\r\n            \r\n            if (job === 0 || job === 1) {\r\n                regime = 0;\r\n                ca = 0;\r\n            }\r\n            \r\n            if (job === 2 && regime === 0) {\r\n                var caMin = salaire * 1.05;\r\n                if (ca < caMin) ca = caMin;\r\n            }\r\n            \r\n            if (job === 2 && regime === 1) {\r\n                salaire = ca * 0.8;\r\n            }\r\n\r\n            \/\/ Revenu net imposable\r\n            var revenuBrut = salaire;\r\n            \r\n            if (job == 0) {\r\n                revenuBrut = salaire - Math.min(2000, salaire * 0.1);\r\n            } else if (job == 1) {\r\n                revenuBrut = salaire - Math.min(2000, salaire * 0.25);\r\n            } else if (job == 2) {\r\n                if (regime == 0) {\r\n                    revenuBrut = salaire;\r\n                } else {\r\n                    revenuBrut = ca * 0.8;\r\n                }\r\n            }\r\n            \r\n            \/\/ D\u00e9ductions\r\n            var deductions = 0;\r\n            \r\n            if (situation === 1 || situation === 3 || (situation === 2 && nbrEnfants > 0)) {\r\n                deductions += 300;\r\n            }\r\n            \r\n            for (var i = 0; i < nbrParents; i++) {\r\n                deductions += Math.min(revenuBrut * 0.05, 450);\r\n            }\r\n            \r\n            var nbrEnfantsValides = Math.min(nbrEnfants, 4);\r\n            deductions += nbrEnfantsValides * 100;\r\n            deductions += nbrBoursiers * 1000;\r\n            deductions += nbrNonBoursiers * 1000;\r\n            \r\n            var revenuApresDeductions = Math.max(revenuBrut - deductions, 0);\r\n            \r\n            \/\/ Assurance vie\r\n            var plafondAssurance = Math.min(mntAssurance, 100000);\r\n            var revenuApresAssurance = Math.max(revenuApresDeductions - plafondAssurance, 0);\r\n            \r\n            \/\/ Calcul de l'imp\u00f4t\r\n            function calculerImpotParTranches(revenu) {\r\n                if (revenu <= 0) return 0;\r\n                \r\n                var tranches = [\r\n                    { limite: 5000, taux: 0.00 },\r\n                    { limite: 10000, taux: 0.15 },\r\n                    { limite: 20000, taux: 0.25 },\r\n                    { limite: 30000, taux: 0.30 },\r\n                    { limite: 40000, taux: 0.33 },\r\n                    { limite: 50000, taux: 0.36 },\r\n                    { limite: 70000, taux: 0.38 },\r\n                    { limite: Infinity, taux: 0.40 }\r\n                ];\r\n                \r\n                var impot = 0;\r\n                var revenuRestant = revenu;\r\n                var tranchePrecedente = 0;\r\n                \r\n                for (var i = 0; i < tranches.length; i++) {\r\n                    var montantTranche = Math.min(revenuRestant, tranches[i].limite - tranchePrecedente);\r\n                    if (montantTranche > 0) {\r\n                        impot += montantTranche * tranches[i].taux;\r\n                        revenuRestant -= montantTranche;\r\n                    }\r\n                    tranchePrecedente = tranches[i].limite;\r\n                    if (revenuRestant <= 0) break;\r\n                }\r\n                \r\n                return impot;\r\n            }\r\n            \r\n            var imp_av_assrvie = calculerImpotParTranches(revenuApresDeductions);\r\n            var imp_ap_assrvie = calculerImpotParTranches(revenuApresAssurance);\r\n            \r\n            var min_imp = Math.max(imp_av_assrvie * 0.45, ca * 0.002);\r\n            if (imp_ap_assrvie < min_imp && imp_ap_assrvie > 0) {\r\n                imp_ap_assrvie = min_imp;\r\n            }\r\n            \r\n            var tauxEffectif = (revenuApresDeductions > 0) ? (imp_ap_assrvie \/ revenuApresDeductions * 100) : 0;\r\n            \r\n            container.querySelector('#irppValue').textContent = imp_ap_assrvie.toFixed(2);\r\n            container.querySelector('#imp_av_assrvie').textContent = imp_av_assrvie.toFixed(2);\r\n            container.querySelector('#tauxEffectif').textContent = tauxEffectif.toFixed(2);\r\n            \r\n            container.querySelector('#resultat').style.display = 'block';\r\n            container.querySelector('#detail').style.display = 'block';\r\n            container.querySelector('#erreur').style.display = 'none';\r\n\r\n        } catch (error) {\r\n            container.querySelector('#erreurMessage').textContent = error.message;\r\n            container.querySelector('#erreur').style.display = 'block';\r\n            container.querySelector('#resultat').style.display = 'none';\r\n            container.querySelector('#detail').style.display = 'none';\r\n        }\r\n    }\r\n\r\n    \/\/ ================================================\r\n    \/\/ GENERATION DU PDF\r\n    \/\/ ================================================\r\n\r\n    function generatePDF(uniqueId, title) {\r\n        if (!uniqueId || typeof uniqueId !== 'string') return;\r\n        if (!title || typeof title !== 'string') title = 'Simulateur';\r\n        \r\n        var container = document.getElementById('sim-' + uniqueId);\r\n        var modalBody = document.getElementById('modal-body-' + uniqueId);\r\n        \r\n        if (!container || !modalBody) {\r\n            alert('Erreur: Conteneur du simulateur non trouve.');\r\n            return;\r\n        }\r\n\r\n        var btnPdf = modalBody.querySelector('.sim-pdf-btn');\r\n        var btnCalcul = container.querySelector('.sim-calc-btn');\r\n        \r\n        if (btnPdf) btnPdf.style.display = 'none';\r\n        if (btnCalcul) btnCalcul.style.display = 'none';\r\n        \r\n        var titleElement = document.createElement('h2');\r\n        titleElement.textContent = title + ' - Tunisie';\r\n        titleElement.style.textAlign = 'center';\r\n        titleElement.style.margin = '0 0 20px 0';\r\n        titleElement.style.color = '#8B0000';\r\n        titleElement.style.fontSize = '18px';\r\n        titleElement.id = 'sim-pdf-title-' + uniqueId;\r\n        container.insertBefore(titleElement, container.firstChild);\r\n        \r\n        var resultBlock = container.querySelector('.sim-result');\r\n        var form = container.querySelector('form');\r\n        if (resultBlock && form && form.parentNode) {\r\n            form.parentNode.insertBefore(resultBlock, form);\r\n        }\r\n        \r\n        html2canvas(container, { \r\n            scale: 2, \r\n            useCORS: true, \r\n            backgroundColor: '#ffffff',\r\n            allowTaint: true,\r\n            logging: false\r\n        }).then(function(canvas) {\r\n            const imgData = canvas.toDataURL('image\/png');\r\n            const { jsPDF } = window.jspdf;\r\n            const pdf = new jsPDF('p', 'mm', 'a4');\r\n            var pdfWidth = pdf.internal.pageSize.getWidth();\r\n            var pdfHeight = pdf.internal.pageSize.getHeight();\r\n            var imgWidth = canvas.width;\r\n            var imgHeight = canvas.height;\r\n            var ratio = Math.min(pdfWidth \/ imgWidth, pdfHeight \/ imgHeight);\r\n            var imgX = (pdfWidth - imgWidth * ratio) \/ 2;\r\n            var imgY = 0;\r\n            pdf.addImage(imgData, 'PNG', imgX, imgY, imgWidth * ratio, imgHeight * ratio);\r\n            pdf.save(title + ' - Tunisie.pdf');\r\n            \r\n            var tempTitle = document.getElementById('sim-pdf-title-' + uniqueId);\r\n            if (tempTitle) tempTitle.remove();\r\n            if (resultBlock && form && form.parentNode) {\r\n                form.parentNode.appendChild(resultBlock);\r\n            }\r\n            if (btnPdf) btnPdf.style.display = 'inline-block';\r\n            if (btnCalcul) btnCalcul.style.display = 'block';\r\n        }).catch(function(err) {\r\n            console.error(\"Erreur PDF:\", err);\r\n            var tempTitle = document.getElementById('sim-pdf-title-' + uniqueId);\r\n            if (tempTitle) tempTitle.remove();\r\n            if (resultBlock && form && form.parentNode) {\r\n                form.parentNode.appendChild(resultBlock);\r\n            }\r\n            if (btnPdf) btnPdf.style.display = 'inline-block';\r\n            if (btnCalcul) btnCalcul.style.display = 'block';\r\n            alert(\"Erreur lors de la generation du PDF.\");\r\n        });\r\n    }\r\n\r\n    \/\/ ================================================\r\n    \/\/ EXPOSER LES FONCTIONS GLOBALEMENT\r\n    \/\/ ================================================\r\n\r\n    window.openSimModal = openSimModal;\r\n    window.closeSimModal = closeSimModal;\r\n    window.resetSimulator = resetSimulator;\r\n    window.generatePDF = generatePDF;\r\n    window.initSimulatorInModal = initSimulatorInModal;\r\n    window.toggleFieldsDirect = toggleFieldsDirect;\r\n    window.executerCalculMaladieDirect = executerCalculMaladieDirect;\r\n    window.executerCalculProvisionDirect = executerCalculProvisionDirect;\r\n    window.executerCalculEpargneDirect = executerCalculEpargneDirect;\r\n    window.executerCalculAutoDirect = executerCalculAutoDirect;\r\n    window.executerCalculIRPPDirect = executerCalculIRPPDirect;\r\n\r\n    console.log('Simulateurs charges - Version 7.6.1');\r\n    <\/script>\r\n    \n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-52","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/plateforme.risks.ovh\/index.php?rest_route=\/wp\/v2\/pages\/52","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/plateforme.risks.ovh\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/plateforme.risks.ovh\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/plateforme.risks.ovh\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/plateforme.risks.ovh\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=52"}],"version-history":[{"count":2,"href":"https:\/\/plateforme.risks.ovh\/index.php?rest_route=\/wp\/v2\/pages\/52\/revisions"}],"predecessor-version":[{"id":123,"href":"https:\/\/plateforme.risks.ovh\/index.php?rest_route=\/wp\/v2\/pages\/52\/revisions\/123"}],"wp:attachment":[{"href":"https:\/\/plateforme.risks.ovh\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=52"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}